El Congreso español nos enseña cómo NO debe hacerse un sitio web

Leyendo barrapunto encuentro este artículo sobre la Polémica en torno a la web del Congreso de los Diputados de España, como bien dicen en el texto, resaltando la desastrosa programación del mismo, la ínfima seguridad y la irrisoria cifra (y no en la acepción de irrisorio como pequeño, sino como algo que mueve a la risa) que les ha costado la modernización del sitio a los contribuyentes españoles.

Estas publicaciones en blogs y demás serían algo así como un peer-review en el desarrollo web. En este caso, los muchachos se pasaron de buenos haciendo un excelente how-to de cómo no se debe desarrollar un sitio web.

Por Dios, mi esperanza radica en que no se les ocurra seguir el ejemplo español a los gobernantes locales, pues ya lo han hecho con la reforma educativa y así nos fue.

Algunas citas sobre programación y computadoras

Leyendo la transcripción del programa “Triumph of the Nerds” encontré algunas frases, cuanto menos divertidas, sobre los nerds, la programación y las computadoras que transcribo a continuación:

“Pienso que un nerd es una persona que utiliza el teléfono para hablar con la gente sobre los teléfonos. Y un nerd de computadoras, por lo tanto, es alguien que utiliza una computadora con el objeto de utilizar una computadora.”
Doglas Adams, escritor de ciencia ficción

“Y la gente tiene diversos grados de pasión y diversos tipos de pasión. A algunos les gustan las bases de datos, y para ellos la quinta forma normal es como el nirvana; van en busca de eso, es lo que los levanta por la mañana.”
Christine Comaford, ingeniera de software

“Ni siquiera obedecíamos un reloj de 24 horas: veníamos y programábamos continuamente por unos días. Cuatro o cinco de nosotros, a la hora del almuerzo, nos subíamos a nuestros autos, corríamos al restaurante y nos sentabamos a charlar sobre lo que estábamos haciendo; algunas veces me entusiasmaba tanto hablando de las cosas que me olvidaba de comer, y luego volvíamos y programábamos un poco más. Eramos nosotros y nuestros amigos – ésos fueron días divertidos.”
– Bill Gates (si, si, él mismo… y creo que no necesita presentación)

“Comer, bañarse, tener novia, tener una vida social activa es accesorio, se mete en el tiempo de programación. Escribir código es la fuerza primaria que conduce nuestras vidas, así que cualquier cosa que interrumpa eso es un desperdicio de tiempo.”
Doug Muise, diseñador de software

“Y llevé este libro a casa, que describía la computadora PDP 8 y simplemente… oh, era como una biblia para mí. Es decir, todas esas cosas de las cuales por algún motivo me he enamorado, como cuando uno se enamora de un juego de cartas llamado Magic, o se enamora de hacer crucigramas u otra cosa, o tocar un instrumento musical, yo me enamoré de esas pequeñas descripciones de computadoras en su interior, y era un poco como las matemáticas: podía trabajar algunos problemas en papel, resolverlos, y ver como se resolvía, y luego llegar a mis propias soluciones y sentirme bien interiormente.”
Steve Wozniak, co-fundador de Apple

“Tecleabas esos comandos y luego esperabas un rato y luego la cosa haría dadadadadada y entonces te mostraría algo, pero aún así era extraordinario -especialmente para un niño de diez años- poder escribir un programa en Basic o Fortran y que realmente esta máquina tome tu idea y luego de alguna forma la ejecute y dé algun resultado; y si eran los resultados que uno predijo y el programa realmente funcionaba, era una experiencia increíblemente emocionante.”
Steve Jobs, co-fundador y CEO de Apple

“Mirando hacia atrás, recuerdo una oportunidad donde un ingeniero vino a verme con la idea de una computadora que sería utilizada en el hogar. Por supuesto todavía no se llamaba computador personal. Y mientras que él se sentía muy seguro sobre esto, el único ejemplo que pudo dar fue que una ama de casa podía guardar sus recetas en él. Yo no podría imaginar a mi esposa con sus recetas en una computadora en la cocina. Simplemente no parecía tener ninguna aplicación práctica para nada, así que Intel no persiguió esa idea.”
Gordon Moore, co-fundador de Intel y a quien corresponde la ley de Moore

