Encore ENUWI-G2 (RTL8187b) en Debian

21 09 2008

/me pone música porque se viene para largo…

En el transcurso del fin de semana estuve peleando con la placa de red USB Encore ENUWI-G2, pero al final conseguí hacerla funcionar y de la forma que pretendía hacerlo.

Hace algunos meses que tenía ganas de comprarme una placa de red wifi para estudiar algunos conceptos y ver la forma de analizar paquetes con encriptación. Algunas de estas cosas las vimos muy por arriba en la facu y me quedó picando el bichito de ver como es esto de las redes wifi.

En aquél momento averigué por todos lados sobre placas PCI, que suponía que eran más barata y que además me daba la impresión de que tenían más alcance al tener una antenita por afuera. Después de esta recorrida no decidí comprarme nada porque estaban un poco caras, algo así como $100 o más. No quería gastar esa plata para algo que no necesitaba ya que era sólo por investigación.

Pasó cierto tiempo, empecé a trabajar, me pelié con muchas placas wifi en el trabajo y mi ignorancia me mataba frente a este tipo de redes. Me dí muchas veces la cabeza contra la pared cuando quería conectarme a un AccessPoint: me mataba depender de un entorno gráfico para poder conectarme (estaba usando el KWifiManager), asique me decidí a aprender todo este tipo de cosas.

El viernes por la tarde, me fui a promocionar la 3ra Jornada de Python en Santa Fe con un amigo al centro en busca de sponsors y de paso aprovechaba para preguntar sobre una placa wifi en algunos lugares que quedaban por el centro. Me fui de casa con la idea de comprar una TP-Link que estoy seguro que funciona ya que es la que pudimos configurar en el trabajo: mediante ndiswrapper.

Los precios que manejaban las casa de computación eran al rededor de los $80 para arriba y todas eran placas que no conocía, asique no me gustaba para nada. Igualmente le preguntaba si sabían que estas funcionen en linux para luego ir a averiguar si en alguna me decían que si. La mayoría no tenía ni idea, asique seguía mi camino.

Por último fui a un lugar que venden DVD’s, CD’s y un montón de accesorios pero… Por las dudas fui igual. Me encontré con la placa del título de este post a un precio de $60, anoté el modelo porque era interesante este precio y le dije que iba a averiguar si funcionaba en Linux y que si era así volvía a comprarla. Antes de irme le pregunté si sabía si funcionaba y me dijo: “Anda!”, nada más.

Encore ENUWI-G2

Encore ENUWI-G2

Cuando me estoy yendo mi amigo me dice: “¿Y porqué no la llevás si sabés que anda?”, a lo cual le contesto delante de los vendedores: “Me quiero asegurar”. Salimos de ahí y nos estábamos volviendo para casa, para supuestamente volver al día siguiente (Sábado) a comprarla luego de buscar en internet. Se me ocurrió ir a un cyber para verificar esto y comprarla ese mismo día.

Lo primero que encontré es que muchos la habían hecho funcionar con ndiswrapper, tal y como yo sabía que funcionaba la TP-Link, asique ya estaba dicho: “La tenía que comprar”. Salí del cyber y la compré.

Cuando llegué a mi casa seguí buscando información sobre cómo instalarla y por todos lados estaba la misma descripción del que había encontrado en el cyber asique me puse a hacerlo de esta forma. Esto era instalar ndiswrapper, cargar el driver de Windows XP y levantar el módulo del kernel de ndiswrapper, pero… Oh! sorpresa me encuentro que el módulo del kernel no levanta. Buscando en Google encontré que tenía que compilar el módulo para la versión específica de mi kernel (2.6.24-amd64) ya que no venía precompilado.

Manos a la obra entonces. Instalé los paquetes necesarios y compilé el paquete:

 apt-get install module-assistant ndiswrapper-source
 m-a a-i ndiswrapper

Una vez que tenía esto andando, pude hacer modprobe ndiswrapper y que carge correctamente este módulo, aunque en los logs (/var/log/message) me estaba indicando que tenía un driver para 32bit y que yo tenía un kernel de 64bit. ¡Qué mala suerte!. Busqué por todo el CD los drivers para XP64bit y no los encontré, asique los bajé la página oficial de encore y estos sí funcionaron.

