Agosto 17, 2009

Compilar geany 0.18 en Linux Ubuntu Intrepid

Categoría: Programación — Edwood @ 8:20 pm

He utilizado el editor geany por mucho tiempo como mi ambiente de programación. Hoy se liberó la versión 0.18, pero aún no hay paquetes para Ubuntu Intrepid, lo que implica que tuve que compilarlo. Escribo esta entrada en el blog para quiénes estén en la misma situación y no les sea obvio (como a mí) cómo cumplir con los requisitos de la compilación.

En primer lugar, necesitaremos instalar el código fuente de las librerías GTK+2. Si intentamos compilar geany sin esto, recibiremos la queja de que la versión de GTK es menor que la que se requiere. El problema se resuelve haciendo que geany se compile usando la versión de GTK de Ubuntu Intrepid. Esta es la instrucción para instalar el código del GTK de Intrepid:

sudo apt-get install libgtk2.0-dev

Se instalarán montones de paquetes asociados a GTK.

Luego descarguen el código de geany en http://download.geany.org/geany-0.18.tar.gz. Seleccioné el paquete tar.gz porque es el formato más común. Esta instrucción es para desempacarlo:

tar xvzf geany-0.18.tar.gz

Ahora, entremos al directorio del código, configuremos y compilemos:

cd geany-0.18/
./configure
make

Los pasos anteriores tomarán algunos minutos. Cuando finalice la compilación, instalamos:

sudo make install

Más artículos como este en:

Algunos artículos relacionados:


Agosto 1, 2009

De latitud y longitud a dirección física con bash - versión 2

Categoría: Programación — Edwood @ 2:54 pm

Extendí el script bash que publiqué previamente para incluir como opción el servicio gratuito de “reverse geocode” de Geonames. Ahora el script requiere como tercer argumento la fuente de la dirección física: google o geonames.

#!/bin/bash
# findnearest

lat=$1
long=$2
src=$3

