jueves, octubre 29, 2009

Tcl/Tk, un lenguaje con actitud de rock

Sin dudas el más grande invento desde los pañales descartables. Tcl/Tk es un lenguaje interpretado 100% libre creado por el profesor John K. Ousterhout en la universidad de California, que permite escribir scripts y programas de mayor complejidad con interfaces gráficas, sockets, bases de datos y decenas de extensiones para hacer de todo muy fácilmente.

Tcl/Tk se encuentra disponible para casi todas las plataformas, desde Linux hasta Windorch, pasando por Mac. Para programar en Tcl/Tk no hace falta ninguna herramienta especial, ni IDE. Sólo crear un archivo de texto nuevo, escribir nuestro código, y listo, si tenemos instalado el interprete ya se puede ejecutar.

Probablemente hay muchas razones por las que Tcl/Tk es popular, pero quiero nombrar algunas de las que dice en el propio sitio:
  1. Desarrollo Rápido: la razón más importante por la cual la gente usa Tcl es que consigue realizar su trabajo más rápido. En muchos casos, usted puede implementar aplicaciones 5-10x más rápido con Tcl que con otros lenguajes, especialmente si la aplicación utiliza interfaces gráficas, manejo de "strings", estructuras dinámicas de datos, sockets o requiere integración.
  2. Interfaces Gráficas: con Tk, Tcl ofrece facilidades para la creación de interfaces gráficas que son increíblemente simples pero muy potentes.
  3. Multiplataforma: Tcl/Tk se ejecuta en Windows, Macintosh, y casi todas las plataformas Unix que se pueda imaginar. Proporciona API de alto nivel que le permite escribir código que funciona de la misma - en todas partes -, mientras que en Tcl/Tk se preocupa por respetar las diferencias de plataforma, como el aspecto y comportamiento nativo para el GUI.
  4. Fácil de aprender: Tcl es un lenguaje muy simple. Los programadores experimentados pueden aprender Tcl y producir su primera aplicación interesante en tan sólo unas pocas horas o días. Los programadores casuales también puede aprender Tcl rápidamente.
  5. Madurez: Tcl/Tk ha estado bajo continuo y activo desarrollo y uso por un gran grupo de expertos desde la década de 1990.
  6. Deploy o Despliegue: los lenguajes dinámicos a menudo hacen más difícil la implementación, porque usted necesita obtener tanto el intérprete del lenguaje, las bibliotecas y la aplicación en cada máquina donde se ejecutará. Tcl/Tk ofrece soluciones muy interesantes para empaquetar todo esto en un único archivo ejecutable de poco más de 1MB.
  7. Abundancia de bibliotecas: decenas de bibliotecas maduras, para hacer muchas cosas.
  8. La comunidad: otra de las razones atractivas para el uso de Tcl es la gran comunidad de usuarios y desarrolladores que posee. La wiki es una fuente inagotable de recursos. También cuenta con un numeroso y solidario grupo de hackers, comp.lang.tcl, al que se puede recurrir cuando uno no encuentra soluciones.
  9. ¡Es Software Libre!
Como contra podría mencionar que hay muy pocos recursos en español, por lo que exige que conozcamos inglés básico.

Para mostrar la eficacia del lenguaje, copio de la wiki esta calculadora:


y el código de menos de 50 líneas:


¿Por dónde comenzar?

En la wiki hay varios recursos y enlaces a tutoriales. Me pareció que http://www.bin-co.com/tcl/tutorial/contents.php estaba más o menos bien. Aunque es en inglés, casi no se encuentran recursos en español para este lenguaje.

¿Dónde consigo Tcl/Tk?

Si está usando GNU/Linux, probablemente esté instalado o se encuentra en el repositorio de su distribución. Si está usando windorch, puede descargar ActiveTcl.

En este sitio he publicado un par de programitas hechos en Tcl/Tk, por lo que se pueden ver las entradas marcadas con dicha etiqueta.

martes, octubre 27, 2009

Los lenguajes más populares

El sitio http://langpop.com/ recopila datos acerca de los lenguajes de programación más populares.

sábado, octubre 24, 2009

Presentación de Log4j

Construye tu propia tira cómica online

Fuente: Oloblogger

Seguro que alguna vez hemos dejado de publicar un buen chiste que se nos pasó por la cabeza, simplemente porque no somos muy mañosos para el dibujo.

Esto se ha acabado porque hay muchas páginas que ofrecen herramientas para crear tu propia tira, así que el que no lo haga a partir de ahora es porque no le da la gana.

Monkey Dyne nos ofrece una forma muy sencilla de combinar personajes y texto. Aunque muy limitado, para diálogos de dos personajes resulta suficiente. Estos ya están diseñados y sólo hay que elegir cual ponemos a la izquierda y cual a la derecha. Admite hasta un bocadillo por personaje para cada una de las tres viñetas posibles.