El programa original está lleno de citas y entrevistas de esta naturaleza, así que les recomiendo que lo vean o lean la transcripción disponible.

Videos y material de cursos universitarios sobre Ciencias de la Computación (en inglés)

En el sitio web http://www.aduni.org/courses/ se encuentran disponibles bajo licencia CCA-SA los videos y el material completo (en inglés) de los cursos sobre Ciencias de la Computación dictados por la ArsDigita University durante los años 2000 y 2001.

El ArsDigita University (ADU) fue un programa anual e intensivo de pos-bachillerato en Informática basado en el curso de pre-graduados del Massachusetts Institute of Technology (MIT). El programa no requería el pago de cuotas, fue financiado y apoyado por la ArsDigita Foundation, y la mayoría de los instructores eran profesores del MIT. La misión principal de la ADU y del sitio web de ADUni.org es “… ofrecer la mejor educación en Ciencias de la Computación del mundo, a nivel de pre-graduado, a la gente que actualmente no puede acceder a ella”.

Los cursos con material disponible son:

Matemática para ciencias de la computación, dictado por Tara Holm
Una introducción básica al Cálculo y al Álgebra lineal. Comprende cálculo diferencial: gráficas de funciones, límites, derivadas, diferenciación sobre problemas del mundo real; cálculo integral: suma, integración, áreas bajo la curva y cálculo de volúmenes; álgebra lineal: espacios de vector, transformaciones lineales, matrices, operaciones sobre matrices y diagonalización.

Estructura e interpretación de programas de computadora, por Holly Yanco
Una introducción a la programación y al poder de la abstracción, basado en el libro homónimo de Abelson y Sussman. Los conceptos clave incluyen: construcción de abstracciones, procesos computacionales, procedimientos de orden superior, datos compuestos, abstracciones de datos, operaciones genéricas, intercambio de mensajes, flujos, interpretación de lenguajes de programación, modelo de máquina, compilación y lenguajes embebidos.

Matemática discreta , por Shai Simonson
Este curso cubre los tópicos matemáticos más relacionados con la Informática: lógica, relaciones, funciones, teoría de conjuntos, técnicas de demostración, inducción matemática, teoría de grafos, combinatoria, probabilidad discreta, recursividad, relaciones recursivas y teoría numérica.

Cómo funcionan las computadoras, por Gill Pratt
Incluye las bases del diseño lógico digital, arquitectura y organización de computadoras, lenguaje ensamblador, diseño de procesadores, jerarquías de memoria. El conjunto de problemas se basa en la utilización del simulador RISC Beta-Sim.

Diseño orientado a objetos, por David Goddeau
Los conceptos del paradigma orientado a objetos, utilizando Java, con énfasis en Ingeniería de Software.

Algorítmos, por Shai Simonson
Se estudia el diseño de algoritmos de acuerdo a su metodología y aplicación. Las metodologías vistas incluyen: divide y vencerás, programación dinámica y algoritmos voraces. Las aplicaciones comprenden ordenamiento, búsqueda, algoritmos de grafos, algoritmos geométricos, matemáticos y de búsqueda de cadenas.

Sistemas, por Luis Rodriguez
Se centra en la ingeniería de sistemas de software y hardware: técnicas para el control de la complejidad, infraestructura de sistemas, redes y sistemas distribuidos, atomicidad y coordinación de actividades en paralelo, recuperación y confiabilidad, privacidad de la información, y el impacto de los sistemas de computación en la sociedad.

Aplicaciones web, por Philip Greenspun
Trata sobre el diseño de un sitio web dinámico con un back-end de base de datos, incorporando lenguajes de scripting, cookies, SQL y HTML. Enfatiza las interfaces computadora-humano y el despliegue gráfico de la información.

Teoría de la computación, por Shai Simonson
Un tratamiento teórico sobre qué puede hacerse y cuán rapido. Se habla sobre aplicaciones, compiladores, búsqueda de cadenas y diseño de circuitos de control. Se analizan las máquinas de estado finito, gramáticas libres de contexto y máquinas de Turing, con sus variaciones; y se bosquejan las nociones de decibilidad, teoría de la complejidad y problemas NP-Completos.

