DevelUY

Planeta de desarrolladores uruguayos

25 de julio de 2008

Fernando Briano

Disponible GNU IceCat 3-g1

GNU IceCat

GNU IceCat

A pesar de haber encontrado un nuevo favorito a largo plazo en Arora, todavía guardo “cariño” por GNU IceCat.Su desarrollador, Giuseppe Scrivano, anunció la salida de la versión 3-g1.Así que les dejo el anuncio, y los links para las descargas. Ya saben, si quieren usar Firefox sin lo privativo, usen GNU IceCat (o Debian IceWeasel :P)

GNU IceCat está basado en el código fuente de Mozilla Firefox. Mientras que el código fuente básico de Mozilla Firefox es software libre, y le agradecemos por sus significantes contribuciones a la comunidad, algunos archivos no-libres se distribuyen en el arbol de código de Firefox, y Firefox puede recomendar plugins no-libres. IceCat es totalmente Software Libre.

La nueva versión está basada en el nuevo código de Firefox 3. Diferente de otras versiones, las características adicionales de privacidad se movieron a una extensión aparte, gnuzilla_privacy.xpi.

Los links de descarga:

ftp://ftp.gnu.org/gnu/gnuzilla/3-g1/icecat-3-g1.tar.bz2
ftp://ftp.gnu.org/gnu/gnuzilla/3-g1/icecat-3-g1-i386.tar.bz2
ftp://ftp.gnu.org/gnu/gnuzilla/3-g1/gnuzilla_privacy.xpi

MD5 y SHA1:

0562ea71d246402e313415302ad70f

5e  gnuzilla_privacy.xpi
1b5d334d30c611a1b552232007feaf60  icecat-3-g1-i386.tar.bz2
fe05ced547c67063e40598574d97cdae  icecat-3-g1.tar.bz2

af54b373f90355900284277c32794858c6ccb662  gnuzilla_privacy.xpi
bb4e8fbb8e8a06af64d8080cb8d371e6413a6992  icecat-3-g1-i386.tar.bz2
e00807cd31bbdfa635fbd4fe21eb4bc4e8067d37  icecat-3-g1.tar.bz2

por fernando, el 25 de julio de 2008 a las 04:21

Marcelo Ramos

Elvis Greco-Romano

por xanthus, el 25 de julio de 2008 a las 01:43

Pablo Viojo

PHP last.fm wrapper for songs submission

Estoy implementando un proyecto para disponer online de mi colección de música y poder reproducirla desde cualquier parte y uno de los puntos que me quedaban pendientes era poder enviar las canciones reproducidas a last.fm. Después de investigar un poco estos días encontré que el protocolo no es tán complicado e implementé una clase PHP que [...]

por pviojo, el 25 de julio de 2008 a las 00:11

24 de julio de 2008

Marcos Crispino

Acceso offline a Google Docs

Hace unos meses Google anunció la posibilidad de acceder a Google Docs estando desconectado de la red.

Esta semana tuve la oportunidad de probarlo, y la verdad que me gustó.

En mi caso, en el trabajo estoy siempre conectado, pero en casa tengo un ADSL por tiempo, porque no lo uso tanto como para contratar el plan de tarifa plana.

Es en ese contexto que tiene sentido usar esta funcionalidad. Supongo que para gente que tiene mucho tiempo de viaje de ida y vuelta al trabajo, o que viaja mucho en avión, también le puede resultar útil.

Las planillas (Spreadsheet) se pueden ver estando desconectado, pero no se pueden editar. Además tienen otras limitaciones como que no se pueden ordenar las filas. La funcionalidad queda bastante reducida, pero igual es bueno poder consultar los datos.

Los documentos de texto (Docs) se pueden ver pero también se pueden editar. Cuando se empieza a editar un documento muestra un aviso que los cambios van a estar disponibles en el servidor la próxima vez que se sincronice. Del resto de la funcionalidad, lo que por ejemplo no tiene son las distintas versiones del documento.

En conclusión, aunque la funcionalidad que tiene estando desconectado es bastante más reducida que la que tiene estando online, creo que es usable y que puede servir en casos puntuales.

por noreply@blogger.com (Marcos Crispino), el 24 de julio de 2008 a las 23:35

Francisco Castro

jsnet - driver de joystick para red

Les presento en esta entrega el jsnet. El objetivo del jsnet es bien
simple: poder jugar a los juegos de super nintendo (en particular a la
International Superstar Soccer Deluxe, cartucho que tengo original),
usando el joystick original de super nintendo enchufado por puerto
paralelo, en mi laptop que no tiene puerto paralelo.
...

por 24 de julio de 2008 a las 23:01

Marcelo Ramos

Cómo usar el Django trunk justo antes de la inclusión del newforms-admin

Si tenemos una aplicación que utiliza funcionalidades de la versión trunk de Django pero no queremos migrar a newforms-admin podemos descargar la última revisión (7970) antes de la inclusión de newforms-admin y crear un lanzador del django-admin para poder seguir desarrollando.

svn -r 7970 co http://code.djangoproject.com/svn/django/trunk/
mv trunk ~/Programas/Django-svn-revision-7970



El script para lanzar el django-admin utilizando ésa revisión de Django:

#!/bin/bash
 
export PYTHONPATH=~/Programas/Django-svn-revision-7970:~/Desarrollo/Django/Proyectos
export DJANGO_SETTINGS_MODULE=MiProyecto.settings
export PATH=/usr/bin/python2.4:$PATH
~/Programas/Django-svn-revision-7970/django/bin/django-admin.py $@

De ése modo podemos tener aplicaciones usando Django 0.96, Django trunk sin newforms-admin y Django 1.0 alfa 1 conviviendo en el mismo entorno de desarrollo sin problemas.

por xanthus, el 24 de julio de 2008 a las 21:49

Fernando Briano

WP-Syntax 0.9 - Hack aceptado :D

A raíz de los posts:
Cómo mostrar código fuente en los comentarios[0]
{WP-Syntax Hackeado} Cómo mostrar código fuente en los comentarios[1]

Estuve trabajando y metiendo mano en WP-Syntax, un plugin para WordPress que permite mostrar coloreado de sintaxis en los posts.

Me enorgullece contarles que a partir de la recién lanzada versión 0.9, se incluyó mi “parche”, “hack” o como quieran llamarlo. Ahora el plugin también permite a los usuarios anónimos usar el plugin en los comentarios mediante los tags <pre>, y mostrar código coloreado.

Pueden descargarlo del sitio de plugins de WordPress:
http://wordpress.org/extend/plugins/wp-syntax/

Para ver ejemplos, pueden comentar en este blog y colocar su código entre los tags:
<pre lang="L"> código </pre>
Donde L es uno de los siguientes lenguajes:

abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp-qt, cpp, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml-brief, caml, oobas, oracle8, pascal, per, perl, php-brief, php, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80

== Release Notes ==

**0.9** : Added support for anonymous subscribers to use pre tags in their comments allowing for their own colored code snippets [Fernando Briano];

Fue todo una experiencia esto de modificar un plugin de WordPress, fue más complicado de lo que parece, aunque al final el código que agregué no fue tanto, pero aprendí mucho en el proceso. Próximos releases del plugin podrían incluir soporte para WP shortcodes.

Pueden seguir el avance, y algunas decisiones y porqué en los posts que menciono más arriba. ¡Úsenlo!

por fernando, el 24 de julio de 2008 a las 21:36

[Video] Jonathan Coulton - Code Monkey Unplugged

¿Se acuerdan de la canción “Code Monkey” de Jonathan Coulton? Ayer navegando por YouTube me encontré con este video de Jonathan Coulton interpretando Code Monkey en vivo. Un temón:

Hay varios videos más de Code Monkey, tanto interpretaciones de su autor, como videos bizarros y divertidos. Un posible cover para hacer con Los Farzantes

por fernando, el 24 de julio de 2008 a las 18:15

Enrique Almeida

Modularizando una Knowledge Base

En los días anteriores me tocó participar con Ruben, Alejandro y Gustavo en las instalación de un sistema en el exterior.
Cuando uno está con amigos en el exterior, las noches se convierten en ámbitos de discusión de temas variados. Iba a decir tertulia, pero no me gusta esa palabra.

Uno de los temas que discutimos, era la de como forzar el tener aplicaciones GeneXus, mas modularizadas. La idea era poder definir un conjunto de funcionalidades dentro de un módulo y que la funcionalidades de dicho modulo solo pueda ser accedido a ella a través de interfaces conocidas y dominadas.

A mi me gustaría contar con :

Una forma de agrupar objetos en módulos.
Por defecto, debería ser el nombre de la carpeta raíz. También se deben poder incluir las TABLAS como objetos del modulo.

Marcar APIS/Objetos publicos.
Poder indicar que algunos objetos pueden ser invocados desde fuera de mi modulo. Por ejemplo si tengo un modulo de desposito/stock, debo habilitar que la funcion que da el saldo de de un producto, como que es invocable desde fuera de dicho modulo.
Si quiero que una tabla pueda ser accedida por objetos externos al modulo, debo marcarla como publica.

