Archivos Febrero 2008
Treinta instituciones educativas del departamento de Huancavelica serán las primeras en beneficiarse con el ambicioso programa Una Laptop por Niño, que se iniciará a partir del 10 de marzo, cuando un primer lote de 2.200 computadoras portátiles se comiencen a transportar hacia esa región.
Los equipos serán trasladados a las unidades educativas de gestión local (UGEL) ubicadas en las provincias o distritos de los 24 departamentos seleccionados para la primera etapa. "La entrega de las laptops a los escolares se hará a través de los maestros de las 569 escuelas rurales beneficiadas", expresó Óscar Becerra, director general de Tecnologías Educativas del Ministerio de Educación.
Becerra también precisó que todo el proceso logístico de registro, embalaje y distribución de los primeros 40.000 equipos (25.000 llegaron a Lima el martes pasado por vía aérea y los 15.000 restantes deben arribar el 24 de marzo) durará unos 45 días.
Las laptops serán enviadas a escuelas rurales multigrado unidocentes de 146 provincias de los 24 departamentos del país. La activación de los equipos se hará en los respectivos colegios y estará a cargo del docente responsable.
Las computadoras llegarán a cada provincia o distrito en las cajas en que partieron desde China. En lugares donde no exista energía eléctrica se ha previsto el envío de un cargador de energía solar por cada cinco equipos. "Si hay más de 30 laptops en un colegio, recibirán un grupo electrógeno pequeño", acotó Becerra.
Este video es un reportaje al piloto realizado en Perú (espero que Didier de Saint Pierre lo vea):
Pueden ver también estos apuntes de Ivan Krstic en su travesía por Perú preparando todo para este desembarco.
Alan Perlis fue la primera persona en recibir el Premio Turing en 1966, una persona de gran humor, y pionero en el desarrollo de los lenguajes de programación, especialmente con su aporte a ALGOL.
Famosos son sus epigramas de la programación, publicados en 1982 en la revista del SIGPLAN(El grupo de interés especial en lenguajes de programación) de la ACM y que son parte del folclore de nuestra profesión, y casi siempre son citados en papers, blogs, y artículos.
La lista de los epigramas de la programación es extensa, pero acá les dejo mi selección personal. He traducido varios, pero algunos se entienden mejor en inglés, así que los he dejado tal cual. También he mantenido la numeración de la lista original, espero que los disfruten.
Los epigramas de la programación
1. La constante de un hombre es la variable de otro. (O la constancia de un hombre es la variable de otro).
3. Syntactic sugar causes cancer of the semi-colons.
4. Todo programa es parte de otro programa, y rara vez encaja.
7. Es más facil escribir un programa incorrecto que entender uno correcto.
11. Si tienes un procedimiento con 10 parámetros, probablemente te faltan algunos.
21. La optimización obstaculiza la evolución.
27. Una vez que entiendas como escribir un programa busca a alguien más para que lo escriba.
31. La simplicidad no precede a la complejidad, pero la sigue.
40. Hay dos maneras de escribir programas libre de errores, pero solo la tercera forma funciona.
55. Un programador LISP sabe el valor de todo, pero el costo de nada.
57. Es más facil cambiar la especificación para que se ajuste al programa que vice versa.
58. Los tontos ignoran la complejidad. Los pragmáticos la sufren. Algunos pueden evitarla. Los genios la remueven.
71. Documentation is like term insurance: It satisfies because almost no one who subscribes to it depends on its benefits.
78. Si tu computador habla en inglés, probablemente fue hecho en Japón.
79. Un año trabajando en inteligencia artificial es suficiente para empezar a creer en Dios.
83. ¿Cuál es la diferencia entre la máquina de Turing y el computador moderno? es la misma que hay entre el ascenso de Hillary al Everest y la puesta en marcha de un hotel Hilton en su cima.
89. No se aprende computación usando una calculadora, pero con una se puede olvidar la aritmética.
97. Cuando un profesor insiste que la ciencia de la computación es X, pero no Y, entonces hay que tener compasión de sus alumnos.
98. En computación, el tiempo medio de falla se hace cada vez más corto.
102. No podemos pasar de lo informal a lo formal por medios formales.
105. No puedes comunicar la complejidad, sólo ser conciente de ella.
114. Dentro del computador el lenguaje natural no es natural.
116. Tu piensas que sabes cuando aprendes, y estás más seguro cuando puedes escribir, aún más cuando enseñas, pero estás cierto cuando puedes programar.
117. Va contra la corriente de la educación moderna enseñar a los niños a programar. ¿Qué hay de divertido en planificar, adquirir disciplina en la organización de los pensamientos, dedicar atención a los detalles y aprender a ser auto-críticos?
119. Programar es un acto no natural.
Y si hay epigramas, entonces hay meta-epigramas:
122. Los epigramas son interfaces a través de las cuales la apreciación y la comprensión fluyen.
123. Los epigramas parametrizan auras.
124. Los epigramas son macros, ya que son ejecutadas en tiempo de lectura.
124. Los epgiramaz cristalizan las incongruencias.
127. Epigrams scorn detail and make a point: They are a superb high-level documentation.
129. Los Epigramas tienen entropía extremadamente baja.
El hombre razonable se adapta al mundo, el hombre que no es razonable persiste en adaptar el mundo a si mismo. Por lo tanto todo el progreso depende del hombre que no es razonable.
-- George Bernard Shaw
El futuro tiene muchos nombres.
Para los débiles es lo inalcanzable.
Para los temerosos, lo desconocido.
Para los valientes es la oportunidad.
-- Victor Hugo (via Kimniekan)
Quería escribir algo sobre la manera en que nuestras autoridades reaccionan ante la opinión de Nicolás Negroponte, quién dijo que el nuestro es un país de curioso y tímido.
Dice Didier de Saint Pierre, director del proyecto Enlaces:
"El objetivo de realizar proyectos piloto de un computador por alumno es medir qué pasó con los alumnos que estuvieron expuestos a esta tecnología versus alumnos de condiciones equivalentes, que no tuvieron acceso, para ver si hubo mejoras en el aprendizaje, antes de lanzarnos a masificar".
Eso es justificar la actitud pasiva en todo este tema que ha mantenido nuestro gobierno. El director de Enlaces sufre del sindrome de todos nuestro directores de servicios, y autoridades, aguantar lo más tranquilo posible a que el periodo presidencial pase, ojalá sin escándalos, ni complicaciones, es decir, sin hacer nada.
Entendería esa actitud, pero me preocupa que se planteen cosas como:
"...paises como Uruguay, que incorporaron los computadores de Negroponte, quizas se verán sorprendidos con el hecho de que sus alumnos no aprendieron mas, sino que se distrajeron más, navegando y chateando durante la hora de clases. La Educación no está en condiciones de especular a ese nivel sin evidencia dura".
Yo esperaría que el director de Enlaces conociera algo del proyecto CEIBAL, espero que sea así, y reconsidere "las leseras" que anda diciendo...
Por mi parte, creo que Negroponte se equivocó, Chile no es un país tímido y curioso, lo que pasa es que tenemos autoridades temerosas y por lo mismo arrogantes.
Hace casi un año atrás tuve que revisar un desarrollo que hice durante el año 2002, para una empresa en la que trabajé hace unos 4 años atrás, era un pituto interesante ($$$) pero tenía poco tiempo para hacerlo, así que tuve que tomar algunas decisiones que resumí en una respuesta en una lista de discusión privada.
Decidí compartir esa respuesta con ustedes, remozarla un poco, y aprovechar con este post de partir, después de vacaciones, además de aprovechar para responder una pregunta planteada en antiteóricos.
El año pasado, cuando me ofrecieron este trabajo (pituto), yo ya llevaba 3 años trabajando casi totalmente en .Net, y me pedían que retocara un proyecto abandonado a principios del 2003, escrito totalmente en java.
La aplicación en cuestión corresponde a una plataforma de juegos y aplicaciones para SMS (mensajes cortos por celular), construida en Java J2EE, con varios archivos XML de configuración (varios mapeos de Hibernate), unas 3000 lineas sólo en la interfaz de usuario que hice en java con Hibernate, otras 3000 lineas en código java, que correspondían a los beans que enceraban la lógica de negocios. Todo montado sobre RESIN que corresponde al servidor de aplicaciones usado para soportar esta aplicación. (En ese tiempo parecía una buena idea, y la plataforma ha operado durante 5 años con este servidor sin problemas).
Como tenía que meterme a modificar muchas cosas para agregar lo que me pedían, y tenía muy poco tiempo para hacerlo, decidí que todo lo nuevo lo construiría en Python usando DJANGO como framework, esta decisión implicaba escribir un pequeño servlet para enganchar lo que había con la nueva interfaz de usuario.
Era más corto escribir código nuevo en python y escribir un pequeño servlet de pasarela, que escribir lo equivalente en java, en parte porque tenía que recordar muchas cosas, bucear algunas partes no documentadas del código (documentación? nunca me pidieron documentación), y no tenía ganas de escribir java (lenguaje que no me gusta mucho en realidad).
Todo el trabajo me tomó el equivalente a 3 fines de semana, reemplacé varias partes de lo que estaba en java, y al terminar la plataforma terminó con un 30% de su código en python.
La verdad es que quedé con las ganas de tirar todo lo que estaba en java y migrarlo a python, algo que probablemente emprenda cuando haya tiempo y mi cliente decida financiarlo.
Pero vamos a enumerar algunas observaciones de esta experiencia.
- Desempeño, aunque java es más rápido, con django + python obtengo mucho más de lo que se necesita para esta aplicacion. Midiendo, noté que si con java y resin podía atender 120 request por segund (rps), con python+django obtuve 80 rps, pero la verdad es que necesito cubrir no más de 40 rps (que es lo que tenemos comprometidos con los operadores de telefonía celular).
- El cuello de botella está en la base de datos (como siempre).
- El codigo en python es considerablemente menos. En parte porque no tuve que crear mantenedores para administrar varias de las nuevas entidades que definí, simplemente usé el administrador estándar incluido en Django.
- Puedo hacer cosas en runtime de forma mucho mas simple que con java, por ejemplo, para implementar cierta funcionalidad que me pidieron habría tenido que usar reflection, o algo parecido (algo que en mi opinión es más fácil de hacer en .Net) pero con python salió natural.
- Con python pude meter "logica de negocios" dentro de un campo TEXT en la BD, un recurso que use para poder hacer cambios en linea sobre el servidor de produccion, por ejemplo, el operador puede cambiar el flujo de un juego para ajustarse a los requerimientos del usuario, antes eso significaba modificar o crear un servlet específico.
- doctest es una herramienta extraordinaria. Estoy usando java 1.4, así que no podría usar las nuevas caracteristicas de junit (anotaciones), pero doctest de python es muy superior.
- El ORM de Django es superior a Hibernate desde el punto de vista de la programación.
- La prueba de fuego estuvo en un concurso por TV, en un momento la plataforma recibió unos 9.000 mensajes en 15 minutos, 6.000 fueron procesados completamente en python, y 3.000 pasaron por un servlet java que los pasaba a un backend en python. Cero problemas.
Ahora hay más recursos disponibles para hacer desarrollo rápido en Java, y SEAM por ejemplo, es un excelente framework para montar algo como lo que describo, pero no tenía tiempo para aprender SEAM, ni menos para reconfigurar el ambiente de producción para usar Java 1.5, cambiarme a JBoss, y otras cosas.
Por eso cuando me preguntan, ¿qué es mejor para desarrollar un nuevo proyecto, Java o .Net?, habiendo programado en ambas plataformas, con sistemas similares mi respuesta es: si vas a partir de cero, prueba hacerlo todo en Python.
Funciona muy bien con aplicaciones de verdad, como la descrita en este post.
Conclusiones
Al final, lo que importa son las decisiones de arquitectura, y el lenguaje de programación no es tan importante.
¿Si te piden 40 rps, y eres capaz de dar 80 rps, para que buscar los 120 rps?
Hay veces que optimizar demasiado es innecesario.
Hay que balancear las restricciones de tu proyecto: presupuesto, tiempo, calidad y/o falta de documentación.
En mi caso el tiempo disponible era el principal factor, a mi cliente le daba lo mismo en que plataforma esté montado todo, lo que importa es la calidad del servicio. Eso me dió libertad, pero también tuve esa libertad porque confiaba en las herramientas que escogí, esta podría haber sido la oportunidad de usar Ruby On Rails, por ejemplo, o PHP, pero el primero no lo conocía, y en el segundo no confío tanto.
No sé si el comentario _I thought Linux was secure, tomado aisladamente, es inocente, o provocador.
Pero deben haber usuarios que se sorprenderán al darse cuenta que linux sí puede ser atacado seriamente, y la seguridad se puede comprometer.
Lo que pasó es que un grupo de crackers británico usaron el exploit vmsplice ganar el acceso a la cuenta root en varios servidores de Claranet, en Gran Bretaña.
En realidad es bien sencillo, seguramente muchas personas tienen acceso a un servidor compartido (shared hosting), y desde sus cuentas ejecutan el código y ganan los privilegios de root.
Este es un esquema, de los muchos posibles, para usar este exploit.
Lo mismo se debe estar repitiendo en muchas partes, y vamos a tener varias noticias parecidas en las próximas semanas.
El problema es que aunque el parche es trivial, y fácil de instalar los procedimientos, y los recursos no siempre están para poder responder a tiempo, y ese lapso es el que es usado por los vándalos.
Por supuesto, veremos tontas guerras entre los linuxeros y los usuarios windows sobre que sistema es más seguro.
De todas maneras, Linux tiene un tiempo de respuesta y corrección de este tipo de fallas cási instantáneo, si esto pasara en Windows o en MAc OS, primero tendríamos un mes en que se negaría el problema, otro mes de silencio, y varios meses más para obtener una respuesta.
Pero a pesar de ese tremendo tiempo de respuesta de la comunidad linux para resolver un problema serio, se tropieza con la capacidad de respuesta, que tiene una inercia, y esta inercia la que es usada por los que quieren hacer daño.
De todas maneras, aunque se haya aplicado el parche, ¿se puede estar seguro de que el computador no fue atacado antes, y ya hay un malware o alguna cuenta extraña creada? Así que no basta con aplicar el parche, hay que auditar el sistema, son horas extras de los operadores y administradores de sistema, plata, plata, plata....
La seguridad no consiste sólo en instalar parches y tener los firewalls al máximo...
Interesante reflexión de Enrique Dans:
"No se bloguea con la cabeza, se bloguea con los pies"
"No me refiero, obviamente, a que teclees con tus extremidades inferiores - dejarías el teclado hecho una pena - sino a que un blog no puede construirse con lo mucho que su autor sabe, tiene en la cabeza y decide compartir en una página web. Eso, por muy vasto y amplio que sea el conocimiento, se agota en poco tiempo, y se empieza a entrar en la dinámica de "¿y hoy de que diablos escribo?", en el "escribir por obligación" y en el verlo como una carga incómoda, sensaciones que son invariablemente el preludio de la muerte de un blog por inanición. Se bloguea con los pies, con lo que caminas cada día, con las noticias y sitios que recorres, con las experiencias por las que pasas. Ese componente de "diario" es fundamental, y consustancial a la naturaleza original del blogging. Y se vincula, por supuesto, todo aquello que contribuyó a darte la inspiración."
Bueno, lo que acabo de hacer no es bloguear con los pies, es bloguear con las patas ;)
Via Kriptópolis:
Como muchos ya sabréis, se ha descubierto una grave vulnerabilidad el kernel linux (2.6.x - 2.6.24.1) que permite a un usuario con acceso local obtener privilegios de root ejecutando un simple exploit.
En kriptópolis hay más detalles, y un enlace a donde se puede descargar el fuente del exploit.
Con esto se puede construir un virus bastante destructivo que ataque a los equipos que tengan este bug, algo que discutimos anteriormente.
Aunque el bug fue rápidamente corregido (algo común en el mundo FOSS), el problema, nuevamente, es que los usuarios no mantienen sus sistemas parchados, además que hay usuarios no expertos que no van a saber como parchar su kernel.
Así que si están usando linux, verifiquen si son vulnerables a este exploit y apliquen los parches, y corran la voz.
La correción del bug es interesante por lo sencilla que resulta, y agregar 3 lineas del archivo linux-2.6/fs/splice.c:
@ -1237,6 +1237,9 @static int get_iovec_page_array(const st
if (unlikely(!base))
break;
bq. + if (unlikely(!access_ok(VERIFY_READ, base, len)))
+ break;
+
/*
* Get this base offset and number of pages, then map
* in the user pages.
Cinco cortes a los cables submarinos en Asia, ¿no será mucho?
¿Cual es la probabilidad de que eso pase?
Más del 90% del tráfico mundial de datos viaja a través de los cables submarinos, frente al tráfico que absorben los satélites, menos de un 10%.
Fuente: El Mundo
Le preguntan a Linus Torvalds:
¿Cómo es la comunidad Linux? ¿Sigue siendo fuerte el proyecto open source?
Nunca ha sido cohesivo, en muchas formas es inadecuado llamarlo una comunidad. Algunos están involucrados debido a la ideología, muchos se involucran porque hay algún area que están usando o en la que están interesados y no necesariamente se preocupan de los demás. Pero sucede que hay suficientes intereses compartidos. Todos quieren las mismas cosas: estabilidad, desempeño.
Las compañías involucradas... tienen diferentes áreass de interes, como dispositivos empotrados: para ellos lo importante es que Linux se mantenga pequeño. Hay otros trabajando en máquinas con miles de CPUs. ¡Es sorprendete que eso funcione después de todo!
Entrevista a Linus Torvalds en el Sidney Morning Herald de Australia.
De acuerdo a diversas fuentes el gobierno brasileño ha postergado la licitación para adquirir 150.000 laptops XO desarrollados por la fundación OLPC.
"En una inesperada decisión, el gobierno brasileño canceló la licitación para la compra de 150 mil laptops dirigidas a niños de bajos recursos en el marco del programa OLPC (One Laptop per Children, Una Laptop un Niño) que impulsa el científico norteamericano Nicholas Negroponte en coordinación con trasnacionales del rubro informático.
Como se sabe, dicho programa, que busca incluir a niños pobres a la "era digital" con la adquisición de máquinas a un precio promedio de 100 dólares, está siendo desarrollado en diferentes países de América Latina, incluido el Perú.
El gobierno brasileño canceló la licitación de las "laptops" al concluir que los precios mínimos ofrecidos por los postores para su venta alcanzaban los US$360 por máquina, y no el previsto de US$100.
Pese a la decisión, el gobierno brasileño no descartó convocar una nueva licitación en los próximos meses. En la nueva convocatoria se modificaría la cantidad de laptops a adquirir, y las pretensiones técnicas, para incentivar a los postores a bajar sus precios.
Fuente: correoperu
De acuerdo a un comunicado oficial de Microsoft.mspxestán haciendo una oferta para comprar Yahoo en un monto total de 46 mil millones de dolares, con una oferta de 31 dolares por acción (estaría a un 62 por ciento sobre el valor de la acción en estos momentos).