Luego investigué como hacer para conectarme a mi AccessPoint, busqué por internet e hice muchas pruebas antes de lograrlo. Lo primero que me fijé en realidad era el comando iwlist (del paquete wireless-tools) que entre otras cosas sirve para escanear las redes y ver los essid’s que exportan los AccessPoint. Por suerte veía el mío, y la calidad de la señal era de 60 más o menos estando a 1,5 metros de distancia. Esto no me sorprendío porque calidad de la señal que teníamos en el trabajo con las otras placas era más o menos igual.

En poco tiempo logré configurar la conexión sin encriptación y funciona sin problemas. Luego probé hacerlo con WEP y también funcionaba. Asique quise pasar al siguiente paso: sniffear la red utilizando la placa en el modo Monitor. Cuando intento cambiar el modo de la interfaz, el mismísimo driver me dice que la placa esta no soporta este modo, nah!. Me fui a la página oficial y efectivamente dice que sólo funciona en Ad-Hoc (punto a punto) y en modo Managed (contra un AccessPoint).

Seguí buscando por todos lados, no me podía dar por vencido. Encontré por todos lados un proyecto de drivers libres para el modelo rtl8187, que aunque esa página no está muy completa, tiene unos links que resultaron interantes. Y como siempre sucede, uno nunca lee la página completa, lee un poquito y se va directamente a ejecutar los comando :) , luego me encontré con que el chipset rtl8187b no estaba soportado por ese driver :(

También encontré una modificación a este driver que parece funcionar con este modelo de chipset. Mmm… vamos a probar. Me pelié mucho para compilarlo, hice un poco de magia negra y salió andando. Me lo detectaba y todo lindo, pero cada 2 o 3 minutos recibía un hermoso Kernel Panic, lo cual me llevó a hacer algunas pruebas más y descartarlo por completo si quería que mi sitema siga funcionando :) .

Ya eran las 2 de la mañana de anoche y yo seguía dando vueltas con mi placa de red wifi, no encontraba la solución que buscaba. Sí tenía la placa funcionando con ndiswrapper, pero no la podía sniffear ni tampoco me gustaba que los drivers no sean libres (lo único que tengo no-libre son los de NVIDIA porque no encontré solución aún :( ). Me fui directo al código fuente del kernel y me puse a leer los ChangeLogs, vi que se estaba trabajando para el chipset rtl8187 y me volvieron las esperanzas nuevamente. También vi que Linus Torvalds hizo un commit el 23 de Diciembre de 2007: ¡Que capo!

A todo esto me dijo: “¿Y porqué no?, ya estoy en el baile. Me compilo el kernel y lo saco andando”. Me bajé el kernel (2.6.27-rc6) de la página oficial y seguí una guía muy buena que explica como hacerlo a la manera Debian, esto sería creando un paquete .deb y luego instalándolo.

Por supuesto que lo primero que hice cuando hay que configurar las opciones fue verificar que estaba tildada la opción de mi placa de red wireless :) . Además tuve que cambiar unas cositas en esa guía, primero, el comando fakeroot por fakeroot-sysv porque el primero comando me decía que no lo tengo. Segundo, me saltié el paso de crear un ramdisk (el paso 8) de la guía. Al terminar la instalación completa me daba este error al intentar bootear con el nuevo kernel:

Kernel panic - not syncing VFS: Unable to mount root fs on unknown - block (0,0)

Esto tengo entendido que es por ese paso que me saltié, pero no lo hice porque no me gustaba nada tener que bajar un paquete que no conocía de un lugar que no fueran los repositorios de debian, además era una versión del kernel muy vieja y decía que era algo novedoso la forma en que se trataba el RamFS. Quizás una maña mía nomás. Al final lo terminé haciendo de otra forma:

update-initramfs -c -v -k 2.6.27-rc6-rtl8187b-1

Esto me generó el archivo /boot/initrd.img-2.6.27-rc6-rtl8187b-1 el cual tuve que agregar a la entrada del nuevo kernel el archivo /boot/grub/menu.lst para que funcione correctamente.

Reinicié la máquina, bootié con este kernel y me fijé si se había detectado la placa wifi: perfecto. Me conecté al router, hice algunas pruebas, intenté switchear sobre los distintos modos (Managed, Monitor, etc) y funcionaba. Wiiii!