Avisar cuando se violan las interfaces.
Hacer una consulta que permita identificar todos los objetos que invoquen a objetos fuera de su modulo, que no sean publicos.
Tambien deberian verse aquellos objetos que hacen for each/new/delete sobre tablas que no son de su modulo y que las tablas no sean publicas.
Si esta validación se pudiera hacer en el momento de la especificación estaría muy bueno. **

Diagrama de llamadas entre modulos.
Se pueden mostrar las llamadas entre los modulos, pintando de rojo las llamadas invalidas (o sea las llamadas a objetos no publicos desde afuera del modulo).

Estas funcionalidades podrían implementarse en una GeneXus Extension. Tengo ganas de hacerla pues no es muy compleja y puede ayudar bastante a mejorar nuestras aplicaciones.




** Alejandro también proponía que si alguien especificaba un objeto con un for each sobre una tabla que no estaba en el modelo le diera un choque eléctrico, pero no creo que sea una feature para la primera versión.

por Enrique Almeida (noreply@blogger.com), el 24 de julio de 2008 a las 13:57

Eugenio Garcia

A menos de 2 meses del XVIII Encuentro GeneXus

Falta poco menos de 2 meses para comenzar un nuevo Encuentro Internacional GeneXus, se nota en la interna (no sólo porque Carriquiry anda más acelerado que nunca :) ) de Artech. Este año tenemos mucho para mostrar de GeneXus X, con su nuevo IDE que permite llevar el concepto productividad a otro nivel. Con la posibilidad de modelar procesos de negocio dentro de la propia Base de Conocimiento y

por Eugenio (noreply@blogger.com), el 24 de julio de 2008 a las 10:59

Enrique Almeida

Migrando de GeneXus 9.0 a GeneXus X.

La idea de este post es comentar algunos de los problemas que he encontrado migrando desde Genexus 9.0 a GeneXus X. Tiene también algunos tips que pueden hacer mas fácil la vida (al menos la mia).



Los pasos que hice fueron:

1) Copiar el directorio de la KB para guardar en caso que pase algo.
Borrar de la KB el directorio de los modelos (los DATA00x). Esto es para asegurarme que no me queda ningun fuente viejo, ni ninguna dll, jar, etc de la versión anterior.

2) Entrar con GeneXus 9.0 a la KB y borrar todos los modelos que no se utilicen. Esto se hace con
File/Delete Model estando en diseño.
Conviene borrar el modelo de Backup (si existe) pues acelera la conversión.

3) Renombrar el domino Boolean si existiera y ponerle Boolean90.
En GeneXus X Boolean es un tipo de datos nativos y si existe un domino Boolean (como el que usa el Pattern WorkWith, se arma lio).

4) Borrar todos los objetos que no se utilicen y los que sean WIN.
Este paso no es indispensable, pero es muy saludable. Puede ahorrar muchos dolores de cabeza.

5) Salir de GeneXus 9.0 y compactar la KB y correr un rebuild. Tampoco es indispensable, pero sirve para ver si no hay algo mal en la KB original.

6) Abrir la KB con GeneXus X y realizar la conversión.
Si por algún motivo cancela, hay que reportarlo a Artech. En las ultimas que he hecho ha funcionado sin problemas.

7) Revisar el conversion.txt siguiendo el link "Open conversion log" en la pantalla que indica que termina la conversión.
Aunque diga Succes, hay veces que hay varios errores en la misma que conviene mirar:
* Error al convertir webservices (no se porque no los muestra como errores) en mi caso
Importing WebService from C:\Models\100\MTX1\kbdata\usrtypes\localhost_MTNet_amtwsfilsolMTWSFilSol.xml ...
>>>ERROR: Failed
>>>ERROR: Object reference not set to an instance of an object.
Successful
Importing WebService from C:\Models\100\MTX1\kbdata\usrtypes\localhost_MTNet_amtwssolxmlMTWSSolXML.xml ...
>>>ERROR: Failed
>>>ERROR: Object reference not set to an instance of an object.
pero muestra todo como Succesful. Se puede arreglar mas adelante, pero conviene conocerlo.

* HTML mal formado
Tambien hay que mirar a las correcciones que haga a programas que tengan html mal formado, para revisar y ver como quedaron las pantallas.
Converting WebPanel HDHorTaP...
>>>WARNING: Webform modified to be XHTML well-formed

* Deprecated functions.
Hay que ver si se tienen algunas funciones que eran validas en 9.0 y que ahora no se pueden usar mas.
En mi caso tenia UDF (que las sustitui con UDP)
Allownulls (hay que cambiar declarando en los atributos que puedan ser nulos)
Hidden (Si es de una Grilla Freestyle , hay que cambiar el codigo y poner columna.visible=0 y si es una grilla normal, hay que poner la columna como oculta)
>>>WARNING: 'allownulls' is a deprecated function. (Rules, Line: 12, Char: 1)
>>>WARNING: 'nocheck' is a deprecated function. (Rules, Line: 14, Char: 1)

8) Borrar los lenguajes que no se usan. Es bueno desmarcar el Chino, Japones, etc si no se van a usar.

9) Revisar las propiedades de MasterPage y Default Theme y ponerle las correctas (no se bien porque no se migran correctamente)

10) Instalar el KBDoctor y correr las consultas:
a) Objetos no alcanzables. Revisar los objetos que estan en la Categoria KBDoctor.Unreachables y borrar todos los objetos que no se utilicen, incluyendo atributos. NO BORRAR TRANSACCIONES hasta no estar seguro. Puede ser que el objeto transaccion no se use, pero si se use la tabla que esta genera.
Si hay transacciones que no se ejecutan, pero si se necesitan para la creacion de tablas, marcar la propiedad de dichos objetos, para que no las genere.

Antes del KBDoctor

Despues del KBDoctor

En una KB chica que use para la migracion , pase de 730 objetos a 634, por lo que baje mas de un 15% la cantidad de objetos a especificar y un poquito mas los que tengo que generar. Esto seguramente va a hacer mas rapido el ciclo de desarrollo.
b) Atributos sin tabla base. Revisar donde estan siendo referenciados estos atributos y quitar dichas referencias, si es necesario, crear nuevos dominos y despues borrar dichos atributos.
c) Objetos con variables no usadas. Borrar todas las variables que no se utilcen en los programas.

10) Hacer un build all y arreglar todos los errores que aparezcan (esta es la parte divertida, pero no hay receta que valga para arreglarlos. La mayoría de los problemas que tuve fueron con SDT que pasan a ser dominios en la conversión.

11) Revisar todos los warnings que aparezcan.
En GeneXus X se hacen unas cuantas validaciones nuevas (generalmente necesarias) y por lo tanto se pueden tener mas warnings que en la versión anterior. Conviene mirarlos en detalle.
Puede ser conveniente deshabilitar los warning spc0038 (no existe índice por esos atributos) y el de "Commit on Exit" por un rato hasta tener solucionados todos los problemas. Esto se hace en la propiedad del generador, que se llama Disabled Warnings.

12) Compilar todo, hasta que quede todo pipi-cucu.
Se puede tener problemas con programas externos, dll del usuario, flag del compilador, y un conjunto de etceteras grandes.

13) Empezar a programar en GeneXus X.
Usen muchos DataSelectors, Data Providers, user controls y demas que estan muy buenos....

14) Correr otras consultas del KBdoctor para poder arreglar otros errores.

15) Disfrutar la vida.

UPDATE: Conviene mirar la pagina del Wiki que explica el proceso de conversion que tiene información mas completa y detallada de la migración.

por Enrique Almeida (noreply@blogger.com), el 24 de julio de 2008 a las 10:51

Fernando Briano

{WP-Syntax Hackeado} Cómo mostrar código fuente en los comentarios[1]

Bueno, ¡ahora sí! Después de unos cuantos comentarios y horas de workarounds, pude hacer funcionar el plugin WP-Syntax para los comentarios. Ante todo muchas gracias a todos los que comentaron en el post anterior, renombrado y actualizado: Como mostrar código fuente en los comentarios[0]