En Witty Comics ya tenemos 48 personajes distintos y 60 fondos para elegir. Posibilidad de cambiar el bocadillo según sea un texto normal, pensamiento, grito o susurro. Personajes dibujados tipo años 70 y otros basados en animales. Previsualización directa.


Strip Generator tiene unos personajes mezcla de la Familia Adams y las Supernenas, pero permite mayor flexibilidad a la hora de crear y colocar los personajes. Con un catálogo aceptable de personajes, objetos y bocadillos, también permite cambiar los tamaños, rotar y la superposición de elementos.


Pixton tiene personajes muy simples prediseñados, que podemos personalizar algo más que en los anteriores casos: tamaño, cabello, color... e incluso cambiar la postura. La escena también es modificable y se pueden añadir objetos.

MakeBeliefsComix. Prácticamente todos los elementos son personalizables. Algo más flexible en cuanto al número de viñetas porque se puede elegir entre 2 y 4. Quince personajes a elegir con variaciones en cuanto a posición y expresión. También incluye la posibilidad de rotar, cambiar tamaño y posicionar libremente.


Pikistrips, aporta una variante que es la de subir las imágenes que quieras. Prácticamente me ha parecido un laboratorio de fotomontaje, pero adaptado al comic. Un montón de parámetros personalizables similares a los de los programas de edición de imágenes, bastantes modelos predefinidos de maquetado de viñetas y los bocadillos, que no podían faltar.

Bitstrips es el más completito, pero en consecuencia, el más complicado. Creo que no es recomendable para un trabajo esporádico, pero es el mejor si vas a hacer tiras con cierta frecuencia. Permite personalizar todos los rasgos de los personajes, así como su complexión, postura o vestimenta. Aunque tienes suficientes prediseñados para poder empezar, puedes crear tus propios personajes y guardarlos en tu librería personal. Muchos fondos, muchos objetos, muchos formatos de tira.

En casi todos los procesos de creación se dispone de un editor básico y de otro avanzado para poder recrearse un poco más.


sábado, octubre 17, 2009

La tabla periódica de las fuentes

domingo, octubre 11, 2009

¿Por qué en GNU/Linux no hay virus?

El último post de Steal This Software, de donde también tomé la foto, me llevó a copiar esto de una FAQ de Debian:

Los virus son la pesadilla de los administradores, cada mes aparecen mas de 30 mil y es un hecho que las actualizaciones mensuales de los antivirus no los incluyen a todos. Para los usuarios no expertos también son una molestia, los antivirus pueden hacer que una computadora pierda hasta el 30% de su veocidad. Cada año cientos de millones de dólares se pierden en horas/hombre (y horas/mujer ;-) ) por los virus en todo el mundo.

Para que un programa sea considerado como un virus debe cumplir dos requisitos:

1) Que se copie a sí mismo
2) Que se propague de manera "natural" entre los sistemas

Los gusanos son programas que aprovechan un exploit (error en el código de un programa) para infiltrarse en un sistema. Los troyanos son gusanos que abren un puerto trasero para permitir que una persona ajena entre al sistema. La diferencia principal entre los virus y los gusanos radica en que los virus se propagan sólos por la red, mientras que alguien (un hacker) debe realizar acciones especificas para implantar un gusano. Por cada máquina atacada por un gusano existen miles (quizás millones) de equipos infectados por virus. En GNU/Linux hay gusanos y troyanos, pero no virus.

Con frecuencia he escuchado la opinion de "expertos" que argumentan que en Linux no hay virus porque hay pocos equipos con este sistema operativo, pero que en cuanto se vuelva más popular los virus aparecerán. Obviando el hecho de que Unix/Linux poseen el 40% del mercado de servidores, esta opinión revela las pobres expectativas que Microsoft le ha impuesto al usuario común, pues según éste, es normal que todos los sistemas operativos sean afectados por los virus. Pero en realidad, solo Windows padece de los virus. No todo es culpa de Microsoft, no ha sido fácil llevar a un sistema operativo tan deficiente como Windows95 al exigente mundo de los servidores: en busca de un buen desempeño, se ha debido de pagar un precio en la seguridad de Windows XP y Windows 2003, quizás un precio demasiado alto.

