Instalando Koha
Linux
![]()
Koha es una manejador de bibliotecas potente y completo desarrollado en Perl. Tiene una zona de administración y otra zona pública conocida como OPAC. Esta es el proceso de instalación en Debian Squeeze.
El sistema más usado de catalogación en las biblotecas es el Dewey. Una de las grandes ventajas de Koha es que no es necesario capturar los libros, simplemente se busca en el index Z39 del congreso de los Estados Unidos y otras bibliotecas alrededor del mundo y la información se importa a través del estándard MARC21 (un formato XML) que ya incluye la catalogación Dewey.
Descargamos la última versión:
$ wget http://download.koha-community.org/koha-3.00.06.tar.gz
$ tar -zxvf koha-3.00.06.tar.gz
$ cd koha-3.00.06
Instalamos el paquete Perl locale y las librerías Z39 y YAML:
$ sudo apt-get install liblocale-po-perl libnet-z3950-zoom-perl libyaml-libyaml-perl
Instalamos las traducciones de español y francés:
$ cd misc/translator && perl install-code.pl fr-FR es-ES
Instalamos dselect:
$sudo apt-get install dselect
Cargamos los paquetes:
$ sudo dpkg --set-selections < install_misc/debian.packages
Ejecutamos:
$ sudo dselect
Elegir (I)install, luego (C)onfigure y (Q)uit.
Instalamos por CPAN las otras dependencias:
$ sudo cpan MARC::Record Class::Accessor MARC::Charset MARC::File::XML \ Net::Z3950::ZOOM HTML::Template::Pro MARC::Crosswalk::DublinCore \
PDF::Reuse PDF::Reuse::Barcode Data::ICal GD::Barcode::UPCE \
XML::RSS Algorithm::CheckDigits::M43_001 Biblio::EndnoteStyle POE \
Schedule::At DBD::SQLite GD SMS::Send HTTP::OAI IPC::Cmd Text::CSV::Encoded
Nos logeamos dentro de MySQL y creamos la base de datos:
$ mysql -u root -p
mysql> CREATE DATABASE DBKOHA CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql>quit;
Ejecutamos
$ perl Makefile.PL
Escoger los valores por omisión. El usuario y el grupo deben ser www-data para respetar el usuario Apache2 de Debian. Luego ejecutamos:
$ make
$ make test
$ sudo make install
$ sudo ln -s /etc/koha/koha-httpd.conf /etc/apache2/sites-available/koha
$ sudo emacs /etc/apache2/ports.conf
Y agregamos los puertos 80 y 8080. Si Apache ya está ocupando el puerto 80, se puede elegir el 8008 o el 8888.
$ sudo a2enmod rewrite
$ sudo a2ensite koha
$ sudo /etc/init.d/apache2 restart
Colócate en http://localhost y verás el inslador Web de Koha.
Si en lugar de eso ves el mensaje: production mode - trapped fatal error. Intenta instalar una versión más nueva de yaml por CPAN:
$sudo cpan
CPAN> install CGI::Session::Serialize:yaml
Se pueden ver los errores de Koha asi:
$ sudo tail -f /var/log/koha/koha-error_log
Una vez que veas el instalador web escribe el nombre y el password del usuario de Mysql y sigue los pasos. Cuando llegues a la pantalla Selecting Default Settings en las secciones Optional selecciona todos los valores pues después puedes borrarlos pero es bueno tener ejemplos. Ya puedes logearte a la zona de administración:

Ve a la sección Libraries and groups y agrega tu biblioteca.
A continuación ve a "Catloging" y busca por Z39 un ISBN, por ejemplo el ISBN 978-0-679-72316-5 e importalo como libro a tu biblioteca. El libro ya se puede buscar y pedir prestado en el OPAC de Koha.
Permalink: http://mononeurona.org/entries/view/aarkerio/2354
My desktop VIII-2010
Ciencia
Permalink: http://mononeurona.org/entries/view/aarkerio/2342
Koha
Desarrollo
Un cliente me pide que lo apoye en la instalación de un sistema de gestión de biblioteca para su institución. Luego de buscar y estudiar soluciones de código abierto por algunos días, he decidido que el ganador es Koha.

