Diciembre 30, 2006

Traducciones en la consola de Linux con BabelFish

Categoría: Programación — Edwood @ 12:07 pm

Este “shell script” busca en el servicio BabelFish la traducción de una línea de texto en el lenguaje que se especifique:

#
# Este if determina si el usuario necesita ayuda
#
if [ $# -lt 2 ] || [ “$1″ = “–help” ] || [ “$1″ = “-h” ]; then
echo
echo “=================================================”
echo traduce v1.0
echo Este programa hace traducciones
echo utilizando el servicio Babelfish
echo “=================================================”
echo “Licencia GPL 2.0″
echo “Derechos Reservados 2006: Edwood Ocasio”
echo “Email: edwood_ocasio at yahoo.com”
echo “——————————————–”
echo
echo “Uso: traduce ‘término’ ‘lenguajeoriginal_lenguajefinal’”
echo
echo ” Ej. traduce escaner es_en”
echo
echo Para consultar términos que incluyen espacios
echo deben encerrarse entre comillas dobles
echo
echo ” Ej. traduce \”soy yo\” es_fr”
echo
echo “traduce -h o traduce –help muestran esta ayuda”
echo
echo “** Códigos de lenguajes **”
echo
echo “zh_en” -Chinese-simp to English “zt_en” -Chinese-trad to English
echo “en_zh” -English to Chinese-simp “en_zt” -English to Chinese-trad
echo “en_nl” -English to Dutch “en_fr” -English to French
echo “en_de” -English to German “en_el” -English to Greek
echo “en_it” -English to Italian “en_ja” -English to Japanese
echo “en_ko” -English to Korean “en_pt” -English to Portuguese
echo “en_ru” -English to Russian “en_es” -English to Spanish
echo “nl_en” -Dutch to English “nl_fr” -Dutch to French
echo “fr_nl” -French to Dutch “fr_en” -French to English
echo “fr_de” -French to German “fr_el” -French to Greek
echo “fr_it” -French to Italian “fr_pt” -French to Portuguese
echo “fr_es” -French to Spanish “de_en” -German to English
echo “de_fr” -German to French “el_en” -Greek to English
echo “el_fr” -Greek to French “it_en” -Italian to English
echo “it_fr” -Italian to French “ja_en” -Japanese to English
echo “ko_en” -Korean to English “pt_en” -Portuguese to English
echo “pt_fr” -Portuguese to French “ru_en” -Russian to English
echo “es_en” SELECTED-Spanish to English “es_fr” -Spanish to French
exit 0
fi
#
# Aquí comienza el código
#
echo
echo “Traduciendo ‘$1′ ($2) …”
echo “trtext=$1&lp=$2&doit=done&intl=1&tt=urltext&btnTrTxt=Translate”|lynx -dump -post_data http://babelfish.altavista.com/tr|sed -e ‘1,/fish-right.gif/ d’ \
-e ‘/Search\sthe\sweb/,$ d’
echo

En este ejemplo se pide la traducción al inglés (en) de la palabra “aguacate” en español (es):

traduce aguacate es_en

Traduciendo ‘aguacate’ (es_en) …
In English:
avocado

Ahora en francés:

traduce aguacate es_fr

Traduciendo ‘aguacate’ (es_fr) …
En français:
avocat

Si se quieren traducir frases se deben encerrar entre comillas dobles:

traduce “Good bye and thanks for all the fish” en_es

Traduciendo ‘Good bye and thanks for all the fish’ (en_es) …
En español:
Adiós y gracias por todos los pescados

Ahora del español al francés:

traduce “Adiós y gracias por todos los pescados” es_fr

Traduciendo ‘Adiós y gracias por todos los pescados’ (es_fr) …
En français:
Au revoir et merci pour tous les poissons

No podemos esperar traducciones perfectas, a veces no tendrán sentido ya que son generadas automáticamente por un programa que a veces puede ser muy literal en su traducción.

El reto de programar estos servicios para la consola de Linux está en filtrar lo que queremos, desechando lo que no necesitamos. En el caso de la página web que genera Babelfish, usé como referencia el nombre de la imagen de su icono fish-right.gif para marcar el inicio de la traducción y el encasillado de búsqueda con el texto Search the web para marcar el final de la traducción. Todo lo demás fue eliminado. Este es el pedazo de código que logra eso mediante el programa sed (stream editor):

sed -e ‘1,/fish-right.gif/ d’ \
-e ‘/Search\sthe\sweb/,$ d’

Busqué un poco más en el web y encontré unos cuantos programitas, pero en los lenguajes Python y Tcl. Tienen muchas más líneas de código y no son fáciles de leer si no se tiene experiencia en programación ya que utilizan el enfoque orientado a objetos. Desde el punto de vista del programador con experiencia, orientado a objetos es la ruta a seguir, pero para quien empieza o quiere enseñar a otros no iniciados es mejor el enfoque imperativo clásico, como el que he utilizado en este programa.

Creo que ya tengo más o menos lo que necesitaba, aunque me gustaría añadirle más funcionalidad al programa traduce. Por ejemplo, que reciba un archivo como argumento y lo traduzca todo en otro archivo. Mientras tanto, el cóigo es GPL así que ustedes mismos pueden mejorarlo y adaptarlo a sus necesidades :) .