void main(){
printf("Gracias por la paciencia que tuvieron, y las pruebas varias
que hicieron. Si no fuera por los que intentaron dejar código en los
comentarios, nunca me hubiera dado cuenta que andaba mal. Los
invito a volver a comentar con código en este post.");
}
ACTUALIZACIÓN: Este post, así como el anterior sirvieron de “Sandbox” para probar el plugin. Ya tuvo varias idas y venidas. Al final, después de tantas vueltas volvimos al tag <pre>.
¿Porqué? Simple, primero porque el escape de caracteres es mejor. jk me hizo notar en esta entrada que con <code> WordPress transformaba “&” y “->” en “& amp;” y “& gt;” respectivamente. La otra razón, por la cual se había elegido pre desde un principio, es que si se desactiva el plugin, el código mantiene la indentación (aunque no los colores).
Se perdió prácticamente todo el formato de los comentarios, voy a ver si lo arreglo. Espero que no se me enojen por todos los comentarios que dejaron :P.Aparentemente está cerca la versión 0.9 de WP-Syntax, ya tendré más información.

Dejo el post como historial de lo que había hecho…

Ahora paso a contar más o menos las cosas que fui haciendo, probando, y aprendiendo, hasta que logré una solución “linda” y prolija.

El problema: Solamente el usuario admin del blog tenía permitido usar los tags <pre> en los comentarios. ¿Qué hacer al respecto? Mmmh… En verdad no sé en qué orden fui haciendo las cosas, pero hice de todo.

Como estoy desarrollando mi propio plugin para Wordpress (muy lentamente y sin stress en algún rato libre), ya tenía una idea del tema de los “hooks” con filtros y acciones. Resumidamente, esto son acciones y funciones de Wordpress que podemos reemplazar con las nuestras dentro de un plugin. De esta forma, cambiamos algo del comportamiento de Wordpress sin cambiar el “núcleo”, cosa que el cambio se mantenga en una actualización del CMS (y mantener la modularidad).

Así que se me ocurrió que una idea bastante obvia era sobreescribir la función que filtrara los pre de los comentarios, para que permitiera usarlos. Buscando por ahí, me encontré con el archivo kses.php dentro del directorio wp-includes. Este archivo es uno de los responsables de permitir o no ciertos tags y demás, aparte de devolver el valor de la función “allowed_tags();”  que comenté acá:

Ups!
Mis disculpas, creo que ya se de donde viene el problema. Si se fijan a la derecha de la caja de texto donde se escriben los comentarios, muestra las tags permitidas para comentar. Esto no está escrito a mano, sino que llama a una función en PHP allowed_tags().

Lo que tengo que hacer, es buscar la forma de permitirles a los usuarios usar el tag pre…
¡Perdón por el amague!
¡Ya me pongo a solucionar eso!

Lo que no encaré en el momento, fue que ahí estaba el array con todos los tags permitidos, tanto para postear como para comentar. Esto fue lo que me dí cuenta bien al final, pero cuando ya había probado todo lo que se les ocurra. No documento absolutamente todo acá por varias razones. Primero porque no me acuerdo todo lo que hice, segundo porque quedaría muy largo, y tercero, porque mas vale poner lo que aprendí nomás :P

Siguiendo con el tema, estuve por #wordpress en irc.freenode.net, donde me recomendaron que hackeara el plugin para usar el tag <code> en vez de <pre>, ya que es más indicado para código. Ahora, el tag pre tiene la característica que mantiene los espacios, por lo que respeta la indentación. Para aplicar esto a <code> también, simplemente tuve que agregar el siguiente código al css del plugin:

code {white-space: nowrap;}

Eso y un poco de mano en el plugin, y ya tenía el tag pre reemplazado por el tag code. Agradezco mucho la ayuda de StoneCypher, quien me tiró pistas y recomendaciones para llegar al resultado final.

Sin embargo, seguía igual. Si bien el archivo kses.php permite que los usuarios posteen con <code>, no contemplaba <code lang=”">. Para eso, tuve que agregar lang al array que define los tags y sub tags permitidos en dicho archivo (ver el código). Pero esto no era una solución “linda”, debía incluirlo en el código del plugin. Además, fue una de las últimas cosas en las que me dí cuenta. Al final quedó con el tag <pre>…

Aprovecho para comentar, hablando de soluciones “lindas”, que en algún momento comenté de dicho archivo la línea que filtraba el contenido de los comentarios, y si bien anduvo, dejaba totalmente vulnerable al blog. Esto es un buen ejemplo de LO QUE NO HAY QUE HACER. Sobre todo cuando no conocemos bien las repercusiones…

Bueno, leyendo bien ese bendito kses.php, se me prendió la lamparita al leer: Can be override by using CUSTOM_TAGS constant. Listo, ahí picó la solución, agregar code y lang a ese valor desde el plugin. ¡Así terminó andando!

Ya entré en contacto con Ryan McGeary, el desarrollador de WP-Syntax, y hablando de todo este tema me comentó lo siguiente:

Wordpress tiene muchas restricciones innecesarias e inevitables en su publicación de contenidos. WP intenta hacer lo “correcto” y prevenir a los que comentan de agregar formatos especiales y es complicado el workaround.

Además, tenía pensado actualizar un poco el plugin cuando tuviera tiempo. Ya le envié un mail con los cambios que le hice. El plugin está publicado bajo GPL, pero quiero saber si quiere incluir los cambios en su plugin, o si hago un fork para publicarlos. Así que en unos días estará disponible o bien una nueva version de WP-Syntax, o un nuevo fork :D, obviamente el código disponible también.

Me está pasando lo mismo con WordPress que me pasó en algún momento con GNU/Linux. Por momentos me frustro porque no puedo lograr lo que quiero que haga, pero al final me doy cuenta que la culpa no es de WordPress, sino mía por no conocer la API lo suficiente… ¡WordPress FTW! No es lo mismo una vez que se empieza a meter mano en el código.

por fernando, el 24 de julio de 2008 a las 05:51

Pablo Viojo

Se necesita Cardiólogo en Santiago

Una amiga necesita un Cardiologo excelente, por lo que si alguien conoce algún dato no dude en comentar aqui o en NECESITO AL MEJOR CARDIOLOGO en Needish. Desde ya muchas gracias!

por pviojo, el 24 de julio de 2008 a las 04:57

23 de julio de 2008

Fernando Briano

Cómo mostrar código fuente en los comentarios[0]

void postear(){
     printf("

Lectores, comentadores, visitantes en general: ¡Pueden escribir código en los comentarios!
Los que visitan seguido el blog habrán notado un nuevo recuadro al lado de la caja de comentarios. Esta indica cómo escribir código sin que el querido WordPress transforme sus signos de < y > y su indentación en papas fritas.

En varios posts hemos tenido el problema de querer mostrar código fuente, y no lograr los resultados que esperábamos. Destaco los posts sobre sintaxis, y más recientemente el post de AWK, o el de Wordpress y caption, donde pasó lo mismo (malditos <>).

Como estoy usando el plugin WP-Syntax para mostrar código fuente, pueden hacer uso de él a la hora de comentar. Su código respetará la indentación, y se mostrará coloreado acorde al lenguaje que usen. En el recuadro del cual les hablaba pueden encontrar la forma de uso (no me hagan repetir :P ).

Los lenguajes reconocidos hasta el momento se listan a continuación. A su vez, son los nombres que hay que poner para comentar en el tag “pre”: <pre lang=”L“>código</pre> donde L es uno de los siguientes:

abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp-qt, cpp, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml-brief, caml, oobas, oracle8, pascal, per, perl, php-brief, php, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80

Espero que les guste, y cualquier sugerencia, crítica u opinión, me la hacen llegar. Gracias por leer!

");
}

por fernando, el 23 de julio de 2008 a las 15:42

Enrique Almeida

Módulo de Exportaciones en Aduana de Costa Rica


Hoy es el tercer día desde que entró en producción del módulo de exportaciones en la Aduana de Costa Rica. Todo ha funcionado sin problemas a menos de algunos ajustes de parametrización muy menores. Todavía falta que se incorporen los puertos mas grandes, que es donde salen mas movimientos, pero creo que haber emepzar sin ningun tropezón, es todo un logro...

La viceministra no tenía mucha fe, pero todo salió muy bien..

por Enrique Almeida (noreply@blogger.com), el 23 de julio de 2008 a las 15:05

Sebastian Dopico

Televisión Digital Interactiva en Uruguay

El proyecto de adoptar TV Digital interactiva en Uruguay va tomando fuerza.

El próximo 30 de Julio a las 13:00 hs se realizara el seminario "TV Digital Interactiva: Transferencia de Conocimiento e implantación del iLab". Este seminario es organizado por la ANII, y será realizado en el auditorio del LATU.

Se presentará el Plan de Transferencia del Conocimiento, alcance y servicios de iLab, y también una demostración sobre el funcionamiento del laboratorio por parte de la Universidad Politécnica de Madrid (UPM).

Para asistir al evento deben contactarse con tvdigital@anii.org.uy o al teléfono (02) 916 69 16

Fuente: [CUTI: Uruguay a un paso de tener instalado su Laboratorio Tecnológico de TV Digital Interactiva]

por Sebastián Dopico (noreply@blogger.com), el 23 de julio de 2008 a las 14:34

Alejandro Segovia

Oscureciendo Fedora

Si al igual que a mi les sucede de trabajar con la computadora largas jornadas de 8 o más horas, quizás los siguientes tips les puedan ser de utilidad. Desde hacía un tiempo estaba notando que mi Fedora me estaba dejando con un fuerte cansancio en la vista, que por lo general terminaba derivando en dolores de cabeza, contracturas o aire.

Pensando por qué esto no me pasaba al utilizar otras computadoras (incluso si se trataba de monitores CRT) noté que el escritorio de Fedora 8 es por defecto muy brillante. Hay muchos colores claros y blancos fuertes que tras varias horas de trabajo desgastan demasiado la vista. Cuando bajar el brillo del monitor no es una opción, los siguientes ajustes pueden ayudar a disminuir el esfuerzo de la vista sobre un GNOME (en inglés).

Oscurecer los Paneles

Fedora 8 introdujo el tema visual “Nodoka” cuyos paneles son muy brillantes (casi tendiendo a blanco). Para bajar el brillo nos dirigimos a System -> Preferences -> Look and Feel -> Appearance. Ubicamos el tema Nodoka y seleccionamos Customize.

En la solapa “Colors” pinchamos sobre el color de fondo de las ventanas (windows) y lo bajamos a gusto. En mi caso sustraje 30 de cada uno de los componentes RGB, de forma de mantener la proporción entre los canales, pero haciendo el escritorio más oscuro (acercándolo al gris).

Adicionalmente podemos bajar el color de los campos de texto (input boxes), cuyo color es un blanco al máximo (255, 255, 255). Sustraer 20 de cada canal fue suficiente en mi caso, dejando (235, 235, 235).

Los cambios se aplican directamente, no es necesario cerrar la sesión.

Oscurecer Firefox

Firefox es una aplicación que hay que oscurecer casi obligatoriamente. El color de fondo para las páginas que trae por defecto es un blanco al máximo (#FFFFFF en la notación que utiliza Firefox). Para bajar la intensidad debemos ir a las opciones de configuración secretas de Firefox, ingresando en la barra de direcciones “about:config”, sin comillas.

En la página de configuración filtramos por la palabra “background” y buscamos browser.display.background. Aquí podemos editar este valor a algo menor, por ejemplo “#CCCCCC”, que es un blanco mucho más leve, tendiendo al gris.

Quizás tengamos que reiniciar Firefox para que los cambios tomen efecto. Fedora 8 trae Firefox 2, esto quizás sea distinto en Firefox 3.

Oscurecer el Editor de Texto

Finalmente, quienes utilizan GEdit para programar pueden cambiar el esquema de colores a algo más oscuro. En GEdit, nos dirigimos al panel de preferencias: Edit -> Preferences y en la solapa “Fonts & Colors” seleccionamos el tema “Oblivion”, el cual configura un fondo gris oscuro con texto blanco.

Esto son solo un par de ejemplos de cosas que se pueden hacer para hacer más tolerable el estar tantas horas frente a una computadora con Fedora. ¿Tienen otros tips? Nos encantaría conocerlos! Dejen sus comentarios abajo!!

por Varrojo, el 23 de julio de 2008 a las 12:56

Fernando Briano

[Noticias Debian] ¡Se acerca Debian Lenny!

Debian Lenny 5.0

Debian Powered

De forma bastante original, y con poco tiempo, se anunció en la lista de desarrollo de debian el congelamiento de Debian Lenny para la próxima semana:

                    ______________________
                   < We freeze next week! >
                    ----------------------
                            \   ^__^
                             \  (oo)\_______
                                (__)\       )\/\
                                    ||----w |
                                    ||     ||

A partir de la semana próxima, habrá un congelamiento, en el hecho que no se pasarán más paquetes desde Sid (unstable) a Lenny (testing), para concentrarse en resolver los bugs. Todo esto, ¡esperando a Debian Lenny 5.0 para setiembre de 2008!

Si bien históricamente han habido atrasos, hay que tener confianza en los desarrolladores. Para los usuarios de Debian en general, no implica más que la celebración de una nueva versión, porque la mayoría ya usan Lenny o Sid como repositorios principales.

Algo realmente admirable de los desarrolladores de Debian son sus BSP - Bug Squashing Parties (fiestas de “reventar”[¿?] bugs). Se trata de reuniones donde se dedican exclusivamente a corregir bugs. Al haber 360 bugs de más que afectan a Lenny, se están organizando maratones de BSP’s.

Versionado de lanzamientos

También en la lista de desarrollo, hubo una propuesta para cambiar la forma en que Debian versiona sus lanzamientos. Martin Krafft propone aumentar el primer número con cada lanzamiento “punto” / r release, y el segundo con cada re lanzamiento que incluya paquetes arreglados, mientras que lanzamientos nuevos de la rama estable con nuevas características (se viene Etch y medio), deberían tener un 5 como segundo número para mostrar la “media actualización”.

Lars Wirzenius recordó que Debian introdujo el esquema actual de versionado porque los vendedores de CD temían que las cajas viejas quedaran en los estantes tras un re lanzamiento. (Sus discos X.Y se verían desactualizados si salía la versión X.Y+1, aunque se pudieran actualizar perfectamente por la red).Otros prefirieron un esquema de versionado clásico con dos puntos, donde el primer número fuera aumentando con cada lanzamiento grande, el tercero con lanzamientos de bugs corregidos y el segundo con lanzamientos que agregara nuevas características.

Martin Kraff está llevando a cabo una encuesta en
http://doodle.ch/participation.html?pollId=8zauai3nqges2ur8
Donde por el momento viene ganando “a favor, así que existe una posibilidad de que el versionado cambie a partir de Lenny.

         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...

por fernando, el 23 de julio de 2008 a las 06:30

El regreso de Los Farzantes

Cadáveres de Cerveza

Cadáveres de Cerveza

En el día de ayer, Lunes 21 de Julio de 2008, se dio un evento histórico… Volvieron a reunirse los Farzantes! ¿Qué es “Los Farzantes”? Un trío de amigos músicos (no, en serio, resalto las comillas) que se juntaban a hacer sonar sus instrumentos intentando seguir una línea en común.

El 31 de diciembre de 2005, me junté con Leo Farzante y Maxi Farzante, y formamos este proyecto que se venía anunciando y gestando desde hacía tiempo. Lo llamamos Farzantes, ya que el adjetivo se ajusta muy bien a nuestras personalidades, y decimos que tocamos “Drunk Rock” (nunca faltaba el alcohol en los ensayos).

Nuestra primer y única presentación en vivo fue en el cumpleaños de Maxi, bajista y vocalista, el 20 de febrero de 2006. Ya entrado el 2006, las ocupaciones y responsabilidades nos llevaron a dejar de lado el proyecto.

Ayer lunes, después de comentarlo un poco y coordinar un día, volvimos a tocar juntos. Nos juntamos en la sala de ensayo/estudio de Maxi Squat, quien además me prestó su guitarra. Repasamos los 5 temas propios que solíamos hacer, mas unos cuantos covers.

Leo Farzante en la batería, estaba bastante oxidado. No tocaba la batería desde nuestro último ensayo (actualmente toca el bajo en No Me Importa). Yo igual, las 3 horas que estuvimos “chiveando” me dejaron ardiendo las yemas de los dedos…  (además que no me acordaba la mitad de los temas). El que andaba mejor era Maxi Farzante, quien además se llevó todos los temas y los plagió con Electroshock :D
Como invitado, tocó con nosotros Chiki Electroshock.

Dejo algunas fotos de lo que fue “el regreso”:

Leo Farzante

Leo Farzante

Yo Farzante

Yo Farzante

Maxi Farzante

Maxi Farzante

Chiki Electroshock

Chiki Electroshock

por fernando, el 23 de julio de 2008 a las 01:53

22 de julio de 2008

Fernando Briano

AWK: Pasar texto a minúsculas/mayúsculas

Lo bueno de aprender AWK es que al tenerlo fresco, se convierte en una herramienta de uso diario en el shell. Últimamente lo uso mucho, por ejemplo hoy, lo usé en el siguiente caso que les voy a plantear. Necesitaba pasar un texto a minúsculas, que era algo que no sabía cómo hacer, hasta que lo necesité. En verdad tenía un archivo de texto (items.txt) lleno de datos con el siguiente formato:

* TITULO DEL ITEM - Descripción del ítem.

Lo que necesitaba era obtener una lista así:
titulo del item 1, titulo del item 2, ... , titulo del item n.
Y obviamente, lo primero que se me ocurrió fue usar AWK.

<conceptosAWK>
AWK es un lenguaje de programación interpretado orientado a datos. Recibe texto como entrada, y trabaja con eso. Ejecuta una acción por cada línea de texto, y a su vez, cada dato “separado” en esa linea de texto es un registro al que se accede con $1, $2, … , $n.
El separador de registros es importante. Por defecto toma el espacio como separador.
</conceptosAWK>

En este archivo en particular, opté empezar por separar el título de su descripción. Primero proceso el archivo para eliminar lo que hay después del guión. Para eso especifico que el separador de campo sea el guión “-”:

awk 'BEGIN{FS="-"}{print $1}' items.txt > resultado.txt

Lo que estoy haciendo acá, es especificando que separe los registros por “-”. Entonces $1 va a ser “* TITULO DEL ITEM” y $2 va a ser “Descripción del ítem.“. Le paso como parámetro items.txt, y voy guardando el resultado en resultado.txt. (Redirijo la salida del awk con “>” a un archivo de texto resultado.txt).

El archivo resultado.txt me queda con el formato: “* TITULO DEL ITEM” para cada ítem. Ahora lo paso a minúsculas, y de paso saco el asterisco que no lo necesito:

awk 'BEGIN{FS="*"}{print tolower($2", ")}' $2

Me quedó algo así:
titulo del item 1 , titulo del item 2 , … , titulo del item n ,
Ahora, lo que tengo que hacer sacar el espacio antes de las comas, para eso puedo usar SED:

sed s/\ ,/,/

Reemplazo los ” ,” con “,” y listo. El archivo quedó:
titulo del item 1 , titulo del item 2 , … , titulo del item n ,

Me hice un script, que recibe como parámetros dos archivos. El primer parámetro $1, es el archivo que hay que editar, y el segundo parámetro $2 va a ser el resultado:

#!/bin/bash
awk 'BEGIN{FS="-"}{print $1}' $1 > $2
echo `awk 'BEGIN{FS="*"}{print tolower($2", ")}' $2` > $2
echo `sed s/\ ,/,/ $2` > $2

Lo novedoso, por lo menos para mí, fue el uso de la función “tolower” en AWK. Así que para pasar un texto a minúsculas o a mayúsculas de forma bien sencilla, simplemente hay que usar esta función. Idem para pasar a mayúsculas: toupper. Los scripts quedarían algo así:

Para pasar todo el texto a minúsculas:

tolower.sh
#!/bin/bash
echo $@ | awk '{print tolower($0)}'
#Este script pasa a minúsculas todos los parámetros que reciba.

Para pasar todo el texto a mayúsculas:

toupper.sh
#!/bin/bash
echo $@ | awk '{print toupper($0)}'
#Este script pasa a mayúsculas todos los parámetros que reciba.

O directamente, si se acuerdan cómo usar AWK, lo más rápido es hacerlo derecho desde consola.

Y tá, eso es lo que estuve haciendo en un rato. Como estuvo divertido, lo documenté por acá :P
En una de esas a alguien le sirve.

por fernando, el 22 de julio de 2008 a las 22:35

Enrique Almeida

Porque es dificil hacer proyectos colaborativos con Genexus?

Los que hemos intentado hacer proyectos con Genexus, trabajando con gente desde diferentes lugares, colaborando a traves de Internet, nos hemos encontrado con algunos problemas que a veces no son faciles de resolver.

Para ver la dificultades de trabajo en grupo con GeneXus y compararlo contra otras forma de trabajo es bueno ver algunos ejemplos:

El KBDoctor, por ejemplo se desarrollo utilizando Assembla entre tres personas y Visual Studio para programar. Cada día (en realidad, cada noche) publicábamos los cambios que programábamos en el repositorio y cada uno podía ver la ultima version y los cambios que había realizado los otros integrantes del grupo. El proyecto tiene la granularidad a nivel de archivo, por lo que es fácil subir solamente los archivos en los que trabaje. Si hay conflictos entre lo cambiado por dos integrantes hay que resolverlos.

Con GeneXus, en cambio la forma "oficial" de compartir es GXOpen, que permite subir XPZ (o sea conjunto de varios fuentes) y hay una sola version activa por cada proyecto.

Por ejemplo, baje el proyecto de GXWiki RC4, que tiene los fuentes del GxWiki. Encontré algunas mejoras que se podían hacer a la documentación de instalación, que servirían para que otros no tengan que perder tiempo en su instalación. Yo hice las modificaciones en mi KB.

Ahora, como subo esos cambios a GXOpen?. Tiene sentido que yo publique una nueva versión completa, cuando solo cambié algunos objetos?.

Estaria bueno poder hacer un repositorio donde yo pueda mandar los objetos que modifiqué y que los consolide, indique se hay conflictos. También debería poder sincronizar mi proyecto con el subido en GXopen, trayéndome solo los objetos que tienen diferencias.

Con GeneXus X, es mucho mas factible la realización de esto. Estoy a la espera que salga el tan esperado (por mi) Change Replicator para poder evaluarlo. No se sabe que funcionalidades tendrá, pero seguramente ayude a las tareas del desarrollo en grupos distribuidos.

Cuales serian mis requerimientos para una repositorio de proyectos?
* Poder sincronizar una KB local con un repositorio central
* Poder subir los cambios realizados desde la ultima vez que me sincronice.
* Poder bajar ver los cambios realizados por otros usuarios.
* Poder ver el resultado de la especificación/generación/compilación/ejecución de pruebas del repositorio.
* Poder volver mi KB a un estado anterior conocido (por ejemplo 2 dias atras).
* RSS con los cambios de otros.
* RSS con los resultados de los builds permanentes.
* Una interfaz web, para poder administrar proyectos, darle permisos a usuarios, poder subir documentacion y ese tipo de sutilezas.
* Poder registrar incidentes/problemas/nuevas features y poder asignarselas a personas del proyecto.

Si tenemos esto (que me animo a decir que es muy implementable) se nos facilitaría bastante el desarrollo en grupos mas numerosos.

UPDATE: No está muy relacionado pero me gustó el articulo que esta en http://www.ddj.com/hpc-high-performance-computing/208802468 que habla de desarroyo de aplicaciones en ambientes distribuidos.

por Enrique Almeida (noreply@blogger.com), el 22 de julio de 2008 a las 21:35

Fernando Briano

Git: Sistema de control de versiones distribuido

Git LogoAyer, por primera vez, tuve que usar Git, el sistema de control de versiones distribuido. Como he mencionado varias veces, el único sistema de control de versiones que he usado hasta ahora ha sido Subversion. Aunque en el blog ya he comentado también sobre Bazaar, todavía no he tenido oportunidad de probarlo. Teniendo una idea (muy vaga por cierto) de qué es Git, y cómo funciona, me resultó bastante fácil comprenderlo. Lo fuí usando/aprendiendo a la carrera, la mejor forma de aprender…

¿Qué es Git?

Git es un sistema de control de versiones diseñado para manejar proyectos muy grandes con velocidad y eficiencia, pero igual de apropiado para repositorios pequeños; es especialmente popular con la comunidad open source, sirviendo como plataforma de desarrollo para proyectos como el Kernel Linux, Ruby on Rails, WINE o X.org.

Git cae en la categoría de herramientas de manejo de código fuente distribuído, similar por ejemplo a Mercurial o Bazaar. Cada directorio de trabajo de Git es un repositorio completo con historial y capacidades totales de tracking de revisiones, independiente de acceso de red o un servidor central. Aún así, Git es extremadamente rápido y eficiente con el espacio.

Git es un proyecto Open Source cubierto por la GNU General Public License v2. Originalmente escrito por Linus Torvalds y mantenido por Junio C Hamano.

Git Cheat Sheet

Git Cheat Sheet

Instalarlo no tiene muchas complicaciones. En mi caso con Debian:
apt-get install git-core
Y ya tengo las herramientas para obtener código fuente y subirlo.

Hay una CheatSheet (hoja de referencia, chuleta, trensito) de Git en su wiki, que me resultó extremadamente útil a la hora de obtener el código fuente de un proyecto.

En su sitio web pueden encontrar los “Crash Courses“, algo así como cursos para comenzar a usar Git rápidamente. Estos son:

En mi caso, aprendí todo lo que sé de control de versiones con Version Control with Subversion por lo que Git for SVN users debe ser un buen lugar para empezar.

Además de empezar a familiarizarme con Git, conocí github, un sitio para hostear código fuente con Git. Inscribirse toma unos segundos, y ya podemos empezar a usarlo, y recorrer otros repos.

por fernando, el 22 de julio de 2008 a las 19:13

Pablo Viojo

Eres un Web Rockstar?

Web 2.0 Rockstars es un concurso de desarrollo de tecnologías para programadores, diseñadores y profesionales o aficionados a las tecnologías de la información de habla hispana. El concurso se llevará a cabo cada seis meses y tiene como fin ser una vitrina para los talentos tecnológicos de Hispanoamérica y animar a los más jóvenes a dedicarse [...]

por pviojo, el 22 de julio de 2008 a las 17:03

Enrique Place

"Innovación = fuck" por Linus Torvalds


"Pienso que “innovación es un la palabra de cuatro letras [Nota: por fuck] en la industria. Nunca debe ser usada en una compañía respetuosa. Se convirtió en una objeto de RRPP para vender nuevas versiones. [...] Edison dijo “1% de inspiración, 99% de transpiración”. Pudo haber sido cierto un siglo atrás. Actualmente es “0.01% inspiración, 99.99% transpiración”, y la inspiración es la parte fácil. Como gestor de proyectos nuca tuve problemas para encontrar gente con ideas locas. Tengo problemas para encontrar gente que puedan ejecutarlas [...] Así que no creo que se necesite más innovación."Linus Torvalds


Una gran verdad, siempre con su humor e ironía por demás ácida. ;-)

Visto en el blog de Ricardo Galli

por enrique_place (noreply@blogger.com), el 22 de julio de 2008 a las 14:29

Gabriel Claramunt

Scala: fold/reduce cheatsheet

My fold/reduce 'cheat sheet' is something like:

For the list (a,b,c,d) fold/reduce is:

reduceLeft(f) => f(f(f(a,b),c),d)

foldLeft(Z)(f) => f(f(f(f(Z,a),b),c),d)

("applies the function from the left")


reduceRight(f) => f(a,f(b,f(c,d)))

foldRight(Z)(f) => f(a,f(b,f(c,f(d,Z))))

("
applies the function from the right")

por noreply@blogger.com (Gabriel C.), el 22 de julio de 2008 a las 00:23

21 de julio de 2008

Enrique Almeida

Y esos raros equipos nuevos...

La Aduana de Costa Rica tiene nuevo equipamiento. Todavia no está en producción pues tiene que ser homologado por HP para soporte y los equipos de aire acondicionado aun no están calibrados. Desde cuando se necesita "calibrar" los aires acondicionados????

Realmente son equipos que asombran por el tamaño, el ruido y la corriente de aire que producen. Tan fuerte es el viento que logró despeinarme :)

Son muchos servidores y muchos Teras de disco...



mucho backup...enfriadores y aire acondicionado
y todo junto.. en realidad hay dos filas enfrentadas bastante largas, con piso elevado y la fibra por arriba, equipo antifuego, etc, etc.

La verdad es que es un lujo.

En fin, el sistema se puede seguir cayendo, pero ahora lo va a hacer mucho mas rápido.

por Enrique Almeida (noreply@blogger.com), el 21 de julio de 2008 a las 23:48

Fernando Briano

Arora Web Browser - navegador basado en WebKit

Hace unos meses probé el navegador web Arora, cuando se anunció la salida del proyecto. Probé la versión 0.1, en Windows y Debian. Ahora estoy usando la versión 0.2 en Debian. Lo primero que me llamó la atención fue que estuviera hecho con las bibliotecas Qt y WebKit. Realmente no me gusta mucho la apariencia de GTK, o por lo menos prefiero Qt. En ambos casos, se adaptó perfectamente a la apariencia nativa de cada sistema.

Historia y desarrollo:

La descripción de su sitio web en Google Code dice más o menos así:

Arora Web BrowserArora es un navegador web simple y multi plataforma. Actualmente Arora es un navegador muy básico cuyas características incluyen “Historial” y “Bookmarks”. No tiene soporte para plugins de Netscape, así que no hay soporte para flash hasta Qt 4.5. Pero es pequeño, menos de 10.000 líneas de código, muy rápido, liviano, y divertido de hackear. Arora y QtWebKit están desarrollados para ser multi plataforma usando la biblioteca Qt. Originalmente se creó como demo para Qt para ayudar a testear el componente QtWebKit y encontrar problemas y bugs del API antes del lanzamiento. Se puede encontrar una versión más vieja todavía en el código fuente de Qt en el directorio demo/browser. Arora funciona en Linux, OS X, Windows y Linux embebido usando Qt Embedded.

Su desarrollador es Benjamin C Meyer (a.k.a. “icefox”), desarrollador de Trolltech, quien tras programar el demo, hizo el fork y lo nombró “Arora”. La meta principal del proyecto es enfocarse en crear un navegador open source sobre webkit, capaz de ser usado como navegador diario, con las características típicas: Historial, bookmarks, pestañas, y extensiones.

Hasta el momento, han logrado 3 de las 4 metas iniciales. Tiene pestañas, historial y favoritos. Parte de la idea también es que se mantenga totalmente abierto, rápido y estable, multi-plataforma y mantener un código fácil de entender.

Señalan como “lo que no quieren lograr“: volverse un navegador de KDE o Windows. O sea, pretenden mantener el navegador libre de plataforma, y en caso de integrar características específicas para algún entorno en particular, hacerlo a través de extensiones. Además, esperan “nunca volverse otro Mozilla”, implementando todas las características como extensiones por fuera del navegador.

QtWebKit

WebKit es un framework open source con los cimientos para crear un navegador web. Originalmente se derivó de la biblioteca KHTML de Konqueror por Apple para su navegador Safari, y ahora está siendo desarrollado por Apple, Nokia (quien compró Trolltech, la empresa responsable de Qt), Google y otros. Pasa el Acid2 test y desde Marzo de 2008 pasa con 100/100 el Acid3 test (¡estándard!).

QtWebKit está basado en WebKit, provee un motor para navegador web que facilita embeder contenido de la World Wide Web en aplicaciones Qt. Al mismo tiempo, el contenido de la web puede ser mejorado con controles nativos.

Instalar Arora

Si usan Debian Lenny/Sid o ArchLinux, pueden encontrar Arora en los repositorios. Así que con apt-get o pacman (más info para ArchLinux) pueden instalarlo resolviendo automáticamente las dependencias.

También pueden descargar Arora desde el siguiente enlace:
http://code.google.com/p/arora/downloads/list
Está el código fuente en formato tar.gz, un paquete .deb para Ubuntu 8.04 y un instalador en formato exe para Windows.

Arora - Acerca de

Acerca de... Arora

Usando Arora

Lo primero que tengo que decir, es que para ir en la versión 0.2, el navegador es bastante estable y totalmente usable. A primera vista, encontramos algunas cosas familiares de la familia Mozilla: pestañas, colocación de botones y barras de herramientas, buscador de Google al costado. Está bien, no hay porqué reinventar la rueda en esto, y no apunta a la innovación. Pero lo primero que “agradece” la vista es la integración con la apariencia de KDE.

Es bien liviano, consume muy pocos recursos, aunque todavía no tiene extensiones para sumar al consumo de memoria… :D

Probé abrir varias pestañas con distintos sitios web, y no llegué a enlentecerlo (tampoco probé con una cantidad exagerada). Me impresionó lo rápido que cargó GMail, lo que demuestra que tiene JavaScript bien clarito. Sin embargo, ya logueado en mi cuenta de GMail, se volvió un poco lento.

Navegador Arora

Navegador Web Arora

El logo es bastante simpático, con tantos pingüinos en la vuelta, hacía falta un oso polar… (Penguins & Polarbears, temón!). Como se caracteriza en el Software Libre, se trata de tener opciones, y Arora es una opción más. Si bien todavía está en una etapa temprana de desarrollo, promete mucho. Se puede seguir su desarrollo en el blog Arora Development.

Sin dudas la rapidez y sencillez viene muy agradecida, en una época donde los navegadores acumulan cada vez más bloat, un comienzo de cero y con un motor así, viene de pelos. Le va a encantar a los usuarios de KDE, ya que se siente como parte de KDE, y se perfila como un competidor directo de Firefox, Konqueror, y demás participantes en “la guerra de los navegadores”.

Un usuario incluso lo sugirió como navegador por defecto en Open SuSE. Parece una idea descabellada para ser un navegador en estado tan prematuro, pero no me extrañaría que algo así pase en el futuro. Otro punto a favor que tiene, es la posibilidad de funcionar en equipos con sistemas embebidos, por lo que entra a la competencia de dispositivos móviles desde el principio.

Sin dudas es un navegador muy prometedor, y que tiene mucho futuro. Estén atentos a la salida de nuevas versiones:

http://www.arora-browser.org/

por fernando, el 21 de julio de 2008 a las 18:33

Pablo Viojo

Detectar lenguajes usando Google AJAX Language API

Usando el API de Google es muy simple detectar el lenguaje de un texto. Para hacerlo más simple se puede crear un componente CakePHP y reutilizarlo. El código sería el siguiente: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 < ?php class LanguageComponent extends Object {   function initialize() {   }   function startup(&$controller) { $this->controller = $controller; }   function detect($text){ App::import("Core", "HttpSocket"); $conn = new HttpSocket();   $url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q="; $url .= urlencode($text);   $result = $conn->get($url);   if (!$result){ return false; }   $result = [...]

por pviojo, el 21 de julio de 2008 a las 17:41

Fernando Briano

Ciclo de charlas MontevideoLibre: 802.11

Como parte del ciclo de charlas de Introducción a redes de MontevideoLibre, el segundo de cinco módulos, tratará el tema 802.11. Las charlas son abiertas a todo público interesado, y se llevan a cabo en el salón cafetería del Colegio Crandon, cita en la avenida 8 de Octubre 2709, esquina Garibaldi, entre las 19:00 y 22:00 horas.

Segunda Instancia: 802.11

  • Fecha: 25 de Julio.
  • Dictado por: Mauricio Campiglia
  • Modalidad: Dos teóricos de una hora y media, con break en el medio.
  • Temario
    • Topologías
    • Arquitectura lógica
      • BSS, ESS
      • ESSID
    • Capa Física
      • Estándares 802.11a, 802.11b, 802.11g, 802.11n
      • Codificaciones y frecuencias
    • Capa de Control de Acceso al Medio
      • Temporizadores
      • Línea de tiempo
      • Scanning
      • Asociación
      • Autenticación
      • RTS/CTS
      • Fragmentación
      • PCF, DCF
    • Problemas y soluciones
      • Colisión
      • Nodo Oculto
      • Retransmisión
      • Saturación, escalabilidad
    • Seguridad
      • WEP
      • WPA
      • 802.11i
      • 802.1x
    • Roaming
      • 802.11f IAPP
Colegio Crandon - avenida 8 de Octubre 2709, esquina Garibaldi

Colegio Crandon - avenida 8 de Octubre 2709, esquina Garibaldi

por fernando, el 21 de julio de 2008 a las 06:08

Pablo Viojo

Yo no puedo opinar de Allende y Pinochet

Acabo de recibir el siguiente comentario en Facebook: para que opinas sobre pinochet y allende si no eres chileno ??? son problemas internos y no puedes opinar ni a favor ni en contra por que tu menos que todos los que escribieron sabes la historia de chile Jaja, que gracioso, y estupido, su argumento, sobre todo considerando que viene [...]

por pviojo, el 21 de julio de 2008 a las 03:57

Andres Moreira

Yandex, su arquitectura y Django.

Dado mi gran interés por los buscadores (y todo lo que tenga que ver con la búsqueda / organización / etc de grandes cantidades de datos) y también con su arquitectura, como funcionan, que utilizan, ... me encontré con la de Yandex. Yandex es el Google Ruso.

Leyendo la sección Real Life Architectures del sitio highscalability, hay una breve descripción de la arquitectura de este. Desde que supe de su existencia había estado buscando información, pero lo único que sabía de él era que:
  • su cuota de mercado en Rusia superaba por lejos a Google,
  • la empresa no era muy grande, pero con muchos ingenieros (al mejor estilo Google) y matemáticos (creo que abundan por los lares de Rusia).
  • y técnicamente, lo poco que encontré, usaban Unix y mucho Perl, no más.
Bien, ahora lo que encontré el sitio de highscalability fue un poco más interesante:
  • Several data centers around Russia.
  • Two-layer architecture.
  • The database is split in pieces and when a search is requested, it pulls the bits from the different database servers and brings it together for the user.
  • Languages used: c++, perl, some java.
  • FreeBSD is used as their server OS
Muy Interesante! En la sección de comentarios hay más información pero muchos están en ruso (todavía no lo hablo / leo =( ).

Pero algo que me llamo un poco más la atención fue que desde el año pasado están comenzando a utilizar Django, para crear una red social (al mejor estilo facebook / stambleupon ). El siguiente link habla sobre temas muy interesantes a la hora de escalar Django con MySql.

http://softwaremaniacs.org/blog/2008/02/24/why-offline-crashed-en/

Lo que más me alegra de toda esta investigación, es la enorme expansión de las tecnologías open source, que desde hace ya unos cuantos años vienen en un elevado crecimiento, dentro de los sistemas más Grandes del mundo! Y sobre todo de Python (mi lenguaje preferido).

por noreply@blogger.com (Andrés Moreira), el 21 de julio de 2008 a las 00:39

Cristhian Gomez

Redescrubriendo GeneXus X ... Otra de tantas.

Si tienes experiencia con la versión X de GeneXus no vale la pena leer este post pero tengo que admitir que al ir usando la versión le voy encontrando pequeñas cosas que están buenas o por lo menos un poco mejor que en la versión GeneXus 9. Hoy en la tarde estaba trabajando y me di cuenta de que el Insert Function muestra las funciones que se pueden agregar pero ordenadas de forma alfabética, en

por urulinux (noreply@blogger.com), el 21 de julio de 2008 a las 01:00

20 de julio de 2008

Enrique Almeida

GXTest - Herramienta de testeo funcional de aplicaciones GeneXus.



Hace unos días los muchachos Abstracta nos hicieron una demostración de su (futuro) producto GxTest.

Segun sus palabras:

"...GxTest no es solo una herramienta de automatización sino que es una herramienta para dar soporte a varias tareas de testing funcional de sistema, específica en principio para aplicaciones desarrolladas en Genexus. Lo que busca GxTest es dejarle al tester las tareas entretenidas y creativas y automatizar todas aquellas que sean tediosas y aburridas."

Hay que ver como termina la historia, pero por ahora lo veo similar a CubicTest adaptado a GeneXus, lo cual está muy bueno. Creo que contar con una herramienta de testing que trabaje al mismo nivel de abstraccion que GeneXus nos puede servir a todos...

El proceso es mas o menos el siguiente: Se define un modelo de las forma de interactuar que tienen mis programas, explicitando la forma en que se producen las transiciones y las validaciones que tengo que hacer para saber si el programa funciono bien.
A partir de ese modelo, se pueden deducir "Casos de Prueba" y luego se pueden ejecutar dichos "Casos de prueba" contra la aplicacion real y ver que es lo que fallo (o funcionó correctamente).

La idea esta muy buena. Vamos a tener que esperar un poco para ver cuanto trabajo nos da generar los modelos (grafos) necesarios, pero es muy prometedora.
Supongo que podremos contar con ayuda de programas que leyendo la KB nos sugieran diferentes formas de dicho modelo. Es una linda area de investigacion.

Los modelos de uso y los casos de prueba un sistema van a ser mucho mas perdurables que las implementaciones actuales (generador, bases de datos, lenguaje, Win/Web, etc). Por lo tanto aunque cambiemos algunas de esos "detalles de implementacion" las pruebas deberian seguir siendo validas.

La automtizacion de pruebas que hacemos actualmente, con Watir o Selenium, necesitan gran retrabajo cada vez que se hace un cambio importante.

El articulo completo se puede leer aca

por Enrique Almeida (noreply@blogger.com), el 20 de julio de 2008 a las 17:46

Coding Horror: Maybe Normalizing Isn't Normal

En Coding Horror: Maybe Normalizing Isn't Normal planten el eterno debate entre la normalizacion y la des-normalizacion (que no es lo mismo que no normalizar).

One of the items we're struggling with now on Stack Overflow is how to maintain near-instantaneous performance levels in a relational database as the amount of data increases. More specifically, how to scale our tagging system. Traditional database design principles tell you that well-designed databases are always normalized, but I'm not so sure.


y plantea un caso donde puede justificarse trabajar con datos desnormalizados...

En The Mother of All Database Normalization Debates on Coding Horror | High Scalability
hay algunas de las frases sacadas de los comentarios que estan buenas...

  • Normalize until it hurts, denormalize until it works. (Jeff)
  • Use materialized views which are tables created and maintained by your RDBMS. So a materialized view will act exactly like a de-normalized table would - except you keep you original normalized structure and any change to original data will propagate to the view automatically. (Goran)
  • Denormalization is something that should only be attempted as an optimization when EVERYTHING else has failed. Denormalization brings with it it's own set of problems. You have to deal with the increased set of writes to the system (which increases your I/O costs), you have to make changes in multiple places when data changes (which means either taking giant locks - ugh or accepting that there might be temporary or permanent data integrity issues) and so on. (Dare Obasanjo)
  • You can read fast and store slow or you can store fast and read slow. The biggest performance killer is so called physical read. Finding and accessing data on disk is the slowest operation. Unless child table is clustered indexed and you're using the cluster index in the join you will be making lots of small random access reads on the disk to find and access the child table data. This will be slow. (Goran)
  • The biggest scalability problems I face are with human processes, not computer processes. (John)
  • Don't forget that the fastest database query is the one that doesn't happen, i.e. caching is your friend. (Chris)
  • Normalization is about design, denormalization is about optimization. (Peter Becker)
  • Speaking from long experience, if you don't normalize, you will have duplicates. If you don't have data constraints, you will have invalid data. If you don't have database relational integrity, you will have orphan "child" records, etc. Everybody says "we rely on the application to maintain that", and it never, never does. (A. Lloyd Flanagan)
  • What I think is funny is the number of people who think that because they use LINQ or Hibernate they aren't affected by these issues. (Sam)
  • Multiple queries will hurt performance much less than the multi-join monstrosity above that will return indistinct and useless data. (Chris)
  • Cache the generated view pages first. Then cache the data. You have to think about your content- very infrequently will anyone be updating it, it's all inserts. So you don't have to worry about normalization too much. (Matt)
  • Don't fear normalization. Embrace it. (Charles)
  • It might be possible to overdo it, but trust me, I have had 20 times the problems with denormalized data than with normalized. (PRMAN)
  • IOW, scalability is not a problem, until it is. Strip away the scatalogical reference, and all you have is a boring truism. (Yawn)
  • Is my Site OLTP? If the answer is yes then Normalize. Is my site OLAP? If the answer is yes then De-Normalize! (WeAreJimbo)
  • Be careful not to confuse a denormalised database with a non-normalised database. The former exists because a previously normailsed database needed to be 'optimised' in some way. The latter exists because it was 'designed' that way from scratch. The difference is subtle, but important. (Bob)
La negritas son agregados mios...

por Enrique Almeida (noreply@blogger.com), el 20 de julio de 2008 a las 15:50

The Dark Knight

Fui a ver la ultima película de Batman.
Tiene la magia del comic y está muy bien filmada. Hay sangre, golpes, explosiones, acertijos y mas golpes o sea todo lo que tiene que tener una buena película de Batman.
Muy recomendable...

por Enrique Almeida (noreply@blogger.com), el 20 de julio de 2008 a las 04:36

19 de julio de 2008

Fernando Briano

Adaptar el theme para Wordpress 2.6: [Caption]

Una de las nuevas características de Wordpress 2.6, es la de agregar un “caption” a cada imagen. O sea, un texto que muestra el valor del texto alternativo (propiedad “alt” del tag “img”) de la imagen, con una caja y borde al rededor. Esta característica viene habilitada por defecto. Podemos verla cuando insertamos una nueva imagen. El uploader de imágenes nos avisa que el texto alternativo será usado como “caption” también.

Al insertar la imagen con el botón de “Add an image” (agregar una imagen), nuestro editor nos muestra algo así:

WordPress Caption

La imagen es encerrada entre los tags:

[/caption]

Este código es automáticamente “traducido” a HTML y CSS, e interpretado como tal por nuestro navegador. Entonces, la imagen va a tener un código así (código de ejemplo):

WordPress


Como ven, hay un par de clases nuevas que tenemos que definir en nuestro CSS. Por defecto, el CSS de nuestro tema no está preparado para mostrar el caption como viene en Wordpress 2.6, a menos que hagamos algunas modificaciones.

Los cambios los podemos observar en el tema por defecto, en el archivo style.css. Estos nos permiten mostrar la caja de caption, y el texto en tamaño chico. Pueden verlo en el changeset de Wordpress 2.6,  o si lo descargaron, ir hasta /wp-content/themes/default y ver el archivo style.css.

El código es el siguiente:
/* Captions */
.aligncenter,
div.aligncenter {
display: block;
margin-left: auto;
margin-right: auto;
}

.wp-caption {
border: 1px solid #ddd;
text-align: center;
background-color: #f3f3f3;
padding-top: 4px;
margin: 10px;
-moz-border-radius: 3px;
-khtml-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}

.wp-caption img {
margin: 0;
padding: 0;
border: 0 none;
}

.wp-caption p.wp-caption-text {
font-size: 11px;
line-height: 17px;
padding: 0 4px 5px;
margin: 0;
}
/* End captions */


El primer bloque (.aligncenter) es el que se encarga de alinear al centro la imagen, en caso de que así lo especifiquemos en las opciones del uploader de imágenes. En .wp-caption, podemos editar el color de fondo y borde, alineación de texto, etc. En mi caso por ejemplo usé los colores #222 para el fondo y #86bb66 para el borde, de manera de adaptarlo al resto de los colores del sitio. El resto del código es bastante explicativo.

Lo que hay que hacer es agregar estas líneas de código al css de nuestro tema/theme/plantilla/template de WordPress, y personalizarlo con los colores, márgenes y demás a nuestro gusto. Yo estrené el nuevo diseño en el post anterior, y mi caja con caption se ve así:

[caption id="attachment_515" align="aligncenter" width="125" caption="PicandoCodigo.net"]PicandoCodigo.net

WordPress

por fernando, el 19 de julio de 2008 a las 18:09

Enrique Almeida

Usabilizando GeneXus: Busqueda en la KB y el estado del Indice

Trabajando con GeneXus X me ha pasado mas de una vez, que busco alguna palabra que yo se que existen en varios objetos de la KB y no lo encuentro. El motivo siempre es que el proceso que indexa la base de conocimientos no terminó de indexar todos los objetos. Cuando se busca, hay una pista de que el indice no está completo y es un pequeño icono de advertencia y cuando pasamos el puntero del ratón sobre el dice que el Indice no esta completo.
Me parece que seria conveniente, hacer mas explicito dicho mensaje, para que desarrolladores bananas como yo podamos darnos cuenta que el indice no esta completo. Es algo muy opinable, pero yo creo que mostrar el texto en rojo, en vez del icono, me ayudaría mas.

por Enrique Almeida (noreply@blogger.com), el 19 de julio de 2008 a las 18:57

Fernando Briano

Cómo instalar NetBeans IDE 6.1 en GNU/Linux

NetBeans IDE 6.1

Ya desde la entrada en que contaba sobre el lanzamiento de Netbeans 6.0 me preguntaron cómo instalarlo, y unas veces más después de eso. Aprovecho que volví a instalarlo, esta vez NetBeans 6.1, para subir imágenes e instrucciones de cómo hacer para tener este completo IDE en nuestro S.O. preferido.

Obtener NetBeans

Para descargar la última versión, tenemos que dirigir nuestro navegador hacia:
http://download.netbeans.org/

Ahí tenemos para elegir qué características queremos que incluya nuestro IDE, si lo queremos para alguna tecnología en particular, o todas: Web & Java EE, Desarrollo móviles, Java SE, Ruby, C/C++, PHP.

Aclaro que si elegimos “All” (todas), podemos personalizar qué se va a instalar concretamente durante la instalación. De todas formas, el IDE está creado sobre un framework central con APIs, y las características son implementadas en forma de módulos plugin (fuente). Gracias a esto podemos agregar o eliminar plugins más adelante.

Aparentemente el soporte para PHP vendrá incluido en la versión completa a partir de la versión 6.5. Pero seguramente podemos instalar el plugin por nuestra cuenta para ir probando. No sé que tan desarrollado esté ya.

Si usan Debian, o alguna de sus distribuciones derivadas como *Ubuntu, Knoppix, Mepis, Mint y similares, pueden instalarlo a través de apt. En Debian se encuentra en los repositorios contrib:

su
apt-get update
apt-get install netbeans-ide

Esto nos pedirá además instalar netbeans-platform.

En mi caso descargué la última versión desde el sitio de NetBeans, en un archivo llamado netbeans-6.1-ml-linux.sh.

Instalación:

Para instalarlo a partir del archivo .sh que descargamos, basta con seguir unos sencillos pasos:

fernando@nando-debian:~/downloads/software$ chmod +x netbeans-6.1-ml-linux.sh
fernando@nando-debian:~/downloads/software$ ./netbeans-6.1-ml-linux.sh
Configuring the installer...
Searching for JVM on the system...
Extracting installation data...
Running the installer wizard...

Se nos mostrará una pantalla de bienvenida como la siguiente:

NetBeans 6.1 - Pantalla de bienvenida

NetBeans 6.1 - Pantalla de bienvenida

La pantalla nos muestra los packs y runtimes que va a instalar, así como el espacio que ocupará en el disco duro. Podemos personalizar la instalación con el botón “Customize…”, que nos mostrará la pantalla siguiente:

NetBeans 6.1 - Personalizar instalación

NetBeans 6.1 - Personalizar instalación

Como pueden ver, tenemos todos los componentes disponibles para instalar o no. Es recomendable elegir solamente aquellos que vayamos a usar, ¿para qué instalar cosas innecesarias?

El siguiente paso es aceptar el acuerdo de licencia del software. Gran parte del software está cubierto por la GPL/LGPL y CDDL, así que no hay sorpresas ahí. Aceptar y continuamos. Esto nos lleva a la siguiente pantalla donde debemos especificar un directorio de instalación para NetBeans IDE y qué JDK va a usar:

NetBeans 6.1 - Elegir directorio de instalación

NetBeans 6.1 - Elegir directorio de instalación

Siguiente paso: En caso que hayamos elegido instalar GlassFish, debemos elegir su directorio de instalación también, y algunas propiedades. Debemos ingresar un nombre de usuario y contraseña de Administrador, que por defecto trae los valores “admin” y “adminadmin”. En mi caso usé las mismas propiedades de mi usuario root:

NetBeans 6.1 - Propiedades de GlassFish

NetBeans 6.1 - Propiedades de GlassFish

Ya está todo listo para instalar, un “Next” en esta última pantalla y se empieza a instalar el IDE. Al terminar la instalación, tendremos la opción de registrar NetBeans IDE y GlassFish para obtener notificaciones de nuevas versiones y actualizaciones, ofertas de Sun, etc. (Registrarse es gratis).

Listo, ya podemos empezar a usar NetBeans. Supongo que las instrucciones de instalación se aplican igual si lo instalamos desde apt, o cualquier otra forma.

En lo poco que he desarrollado en Java, he usado siempre Eclipse, pero ahora pienso probar NetBeans nuevamente para desarrollar alguna aplicación con GUI, y probar también cómo funciona con C/C++ y algún otro lenguaje. Java, Python y PHP son los que estoy mirando más últimamente…

por fernando, el 19 de julio de 2008 a las 16:08

Enrique Almeida