Koha es una potente y completa solución de código abierto para manejar todo lo referente a centros de documentación y bibliotecas: adquisición, catalogación, usuarios, préstamos, rotación de los materiales, reportes. Es un proyecto que ya cuenta con una década pues la primera instalación data del año 2000, debido a ello Koha es muy estable y "full featured".
Koha sigue el estandard MARC21 que es el estandard a través del cual se almacena la bibliografía y asi diferentes bibliotecas pueden comunicarse entre sí e intercambiar información o migrar colecciones. Koha tiene una sección de administración y un portal de búsqueda para los usuarios que se conoce como OPAC. Para la indexación y localización de los materiales Koha usa el motor de búsqueda Zebra.
Todo esto ofrece una solución superprofesional y que sin duda dejará satisfecho a cualquier cliente exigente. Pero (siempre hay un pero!!) hay algunas cosas que no me gustan de Koha:
- Está hecho con esa horrible cosa conocida como Perl
- No usa ningún framework
- No está orientado a objetos, no hay polimorfismo, ni interfaces
- No tiene Database Abstraction Layer (DAL) de modo que está atada a MySQL y no puedo usar una BD superior como PostgreSQL.
- No tiene Access Control Lists (ACL), de modo que los permisos se asignan de manera individual, una hueva si tienes 40 miembros o más en tu staff
- Las traducciones son engorrosas pues por alguna razón los CSS y los templates se deben duplicar por cada idioma que se agregue
Koha tiene un origen neozelandés, (en maorí koha significa "regalo" o "donación") pero también hay empresas francesas, españolas, alemanas y gringas. Por esta razón los últimos dos años de Koha han sido un tanto turbulentos, según entiendo la empresa LibLime desarrollo muchas cosas en Koha y llegó el momento donde empezaron a desarrollar cosas según sus necesidades y sin preguntarle a la comunidad. Las cosas empeoraron cuando LibLime fue comprada por otra empresa más grande: PTFS, que no tiene ninguna tradición con el software libre.
Todo ello llevo a un "fork" donde la parte de PTFS se quedó con el dominio koha.org y la comunidad abrió uno nuevo: koha-community.org, cada sitio ofrece una versión un poco diferente de Koha para descargar e instalar. Yo uso la versión Community.
Koha es fácil de instalar en Debian dejando el OPAC en el puerto 8080. El código se puede descargar por git acá.
Permalink: http://mononeurona.org/entries/view/aarkerio/2341
Perdiendo la sesión de OpenSSH
Ciencia
Desde hace algunos meses, desde que tengo de proveedor de internet a Cablevisión y no a Telmex tengo el problema de que pierdo la sesión SSH luego de unos 10 minutos de inactividad. En Telmex puedo irme al cine y regresar y la sesión sigue abierta mientras que con Cablevisión se desconecta.
No es mucho problema por que tecleo un comando (un alias del bashrc) y ya estoy conectado otra vez, pero como sea es una pequeña lata.
Una vez vi la opción "KeepAlive" en el archivo de configuración del SSH server y la activé pero eso no resolvió el problema.
Investigando por ahí leo que no resolvió el problema porque la perdida de conexión no tiene nada que ver con el server OpenSSH sino con el router de Cablevisión. Al parecer algunos routers están configurados para perder las conexiones que están inactivas por más de cierto tiempo.

Puedo buscar la opción para desactivarla en el router pero encontré una opción "low tech" (más bien medio "naca") pero arregla el pex: agregarle a emacs la opción de desplegar la hora.
(setq display-time-day-and-date t
display-time-24hr-format t)
(display-time)
Como cada minuto cambia, la conexión se mantiene abierta, jejeje.
Permalink: http://mononeurona.org/entries/view/aarkerio/2336
ObserveField in CakePHP 1.3
Ciencia
Dado que el Ajax helper de CakePHP 1.3 está en deprecated estoy cambiando todo el ajax al Js helper.
-
echo $this->Form->create();
-
-
$types = array(' '=>' ',__('Quizz Test', True), __('Webquest', True), __('Scavenger Hunt', True), __('Gap filling', True), 'SCORM');
-
-
-
echo '</form>';
-
$before = $gags->ajaxBefore('active');
-
$complete = $gags->ajaxComplete('active','loading', 'fadeOut', 'slideDown');
-
-
$this->Js->get('#VclassroomType')->event('change',
-
$this->Js->request('/admin/vclassrooms/type/',
-
array('update' =>'#activ',
-
'dataExpression' => True,
-
'evalScripts' => True,
-
'before' => $before,
-
'complete' => $complete,
-
'method' => 'post',
-
'data' => $this->Js->serializeForm(array('isForm' => False, 'inline' => True))
-
)));
-
-
echo $gags->ajaxDiv('activ').$gags->divEnd('activ');
-
-
This code works fine, to select.
Permalink: http://mononeurona.org/entries/view/aarkerio/2291
My new Desktop
Ciencia

Ya estuvo!!, OpenBSD 4.7. Instale Gnash, ejecuta los banners bien pero no las peliculas de Youtube, no se si es porque estoy en WM y necesita algun demonio de Gnome.
Noto a OpenBSD algo lenton, no se si es porque mi RAM no tiene paridad, le voy a comprar el otro banco de memoria para ver si asi jala rapido.
Permalink: http://mononeurona.org/entries/view/aarkerio/2285
I miss this show
Ciencia
Extraño Ponchivisión ;-( Era la neta.
Permalink: http://mononeurona.org/entries/view/aarkerio/2271
Google Map Recomendar un lugar
Ciencia
En http://maps.google.com seleccionar el icono verde y Activar LatLng Marker para que nos muestre la longitud y latitud de los lugares:

Luego seleccionar en el mapa el lugar que queremos recomendar y con botón derecho seleccionar "Drop LatLng Marker" y copiar las coordenadas Ctrl+c.
Ir a New Marker y agregar los datos. Ver el resultado en la vista.
Estoy viendo como conectar el Google Map a la MonoNeurona directamente con jQuery para que cargue las coordenadas con un click.
Permalink: http://mononeurona.org/entries/view/aarkerio/2250
Manejo de periodos en Karamelo
Ciencia

Me hablaron una escuela para preguntar sobre Karamelo, una de sus dudas era como se podían capturar las calificaciones en cada periodo. Les dije que --en parte-- no se debían capturar pues las propias actividades de los alumnos en el salón virtual van creando las calificaciones automáticamente.
Pero me quedé pensando en cómo dividir el curso en periodos para mantener las calificaciones "congeladas" en una fecha específica.
Creo que la manera más sencilla de hacerlo es agregar un modelo Record con la relación "Record->belongsTo->Vclassroom" y agregar un botón en la pantalla principal del Virtual Classroom que haga un "corte" de todas las calificaciones de los alumnos en ese momento para guardarlas con la fecha y asi "finalizar" el periodo.
La otra manera es generar un reporte de calificaciones del grupo seleccionando dos fechas para que sólo se sumen las actividades del alumno entre esas fechas. Eso estaría chido y es fácil de hacer.
De cualquier manera el profesor puede exportar a una hoja de cáculo las calificaciones del grupo siempre que lo necesite.
Lo otro que está pendiente es el API de Google Calendar para que el maestro pueda editar las fechas y horas de las actividades en un iframe dentro del salón virtual.
Espero tenerlo para la versión 0.8 "Skwinkles" que debe estar lista para el primero de diciembre.
Permalink: http://mononeurona.org/entries/view/aarkerio/2229
Ajax en CakePHP 1.3
Ciencia
La mayoría de los cambios en CakePHP 1.3 son en "background", es decir que hay mejor diseño y rendimiento pero los desarrolladores no lo "vemos" y no nos afecta.
Quizás el cambio mas notorio está en los nuevos Helpers, pues en la versión 1.3 de CakePHP se incluye una especie de "Ajax Abstraction Layer", es decir que CakePHP deja de estar centrado en Prototype/Scriptaculous y ahora tiene un manejador "neutro" para cargar el framework javascript de nuestra preferencia: Prototype, jQuery o Mootools.
Esto implica que los helpers Ajax y Javascript que usamos un chingo en Centauro y Karamelo están en deprecated y en su lugar se debe usar el nuevo JsHelper. Los métodos $ajax->div() y $ajax->divEnd() que son muy útiles, los he pasado a mi querido GagsHelper para poder seguir usándolos.
Dado que en el pasado hemos tenido problemas de colisión de frameworks Javascript y además jQuery parece ser el framework más utilizado y tiene muchos plugins chidos he decidido eliminar Prototype de Karamelo y pasarlo todo a jQuery.
Ejemplo de Ajax en CakePHP 1.3:
-
# Cargo my framework en el Helper Js
-
-
# Para cargar las librerías En lugar de
-
$javascript->script(array('jquery-min'));
-
-
#Ahora es
-
$this->Html->script(array('jquery-min'));
-
-
-
# En lugar de esto
-
echo $html->div('sidemenu').__('Subjects', True). $ajax->link($html->image('static/arrow_down.png',
-
array('alt'=>__('Display Subjects', True), 'title'=>__('Display Subject', True))), '/subjects/display',
-
array('update' => 'qn',
-
'loading'=>"Element.show('loading3');",
-
'complete'=>"Element.hide('loading3');Effect.Appear('qn')"),
-
Null,
-
False
-
);
-
echo '</div>';
-
-
echo $gags->imgLoad('loading3');
-
-
#Ahora es
-
echo $this->Html->div('sidemenu', __('Subjects', True). $this->Js->link($this->Html->image('static/arrow_down.png',
-
array('alt'=>__('Display Subjects', True), 'title'=>__('Display Subject', True))), '/subjects/display',
-
array('update' => '#qn',
-
'evalScripts' => True,
-
'before' => $this->Js->get('#loading3')->effect('fadeIn', array('buffer' => False)),
-
'complete' => $this->Js->get('#loading3')->effect('fadeOut', array('buffer' => False)),
-
'escape' => False
-
)));
-
echo $gags->imgLoad('loading3');
-
echo $gags->ajaxDiv('qn').$gags->divEnd('qn');
-
-
echo $this->Js->writeBuffer(); # Write cached scripts
El método $this->Js->writeBuffer(); imprime las llamadas cacheadas de ajax y siempre va al final de la página.
Para aplicar varios efectos a varios DIVs sólo se concatenan en la llamada, por ejemplo:
'before' => $this->Js->get('#loadImg')->effect('fadeIn', array('buffer' => False)) .
$this->Js->get('#list')->effect('fadeOut', array('buffer' => False))
Por último en CakePHP 1.3 los métodos Model->del() y Session->del() se eliminarons y ahora son delete(), pero eso se cambia de volada usando M-x find-named-dir en Emacs.
Permalink: http://mononeurona.org/entries/view/aarkerio/2223











