Rake tasks para log/ tmp/ y cache/
Wednesday, 18 July , 2007
Acá les dejo algunas tareas de rake que suelo agregar cuando comienzo un proyecto nuevo, son para
sacar las cosas que no tienen que estar bajo control de versión y para crear los archivos de log (cuando lo necesitemos):
lib/tasks/log.rake
namespace :log do
desc "Crear los directorios y archivos de log"
task :create do
system 'mkdir -p log'
system '> log/development.log'
system '> log/production.log'
system '> log/server.log'
system '> log/test.log'
end
desc "Cambia el grupo del directorio los archivos de log a www-data y pone
permisos de lectura/escritura para el grupo"
task :set_permissions_for_apache do
system 'chgrp -R www-data log'
system 'chmod -R g+rw log/'
end
desc "Saca los archivos de log del svn"
task :remove_svn do
system 'svn remove log/*'
system "svn commit -m 'Estas cosas no van en el svn'"
system "svn propset svn:ignore '*.log' 'log/'"
system 'svn update log/'
system "svn commit -m 'Ingnorar los archivos en log/'"
end
end
lib/tasks/tmp.rake
namespace :tmp do
desc "Cambia el grupo del directorio los archivos de log a www-data y pone
permisos de lectura/escritura para el grupo"
task :set_permissions_for_apache do
system 'chgrp -R www-data tmp'
system 'chmod -R g+rw tmp'
end
desc "Saca los archivos de tmp del svn"
task :remove_svn do
system 'svn remove tmp/cache/*'
system 'svn remove tmp/sessions/*'
system 'svn remove tmp/sockets/*'
system "svn commit -m 'Los archivos temporales no van en el svn'"
system 'svn propset svn:ignore "*" tmp/'
system 'svn propset svn:ignore "*" tmp/cache/'
system 'svn propset svn:ignore "*" tmp/sessions/'
system 'svn propset svn:ignore "*" tmp/sockets/'
system 'svn update tmp/'
system "svn commit -m 'Ingnorar los archivos en tmp/'"
end
end
lib/tasks/db.rake
namespace :db do
desc "Saca el archivo database.yml del svn"
task :rm_conf_file_svn do
system 'svn move config/database.yml config/database-ejemplo.yml'
system "svn commit -m 'El archivo database.yml no va en el svn'"
system "svn propset svn:ignore 'database.yml' 'config/'"
system 'svn update config/'
system "svn commit -m 'Ingnorar el archivo config/database.yml'"
system 'cp config/database-ejemplo.yml config/database.yml'
end
desc "Genera el archivo database.yml"
task :gen_conf_file do
system 'cp config/database-ejemplo.yml config/database.yml'
end
end
Ruby imagetooth nueva biblioteca para generar imágenes de odontogramas
Friday, 06 July , 2007
He publicado una biblioteca que genera imágenes para representar piezas dentarias en odontogramas, entre otras cosas las biblioteca permite crear .png .jpg, etc de piezas dentarias en blanco o con sus caras pintadas de un color (similar a la ficha de odontograma en papel). El proyecto en rubyforge es http://rubyforge.org/projects/imagetooth/, También está disponible como gema de ruby:
gem install imagetooth
La biblioteca tiene un script ejecutable que permite crear las imágenes de la sigueinte manera:
ruby imagetooth.rb --image wwwww.png --folder ./
Esto genera una imágen de un diente en blanco en el directorio actual dónde el wwwww.png representa lo siguiente:
[arriba][derecha][abajo][izquiera][centro].png
el orden de los caracateres representa la cara del diente a pintar y el caracter el color
- w - White
- g - Green
- b - Blue
- n - Black
- r - Red
algunos ejemplos:
generar un diente con la de arriba pintada de rojo
ruby imagetooth.rb --image rwwww.png --folder ./
generar un diente con la cara de arriba pintada de rojo y la cara del centro de verde:
ruby imagetooth.rb --image rwwwg.png --folder ./
generar un diente con la cara de arriba pintada de rojo, la cara del centro de verde y la de la izquiera de negro:
ruby imagetooth.rb --image rwwng.png --folder ./
además brinda la posibilidad de generar todas las combinaciones posibles(muy útil para tener las imágenes pregeneradas para un desarrollo web por ej.):
ruby imagetooth.rb --all --folder images/
Esto da como resultado 3125 imágenes (con 5 colores y 5 caras de dientes) divididas en directorios de acuerdo al
primer caracter del nombre de la imágen:
images/w/
images/b/
images/g/
images/n/
images/r/
La siguiente imagen fue generada utilizando imagetooth:

Para que el que tenga que desarrollar una aplicación que gestione odontogramas esta biblioteca le puede servir de base, y probablemente no tenga que partir desde cero como fue mi caso.
active_record ( Ruby ) sin Rails - Parte I
Saturday, 28 April , 2007
Actualmente estoy trabajando en un módulo de una aplicación web cuyo objetivo es presentar reportes de accesos a un predio, la aplicación está desarrollada en php y postgresql, los reportes están basados en vistas, dónde tengo una “vista base” llamada “stats_ingresos”, y las demás vistas hacen uso de “stats_ingresos”. Todo muy lindo, pero actualmente este sistema es muy lento, las consultas a estas vistas demoran más 2 minutos lo cual es inaceptable para una aplicación web, entonces decidí pasar esta vista base a tabla, con lo cual el costo de la consulta se reduce a 0. Obviamente esta solución tiene una desvetaja, tengo que actualizar la tabla “stats_ingresos” perdiódicamente, la actualización se va a realizar una vez por día y se actualizarán todos los accesos del mes (ya sé que esto se puede mejorar).
Para ir al grano, he decidido implentar este script de update con ruby + active_record y como metodología bdd usando rspec.
Esta es la tabla que va a reemplazar a la “vista base”:
CREATE TABLE stats_ingresos ( id SERIAL NOT NULL, nombre VARCHAR(25), apellido VARCHAR(25), dni VARCHAR(12), id_institucion INTEGER, institucion VARCHAR(50), dia SMALLINT, mes SMALLINT, anio SMALLINT, ts timestamp, PRIMARY KEY (id) );
Fuentes pequeñas en el menu de Firefox
Wednesday, 07 March , 2007
Luego de varios cuelgues repentinos en mi firefox 2.0, decidí instalar la nueva versión Iceweasel/2.0.0.1, entonces luego de la instalación, las fuentes del menú se ven demasiado chicas, googleando un poco leí hay que crear el siguiente archivo:
~/.mozilla/firefox/yourprofile/chrome/userChrome.css
editarlo y poner lo siguiente:
font-size: 12pt !important;
font-family: Tahoma !important;
input, textarea, select, button,
input[type="button"], input[type="reset"], input[type="submit"] {
font-size: 8pt !important;
font-family: Verdana !important;
}
y listo ahora las fuentes del menú se ven más grandes.
7 Paradigmas a romper para ser ágiles
Thursday, 01 February , 2007
Navegando un poco encontré este artículo que explica los 7 paradigmas que una empresa tiene que romper para ser ágil.
Un libro para aprender a porgramar basado en Ruby
Monday, 29 January , 2007
Navegando un poco encontré este libro para aprender a programar http://www.pragmaticprogrammer.com/titles/fr_ltp, está basado en ruby y es una versión mejorada del site http://pine.fm/LearnToProgram
Behavior driven development
Wednesday, 03 January , 2007
Dado que he visto en algunos blog el tema este de “BDD”, voy a ver de qué se trata esto del desarrollo guiado por comportamiento.
Behavior driven development (BDD) Es una técnica de programación que cuestiona el comportamiento de una aplicación antes y durante el proceso de desarrollo. Mediante preguntas tales como “Qué debería hacer esta aplicación?” o “Qué debería hacer esta parte?” los desarrolladores pueden identififcar brechas en la comprensión del problema del dominio y hablar con sus pares o expertos del dominio para econtrar las respuestas.
Mediante el enfoque en el comportamiento de las aplicaciones, los desarrolladores intentan crear un lenguaje común entre todos: gestión, usuarios, desarrolladores, jefe de proyecto y expertos de dominio.
El propósito es cuestionar cada parte de la aplicación y la aplicación entera. Estas cuestiones no tratan meramente características técnicas o requerimientos sino con características relacionadas con el tiempo y costo. Es factible para nuestra organización construir una aplicación de este ámbito? es una pregunta que se puede responder escribiendo tests de comportamiento. Exponiendo las complejidades de antemano, desarrolladores y jefes de proyecto pueden realizar mejores estimaciones de cómo ajustar la organización para manejar la creación de una aplicación. Read the rest of this entry »
Entrevista a Richard Stallman
Thursday, 28 December , 2006
Habla Stallman en un canal de televisión catalana, sobre todo lo que es la FSF y GNU. Read the rest of this entry »
OptionParser Ruby
Thursday, 28 December , 2006
OptionParser es una forma flexible y extensible para parsear argumentos de línea de comandos.
* Una opción puede tener múltiples nombres cortos (precedidos por un guión simple) y múltiples nombres largos (precedidos por doble guión). Así una opción que muestra la ayuda está disponible como -h, -?, –help y –about. Los usuarios pueden abreviar los nombres de opciones largas por un prefijo corto no ambiguo.
* Una opción puede ser especificada como sin argumentos, con argumento opcional, o requerido. Los argumentos pueden a validarse contra patrones o listas de valores.
* Los argumentos pueden retornarse como objetos de cualquier tipo (no sólo como Strings).
* Los argumentos pueden tener una o más líneas de texto descriptivo, para generar la infromación de uso.
Las opciones se especifican usando los métodos on y def. Estos métodos toman un número variable de argumentos que en conjunto construyen una definición de cada opción. Los argumentos aceptados por estos métodos están el al tabla 1.
require ‘optparse’
require ‘date’
# Add Dates as a new option type
OptionParser.accept(Date, /(d+)-(d+)-(d+)/) do |d, mon, day, year|
Date.new(year.to_i, mon.to_i, day.to_i)
end
opts = OptionParser.new
opts.on(”-x”) {|val| puts “-x seen” }
opts.on(”-s”, “–size VAL”, Integer) {|val| puts “-s #{val}” }
opts.on(”-a”, “–at DATE”, Date) {|val| puts “-a #{val}” }
my_argv = [ "--size", "1234", "-x", "-a", "12-25-2003", "fred", "wilma" ]
rest = opts.parse(*my_argv)
puts “Remainder = #{rest.join(’, ‘)}”
puts opts.to_s
produces:
-s 1234
-x seen
-a 2003-12-25
Remainder = fred, wilma
Usage: myprog [options]
-x
-s, –size VAL
-a, –at DATE Read the rest of this entry »
