sábado, 30 de mayo de 2009

Colorear Código Fuente para HTML

En ocasiones necesitamos colorear código fuente, ya sea para mostrarlo en un documento ó para ponerlo en un blog (como en mi caso). Buscando por ahí, hace ya varios años encontré una página que quiero compartir con ustedes ya que me ha resultado de bastante utilidad: CodeColorizer

La herramienta anterior tiene las ventajas de que soporta los lenguajes modernos como el VB.NET y C# y la única desventaja que le veo por el momento es que es una aplicación que debes bajarla y descomprimirla en tu computadora, esto es desventaja si eres como yo una persona que prefiere las aplicaciones web.

En ese caso podrías utilizar Chami Colorizer que si bien se ha quedado algo fuera de moda, ya que no soporta VB.NET, tiene la ventaja de que al ser aplicación web no necesita instalar nada localmente.

En ella podemos introducir nuestro código fuente en una caja de texto y obtener como resultado ese mismo código pero con colores de manera que podamos desplegarlo de una manera más estética y entendible como a continuación:

CodeColorizer:

Dim RC2 As Oracle.DataAccess.Types.OracleRefCursor = Cmd.Parameters("pRET2").Value
Dim Da2 As New OracleDataAdapter
Dim dt2 As New System.Data.DataTable
Da2.Fill(dt2, RC2)



Chami Colorizer:

    Dim RC2 As Oracle.DataAccess.Types.OracleRefCursor = Cmd.Parameters("pRET2").Value
Dim Da2 As New OracleDataAdapter
Dim dt2 As New System.Data.DataTable
Da2.Fill(dt2, RC2)


martes, 5 de mayo de 2009

Icon Sets, Diseño Web

En ocasiones al estar realizando algún programa nos encontramos ante la necesidad de utilizar íconos que nos ayuden a ilustrar correctamente el concepto del botón/menú/opción. Lo principal es que sea muy descriptivo y que llame la atención.

La parte gráfica de la aplicación es muy importante, recordemos que "de la vista nace el amor" y esto es válido también para los programas que realizamos he visto en varias ocasiones a lo largo de mi vida profesional, software que si bien no son una solución realmente buena han ganado el la venta debido a una excelente presentación gráfica.

Pero en fin, sin más preámbulos, aquí presento una lista de "Icon Sets" gratuitos para utilizar en nuestros programas.

Patrones para Fondo:

Si ustedes conocen alguna otra con Icon Sets gratuitos, Patrones, Plantillas, etc. favor de indicarla en los comentarios para añadirla a la lista.

jueves, 23 de abril de 2009

Solución al "Unsupported major.minor version 49.0"

En esta ocasión vamos a ver un tema sencillo que me ocurrió hace unas horas. Me encontraba tratando de ejecutar un programa que hice en Java pero al lanzar la ejecución me marcó el siguiente error:

Unsupported major.minor version 49.0

Este error se debe a que la JVM que se está utilizando para ejecutar es incompatible con la JVM que se utilizó para compilar. Por ejemplo, en mi caso utilicé la versión 1.6 para compilar mientras que el sistema operativo estaba intentando utilizar la 1.3.1 para ejecutar.

En el caso de windows, podemos configurar la Variable de Entorno Path de manera que apunte al JRE correcto. Para ello vamos a Mi Pc -> Propiedades -> Opciones Avanzadas -> Variables de Entorno. Una vez dentro del cuadro de diálogo de Variables de Entorno buscamos la variable Path en la sección de Variables del Sistema.

Tal vez dentro de la cadena encontremos algo como C:\Archivos de programa\Oracle\jre\1.3.1\bin (al menos así fue en mi caso). Lo que debemos hacer es cambiar esa sección por la ruta donde tengamos el JVM más reciente ó el que queramos utilizar, ejemplo: C:\Archivos de programa\Java\jre1.6.0_11\bin

¡Y voilà!, al intentar ejecutar el programa ya corrió sin ningún problema.


sábado, 28 de febrero de 2009

Aprendiendo de los Errores

Hace tiempo que no escribía para el blog, sin embargo hoy pude darme un tiempo para hacerlo así que aquí vamos.

Mucho se ha dicho acerca de que debemos aprender de los errores, sin embargo la cantidad de errores que cometemos es limitada, sobre todo si los cometemos en el trabajo =)

Creo que es muy importante aprender de los errores de los demás, y además, pareciera que a todos nos gusta aprender de ellos ya que al escuchar sobre algo ocurrido tendemos a decir algo como: "¿y porqué no hizo tal ó cual cosa en vez de ello?". Algunas veces nos reímos antes de pensar y filosofar sobre la solución pero por lo menos nos hace pensar un poco.

Y, ¿dónde podemos aprender de los errores de los demás?. Pues bien, hace bastante tiempo ya descubrí la página The Daily WTF. En ella las personas narran algunas situaciones vividas en sus trabajos (relacionados con los sistemas de información) ya sea como administradores de sistemas, programadores, gerentes, y otros de entre la fauna que comprendemos este basto ecosistema.

Algunas son divertidas, otras dan pena ajena pero la mayoría nos dejan grandes lecciones. La página está en inglés pero creo que en los tiempos que corren eso no debería ser ya un problema. De cualquier modo, de vez en cuando comentaré/traduciré aquí algún artículo.


sábado, 13 de diciembre de 2008

Compresión de Fecha para Identificador

En cierta ocasión requerí un procedimiento para obtener identificadores de transaccion únicos en un ambiente distribuido. Existieron ciertas atenuantes que me hicieron más sencilla la planeación del proceso, como el hecho de que los nombres de red y de usuarios de los equipos son rigurosamente controlados, razón por la cual yo podía despreocuparme completamente de ello, e incluso utilizarlos como parte de la creación del identificador.

Se me ocurrieron varios métodos pero en todos ellos se incurría en una probabilidad de colisión de identificador (colisión = repetición). Una limitante que sí tenía era que este identificador único debía caber en solo 12 caracteres, PERO..., no podía utilizar 4 de esos caracteres porque contienen caracteres que son absolutamente necesarios para la identificación de la transacción, así que me quedaban solo 8.

Pensando y pensado, se me ocurrió que podría utilizar una fecha en formato DD-MM-YY-HH:MI:SS (sin los guiones ni los dos puntos) añadiendo además 2 números al azar. Pensé también en utilizar números al azar para el identificador completo pero lo deseché puesto que la fecha es mucho más descriptiva para mis fines.

Asi pues teniendo la siguiente fecha: 13120811341763, me inventé un procedimiento para dejarla de 14 en tan solo 8 caracteres y quedó así luego de la "compresión" : Y0KS4hm

¿Se ve difícil la cosa eh?, pues no lo es tanto. ¿Recuerdas los números hexadecimales?. Pues bien, recordarás que el 12 decimal se expresa como una simple C. Como verás... allí nos ahorramos un dígito ya que necesitamos solo un caracter para escribir un número de dos caracteres. Utilizando eso como base la idea se trata de realizar un cambio de base decimal a otro de manera que el resultado caiga en la utilización de menos caracteres.

En mi caso utilicé un "sistema numérico" de base 55, los caracteres fueron: del 0 al 9, de la A a la Z y posteriormente en minúsculas hasta llegar a un total de 55. De esa manera, al convertir la "fecha" expresada en base decimal pero contenida en una cadena (13120811341763) a otro número en base 55 contenido también en una cadena el resultado es la misma cadena pero "comprimida".