Inteligencia artificial, por Patrick Winston
Un vistazo rápido sobre la inteligencia artificial desde los puntos de vista técnicos y filosóficos. Los temas incluyen búsqueda, A*, representación del conocimiento y redes neuronales.

Taller de Unix
Un taller de auto-aprendizaje para conocer y/o volver a ver un amplio conjunto de herramientas de Unix tales como shell scripts, awk, lex, yacc, grep, etc.

Sistemas de gestión de bases de datos, por Ravi Jasuja
Discurre sobre los sistemas de base de datos desde la capa física, B-trees y servidores de archivos, hasta la capa abstracta del diseño relacional. Incorpora alternativas y aproximaciones genéricas al diseño y la administración de base de datos relacionales y orientadas a objetos, estándares SQL, lenguajes algebraicos de consulta, restricciones de integridad, disparadores, dependencias funcionales, formas normales, transacciones, seguridad y data warehousing.

Probabilidad aplicada, por Tina Kapur
Se enfoca en el análisis, modelado y cuantificación y de la incertidumbre mediante la enseñanza de variables aleatorias, procesos aleatorios simples y sus distribuciones de probabilidad, procesos de Markov, teoremas de límites, elementos de inferencia estadística y toma de decisiones bajo condiciones de incertidumbre.

Realmente encontré aquí un compendio de recursos muy interesantes sobre ciencias de la computación, disponibles para todo el mundo. Lamentablemente, debido a dificultades para encontrar financiamiento y disputas legales entre los fundadores y miembros de la corporación, el programa fue discontinuado tras la graduación de la primer promoción.

Ojalá que sigan surgiendo proyectos de esta naturaleza, que permitan acercar el conocimiento, en forma libre y gratuita, hacia toda la comunidad. Y si fuera en castellano, mucho mejor…

Redes Privadas Virtuales con OpenVPN

Buscando información sobre Redes Privadas Virtuales (VPNs), caí en el sitio de OpenVPN:

OpenVPN es una solución VPN SSL que puede adaptarse a un amplio rango de configuraciones, incluyendo acceso remoto, VPNs sitio-a-sitio, seguridad WiFi, y soluciones de acceso remoto a escala empresarial con balanceo de carga, recuperación ante fallos y controles de acceso granulares. Implementa una extension de red segura en las capas 2 o 3 de OSI usando el protocolo estándar SSL/TLS. Está implementada en espacio de usuario utilizando dispositivos virtuales de red tun/tap y TLS/SSL, entre otras cosas. Y para mejor, es GPL.

Les recomiendo leer la ilustrativa presentación de James Yonan: Understanding the User-Space VPN: History, Conceptual Foundations, and Practical Usage.

Come mis datos: por qué todos malinterpretamos la E/S de archivos

En besttechvideos publicaron un video de la última LinuxConf en Australia donde Stewart Smith, un ingeniero de software de MySQL AB, comenta acerca de cómo debemos proceder para mantener la integridad de los datos en disco al desarrollar una aplicación.

El video está disponible aquí (en flash) o aquí (en ogg).
Como la disertación es en inglés, les dejo una síntesis de lo que Smith comenta:

Una breve introducción

Al comienzo de los tiempos, toda la entrada y salida de archivos era sincrónica; es decir, una llamada a grabar implicaba que los datos llegaban al dispositivo físico en el momento, y el procesamiento se detenía hasta finalizar la operación. Por razones obvias la performance de este método es muy baja, de ahí que surgió la llamada entrada/salida asíncrona, que permite continuar la ejecución del código mientras los datos son leídos o escritos a disco.

Lamentablemente, no existe un mundo sin fallas: las computadoras se cuelgan, se corta la luz, se termina la batería, alguien se tropezó con el cable, etc…

Bien, ¿cuando ocurre un corte de energia, qué es lo que se pierde?

  • Lo que está en buffers de la aplicación
  • Lo que está en buffers de las librerías
  • Lo que está en buffers del S.O. (page/buffer cache)

