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:


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:


Noviembre 20, 2006

Extensión de Firefox para el grupo Computación Científica Libre

Categoría: Mis Proyectos, Computación científica, Programación — Edwood @ 6:39 pm

Para facilitar la publicación de mensajes al grupo de Computación Científica Libre en Google, tomé la extensión de BlinkList en español que recién trabajé y le eliminé los elementos que no necesitaba, dejando sólo el menú contextual que aparece al marcar el botón derecho del mouse. También hice cambios en las funciones y otros archivos. Fue un ejercicio de casi dos horas porque tenía que reinicializar Firefox cada vez que hacía un cambio :?

Esta extensión añade un ítem al menu contextual del botón derecho del mouse que permite enviar la información de una página web al grupo de Computación Científica Libre. El título de la página se convertirá en el asunto (”subject”) del mensaje y el texto que seleccionemos en la página se convertirá en el cuerpo del mensaje siguiendo el estilo usual del grupo. La extensión también añade el menú CompCiLibre al menú principal de Firefox.

CompCiLibre Menu en Firefox
CompCiLibre en el Menú principal

Créditos CompCiLibre en Firefox
Créditos

CompCiLibre Menu Contextual en Firefox
CompCiLibre Menu Contextual en Firefox

 

Descarguen la extensión aquí usando el botón derecho del mouse:

 

Para Instalar Extensiones Localmente

1. Luego de descargar la extensión vaya al menú File > Open File
2. Localice y seleccione el archivo de la extensión.

Luego de estos dos pasos el proceso de instalación de FireFox debe comenzar automáticamente.

El próximo paso en este proyecto es hacerlo una extensión general para cualquier grupo de Google. Al parecer no existe una, pero si me equivoco, me avisan por favor.

Más artículos como este en:

Algunos artículos relacionados:


Noviembre 17, 2006

Extensión de FireFox para BlinkList en Español

Categoría: Mis Proyectos, Programación — Edwood @ 8:31 pm

Gracias a Mario Núñez por considerarme para este proyecto y por anunciarlo en su blog.

Esta es la traducción al español de la extensión de BlinkList para FireFox escrita por Jan Ole Peek.
La traducción de esta extensión me la pidió Mario Núñez como complemento a su proyecto de traducción al español de BlinkList . Ya Mario y sus colaboradores terminaron y pueden ver el resultado en BlinkList Español

BlinkList ToolBar Español

Créditos BlinkList Español

Remuevan del nombre del archivo la extensión ZIP antes de instalar en Firefox.

Más artículos como este en:

Algunos artículos relacionados:


Octubre 26, 2006

Miles de enlaces sobre programación orientada a objetos

Categoría: Programación — Edwood @ 5:34 am

Esta página tiene una impresiva colección de enlaces a temas, lenguajes, grupos de usuarios, tutoriales y más, todos relacionados a la programación orientada a objetos:

Más artículos como este en:

Algunos artículos relacionados:


Agosto 19, 2006

Yabasic: Un Basic multiplataforma

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

Uno de los lenguajes multiplataforma con los que he podido jugar es Yabasic (Yet Another Basic).

Yabasic no tiene capacidad nativa para generar una interfaz gráfica, pero es muy útil para aplicaciones de consola. Existen librerías que se pueden usar con Yabasic para producir aplicaciones con GTK (GTK server) y Java (japi).

Participé por un tiempo en el Wiki Yabasic y contribuí la versión de la documentación en formato CHM (Compiled HTML Help): DocuCHM en Wiki Yabasic

Como lenguaje, Yabasic es un Basic completo y simple de aprender. Recomiendo el tutorial de Mike Huffmann incluído en la documentación CHM. También pueden leerlo en línea: Introduction to Yabasic.

Este código para crear el esqueleto de una clase VBScript, sus propiedades y métodos, es una muestra del lenguaje:

rem By Edwood Ocasio
rem
doc This progam generates VBScript
doc simple class declaration
doc including properties and methods
doc Edwood Ocasio - eocasio at go dot com
rem

dim properties$(20)
dim methods$(20)

label GETFILENAME
input “Class file: ” sFile$
if (sFile$ = “”) goto GETFILENAME

open sFile$ + “.vbs” for writing as #1

label START

input “Class name: ” sName$
input “Properties separated by commas: ” sProps$
input “Methods separated by commas: ” sMethods$

rem Retrieve properties from a CSV string
if (sName$ <> “”)then
if (sProps$ <> “”) then
numProps=split(sProps$,properties$(),”,”)
endif

if (sMethods$ <> “”) then
numMethods=split(sMethods$,methods$(),”,”)
endif
else
print “You must give name to your class”
goto START
endif
rem Now, build the class file

print #1 “‘ Generated by a YaBasic script”
print #1

print #1 “Class ” + sName$

for i=1 to numProps
print #1 “\tPrivate m_” + properties$(i)
next i
print #1

rem Write properties
for i=1 to numProps
print #1 “\tPublic Property Get ” + properties$(i) + “()”
print #1 “\t\t” + properties$(i) + “= m_” + properties$(i)
print #1 “\tEnd Property”
print #1
print #1 “\tPublic Property Let ” + properties$(i) + “(vData)”
print #1 “\t\tm_” + properties$(i) + “= vData”
print #1 “\tEnd Property”
print #1
next i
print #1

rem Write class methods

print #1 “\tPrivate Sub Class_Initialize()”
print #1
print #1 “\tEnd Sub”
print #1
print #1 “\tPrivate Sub Class_Terminate()”
print #1
print #1 “\tEnd Sub”
print #1
rem Write user methods

for i=1 to numMethods
print #1 “\tPublic function ” + methods$(i) + “()”
print #1
print #1 “\tEnd function”
print #1
next i

print #1
print #1 “End Class”
print #1

input “More classes in this file?(y/n)” response$

if (upper$(response$)=”Y”) goto START

close 1

Salida del programa:

$ yabasic vbclass.yab

Class file: carro
Class name: carro
Properties separated by commas: color,marca,modelo,year
Methods separated by commas: encender,apagar,arreglar,emergencia
More classes in this file?(y/n)n

Este es el archivo que produce (carro.vbs):

‘ Generated by a YaBasic script

Class carro
Private m_color
Private m_marca
Private m_modelo
Private m_year

Public Property Get color()
color= m_color
End Property

Public Property Let color(vData)
m_color= vData
End Property

Public Property Get marca()
marca= m_marca
End Property

Public Property Let marca(vData)
m_marca= vData
End Property

Public Property Get modelo()
modelo= m_modelo
End Property

Public Property Let modelo(vData)
m_modelo= vData
End Property

Public Property Get year()
year= m_year
End Property

Public Property Let year(vData)
m_year= vData
End Property

Private Sub Class_Initialize()

End Sub

Private Sub Class_Terminate()

End Sub

Public function encender()

End function

Public function apagar()

End function

Public function arreglar()

End function

Public function emergencia()

End function

End Class

El programita corre de igual manera en Linux y Windows.

Más artículos como este en:

Algunos artículos relacionados:


Próxima página »
Proudly powered by wordpress - Theme by neuro
   *   BloGalaxia  Uni�n de Bloggers Hispanos
adult chat rooms amateur sex chat amateur webcam asian cam black webcam sex cam sex ebony cams girls ebony teen cams free live asian sex free sex teen chat free teen cam girls free xxx web cam hidden blowjob cam hot webcam lesbian live cams live asian girl live lesbian cams live mature cams live milf cams live porn cam live sex webcams live webcam chat porn cam spy cam sex teen webcam free voyeur cam web cam asian girls webcam teen sex xxx hidden cams xxx home cams xxx web cams