Barcode4J en JRuby y Rails
Agosto 13th, 2010
En el post anterior había explicado el uso de Gbarcode, una librería para generación de códigos de barras con Ruby. El problema es que esta librería no se puede utilizar en Jruby ya que tiene extensiones nativas en C, cosa que Jruby aún no soporta.
Después de investigar alternativas de generación de codigos de barras para java como Zxing y Barbecue. Me quedé con Barcode4j por facilidad de implementación, documentación (la cual es muy completa) y sobre todo estabilidad.
A continuación paso a comentarles como utilizar esta librería en JRuby.
1) Lo primero es descargarse en paquete binario del sitio o bien de este enlace directo.
2) Al descomprimir el Zip, copiamos el contenido del directorio Build al directorio /lib de nuestra instalación de JRuby
3) Ahora vamos al código:
require 'java'
#Importamos algunas librerías que vamos a utilizar
import 'java.awt.image.BufferedImage'
import 'java.io.OutputStream'
import 'java.io.FileOutputStream'
#Importamos las librerías de los códigos de barras (Barcode4j) que necesitamos
import 'org.krysalis.barcode4j.impl.code39.Code39Bean'
import 'org.krysalis.barcode4j.impl.code128.Code128Bean'
import 'org.krysalis.barcode4j.impl.int2of5.Interleaved2Of5Bean'
import 'org.krysalis.barcode4j.impl.codabar.CodabarBean'
import 'org.krysalis.barcode4j.impl.code128.EAN128Bean'
import 'org.krysalis.barcode4j.impl.pdf417.PDF417Bean'
import 'org.krysalis.barcode4j.impl.upcean.EAN13Bean'
import 'org.krysalis.barcode4j.impl.upcean.EAN8Bean'
import 'org.krysalis.barcode4j.impl.upcean.UPCABean'
import 'org.krysalis.barcode4j.impl.datamatrix.DataMatrixBean'
import 'org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider'
import 'org.krysalis.barcode4j.tools.UnitConv'
#Creamos el Bean y establecemos los dpi y wide_factor
bean = Interleaved2Of5Bean.new()
dpi = 150
bean.wide_factor = 3
#Creamos la imagen
ofile = java.io.File.new('/home/laptop/barcodes/barcode.png')
out = FileOutputStream.new(ofile)
canvas = BitmapCanvasProvider.new(out,"image/x-png", dpi, BufferedImage::TYPE_BYTE_BINARY, false, 0)
#Generamos el código de barras
#El segundo parámetro que pasamos es el número del que deseamos generar el codigo de barras
bean.generate_barcode(canvas, '1234567890');
canvas.finish
out.close
Con esto, generamos una imagen con nuestro codigo de barras en /home/laptop/barcodes/barcode.png la cual se puede incluir en cualquier pdf/html/odf, etc.
Espero les sea útil. Cualquier duda, no duden en comentar.
Charla ‘Tendencias nuevas y no tan nuevas, y tecnologías emergentes en el desarrollo de aplicaciones’ en JUTI 2010
Agosto 10th, 2010
En el marco del XI Jornadas Universitarias Tecnológicas sobre Informática (JUTI) a realizarse en la Facultad Regional Resistencia – UTN, el Lic. José A. Ramirez de IPCorp SRL brindará la Charla ‘Tendencias nuevas y no tan nuevas, y tecnologías emergentes en el desarrollo de aplicaciones‘ el día Viernes 13 de agosto de 17.30 a 18.30hs.
El Lic. José A. Ramirez se graduó en la Universidad Nacional del Nordeste como Licenciado en Sistemas. Es especialista en Arquitecturas de Software. Desarrollador J2EE, Ruby y Ruby on Rails. Administrador de base de datos PostgreSQL.
La charla tratará sobre las nuevas y emergentes tecnologías IT que se espera que ayuden a las empresas a mejorar su eficiencia y a resolver los problemas actuales. Se delinearán las tendencias para la industria IT, el desarrollo de aplicaciones web y enterprise.
Se incluirán tópicos como:
- Nuevos lenguajes
- Lenguajes Dinámicos
- Bases de datos no-relaciones
- Arquitectura Orientada a al Web (WOA)
- Cloud Computing
- Frameworks de desarrollo
- La próxima generación de aplicaciones para móviles
- Nuevos modelos de aplicaciones
Cabe mencionar que la empresa Desarrollos Nea SRL también estará presente y brindará dos charlas: el día Miércoles 11/08 de 18.45 a 20.15 hs, Visual Studio 2010: ASP .NET MVC2 + Entity Framework. Disertantes: Ing. José Fernandez – Ing. Cristina Dacunda y el Viernes 13/08 de 18.45 a 19.45 hs, Certificar Desarrollo de Software con normas ISO. Disertantes: Ing. Diego Morales – Ing. Lautaro Lomazzi.
Para más información respecto de charlas y horarios, pueden visitar el siguiente enlace Cronograma Juti 2010
JasperReports con Jruby y Rails
Julio 29th, 2010
Uno de los grandes problemas en el desarrollo con Ruby on Rails son los reportes multipágina. Debido a que el HTML (inclusive HTML 5) no soporta multipágina, si utilizamos Jruby tenemos la posibilidad de usar cualquier librería Java en nuestro desarrollo.
Afortunadamente en Java tenemos JasperReports (http://jasperforge.org/), una excelente solución al problema antes mencionado.
Para poder incluir un reporte realizado con JasperReports en nuestra aplicación Jruby necesitamos:
1) Descargar I-Report, la herramienta de administracion de reportes de JasperReports. http://jasperforge.org/projects/ireport y descomprimirlo.
2) Dentro del directorio del i-report, ir a modules/ext/ y copiar todos los archivos .jar (si, todos
) al directorio lib de la instalación de JRuby. De esta manera, ya incluimos las librerías necesarias y tenemos preparado nuestro JRuby para utilizar JasperReports.
3) Nos resta crear un reporte para prueba, si nunca hiciste un reporte con i-report: http://jasperforge.org//website/ireportwebsite/IR%20Website/ir_design_a_report.html?header=project&target=ireport
4) Finalmente el código para correr nuestro reporte es el siguiente:
require 'java'
import 'oracle.jdbc.OracleDriver' #Aqui necesitas Utilizar el Driver de la Base de datos que estas usando, en mi caso es oracle
import 'net.sf.jasperreports.engine.JasperCompileManager'
import 'org.apache.commons.dbcp.BasicDataSource'
import'java.util.HashMap'
import'net.sf.jasperreports.engine.JasperFillManager'
import'net.sf.jasperreports.engine.JasperExportManager'
#Creo el datasource
basicdatasource = BasicDataSource.new
basicdatasource.driver_class_name = 'oracle.jdbc.OracleDriver'
basicdatasource.username = 'usuario'
basicdatasource.password = 'password'
basicdatasource.url = 'jdbc:oracle:thin:@localhost:1521:XE'
basicdatasource.connection
conexion = basicdatasource.connection
#Compilamos el reporte
jasperReport = JasperCompileManager.compile_report('/url_de_tu_archivo_jrxml/reporte.jrxml')
#Para pasar los parámetros, definimos un objeto HashMap
m = HashMap.new
m.put('parametro_1','valor_parametro_1')
m.put('parametro_2','valor_parametro_2')
m.put('parametro_n','valor_parametro_n')
#Genero el reporte
jasperPrint = JasperFillManager.fill_report(jasperReport, m,conexion)
#Exporto el PDF
JasperExportManager.export_report_to_pdf_file(jasperprint, 'path_al_archivo_PDF.pdf')
Si deseamos generar reportes en Rails, podemos por ejemplo ubicar los reportes en el directorio public/reportes y utilizar send_file para enviarlos, por ejemplo:
JasperExportManager.export_report_to_pdf_file(jasperprint, RAILS_ROOT+"/public/reportes/reporte.pdf") send_file RAILS_ROOT+"/public/reportes/reporte.pdf"
Espero les sea de utilidad, cualquier cosa comenten y trataré de despejar dudas
Lo nuevo de PostgreSQL 9.0 ilustrado
Julio 7th, 2010
Esta nueva release de PostgreSQL tiene tantas mejoras que la comunidad de desarrolladores decidió saltear lo que sería la siguiente versión -PostgreSQL 8.5- pasando directamente a la 9.0, ya que se introdujeron más de 200 mejoras en dicha versión.
Para ir preparándonos y estar al tanto de todas estas mejoras, habilitaron en la wiki de PostgreSQL una sección especial donde se explican estos cambios con sus correspondientes ejemplos.
Entre los cambios más importantes tenemos la incorporación de características como:
- Hot Standby: Esta característica nos permite crear una base de datos ‘Standby’. Esto es una segunda instancia de la base de datos: normalmente en un servidor separado a partir del log binario de la primera base de datos, permientiendo que el servidor standby esté disponible para consultas de sólo lectura.
- Streaming Replication: Es un complemento de Hot Standby. Si bien existen varias soluciones de replicación de terceros disponibles para PostgreSQL, ésta nueva versión trae una simple e integrada versión que probablemente será usada como default en la mayoría de las soluciones de High Availability de PostgreSQL.
Más info de las características nuevas y ejemplos en What’s new in PostgreSQL 9.0
Gbarcode. Codigos de barra con Ruby
Marzo 16th, 2010
Gbarcode es una librería de generación de códigos de barra para Ruby. Es una extensión de C que envuelve el proyecto GNU Barcode. Se distribuye en formato GEM
Link: http://gbarcode.rubyforge.org/
Ejemplo de uso:
require 'rubygems'
require 'gbarcode'
# Incluir el módulo
include Gbarcode
# Existen tres pasos para generar un codigo de barras
# 1) preparar el espacio para el string
# 2) codificar el string como un codigo de barras
# 3) imprimir el codigo de barras
# preparar el codigo de barras para el string "TEST1234"
bc = barcode_create("TEST1234")
# codificar el codigo de barras usando code 39,
# desde que code 39 no usa dígito de verificacion (checksum),
# lo podemos pasar en un flag
barcode_encode(bc, BARCODE_NO_CHECKSUM | BARCODE_39)
#imprimir el codigo de barras usando postcript
barcode_print(bc, File.new("testout.ps", "w"), BARCODE_OUT_PS)
# ó
barcode_print(bc, File.new("testout.eps", "w"), BARCODE_OUT_EPS)
Whenever: una manera sencilla de administrar tareas en Cron con Ruby
Marzo 15th, 2010
Si bien hace bastante tiempo que soy usuario de GNU/Linux, no suelo crear tareas en cron con frecuencia por lo que necesito investigar su poderosa sintáxis cada vez que debo crear trabajos que deben ejecutarse a intervalos regulares.
Hace poco por casualidad me topé con Whenever, una gema de Ruby que nos permite crear tareas en cron de manera muy sencilla. A través de un DSL nos abstrae de la complejidad de la sintáxis de cron. Whenever está muy integrado al framework de desarrollo web Ruby on Rails, aunque puede utilizarse en un programa independiente que genera salidas de tareas para cron y hasta actualiza el archivo crontab. En este post vamos a ver la manera de crear tareas con Whenever desde el punto de vista de un Administrador de Sistemas.
Salvando sistemas con SystemRescue y VirtualBox
Febrero 1st, 2010
Los héroes de esta historia son dos:
El primero es una LiveDistro es decir una distribución de Linux que se ejecuta en el arranque sin instalarse en un disco duro. Un comentario al margen respecto de esto es que en nuestro país Argentina se encuentra una de las primeras LiveDistro del Planeta y lleva el nombre de UTUTO, además de ser la primer Distribución reconocida totalmente libre por el proyecto GNU.
REST con Rails
Diciembre 29th, 2009
El uso de REST con Ruby on Rails es extremadamente relajante, una vez que comienzas a utilizar REST y te acostumbras a trabajar de esa forma, no quieres volver a la forma tradicional. Esta es una guía de conceptos básicos de REST y su aplicación en Rails.
REST son las siglas de Representational State Transfer (Transferencia de Estado Representacional), es una técnica de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web. El término se originó en el año 2000, en una tesis doctoral sobre la web escrita por Roy Fielding, uno de los principales autores de la especificación del protocolo HTTP y ha pasado a ser ampliamente utilizado por la comunidad de desarrollo.
Ubuntu 9.10: bug en Palimpsest, herramienta de análisis de disco
Noviembre 11th, 2009
Hace unos días actualicé a Ubuntu 9.10, y al finalizar apareció un mensaje que indicaba que mi disco tenía muchos sectores erróneos.
Uno de mis compañeros intentó detectar los sectores erróneos con System Rescue, y reportó que estaba todo bien.
Buscando encontré un foro en ubuntu-es que planteaba el mismo problema (http://www.ubuntu-es.org/?q=node/120405).
Resultó ser un bug, pueden verlo reportado en https://bugs.launchpad.net/ubuntu/+source/libatasmart/+bug/438136.
Afortunadamente, no tuve que cambiar el disco.
Navegando offline con HTTrack
Octubre 19th, 2009
Cuando viajo trato en lo posible de aprovechar la ocasión para leer libros. Teniendo en cuenta que cada vez hay más y muy buenos libros disponibles de manera online, tales como CouchDB: The Definitive Guide o Pro Git, una solución para navegarlo cuando no tenga conexión a Internet es bajar todo el sitio.
Encontré una herramienta ideal para realizar esta tarea: HTTrack.