if [  $# -ne 3 ]
then
  echo "Usage:  findnearest   ”
  echo “Ex. findnearest 17.98 -66.109 google”
  exit 1
fi

if [ “$src” == “google” ]
then
  result=$(lynx -dump “http://maps.google.com/maps/geo?output=csv&oe=utf-8&ll=$lat,$long”)
  echo $result | cut -f3- -d,
elif [ “$src” == “geonames” ]
then
   result=$(lynx -dump “http://ws.geonames.org/findNearestAddress?lat=$lat&lng=$long” | egrep “placename|adminName1|adminName2|countryCode”| sed ’s/<[^>]*>//g’)
   echo \”$result\”

fi

Ejemplos de su uso:

$ ./findnearest 17.98 -66.109 google
"43 Calle Carlota, Guayama 00784, Puerto Rico"

$ ./findnearest 17.98 -66.109 geonames
"Guayama Guayama Puerto Rico US"

Como pueden apreciar, en este ejemplo el servicio de Google da información más precisa que Geonames y he observado que eso es así en general. Utilizo Geonames en combinación con Google cuando tengo que hacer “reverse geocode” en masa, alternándolos cuando uno de ellos deja de responder.

Más artículos como este en:

Algunos artículos relacionados:


Julio 28, 2009

De latitud y longitud a dirección física con bash

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

En la compañía para la cual trabajo diariamente tengo que manipular datos geográficos. He aprendido mucho sobre GIS, GPS y los API de mapas como el de Google. Aunque la mayor parte del tiempo programo en Python, encuentro que los scripts en bash continúan siendo la forma más rápida para manipular datos y probar ideas.

El siguiente script que llamé “findnearest” utiliza el servicio de “reverse geocode” de Google para obtener una dirección física (pueblo, calle, avenida, etc.) dadas la latitud y longitud del lugar:


#!/bin/bash
# findnearest
# Usage: findnearest latitude longitude
# Ex.  findnearest  17.976227 -66.111016

lat=$1
long=$2
result=$(lynx -dump "http://maps.google.com/maps/geo?output=csv&oe=utf-8&ll=$lat,$long")
echo $result | cut -f3- -d,

El script depende de que el navegador web “lynx” esté instalado. Este es un navegador web que se usa en el terminal de texto.

Luego de guardar el script como “findnearest” lo hice ejecutable:

$ chmod +x findnearest

Este es un ejemplo de su ejecución;

$  ./findnearest  17.976227 -66.111016

"Calle Num 9, Guayama 00784, Puerto Rico"

El resultado devuelto por Google lo almaceno en la variable “result” y luego extraigo los campos que necesito usando el comando “cut”. En particular le pido que muestre desde el tercer campo en adelante, suponiendo que el delimitador es una coma: echo $result | cut -f3- -d,

Más artículos como este en:

Algunos artículos relacionados:


Abril 22, 2009

Compilar pgAdmin 1.10 beta en Ubuntu 8.10

Categoría: Programación — Edwood @ 8:13 pm

Una de las herramientas que utilizo para administrar bases de datos en postgresql es pgadmin. Prefiero utilizar ‘psql’, la interfaz ‘commandline’, para ejecutar ‘queries’, pero pgadmin me ayuda mucho cuando lo que necesito es inspeccionar visualmente la estructura de las bases de datos y otros objetos.

La versión más reciente de pgadmin es 1.10 beta 1. La versión estable, que es la que he utilizado hasta hoy, es la 1.8.4.

En Ubuntu 8.10 encontré que los prerrequisitos para la compilación eran las librerías libpq-dev, libwxgtk2.8-dev, libxslt-dev y libxml2-dev. Para instalarlas pueden usar esta instrucción:

sudo apt-get install libpq-dev libwxgtk2.8-dev libxslt-dev libxml2-dev

El código fuente de pgadmin lo pueden descargar en http://www.postgresql.org/ftp/pgadmin3/release/v1.10.0-beta1/src/. Para desempacar, compilar e instalar:

tar xvzf pgadmin3-1.10.0-beta1.tar.gz
cd pgadmin3-1.10.0-beta1
./configure
make
sudo make install

Para ejecutar el nuevo pgadmin:

/usr/local/pgadmin3/bin/pgadmin3

Más artículos como este en:

Algunos artículos relacionados:


Febrero 8, 2009

Generar diagramas de bases de datos en Postgres

Categoría: Programación — Edwood @ 10:31 am

Documentar una base de datos es una de las tareas más descuidadas, pero más importantes en el desarrollo de una aplicación que depende de ellas. Una de las razones para ello, al menos en mi caso, es la falta de una herramienta de código abierto para documentarlas automáticamente. He probado algunas con éxito, pero SchemaSpy, combinada con la interfaz gráfica SchemaSpyGUI, es la que recomendaría de entre las que he utilizado. Ambas aplicaciones están escritas en JAva por lo que será necesario tener por lo menos JRE 1.5 instalado.

Para utilizarla basta con descargar ambas aplicaciones en el mismo directorio (es lo más cómodo) junto con los ‘drivers’ JDBC del servidor de bases de datos que utilicemos, en mi caso los ‘drivers’ JDBC de Postgres.

En el caso de SchemaSpyGUI, la descarga es un archivo ZIP que hay que descomprimir:

$ unzip SchemaSpyGUI_Java1.5.zip
Archive: SchemaSpyGUI_Java1.5.zip
creating: SchemaSpyGUI/lib/
inflating: SchemaSpyGUI/lib/swing-layout-1.0.3.jar
inflating: SchemaSpyGUI/README.TXT
extracting: SchemaSpyGUI/schemaSpyGUI.bat
inflating: SchemaSpyGUI/schemaSpyGUI.jar
inflating: SchemaSpyGUI/schemaSpyGUI.sh
creating: SchemaSpyGUI/src/
creating: SchemaSpyGUI/src/schemaspygui/
inflating: SchemaSpyGUI/src/schemaspygui/AboutBox.form
inflating: SchemaSpyGUI/src/schemaspygui/AboutBox.java
inflating: SchemaSpyGUI/src/schemaspygui/Gui.form
inflating: SchemaSpyGUI/src/schemaspygui/Gui.java
inflating: SchemaSpyGUI/src/schemaspygui/LaunchSchemaOutput.java
inflating: SchemaSpyGUI/src/schemaspygui/Main.java
inflating: SchemaSpyGUI/src/schemaspygui/Operations.java
inflating: SchemaSpyGUI/src/schemaspygui/ReleaseText.properties

Recomiendo depositar en el directorio SchemaSpyGUI tanto SchemaSpy como los ‘drivers’ JDBC necesarios.

Al activar SchemaSpyGUI será necesario indicar la ubicación de SchemaSpy y de los ‘drivers’ como muestra la siguiente imagen:

SchemSpyGUI

SchemaSpy es el componente que hace el trabajo real de generar la documentación y los diagramas de relaciones en la base de datos. Esta es una muestra de un diagrama:

Ejemplo Diagrama SchemaSpy

Una de las capacidades adicionales de SchemaSpy que encuentro muy útil es la de identificar posibles anomalías en la estructura de la base de datos. El reporte de anomalías se obtiene marcando la pestañita Anomalies en el reporte. Entre las cosas que se reportan como anomalías están las posibles violaciones a la normalización de la base de datos.

Más artículos como este en:

Algunos artículos relacionados:


Enero 15, 2009

Tutorial: Python para todos

Categoría: Libros y revistas, Programación — Edwood @ 7:11 am

Via EspacioLinux.

El tutorial está disponible en formato PDF y puede descargarse y distribuirse libremente, ya que está liberado bajo la licencia Creative Commons Reconocimiento 2.5 España, que básicamente permite copiarlo, distribuirlo, hacer obras derivadas del mismo, siempre y cuando se le de el crédito apropiado al autor original (Raúl González Duque).

Más artículos como este en:

Algunos artículos relacionados:


Septiembre 20, 2008

Generar passwords en Linux

Categoría: Aprendiendo Linux, Programación — Edwood @ 7:43 pm

En varias ocasiones he tenido que generar contraseñas para un listado de usuarios en un archivo y los programas ‘pwgen‘ y ‘mkpasswd‘ para la consola de Linux han sido de gran ayuda.

Usando pwgen

En este ejemplo se generarán 5 constraseñas de 10 caracteres de longitud:

    eocasio:$ pwgen -n -c 10 5
    eazic3peiZ fooRoo5ili quaiFaofo5 mumieW5zae ohWew0Eech

Las opción ‘-n’ le indica a ‘pwgen’ que las contraseñas generadas tendrán por lo menos dos números y la opción ‘-c’ que por lo menos tendrán una letra mayúscula (’capital letter’).

Para presentar la lista de contraseñas en una ventana gráfica y no en la consola utilizo ‘zenity‘:


    pwgen -n -c 10 100|zenity --text-info --title="Password Generator"

pwgen y zenity

Usando mkpasswd

Este ejemplo muestra cómo generar una contraseña de diez caracteres (’-l 10′), con un mínimo de 6 dígitos (’-d 6′), 2 letras minúsculas (’-c 2′), 2 letras mayúsculas (’-C 2′) y ningún símbolo especial (’-s 0′):

    eocasio:$ mkpasswd -l 10 -d 6 -c 2 -C 2 -s 0
    4Oh5N2482m

Si queremos símbolos especiales:

    eocasio:$ mkpasswd -l 10 -d 4 -c 2 -C 2 -s 2
    DH<(0ok431

Observaciones:

  1. Si omitimos cualquiera de las opciones ‘-c, -C, -d, -s’ el programa presumirá que se desea por lo menos un símbolo de ese tipo.
  2. Si especificamos la longitud de la contraseña con la opción ‘-l ‘ la suma del mínimo de cada caracter especificado debe ser por lo menos 10.

Noten que ‘mkpasswd’ solamente da una contraseña, no un listado como ‘pwgen’. Para generar una lista de contraseñas necesitamos ejecutar el programa dentro de un ciclo o ‘loop’. El siguiente código corresponde al lenguaje ‘bash’:


    eocasio:$ for clave in $(seq 1 10);do mkpasswd -l 10 -d 6 -c 2 -C 2 -s 0;done
    x1090cK37Q
    215Hu5O28g
    G16c749In0
    777E10Pls6
    TG55z33e60
    37f06l03SX
    5625DC84rt
    Fyp4924L95
    n1A4397Y0h
    566nBT43r8

También podemos usar ‘zenity’ para presentar las contraseñas en una ventana:


    for num in $(seq 1 10);do mkpasswd -l 10 -d 6 -c 2 -C 2 -s 0;done|zenity --text-info --title="Password Generator"

pwgen y zenity

Más artículos como este en:

Algunos artículos relacionados:


Julio 27, 2008

Manejando dominios de Google App con Python

Categoría: Mis Proyectos, Programación — Edwood @ 11:23 am

La Universidad de Puerto Rico ha decidido seguir el ejemplo de algunas universidades norteamericanas y delegar sus servicios de correo electrónico a Google mediante el Google Applications Education Edition (GAE).

Para facilitar la administración del nuevo servicio estudié al API de Google Apps y desarrollé una consola de texto en Python para las tareas más comunes, como cambiar contraseñas:

Imagen de la consola de texto UPR-GAE

Para este proyecto aproveché las librerías en Python que ya Google había publicado y sólo construí un ambiente amigable para los administradores.

El usuario puede seleccionar el lenguaje de la interface, ingles o español.

Más artículos como este en:

Algunos artículos relacionados:


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:


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