Pero todo no se puede, no tenía X porque los drivers de NVIDIA no estaban funcionando en este kernel :) . Igualmente lo que me importaba era testear a full este nuevo driver y pude hacerlo. Cuando hice un iwlist scan me detectó la red de mi casa con una señal de 100. Wow!! Nada que ver a los drivers que estaba usando con ndiswrapper, y cada tanto veo que oscila entre 90 y 100.

El próximo paso fue investigar como hacer para que funcionen correctamente los drivers de NVIDIA en el kernel 2.6.27-rc6 que es en dónde me está funcionando la placa wifi… Tema para otro post.

Update: Martes 23 de Septiembre

NOTA: la primer parte (instalación con ndiswrapper) fue probada en un Live-CD (32bit y 64bit) de Ubuntu también. La compilación de los kernel’s no, pero debe ser exactamente lo mismo. Mejorando esto, lo que conviene hacer es bajarse los drivers Beta de NVIDIA ya que no tienen ningún problema para instalarse.





Jugando al Cliente-Servidor

12 03 2008

Esta semana se me terminó la joda. El lunes empezaron las clases en la facultad y yo de colgado no fui porque no sabía cuando empezaban, asique fui el martes (ayer) por primera vez. Hoy teníamos una clase de práctica de una materia que todavía no dimos la teoría asique no tuvimos clases.

Pensando en esto, que ya no iba a tener más vacaciones, me puse las pilas con la otra máquina que tenía en casa para dejarla funcionando como un servidor. ¿Servidor de qué? De cualquier cosa, lo que necesite en el momento, algo. Ésta ya tiene historia, porque es la que tiene la instalación de Ubuntu hecha por red.

Lo primero que se me ocurrió, fue pasar toda la música al servidor y que todas las pc de la casa la utilicen de ahí, así no hay temas repetidos, lo que implica el doble de espacio de almacenamiento. Pero antes que nada configuré el servidor ssh para poder realizar todo esto.

SERVIDOR NFS

Para compartir la música, tenía dos posibilidades, o al menos son las que conozco yo: NFS o Samba. Opte por NFS porque con Samba ya había tenido varios problemas. Ahora sí, los usuario de Windows no sé como van a hacer para sacar archivos de acá por el momento.

NFS es tan simple configurarlo que me llevó 2 o 3 minutos. Primero instalé el paquete
nfs-kernel-server, y agregué la carpeta que quería compartir a /etc/exports con una sóla línea:

/home/humitos/Música    10.0.0.5(rw,sync)

Moví toda mi música ahí, y luego le dije a la máquina cliente (la que utilizo habitualmente) que me monte, en mi carpeta donde toda la vida tuve la música, esa carpeta que se encuentra en la red. En el archivo /etc/fstab agregué una línea:

silvita:/home/humitos/Música /home/manuel/musica nfs rsize=8192,wsize=8192,timeo=14,intr

No tuve que cambiar ninguna configuración en Amarok ni nada por el estilo, es como si esa carpeta estaría en mi máquina y nunca hubiese pasado nada. Eso es lo bueno de poder montar lo que se te raje en dónde se te raje, y no andar creando unidades de disco remotas en X:\ por ejemplo.

Nota: la máquina servidor se llama silvita y el cliente michifus. Sí ¿Y qué?

AMULE-WEB

Lo segundo fue poner amule-web. Esto sirve para poder gestionar el aMule desde cualquier lado mediante un explorador web. Buscar, pausar, conectar, desconectar, cambiar configuraciones, etc.

Primero instalé el paquete amuled que me instaló algunas cosas más, no recuerdo bien, pero eran dependencias extricta, no sugerencias ni recomendaciones. Que en fin son lo mismo, pero Ubuntu hace la diferencia.

Ejecuté amuled, me creó los archivos de configuraciones y demas. Cerré el demonio con CTRL+C ejecuté este comando:

$ echo -n CONTRASEÑA | md5sum | cut -d ' ' -f 1
d287200e83ee04f67294de90dd72f9c6
$

y edité el archivo ~/.aMule/amuled.conf:

AcceptExternalConnections=1
ECPassword=CONTRASEÑA

En la sección [WebServer]:

Enabled=1
Password=CONTRASEÑA

Abrí los puertos 4662 TCP, 4665 UPD, 4672 UPD y 46711 TCP, corrí el demonio nuevamente y ¡listo! ahora se puede acceder desde cualquier lado ingresando http:/host.ejemplo:4711

Fuente: usrweblog

APACHE

Lo que sigue (configuración de torrentflux) necesita tener configurado Apache, aunque yo no lo hice en este orden, me parece que es mejor primero instalar Apache y luego TorrentFlux o por menos al mismo tiempo.

Lo que cambié en la configuración que trae por defecto apache, fue agregar dos líneas al archivo /etc/apache2/apache2.conf para poder compartir al mundo (internet) las carpetas public_html de los home de cada uno de los usuarios. Al final de todo el archivo puse esto:

UserDir public_html
UserDir enabled all

Lo que hace es habilitar el módulo UserDir para que se puedan compartir estas carpetas. Aunque todavía no le indiqué que tiene que cargar el módulo (para que esto funcione). Esto se hace creando un link simbólico, yo lo hice así:

$ cd /etc/apache2/mods-enabled
$ sudo ln -s /etc/apache2/mods-available/userdir* .
$ sudo /etc/init.d/apache2 restart

Fuente: huevas, apache

TORRENTFLUX

TorrentFlux es un cliente bittorrent desarrollado en PHP al cual le doy la misma utilidad que al amule-web. Poder gestionar las descargas desde cualquier lado. La verdad que está buenísimo, es multi-usuario, se puede hacer lo mismo que en cualquier cliente bittorrent o más…

Para instalarlo seguí esta guía, que no voy a reproducir porque está demasiado bien explicado aunque esté en inglés, es ir tipeando comandos en la consola, casi como un click en Siguiente-Siguiente.

XDMCP

¿Qué es esto? No tengo la más mínima idea, pero está buenísimo. Es como un ssh -X pero en vez de redireccionar sólamente una ventana tenés todo el escritorio de forma remota. Estuve leyendo algo en wikipedia, y demás webs. Siempre me había preguntado porqué el Kubuntu traía algo que decía al inicio de la sesión “Remote Login”, que de hecho no tiene porqué estar en inglés.

Pero bueno, busqué y encontré al toque, en menos de 15 minutos lo tenía funcionando. ¿Qué hice? busqué este archivito en la máquina servidor (silvita) /etc/gdm/gdm.conf y cambié un parámetro:

[xdmcp]
Enable=true

Reinicié el servidor porque no sabía como reiniciar sólo esto de gdm (supongo que con un CTRL+ALT+BACKSPACE se solucionaba) volví al cliente, michifús, puse en kde que quería iniciar una sesión nueva y que sea de remota. Al toque me apareció un item en la lista, doble click y voilá, estaba en el login de la otra pc. Asique ahora tengo en CTRL+ALT+F7 mi sesión de KDE en mi máquina y en CTRL+ALT+F9 tengo una sesión de GNOME en el servidor. Lero lero!





¿Un escritorio? KDE. – Primera parte: Konqueror

23 11 2007

konqueror

Sin dudarlo esa es mi respuesta. Hace algunas semanas, quizás un mes, no tengo idea. Instalé Ubuntu en mi otra pc por medio de la red. Le puse esta distro de linux (con GNOME) ya que la pobre tiene algunos problemas serios y es un poco lenta.

No viene mucho al caso tampoco. El punto importante en esto es que traté varias veces de utilizar este entorno desde la otra pc, pero no pude adaptarme todavía. GNOME tiene muchas cosas que no me gustan, y algunas pocas que sí. Me siento mucho más cómodo con KDE por varios motivos.

Cuando quise configurar la pc con Ubuntu, no me quedaba otra que usar GNOME, además esa era la idea. Varias veces intenté cambiarme, no sé bien porqué, supongo que por
una cuestión de rendimiendo. Hay muchos que dicen que KDE es mucho más pesado que GNOME, quizás sea verdad.

Lo primero que noté, es que la mayoría de los diálogos de GNOME no tienen el botón cancelar, como para deshacer los cambios. Un ejemplo concreto. Si hacemos botón derecho en el escritorio (esto es bien Windows) como para cambiar el fondo de pantalla del escritorio (no digo el camino correcto porque no lo sé). Elegimos uno, al azar, que sé yo, y si luego queríamos dejar la opción como estaba, no podemos, ya que de la única forma que podemos salir es aceptando.

Esto lo confirmo cuando en mi máquina con KDE instalo el programa Día (para hacer diagramas), en el que noté exactamente los mismo. No lo estoy cuestionando, ni diciendo si esto es mejor o peor. Gustos son gustos. A mí particularme esto por ejemplo no me gusta.

En estos últimos días aprendí muchas cosas sobre Konqueror, el navegador web, explorador de archivos, lector de páginas de manuales, y un gigante etcétera, por defecto del KDE. Estuvimos con leo_rockway, un flaco que conocí en el canal de irc de ubuntu argentina (#ubuntu-ar en freenode.net) y además un beta tester oficial de todos mis programas :P .

“El que busca siempre encuentra”, dicen. Hace un tiempo, yo le había comentado a Leo que quería usar los bookmarks de del.icio.us en el Konqueror y no podía. Esto era uno de los motivos por los cuales no dejaba el Swiftfox.

Pasó un largo tiempo, instalé miles de plugins para el Swiftfox, y encima me acostumbré a ellos, mouse gestures, diccionario español para la corrección ortográfico y demás. Después de este tiempo y un poco más, recibo un mail de Leo que decía que había encontrado un plugin para el Konqueror que era para los bookmarks de del.icio.us. Lo probé, pero no me funcionó, tampoco le dí mucha bola porque además tenía los mouse gestures y sabía que el Konqueror eso no lo tenía, asique fue.

Sigió pasando el tiempo, y cada vez necesitaba hacer más y más cosas. Y siempre le volvía a dar una oportunidad más al Konqueror (de hecho, me gusta mucho más que cualquier otro navegador, por eso seguía insistiendo) porque descubría cosas nuevas. En este momento descubrí que presionando la tecla Control, Konqueror te muestra sobre los links unas letras y presionando una de las letras que muestra se hace “click” en ese hipervínculo. Buenísimo, a veces no queremos usar el mouse y esto para esos casos viene petacular!

Seguía pasando el tiempo, y yo al Konqueror no le daba bola, aunque le seguía encontrando cosas que lo hacían cada vez mejor. ¡Yo quería mis bookmarks y mis mouse gestures! Leyendo el blog de nercof, en un artículo que nada que ver con el Konqueror, él usa GNOME y Firefox, asique ni mú. Descubrí que presionando Control+Shift+Arriba o Abajo empieza a desplazarse automáticamente muy sutilmente para la dirección que presionamos. Si presionamos nuevamente aumenta la velocidad. Puede ser útil para leer un texto largo, a una velocidad relativamente baja. Yo no me acostrumbré todavía, pero lo probé y está bueno.

Tampoco hizo que me cambie de navegador, pero al menos me hizo darle otra oportunidad y saber que siempre estaba ahí mi navegador esperándome.

Desde que tengo hosting en el servidor nuevo, necesito acceder varias veces por ssh. A esto lo hacía por medio de una consola o con el mc. Pero para copiar ficheros era bastante embolante usar la consola asique me manejaba con el mc para esto.

Un día en el canal de PyAr escucho que StyXman menciona algo así como ¿Humitos estás conectado con el Konqueror por fish? A lo que respondí que no, que estaba usando el mc. Osea, ni idea de lo que me estaba hablando. Leí algo y ví que se podía acceder del mismo estilo que el mc pero con el Konqueror. Instalando un paquete (kfish en Ubuntu), poniendo en la barra de direcciones:

fish://usuario@host/carpeta/a/acceder

Podemos ver en el Konqueror los archivos que están en esa máquina como si estuvieran en la nuestra, y así poder utilizar cualquier programa que tengamos instalado en nuestra máquina con los archivos que se encuentran en la otra. Por ejemplo el Kate, ya no más Vim :) .

Además me hice un bookmark de esto, así no tengo que escribir más la dirección de la máquina a las que quiero acceder. Por lo que esto me hizo dejar otra vez el Vim, como así también el mc.

Otra cosa, si pongo un cd de audio y lo exploro con el Konqueror, se pueden ver muchas carpetas, con los nombres: Ogg, Mp3, Wav, etc… Cada una contiene todos los temas del disco en el formato especificado por la carpeta. Osea arrastrando esa carpeta a una de nuestro disco, el Konqueror automágicamente nos convierte los temas al formato especificado. ¡Genial!

