miércoles, diciembre 17, 2008

www.telovendo.com.ni

www.telovendo.com.ni


Estimadas y estimados,

Los invito a participar del sitio de clasificados:

http://www.telovendo.com.ni

Para enviar sus anuncios:
  • No es necesario registrarse
  • No hay comisiones
  • Es gratis
  • Está pensado y diseñado para ser fácil de usar, sencillo y liviano
  • Puede buscar entre todos los anuncios publicados
  • La lectura de anuncios se puede realizar por grupo de anuncio (facilita la lectura generalizada) o individual
  • Sus anuncios pueden ser ubicados hasta en 3 categorías diferentes, entre:
    • Agricultura
    • Alquiler
    • Animales
    • Artículos del Hogar
    • Artículos Informáticos
    • Bienes Raíces
    • Capacitación
    • Construcción
    • Empleos
    • Industriales
    • Libros
    • Servicios
    • Telecomunicaciones
    • Turismo
    • Varios
    • Vehículos

Sean todos bienvenidos.


martes, octubre 28, 2008

¿Qué antivirus uso? ¡Prometo decir la verdad!

¿Qué antivirus uso? ¡Prometo decir la verdad!

Nota: de aqui en adelante voy a usar la palabra virus para referirme a virus, gusanos, troyanos, spyware, etc. de manera indistina.

"Denis, ¿Qué antivirus usas?, ¿Qué antivirus me recomiendas?, ¿Cuál es el mejor antivirus?...", muchas veces me han hecho estas preguntas o algunas parecidas (¡como que si yo tengo la respuesta!), incluso este tipo de temas es de amplia discusión en toda la Red. Como todo linuxero (usuario de linux) presumido mi respuesta siempre había sido:

"No uso antivirus, ¿para qué quiero uno?, yo uso GNU/Linux y en GNU/Linux no hay ataques de virus... (seguido de toda la explicación sobre el software libre)",

pero hoy quiero confesar que mi respuesta no ha sido del todo sincera, por lo que en este artículo quiero decir la verdad a la pregunta ¿Qué antivirus uso YO?.

Primero: quiero destacar que tengo la confianza de que GNU/Linux es un sistema muy seguro, hasta el momento no he tenido (y estoy seguro que no tendré) ningún problema de virus, pero ojo tener cuidado más adelante relato una anécdota que me sucedió con wine. Si desea saber más sobre linux y los virus puede ver estos enlaces:

Segundo: (aquí es donde venía la parte poco sincera), SI tengo instalado un antivirus en GNU/Linux Debian, se llama ClamAV, y para los que no sabían viene en los discos oficiales y está en los repositorios de paquetes oficiales.

ClamAV (Clam AntiVirus) es un anti virus y anti spyware open source (GPL), gratis para UNIX, está diseñado especialmente para el escaneo de correo electrónico en servidores de correo, aunque también provee de un escáner desde línea de comandos, cuenta con actualizaciones periódicas (manuales o automáticas) de su base de datos de definiciones de virus (la cual crece casi diario), es multi plataforma, hay una versión para MS Windows llamada ClamWin que se puede integrar con MS Office Outlook Express.

Estas son las URL de ambos:

¿Porqué tengo un antivirus instalado en GNU/Linux?

No tengo ningún servidor de correo, mis razones para tener instalado un antivirus en GNU/Linux son:
  1. Mi memoria USB la uso en diferentes lugares (casa, trabajo, amigos, cyber, etc.), en ocasiones algunos de estos lugares me infectan con los viruses recidentes, aunque no afectan mi GNU/Linux Debian no me gusta andar basura en la memoria y no me gustaría que por mi memoria se infesten otros.
  2. En la casa, la PC de mi hermana tiene Windows (ha sido difícil convercerla al cambio), en muchas ocasiones dicha computadora adquiere algún virus, y adivinen a quién le toca quitarlo...
Eliminar los virus de una memoria USB

En el caso de mi memoria hice lo siguiente: primero instalé ClamAV (apt-get install clamav), y luego he creado en la raíz de mi memoria un script llamado antivisrus.sh con el siguiente contenido:

#!/bin/sh

clamscan --remove -r -l clamscan.log .

Esto lo que hará cuando se ejecute, será escanear el contenido del directorio actual (la raíz de mi memoria) de forma recursiva pasando por todos los subdirectorios y borrando todo archivo que clamav considere infectado, todo lo que clamav haga quedará registrado en un archivo llamado clamscan.log en la misa raíz de mi memoria.

Cuando quiero revisar/limpiar la memoria tan solo ejecuto en una consola:

$sh /media/DENISTORRES/antivisrus.sh

Ojo, yo soy imprudente, si se fijan yo ejecuto clamscan con la opción --remove, algo más prudente puede ser, crear un directorio cuarentena donde se mande todo archivo infectado, para su examinación previo a su borrado:

#!/bin/sh

clamscan --move=/home/denis/cuarentena -r -l clamscan.log .

Eliminar los virus de Windows desde GNU/Linux (sin arrancar Windows)
El otro caso que les mencioné por el cual uso clamAV es para limpiar el Windows de la computadora de mi hermana, al principio se me había ocurrido encender la PC de mi hermana, compartir la particion de Windows, montarla con samba en mi PC y proceder a escanearla. ClamAV empezó a realizar su trabajo, detectó los virus, pero como el virus ya estaba residente y ejecutándose en la computadora con Windows, no dejaba borrar los archivos infectados, e incluso como Windows estaba ejecutándose algunos archivos del sistema operativo no se dejaban escanear.

/home/denis/blanca_pc/WINDOWS/SYSTEM32/RVHOST.exe: Worm.Sohanad-130 FOUND
ERROR: Can't unlink '/home/denis/blanca_pc/WINDOWS/SYSTEM32/RVHOST.exe': Permission denied
WARNING: Can't open file /home/denis/blanca_pc/pagefile.sys
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/system.LOG
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/software.LOG
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/default.LOG
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/SECURITY
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/SAM
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/SAM.LOG
WARNING: Can't open file /home/denis/blanca_pc/WINDOWS/SYSTEM32/config/SECURITY.LOG


Esto me llevó a la utilización de otra estrategia (la cual uso actualmente), como la PC de mi hermana no tiene instalado ningún Linux, entonces utilicé mi Knoppix Live CD para arrancar linux en dicha PC, y luego escanearla con ClamAV.

Con Knoppix en ejecución es muy fácil montar la partición de Windows. En el Desktop aparece un icono para cada partición, es fácil montarla tan sólo es necesario darle clic al icono de la partición, luego hacer con clic con el botón derecho desde el menú emergente, y cambiar a modo de escritura la partición (para que podamos borrar los virus).

Knoppix trae instalado ClamAV, por lo cual es posible proceder despúes de arrancar Knoppix el escaneo de los directorios necesarios, pero si Knoppix es muy viejo la versión del engine de clamscan y la base de datos de definiciones de virus pueden estar muy desactualizadas, por lo cual es bueno previo al escaneo instalar una versión reciente de ClamAV y actualizar las definiciones de virus.