¿Dónde radican los errores que llevan a la pérdida de datos?

  • En el código de la aplicación
  • En el código de la librería utilizada
  • En el código del kernel del sistema operativo

¿Cuál es el flujo de los datos desde una aplicación hacia el disco, al grabar?

En un resumen burdo: con las funciones fwrite, fprint y otras, la aplicación pasa los datos a la librería (p. ej., glibc); la librería a su vez dirige los datos con write y similares al sistema operativo; y este último hacia el disco mediante page out y flushing periódico realizado entre 5 y 30 segundos (o más si se trata de una laptop). En cualquiera de estos momentos nuestros datos son vulnerables ante una falla de energía.

¿Es
write atómico? ¿Qué pasa si se corta la energía en la mitad de una operación write?

Pues no, y si se corta la energía en la mitad de la operación lo más probable es que la información en el archivo sea un conglomerado entre los datos de la versión anterior y los de la que se estaba guardando.

¿Cómo puede evitarse esto?

El truco más viejo consiste en escribir sobre un archivo temporal y luego renombrar al finalizar la operación de escritura. De esa forma, los datos originales estarían seguros aún si se corta la energía durante la etapa de escritura del archivo temporal. Y nunca tenemos que olvidarnos de las excepciones (permiso denegado, espacio en disco agotado).

¿Hummm… por qué dice estarían en la afirmación anterior?

Aquí tenemos una interesante cuestión. Stewart indica en que close y rename no implican sync. Redondeando, nadie asegura que la operación de cambio de nombre rename se realice después del write y consecuente close, aún estando en el orden correcto. Las operaciones sobre los datos de un archivo (tales como la grabación) se almacenan en buffers diferentes a las operaciones sobre los metadatos (tales como el renombrado), por lo que puede ocurrir (y generalmente ocurre) que estas últimas se realicen primero. En el triste caso de un fallo de energía, habremos perdido la información original por haberse efectuado el cambio de nombre primero, y además tendríamos un archivo corrupto, dado que los datos habrían quedado a medio grabar.

Por suerte para nosotros, el modo ordered del sistema de archivos ext3, nos asegura que el orden de prioridad es: primero write, luego close y luego rename. En otras palabras: primero grabar los datos al disco, luego actualizar el inodo y finalmente actualizar la entrada en el directorio.

Bien, ahora sabemos que haciendo fsync mas la técnica del archivo temporal, sobre un sistema de archivos ext3 y efectuando los controles de errores correspondientes, si ocurre un fallo durante una operación de escritura, los datos originales se mantienen seguros…

¿Qué tal en otras plataformas?

El Sr. Smith nos da una advertencia interesante cuando observa que el estándar POSIX define como válida una implementación de fsync nula. En otras palabras, no podemos quedarnos tranquilos al utilizar fsync en nuestras aplicaciones, pues puede que el sistema operativo subyacente implemente dicha función sólo haciendo nada. O sea, que una fsync implementada como sigue es válida en el estándar POSIX:

int fsync (int fd) { return 0; }

¿Y cómo se dio cuenta?

Cuando se cansó de tener páginas corruptas con MySQL, pues el fsync de MacOS X no descarga a disco el contenido del buffer de escritura, sino que se requiere un fcntl adicional. Así que hay que hacer algunas definiciones diferentes dependiendo del sistema operativo para el cual se compile la aplicación…

En el video, Stewart también discurre con bastante detalle sobre el tratamiento de archivos de gran tamaño y las técnicas utilizadas para la recuperación de datos (undo/redo logs) y prealocación de espacio.

En fin, un poco de charla para espabilar las neuronas y refrescarse con en inglés. Espero que lo disfruten…

09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0

A ver…

09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
...

Ufff… lo tendré que repetir varias veces para poder recordarlo.

Por si no lo saben, es la “llave de procesamiento” que uno requiere para poder desencriptar y poder ver las películas HD-DVD codificadas con AACS. Obviamente también se requiere algo de software, pero es lo de menos. Y por si las libertades fueran muchas ya hay intentos de censurar dicho numerillo, siempre bajo la tutela de la tristemente famosa DMCA.

Por ello, me hago eco de lo dicho por la Asociación Linux Español:

“Gracias a la publicación de este código, dicha práctica ilegal que pretendía poner un freno al desarrollo tecnológico, al crecimiento de la industria, a la libre competencia, y libertad de elección de los usuarios, ha llegado a su fin. La Asociación Linux Español llama a los usuarios a divulgar este código, por el libre desarrollo de la industria, por la libertad de la tecnología, y por la libertad de los usuarios.”

Publicado por yo el día 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 a las 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 horas.

FLISOL 2007 – Festival Latinoamericano de Instalación de Software Libre

El 28 de abril próximo se realizará una nueva edición del Festival Latinoamericano de Instalación de Software Libre — FLISOL 2007, el evento de difusión de Software Libre más grande en Latinoamérica que se realiza desde el año 2005 y su principal objetivo es promover el uso del S.L., dando a conocer al público en general su filosofía, alcances, avances y desarrollo.

Para tal fin, las diversas comunidades locales de software libre (en cada país, en cada ciudad/localidad), organizan simultáneamente encuentros en los que se instala de manera gratuita y totalmente legal, software libre en las computadoras que llevan los asistentes. Además, en forma paralela, se ofrecen charlas, ponencias y talleres, sobre temáticas locales, nacionales y latinoamericanas en torno al S.L., en toda su gama de expresiones: artística, académica, empresarial y social.

Luján es una de las ciudades participantes, bajo la organización del Grupo de Usuarios de Software Libre de la Universidad Nacional de Luján (UNLuX). El encuentro será el sábado 28 de abril a las 12:30 hs, en las instalaciones de la Universidad Nacional de Luján, y está dirigido a todo tipo de público: estudiantes, académicos, empresarios, trabajadores, funcionarios públicos, entusiastas y aun personas que no poseen mucho conocimiento informático.

El objetivo principal es compartir conocimientos y ansias de libertad, por ello la asistencia es totalmente libre y gratuita.

Pueden encontrar más información en las direcciones:

http://www.installfest.info/
http://www.installfest.info/FLISOL2007/Argentina/Lujan

Actualización 18/04/2007: Dejo disponibles para descarga el afiche y el folleto de promoción en formato PDF.

Debian GNU/Linux 4.0 es oficialmente estable

Con esto quiero decir que la versión 4.0 (Etch) de Debian Gnu/Linux fue publicada luego de varios meses de desarrollo y constituye hoy en día la distribución estable de nuestro sistema operativo favorito. Para quienes tienen la versión 3.1 (Sarge) hay novedades, ya que también fue actualizada recientemente.

Las notas de publicación de Etch detallan algunas de las características que podemos encontrar:

  • Entornos de escritorio KDE 3.5 y Gnome 2.14 y Xfce 4.4.
  • Instalación con interfaz gráfica.
  • Gestor de paquetes con verificación de integridad y actualización incremental.
  • Once arquitecturas soportadas, con soporte oficial para Intel y AMD de 64 bits
  • Discos de instalación diferentes para cada entorno de escritorio (como ya habiamos visto)

En síntesis, un sistema operativo altamente recomendable, que ya se puede descargar por bittorrent, http/ftp o jigdo.

Pegarle a un maestro

Mi docente y buen amigo Fernando nos ha hecho llegar en su blog un sencillo pero iluminador artículo de opinión de Mex Urtizberea publicado en la edición impresa del 6 de abril del diario La Nación.

Se llama Pegarle a un maestro y es de lectura obligada.

CD-ROM de materiales de FLOSSIC 2007

En el marco del Congreso Internacional de Sistemas de Software Libre y de Código Abierto desarrollado en Jerez de la Frontera los días 7, 8 y 9 de marzo de 2007 se distribuyó un CD-ROM recopilatorio de documentación digital acerca de software libre.

Entre los contenidos del mismo figuran las actas de los trabajos presentados en el congreso, libros y artículos sobre la filosofía del software libre, documentos, tutoriales, guías y manuales muy completos sobre aplicaciones y sistemas operativos libres.

Pueden acceder a la versión on-line del CD-ROM, aunque les recomiendo que descarguen el contenido del mismo porque es una muy buena compilación.

Van mis felicitaciones a los editores del CD.

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress