domingo, enero 25, 2009

Diagramación

En el periodismo escrito, la adecuada distribución de las imágenes y el texto es muy importante. No sólo porque ésta debe ser agradable a los ojos del lector, sino porque muchas veces no se cuenta con el espacio suficiente para colocar todos los elementos, por lo que se necesita priorizar y optimizar los recursos con los que se cuenta.

Este proceso de ubicación es lo que se conoce como digramación. Conocido también como maquetación, ésta es la manera de organizar y diseñar todo tipo de contenidos escritos, visuales y adiovisuales en medios impresos. Ejemplo de ello lo son los libros, los diarios y las revistas. Sin embargo, la diagramación no es exclusiva de los medios impresos. También los sitios web están sujetos a este orden.

"Algunos elementos gráficos de la diagramación impresa de un periódico."

En este caso, los sitios web tienen diferentes ventajas en comparación a los medios impresos tales como:

  • libertad de diseño
  • disponibilidad de extensión
  • animación de textos y gráficos
  • detalle de imágenes
  • diversidad de tipografía y elementos gráficos
  • interacción inmediata del público (feeds, emails, foros de opinión, bookmark, etc)
De igual manera tienen ciertas desventajas:
  • diseño limitado por el host
  • desperdicio o abuso del espacio disponible
  • saturación o escasez de elementos en la página
  • elementos demasiado grandes para ser cargados por la página (fotos, videos o audios)

"En esta diagramación, las imágenes no estorban con el texto. Por el contrario, se complementan."

Aún cuando todo apunta a la digitalización de los textos, siempre deben tomarse en cuenta los principios básicos de la diagramación impresa al momento de diseñar para un medio electrónico. Cabe mencionar que para la diagramación digital, muchas de las reglas de maquetación impresa no aplican o se han modificado acorde a las necesidades del medio y del usuario.

Por ejemplo, en blogger existen diferentes plantillas cuyas especificaciones siguen el mismo patrón de las cajas de digramación impresa. Mientras que otras, son más estandarizadas o han roto con los parámetros de la ubicación, color, tamaño y estilo de los elementos, (ya sean titulares, texto, fotografía, viñetas, etc).

Al momento de crear un blog o una página web -si es que se tiene la libertad de diseñar- es recomendable tomar en consideración algunas de las reglas básicas de la diagramación impresa, de tal forma que, los elementos queden muy bien distribuidos y dejen un buen taco de ojo en quien lo visite. Pero si lo anterior no es posible, puede elegirse la plantilla o el diseño que más se apegue a nuestros gustos o necesidades. Todo esto con el fin de hacer de nuestro sitio un lugar atractivo a los ojos del cibervisitante y cómodo a nuestro gustos y necesidades.

Diagramación

En el periodismo escrito, la adecuada distribución de las imágenes y el texto es muy importante. No sólo porque ésta debe ser agradable a los ojos del lector, sino porque muchas veces no se cuenta con el espacio suficiente para colocar todos los elementos, por lo que se necesita priorizar y optimizar los recursos con los que se cuenta.

Este proceso de ubicación es lo que se conoce como digramación. Conocido también como maquetación, ésta es la manera de organizar y diseñar todo tipo de contenidos escritos, visuales y adiovisuales en medios impresos. Ejemplo de ello lo son los libros, los diarios y las revistas. Sin embargo, la diagramación no es exclusiva de los medios impresos. También los sitios web están sujetos a este orden.

"Algunos elementos gráficos de la diagramación impresa de un periódico."

En este caso, los sitios web tienen diferentes ventajas en comparación a los medios impresos tales como:

  • libertad de diseño
  • disponibilidad de extensión
  • animación de textos y gráficos
  • detalle de imágenes
  • diversidad de tipografía y elementos gráficos
  • interacción inmediata del público (feeds, emails, foros de opinión, bookmark, etc)
De igual manera tienen ciertas desventajas:
  • diseño limitado por el host
  • desperdicio o abuso del espacio disponible
  • saturación o escasez de elementos en la página
  • elementos demasiado grandes para ser cargados por la página (fotos, videos o audios)