Instalación en Linux

  • Copie y pegue el código de arriba en un editor de texto.
  • Guarde el archivo como ‘traduce’
  • Desde la consola de texto haga el archivo ejecutable:
    chmod +x traduce

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 29, 2006

Diccionario RAE en la consola Linux

Categoría: Programación — Edwood @ 11:33 am

Este programa utiliza Lynx para capturar las definiciones dadas por el Diccionario de la Real Academia Española en línea y mostrarlas en la consola de texto de Linux.

# =================================
# Este programa busca definiciones
# utilizando Diccionario RAE

if [ $# -eq 0 ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
echo
echo "==========================================="
echo rae v1.0
echo Este programa busca definiciones
echo utilizando Diccionario RAE
echo "============================================"
echo "Licencia GPL 2.0"
echo "Derechos Reservados 2006: Edwood Ocasio"
echo "Email: edwood_ocasio at yahoo.com"
echo "--------------------------------------------"
echo
echo "Uso: rae 'término' "
echo
echo "	Ej.  rae escáner"
echo
echo Para consultar términos que incluyen espacios
echo debe encerrarse entre comillas dobles
echo
echo "	Ej. rae \"ad hoc\" "
echo
echo "rae -h o rae --help muestran esta ayuda"
echo
exit 0
fi
echo
echo Buscando \"$1\" en el Diccionario RAE ..
lynx -dump "http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$1"
echo

Se utiliza de esta manera:

rae “ad hoc”

Para esa consulta en la consola aparece esta respuesta:

Buscando “ad hoc” en el Diccionario RAE ..

ad hoc.
(Loc. lat.; literalmente, ‘para esto’).
1. expr. U. para referirse a lo que se dice o hace solo para un fin
determinado.
2. loc. adj. Adecuado, apropiado, dispuesto especialmente para un fin.

Real Academia Española © Todos los derechos reservados

El código de este programa fue mucho más simple que el de las definiciones de Google porque la página web que genera el Diccionario RAE en línea es simple y no tuve que filtrar nada. Lo que ven en la consola es lo que verían en Lynx.

Instalación en Linux

  • Copie y pegue el código de arriba en un editor de texto.
  • Guarde el archivo como ‘rae’
  • Desde la consola de texto haga el archivo ejecutable:
    chmod +x rae

El siguiente proyecto será un traductor, nuevamente aprovechando los que ya están en línea.

Actualización (3-enero-2007)

  1. Encontré en el blog Uluka Graphiks un programa para lograr lo mismo, pero escrito en el 2005:
  2. Este otro se escribió en el 2003 en el portal web Bulma

Es interesante ver cómo distintas personas pueden llegar a desarrollar ideas tan similares en distintos tiempos y lugares. 8)

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 28, 2006

Definiciones Google desde la consola de Linux

Categoría: Programación — Edwood @ 9:37 pm

Durante el semestre pasado fue común el que mi hija preguntara definiciones de términos que aparecían en sus libros. Como todo buen ciudadano de la Internet, siempre recurrí a Google utilizando el modificador “define” que provee un listado de posibles definiciones del término deseado, tomados de varios lugares incluyendo Wikipedia. Esto es un ejemplo de cómo solicitar definiciones a Google, en este caso la definición del término pascal:

define:pascal

El url o dirección web que Google genera automáticamente para la búsqueda es:

http://www.google.com/search?q=define:pascal

En realidad es más largo e incluye más parámetros, pero lo que ven arriba es lo mínimo necesario.

Pero a veces la respuesta no llegaba tan rápido como quería porque los navegadores de web, especialmente Firefox, se toman su tiempo en reproducir el código HTML de las páginas. Tomaba aún más tiempo si tenía una descarga en proceso o si tenía muchas pestañas abiertas en el navegador.

Se me ocurrió entonces buscar diccionarios o enciclopedias que pudiera consultar desde la consola de texto de Linux. Las aplicaciones para la consola son muchísimo más rápidas que los navegadores web o que casi cualquier otra aplicación con interfaz gráfica (”GUI”). Probablemente no utilicé los términos apropiados en mi búsqueda, porque no encontré mucho. Estoy seguro de que deben existir decenas de esas aplicaciones.

En vista de que la búsqueda me iba a tomar más tiempo, decidí desarrollar mi propia solución y de una vez practicar la programación de consola en Linux con el “bash shell”.

En una entrada anterior mostré a través de un “screencast” el navegador web Lynx, que toma las páginas HTML y las reproduce en texto solamente pero con un formato muy atractivo y enlaces web activos. Una característica de Lynx que comparte con casi todas las aplicaciones de consola de texto es que su salida pueden redirigirse hacia otros programas para ser procesadas (“piping”). Lo que hice fue tomar el texto que produce Lynx y quitarle todo lo que consideraba innecesario. Ahora, cuando desde la consola de Linux escribo algo como esto:

$ define pascal

Recibo algo como esto que muestro resumido:

Buscando definiciones de pascal …

* a unit of pressure equal to one newton per square meter
* French mathematician and philosopher and Jansenist; invented an
adding machine; contributed (with Fermat) to the theory of
probability (1623-1662)
* a programing language designed to teach programming through a
top-down modular approach
[26]wordnet.princeton.edu/perl/webwn
* The pascal (symbol Pa) is the SI unit of pressure.It is equivalent
to one newton per square metre. The unit is named after Blaise
Pascal, the eminent French mathematician, physicist and
philosopher.
[27]en.wikipedia.org/wiki/Pascal
* Pascal is the stage name of drum and bass DJ and producer Pascal
Redpath.
[28]en.wikipedia.org/wiki/Pascal_(artist)
* Pascal is a lunar crater that lies near the northern limb of the
Moon, on the western side of the pole. It is located to the north
of the eroded Desargues crater, and just east of the Brianchon
crater. Pascal can be located by finding the Carpenter crater and
then following the surface to the northwest toward the limb.
However the visibility of this formation can be affected by
libration.
[29]en.wikipedia.org/wiki/Pascal_(crater)
:
:
:
* is a high-level procedural language, named after the French
mathematician Blase Pascal, with power, flexibility, and a
self-documenting structure that makes it an attractive choice for
academic, business, and scientific applications.
[54]www.wiley.co.uk/college/turban/glossary.html

Find definitions of pascal\ in: [55]Chinese (Simplified)
[56]Chinese (Traditional) [57]Dutch English [58]French [59]German
[60]Italian [61]Portuguese [62]Russian [63]Spanish [64]all
languages

Se hallaron 31 definiciones

Tengo que aclarar que el proceso completo de descubrir cómo extraer solamente lo que necesitaba de la página de Google, según vista en Lynx, me tomó un día entero porque tuve que aprender sobre las aplicaciones sed (stream editor) y egrep, ambas son aplicaciones para buscar patrones de texto y alterarlos. El código final, luego de horas de pruebas, es este (casi todo lo que ven es el texto de ayuda al usuario):

# Si no encuentra argumentos o encuentra -h o –help
# muestra ayuda sobre cómo usar el programa

if [ $# -eq 0 ] || [ “$1″ = “–help” ] || [ “$1″ = “-h” ]; then
echo
echo “===========================================”
echo define v1.0
echo Este programa busca definiciones
echo utilizando Google
echo “============================================”
echo “Licencia GPL 2.0″
echo “Derechos Reservados 2006: Edwood Ocasio”
echo “Email: edwood_ocasio at yahoo.com”
echo “——————————————–”
echo
echo “Uso: define ‘término’ [lenguaje]”
echo
echo El término es compulsorio, pero el lenguaje
echo es opcional, se presume el inglés si no se indica
echo algún lenguaje
echo
echo ” Ej. define linux es”
echo
echo “En el ejemplo aparecerían definiciones de ‘linux’ en español”
echo
echo “Opciones de algunos lenguajes: es (español), fr (francés), pt (portugués)”
echo
echo Para consultar términos que incluyen espacios
echo debe encerrarse entre comillas dobles
echo
echo ” Ej. define \”ad hoc\” ”
echo
echo “define -h o define –help muestran esta ayuda”
echo
exit 0
fi
echo
#
# ****** Aquí comienza el código ******
#
echo Buscando definiciones de $1 …
echo
tempfile=def$$.$$
lynx -dump “http://www.google.com/search?q=define:$1\&defl=$2″|sed -e ‘1,/Definitions/ d’\
-e ‘/\s*Search/,$ d’ > $tempfile
cat $tempfile
echo Se hallaron `egrep -c “\*” $tempfile` definiciones
rm -f $tempfile
echo

El programita extrae el trozo de la página de Google que contiene la lista de definiciones, todo lo que está entre Definitions of y el encasillado Search al final de la página. Se crea un archivo temporero $tempfile que contiene ese texto filtrado y éste a su vez es filtrado nuevamente para contar la cantidad de líneas que comienzan con un asterisco “*”. Ese número representa la cantidad de definiciones encontradas ya que cada una comienza con un “*”.

Estos lugares web me ayudaron en este pequeño proyecto:

En el próximo artículo les mostraré un programita para consultar desde la consola el Diccionario En Línea de la Real Academia Española (RAE).

Instalación en Linux

  • Copie y pegue el código de arriba en un editor de texto.
  • Guarde el archivo como ‘define’
  • Desde la consola de texto haga el archivo ejecutable:
    chmod +x define

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 26, 2006

Enseñando Programación con Software Libre

Categoría: El Profe, Programación — Edwood @ 7:46 pm

Este semestre pude ofrecer, por fin, el curso de programación básica. Seleccioné Python como el lenguaje para el curso.

Razones para seleccionar python

  • Es software libre, lo que me permitió instalar Python y todo un ambiente de programación en todas las computadoras del laboratorio, además de distribuir un CD a cada uno de mis estudiantes; sin pagar licencias, sin temer auditorías; libremente.
  • La sintaxis es casi tan clara como la de Basic.
  • No necesito entrar a la programación orientada a objetos para poder enseñarlo a un nivel básico.
  • Es muy utilizado en las ciencias, aunque no más que Fortran o C++, pero sí más que Java o Ruby.
  • Tiene una popularidad increíble y es fácil encontrar en el web buenos tutoriales, referencias y módulos.

Materiales

Les preparé un disco CD que incluía Python 2.4, GTK 2.6, PyGTK 2.6, un montón de módulos de Python, el editor para programadores SciTe y un par de archivos “batch” de Windows para activar la consola interactiva de Python llamada IDLE. Ninguno de los programas requería ser instalado en la computadora anfitriona.

También preparé una memoria USB (”pen drive”) con todo lo que mencioné antes, logrando crear un ambiente de desarrollo python compacto, todo en un “pen drive” de 128 MB. La instalación de todo tomó cerca de la mitad del espacio.

Texto y ejercicios

Preparé apuntes para el curso, no siempre a tiempo dado que era la primera vez que enseñaba el lenguaje. Existen decenas de tutoriales y escritos sobre cómo programar con python que varían su nivel de audiencia desde iniciados hasta programadores profesionales. Estoy seguro de que pude haber encontrado algo para mis estudiantes, quizás construyendo un manual de los pedazos de otros, pero preferí la ruta difícil de escribir mi propio material.

Una ventaja de usar material original es que lo podemos ajustar a nuestra población, en mi caso una audiencia de estudiantes de Ciencias Generales y Administración de Empresas, todos ajenos a la programación. Otra ventaja es que es gratificante escribir sobre un nuevo lenguaje de programación. Es una experiencia de aprendizaje fenomenal tratar de poner de forma clara lo que para nosotros parece obvio. Podemos profundizar aún más en lo que creemos ya conocer, logrando entenderlo mucho mejor.

La desventaja es que, si es la primera vez, como me ocurría, toma mucho tiempo y a veces no todo sale o se entiende cómo lo planificamos. Todo eso trabaja en perjuicio de los objetivos del curso.

Experiencia

Inicialmente tuvimos muchos problemas técnicos en el salón de clases porque los privilegios de los estudiantes variaban en algunas computadoras y algunos no tenían la misma experiencia cuando hacíamos las prácticas.

Me dí cuenta de que vale la pena dedicar tiempo a enseñarles a utilizar IDLE y sus atajos de teclado. Mis ajetreos de la dirección de la oficina de tecnología me impidió darle tiempo a esos detalles y estoy seguro de que hubiera sido muy beneficioso para ellos. Nos concentramos más usando SCiTE que resultó ser una excelente herramienta para programadores noveles: colorea la sintaxis de python automáticamente luego de guardar un archivo con extensión “.py”; bastaba oprimir la tecla <F5> para ejecutar el código, siempre y cuando python estuviese instalado en el sistema; la salida de los programas ocurría en un panel adicional que simulaba una consola o terminal.

Pude enseñarle a crear aplicaciones con interfases gráficas simples, sólo para entrada y salida de valores sencillos. Usamos el módulo Tkinter que ya viene instalado con python y sus librerías de ventanas. Hicimos programas como éste:

from tkMessageBox import *
from tkSimpleDialog import *
def average(seq):
        num = 0
        total = 0
        for x in seq:
                total = total + float(x)
                num = num + 1
       
        return float(total)/num

# Comienzo del programa
x=askstring(“numero”, “entre numeros que desea promediar separado por comas”)
seq=x.split(“,”)
promedio=average(seq)
showinfo(“promedio=”, promedio)

Los estudiantes requirieron de mucho apoyo, el cuál dí en clase, por email y a través de mensajería instantánea (”messenger” con Gaim). La mayor parte de las reuniones las pasamos practicando los ejemplos de mis apuntes y haciendo los ejercicios de las asignaciones. Mi experiencia cuando enseñaba Visual Basic era idéntica, por lo que no considero a python un lenguaje más difícil de aprender que Basic.

Como primer experimento no me fue tan mal, pero la experiencia tiene que mejorar la próxima ocasión que tenga la oportunidad de dar el curso. De seguro continuaré con python ya que el lenguaje ha capturado mi imaginación y renovado mis deseos de programar. Quisiera poder pasarle ese entusiasmo a mis estudiantes.

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 23, 2006

Suscrito a UBH y Gmane

Categoría: Blogs — Edwood @ 1:46 pm

Hoy confirmaron la inclusión de este blog en el portal Unión de Bloggers Hispanos (UBH). El logo aparece al pie de todas las páginas del blog, al igual que el de Puertoblogs y Blogalaxia.

Por otro lado, registré la lista de correo de Computación Científica Libre en Gmane, un servicio que agrega los mensajes de la lista en distintos formatos: lista tradicional, grupo de noticias (”newsgroups”) o como un blog. Para verlo como un blog visiten:

En el grupo Computación Científica Libre ya sobrepasamos los 50 miembros. Todavía sigo siendo el colaborador principal, pero espero que en este su segundo año vea más dinamismo.

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 22, 2006

Software Libre para Bibliotecas

Categoría: Software libre, Tecnologí­a y universidad — Edwood @ 7:26 pm

Encontrar buen software comercial para administrar bibliotecas no es asunto simple. Sé que en una ocasión En UPR-Cayey se intentó implantar uno de esos sistemas comerciales sin éxito, aún contando con apoyo de la compañía. Estos son dos sistemas de código abierto para el manejo de bibliotecas:

Los proyectos que referencio arriba precisamente nacen de la necesidad de software flexible y de bajo costo. Algunos de ellos incluso fueron desarrollados por el personal técnico de las mismas bibliotecas que los usan. Les recomiendo la lectura de este artículo en Linux.com:

También existen estos dos portales en donde se pueden monitorear otros proyectos similares y experimentar con instalaciones demostrativas:

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 20, 2006

Asistencia Tecnológica para cambiar Vidas

Categoría: Tecnología Asistiva — Edwood @ 10:03 pm

Via A-TechReview.

En el artículo Another Form of Computer Assist, escriben lo siguiente:

We often think of assistive technology as meaning systems that allow folks with disabilities to use computers.

But it’s a lot more than that.

It can also mean computerized systems that make life for the disabled more livable.

La primera oración de la cita es lo que enseño a mis estudiantes. Ahora creo que el autor del artículo tiene razón y veo que tengo que ampliar mi visión de la tecnología asistiva.

En ese artículo y en en otro titulado JAWS for Jim, aprendemos sobre cómo la tecnología asistiva no sólo facilita el uso de las computadoras, sino que también pudiera hacer la vida más llevadera para muchos e incluso rescatar de la autodestrucción a otros.

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 19, 2006

A-Tech Review: Un blog sobre asistencia tecnológica

Categoría: Tecnología Asistiva — Edwood @ 6:57 am

Encontré este blog que pretende cubrir el área de asistencia tecnológica mediante reseñas de productos, compañías y noticias pertinentes al usuario con alguna discapacidad que desea utilizar una computadoras:

This blog is designed to fill an enormous need in the market.

Until now there was no free Web publication covering the technology people need to be productive despite their disabilities.

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 17, 2006

Aviones y Código Abierto

Categoría: Software libre — Edwood @ 11:01 am

Via Retiario, por Pepe Cervera.

En la entrada del blog mencionado arriba, nos relatan la curiosa situación de que el gobierno británico no desea adquirir ciertos aviones del gobierno norteamericano si no reciben también el código del sistema computadorizado que lo maneja:

La marina británica está interesada en la versión F-35B del Lightning II, diseñada para aterrizar y despegar en vertical, con el fin de sustituir a los veteranos Harrier. Sin embargo es posible que al final el Reino Unido prefiera una versión navalizada del multinacional Eurofighter Typhoon para equipar sus futuros portaaviones, lo que supondría cancelar el pedido ya efectuado. ¿La razón fundamental? Estados Unidos se niega en redondo a facilitar el código fuente del avión, los programas que utilizan sus ordenadores de a bordo: no se fían de que esta vital información pueda acabar en malas manos. Gran Bretaña se niega a adquirir un avión sin saber cómo vuela. Y tiene toda la razón del mundo.

Les invito a leer la discusión del autor, Pepe Cervera, y los comentarios que le siguen. El software propietario y el hardware propietario, en donde estoy tratando propietario como sinónimo de cerrado, no sólo son una amenaza para las libertades del usuario, ahora hay gobiernos que piensan que son una amenaza para la seguridad nacional. Tienen razón.

Más artículos como este en:

Algunos artículos relacionados:


Diciembre 16, 2006

Consejos de Seguridad para Usuarios de Firefox

Categoría: Seguridad, Navegadores Web — Edwood @ 10:01 am

En la página Security tips for Firefox users se mencionan varios consejos para navegar con cuidado por el web con Firefox.

This document describes what that I think Firefox users need to know in order to be secure while using the web. It is long because Firefox and operating systems are not perfect; as they improve, there will be less you need to know.

Aunque tengamos el navegador de web más seguro del mercado, seguimos siendo nosotros, los usuarios, el eslabón débil en la cadena de medidas de seguridad. Es en particular nuestra ignorancia de cómo los malandrines crackers trabajan lo que nos hace más vulnerables. Por ejemplo, no sabía que esto era posible:

When you copy text from an untrusted web site, the text that ends up on your clipboard can be something entirely different from what you thought you were copying.

Más artículos como este en:

Algunos artículos relacionados:


Próxima página »
Proudly powered by wordpress - Theme by neuro
   *    Blogalaxia   Galaxia Linux   Unión de Bloggers Hispanos