El hecho, sin embargo, es que en Linux no hay ni habrá virus, (la verdad es que en ningún sistema operativo deberían de existir los virus), la razón radica en la gestión de memoria y la asignacion de permisos por omisión, los cuales hacen imposible que un programa no autorizado se ejecute y propague. Varias consultoras reportan que los servidores mas atacados en Internet son los basados en Linux, y la gran mayoria sale victorioso de la prueba. Sin embargo, esto no significa que este sistema operativo sea invulnerable: los programas y el mismo kernel poseen fallas que al ser explotadas permiten que, en casos extremos, un extraño tome control del equipo. La mejor manera de prepararse para un ataque es siendo uno mismo un hacker, escaneando los puerto de nuestro server, inyectando SQL en nuestras paginas web y tratando de ejecutar codigo malicioso. Lo más importante es frecuentar sitios que informen sobre fallos de seguridad, como linuxtoday.com y buscar actualizaciones para nuestro sistema cada siete dias. Existen muchas soluciones que automatizan este proceso.

viernes, octubre 09, 2009

El juego de la vida de Conway

Se trata de un sencillo juego matemático que publicó el británico Conway en 1970.

Desde un punto de vista teórico (que excede la temática de este blog), es interesante porque es equivalente a una máquina universal de Turing, es decir, todo lo que se puede computar algorítmicamente se puede computar en el juego de la vida.

Se trata de un tablero con un número infinito de casilleros. Cada casillero se denomina "célula", y puede estar viva (color negro) o muerta (color blanco), según se quiera antes de comenzar la partida.

Una vez armado el tablero se da comienzo. El estado del tablero evoluciona a lo largo de unidades de tiempo discretas (se podría decir que por turnos). El estado de todas las células se tiene en cuenta para calcular el estado de las mismas al turno siguiente. Todas las células se actualizan simultáneamente.

Las transiciones dependen del número de células vecinas vivas:
  • Una célula muerta con exactamente 3 células vecinas vivas "nace" (al turno siguiente estará viva).
  • Una célula viva con 2 ó 3 células vecinas vivas sigue viva, en otro caso muere o permanece muerta (por "soledad" o "superpoblación").
¡Hermoso!

Hay un poco más de información en wikipedia, junto a varios enlaces de implementaciones del juego en varios lenguajes y plataformas. Pero me gustó esta hecha en Javascript.

Por último no descarto que me programe yo mismo uno en java o javascript algún día de estos.

martes, octubre 06, 2009

El problema con la planificación

Fuente: Dos Ideas

Escrito por Leonardo De Seta
Martes 06 de Octubre de 2009 09:47

Mapa de rutaCreo que estoy teniendo bastante éxito con mi carrera. Pero si hubiera sido mejor con la planificación, no hubiera logrado ni la mitad de las cosas que logré! De hecho, algunas cosas ni siquiera las hubiera comenzado...

Hay cosas que se pueden planificar, y otras que no. El problema es que la mayoría de las organizaciones esperan tener un plan. Y esperan cumplirlo sin importar lo que ocurra. Y esto no es realista.

Al hacer una planificación detallada se está presuponiendo que se sabe a donde se quiere ir, y que no vamos a influenciarnos por lo que ocurra en el camino - o al menos, no sin tener que hacer una gran re-planificación. En mi experiencia, esto provoca que los líderes de proyecto tengan una visión restringida.

No me malinterpreten - no estoy sugiriendo que se embarquen en un proyecto que no tenga una visión clara y robusta. Y no estoy sugiriendo que se embarquen en un proyecto en donde no tienen idea de lo que hay que lograr, y si es tiene objetivos razonables (aunque si desafiante) con los recursos disponibles. Y definitívamente es una buena idea armarse de un plan de alto nivel que tenga hitos; pero es un mapa de ruta de alto nivel en vez de un plan detallado.

Yo vengo de un entorno de desarrollo tradicional, y soy consciente que todo eso suena bastante loco. Y admito que se necesita cierto nivel de madurez y experiencia para reconocer que no se puede planificar en detalle por adelantado si queremos mantener la flexibilidad, como así lo exigen los requerimientos reales, riesgos, problemas, prioridades y oportunidades que van apareciendo a medida que construimos el software.

La mayoría de las organizaciones no están listas para aceptar esta idea tan radical - la idea de aceptar que no sabemos a donde estamos yendo (al menos, no con certeza), y que no sabemos cuál va a ser el retorno de la inversión, o cuándo ocurrirá. Entonces, como mínimo, es esencial contar con una visión clara y un plan de alto nivel. Sean cuidadosos de no entrar en detalles.

En vez de un plan detallado, prefiero una visión fuerte, una estrategia, metas, y un mapa de ruta (un plan de alto nivel). Las tácticas para lograr esto, por ejemplo las características precisas y todas las tareas a entregar, pueden variar en el camino y es mejor no planificarlas por adelantado. Esto le permite al equipo descubrir los detalles cuando están en una mejor posición para hacerlo, y les permite cambiar la dirección rápidamente en respuesta a las circunstancias cambiantes.

Y, cuando lo pensamos un poco, es el significado de ágil...