"En esta diagramación, las imágenes no estorban con el texto. Por el contrario, se complementan."

Aún cuando todo apunta a la digitalización de los textos, siempre deben tomarse en cuenta los principios básicos de la diagramación impresa al momento de diseñar para un medio electrónico. Cabe mencionar que para la diagramación digital, muchas de las reglas de maquetación impresa no aplican o se han modificado acorde a las necesidades del medio y del usuario.

Por ejemplo, en blogger existen diferentes plantillas cuyas especificaciones siguen el mismo patrón de las cajas de digramación impresa. Mientras que otras, son más estandarizadas o han roto con los parámetros de la ubicación, color, tamaño y estilo de los elementos, (ya sean titulares, texto, fotografía, viñetas, etc).

Al momento de crear un blog o una página web -si es que se tiene la libertad de diseñar- es recomendable tomar en consideración algunas de las reglas básicas de la diagramación impresa, de tal forma que, los elementos queden muy bien distribuidos y dejen un buen taco de ojo en quien lo visite. Pero si lo anterior no es posible, puede elegirse la plantilla o el diseño que más se apegue a nuestros gustos o necesidades. Todo esto con el fin de hacer de nuestro sitio un lugar atractivo a los ojos del cibervisitante y cómodo a nuestro gustos y necesidades.

jueves, enero 22, 2009

¿Por que aprender Python?

Si eres un Power User, Sys Admin, o simplemente realizas toneladas de trabajo frente a la computadora, probablemente te hayas topado con que hay ocasiones en las que se necesita automatizar ciertas tareas tediosas. Por ejemplo, el de buscar una cadena de texto repetida en varios documentos.

"Yo soy un PowerUser, por eso uso Linux!!!"

