Archive for December 2008
Actualización a ZenPhoto 1.2.2
En cada uno de los portales instalé un sistema de galerías de imágenes diferente para experimentar con ellos. Uno de los que mas me ha gustado por su simplicidad en el manejo es ZenPhoto. Carece de tantas funcionalidades como Gallery2 pero en muchos ambientes es mas que suficiente.
A comienzos de diciembre se liberó la versión 1.2.2 a la cual no había actualizado el portal así que hoy me tomé el tiempo para hacerlo. Estos fueron los pasos seguidos durante la instalación.
Descargar el nuevo paquete de distribución.
$ wget http://www.zenphoto.org/files/zenphoto-1.2.2.zip
Remover la copia de seguridad anterior si existe.
$ rm -rf galeria.old
Renombrar la distribución actual para que se convierta en una copia de seguridad.
$ mv galeria galeria.old
Descomprimir la nueva distribución.
$ unzip zenphoto-1.2.2.zip
Renombrar la distribución fresca para que sea la versión de producción.
$ mv zenphoto galeria
Restaurar los álbumes.
$ cp -rf galeria.old/albums/ galeria/
Restaurar los temas. Se debe reemplazar TEMA por el nombre de cada tema personalizado.
$ cp -rf galeria.old/themes/TEMA galeria/themes
Restaurar el archivo de configuración.
$ cp galeria.old/zp-core/zp-config.php galeria/zp-core
Acceder al sitio para completar el proceso de actualización.
http://SITIO/galeria/zp-core/setup.php
Es posible recibir información acerca de las liberaciones de versiones de ZenPhoto al suscribirse a esta lista de correos: ZenPhoto Announce.
24/12/2008
Convertir archivos archivos APE a MP3 en Linux Ubuntu
Todo en la vida sucede en el último momento cuando ya no hay tiempo. Hoy necesité de urgencia convertir archivos APE (Monkey’s Audio Code) a MP3 para que los pudieran reproducir normalmente. En un búsqueda rápida no pude encontrar ninguna aplicación que realizara fácilmente la conversión. Buscando con Linux encontré varios sitios con algunas sugerencias pero ninguna me funcionó, al menos incialmente. Por eso decidí realizar esta breve compilación de los pasos a realizar para efectuar la conversión.
Obtener la distribución para Debian de Mac. El sitio oficial de este en proyecto en SourceForge fue removido motivo por el cual no es fácil encontrar una distribución de esta aplicación.
$ wget http://members.iinet.net.au/~aidanjm/mac-3.99-u4_b3-1_i386.deb
Instalar el paquete recién descargado.
$ sudo dpkg -i mac-3.99-u4_b3-1_i386.deb
Instalar bchunk sólo si es necesaro separar las pistas de sonido (archivo CUE).
$ sudo apt-get install bchunk
Instalar lame para codificar el archivo MP3.
$ sudo apt-get install lame
Convertir el archivo.ape en wav.
$ mac archivo.ape archivo.wav -d
Separar las pistas según la información el archivo CUE (si es necesario). pista es el prefijo con que se crearan los nombres de los archivos.
$ bchunk -w archivo.wav archivo.cue pista
Codificar el archivo WAV a MP3.
$ lame --preset extreme archivo.wav archivo.mp3
Es posible especificar la información de las etiquetas del MP3 si se desea.
lame --preset extreme --ta "Nombre del Artista" --tl "Nombre del Album" --tg "Genero" archivo.wav archivo.mp3
Para automatizar un poco el proceso, creé un script que ejecutado en un directorio convierte los archivos *.cue a archivos *.mp3. No tiene en cuenta al archivo CUE.
#!/bin/sh
# Convert from APE to WAV
for f in *.ape
do
mac "$f" "$f.wav" -d
done
# Convert from WAV to MP3
for f in *.wav
do
lame --preset extreme "$f" "$f.mp3"
done
# Rename APE.WAV.MP3 to MP3
find . -name '*ape.wav.mp3*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/ape.wav.mp3/mp3/g;'`
mv "${FILE}" "${NEWFILE}"
done
Enlaces:
- Script de conversión de archivos APE a MP3.
http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/12/convertape2mp3.sh
Traducciones desde GTalk bots
Este año Google habilitó el servicio de traducción asistida a través de bots del servicio de GTalk. Para utilizarlos se debe agregar como contacto la dirección del bot y posteriormente aceptarlo como contacto.
Las direcciones de los bots tienen el siguiente formato.
[lenguaje orígen] 2 [lenguaje destino]@bot.talk.google.com
Esto quiere decir que el bot que traduce de español a inglés es es2en@bot.talk.google.com y el que realiza el proceso contrario es en2es@bot.talk.google.com.
Las combinaciones de idiomas disponibles son las siguientes.
- Arabic – English: ar2en en2ar
- Bulgarian – English: bg2en en2bg
- Czech – English: cs2en en2cs
- Danish – English: da2en en2da
- German – English: de2en en2de
- German – French: de2fr fr2de
- Greek – English: el2en en2el
- Spanish – English: es2en en2es
- Finnish – English: fi2en en2fi
- French – English: fr2en en2fr
- Hindi – English: hi2en en2hi
- Croatian – English: hr2en en2hr
- Italian – English: it2en en2it
- Japanese – English: ja2en en2ja
- Korean – English: ko2en en2ko
- Dutch – English: nl2en en2nl
- Norwegian – English: no2en en2no
- Polish – English: pl2en en2pl
- Portuguese – English: pt2en en2pt
- Romanian – English: ro2en en2ro
- Russian – English: ru2en en2ru
- Swedish – English: sv2en en2sv
- Chinese – English: zh2en en2zh
- Traditional Chinese – English: zh-hant2en en2zh-hant
- Traditional Chinese – Chinese: zh-hant2zh zh2zh-hant
Este servicio se encuentra basado en el servicio de traducción de Google.
Enlaces:
- More translation bots!
http://googletalk.blogspot.com/2008/06/more-translation-bots.html
La fábula de la hormiguita felíz
Documentación de CodeIgniter en español
CodeIgniter es un framework MVC para el desarrollo de aplicaciones web. Es una alternativa interesante ya que es útil, facilita el desarrollo pero a su vez es lo suficientemente desacoplado para no obligarle a utilizar nada que no se desee usar. Entre sus ventajas se cuentan su velocidad, su buena documentación, tutoriales y el soporte de una comunidad de tamaño decente.
Si por alguna extraña razón, no es de su agrado la lectura de la documentación en inglés también puede elegir otros idiomas. Encontré que hay dos proyectos que se encuentran traduciendo la documentación al español actualmente.
- Por parte de ConocimientoVirtual se encuentran traduciendo la versión 1.6.3.
http://www.conocimientovirtual.edu.co/descargas.html - Mientras que Miguel Herrero ha iniciado la traducción de la versión 1.7.0.
http://www.4shared.com/file/68349959/a11c291f/spanish_170.html
Para mas información consultar el sitio Wiki de CodeIgniter acerca del estado de los proyectos de traducción.
Utilizando el Wiimote con C#: parte II
Introducción.
Antes de publicar el código fuente del HelloWii, decidí hacer un poco de refactory obteniendo los siguientes productos y conclusiones.
- La clase WiiController que es un recubrimiento (wrapper) de la librería WiimoteLib y que simplifica su acceso. Está desarrollada en C#.
- Se utilizó el patrón observador (interfaz WiiControllerObserver) para permitirle a los interesados registrarse con el control para ser notificados de sus cambios de estado. De igual manera es posible obtener información de este por demanda.
- Si el observador es el mismo componente de UI (Form por ejemplo) es recomendable remover el registro del observador (unregisterObserver) antes de cerrar/destruír la componente/aplicación y evitar así excepciones generadas durante intentos de actualización mientras se cierra el componente.
- Se adaptó la aplicación de demostración para utilizar a un objeto WiiController como interfaz en lugar de utilizar a la librería directamente.
- Con el rediseño se esperaba evitar el problema del cross-threading pero no fue posible.
Como se mencionó no fue posible obviar la situación generada por la ejecución de instrucciones entre distintos hilos: la interfaz de usuario y la librería de acceso al wiimote que genera los problemas y explicación ya fueron expuestos. Sin embargo, revisando el foro de WiimoteProject encontré que es posible indicarle al componente visual de .NET que se encuentre accediendo a la librería (inclusive indirectamente a través de WiiController) que ignore este tipo de accesos ilegales entre hilo al evitando su revisión, esto se logra agregando la siguiente instrucción al constructor del componente.
CheckForIllegalCrossThreadCalls = false;
API de la clase WiiController.
La clase WiiController cuenta con los siguientes métodos.
- public void connect() – Creates the conexion with the wiimote.
- public void disconnect() – Makes the disconnection of the wiimote..
- public bool isConnected() – Checks if the wiimote has been already connected..
- public void refreshStatus(WiimoteState source) – Updates the references to the internal information of the wiimote.
- public void setReportType(WiimoteLib.InputReport type) – Selects the the type of information report that is expected from the controller.
- public float getBattery() – Gets the battery level of the wiimote.
- public String getId() – Gets the ID of the controller.
- public bool[] getAllButtonsStatus() – State of all buttons of the wiimote.
- public bool getButtonStatus(String name) – The status of a button on the wiimote.
- public bool[] getAllLedsStatus() – The status of all leds of the wiimote.
- public bool getLedStatus(int id) – The status of an individual led.
- public void setLeds(bool l1, bool l2, bool l3, bool l4) – Change the state of the wiimote’s leds.
- public void setLeds(bool[] leds) – Change the state of the wiimote’s leds.
- public void turnLed(int index, bool status) – Change the state of an individual led.
- public int[] getAcceleration() – Obtains the acceleration of the wiimote.
- public int getAcceleration(String axis) – Obtains the acceleration of the wiimote.
- public bool isRumbling() – Checks if the rumbling device is active.
- public void rumble(bool status) – Change the state of the wiimote’s rumbling device.
- public bool isObserver(WiiControllerObserver observer) – Checks if an observer is already registered.
- public bool registerObserver(WiiControllerObserver observer) – Register a new observer on the controller.
- public bool unregisterObserver(WiiControllerObserver observer) – Unregister an observer from the controller.
- public bool isExtensionConnected() – Checks if a wiimote’s extension is connected.
- public String getExtensionTypeConnected() – Get the type name of the connected extension.
- public int[] getNunchukAcceleration() – Get the acceleration of the nunchuk extension.
- public int getNunchukAcceleration(String axis) – Get the acceleration of the nunchuk extension.
- public bool[] getAllNunchukButtonsStatus() – Get the state of the buttons on the nunchuk extension.
- public bool getNunchukButtonStatus(String name) – Get the state of a button on the nunchuk extension.
- public int[] getNunchukJoystick() – Get the joystick state on the nunchuk extension.
- public int getNunchukJoystick(String axis) – Get the joystick value on a selected axis from the nunchuk extension.
Para mas información acerca del API de la clase y de su respectiva utilización consulte la documentación del código fuente inmersa en el archivo WiiController.cs y en WiiForm.cs (aplicación de demostración).
Registrar observadores.
Para registrarse como observador de eventos del wiimote la clase debe implementar la interfaz jimezam.wii.controller.WiiControllerObserver. Esta interfaz obliga a que se implementen los siguientes métodos.
- void update() – Invoked when the status of the wiimote is changed.
- void updateExtension() -Invoked when an extension is connected/disconnected to the wiimote.
La manipulación del registro de un observador se realiza utilizando los métodos registerObserver y unregisterObserver de la clase WiiController descritos anteriormente.
Enlaces.
- Fuentes y binarios de la clase WiiController y la aplicación de demostración HelloWii.
http://demo.jorgeivanmeza.com/NET/WiiController/
Selección de Debug/Release en Visual C# Express 2008
Esta semana, gracias a las pruebas con el Wiimote he vuelto a trabajar con C#, esta vez con utilizando el Visual C# Express 2008. Encontré un problema, cuando quise generar la versión final de la aplicación no pude encontrar la opción que me permitiera elegir entre las presentaciones Debug/Release del ejecutable generado.
Buscando en Internet encontré que hay dos formas de hacerlo.
- Presionando F5 se construye el ejecutable en modo Debug, presionando CTRL+F5 se construye el ejecutable en modo Release.
- Si realmente se desea tener visible el menú que le permita seleccionar el modo del ejecutable y la CPU objetivo realice los siguientes pasos.
- Elija el menú Tools > Options.
- Seleccione la casilla de verificación Show all settings en la parte inferior izquierda.
- Seleccione la rama Projects and solutions > General.
- Selecciona la casilla de verificación Show advanced build configurations.
- Presione el botón OK para aceptar los cambios.
Vista rápida a la instalación de OpenSolaris 2008.11
Enlace: Documento en versión PDF.

