Las actualizaciones de definiciones de virus de ClamAV son gratis, en realidad se tratan de 2 archivos main.cvd y daily.cvs los cuales pueden ser descargados desde el sitio oficial de ClamAV:
Para actualizar el engine de ClamAV en mi Debian Etch yo ya habia descargado con anterioridad desde Backports (http://www.backports.org/) los deb de ClamAV, y como Knoppix está basado en Debian entonces los mismos deb pueden ser utilizados.

Una vez con estos archivos es posible actualizar ClamAV en Knoppix así:

knoppix@1[~]$ cd ~/clamav
knoppix@1[clamav]$ ls
daily.cvd  deb  main.cvd
knoppix@1[clamav]$ cd deb/
knoppix@1[deb]$ su

root@1[deb]# dpkg -l | grep clam
ii  clamav             0.88.2-1    antivirus scanner for Unix
ii  clamav-base        0.88.2-1    base package for clamav, an anti-virus utility
ii  clamav-freshclam   0.88.2-1    downloads clamav virus databases from the Inte
ii  libclamav1         0.88.2-1    virus scanner library


root@1[deb]# ls
clamav_0.93.1.dfsg-volatile1_i386.deb
clamav-base_0.93.1.dfsg-volatile1_all.deb
libclamav4_0.93.1.dfsg-volatile1_i386.deb

root@1[deb]# dpkg -i *
(Leyendo la base de datos ...
103700 ficheros y directorios instalados actualmente.)
Preparando para reemplazar clamav 0.88.2-1 (usando clamav_0.93.1.dfsg-volatile1_i386.deb) ...
Desempaquetando el reemplazo de clamav ...
Preparando para reemplazar clamav-base 0.88.2-1 (usando clamav-base_0.93.1.dfsg-volatile1_all.deb) ...
Desempaquetando el reemplazo de clamav-base ...
Seleccionando el paquete libclamav4 previamente no seleccionado.
Desempaquetando libclamav4 (de libclamav4_0.93.1.dfsg-volatile1_i386.deb) ...
Configurando clamav-base (0.93.1.dfsg-volatile1) ...
Replacing config file /etc/clamav/clamd.conf with new version

Configurando libclamav4 (0.93.1.dfsg-volatile1) ...

root@2[deb]# cd ..
root@2[clamav]# ls -lh
total 18M
-rwx------ 1 knoppix knoppix 1,3M 2008-10-23 20:22 daily.cvd
drwxr-xr-x 2 knoppix knoppix  120 2008-10-23 20:23 deb
-rwx------ 1 knoppix knoppix  17M 2008-10-23 20:22 main.cvd
root@2[clamav]# ls -lh /var/lib/clamav/
total 15M
-rwxr-xr-x 1 clamav root 2,0M 2008-10-23 20:34 daily.cvd
-rwxr-xr-x 1 clamav root  13M 2008-10-23 20:34 main.cvd

root@2[clamav]# cp *cvd /var/lib/clamav/
cp: ¿sobreescribir «/var/lib/clamav/daily.cvd»? (s/n) s
cp: ¿sobreescribir «/var/lib/clamav/main.cvd»? (s/n) s
root@2[clamav]# ls -lh /var/lib/clamav/
total 18M
-rwxr-xr-x 1 clamav root 1,3M 2008-10-23 20:43 daily.cvd
-rwxr-xr-x 1 clamav root  17M 2008-10-23 20:43 main.cvd


root@2[clamav]# cd /mnt/sda1/antivirus/
root@2[antivirus]# ls
antivisrus.sh

root@2[antivirus]# cat antivisrus.sh
#!/bin/sh

clamscan --remove -r -l clamscan.log /media/sda1/ > clamscan_full.log


poweroff

root@2[antivirus]#
root@2[antivirus]# clamscan --version
ClamAV 0.93.1/8468/Wed Oct 22 14:35:20 2008

root@2[antivirus]# sh antivisrus.sh
LibClamAV Warning: ***********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.     ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************
LibClamAV Warning: ***********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.     ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************

Cuidado con Wine

Por seguridad si tienen instalado wine les recomiendo que no asocien por defecto los archivos .exe para ser ejecutados con wine (en cualquier entorno gráfico gnome o kde) ya que hace algún tiempo me pasó lo siguiente:

El ipod de mi prima tenía el famoso virus "Nueva Carpera.exe" se lo íbamos a borrar desde linux, pero por error después de seleccionarlo presioné la tecla Enter y se empezó a ejecutar (sin que me percata de eso).

Procedí a borrar los archivos “Nueva Carpeta.exe” de los subdirectorios del ipod, pero noté que en la raíz no se había borrado y que cada vez que lo borraba volvía a aparecer, “jejejeje, está cómico esto, tengo un virus en linux!” pensé, deduje que se estaba ejecutando lo busque en los procesos, y allí había un wine corriendo, maté el proceso, y después pude borrar el archivo sin ningún problema.

(ojo en mi sistema de archivos ext3 no pasó nada malo, revisé mi home y el fake_windows de winw y todo estaba bien, el virus sólo se copiaba en la memoria del ipod).

Algunos virus/troyanos/espías/gusanos que ClamAV me ha detectado según el log de los escaneos:

./RECYCLER/S-1-5-21-1482476501-1644491937-682003330-1013/stcvhost.exe: Worm.Autorun-1617 FOUND
./RECYCLER/S-1-5-21-1482476501-1644491937-682003330-1013/stcvhost.exe: Removed

... otro log ...

/media/hda1/Archivos de programa/EA GAMES/MOHAA/main/Pak1.pk3: Oversized.Zip FOUND
/media/hda1/Archivos de programa/EA GAMES/MOHAA/main/Pak1.pk3: Removed

... otro log ...

./mon/mon.exe: Worm.Sohanad-130 FOUND
./mon/mon.exe: Removed
./carpeta.exe: Trojan.Downloader-53377 FOUND
./carpeta.exe: Removed

... otro log ...

/mnt/guin/c/Documents and Settings/kathy/Escritorio/Sin.wcp: Unknown error code
/mnt/guin/c/RECYCLER/S-1-5-21-1482476501-1644491937-682003330-1013/stcvhost.exe: Worm.Autorun-1617 FOUND

... otro log ...
./RECYCLER/S-1-5-21-1482476501-1644491937-682003330-1013/isi32.exe: Worm.Autorun-826 FOUND
./RECYCLER/S-1-5-21-1482476501-1644491937-682003330-1013/isi32.exe: Removed

... otro log ...
/home/denis/blanca_pc/WINDOWS/MEMORY.DMP: Trojan.KillCMOS FOUND

... la memoria de mi papá ....

./ntde1ect.com: Trojan.Spy-6766 FOUND
./n1deiect.com: Trojan.Spy-17753 FOUND
./g2pfnid.com: Trojan.Spy-48682 FOUND
./e.com: Trojan.Vundo-7458 FOUND
./autorun.inf: Inf.Suspect-2 FOUND
./nideiect.com: Trojan.Bagle-283 FOUND
./RECYCLER/S-1-5-21-1482476501-1644491937-682003330-1013/sic32.exe: Trojan.Small-8279 FOUND
./RECYCLER/S-1-5-21-3318671052-061502871-8581524341-500/~WRL0258.tmp: Trojan.Autorun-160 FOUND
./MSOCache/doWTP_RESTORE_0.exe: Trojan.Delf-1727 FOUND


Así que esa es la verdad, la verdad ... usar Linux es el mejor antivirus que existe :-)
-

Artículos Relacionados