También se pueden leer los man pages de los comandos desde el Konqueror poniendo en la barra de direcciones este comando. Con las comodidaes que esto trae, como agrandar la letra, y verlo con un formato un poco más amigable que desde la consola:

man:/comando

¿Ya está? No para nada. El Konqueror tiene mucho más. Si quiero pedirle la ayuda de un programa, hago:

help:/programa

Se pueden habilitar los “Accesos rápidos para web” desde las configuraciones del Konqueror, para por ejemplo buscar un montón de cosas en la web. Algunos ejemplos pueden ser, poniendo gg:humitos, busco humitos en Google, qt3:qtimer busca qtimer en la documentación de Qt, en2es:hello busca hello en wordreference… ¿Qué más querés?

Y por último, creo que solo porque me cansé de escribir, y no porque Konqueror termine acá. Mi amigaso leo_rockway hoy me comentó que pudo hacer funcionar los mouse gestures en Konqueror. Incluso este los trae por defecto, no es un plugins aparte ni nada, pero no vienen activados. Para activarlos hay que ir a kcontrol, luego regional y accesibilidad, introducir acciones, preferencias generales, importar nuevas acciones y colocar la dirección:

/usr/share/apps/khotkeys/konqueror_gestures_kde321.khotkeys

¡LISTO! Tengo los gestures que tanto estaba buscando, y además certificado por leo_rockway. También tiene sesiones este navegador, está integrado con el gestor de descargas KGet, tiene soporte para la cartera de KDE, y miles cosas más.

Obviamente, también tiene cosas malas, pero muy pocas. Yo hasta el momento le encontré sólo una: No funciona del todo bien Gmail, me marca como que tiene errores la página, el navegador. Otra cosa que no me gusta, no digo que sea mala esta, pero a mí no me gusta. El plugin que hasta el momento encontré para del.icio.us, no me gusta para ná.

¿Todavía no usás Konqueror? ¿Qué esperás?

PD: Este post lo escribí de una forma rara, pero muy cómoda: reStructuredText, es simple, fácil, rápido.. :D





¡Llegaron los CD’s!

13 11 2007

Después de comentar qué pasó con los pedidos de cd’s de Ubuntu esta última vez, hoy llegaron a las 12:30 justo un ratito después que me levantara :P ya que anoche me quedé chateando con Marcela Tiznado para poder incluir un paquete en los repositorios de Debian.

Llegaron igual que la otra vez, en un bolsa de plástico flexible, con burbujas dentro (no me acuerdo el nombre en este momento, o al menos cómo le decía). El paquete vino desde “The Netherlands” que queda a uno 11295.50 Kilómetros aproximadamente desde mi ciudad (¡Que dato!).

Adentro trajo,

  • 2 Kubuntu 64-bit
  • 3 Kubuntu 32-bit
  • 2 Ubuntu 64-bit
  • 5 Ubuntu 32-bit
  • 2 Hojas de 4 calcamonías

Lo más gracioso fue que el cartero me dijo cuando bajé a buscarlo: “¿Esto pediste flaco?” con una tonada bastante despreciativa, a lo que contesté sutilmente “Si”

Algunas fotos…

(se nota que no tengo carama digital ¿no? :P )

PD: cualquiera que quiera un CD, me lo pide y si me quedan, les doy…





Estudiando “grep”

11 11 2007

Después de tantas luchas para saber si lo que estoy haciendo en Java funcionaba como debería funcionar, me puse a estudiar el comando grep.

“grep” es un comando que te permite buscar un patrón de coincidencias en archivos de texto, mostrándote la línea entera en dónde se encontró esta coincidencia. Es bastante configurable y también permite expresiones regulares para indicar este patrón.

Este comando puede recibir el nombre del archivo sobre el cuál se debe buscar el patrón o puede tomar la información desde la entrada estándar, por ejemplo:

[manuel] [~]$ grep manzana diccionariocs.txt
amanzanamiento
amanzanar
manzana
manzanal
manzanar
[manuel] [~]$ cat diccionariocs.txt | grep manzana
amanzanamiento
amanzanar
manzana
manzanal
manzanar
[manuel] [~]$