En el trabajo, en uno de los proyectos en los que estoy asignado, me vi en la necesidad de realizar la tarea mencionada; buscar una cadena de texto (una función) en cada archivo de un modulo, y obtener el nombre del archivo en donde sucede la ocurrencia. Usualmente esto lo podría hacer en Linux, con una sencilla combinación de los comandos: "grep" y "ls" en un script. Pero claro, no estoy usando Linux en mi trabajo, así que me vi "forzado" a utilizar una (basca de) función de búsqueda en el IDE que estamos usando.
Como no obtuve los resultados adecuados, en eso recorde una herramienta multiplataforma, opensource, y mas robusta que el chistoso "command prompt" de Windows...


  • Imaginen que necesitan buscar todas las veces que aparece el nombre de tu exnovi@ en las conversaciones que se guardan del MSN, ¿como harias esto?
  • Y si quieres mover todos los archivos de fotos que tienes regados por toda tu carpeta de documentos, ¿como lo haces?
  • Y para eliminar todos los espacios vacíos de los nombres de tus archivos de música, o los caracteres extraños, ¿que herramienta usarías?
  • Si bien, (yo se que) existen herramientas para realizar estas tareas, a veces ni la mas completa GUI (Interfaz de Usuario) puede asistirnos con tareas masivas de movimiento de datos, respaldo, eliminación de archivos vacíos (archivos de 0 KB), o de nombres extraños ( ###$%__song.mp3 por ejemplo).
  • Y que te parece el caso en que tal vez necesitas una base de datos pequeña y personalizada, realizar un simple juego o realizar una GUI especial.
  • Puede ocurrir que eres un developer de C/C++/Java, y el ciclo usual de codificar/compilar/depurar/recompilar te parece muy lento; ¿que sucede si deseas hacer un programa que se conecte a una base de datos remota y ejecute pruebas automatizadas?

"Si te sientes como un robot realizando tareas repetitivas, tal vez sea tiempo de considerar una herramienta que automatice tus tareas!"
  • ¿O una sencilla aplicación que pruebe rangos de IP que tengan conexión a Internet, y que cambie tu IP cada cierto tiempo, para poder navegar "tranquilo" en el trabajo? (más información sobre esto luego).

En cualquiera de estos casos y en muchos otros más, Python es el lenguaje de programación para ti.

¿Realmente crees que es necesario tener una aplicación diferente para cada una de estas tareas? ¿Necesitas una herramienta diferente para cada problema, o es mejor tener una compacta y elegante Navaja Suiza?

Python es fácil de usar, y disponible (como la mayoría del Software Libre) para Windows, Linux y Mac OS X, y probablemente te ayudara a realizar cada uno de estos trabajos más velozmente.

Si bien es fácil,también es un verdadero y muy robusto lenguaje de programación, que ofrece mucha mas estructura (entiendase legibilidad) y soporte para programas largos, más de lo que cualquier lenguaje de bash script te permitiría. Python también ofrece mucho mas chequeo de errores de los que soporta C, y siendo un lenguaje de alto nivel, tiene tipos de datos bastante útiles, como arreglos flexibles y diccionarios.

Y como Python tiene tipos de datos más generales, es aplicable a un dominio de problemas mucho más amplio que Awk o Perl, y aun así, muchas cosas son tan fáciles de implementar en Python como en esos lenguajes.

Python permite dividir tu programa en módulos que pueden ser reutilizados. Posee una larga colección de módulos estándares (I/O, llamadas al sistema, sockets, PyGame, etc).

Como es un lenguaje interpretado, no necesitas compilarlo y linkearlo (como C/C++). Y se compila "al vuelo" y/o bytecode como Java o .NET

El interprete de Python se puede utilizar interactivamente, lo que facilita experimentar con las características del lenguaje, hacer programas "para una sola vez", o para utilizarlo como una avanzada calculadora científica, je je.

Python permite escribir programas de manera compacta y legible. Y casi siempre, un programa escrito en Python, sera mas corto que su equivalente en C, C++ o Java. Es extensible, se pueden añadir nuevos módulos al runtime de Python con solo saber como programar en C.

Pero lo realmente importante, y por lo que vale la pena mencionar a Python en este momento, es que hace poco salio la nueva versión de Python, la 3.0
Y lo radical de esta versión, es que es TOTALMENTE incompatible con Python 2.6 y menores. Muchos se sorprenderán de semejante movida, pero el creador de Python: Guido Van Rossum, tiene buenas razones para haberla hecho, entre ellas: mejorar la sintaxis del lenguaje, cambiar un buen par de tipos de datos, y proveer una plataforma para convertir a Python, en el lenguaje interpretado de alto nivel de mayor popularidad en el mercado.
Si estabas esperando "el momento adecuado" para aprender un lenguaje de programación, sin lugar a dudas este es el momento para aprender Pyhton (3.0)!!!

"¿Cansado de lenguajes estáticos y compilados?, quizas sea hora de cambiar a un lenguaje de ALTO nivel."

Ya sea que estés comenzando, o simplemente estés cansado de Perl, de Awk, o de los ridículos archivos batch de Windows, etc.

Así que... a bajar Python:
http://www.python.org/download/releases/3.0/
Y la documentación de Python 3.0 (Py3K) puedes encontrarla aquí:


¿Por que aprender Python?

Si eres un Power User, Sys Admin, o simplemente realizas toneladas de trabajo frente a la computadora, probablemente te hayas topado con que hay ocasiones en las que se necesita automatizar ciertas tareas tediosas. Por ejemplo, el de buscar una cadena de texto repetida en varios documentos.

"Yo soy un PowerUser, por eso uso Linux!!!"

En el trabajo, en uno de los proyectos en los que estoy asignado, me vi en la necesidad de realizar la tarea mencionada; buscar una cadena de texto (una función) en cada archivo de un modulo, y obtener el nombre del archivo en donde sucede la ocurrencia. Usualmente esto lo podría hacer en Linux, con una sencilla combinación de los comandos: "grep" y "ls" en un script. Pero claro, no estoy usando Linux en mi trabajo, así que me vi "forzado" a utilizar una (basca de) función de búsqueda en el IDE que estamos usando.
Como no obtuve los resultados adecuados, en eso recorde una herramienta multiplataforma, opensource, y mas robusta que el chistoso "command prompt" de Windows...


  • Imaginen que necesitan buscar todas las veces que aparece el nombre de tu exnovi@ en las conversaciones que se guardan del MSN, ¿como harias esto?
  • Y si quieres mover todos los archivos de fotos que tienes regados por toda tu carpeta de documentos, ¿como lo haces?
  • Y para eliminar todos los espacios vacíos de los nombres de tus archivos de música, o los caracteres extraños, ¿que herramienta usarías?
  • Si bien, (yo se que) existen herramientas para realizar estas tareas, a veces ni la mas completa GUI (Interfaz de Usuario) puede asistirnos con tareas masivas de movimiento de datos, respaldo, eliminación de archivos vacíos (archivos de 0 KB), o de nombres extraños ( ###$%__song.mp3 por ejemplo).
  • Y que te parece el caso en que tal vez necesitas una base de datos pequeña y personalizada, realizar un simple juego o realizar una GUI especial.
  • Puede ocurrir que eres un developer de C/C++/Java, y el ciclo usual de codificar/compilar/depurar/recompilar te parece muy lento; ¿que sucede si deseas hacer un programa que se conecte a una base de datos remota y ejecute pruebas automatizadas?

"Si te sientes como un robot realizando tareas repetitivas, tal vez sea tiempo de considerar una herramienta que automatice tus tareas!"
  • ¿O una sencilla aplicación que pruebe rangos de IP que tengan conexión a Internet, y que cambie tu IP cada cierto tiempo, para poder navegar "tranquilo" en el trabajo? (más información sobre esto luego).

En cualquiera de estos casos y en muchos otros más, Python es el lenguaje de programación para ti.

¿Realmente crees que es necesario tener una aplicación diferente para cada una de estas tareas? ¿Necesitas una herramienta diferente para cada problema, o es mejor tener una compacta y elegante Navaja Suiza?

Python es fácil de usar, y disponible (como la mayoría del Software Libre) para Windows, Linux y Mac OS X, y probablemente te ayudara a realizar cada uno de estos trabajos más velozmente.

Si bien es fácil,también es un verdadero y muy robusto lenguaje de programación, que ofrece mucha mas estructura (entiendase legibilidad) y soporte para programas largos, más de lo que cualquier lenguaje de bash script te permitiría. Python también ofrece mucho mas chequeo de errores de los que soporta C, y siendo un lenguaje de alto nivel, tiene tipos de datos bastante útiles, como arreglos flexibles y diccionarios.

Y como Python tiene tipos de datos más generales, es aplicable a un dominio de problemas mucho más amplio que Awk o Perl, y aun así, muchas cosas son tan fáciles de implementar en Python como en esos lenguajes.

Python permite dividir tu programa en módulos que pueden ser reutilizados. Posee una larga colección de módulos estándares (I/O, llamadas al sistema, sockets, PyGame, etc).

Como es un lenguaje interpretado, no necesitas compilarlo y linkearlo (como C/C++). Y se compila "al vuelo" y/o bytecode como Java o .NET

El interprete de Python se puede utilizar interactivamente, lo que facilita experimentar con las características del lenguaje, hacer programas "para una sola vez", o para utilizarlo como una avanzada calculadora científica, je je.

Python permite escribir programas de manera compacta y legible. Y casi siempre, un programa escrito en Python, sera mas corto que su equivalente en C, C++ o Java. Es extensible, se pueden añadir nuevos módulos al runtime de Python con solo saber como programar en C.

Pero lo realmente importante, y por lo que vale la pena mencionar a Python en este momento, es que hace poco salio la nueva versión de Python, la 3.0
Y lo radical de esta versión, es que es TOTALMENTE incompatible con Python 2.6 y menores. Muchos se sorprenderán de semejante movida, pero el creador de Python: Guido Van Rossum, tiene buenas razones para haberla hecho, entre ellas: mejorar la sintaxis del lenguaje, cambiar un buen par de tipos de datos, y proveer una plataforma para convertir a Python, en el lenguaje interpretado de alto nivel de mayor popularidad en el mercado.
Si estabas esperando "el momento adecuado" para aprender un lenguaje de programación, sin lugar a dudas este es el momento para aprender Pyhton (3.0)!!!

"¿Cansado de lenguajes estáticos y compilados?, quizas sea hora de cambiar a un lenguaje de ALTO nivel."

Ya sea que estés comenzando, o simplemente estés cansado de Perl, de Awk, o de los ridículos archivos batch de Windows, etc.

Así que... a bajar Python:
http://www.python.org/download/releases/3.0/
Y la documentación de Python 3.0 (Py3K) puedes encontrarla aquí:


martes, enero 20, 2009

Mas Alla del Codigo: Escalabilidad

"Tu sistema debe ser capaz de crecer junto con tu negocio, para soportar la demanda del mercado"

El año pasado, Fafamonge me preguntó una vez cuánta influencia creía yo que podría tener el Internet y los blogs en las elecciones que estamos celebrando, a lo cual yo respondí que relativamente poca o casi nula, considerando que somos un país demasiado conservador con poca cultura tecnológica, en comparación con otros hermanos latinoamericanos como Chile o Brasil pero ahora que se celebraron las elecciones de diputados y alcaldes, quizá mi perspectiva podría variar un poco.

Me he dado cuenta que los encargados de IT del tribunal supremo electoral compartían mi idea y nunca esperaron la saturación en el tráfico que ha tenido el sitio web de dicho organismo durante las elecciones y al parecer, lo mismo podría suceder con el sistema utilizado para el conteo de votos y transmisión de resultados. Lo mismo nos ocurría en la universidad cuando realizabamos exámenes en línea o al momento de realizar inscripciones en línea. Los servidores donde la aplicación web estaba alojada colapsaba por el exceso de tráfico.

"El ejemplo más claro de falta de escalabilidad: Twitter en sus inicios"

Para evitar estos inconvenientes, es necesario tomar en cuenta la cantidad de usuarios que harán uso de nuestras aplicaciones al momento de desarrollarlas y publicarlas, además de considerar si tu sistema será capaz de crecer para adaptarse a estas nuevas necesidades de rendimiento.

Lo más común es agregar mas recursos al servidor como mas RAM o un CPU más rapido. Otros optan por el Cloud Computing, de manera que varias computadoras actuen como una sola y la suma de sus recursos sea suficiente para mejorar el rendimiento de la aplicación lo cual en parte si ayuda. Todo lo anterior es tarea de arquitectos de hardware/software y sysadmins pero nosotros como desarrolladores también tenemos que realizar nuestro aporte pensando en aplicaciones que consuman solamente los recursos necesarios y capaces de crecer y adaptarse a las nuevas necesidades cuando estas aparezcan, de manera que no sea necesario reescribir por completo el código fuente.

Como desarrollador, recomiendo hacer código lo mas genérico posible, no hagas código para solucionar problemas específicos en el momento que estos surgen, haz código que resuelva las necesidades de información actuales y las que podrían aparecer en un futuro y si no fuera capaz de resolverlas, que por lo menos sea lo suficientemente flexible para que se pueda adaptar sin perder mucho tiempo en este proceso. Por supuesto, esto no lo puedes decidir si ya estas en la fase de desarrollo, esto debes hablarlo con los involucrados en el proyecto una vez que este ha nacido, para que se reserve el suficiente tiempo para esta tarea.

Dentro de pocos meses se llevarán a cabo también las elecciones presidenciales. Crees que volveremos a ver otra failwhale en el sitio del TSE y similares?

Mas Alla del Codigo: Escalabilidad

"Tu sistema debe ser capaz de crecer junto con tu negocio, para soportar la demanda del mercado"

El año pasado, Fafamonge me preguntó una vez cuánta influencia creía yo que podría tener el Internet y los blogs en las elecciones que estamos celebrando, a lo cual yo respondí que relativamente poca o casi nula, considerando que somos un país demasiado conservador con poca cultura tecnológica, en comparación con otros hermanos latinoamericanos como Chile o Brasil pero ahora que se celebraron las elecciones de diputados y alcaldes, quizá mi perspectiva podría variar un poco.

Me he dado cuenta que los encargados de IT del tribunal supremo electoral compartían mi idea y nunca esperaron la saturación en el tráfico que ha tenido el sitio web de dicho organismo durante las elecciones y al parecer, lo mismo podría suceder con el sistema utilizado para el conteo de votos y transmisión de resultados. Lo mismo nos ocurría en la universidad cuando realizabamos exámenes en línea o al momento de realizar inscripciones en línea. Los servidores donde la aplicación web estaba alojada colapsaba por el exceso de tráfico.

"El ejemplo más claro de falta de escalabilidad: Twitter en sus inicios"

Para evitar estos inconvenientes, es necesario tomar en cuenta la cantidad de usuarios que harán uso de nuestras aplicaciones al momento de desarrollarlas y publicarlas, además de considerar si tu sistema será capaz de crecer para adaptarse a estas nuevas necesidades de rendimiento.

Lo más común es agregar mas recursos al servidor como mas RAM o un CPU más rapido. Otros optan por el Cloud Computing, de manera que varias computadoras actuen como una sola y la suma de sus recursos sea suficiente para mejorar el rendimiento de la aplicación lo cual en parte si ayuda. Todo lo anterior es tarea de arquitectos de hardware/software y sysadmins pero nosotros como desarrolladores también tenemos que realizar nuestro aporte pensando en aplicaciones que consuman solamente los recursos necesarios y capaces de crecer y adaptarse a las nuevas necesidades cuando estas aparezcan, de manera que no sea necesario reescribir por completo el código fuente.

Como desarrollador, recomiendo hacer código lo mas genérico posible, no hagas código para solucionar problemas específicos en el momento que estos surgen, haz código que resuelva las necesidades de información actuales y las que podrían aparecer en un futuro y si no fuera capaz de resolverlas, que por lo menos sea lo suficientemente flexible para que se pueda adaptar sin perder mucho tiempo en este proceso. Por supuesto, esto no lo puedes decidir si ya estas en la fase de desarrollo, esto debes hablarlo con los involucrados en el proyecto una vez que este ha nacido, para que se reserve el suficiente tiempo para esta tarea.

Dentro de pocos meses se llevarán a cabo también las elecciones presidenciales. Crees que volveremos a ver otra failwhale en el sitio del TSE y similares?

lunes, enero 19, 2009

Mas Alla del Codigo

"Escribir el código es sólo una parte del proceso de desarrollo de software"

Últimamente en mi trabajo me he dado cuenta que en las grandes ligas, el código es nada mas una de todas las cosas por las que hay que preocuparse a la hora de desarrollar un sistema. No basta con ser un programador disciplinado, dejando comentarios en el código, haciendo pruebas de unidad, subversionando y diseñando una interfaz agradable al usuario para que nuestra aplicación sea usable, hay que pensar en otros factores que podrían afectar nuestra aplicación a la hora que esta sea usada en el mundo real.

Algunas de estas cosas no las descubres en la universidad, cuando ejecutas tus aplicaciones en un ambiente ideal, donde no introduces más de cien registros a tu base de datos y sólo tienes a 5 usuarios al mismo tiempo accediendo a tu aplicación y lo hacen desde una LAN.

Tampoco piensas en que tan fácil será extender tu aplicación cuando la empresa crezca y surjan nuevas necesidades de información o si tu aplicación puede migrarse a otras plataformas o comunicarse con otros sistemas.

Estos conceptos los descubres y aplicas una vez que ya estás involucrado en un proyecto que requiere aplicarlos por lo que dedicaré algunos posts para que tomemos en cuenta que otras fases se llevan a cabo una vez que has escrito el código o qué otras características debes tomar en cuenta mientras lo escribes.

Sunsetting Sr. Byte.

El Sr. Byte ha estado más de 5 años inactivo. Digamos que estaba en " code freeze ". Pero ahora es el último release. Quizas no...