Usando ClamAV 0.95.1 en Ubuntu Jaunty con clamtk como GUI (http://josegjimenez.wordpress.com/2009/04/25/clamav-0951/)

miércoles, septiembre 17, 2008

Software Freedom Day (SFD) Nicaragua 2008 Día de la Libertad del Software Nicaragua 2008

Software Freedom Day (SFD) Nicaragua 2008
Día de la Libertad del Software Nicaragua 2008

El próximo sábado 20 de septiembre se celebrará el Día de la Libertad del Software en la Universidad Centroamericana (UCA), a partir de las 8 de la mañana. Este es el evento de software libre más importante del año, se estará celebrando en unas 500 ciudades en más de 100 países de forma simultánea.

Lugar, fecha, hora y costo

  • Lugar : Universidad Centroamericana - UCA.
  • Fecha: Sábado 20 de septiembre
  • Hora : a partir de las 8:00 AM
  • Costo entrada: C$ 0.00

Algunas conferencias

  • Introducción al software libre
  • Alternativas libres
  • Como Migrar en PYMES
  • Web 2.0 y su evolución
  • Software Libre en la Educación
  • Juegos libres
  • Liberando Almidón

¡Qué nadie se quede sin ir al SFD!

Queremos que todo mundo se de cuenta de este gran evento por la libertad del conocimiento y la información.

Para obtener más información puedes visitar el sitio web: http://www.linuxtour.org/sfd

martes, agosto 12, 2008

¿Cómo abrir la OLPC?

Borrador... artículo en proceso de edición... (estoy tratando de librar varios artículos que tengo pendientes antes de empezar nuevos)

Esto es a lo primero que uno se enfrenta al tener por primera vez la OLPC en las manos ¿Cómo se abre la OLPC? Pues bien, a continuación comparto un conjunto de imágenes donde se muestra como hacerlo (esta imagen está incluida en los archivos que vienen con la OLPC):






¿Qué es la OLPC?

Hay muchos sitios que describen de que se trata el proyecto: "One Laptop Per Child" OLPC por sus siglas en inglés, así que tan sólo me limitaré a compartir estos enlaces, que puedes visitar para conocer más sobre este proyecto:


Una OLPC en Nicaragua

El día Viernes, 30 de Noviembre del 2007 todos los suscritos al "Grupo de Software Libre y Código abierto de Nicaragua" recibimos un correo cuyo encabezado decía: "La comunidad SL/CA esta de fiesta", y el correo decía algo como esto:

http://list2.enicaragua.org.ni/pipermail/softwarelibre/2007-November/005187.html

"La comunidad nica de software libre y código abierto está de fiesta.

El día de hoy, la fundación Software Freedom International emitió una comunicación oficial donde da a conocer que ya fueron seleccionados los tres mejores eventos de conmemoración del Software Freedom Day (Día de la Libertad del Software) de los 330 eventos de este tipo realizados en 90 países.

Entre los tres mejores figura el evento de Nicaragua, a la par de China y Nepal. El evento ganador por Nicaragua fue organizado por un conjunto de personas miembros de la Red de Software Libre y Código Abierto de Nicaragua y de sus grupos asociados, encabezados por la comunidad Ubuntu-ni y recibió patrocionio de varias instituciones, entre la cual destaca la Universidad de Ciencias Comerciales (UCC), que fungió como sede del evento.


Las mujeres y hombres que integramos la comunidad de software libre y código abierto no podemos sentirnos menos que orgullosos por este gran salto de calidad en el trabajo que hace poc más de un año dimos inicio.

Sigamos adelante, en la lucha por la libertad los derechos de las personas a usar, distribuir, mejorar y compartir las herramientas científicas y tecnológicas que son patrimonio de la Humanidad misma.

Donald Chavez Velasquez
Miembro del equipo de Coordinación
Red de Software Libre y Código Abierto de Nicaragua"

Hi all,

We are very pleased to announce the results of the SFD Competition 2007!
Many thanks to all the entrants, we saw some excellent examples of how to
take software freedom to local communities, and we were inspired, as you
all will be to see some of the outcomes and reports.

http://softwarefreedomday.org/Competition2007/Winners

We have three winners, who will each receive an OLPC (One Laptop Per Child)
computer. All winners, highly commended and entries of note will also
receive a certificate for their excellent submissions.

I want to extend a warm congratulations in particular to the three winners
(in no particular order):
- FOSS Nepal Community
- SFD Nicaragua 2007 Team
- Beijing Software Freedom Day (China)

And the two highly commended entries:
- Trinidad and Tobago Computer Society
- SFD Tunisia

Read more about the entries along with their reports at the website above.

Cheers,
Pia Waugh

--
Software Freedom Day 2007 http://softwarefreedomday.org/

SFD Nicaragua 2007 Team

This was a first time event for the SFD Nicaragua Team, and they pulled off an incredible event with only one and a half months planning! They had great press coverage, including TV and radio interviews, blog coverage, four pre-SFD events, flyers and more! The schedule was packed with speakers (including speakers as young as 12), video, great FOSS demonstrations, and an installfest. The event really involved people of all ages. Over 500 people attended the event, and the attendance was very broad. The event grew support for and interest in the local FOSS groups, and gained attention from schools that could use FOSS to help their students. An amazing job SFD Nicaragua! Especially given it is your first event!

Algunos detalles técnicos de la OLPC de gul-nic



#lspci
00:01.0 Host bridge: Advanced Micro Devices [AMD] Unknown device 0028 (rev 21)
00:01.1 VGA compatible controller: Advanced Micro Devices [AMD] Geode LX Video
00:01.2 Entertainment encryption device: Advanced Micro Devices [AMD] Geode LX AES Security Block
00:0c.0 FLASH memory: Marvell Technology Group Ltd. Unknown device 4100 (rev 10)
00:0c.1 Class 0805: Marvell Technology Group Ltd. Unknown device 4101 (rev 10)
00:0c.2 Multimedia video controller: Marvell Technology Group Ltd. Unknown device 4102 (rev 10)
00:0f.0 ISA bridge: Advanced Micro Devices [AMD] CS5536 [Geode companion] ISA (rev 03)
00:0f.3 Multimedia audio controller: Advanced Micro Devices [AMD] CS5536 [Geode companion] Audio (rev 01)
00:0f.4 USB Controller: Advanced Micro Devices [AMD] CS5536 [Geode companion] OHC (rev 02)
00:0f.5 USB Controller: Advanced Micro Devices [AMD] CS5536 [Geode companion] EHC (rev 02)


#free -m
total used free shared buffers cached
Mem: 232 96 136 0 0 50
-/+ buffers/cache: 45 186
Swap: 0 0 0



#df -h
Filesystem Size Used Avail Use% Mounted on
mtd0 1.0G 387M 638M 38% /
tmpfs 35M 0 35M 0% /dev/shm


#cat /etc/fstab
mtd0 / jffs2 defaults,noatime 1 1
none /ofw promfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults,size=15% 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0


#uname -a
Linux xo-05-23-50.localdomain 2.6.21-20070614.4.olpc.e09af6a7bd48f9a #1 PREEMPT Thu Jun 14 20:42:07 EDT 2007 i586 i586 i386 GNU/Linux



#ifconfig
eth0 Link encap:Ethernet HWaddr 00:17:C4:05:23:50
inet6 addr: fe80::217:c4ff:fe05:2350/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:112 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:32201 (31.4 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

msh0 Link encap:Ethernet HWaddr 00:17:C4:05:23:50
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:112 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:32201 (31.4 KiB)



#cat /etc/issue
OLPC build 406.14 (stream development; variant devel_jffs2)
Kernel \r on an \m


#cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 5
model : 10
model name : Geode(TM) Integrated Processor by AMD PCS
stepping : 2
cpu MHz : 431.222
cache size : 128 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu de pse tsc msr cx8 sep pge cmov clflush mmx mmxext 3dnowext 3dnow
bogomips : 863.54
clflush size : 32

lunes, agosto 11, 2008

Poseidon for UML en GNU/Linux Debian

Estoy en una capacitación sobre UML, como es de esperarse en dicho curso usamos un CASE con el fin de:
  • Realizar los diagramas que involucra el UML
  • Generar las clases, relaciones entre las mismas, métodos, constructores, atributos, etc. en código java
  • Generar documentación
A mi me hubiera gustado mucho que la herramienta CASE usada en dicho curso de UML fuera algún software libre como ArgoUML o Umbrello UML Modeller los cuales poseen las características mencionadas anteriormente, pero el curso ya estaba amarrado con "Poseidon for UML" el cual es un software no libre, basado originalmente en ArgoUML, de hecho su funcionamiento es muy parecido por no decir casi igual, ambos ArgoUML y Poseidon for UML son multiplataformas.

Como era de esperarse llegó el día en que me ha tocado realizar una tarea del curso en mi casa, por lo cual me he visto en la necesidad de instalar Poseidon for UML en mi Debian Etch GNU/Linux, lo cual resultó ser muy fácil, tan sólo ha sido necesario asegurarme de tener instalada la máquina virtual de Java, y ejecutar el instalador de Poseidon for UML para Linux, el cual se puede descargar gratuitamente de su sitio Web, desde el cual también es posible descargar una licencia de prueba la cual se puede solicitar tantas veces lo necesitas pero limita el uso del software a tan sólo 8 diagramas.

denis@debdenis:~/Desktop/nuevo2/uml/poseidon$ ls
PoseidonPE_6_0_2_Installer.bin
denis@debdenis:~/Desktop/nuevo2/uml/poseidon$ ./PoseidonPE_6_0_2_Installer.bin
Preparing to install...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...


Luego de instalarlo pude realizar mi tarea, aunque limitada a sólo 8 diagramas...


viernes, agosto 08, 2008

Diagramando con Dia - Secuencia de Escape

El fuente de este gráfico es de dominio público, aquí puede descargarlo, está hecho con DIA. Si no conoces sobre DIA aquí tienes una breve descripción (tomada de la Wikipedia) sobre este excelente software libre:

"Dia es una aplicación gráfica de propósito general para la creación de diagramas, desarrollada como parte del proyecto GNOME. Está concebido de forma modular, con diferentes paquetes de formas para diferentes necesidades... Actualmente se incluyen diagramas entidad-relación, diagramas UML, diagramas de flujo, diagramas de redes, diagramas de circuitos eléctricos... El formato para leer y almacenar gráficos es XML (comprimido con gzip, para ahorrar espacio). Puede producir salida en los formatos EPS, SVG y PNG."


Considero que es importante destacar que es un software muy liviano y fácil de usar, en su sitio Web http://live.gnome.org/Dia podrás descargarlo de forma gratuita, este software es multiplataforma o sea también puede ser ejecutado en Windows.
Software Libre para asistencia en el aprendizaje de las matemáticas: Maxima, xMaxima



Introducción

Hace algunos días un amigo (@LeX), me mandó (y a otro montón de personas al mismo tiempo) uno de esos correos tipo "cadena de socialización" (así les llamo yo), que decía lo siguiente:


"Sólo gente inteligente puede abrir este archivo, PERO INTENTENLO.....Y SI ACIERTAN, ANOTEN SU NOMBRE Y REENVIENLO, UNA BONITA PRUEBA..... Una vez que abras el archivo verás la lista de personas que pudieron abrirlo... ahora es tu turno. Te he considerado entre la gente inteligente que puede resolverlo. Un hombre quería entrar a su trabajo pero olvidó su PIN. Sin embargo, se acordaba de ciertas pistas para recordarlo. Estas son las 5 pistas.
  • El quinto número más el tercero equivalen a 14
  • El cuarto número es uno más que el segundo número.
  • El primer número es uno menos que dos veces el segundo número.
  • El segundo número más el tercer número equivalen a 10.
  • La suma de todos los números es 30.
"

El autor del correo adjuntaba este archivo Hoja de Cálculo de MS Excel, la cual al quererla abrir solicita una contraseña, según el correo la contraseña coincide con las 5 pistas dadas en el correo.



Recordé que cuando estudié computación en la UNI, las clases de Cálculo, se acompañaban de un software llamado: "Wolfram Mathematica", en el cual podíamos resolver, graficar y programar, desde sencillos cálculos matemáticos hasta resolver complejas integrales múltiples, por medio de este software se pueden resolver sistemas de ecuaciones como el planteado el correo de @LeX, al instante apareció en mi mente la idea de buscar un software libre equivalente a "Wolfram Mathematica", buscando un poquito en Google me encontré con este software disponible para GNU/Linux Debian: Maxima.

Maxima

La wikipedia dice lo siguiente sobre Maxima:

"El sistema de álgebra computacional Maxima es un motor de cálculo simbólico escrito en lenguaje Lisp publicado bajo licencia GNU GPL. Cuenta con un amplio conjunto de funciones para hacer manipulación simbólica de polinomios, matrices, funciones racionales, integración, derivación, manejo de gráficos en 2D y 3D, manejo de números de coma flotante muy grandes, expansión en series de potencias y de Fourier, entre otras funcionalidades. Además tiene un depurador a nivel de fuente para el código de Maxima. Maxima está basado en el sistema original de Macsyma desarrollado por MIT en los años 70. Es bastante fiable, tiene un buen recolector de basura, por lo que no desperdicia memoria."

La Web oficial de Maxima es: http://maxima.sourceforge.net/

Maxima es un software de modo texto, pero existe un complemento llamado xMaxima, el cual provee de una interfaz gráfica para facilitar el uso de Maxima.

Resolver sistemas de ecuaciones con Maxima y xMaxima

Una vez que se ha planteado el sistema de ecuaciones (en este caso de 5 variables), según lo indicado en el correo:

x5 + x3 = 14
x4 = x2 + 1
x1 = (2 * x2) - 1
x2 + x3 = 10
x1 + x2 + x3 + x4 + x5 = 30

Haciendo uso de la función solve de Maxima e indicando cada una de las ecuaciones se obtiene el valor de cada variable casi al instante (después de escribir el código pulsar Enter):

(%i1) solve([
x5 + x3 = 14,
x4 = x2 + 1,
x1 = (2 * x2) - 1,
x2 + x3 = 10,
x1 + x2 +x3 + x4 + x5 = 30
],
[x1,x2,x3,x4,x5]
);
(%o1) [[x1 = 7, x2 = 4, x3 = 6, x4 = 5, x5 = 8]]
(%i2)

x1 = 7
x2 = 4
x3 = 6
x4 = 5
x5 = 8


Maxima es capaz de realizar muchas operaciones matemáticas, la parte inferior de xMaxima muestra por defecto una ayuda bastante intuitiva con múltiples ejemplos.

Software libre como este, es de gran ventaja para asistir al aprendizaje de las matemáticas, pues a como se observa en este simple ejemplo, Maxima no resuelve el ejercicio por si sola, es necesario que de previo el estudiante haga un análisis del problema, y plantee correctamente el sistema de ecuaciones, si el estudiante no lo hace, Maxima no le puede ayudar, Maxima no puede interpretar el lenguaje humano, Maxima debe recibir instrucciones claras y datos correctos de lo que se pretende resolver, o sea que Maxima no te hace la tarea, tan sólo te ayuda.

Interesante (otro asunto)!

Es interesante como estos correos cadenas viajan por todo el mundo, despúes de resolver el sistema de ecuaciones com xMaxima y entrar al archivo se puede ver cuanta gente se ha anotado, diciendo ser de paises como:

  • Pakistan
  • India
  • Palestine
  • Philippines
  • Lebanon
  • UAE
  • Iraq
  • Philippines
  • Jordan
  • United Arab Emirates
  • Palestine
  • Qatat
  • Palestine
  • Egyptian
  • Scottish
  • mexican
  • mexicano
  • TICA
  • Costa Rica
  • Nicaragua

martes, agosto 05, 2008

Debian Day Nicaragua 2008

La comunidad Debianita de Nicaragua celebra su Gran Día el "Debian Day" un evento esperado por toda la comunidad amante de Debian Linux.

Día Debian: (14 de Agosto)
Lugar: Auditorio Salomón de la Selva de la UNI - IES.
Hora: 9:00 am - 5:00 pm.

Conferencias:


-Introducción a Latex (Johannes Wilm) Noruega
-Desarrollo de Aplicaciones web en java corriendo bajo Debian (Julian Rivera) Salvador

Para mayor información visitar el sitio oficial de usuarios de Debian de Nicaragua

martes, julio 22, 2008

Firefox Download Day - We did it!


We did it! was the subject in the header of a mail that I got at the beginning of this month, after the last June 18, 2008, when a lot of people (of course including me) downloaded the new Firefox 3. The email said this:

We did it!

We set a Guinness World Record for the most software downloads in 24 hours. With your help we reached 8,002,530 downloads.

You are now part of a World Record and the proud owner of the best version of Firefox yet!

Don't forget to download your very own certificate for helping set a Guinness World Record.

So I got my certificate, to remember that I was part of this! From Nicaragua only 6,034 downloads were made, in America Central we (Nicaragua) made only more downloads than Honduras, I suppose because here in Nicaragua the Internet access is not yet easy for all people.

jueves, julio 17, 2008

El Dr. Franciso Javier Ceballos dicta conferencia en la UNI-RUSB Managua


El pasado 14 de julio a las 9.00 am en el Auditorio Salomón de la Selva de la UNI-RUSB Managua, el Dr. Franciso Javier Ceballos dictó una conferencia titulada: Desarrollo de aplicaciones .NET sobre la plataforma Linux: proyecto Mono.

Esta conferencia estuvo basada principalmente en una breve descripción (3 horas de charla) sobre la tecnología .NET utilizando Linux Open SUSE y Mono. En general la charla era un resumen de su nuevo libro: Aplicaciones .NET multiplataforma - Proyecto Mono, el cual por cierto compré y les comento está muy bueno.

Como parte de la demostración el Dr. Ceballos , en su laptop usando Windows Vista arrancó 2 instancias de VMWare, en la primera instancia arrancó SUSE 10.3 y en la segunda Windows XP, con lo cual pudo demostrar que las aplicaciones .NET creadas en Linux también podían ser ejecutadas en Windows y vice versa.


Es interesante que ni el Dr. Ceballos se salva de las Leyes de Murphy, pues al intentar ejecutar su primer ejemplo todos vimos un mensaje: Server Error en la pantalla! pero al instante el Dr. hizo unas correcciones en la configuración del IDE MonoDevelop y en adelante todos sus ejemplos funcionaron a la perfección.


Considero que la presentación llenó todas las expectativas, el auditorio se llenó completamente, incluso habían personas de pie, y sentadas en la piso.

Para quienes no han tenido la oportunidad de leer ninguno de sus libros y desean saber más sobre el Profesor Ceballos he aquí su sitio web http://www.fjceballos.es/


Para leer el punto de vista de Marconi Poveda sobre esta conferencia visita su blog en: http://marconipoveda.blogspot.com/2008/07/un-mono-en-la-uni.html

viernes, junio 27, 2008

Artículo esrito por: AJ-Fitoria estudiante de UNI - IES

Hoy en mi clase de base de datos nos dieron los requsitos del proyecto final de curso aparte de los requisitos de ley (como las partes del proyecto, etc) nos OBLIGARON a usar Visual Basic 2005 con SQL Server 2005 al escuchar esto pregunte si podia usar MySQL con Mono y me dieron un rotundo NOOOO!!!!! por supuestar indicaciones desde los niveles superiores de la universidad...

Ahora yo me pregunto:

Como es posible que una universidad cuyo lema es "Lider en Ciencia y Tecnologia" este obligando a usar solo tecnologia privativa lo cual nos obliga a PIRATEAR desgraciadamente a muchos (yo bajo las versiones express :-))....

Como nos quieren formar como profesionales con ETICA si nos obligan a piratear software para realizar un proyecto?

Como no van a permitir que usemos software libre y LEGAL en nuestros proyectos?.....

Ampliar en: http://fitoria.blogspot.com/2008/06/nos-obligan-piratear.html

jueves, mayo 22, 2008

Problems Installing Debian Etch on a DELL Optiplex 320 computer with SATA Hard Drive



Versión en Español

Some time ago, my friend Cesar, was trying to install Debian Etch in his new computer, a DELL Optiplex 320, but the Debian installer said:

"Can't detect any disc drive. You can select the driver from the list if you know the name of the one you need for your hard drive".

The hard drive into his computer is a SATA hd, I had already heard that some old Linux versions can't detect these kind of discs, but I never thought that Debian Etch (the actual stable version of Debian) would also have this problem.

We didn't know what to do, by this reason I asked in some Debian users mailing lists, I wrote something like:

"Hello,

I have a problem installing debian etch 4 r0, in a DELL computer with a SATA hard disk, the installer don't recognize the hard disc, may someone help me?.

Someone has had a similar experience?

Thank you."

The answer that solved our problem came from:

Marcelo - marcelo.magallon at gmail.com

He said:

"Optiplex 320. Several people have reported problems with this machine. The solution seems to use the option pci=nomsi in instalation screen, I mean, when installer start instead of press Return button, write this:

install pci=nomsi

Then, when installer say you that it will install the "GRUB" in the master boot record (MBR), you should get back (to do it you must select "back" option) and you must to choose "LILO" instead of "GRUB". This is because GRUB seems to have problems with this kind of machine."

Others good answers were:


Israel - neflyte49 at gmail.com

Simple: go to BIOS and set it in PATA+SATA mode or LEGACY mode.

Luis Roberto Castro Silva - rcswrc at gmail.com

I have seen that in some computers, you must to change in BIOS the way how it see the hard disks, beacause it implemented AHCI for Windows Vista, so that you must change it from AHCI to SATA.

Walter Pérez Aráuz - walternrg4u at gmail.com

May be it help you:

http://wiki.osuosl.org/display/LNX/Debian+on+Dell+Servers?showComments=false

Regards!

Rodrigo Castro - rodrigo.b.castro at gmail.com

I had similar problems with some Dell machines, I have no near the machines now, to tell you step by step how I solved the problem.

I remember I went to the BIOS, then in the section about HDD DATA I used OLD DATA CONTROLLER.

Curiously, using both Ubuntu and Mandriva I didn't get this problem.

Regards,

Zenón Monge - zmonge at gmail.com

I don't know if the DEBIAN installer contains any kernel with SCSI support, that is the way how Linux recognize the SATA discs.

Here http://www.debian.org/releases/stable/i386/ch05s01.html.en you will find how to check the start options and there should be listed the option to start with SCSI devices support.
--
Regards,
Zenón Monge


Eric de la Goublaye de Menorval - menorval at gmail.com

Why you don't test with the lasted DEBIAN version? --> Debian GNU/Linux 4.0r3

http://www.debian.org/releases/


And I get some comics answer too, like this:


Richard Mena - rmendoza85 at gmail.com

Man, You should install SUSE!
SUSE support SATA discs jejeje...


At the end of the thread someone said:

Rodrigo Castro - rodrigo.b.castro at gmail.com

Denis sent the question to multiples lists, and seem that in one he got an answer and he fixed his problem:

> Thanks to all, with the instruction
> install pci=nomsi (with LILO)
> it works perfectly! Thanks!

Denis Torres - denisjtorresg at gmail.com

Yes, indeed, Rodrigo, that instruction is the one that work, but is good to learn what other experiences have got others colleagues in this mailing list, thanks to all!

I have no doubt that the DEBIAN community (in any place around the world) is very active and experienced, that is the reason why I don't choose other linux distro!

In fact I am registered in many linux mailing lists, I like to learn from the share experience from others!

Regards from Nicaragua!

Personal conclusion:

This article, more than explain how to "Install Debian Etch on a DELL Optiplex 320 computer with SATA Hard Drive", I am trying to show, that be part of LUG mailing lists, is so beneficial because a lot of experienced people get join to give a full support to every one who has doubts or problems.

Thanks to all friends from:

* Debian users group from Nicaragua:
** debian-ni@googlegroups.com
* Debian users group from Costa Rica:
** debian-user-cr@cr.debian.net
* Debian users group from El Salvador:
** debian-sv@lists.debian.org.sv
* Linux users group from Nicaragua:
** gul-nic@linux.org.ni
* Free Software Network from Costa Rica:
** csl-tec@softwarelibrecr.org
* Linux users group from Costa Rica:
** gulcr@listas.linux.or.cr

Please excuse my english, english is not my first language, but I'm learning.

lunes, mayo 19, 2008

Mini: ¿Cómo Codificar archivos MP3 con LAME en GNU/Linux Debian?


Paso 1: Descargar el código fuente de LAME

Para quien nunca ha escuchado hablar de LAME, aquí transcribo la descripción brindada por Wikipedia:

"LAME LAME (acrónimo recursivo de LAME Ain't an MP3 Encoder, Lame no es un códec MP3) es un codificador (códec) de MPEG Audio Layer III (MP3) que puede ser usado con la mayoría de programas que convierten archivos WAV a archivos MP3 o desde otros formatos o soportes.

Destaca por su espectacular rapidez, por la posibilidad de elegir la tasa de bits (calidad, 128 Kbps, 160 Kbps, variable, ..) y el modo joint stereo. Este software tiene una licencia código abierto, lo cual permite que personas de todo el mundo trabajen en su desarrollo.

Este códec funciona por intérprete de órdenes o bien integrado en otras aplicaciones capaces de usarlo como: Audacity, AudioCrusher, Audiograbber, Text Aloud MP3, Easy CD-DA Extraction, CDex, ALF, etc."

LAME puede ser descargado de:

http://lame.sourceforge.net/download.php

Paso 2: Descomprimir LAME

denis@debian2:~/mp3debian$ ls
lame-3.97.tar.gz

denis@debian2:~/mp3debian$ tar -xvzf lame-3.97.tar.gz
lame-3.97/
lame-3.97/mac/
lame-3.97/mac/Precompile_Common.h
lame-3.97/mac/MacDLLMain.c
lame-3.97/mac/LAME_Classic_Final.pch
lame-3.97/mac/LAME_Classic_Debug.pch
.....
lame-3.97/acinclude.m4
lame-3.97/README
denis@debian2:~/mp3debian$

Paso 3: Compilar LAME

En este paso dentro de la carpeta recién descomprimida, ejecutar el script ./configure el cual revisará que se cumplan todos los requisitos de librerías y dependencias en nuestro sistema para poder proceder luego a compilar el código fuente, en este paso es probable que aparezcan mensajes de que nos falta X o Y programa o librería, estos tipos de problemas se solucionan fácil y rápido instalando el programa o librería necesaria y luego ejecutar nuevamente ./configure hasta que todo salga bien.

denis@debian2:~/mp3debian/lame-3.97$ ls
acinclude.m4 configure frontend lame.spec.in Makefile.am.global README.WINGTK
aclocal.m4 configure.in HACKING lame_vc6.dsw Makefile.in STYLEGUIDE
ACM COPYING include lame_vc7.sln Makefile.MSVC testcase.mp3
API debian INSTALL libmp3lame Makefile.unix testcase.wav
ChangeLog DEFINES INSTALL.configure LICENSE misc TODO
config.guess depcomp install-sh ltconfig missing USAGE
config.h.in Dll lame.bat ltmain.sh mkinstalldirs
configMS.h doc lame_projects_vc6.dsp mac mpglib
config.sub dshow lame.spec Makefile.am README


denis@debian2:~/mp3debian/lame-3.97$ ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
......
config.status: creating ACM/tinyxml/Makefile
config.status: creating lame.spec
config.status: creating mac/Makefile
config.status: creating config.h
config.status: executing depfiles commands
denis@debian2:~/mp3debian/lame-3.97$

Una vez ejecutado el script configure proceder a compilar LAME con "make"


denis@debian2:~/mp3debian/lame-3.97$ make
make all-recursive
make[1]: se ingresa al directorio `/home/denis/mp3debian/lame-3.97'
Making all in mpglib
make[2]: se ingresa al directorio `/home/denis/mp3debian/lame-3.97/mpglib'
......
make[2]: se sale del directorio `/home/denis/mp3debian/lame-3.97/mac'
make[2]: se ingresa al directorio `/home/denis/mp3debian/lame-3.97'
make[2]: No se hace nada para `all-am'.
make[2]: se sale del directorio `/home/denis/mp3debian/lame-3.97'
make[1]: se sale del directorio `/home/denis/mp3debian/lame-3.97'


Paso 4: Instalar LAME

Si todo sale bien, estamos listos para instalar LAME en nuestro GNU/Linux Debian, para lo cual necesitamos estar como super usuario y ejecutar el comando: make install

denis@debian2:~/mp3debian/lame-3.97$ su
Password:
debian2:/home/denis/mp3debian/lame-3.97# make install
Making install in mpglib
make[1]: se ingresa al directorio `/home/denis/mp3debian/lame-3.97/mpglib'
make[2]: se ingresa al directorio `/home/denis/mp3debian/lame-3.97/mpglib'
make[2]: No se hace nada para `install-exec-am'.
make[2]: No se hace nada para `install-data-am'.
make[2]: se sale del directorio `/home/denis/mp3debian/lame-3.97/mpglib'
make[1]: se sale del directorio `/home/denis/mp3debian/lame-3.97/mpglib'
Making install in libmp3lame
make[1]: se ingresa al directorio `/home/denis/mp3debian/lame-3.97/libmp3lame'
Making install in i386
....
make[2]: No se hace nada para `install-exec-am'.
make[2]: No se hace nada para `install-data-am'.
make[2]: se sale del directorio `/home/denis/mp3debian/lame-3.97'
make[1]: se sale del directorio `/home/denis/mp3debian/lame-3.97'

Paso 5: Leer la ayuda de LAME

Una vez que está instalado posiblemente te gustaría leer la ayuda, lo cual puede lograrse usando "man" o con el parámetro --help del nuevo binario que se acaba de instalar llamado "lame".

debian2:/home/denis/mp3debian/lame-3.97# exit
exit
denis@debian2:~/mp3debian/lame-3.97$ man lame
lame(1) LAME audio compressor lame(1)

NAME
lame - create mp3 audio files

SYNOPSIS
lame [options]

DESCRIPTION
LAME is a program which can be used to create compressed audio files.
(Lame ainât an MP3 encoder). These audio files can be played back by
popular MP3 players such as mpg123 or madplay. To read from stdin, use
"-" for . To write to stdout, use a "-" for .

OPTIONS
Input options:
....

denis@debian2:~/mp3debian/lame-3.97$ lame --help
LAME 32bits version 3.97 (http://www.mp3dev.org/)

usage: lame [options] [outfile]

and/or can be "-", which means stdin/stdout.

RECOMMENDED:
lame -V2 input.wav output.mp3

OPTIONS:
-b bitrate set the bitrate, default 128 kbps
-h higher quality, but a little slower. Recommended.
-f fast mode (lower quality)
-V n quality setting for VBR. default n=4
0=high quality,bigger files. 9=smaller files
--preset type type must be "medium", "standard", "extreme", "insane",
or a value for an average desired bitrate and depending
on the value specified, appropriate quality settings will
be used.
"--preset help" gives more info on these

--longhelp full list of options

denis@debian2:~/mp3debian/lame-3.97$


Paso 6: Convertir un archivo wav en mp3

Dependiendo de la calidad con que la que usted desea convertir su archvo wav en mp3 las opciones pasadas al binario lame pueden variar. La forma más sencilla de convertir un archivo wav a mp3 usando las configuraciones por defecto de lame es: lame ruta_archivo.wav

El ejemplo mostrado a continuación convertirá un archivo wav en un mp3 con variable bit rate (tasa de bits variable).

denis@debdenis:~/Desktop/english/phrases_v2/lectura$ ls
frases.wav

denis@debdenis:~/Desktop/en$ lame -V 4 frases.wav
LAME 3.97 32bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 17249 Hz - 17782 Hz
Encoding frases.wav to frases.wav.mp3
Encoding as 44.1 kHz VBR(q=4) j-stereo MPEG-1 Layer III (ca. 10x) qval=3
Frame | CPU time/estim | REAL time/estim | play/CPU | ETA
2200/15779 (14%)| 0:09/ 1:05| 0:12/ 1:27| 6.2740x| 1:15
32 [ 0]
40 [ 0]
48 [ 0]
56 [ 2] *
64 [ 7] *
80 [ 121] ***************
96 [ 458] ******************************************************
112 [ 579] ********************************************************************
128 [ 372] ********************************************
160 [ 418] **************************************************
192 [ 205] *************************
224 [ 37] *****
256 [ 1] *
320 [ 0]
-----------05:54---------------------------------------------------------------
kbps MS % long switch short %
127.9 100.0 38.8 17.6 43.6

denis@debdenis:~/Desktop/english/phrases_v2/lectura$ ls
frases.wav frases.wav.mp3
denis@debdenis:~/Desktop/english/phrases_v2/lectura$


Lo aquí expuesto también ha sido probado en SuSE Linux, y no dudo que pueda funcionar de manera similar en otras distribuciones de Linux.

domingo, mayo 11, 2008

Como Instalar GNU/Linux Debian en Windows usando QEMU para Windows y Qemu Manager

¿Qué es una Máquina Virtual?

La wikipedia dice:

"En informática una máquina virtual es un software que emula a un ordenador y puede ejecutar programas como si fuese un ordenador real. Este software en un principio fue definido como "un duplicado eficiente y aislado de una máquina física". La acepción del termino actualmente incluye a máquinas virtuales que no tienen ninguna equivalencia directa con ningún hardware real.

Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados por los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse de este "ordenador virtual"."

Para mayor información leer:

http://es.wikipedia.org/wiki/M%C3%A1quina_virtual

¿Qué es QEMU?

La wikipedia dice:

"QEMU es un emulador de procesadores basado en la traducción dinámica de binarios (conversión del código binario de la arquitectura fuente en código entendible por la arquitectura huésped). QEMU también tiene capacidades de virtualización dentro de un sistema operativo, ya sea Linux, Windows, o cualquiera de los sistemas operativos admitidos (de hecho es la forma más común de uso). Esta máquina virtual puede ejecutarse en cualquier tipo de Microprocesador o arquitectura (x86, x86-64, PowerPC, MIPS, SPARC, etc.). Está licenciado en parte con la LGPL y la GPL de GNU."

Y yo agregaría:

Qemu es un software para crear máquinas virtuales. Lo que más me gusta de qemu es que no necesita de mucho espacio en el disco duro, en comparación con otros sistemas parecidos como VMware.

Para mayor información leer:

http://es.wikipedia.org/wiki/QEMU
http://fabrice.bellard.free.fr/qemu/

Qemu Manager v4.0

La wikipedia dice:

"QEMU manager es un programa escrito para Windows que hace las veces de interfaz gráfica para el emulador de máquinas virtuales QEMU. El programa permite definir diferentes máquinas virtuales a las que asocia una unidad física o virtual en la que buscar el sistema operativo que queremos emular, ya sean sistemas operativos que requieran instalación en disco duro o sistemas operativos que se puedan ejecutar sin guardar nada en unidades físicas (Live CD)."

Y yo agregaría:

QEMU manager es fácil de usar, disponible con traducción completa al español, si usted descarga "QEMU manager" no necesita descargar "QEMU" por separado, pues el primero ya lo incluye.

"QEMU manager" incluye:
  • QEMU Processor Emulator
  • QEMU Accelerator KQEMU
  • Un pequeño manual en PDF sobre QEMU manager

Para mayor información leer:

http://es.wikipedia.org/wiki/Qemu_manager

QEMU manager se puede descargar en:

http://www.davereyn.co.uk/

Acelerador KQEMU

Como en toda máquina virtual la velocidad y el desempeño de un sistema operativo ejecutado sobre QEMU, no es tan eficiente a como se lograría ejecutándolo nativamente, por lo que es recomendable antes de usar QEMU instalar el acelerador KQEMU.

KQEMU acelera la emulación de i386 en plataformas i386 hasta un nivel ligeramente inferior a la ejecución en modo nativo.

La siguiente comparación puede dar una idea más clara sobre la aceleración:

  • La ejecución de un sistema operativo sobre QEMU sin acelerador, es aproximadamente entre 5 y 10 veces más lento, que hacerlo de forma nativa.
  • Usando QEMU con el acelerador KQEMU, la ejecución es aproximadamente entre 1 y 2 veces más lento que de forma nativa.

Manos a la obra

* Descomprimir qemumanager40.zip
* Ejecutar (doble clic) en el archivo: QemuManager.exe

* Proceder a instalar el acelerador KQEMU, en el menú: Opciones >> Install KQEMU Accelerator

* El siguiente paso es crear una nueva máquina virtual, pulsando el botón señalado a continuación

* Aparecerá la ventana: "Asistente de creación de nueva máquina virtual", donde se pregunta el nombre que se asignará a dicha máquina virtual, para lo cual es necesario completar el campo: "Nombre de nueva máquina virtual", luego pulsar el botón siguiente.

* Luego es necesario seleccionar que sistema operativo instalaremos, entre las opciones disponibles están: DOS, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Linux Distribution, Power PC & Mac. Para instalar GNU/Linux Debian seleccionamos de la lista la opción: "Linux Distribution", al mismo tiempo debemos especificar, cuanta memoria RAM de la máquina ANFITRION (HOST) será destinada para uso de la máquina INVITADA (GUEST), esta selección dependerá de con cuanta RAM cuenta tu HOST y cuanta RAM necesita el Sistema Operativo Invitado para poder funcionar bien. Luego pulsar siguiente.



* En la siguiente ventana es necesario especificar "que disco duro utilizará la máquina virtual", es posible seleccionar entre estas opciones: Crear nueva unidad virtual, Usar unidad virtual existente, o Esta máquina virtual no requiere una unidad virtual. Para instalar GNU/Linux Debian crearemos una nueva unidad virtual, luego pulsamos Siguiente.



* Seguidamente se especifica el tamaño de la unidad de disco duro virtual a crear. Para quien no ha usado antes un emulador para máquinas virtuales, quiero aclarar: este disco duro es llamado virtual pues en realidad usted no necesita instalar otro disco duro "real" a su PC, qemu creará en su sistema de archivos existente, un archivo en donde se almacenarán los bytes como si fuera otro disco duro, por lo cual tampoco es necesario crear particiones nuevas. El tamaño a destinar para la unidad dependerá de: el espacio que usted tenga libre, y de que aplicaciones instalará en GNU/Linux Debian. Para obtener información sobre el espacio necesario para instalar GNU/Linux Debian visite su sitio oficial: http://www.debian.org

En esta ventana es también necesario selecciar el tipo de unidad a crear, las opciones disponibles son:

  • Qcow2 (QEMU Image Format): Es el formato más versátil, este tipo de imagen crea un archivo básico pequeño, el cual a medida que se necesita, puede ir creciendo hasta ocupar el tamaño máximo especificado. Soporta muchas características especiales de las cuales puede obtener más información en la página principal de qemu.
  • Qcow (QEMU Image Format): formato versión anterior a Qcow2.
  • Raw (Raw Disk Image File): Las imágenes de discos virtuales de este tipo, tiene la ventaja de ser simples y facilmente exportables a otros emuladores. Este tipo de imagen creará un archivo que ocupará desde el inicio todo el tamaño especificado.
  • vmdk (VMWare 3-4 Image Format): formato de imagen compatible con VMware 3 y 4.

En mi caso crearé 2 discos duros virtuales, cada uno de 4 GB, en formato Qcow2 (pensando en que luego quizás los queme en un par de DVD).

Nótese que en este momento sólo creamos un disco virtual, luego procederemos a crear el segundo.

Pulsar siguiente.



* La siguiente pantalla pregunta sobre la configuraciones de la máquina virtual (luego de pueden cambiar). Pulsar siguiente.


* En la siguiente pantalla, seleccionar: "Ver Opciones de configuración avanzada después de salvar" y finalizar pulsando el botón: "Salvar máquina virtual".


* Como seleccionamos la opción: "Ver Opciones de configuración avanzada después de salvar", aparecerá una ventana como la que se muestra a continuación, en la ficha (pestaña) "General" es muy recomendable habilitar el acelerador de qemu.

* En la ficha Red (de la misma ventana "Configuración de máquina virtual") es posible configurar las interfaces de red virtuales en la máquina virtual, por defecto aparece una. También es posible redireccionar puertos desde la máquina invitada hacia la máquina anfitrión, a como se muestra en la figura, donde se configura qemu para que la máquina anfitrión pueda ver el en el puerto de red 8085 el puerto de red 80 de la máquina invitada. Luego de configurar pulsar el botón Guardar.

* De los 2 discos virtuales, sólo hemos creado uno, para crear el segundo disco virtual, hacer clic en el menú: Opciones >> Crear nuevo disco virtual.

* En la pantalla "Crear nuevo disco duro virtual" nuevamente se pregunta sobre el tipo de unidad y el tamaño.

* Luego en la ventana de: "Configuración de máquina virtual" en la pestaña "Configuración de disco" cargar la imagen creada como disco duro hdb (o sea como D: en windows).

* Después de esto ya estamos casi listos para iniciar la instalación, en la misma ventana, pero en el segmento: "Unidades de cd-rom" seleccionar bootear desde un CD-ROM de la computadora. O también es posible bootear desde una imagen ISO.

* Luego en la ventana principal de "Qemu Manager" hacer clic en el icono de PLAY, y podrá iniciar la instalación de GNU/Linux Debian en su máquina virtual con 2 discos duros de 4GB cada uno.


También existen otras alternativas a QEMU, como es el caso de VirtualBox, aquí tengo un artículo sobre VirtualBox:

http://denisjtorresg.blogspot.com/2009/03/como-instalar-gnulinux-debian-en.html

También puedes leer más sobre VirtualBox en este artículo de alexio44 en su blog: http://alexio44.blogspot.com/2008/07/iniciando-la-virtualizacion.html

miércoles, abril 30, 2008

Instalar tsearsh2 en PostgreSQL con soporte español con ispell

Introducción

Este pequeño manual trata sobre la instalación, configuración y realización de una pequeña prueba del motor de búsqueda para texto[4] Tsearch2[3] usado en PostgreSQL[1][2] con soporte para diccionario Español usando ispell y codificación de caracteres iso-8859-1, este manual se basa en mi experiencia personal usando Tsearch2, como parte del proyecto de software libre HelpDesk fantASTIC[9]. Es importante destacar que actualmente (20 Abril 2008) Tsearch2 está integrado en PostgreSQL 8.3, por lo cual este gran parte de este manual será válido sólo para versiones inferiores a PostgreSQL 8.3, en mi caso he usado Tsearch2 usando ispell con idioma español con PostgreSQL 8.1 y supongo que este manual funcionaría perfectamente bien con PostgreSQL 8.0, al mismo tiempo estoy seguro que con PostgreSQL 8.2 presentará un problema, provocado por un bug presente en un paquete llamado snowball[5] usado por Tsearch2.

El ejemplo aquí descrito ha sido realizado en GNU / Linux Debian Etch 4.0 r0, pero no implica que no pueda ser posible su implementación en otras distribuciones de GNU / Linux o en otros sistemas operativos soportados por PostgreSQL (como en MS Windows).

Se recomienda leer un poco (aunque no es necesario para completar la realización de este ejemplo) el manual de Tsearch2 ubicado en: http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html

Instalar PostgreSQL en Debian Etch GNU/Linux

Aquí no hay mucho que decir:


#apt-get install postgresql-8.1 postgresql-contrib-8.1 postgresql-client-8.1



Importante: no olvidar instalar el paquete postgresql-contrib, pues es allí donde viene Tsearch2.

Descripción de Ejemplo

Como parte de esta explicación, expongo un pequeño ejemplo, el cual se trata del almacenamiento de "artículos" los cuales constan de un "nombre" y del "contenido" del artículo, el objetivo es poder hacer búsquedas por aproximación entre todos los artículos registrados (usando Tsearch2 y PostgreSQL).

Crear Base de Datos de Prueba

Una vez instalado PostgreSQL se ha creado en nuestro sistema un usuario llamado "postgres", el cual es el administrador del RDBMS, para crear la nueva base de datos, que se llamará: "articulos" es posible hacer:


#su postgres
$createdb articulos


Nota: De aquí en adelante voy a suponer que usted sabe usar alguna herramienta cliente básica de PostgreSQL, en este manual usaré psql, cabe destacar que también es posible utilizar las herramientas gráficas, como por ejemplo pgAdmin3.

Definir un nuevo lenguaje procedural en la Base de Datos

Para este ejemplo crearemos algunos scripts en PL/pgSQL, para lo cual es necesario que nuestra base de datos "articulos" tenga soporte para este lenguaje procedural.

Para instalar plpgsql, ejecutar desde una consola, estando siempre como usuario postgres (o cualquier usuario con los privilegios suficientes):


$createlang plpgsql articulos


También es posible hacer esto mismo desde una consola SQL dentro de PostgreSQL:


CREATE PROCEDURAL LANGUAGE plpgsql;


Diseño de Estructura de la Base de Datos (mi ejemplo)

Para ejemplo necesitamos sólo una tabla, la cual se llamará "articulo" y tendrá esta estructura:


Para hacer uso de Tsearch2, necesitamos crear un campo más en la tabla "articulo", este campo debe ser de tipo "tsvector" (este tipo de dato "tsvector" se instalará en nuestra base de datos cuando instalemos Tsearch2, algo que se describe más adelante). Tsearch2 usará este campo extra con el fin de crear una "especie" de índice de busqueda (no es un índice como tal a nivel de base de datos).

Nota: Mi proyecto HelpDesk fantASTIC[9], utiliza PEAR MDB2[6] como capa de abstracción de base de datos, MDB2 hace una especie de reconocimiento o revisión de los tipos de datos de los campos de las tablas que se acceden por medio de él, el tipo de dato "tsvector" no es reconocido por PEAR MDB2[6], lo cual genera un error al intentar acceder por medio de este a tablas que contengan campos con este tipo de datos, razón por la cual sugiero crear una tabla extra para almacenar los índices de Tsearch2, y mediante un trigger mantener ambas tablas sincronizadas, en lugar de crear un campo extra dentro de la tabla.

Supongo que este problema (el no reconocimiento de los tipos de datos especiales como "tsvector") también se podría presentar al usar cualquier otro framework de acceso a base de datos, que revise los tipos de datos de los campos y no tenga soporte para el tipo "tsvector", en caso contrario (ya sea que el tipo de datos de los campos no sea de importancia o de que sí exista soporte, para el tipo de datos "tsvector") este modelo seguiría siendo siempre funcional.

A continuación se presenta el modelo DER versión 2 a utilizar en este ejemplo:




La tabla "pg_ts_articulo" almacenará el índice "tsvector", para cada artículo en el campo "articulo_tsearch_idx" de tipo "tsvector".

Cada ves que un artículo se cree, modifique o borre en la tabla "articulo" un trigger se disparará y hará los cambos pertinentes en la tabla "pg_ts_articulo", para que el índice siempre esté actualizado.

Instalar Tsearch2 en la Base de Datos "articulos"

Para instalar Tsearch2 en nuestra base de datos, utilizamos el archivo sql provisto por el paquete "postgresql-contrib", el cual se encuentra en la siguiente ruta:

/usr/share/postgresql/<'version'>/contrib/tsearch2.sql

En mi caso estoy usando PostgreSQL 8.1, por lo cual ejecuto como usuario con privilegios sobre la base de datos "articulos":


$psql -d articulos -f /usr/share/postgresql/8.1/contrib/tsearch2.sql


Aparecerán mensajes como este:


SET
BEGIN
psql:/usr/share/postgresql/8.1/contrib/tsearch2.sql:13: NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «pg_ts_dict_pkey» para la tabla «pg_ts_dict»
CREATE TABLE
CREATE FUNCTION
CREATE FUNCTION
...
CREATE OPERATOR
CREATE OPERATOR
CREATE OPERATOR CLASS
COMMIT


Si todo sale bien, se han agregado las siguientes tablas a la base de datos "articulos":

pg_ts_cfg
pg_ts_cfgmap
pg_ts_dict
pg_ts_parser



Estas tablas son usadas para configurar y parametrizar Tsearch2.

Instalar soporte a lenguaje español de Tsearch2 con ispell usando codificación iso-8859-1

En la página Web de Tsearch2[3] podrá encontrar el archivo tsearch2_espanol.tar.bz2 el cual contiene lo necesario para que Tsearch2 soporte el lenguaje español mediante ispell usando codificiación iso-8859-1. En la página Web de Tsearch2 busque:

tsearch2_espanol.tar.bz2 - spanish ispell dictionary in iso-8859-1 encoding (Denis Torres) [10]

Descargue el archivo y descomprímalo, encontrará los siguientes archivos:

"espanol.aff", fichero de afijos, si desea conocer más sobre estos archivos puede visitar aquí [7].
"espanol.dict", diccionario de palabras en español, si desea conocer más sobre estos archivos puede visitar [7].
"espanol.stop", lista de palabras que no serán indizadas por Tsearch2.[8]
"default_spanish.sql", script sql que parametriza las opciones correspondientes en las tablas de configuración de Tsearch2, para agregar una nueva configuración de diccionario para Tsearch2 llamada "default_spanish".

Copie los siguientes archivos en /usr/local/pgsql/share/contrib/, (si la ruta no existe puede crearla):

espanol.aff
espanol.dict
espanol.stop

Nota: en debian no sería la mejor opción instalar estos archivos en la ruta /usr/local/pgsql/share/contrib/, si usted desea puede copiar estos archivos en otro lugar, pero asegúrese de ajustar el archivo "default_spanish.sql" antes de ejecutarlo.

Luego ejecute el script "default_spanish.sql", en la base de datos "articulos"


$psql -d articulos -f {ruta_al_script}/default_spanish.sql


Crear estructura de datos Diseñada

Aquí no hay mucho que explicar, supongo que el lector sabe crear tablas en SQL. En otras palabras crear las tablas "articulo" y "pg_ts_articulo".


CREATE TABLE articulo(
id_articulo serial NOT NULL,
nombre text NOT NULL,
contenido text,
primary key (id_articulo)
);

CREATE TABLE pg_ts_articulo (
id_articulo integer NOT NULL,
articulo_tsearch_idx tsvector,
PRIMARY KEY (id_articulo)
);

CREATE INDEX idx_articulo_tsearch
ON pg_ts_articulo USING gist (articulo_tsearch_idx);

ALTER TABLE pg_ts_articulo ADD FOREIGN KEY (id_articulo) REFERENCES articulo (id_articulo) ON UPDATE RESTRICT ON DELETE CASCADE;


Es importante hacer notar:

1- Se ha creado para el campo "articulo_tsearch_idx" un índice a nivel de base de datos de tipo: "gist". (Leer el manual de Tsearch2 para obtener detalles sobre los indices GIST).
2- Se ha agregado una relación entre los campos "id_articulo" desde la tabla "articulo" hacia "pg_ts_articulo" con la restricción: ON DELETE CASCADE para que al momento de borrar un "articulo" se borre también su registro relacionado en "pg_ts_articulo".

Crear trigger para la sincronización de los artículos con campo de índice de Tsearch2

Cada vez que se actualice la tabla "articulo" debería actualizarse el índice de Tsearch2 en la tabla "pg_ts_articulo", este trabajo lo hará el siguiente trigger:


CREATE OR REPLACE FUNCTION actualizar_indice_tsearch2() RETURNS "trigger" AS $$
BEGIN

DELETE FROM pg_ts_articulo WHERE pg_ts_articulo.id_articulo = NEW.id_articulo;
INSERT INTO pg_ts_articulo
VALUES (NEW.id_articulo, to_tsvector('default_spanish', coalesce(NEW.nombre) || ' ' || coalesce(NEW.contenido)));

RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';


CREATE TRIGGER tsvectorupdate AFTER UPDATE OR INSERT ON articulo
FOR EACH ROW EXECUTE PROCEDURE actualizar_indice_tsearch2();


Nota: El indice insertado en "pg_ts_articulo" abarca no sólo el "contenido" sino también el "nombre" del "articulo" para que al momento de realizar una búsqueda se evalúen ambos campos[coalesce(NEW.nombre) || ' ' || coalesce(NEW.contenido)].

Introducir algunos datos de pruebas


INSERT INTO articulo (nombre,contenido) VALUES ('Función echo', 'Muestra todos sus parámetros por la salida definida. echo() no es realmente una función (es una sentencia del lenguaje) de modo que no se requiere el uso de los paréntesis. De hecho, si se indica más de un parámetro, no se pueden incluir los paréntesis.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función sin', 'Devuelve el seno de arg en radianes.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función print_r', 'print_r -- Imprime información legible para humanos sobre una variable.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función print', 'Muestra el valor de cadena por la salida definida. Siempre devuelve el valor 1. print() no es realmente una función (es una sentencia del lenguaje) de modo que no se requiere el uso de los paréntesis.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función array_pop', 'array_pop() extrae y devuelve el último valor de la matriz, acortando la matriz en un elemento. Si matriz está vacía (o no es una matriz), se regresará NULL.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función array', ' Devuelve una matriz con los parámetros que se le pasan. A dichos parámetros se les puede dar un índice usando el operador =>. Lea la sección sobre los tipos de matrices para más información sobre matrices. Nota: array() es una construcción del lenguaje que se utiliza para representar matrices literales, no una función regular. La forma "índice => valor" separada por comas, define índices y valores. el índice puede ser de tipo cadena o numérico. Cuando el índice es omitido, se genera automáticamente un índice numérico, empezando en cero. Si el índice es un entero, el siguiente índice generado será igual al índice con número mayor + 1. Note que cuando se definen dos índices idénticos, el último sobre escribe al primero.Tener una coma después del último elemento de la matriz, aunque inusual, es sintácticamente valido. El siguiente ejemplo demuestra cómo crear una matriz bidimensional, cómo especificar claves para matrices asociativas, y cómo especificar índices no consecutivos en matrices normales.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función cos', 'cos() devuelve el coseno del parámetro arg. El parámetro arg está en radianes.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función tan', 'Devuelve la tangente de arg en radianes.');
INSERT INTO articulo (nombre,contenido) VALUES ('Función array_rand', 'array_rand() es bastante útil cuando desea elegir una o más entradas aleatorias de una matriz. Recibe una matriz de entrada y un argumento opcional num_req que especifica cuántas entradas desea seleccionar; si no se precisa éste argumento, recibe un valor por defecto de 1. Si está eligiendo únicamente una entrada, array_rand() devuelve la clave de una entrada al azar. De lo contrario, devuelve una matriz de claves para las entradas aleatorias. Esto se ha hecho de esta forma para que usted pueda elegir claves al igual que valores al azar de la matriz. ');


Probar actualizaciones en ambas tablas

Primero:

SELECT * FROM articulo;


Luego:


SELECT * FROM pg_ts_articulo;


Ambas tablas deben contener datos.

Crear función plpgsql para realizar las búsquedas


CREATE TYPE respuesta_buscar_articulo AS (id_articulo int, nombre text,contenido text, puntaje real);

CREATE OR REPLACE FUNCTION buscar_articulo(text) RETURNS SETOF respuesta_buscar_articulo AS $$
DECLARE
AGUJA ALIAS FOR $1;
RESPUESTA RECORD;
BEGIN

FOR RESPUESTA IN (
SELECT
articulo.id_articulo,
headline('default_spanish',articulo.nombre,tsq) AS nombre,
headline('default_spanish',articulo.contenido,tsq) AS contenido,
rank(articulo_tsearch_idx,tsq) as puntaje
FROM
pg_ts_articulo,
to_tsquery('default_spanish',AGUJA) tsq,
articulo
WHERE
articulo.id_articulo = pg_ts_articulo.id_articulo
AND
articulo_tsearch_idx @@ tsq
ORDER BY puntaje DESC )
LOOP
RETURN NEXT RESPUESTA;
END LOOP;

RETURN;
END;
$$
LANGUAGE plpgsql;


Hacer búsquedas de prueba

A continuación sólo debemos hacer algunas pruebas:

1- Coincidir sólo una palabra:


select * from buscar_articulo('función');


2- Coincidir 2 (ambas a la vez) palabras:


select * from buscar_articulo('función & matriz');


3- Coincidir cualquiera de 2 palabras:


select * from buscar_articulo('función | seno');






Notar que en esta última búsqueda los artículos que involucran ambas palabras "función" y "seno" tienen mayor puntaje.

Enlaces
[1] http://www.postgresql.org
[2] http://es.wikipedia.org/wiki/Postgresql
[3] http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
[4] http://en.wikipedia.org/wiki/Full_text_search
[5] http://archives.postgresql.org/pgsql-general/2007-09/msg00794.php
[6] http://pear.php.net/package/MDB2
[7] http://www.datsi.fi.upm.es/%7Ecoes/espell_leame/espell_leame.html
[8] Se agradece a las personas que colaboraron para la elaboración de esta lista de palabras: https://lists.ubuntu.com/archives/ubuntu-ni/2007-August/001921.html
[9] http://sourceforge.net/projects/fantastic/
[10] http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/dicts/ispell/tsearch2_espanol.tar.bz2