"Cuando sea grande..."
"Cuando yo sea grande, quiero..."
"... ser como ellos"
ACTUALIZACIÓN (22/04/2008): Otros álbumes del evento:
La respuesta es 42. Pero... ¿me podría repetir la pregunta?
"Cuando yo sea grande, quiero..."
"... ser como ellos"
ACTUALIZACIÓN (22/04/2008): Otros álbumes del evento:
Publicado el
4/18/2008 06:49:00 p. m.
0
comentarios
PC Guard es una excelente herramienta para la protección de software y generación de licencias de usuario en Windows. Uno de sus productos es el Activation suite, que permite desarrollar aplicaciones que generen licencias válidas de PC Guard.
La documentación del Activation suite Web sólo proporciona ejemplos de uso en PHP y ASP. La siguiente es una clase hecha en Ruby para manejar la validación y generación de licencias.
require 'win32ole'
class PCGuard
# Propiedades de sólo lectura
attr_reader :activacion, :remocion, :volumendd, :bios, :cpu, :serialdd, :os, :cd, :red
# Propiedades de lectura y escritura
attr_accessor :programid, :sitecode, :mid, :features
# Valores del "ResponseCode" del PCGuard
STATUS_OK = 0 # Success
STATUS_BAD_SITE_CODE = 1 # Site code is invalid
STATUS_BAD_PROGRAM_ID = 3 # ProgramID is invalid
STATUS_BAD_MID_CODE = 6 # Machine ID is invalid
STATUS_MID_CODE_ERROR = 7 # Machine ID decryption error
# Excepciones que genera la clase
class BadSiteCode < StandardError; end
class BadProgramID < StandardError; end
class BadMID < StandardError; end
class MIDCodeError < StandardError; end
# Valida y genera todos los códigos de la licencia
def initialize(programid = "", sitecode = "", mid = "", features = 0)
# Inicializar variables con los códigos de PCGuard
@programid, @sitecode, @mid, @features = programid, sitecode, mid, features
# Inicializar variables de las propiedades
@activacion, @remocion, @volumendd, @bios, @cpu, @serialdd, @os, @cd, @red = "", "", 0, 0, 0, 0, 0, 0, 0
# Generar códigos, si se han pasado todos los campos necesarios al inicializar el objeto
self.generar unless @programid.empty? || @sitecode.empty? || @mid.empty?
end
# Genera todos los códigos
def generar
# Generar un error si no se han cargado todos los códigos de PCGuard necesarios para generar una licencia
raise ArgumentError if @programid.empty? || @sitecode.empty? || @mid.empty?
# Crear objeto
l = WIN32OLE.new("icgweb.icgen")
# Inicializar códigos
l.ProgramID = @programid
# Generar códigos de ifentificación de la máquina
l.SiteCode = @sitecode
l.MachineID = @mid
l.V5_CheckMachineID()
# Validar
if l.ResponseCode != STATUS_OK
raise BadSiteCode if l.ResponseCode == STATUS_BAD_SITE_CODE
raise BadMID if l.ResponseCode == STATUS_BAD_MID_CODE
raise MIDCodeError if l.ResponseCode == STATUS_MID_CODE_ERROR
end
# Generar código de activación y remosión
l.SiteCode = @sitecode
l.MachineID = @mid
l.Features = @features
l.V5_CalculateActivationCode()
# Validar
if l.ResponseCode != STATUS_OK
raise BadSiteCode if l.ResponseCode == STATUS_BAD_SITE_CODE
raise BadProgramID if l.ResponseCode == STATUS_BAD_PROGRAM_ID
raise BadMID if l.ResponseCode == STATUS_BAD_MID_CODE
end
# Asignar valores a las variables del objeto
@activacion = l.ActivationCode # Código de activación
@remocion = l.RemoveCode # Código de remosión
@volumendd = l.DriveID.to_i # Hard drive volume serial ID
@bios = l.BiosID.to_i # Motherboard bios ID
@cpu = l.CPUID.to_i # CPU ID
@serialdd = l.HDHWID.to_i # Hard drive hardware ID
@os = l.OSID.to_i # Operating system ID
@cd = l.CDHWID.to_i # CD/DVD hardware ID
@red = l.NETID.to_i # Network card ID
# Retornar el código de activación de la licencia
@activacion
end
end
Tiene propiedades de lectura/escritura para los códigos principales de PC Guard: ProgramID (programid), Site Code (sitecode), MID (mid) y Features (features); propiedades de sólo lectura para los resultados de la generación: código de activación (activacion), código de remoción (remocion); propiedades de sólo lectura para los código de identificación del equipo: serial de la partición del disco duro (volumendd), BIOS del equipo (bios), CPU (cpu), serial del disco duro (serialdd), sistema operativo (os), CD/DVD (cd), tarjeta de red (red); y un único método para generar todos los códigos (generar).
Para usarla, puedes hacer algo como:
require 'PCGuard' licencia = PCGuard.new licencia.programid = "XXXXXXXXXXXXXXXXXXXXXXXX" licencia.sitecode = "YYYYYYYY" licencia.mid = "ZZZZ-ZZZZ-ZZZZ-ZZZZ" licencia.generar # => "ABCD1234-ABCD1234-ABCD1234-ABCD1234"
O, de manera más resumida:
licencia = PCGuard.new("XXXXXXXXXXXXXXXXXXXXXXXX", "YYYYYYYY", "ZZZZ-ZZZZ-ZZZZ-ZZZZ")
Por supuesto, proporcionando códigos válidos para ProgramID, Site Code y MID.
También genera las siguientes excepciones:
Publicado el
4/12/2008 01:42:00 p. m.
2
comentarios
Etiquetas: Rails
Esta es la tercera parte de la serie de artículos sobre el AutoHotkey. En la primera parte vimos algunos de los ejemplos más sencillos de sustitución de textos y arranque de aplicaciones. En la segunda parte vimos casos un poco más elaborados de automatización de aplicaciones. Ahora vamos a ver un ejemplo de aplicaciones con el AutoHotkey.
Aplicación para enviar mensajes de texto de Movilnet
Hace algún tiempo estuve jugando un poco con el código del sitio web de Movilnet, buscando una manera de enviar mensajes sin tener que pasar por la web (que me parece un poco sobrecargada y lenta). Luego de hacer algunas cosas con el AutoHotkey supe que este sería la herramienta ideal para hacer una pequeña aplicación, como la que yo quería, para enviar sms. La idea era sencilla: escribir un mensaje (sin importar cuan largo fuera), escoger uno o más destinatarios de una lista, y que la aplicación se encargara de dividir el mensaje en las partes necesarias y enviarlas a cada uno de los destinatarios seleccionados.
Y eso fue exactamente lo que hice. Y mucho más fácilmente de lo que me imaginé que sería, gracias a algunas de las maravillas del AutoHotkey. Cuando vi esta herramienta por primera vez, pensé que tendría un conjunto de comandos reducido, ideales para manejar casos sencillos como los que ya hemos visto (abrir aplicaciones, presionar teclas, etc.). Pero leyendo la documentación me encontré con una lista inmensa de comandos e instrucciones. Es un lenguaje de programación bastante completo, muy bien adaptado a todos los eventos y objetos del sistema operativo (Windows), y con todas las herramientas que se esperarían de un lenguaje de programación (como ciclos, operadores, manejo de archivos, controles para interfaz, etc.).
Pueden descargar el código de la aplicación aquí (Por supuesto, si tienes correcciones o mejoras que hacerle, me gustaría escucharlas). Si no les interesa el código completo, o instalar el AutoHotkey, también pueden descargar el ejecutable de la aplicación. Porque el AutoHotkey también tiene un compilador, y genera unos ejecutables bastante pequeños, considerando que no requiere tener instalado el AutoHotkey para ejecutarlos, o librerías externas de ningún tipo.
Agenda de destinatarios
La aplicación requiere la existencia de un archivo de texto (Agenda.txt) con la lista de los destinatarios (nombres y teléfonos) en un formato como el siguiente:
Jesús Dugarte, 04261111111 Pedro Perez, 04262222222 Juan Gonzalez, 04163333333 Maria Garcia, 04264444444
La ubicación, y nombre, de este archivo de contactos se indica al principio del programa. Los códigos de área (0416, 0426) deben indicarse completos, como aparecen en el ejemplo.
Uso de la aplicación
Yo ejecuto la aplicación con una tecla rápida, como las que vimos en los artículos anteriores:
#X::Run "C:\Movilnet\Movilnet.ahk"
La web de Movilnet usa un código de verificación para los envíos de los mensajes sms. Así que, lamentablemente, hay que ingresar ese código por cada uno de los mensajes que se envían. Al principio no estaba seguro de que la aplicación fuese realmente útil, dada la molestia del código de seguridad. Pero, un poco por curiosidad (y un poco más por necedad) la hice y la he estado usando ya por un par de meses, y no me ha parecido que el código de seguridad sea demasiada molestia, o que sobrepase las ventajas de usar la aplicación.
Diariamente uso ambos, el teléfono y la aplicación, dependiendo de lo que necesite hacer. Si sólo necesito responder un "Ok" a un mensaje que me envíen, por supuesto que es más rápido hacerlo desde el teléfono. Pero si quiero escribir un mensaje más largo, o no sé muy bien que voy a enviar(es más fácil dudar y corregir frente al teclado del computador que en el teclado del teléfono), o quiero enviarlo a varias personas (también es más rápido seleccionar personas de la lista de la aplicación que en el teléfono), prefiero usar la aplicación. También la uso, por supuesto, en situaciones más mundanas como falta de batería o de saldo ;-)
Conclusión
Lo que más me gusta del AutoHotkey es que me ahorra tiempo, y me evita repeticiones innecesarias y errores, en áreas o tareas donde incluso ni me imaginaba que se podía. Luego de intentar diferentes tipos de herramientas de automatización en Windows (lenguajes de secuencias de comandos, herramientas de sustitución de textos, de asignación de teclas rápidas, etc.), encontré en él una de las herramientas de productividad más importantes que he encontrado. Definitivamente requiere al menos una base de conocimiento de programación, pero también es cierto que se pueden encontrar en internet muchas soluciones ya hechas para casos comunes (como algunos de lo que mostré en la primera parte de esta serie) y otros no tan comunes (como el que vimos aquí y en el artículo anterior).
Espero que les sea de utilidad esta información. Y si tienen alguna solución interesante hecha con el AutoHotkey, también me encantaría escucharla.
ACTUALIZACIÓN (04/08/2009): Si habían descargado en las últimas semanas la aplicación para SMS de Movilnet quizás no les haya funcionado: la web de Movilnet cambió la dirección del servicio. Acabo de subir una actualización del código (y el ejecutable) de la aplicación, con la dirección corregida
Publicado el
4/09/2008 12:27:00 p. m.
5
comentarios
Etiquetas: Herramientas, Productividad
Existen muchas opciones para hacer localización e internacionalización en Ruby on Rails. Entre todas ellas, la que me parece más sencilla es el plugin Localization Simplified. Sin embargo, me interesaban principalmente dos cosas: (1) agregar código sólo para español a mi aplicación, y (2) meterle la mano en los bolsillos a Rails y averiguar bien qué se debía hacer y por qué. En menos palabras: porque soy un maniático y un idiota ;-)
Hay diferentes cosas que hay que ajustar en Rails para que toda la información que colocamos en nuestras aplicaciones salga correctamente en español. Buscando en internet, encontré bastantes sitios donde aparecen consejos sobre cómo hacer muchas de estas cosas. Pero cada consejo, cada nueva solución, generaba un nuevo error, o advertencia, y tenía que seguir buscando. Con un poco de lectura y trabajo, fui uniendo y ajustando las diferentes soluciones que iba encontrando. A continuación les muestro la solución final que logré.
En primer lugar creamos un subdirectorio app\overrides, y allí colocamos los siguientes archivos:
module ActiveRecord
class Errors
begin
@@default_error_messages = {
:inclusion => "no está incluido en la lista",
:exclusion => "está reservado",
:invalid => "no es válido",
:confirmation => "no es una confirmación",
:accepted => "debe ser aceptado",
:empty => "no puede estar vacío",
:blank => "no puede estar en blanco",
:too_long => "es demasiado largo (máximo %d caracteres)",
:too_short => "es demasiado corto (mínimo %d caracteres)",
:wrong_length => "no tiene la longitud correcta (debería tener %d caracteres)",
:taken => "ya ha sido incluido",
:not_a_number => "debe ser un número" }
end
end
end
module ActionView #nodoc
module Helpers
module ActiveRecordHelper
def error_messages_for(object_name, options = {})
options = options.symbolize_keys
object = instance_variable_get("@#{object_name}")
unless object.errors.empty?
content_tag("div", content_tag(options[:header_tag] || "h2", "Hay errores que impiden guardar el registro") +
content_tag("p", "Compruebe los siguientes campos:") +
content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }), "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation" )
end
end
end
end
end
require 'date'
class Date
remove_const(:MONTHNAMES)
MONTHNAMES = [nil] + %w(Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre)
remove_const(:ABBR_MONTHNAMES)
ABBR_MONTHNAMES = [nil] + %w(Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic)
remove_const(:DAYNAMES)
DAYNAMES = %w(Domingo Lunes Martes Miercoles Jueves Viernes Sábado)
remove_const(:ABBR_DAYNAMES)
ABBR_DAYNAMES = %w(Dom Lun Mar Mié Jue Vie Sáb)
end
class Time
alias :strftime_nolocale :strftime
def strftime(format)
format = format.dup
format.gsub!(/%a/, Date::ABBR_DAYNAMES[self.wday])
format.gsub!(/%A/, Date::DAYNAMES[self.wday])
format.gsub!(/%b/, Date::ABBR_MONTHNAMES[self.mon])
format.gsub!(/%B/, Date::MONTHNAMES[self.mon])
self.strftime_nolocale(format)
end
end
module ActionView
module Helpers
module DateHelper
def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
from_time = from_time.to_time if from_time.respond_to?(:to_time)
to_time = to_time.to_time if to_time.respond_to?(:to_time)
distance_in_minutes = (((to_time - from_time).abs)/60).round
distance_in_seconds = ((to_time - from_time).abs).round
case distance_in_minutes
when 0..1
return (distance_in_minutes == 0) ? 'menos de un minuto' : '1 minuto' unless include_seconds
case distance_in_seconds
when 0..4 then 'menos de 5 segundos'
when 5..9 then 'menos de 10 segundos'
when 10..19 then 'menos de 20 segundos'
when 20..39 then 'medio minuto'
when 40..59 then 'menos de un minuto'
else '1 minuto'
end
when 2..44 then "#{distance_in_minutes} minutos"
when 45..89 then 'aprox. 1 hora'
when 90..1439 then "aprox. #{(distance_in_minutes.to_f / 60.0).round} horas"
when 1440..2879 then '1 día'
when 2880..43199 then "#{(distance_in_minutes / 1440).round} días"
when 43200..86399 then 'aprox. 1 mes'
when 86400..525599 then "#{(distance_in_minutes / 43200).round} months"
when 525600..1051199 then 'aprox. 1 año'
else "over #{(distance_in_minutes / 525600).round} years"
end
end
end
end
end
Dir[File.dirname(__FILE__) + "/**/*.rb"].each { |file| require(file) }
Luego colocamos, al final del archivo config\environment.rb:
require "#{RAILS_ROOT}/app/overrides/all"
Por último, en el archivo config\initializers\inflections.rb:
Inflector.inflections do |inflect| inflect.plural /([aeiou])([A-Z]|_|$)/, '\1s\2' inflect.plural /([rlnd])([A-Z]|_|$)/, '\1es\2' inflect.singular /([aeiou])s([A-Z]|_|$)/, '\1\2' inflect.singular /([rlnd])es([A-Z]|_|$)/, '\1\2' inflect.irregular 'user', 'users' inflect.irregular 'account', 'accounts' inflect.irregular 'password', 'passwords' inflect.irregular 'session', 'sessions' end
Noten que el final del código de pluralizaciones agrego cuatro líneas para user, account, password y session. Esto se debe a que quiero que todas las pluralizaciones que haga Rails en mi aplicación, las haga con las reglas del español, así que tengo que agregar excepciones para los modelos que están en inglés (en este caso, los modelos para el manejo de usuarios, que vienen del plugin Restful Authentication). Si tienen algún modelo en inglés, pueden agregar la regla para pluralizarlo de la misma manera allí.
Todo esto se debe encargar de colocar en español los mensajes de error, las fechas (meses, días), y las pluralizaciones de Rails.
ACTUALIZACIÓN (12/04/2008): Agregué la traducción de la función distance_of_time_in_words al archivo app\overrides\date.rb. También es recomendable traducir las plantillas del generador scaffold que se encuentran en {RUBY}\lib\ruby\gems\{VERSION DE RUBY}\gems\rails-{VERSION DE RAILS}\lib\rails_generator\generators\components\scaffold\templates
Fuentes del código:
Publicado el
4/01/2008 09:58:00 a. m.
12
comentarios
Etiquetas: Rails
Esta es la segunda parte de la serie de artículos sobre el AutoHotkey. En la primera parte vimos algunos de los ejemplos más sencillos de sustitución de textos y arranque de aplicaciones. Ahora vamos a ver algunos ejemplos de tareas más complejas.
Automatizar otras aplicaciones
Es en esta área donde el AutoHotkey pasó, para mí, de ser una sencilla tecla o texto rápido, a una poderosísima herramienta de productividad, para automatizar secuencias de tareas repetitivas o tediosas, que realizo en una o más aplicaciones de manera frecuente.
Búsquedas especializadas
Una de mis tareas diarias es la gestión de licencias de las aplicaciones que desarrolla mi empresa. Diariamente recibo correos o llamadas con solicitud de licencias, y consultas de clientes y códigos de activación. El histórico de licencias está guardado en una serie de archivos textos. El siguiente código, conjuntamente con otra herramienta llamada Windows Grep, me permite hacer estas búsquedas muy rápidamente, permitiéndome concentrar en las labores de servicio o gestión de las licencias, y no en los detalles de la búsqueda en sí.
clipboard =
Send ^c
if clipboard <>
{ Run "C:\Archivos de programa\Windows Grep\grep32.exe" "%clipboard%" *.txt "C:\Licencias"
ExitApp
}
Gui, Add, Text,, Buscar:
Gui, Add, Edit, vBuscar ym
Gui, Add, Button, Default ym, Aceptar
Gui, Add, Button, xm, Cancelar
Gui, Show,, Buscar licencias
Return
Esc::
ButtonCancelar:
GuiClose:
ExitApp
ButtonAceptar:
Gui submit, nohide
if Buscar <>
{
Run "C:\Archivos de programa\Windows Grep\grep32.exe" "%Buscar%" *.txt "C:\Licencias"
ExitApp
}
Gui, Show,, Buscar licencias
Return
Este código lo guardo en un archivo aparte ("Consultar.ahk", en este ejemplo), y lo llamo a través de una tecla rápida definida en un archivo junto con todas las otras teclas rápidas (como el que vimos en la primera parte):
#S::Run "C:\Licencias\Consultar.ahk"
La utilización es bastante sencilla: puedo marcar un texto (el nombre de un cliente, o un código de licencia, en un correo, o chat, por ejemplo), presionar las teclas Windows+S y de inmediato me aparece el resultado de la búsqueda (primeras siete líneas de código). Si no hay ningún texto seleccionado, se muestra una pequeña pantalla (las siguientes cinco líneas que empiezan con Gui) donde puedo escribir lo que deseo buscar y al darle aceptar me muestra el resultado (últimas 9 líneas del código).
Empaquetado y publicación de aplicaciones
Este es un ejemplo bastante específico de mis tareas diarias, así que dudo mucho que vayan a usar la secuencia de código exactamente igual como yo la uso. La incluyo aquí para mostrarles otro ejemplo de las cosas que se pueden hacer con el AutoHotkey para ahorrar tiempo y evitar errores.
Una de las aplicaciones que producimos en mi empresa está hecha en FoxPro 2.6. El proceso de compilación, empaquetado y publicación de cada revisión de la aplicación implica la ejecución de una secuencia de pasos, siempre los mismos y en el mismo orden. El proceso, hecho a mano, puede ser un poco fastidioso y propenso a errores (alguna vez olvidé ejecutar alguno de los pasos, con distintas consecuencias), así que este código me garantiza que siempre se hará de la misma manera y mucho más rápidamente de lo que yo lo hacía antes.
; Averiguar si está se está ejecutando el FoxPro. Si no, no se hace nada
IfWinExist, Microsoft FoxPro { WinActivate ; Ir a la ventana que encontró antes (FoxPro) ; Desactivar información del depurador antes de compilar Send !1 Send ^O Send !I{Enter} ; Marcar el ejecutable como Empresarial Send ^{F2} Send ^{End} Send Do ag.prg with .F.{Enter} ; Compilar Send !1 Send !G Send !E Send {Enter} Send {Enter} Send {Enter} ; Pausa para esperar que finalice la compilación de la aplicación MsgBox, Esperar que termine de compilar la aplicación WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Agregar el ícono Send ^{F2} Send ^{End} Send do \fpw26\addicon{Enter} Send C:\Productos\AdmInt\AdmInt.exe{Tab} Send C:\Productos\AdmInt\BMPS\AdmInt.ico{Tab}{Tab}{Tab} Send {Enter} ; Pausa para actualizar los archivos de actualización en el FTP MsgBox, Actualizar empaquetado en el FTP WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Marcar el ejecutable como Comercial Send ^{F2} Send ^{End} Send Do ag.prg with .T.{Enter} ; Compilar Send !1 Send !G Send !E Send {Enter} Send {Enter} ; Pausa para esperar que finalice la compilación de la aplicación MsgBox, Esperar que termine de compilar la aplicación WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Agregar el ícono Send ^{F2} Send ^{End} Send do \fpw26\addicon{Enter} Send C:\Productos\AdmInt\AdmInt.exe{Tab} Send C:\Productos\AdmInt\BMPS\AdmInt.ico{Tab}{Tab}{Tab} Send {Enter} ; Pausa para actualizar los archivos de actualización en el FTP MsgBox, Actualizar empaquetado en el FTP WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Reestablecer el ambiente de desarrollo ; Activar información del depurador antes de compilar Send !1 Send ^O Send !I{Enter} ; Marcar el ejecutable como Empresarial Send ^{F2} Send ^{End} Send Do ag.prg with .F.{Enter} ; Compilar Send !1 Send !G Send !A Send {Enter} Send {Enter} Send {Enter} }
Toda la tarea, hecha a mano, me podía tomar varios minutos, e incluso algunas veces repetía pasos, por temor a haber olvidado alguno. Ahora me toma menos de un minuto la publicación de cada revisión.
Gex Administrativo: carga de artículos con seriales
Nuestro producto Administrativo no maneja seriales de manera nativa, principalmente porque la gran mayoría de nuestros usuarios no lo requieren. Para los pocos que usan seriales en la carga de artículos, se desarrolló esta solución usando el AutoHotkey.
Gui, Add, Text,, Serial:
Gui, Add, Text,, Artículo:
Gui, Add, Edit, vSerial ym
Gui, Add, Edit, vArticulo
Gui, Add, Button, Default ym, Incluir
Gui, Add, Button, xm, Cerrar
Gui, Show,, Seriales
Return
Esc::
ButtonCerrar:
GuiClose:
ExitApp
ButtonIncluir:
Gui submit, nohide
if Serial <>
{
IfWinExist, Gex Administrativo ; Sin título ;
{
WinActivate
Send ^{Ins}
WinActivate, Seriales
WinActivate, Gex Administrativo
Send %Articulo%
Send {Tab}{Tab}{Tab}
Send 1
Send {Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}
Send %Serial%
Send {Tab}{Tab}{Tab}{Tab}{Tab}
}
else
{
MsgBox No hay un Gex Administrativo ejecutándose para realizar esta operación
}
GuiControl, , Serial
}
Gui, Show,, Seriales
Return
Primero se muestra una pequeña pantalla donde se pide el código del artículo a incluir y el número de serial (o preferiblemente el código de barra, directamente desde una lectora de códigos de barra). El programa luego activa la ventana del Gex Administrativo (si no hay ninguna da un mensaje al usuario y vuelve a la pantalla anterior), incluye el artículo, le asigna 1 a la cantidad y coloca el número de serie en el campo de descripción del ítem (donde se puede tomar desde los reportes de la aplicación para hacer lo que sea que el usuario requiera de él).
Esto puede sonar como una tarea muy sencilla, pero si se requiere cargar varias docenas de artículos, con sus respectivos seriales, entonces esta solución le puede ahorrar una cantidad enorme de tiempo al transcriptor. Adicionalmente, es una manera de proporcionarle una solución a un usuario, sin tener que agregar más opciones (complicaciones innecesarias, la mayoría de las veces) a un producto de software.
Este ejemplo en particular se debe ejecutar desde el detalle de una factura de compras, y creando una tecla rápida como esta:
#X::Run "C:\Gex Administrativo\Seriales.ahk"
Soluciones como estas, con unas pocas líneas de código, pueden ahorrarnos mucho tiempo y errores en nuestras labores diarias. En el siguiente artículo de esta serie, veremos cómo podemos incluso crear aplicaciones completas con el AutoHotkey.
Publicado el
3/29/2008 12:56:00 p. m.
1 comentarios
Etiquetas: Herramientas, Productividad
Hoy 28 de marzo, llegó a su primer aniversario nuestra empresa, Logiciel, C.A. Ha sido un año lleno de muchas cosas buenas, muy productivo, y, en ocasiones, toda una aventura también.
Me gustaría aprovechar la ocasión para agradecer, de manera pública, a algunas personas cuyo apoyo ha sido vital para este proyecto: Luis Rodriguez (planificación estratégica), que ha tenido la paciencia para guiarnos en la travesía de la idea al negocio; Janine Arévalo (distribución), quien a pesar de las dificultades iniciales, creyó en el proyecto y en la propuesta de negocio; Carolina Perez (aspectos legales) y Daniel Ghinaglia (diseño gráfico), nos han dado lo mejor de ellos: la pasión por su trabajo; Pedro Zaraza y Carlos Betancourt, mis más fieles colaboradores, fuentes constante de ideas, proyectos e interesantes discusiones.
Ha sido, sobretodo, un año de organización: poner a punto todos los detalles operativos más básicos del negocio, y empezar el camino. Ahora empezamos a adentrarnos en terrenos nuevos, así que lo mejor está por venir.
Publicado el
3/28/2008 07:00:00 a. m.
2
comentarios
Etiquetas: Logiciel
Mi nombre es Jesús, y soy un adicto. Aun puedo recordar la época en que estaba limpio. Era allá por el año de 1992. Pero entonces me lo ofrecieron. Me lo pusieron enfrente, y no pude resistir la tentación. Durante 15 años mi vida ha estado dominada por mi adicción. Pero ahora, luego de mucho trabajo, estoy logrando dejarlo, limpiarme. Y el AutoHotkey ha sido una de las mejores ayudas para este éxito. Era justo lo que necesitaba para limpiar mi vida de la maldición del ratón.
Esta bien, no es una maldición, pero hoy me levanté un poco más cinematográfico que de costumbre ;-)
Empecé a usar el AutoHotkey como una manera de crear teclas rápidas para ejecutar programas que usaba frecuentemente (antes de descubrir el Launchy), y para generar automáticamente textos repetitivos, como firmas de correos y cosas por el estilo. Con el tiempo se convirtió, además, en una herramienta de automatización de tareas muy eficiente y sencilla.
El sitio web de AutoHotkey tiene un excelente tutorial de introducción (la documentación está en varios idiomas, pero lamentablemente no en español, aunque se pueden conseguir algunos tutoriales en español en otros blogs). La instalación no tiene mayor complicación: bajar el instalador, ejecutarlo y darle al botón "Siguiente" hasta el final.
Lo que me gustaría mostrarles aquí son algunos de los usos que yo le he dado a la herramienta, para automatizar tareas en mi trabajo diario. Todos los extractos de código que mostraré aquí, los guardo en un archivo llamado "Inicio.ahk", que incluyo en el menú de inicio, para tenerlos disponibles cada vez que inicie el equipo.
Firma (y otros textos rápidos)
Esta fue el primer uso que le di a la herramienta y es un código bastante sencillo:
::frm::Nombre.-{Enter}http://www.web.com/
Solía tener una firma definida en Outlook, pero no todo lo que firmo lo hago en el Outlook (por ejemplo: foros en internet, correos enviados directamente desde la página de Gmail, etc.). Donde sea que escriba "frm", aparecerá el texto de la firma completo. Escogí "frm" porque me pareció fácil de recordar, y no es algo que normalmente escribiría en algún texto y que se pudiera confundir con otra palabra.
Esto no sólo me ha servido para la firma. Cada vez que me descubro escribiendo un texto varias veces (saludos de correos, encabezados, textos de soporte a usuarios, etc.), incluyo un código como este para crear la sustitución automática. Sólo es cuestión de estar pendiente de las cosas que se hacen repetitivas en las tareas comunes diarias. No me creerían la cantidad de tiempo que me ha ahorrado esta sencilla solución.
Búsquedas en internet
#G:: Send ^c Run http://www.google.com/search?q=%Clipboard% Return
Este pequeño código me permite seleccionar una palabra o frase en cualquier lugar, y al presionar la tecla Windows+G, abre el explorador en la página de Google y busca el texto seleccionado.
También se puede hacer una búsqueda en Wikipedia:
#W:: Send ^c Run http://es.wikipedia.org/wiki/Special:Search?search=%Clipboard% Return
Para un "infolujurioso" como yo, con docenas de búsquedas diarias en Google y Wikipedia, no es nada despreciable el ahorro de tiempo que me brinda esto.
Esto se puede hacer también fácilmente con la mayoría de los sitios web actuales, sólo hay que averiguar cuál es el URL de búsqueda del sitio web y reemplazarlo en el código anterior.
Ejecutar aplicaciones
Como mencioné antes, ahora uso el Launchy para ejecutar aplicaciones, pero siempre quedan algunas (como estos dos ejemplos) que por algún motivo necesito más rápido de lo que el Launchy me las puede ofrecer.
Hago multitud de anotaciones al día, de todo tipo: cosas por hacer, ideas para desarrollar, notas para el blog, correos pendientes, etc. Solía hacerlo en papel, pero a veces el simple hecho de hacer una anotación me sacaba del ritmo en el que estaba trabajando. Últimamente he estado usando el Notepad para estas anotaciones. Pero esto requiere que esté disponible en todo momento, a una sola tecla de distancia:
#N::Run "%SystemRoot%\system32\notepad.exe"
Esto me permite que en cualquier momento que esté concentrado haciendo algo, y me pase una idea por la cabeza que me parece importante recordar luego, simplemente presiono Windows+N, la escribo, y continuo de inmediato con lo que estaba haciendo, sin romper el ritmo y la concentración. Luego, cuando he terminado con lo que estaba, puedo volver a las anotaciones y decidir qué hacer con ellas una por una, sin interrumpir mi trabajo.
En otros casos es una aplicación que siempre está abierta, o que si no lo está, debería estarlo, como por el ejemplo Outlook:
#1::
IfWinExist, Microsoft Outlook
WinActivate
else
Run "C:\Archivos de programa\Microsoft Office\OFFICE11\outlook.exe"
return
Al presionar Windows+1, si está abierto el Outlook, me muestra la ventana, y si no, lo ejecuta. Resultado: mi correo, como el Notepad, siempre está a una tecla rápida de distancia.
Estos son los ejemplos más sencillos de cómo uso el AutoHotkey. En próximos artículos les mostraré algunos ejemplos un poco más complejos, para automatizar tareas dentro de aplicaciones, o con combinaciones de aplicaciones, y para construir aplicaciones completas con la ayuda del AutoHotkey.
Publicado el
3/19/2008 09:14:00 a. m.
12
comentarios
Etiquetas: Herramientas, Productividad
Ismerai vive en Basilea, Suiza. Pero sin importar dónde esté, o dónde haya nacido, Ismerai es irremediablemente de El Tocuyo (pronúnciese uniendo muy bien las dos palabras, sin temor a opacar la "l" del artículo, con un staccato sutil sobre la primera "o" y la "u", y dejando que la "y" se arrastre sólo un poco hacia una "ch"). Le apasiona hacer varias cosas, las cuales logra disimular muy bien de los desconocidos. Uno de esas cosas es cantar. Que bueno que no soy un desconocido para ella.
Maxwell es una de las pocas personas que conozco que aun pareciera mantener cierta inocencia en la mirada (aunque puede ser una ratica de cuando en cuando, ¿cierto, "sobrino"?). Cuando lo conocí, en la casa de su familia en Patarata, era apenas un niño, tenía un violín en la mano, y no paraba de hablar. La última vez que lo vi, en casa de Ismerai, tenía un violín en la mano, y no paraba de hablar. Que bueno que algunas cosas no cambian.
Muy poco conozco de Minako, salvo que es violinista y novia de Maxwell. Él está haciendo su mejor esfuerzo por tropicalizarla: ya está tocando música venezolana en el violín, está comenzando a tocar cuatro (probablemente en un algún tiempo nos humille con él a varios de nosotros) y va acumulando palabras en español.
Con personajes tan variopintos, la música siempre va más allá de la música :-)
(Ese noche hasta yo toqué cuatro, que tenía años sin hacerlo. Lástima la bateria murió antes de tiempo)
Maxwell, junto con otro querido amigo, Rafael, tienen un grupo de música venezolana, Cemeruko Ensamble. Pueden ver más de su trabajo en:
Publicado el
3/13/2008 10:59:00 a. m.
0
comentarios
Los podcasts son mi radio "a la carta". Y, de hecho, la mayoría de los que escucho son realmente programas de radio, distribuidas luego como podcasts. Así que tiendo a juzgarlos, y disfrutarlos, como siempre lo he hecho con la radio: una conversación privada (aunque sea pública, es conmigo nada más mientras la escucho) con alguien que tiene algo interesante y/o divertido que decir.
Luego del reciente artículo donde hablé sobre los podcast, me han preguntado cuáles son los que normalmente escucho. Esta es una pequeña lista de mis favoritos:
También estoy suscrito a unos podcast de música, que me parece interesante mencionar:
Ultimamente he estado discutiendo con algunos amigos la carencia de contenido de calidad en español en internet. Al igual que con los podcast, la mayoría de los blogs que consumo están en inglés, con algunos pocos en español y francés. Si sabes de algún buen blog o podcast en español, puedes dejar la recomendación en los comentarios.
Publicado el
3/11/2008 08:37:00 p. m.
2
comentarios
Etiquetas: Podcast
Studio 60 on the Sunset Strip pudiera ser la mejor serie que han visto mis (ya cuadrados de tanta TV) ojos. Hernán Casciari escribió un apasionado artículo sobre este serie en su blog de series de TV, así que me ahorraré el discurso. Hoy sólo quiero mostrarles dos exquisitos momentos musicales que nos brindó la serie.
El primero, perteneciente al capítulo 11, es un arreglo del villancico "O Holy Night", ejecutada por unos músicos de New Orleans, desplazados por la tragedia del huracán Katrina. Alguien tuvo la amabilidad de quitar el audio de los diálogos, así que podemos disfrutar de la canción completa.
Se puede descargar un mp3 de la canción desde la web del trompetista.
El segundo, perteneciente al capítulo 5, nos lo brinda Sting, quien viene haciendo cosas con un laúd desde hace un tiempo, acompañado por Edin Karamazov. Aquí hacen una versión de la canción "Fields of Gold".
Este video si incluye el audio de los diálogos de la escena, aunque esto no es un problema para los que hemos disfrutado de la serie, puesto que es una de las escenas más emotivas (léase "tensión sexual como para desempapelar paredes con las uñas") de la serie.
Sencillamente exquisito, ¿no?
Publicado el
3/05/2008 02:50:00 p. m.
0
comentarios
En la última semana ocurrieron dos sucesos de mucha importancia para mí. El primero fue mi "segundo cumpleaños": oficialmente tengo 36 años, que se cumplen cada 21 de octubre (Si, es contigo que aun me debes mi regalo). De una manera más íntima, llevo otra cuenta paralela: cinco años de edad, que se cumplen cada primero de marzo, fecha en que sufrí un terrible accidente en parapente. Esta otra cuenta me coloca en mi segunda infancia. Eso les debería explicar muchas cosas ;-)
El segundo suceso fue que alcancé los 250 kilómetros trotados, según la bitácora de mi iPod+Nike. Ambos hechos están muy relacionados, porque todas las cosas que he logrado en los últimos cinco años, que superan por mucho los retos que me habría impuesto antes del accidente, tienen que ver con ese afán por superar límites; límites que, la más de las veces, tenemos impuestos de manera totalmente arbitraria e inconsciente.
"Es simplemente más divertido cuando eres más rápido" es una imagen que trato de aplicar a cada pequeño logro alcanzado, y, sobretodo, a la próxima frontera por superar que ese logro define: al llegar al borde del esfuerzo no queda más remedio que dar otro paso más, porque es justamente ahí donde empieza la diversión. Antes de llegar a ese borde sólo estábamos calentando.
Hay un lado más mundano en este logro de 250 kilómetros, que tiene que ver con un recurso que me ha ayudado a mantener la constancia en el proceso (o que, más bien, se ha afincado en un síndrome, que apenas acabo de enterarme que existe, y que sin duda padezco). El recurso del que hablo es el podcast.
Hasta hace muy poco, podcast y música significaban casi lo mismo para mí. Y cuando pensaba en ejercicio, las cosas que venían a mi mente eran tipos de rutinas, sitios donde practicar, mejores horas, equipos, etc. Pues sucede que ahora cuando pienso en poscast, pienso en información; y al pensar en ejercicio, pienso es en repetición.
Lo más difícil de lograr en el ejercicio es la disciplina. No es el esfuerzo, ni los dolores o lesiones ocasionales, o los errores que se cometan, o la falta de información, o de grupo de apoyo, o quién sabe qué otros problemas se encuentra todo el mundo en el camino. Nada de eso. Lo verdaderamente arrecho es hacerlo TODOS LOS DIAS. No me refiero a batir records, o hacer esfuerzos descomunales a diario, sino a la simple repetición, al hábito. ¿Quieres hacer algún ejercicio? Sólo sal a caminar. Anda a un parque, o una plaza, o donde más te plazca, y ponte a caminar. Pero no hoy, y luego en una semana, y quizás dos meses después cuando no encontraste nada más que hacer. No señor: TODOS LOS DIAS (Está bien, quizás debas descansar los fines de semana). Es en esta repetición donde están los resultados reales. Y es ahí donde, en mi caso, entra el podcast (y el síndrome).
Antes debía luchar contra ni neurótico personal para explicarle cómo y por qué me iba a ausentar durante una hora o más del flujo de información constante que es la Internet. Ahora, una de las cosas que me levanta todos los días a trotar es la necesidad casi patológica de información. La sesión de ejercicios es ese momento de aislamiento, de bienestar físico, de disfrute, de reto. Pero también es el momento en que escojo de la multitud de fuentes de información que me brinda mi iPod, y me sumerjo en los temas más disímiles, sólo por el placer de disfrutar de la información nueva. Ahí lo tienen: Síndrome de Desorden de Atención de los Nerds: puro NADD (por sus siglas en inglés).
Luego de mucho tiempo intentando mejorar en el trote, finalmente parece que estoy haciendo avances. Y aunque había pensado hasta ahora que el hecho se debía a mi disciplina, a mi esfuerzo, a que he aprendido de mis errores, y que finalmente estoy mejorando (con todo el empujón que eso le da a mi orgullo), resulta que el principal componente es mi obsesión por absorber información. Bueno, no es tan malo en realidad, porque, al fin y al cabo, da resultados: la suma del deseo de alcanzar mis metas en el entrenamiento, el ver subir los numeritos en la web de Nike y la necesidad constante de información, han sido posiblemente mejores motivadores que simplemente lo rico del ejercicio.
La rutina es lo primordial. E implantar una rutina siempre provoca resistencia. Para mi el podcast ha sido una manera de vencer esa resistencia. Cada quien tiene guardado adentro la semilla (o el síndrome) que le permite vencer esa resistencia. ¿Cuál es la tuya?
Publicado el
3/03/2008 05:00:00 p. m.
2
comentarios
Como todos los años, ya creé mi lista de recordatorios de las carreras de la temporada de Fórmula 1. Normalmente lo hago en mi calendario de Outlook, sincronizándolo luego en la agenda de mi teléfono celular. Pero este año estaba buscando algún calendario público en Google, para no tener que transcribir todos los horarios, y no encontré ninguno. En realidad si encontré un montón, pero ninguno con el horario de las carreras en Venezuela, o con los eventos completos.
Aquí lo tienen, en caso de que haya algún otro enfermo por ahí que le parezca igual de abominable transcribir por 20 minutos algo que ya debería estar disponible en algún sitio en internet ;-)
Pueden exportar el calendario (en formato iCal) desde aquí, o usar la dirección para subscribirse desde Google Calendar. O simplemente consultarlo en el navegador
La hora de la carrera de Brasil, del 2 de noviembre, aun aparece en el calendario oficial como "por confirmar". De todos modos la coloqué en el calendario a las 12:30pm, como suele ser.
También hay unos recordatorios adicionales en los días previos a la carrera (el lunes y jueves antes de cada carrera), porque, no sé Uds., pero mi memoria siempre ha servido para muy poco, y el Outlook y mi teléfono siempre recuerdan mejor que yo :-D
Publicado el
2/19/2008 10:00:00 a. m.
5
comentarios
Etiquetas: Fórmula 1
La simplicidad es la sofisticación suprema
Leonardo da Vinci
Me gusta mucho el pool y la Fórmula 1, pero detesto ver una inmensa y colorida bola de billar, o los fabulosos colores de un Ferrari, atravesados en la pantalla de mi teléfono, cuando lo que quiero es ver la hora, o leer un mensaje, o saber quién me está llamando. Y como no encontré sino ese tipo de temas (en internet, o preinstalados en mi Nokia 6275), me propuse crear uno sencillo yo mismo.
Y cuando de diseños sencillos (y altamente eficientes) se trata, no hay nada mejor, a mi modo de ver, que Google. Con la ayuda del Series 40 Theme Studio de Nokia, y basado en algunos aspectos de diseño de Gmail, creé este tema. Se supone que funciona para todos los Nokia serie 40, aunque sólo lo he probado en modelos 5310, 6275 y 6275i.
Puedes descargarlo aquí y probarlo. Y si tienes algún comentario o sugerencia, o le haces alguna mejora, me gustaría escucharla.
Publicado el
2/09/2008 02:14:00 p. m.
1 comentarios
Esta pregunta la había hecho yo desde niño, y la única versión oficial que circulaba en mi familia, sin mayores detalles, es que los Dugarte venían de El Morro.
En el año 1993 fui con mi familia de vacaciones a El Morro. No es demasiado común, fuera de Mérida, tropezarse en la calle con algún desconocido apellidado Dugarte. Normalmente, luego de algunos minutos de averiguaciones, es fácil deducir algún parentesco con el recién conocido. Por eso aquel viaje tuvo algo de surrealista: comenzando en la plaza, donde el dueño de la bodega se llamaba Jesús Dugarte; pasando por la dueña de la posada, también Dugarte; hasta el cementerio del pueblo, donde había una lápida de un Bermudez, otra de un Gonzalez y el resto eran puros Dugarte: ni en las más grandes reuniones familiares había yo visto tantos Dugarte juntos.
La mayoría de las fuentes sobre heráldica que había consultado afirman que el apellido Dugarte es una variación de Ugarte, apellido vasco de origen toponímico que etimológicamente significa:
Entre riachuelos o entre dos riachuelos (de "ug", variante de "ur" ante vocal: río, y "arte", entre). Equivalente al castellano "Entrambasaguas", entre dos aguas, entre aguas, sin que esto quiera significar "isla"
sin mayores detalles en cuanto a dónde o por qué ocurrió la variación. De hecho, en casi todas las fuentes lo citan como un apellido vasco, contrario a la suposición de un origen venezolano.
Finalmente, hace poco encontré una versión con más detalles del origen del apellido:
De origen: Americano Nativo
Variante: D´Ugart (Vasco)
Según cuenta la historia un sacerdote vasco de nombre Pablo D`Ugart llego en tiempos de la colonia a los pueblos del sur, localizados en lo que hoy se conoce como estado Mérida, en Venezuela, específicamente a una población que se conoce en la actualidad como "El Morro". En este lugar este sacerdote formó, junto con las mujeres de la tribu, una gran familia, lográndose que en la actualidad la mayoría de habitantes de este pueblo lleven este apellido, pero como a los indígenas se les dificultaba pronunciar el apellido correctamente lo degeneraron linguísticamente en "Dugarte", convirtiéndose en un apellido bastante común en las diferentes poblaciones del Estado Mérida.
No sabría muy bien cómo verificar la veracidad de esta versión, pero incluso mi papá recuerda haberla escuchado alguna vez.
Pero también encontré otro detalle interesante: los registros parroquiales, (1531-1929) de la Iglesia de San Pedro (Tordesillas, Valladolid, España) guardan el registro del matrimonio entre Andrés Dominguez y una tal Ana Dugarte, el 2 de marzo de 1593. No tenemos fecha de la supuesta llegada de Pablo D`Ugart a El Morro, pero esta fecha de matrimonio parecería muy temprana como para suponer que una de sus descendientes se fue a España y contrajo nupcias allá. ¿O es que hay varios Dugartes diferentes, con momentos diferentes de origen?
Veamos este otro dato curioso: la empresa francesa de servicios de investigación genealógica GeneaService da cuenta en sus archivos (serie 2: partidas de nacimiento, matrimonio y defunciones, 1798-1860) de un acta de matrimonio de un tal Joseph Louis d'Ugarte, nombre que quedó registrado simplemente como Dugarte. Es decir, José Luis Dugarte. Se puede ver un extracto del acta escaneada (se requiere registrarse en la web, y es gratis, aunque está en francés). Igualmente aparecen registrados apellidos como Dugart o Dugast, que podrían tener un origen parecido. Eso debería explicar, por ejemplo, la aparición del apellido Dugart en los registros de la Isla Ellis, como proveniente de Francia.
¿Entonces el apellido Dugarte es venezolano, vasco o francés? Mi suposición es que es las tres cosas: quizás en cada uno de esos sitios (y en otros también, tal vez) el apellido Ugarte, o algunas de sus otras variaciones, sufrió cambios por diversas razones y vieron la luz diferentes apellidos (primos) Dugarte.
Hace tiempo que estaba investigando todo eso, y decidí escribir este post porque vi en las estadísticas de mi blog que varias personas llegaban hasta aquí (enviadas por Google) buscando el origen del apellido Dugarte. Así que, querido primo, si llegaste aquí buscando algo de esto, y tienes alguna información adicional al respecto, por favor, compártela en los comentarios.
ACTUALIZACIÓN (10/05/2008): Hace poco encontré un grupo en Facebook sobre los Dugarte: Dugarte's en faceboock, cuantos somos??.
Publicado el
11/30/2007 04:05:00 p. m.
68
comentarios
Cerca de la ciudad de Marsella (Francia) hay una pequeña población portuaria e industrial llamada Fos-sur-mer. Debido a los olores muy fuertes y desagradables que emiten las diferentes industrias allí ubicadas, esta localidad se hizo famosa en Francia por la expresión ça pue a Fos-sur-mer, lo que en español vendría siendo "hiede a Fos-sur-mer". Con el tiempo, y las economías a que se someten las expresiones entre la gente, se acortó la expresión a ça pue a fos, es decir "hiede a fos".
Con lo cual resultaría que la tan vernácula y criolla expresión "¡Fos!" podría ser un galicismo, otro préstamo más del lenguaje del romance y la diplomacia a nuestro exquisito español, como las palabras chofer, jardín, jamón, musiú y tantas otras.
Así que la próxima vez que una pestilencia te ataque sin contemplaciones, cuando sientas que todos los pelos se te paran, que la nariz se te arruga, que el estómago se te voltea y te preparas a emitir ese vocablo con la mejor de las inflexiones latinas, y dices "!FOOOO!", voltéate a ver a la audiencia con cara de erudito, sintiéndote muy orgulloso de tu francés.
Publicado el
7/12/2007 10:57:00 a. m.
3
comentarios
Etiquetas: Lengua
José Ricardo Alzate.
5 de julio del 2007
Plaza de la Justicia, Barquisimeto
XIV Festival de la Oralidad
Publicado el
7/06/2007 12:53:00 p. m.
0
comentarios
Etiquetas: Lengua
Al menos de acuerdo a este test, lo soy. Incluso soy cuatro quintas partes Hombre Araña y tres cuartas partes Superman:
Creo que no me quedará más remedio que repetir:
En el día más brillante, en la noche más oscura,
el mal no escapará de mi vista.
Aquellos que adoran al mal
que teman mi poder,
la luz de Linterna Verde
(Y lo primero que haré con mis super poderes será hacer pagar al que incluyó esos 55% Supergirl y 45% Mujer Maravilla ;-) )
Y tú, ¿qué super héroe eres?
Publicado el
12/30/2006 10:10:00 a. m.
1 comentarios
Desde que me enteré de la existencia de Google Earth había esperado la aparición de alguna aplicación web para crear y documentar rutas de bicicleta. Sabía que la espera no podía ser muy larga.
He encontrado, hasta ahora tres aplicaciones con ese objetivo. Las tres tienen características básicas en común: dibujo e información de la ruta y de los puntos por lo que pasa. Las tres comparten también una carencia (aunque no muy desalentadora) para nosotros los que vivimos fuera del primer mundo: no hay información de Google Maps en esta parte del planeta, sólo información satelital (imágenes de Google Earth).
La primera y más sencilla aplicación, Dave's Running Route Database, solo permite dibujar la ruta, sin información detallada de ella. Aunque en una primera prueba que hice, al consultar la ruta terminada, la dibujó en algún lugar del Atlántico Sur, cerca del Antártico. Habría que pedalear mucho en esas condiciones ;-)
La segunda aplicación es Bikely. Tiene información de la ruta, de los puntos por donde se pasa, distancia, gráficos de elevación, una hoja de ruta (Cue sheet) y exporta la ruta en un archivo para GPS. Rapmax tiene un muy buen post más detallado sobre esta aplicación.
La tercera aplicación, y mi favorita hasta ahora, es RouteSlip. Además de las opciones ya mencionadas en las otras dos, tiene un área de edición más grande (que aparece al principio siempre como "mapa", así que hay que cambiar a "satélite"), más detalles de los tipos de puntos por donde pasa la ruta (doblar a la izquerda/derecha, pasar, cruzar, reagruparse aquí, etc.) y un diario o bitácora, para registrar información del ciclista y de las rutas hechas (fechas, paseos, distancias, escaladas, condiciones ambientales, etc.).
Como prueba registré una ruta sencilla y muy popular entre los ciclistas de Barquisimeto, la ruta Barquisimeto – Yaritagua:
Ojalá veamos pronto muchas rutas cercanas registradas allí.Nota mental: Necesitas reparar la bicicleta y empezar a entrenar de nuevo.
Publicado el
12/28/2006 10:33:00 a. m.
1 comentarios
Etiquetas: Bicicleta
Una pregunta es una de las mejores oportunidades para aprender. Otra de esas oportunidades se dan cuando uno se tropieza con cosas que nos invitan a investigar, curiosear. En este caso es sobre el uso de la palabra "gocho" como gentilicio de los andinos venezolanos, su significado y el supuesto origen francés de la palabra.
El diccionario de la lengua española define "gocho" como "Voz con que se llama al cerdo", o un coloquialismo para "cerdo". En otro sitio en Internet ubican el origen de la palabra en el Norte de España (Asturias, León). Se entiende aquí "cerdo" como "mamífero artiodáctilo", ese que con palabras menos difíciles de pronunciar, como "especias", "salsa", "asado", etc., es tan sabroso, y que hasta fiesta tiene (aunque no pareciera que este "gocho" la disfrute mucho); no el otro coloquialismo de "cerdo", como persona de "poco cuidado personal".
En la fabulosa, y últimamente tan controvertida, Wikipedia aparece un artículo donde se relata un posible origen del por qué a los andinos venezolanos se les llama "gochos":
Durante la Revolución Restauradora de Cipriano Castro, éste convocó (reclutó, para ser exactos) a algunos de sus "revolucionarios" entre la población campesina del Táchira, a aquellos que se resistían a este reclutamiento se les marcaba cortándoles (seccionándoles) una parte de la oreja, de la misma forma que se hacía con los porcinos (gochos). Los mismos andinos tachirenses comenzaron a llamar gochos a aquellos que habían sido marcados de esta forma y la voz se hizo modismo general entre la población de la región central a medida que los andinos tomaban el poder.
Nada que ver con "cuidado personal".
En francés hay en uso una palabra "gocho", aunque el Dictionnaire de l'Académie française no la tenga registrada. Este "gocho" en francés es usado, de manera despectiva, para referirse a la persona de tendencia política de izquierda, derivada naturalmente de la palabra "gauche", izquierda. Es decir, se refieren a un izquierdista, un socialista, etc., definitivamente no a una persona que "hace las cosas de manera contraria a como regularmente se hace" (por mucho que al Frente Nacional le encantara esa definición). Una búsqueda y lectura rápida en Google nos muestra algunos foros y comentarios en francés donde es fácil ver cuán despectivo es su uso (no hay que hablar mucho francés para entender la expresión "gocho de merde" de uno de los comentarios de este artículo)
Como siempre he dicho, prudencia y Google siempre nos pueden evitar un chapuceo innecesario, y hasta inocente.
Publicado el
12/14/2006 03:46:00 p. m.
7
comentarios
Etiquetas: Lengua
A Lauren Porter, estudiante de la Escuela de Arte y Diseño de la Universidad Bath Spa en Inglaterra, le tomó diez meses y casi 20 km de hilo tejer un Ferrari de tamaño natural, el cual presentó en su graduación.
En la web de Lauren se pueden ver más detalles, un video del emsamblaje del carro para la exposición y algunos de sus otros trabajos.
Publicado el
12/12/2006 06:05:00 p. m.
1 comentarios
Etiquetas: Ferrari