El archivo diccionariocs.txt contiene muchas palabras (una por línea) y es el que nos dieron en la cátedra de la materia para realizar el trabajo de Java.

La idea era poder saber si el resultado que me arrojaba mi árbol de búsqueda era lo que realmente me tenía que estar devolviendo o no, en otras palabras, si funcionaba o se mandaba cualquiera. Asique me hice un intérprete interactivo en Java para poder realizar varias búsquedas sobre el árbol una vez que esté cargado en memoria (suena wow!, pero es una boludez lo que hice :P ).

El intérprete te informa cuales son las palabras que encontró y cuál fue la cantidad de palabras que concordaron con la búsqueda. Pero con el comando anterior me está mostrando todas las líneas en las que aparece la cadena manzana, y sólo necesito las líneas (palabras) que empiecen con manzana, como muestra mi intérprete:

[manuel] [~/proyectos/procesadorpalabras]$ java Main
Cargando diccionario...
Diccionario cargado correctamente.
Ingresando al modo interactivo...
>>> manzana
manzana
manzanal
manzanar
Total de coincidencias: 3
>>>

Asique pregunte, y me dijeron que grep soporta expresiones regulares (hasta ese momento yo no lo sabía) y me bastó con poner el siguiente comando:

[manuel] [~]$ grep ^manzana diccionariocs.txt
manzana
manzanal
manzanar
[manuel] [~]$

Notar el “^” que se antepone a la cadena manzana, de este modo logré mostrar sólo las palabras que me interesaban. Pero también tuve un problema, si hago la consulta “empieza con a”, me tira tres millones de resultado (¿tanto?), más o menos, y quién va a contar línea por línea cuántos son en total: NADIE… Busqué y encontré que tiene una opción para que te devuelva la cantidad de líneas que coinciden con el patrón:

[manuel] [~]$ grep ^a diccionariocs.txt -c
9996
[manuel] [~]$

Lo que demoró milésimas de segundo. Hice la misma búsqueda con mi programa y todavía estoy esperando la respuesta, está bien, el mío además está imprimiendo los resultados en pantalla, y eso demora… :(

>>> a
[...]
Total de coincidencias: 9954
>>>

Ups, parece que no está andando a la perfección mi programa, se comió 9996 – 9954 = 42 palabras. Tendré que revisar el código o ver que está pasando (recién me entero de esto).

Update 11/11: estuve revisando el código y ví que no ingresaba las palabras que sean subpalabras de otras, esto es, si primero lee desde el archivo palabra y después lee pala, esta última no la ingresaba. Pero si las leía en orden inverso no había ningún problema, por eso parecía que funcionaba bien, porque la mayoría de las palabras están ordenas alfabéticamente entonces esto era casi transparente. Igual sigo con un problema ya que al buscar a encuentra 9965, le están faltando 9996 – 9965 = 31 palabras todavía :( .

Update 12/11: como no podía ser de otra forma, como me pasa en todos los lenguajes que programo, tengo problemas de codificación. Esto es, si hay palabras como buchón y buchín, devuelve una de estas dos, ya que ú e í las toma como el mismo caracter. Ya veremos…

Otras opciones que me parecen útiles y que he utilizado anteriormente copiando el comando de páginas o blogs sin saber qué significaban son:

  • -i No hace caso de si las letras son mayúsculas o minúsculas, ni en el patrón ni en los ficheros de entrada.
  • -n Además de la línea con la concordancia, antepone el número de la misma.
  • -v Invierte el sentido de la concordancia, para mostrar las líneas en donde no las hay.
  • -w Sólo muestra aquellas líneas en dónde la palabra se encuentre completa, esto es, donde la palabra se encuentre precedida y sucedida de un caracter de espacio.

Referencias: manpage grep

La publicación de este documento se demoró debido a que me encapriché con que quería ponerle un dibujo, buscando en Google caí a ésta página en la que ví el bicho y me gustó :P . Cómo tenía ganas de no hacer nada, me puse a copiarlo desde el monitor en un papel (soy pésimo dibujando ¿se nota?, en mi vida he hecho dibujos, pero este me pintó y lo hice).

Después quise pintarlo y demás con el Gimp y el Inkscape, pero no hubo caso, asique lo dejé así nomás, como lo había dibujado en un papelito… Y bueno, los ingenieros no estamos para estas cosas… ;)