Categoría: traducción

Haskell para niños: Lección 1.

¡Y arrancamos!

Gracias de nuevo a toda la gente que apoyó este proyecto y se acercó a ser parte. El día de hoy, impartí mi primera clase presencial de Haskell, ¡y ha sido una maravilla! Esta es mi primer relatoría semanal.

Primero: presentaciones.

Ya que hay varios niños en esto, ¡lo primero es presentarnos!

* Yo. Mi nombre es Chris Smith, y estoy impartiendo la clase de programación en la pequeña escuela de Vermijo donde todo esto comenzó. Soy un gran fan de Haskell, ¡y estoy emocionado de compartirlo con gente nueva!

Chris Smith

* Sue. Sue Spengler es “fundadora, maestra principal, supervisora, custodia, secretaria y señora del comedor” de la pequeña escuela de Vermijo. La escuela es su proyecto, y está haciendo cosas realmente sorprendentes. Tuve que hurgar para encontrar una foto, ¡así que espero que a ella le guste esto!

Sue Spengler

* Mis estudiantes locales. Los chicos de la clase de hoy son Grant, Sophia, Marcello e Evie (espero escribirlo bien). Voy a pedirles que se presenten en los comentarios en este blog, de modo que pueden buscarlos allí.

* Todos los demás. Cualesquier otros niños que estén tomando la clase, por favor preséntense en los comentarios también. Pueden decir ¡Hola! y si les gustaría, pueden enlazar un video o una imagen.

Espero que todos tomen el tiempo para dejar sus comentarios y saludar a los demás. Aprender cosas es mucho más divertido cuando se habla con otras personas.

El plan

Vamos a hablar de hacia donde vamos, a saber:

  1. Escribir programas de computadora para trabajar.
  2. Hacer cambios a nuestros programas para darles movimiento a las imágenes.
  3. Crear un juego de su propia elección.

¡Esto se llevará el año entero! Porque esta clase no se trata solamente de memorizar algo acerca de un programa específico: se trata de ser creativas, probar cosas y lograr algo de lo que te sientas orgulloso. Por lo que habrá un montón de tiempo libre para jugar y probar ideas diferentes en tus programas. Estamos aprendiendo con el lenguaje de programación Haskell, pero en realidad, la clase es más sobre estar en control de tu computadora y diseñar y construir algo realmente bueno desde el principio, no solo recordar algunas cosas acerca de Haskell.

Estructura de las computadoras y la programación.

Lo primero de lo que se habló es sobre que es un programa de computadora, y como las cosas encajan entre sí. Esta es la pizarra en la que estuvimos trabajando:

pizarra de clase 1

Algunas de las ideas de que hablamos:

  • Cómo funciona una computadora. La parte principal del equipo se compone de un dispositivo que sigue las instrucciones (la “CPU”) y un dispositivo que recuerda información (“memoria”).
  • El lenguaje de la máquina. ¡El equipo no habla inglés, por supuesto! Sigue las instrucciones en un lenguaje llamado “lenguaje de máquina”. Este idioma lo entiende muy fácil el equipo, pero es muy, muy difícil escribir programas en este lenguaje.
    (La “CPU” tampoco entiende español, portugués, etc. lenguajes “naturales” para el caso pues. -N. del T.)
  • Compiladores. En lugar de escribir nuestros programas en lenguaje de máquina, las escribimos en otros idiomas, y luego la computadora los traduce para nosotros[, al lenguaje que éstas pueden entender]. El programa que hace esto se llama compilador.
  • Algunos lenguajes de programación. ¡Tenemos varias opciones al elegir el lenguaje de programación que podemos utilizar para escribir programas de computadoras! Hablamos en la clase de algunos lenguajes de los que los niños han oído hablar: Java, C, C++, Objective C, JavaScript, Java y Smalltalk -¡sí, Marcello había oído hablar de Smalltalk! Quedé muy impresionado. El idioma que estamos aprendiendo en esta clase se llama Haskell.
  • Bibliotecas. Las bibliotecas son piezas para los programas, que otras personas han escrito para nosotros, y así no tenemos que empezar de cero. Pasamos algún tiempo imaginando todos los pasos necesarios para lo que podríamos considerar cosas muy fáciles de hacer con un ordenador. Por ejemplo, de todos los pequeños pasos en la presentación de una ventana en la pantalla… ¿Cuántos círculos, rectángulos, líneas, letras, etcétera; pueden encontrarse en una ventana en la computadora? Las bibliotecas le permiten a alguien describir cosas más directamente para no hacerte repetir todos los pasos cada vez.

[En esta primera clase] hablamos de como vamos a utilizar:

  1. Un lenguaje de programación llamado Haskell.
  2. Una biblioteca llama Gloss (“brillo” -N. del T.).

A jugar

En este momento, todos utilizaremos un sitio web para escribir algunos programas simples de computadora usando Haskell y Gloss. El sitio web es:

http://dac4.designacourse.com:8000/

Empezamos con algunos programas muy simples, como las siguientes:

¡Tu primer círculo!


import Graphics.Gloss
picture = circle 80

¡Ahora un rectángulo!


import Graphics.Gloss
picture = rectangleSolid 200 300

¡Muestra unas palabras!


import Graphics.Gloss
picture = text "¡Hola!"

Todos estos programas tienen algunas cosas en común:

  • La primera línea de cada uno de estos es import Graphics.Gloss.
    Esto le dice al compilador que desea utilizar la biblioteca Gloss para crear imágenes. Sólo se tiene que escribir una vez y debe estar al comienzo de tu programa.
  • Todos ellos dicen picture = ... .
    Esto se debe a que el trabajo de nuestros programas es hacer una imagen y lo llaman así (picture es imagen, en inglés). El sitio web que estamos utilizando crea esta imagen, del modo como definimos que debe ser y la presenta para nosotros. Hablamos de como en el futuro, podemos definir otras cosas, con otros nombres, pero por ahora, estamos bien con sólo decirle al compilador lo que la imagen debe ser.
  • Después de el signo de “igual a”, describimos la imagen que queremos dibujar. Hay varios tipos de dibujos ¡y hemos visto ya tres de ellos! Todos los tipos de dibujos que podemos crear son parte de la biblioteca Gloss.
  • A excepción de la última, todos utilizan medidas. Por ejemplo, el 80 en el primer ejemplo es el radio del círculo (la distancia desde el centro hasta el exterior). Puedes crear un círculo más grande con un número mayor y un círculo más pequeño con un número menor. Y es igual con la base (el ancho) y la altura del rectángulo.

Hubo problemas para algunas personas utilizando el sitio web. Si estás teniendo problemas, puede que tengas que asegurarte de que tienes una nueva versión de tu navegador web. Además, el sitio web no funciona con Internet Explorer… de modo que mejor trata con Chrome, Firefox, Opera o Safari. No te preocupes demasiado con el hecho de que un navegador no entiende bien, pronto instalaremos el compilador de Haskell en tu propia computadora, y ¡ya no tendrás que ir al sitio web para ejecutar tus programas! Sólo estamos por ahora con el sitio web para empezar a experimentar inmediatamente.

¡Dibujando más de una cosa a la vez!

En este momento, los niños se preguntaban si se puede dibujar más de una forma a la vez. ¡Sí puedes! Para dibujar más de una cosa, utilizamos la palabra pictures (el plural de picture -imagen-, es decir, imágenes). Por ejemplo:


import Graphics.Gloss
picture = pictures [
circle 80,
rectangleWire 200 100]

Observa lo que hicimos:

  • La palabra ahora es “pictures” (imágenes).
  • Abrimos con un corchete una lista.
  • La lista de imágenes, separando con una coma cada imagen de la siguiente.
  • Cerramos con un corchete la lista.

Hablamos de como ayuda separar en líneas distintas el programa de vez en cuando. Lo único de lo que se debe tener cuidado es que cuando colocas una nueva línea, tienes que poner unos pocos espacios al inicio (una sangría). ¿Ves como en la segunda y tercera líneas de la parte de donde definimos las “imágenes” -pictures- se aplica un poco de sangría?

Cambiando tus imágenes

La biblioteca Gloss te ofrece también algunas maneras en que puedes cambiar las imágenes.

Puedes cambiar los colores con la palabra “color”.


import Graphics.Gloss
picture = color red (circleSolid 80)

Observa que escribimos “color”, el nombre del color que queremos y luego la imagen que se dibujará, entre paréntesis. ¡Los paréntesis son importantes! Sirven para lo mismo que en matemáticas, se toma esa parte entera, como una sola “cosa” (en este caso, una imagen).

Hablamos de que colores conoce Gloss. Esta es la lista: negro, blanco, rojo, verde, azul, magenta, amarillo, cian, rosa, naranja, amarillo verdoso, aguamarina, azul y violeta. Sue recordó un color de nombre extraño, preguntó -¿Conoce el chartreuse? Sí, lo conoce. ¡Vaya suerte!

También podemos trasladar los dibujos (trasladar, o sea, cambiar de lugar).


import Graphics.Gloss
picture = translate 100 50 (rectangleSolid 50 50)

Trasladar (o translate en inglés), quiere decir que algo se mueve a la izquierda, derecha, arriba o abajo. El primer número es hacia donde se mueve a izquierda o derecha; los números positivos significan cuantos pasos a la derecha, los negativos a la izquierda. El segundo número es la distancia hacia arriba o hacia abajo; números positivos hacia arriba, números negativos hacia abajo.

Ten en cuenta que en Haskell, tienes que escribir los números negativos entre paréntesis. Si escribes “translate -100”, Haskell entiende que intentas restar 100 de “translate”. No sabe como se puede restar un número de un verbo -ni lo sé yo tampoco- por lo que se da por vencido. Tienes que escribir “translate (-100)”; encerrando el número negativo entre paréntesis.

También se pueden voltear de lado las cosas. El verbo que se usa es “rotar”. Veamos como dibujar un rombo.


import Graphics.Gloss
picture = rotate 45 (rectangleWire 100 100)

Gira las formas los grados que indiquemos. Recuerda que 360 grados quiere decir lo mismo que dar una vuelta entera quedando igual que en el punto de partida, ¡de modo que no hace nada! 45 grados es la mitad de un ángulo recta. ¿Ves por qué ahora queda como un diamante?

Y lo último que puedes hacer es estirar la imagen. El verbo es “escalar” (scale en inglés).


import Graphics.Gloss
picture scale 2 1 (circle 100)

Dibujamos así, una elipse, que es como un círculo, pero de diferente ancho que de alto.

¡No te preocupes si todo esto no tiene sentido todavía! Vamos a pasar mucho tiempo jugando con la forma de poner todo esto junto. Ahora mira como quedo la pizarra después de todo esto.

Hora de los experimentos.

Pasamos un montón de tiempo con cada uno haciendo sus propias formas y dibujos o cualquier cosa que se les antojase. La mejor forma de estar más cómodos con todo esto es jugar con ello. ¡Haz montón de pequeños cambios y mira que ocurre! Intenta adivinar que pasará, y luego haz la prueba de si acertaste o no.

Éstas son algunas de las fotos de las chicas con sus proyectos:

Sophia e Evie muestran dos círculos lado a lado. ¡Estos en algún momento se convirtieron en los ojos de una cara!

Este es Grant con su rombo, aunque se vio aún mejor después de que lo estiró un poco por ambos ejes.

Este fue el dibujo de Marcello, ¡centrando la palabra en el círculo tomó mucho tiempo! Si lo intentas, notarás que el texto no queda centrado automáticamente como las otras figuras, de modo que Marcello lo intentó y falló muchas veces con “tranlate” para lograr poner la palabra en medio del círculo.

¡Y ésta es Sophia muy emocionada de lograr poner los dos ojos en los lugares correctos!

Tu misión

Tu misión, si decides aceptarla… ¡es planear y crear un dibujo de algo que te interese! Tal vez es solo un pez, un jardín, una estación espacial, un dragón… sólo asegúrate que puedes dibujarlo con rectángulos y círculos de diferentes colores, y moviéndolos, girándolos o estirándolos. Aquí en la pequeña escuela (de Vermijo) estaremos trabajando en esto por algunas clases más de ésta y la próxima semana.

¡De modo que pasa algún tiempo con ello y ven con algo de lo que te sientas orgullosa la semana siguiente!

Anuncios

Educate in Freedom Project

Educate in Freedom is a pedagogical-political libertarian option.

Our job is to help empower youth, children and adults in underprivileged communities through the appropriation of free and open source software, thus spreading the socialization of knowledge and freedom of culture.

We study and we want to implement among our most important references, the proposed Paulo Freire‘s popular education and other educators whose common essence is to attack the dichotomy between teacher and students (and software developers, users), suggesting a self-management education for communities, empowering them by knowledge to the construction of their liberty.

At this very moment we’ve only had experiences in Mexico”s city and eastern part of the Estado de México, but it would be great to connect with educators from other lattitudes, share ideas and if possible, build a language and a common proposal for network action.

  1. Initial experiences of popular education with Free Software
  2. Medium-term purposes
  3. Immediate obstacles
  4. As we plan to overcome them.

Initial experiences of popular education with Free and Open Source Software

In 2009 I had the opportunity to work directly with children in an elementary school in Chimalhuacán, Estado de México, in very poor condition (no internet, less than a dozen computers for about 400 children, without any employment benefits), but with great enthusiasm to see how kids would get the idea of free software. Prior to that, my experience was in workshops with activists, activist of unions and media more “politicized” but had not explored further the educational proposal of FOSS, except for GCompris, that my daughter loves.

The experiment was short, a few months, but the kids fed my enthusiasm, and they were fascinated about:

  • educational programs (Tux4Kids, GCompris, KDE educational suite, we could glimpse a little of Scratch)
  • not have to learn Word, PowerPoint and Excel (Can you imagine a boy or a girl of 8 years having to write formulas, and formatting cells as the best they thought they were teaching?)
  • but first at all to share, some guys took their pendrives to me asking for copies of the software we had installed on the school, and they loved the idea that they weren’t commiting neither piracy nor spreading viruses. And also could copy it and give it to their friends, or downloading new versions from the Internet.

After several months I volunteer at a community center with computer lab (a building dependant of the Autonomous University of Mexico City (Casa Talavera)), where we worked more freely and showcased the free and open source software to children and adults, even elder folks. It was a wonderful experience, full laboratory migrated to Ubuntu, the children especially loved the game tournaments we organized, in addition to support homeworks as requisite for some to get a chance to play with others. Other guys we had to settle for more support as friends, since they being very young (12-15 years) and already they had to help their parents at very hard work. A very difficult environment but it just left us lessons and experiences filled with emotion.

The elderly did not feel so drastic the change from Windows to GNU / Linux, but it was much more clear to them what was the idea of free software, and they had talked about this and we get them involved and contribute to the migration and support the workshop ICT literacy, some even brought their PC at home so that they be installing the new operating system that they liked seeing so much happier than the small kids :D, forgetting to check that virus and seeing all the games that we had running in the lab PC.

We also learned a lot from our fellow adults, as always posed challenges for which we had no lesson plans, we were anchored in part to the same office core curriculum is relatively useful in training for work, but does not respond to the needs of all adults, which as we learn, it is not the labor factor, a lot of they are more interested in acquiring learning skills they can apply to pursue a more self-learning and also more social.

In conclusion of this year, we learned that the proposed common core curriculum of digital citizenship, doesn’t always work. And we are study to better develop our proposals for future literacy projects with online extension for graduates of basic workshops.

Medium-term purposes

  • Learn how to design online courses in order to build better experiences aimed to the real needs of the communities in which we intend to continue Educate in Freedom.
  • Working again with adult groups on ICTs literacy in a broader sense that ‘catch get to work.
  • Update our educational curriculum for children in elementary school, through proposals to integrate the learning of computer science, with the exercise of their rights to identity, and freedom of opinion, research and dissemination of ideas.
  • Partnering with online educational projects that allow us to contribute our experience and ideas to other processes as well as provide alternatives to outreach, continuing education to our students through online workshops.

Immediate obstacles

Our inability to manage public spaces administrators working a regular schedule, even without more resources than the use of some computer equipment.

As we plan to overcome them

  • Apply instructional design principles to our proposal for Literacy with ICT to adults, soon to get more spaces where we work with adults.
  • Open our proposal ICT literacy with children, to open source community so that we can implement it more clearly in a classroom or after-school laboratory like Clubhouses (unfortunately, Casa Talavera of UACM will remain closed for bureaucratic decisions by the department of cultural diffusion.)
  • Start to talk about our project, or similar, and their progress, cultural venues and other events free software. And once more outlined our proposals, to submit to various public institutions responsible for digital extension.

My first proposal, under development, based on shared experiences with people of Casa Talavera. (in Spanish)

Facebook, tramposo y nada recomendable

Borrando tu cuenta en Facebook“Facebook: Lee lo que está entre líneas.”

A nadie debería sorprender, pero la gente que lee con cuidado los contratos, incluídos los ingenieros de Google están yéndose en bandadas.  ¿Por qué? Simple y llanamente porque Facebook (FB) ha venido de mal en peor en términos de privacidad y propiedad de contenidos.

El principal problema es que Facebook ahora por defecto, permite que otros sitios, por acuerdos comerciales, obtengan tu información personal y la ‘personalicen’ para evitarte pasar el tiempo.

Dan Yoder disfruta de los sistemas abiertos y trabaja como ingeniero en Invetigación y Desarollo para AT&T. El es otro de los que abandonan Facebook, borrando su cuenta, pero no sin antes decirnos las razones por las cuales tomó la decisión:

10 razones convincentes para borrar su Facebook

10. Los Términos de Servicio sólo le favorecen a la compañia. Ahí se establece que ellos son los dueños de tu información personal (sección 2.1), y si tu cuenta no es veraz y está actualizada (sección 4.6), cierran tu cuenta (sección 14).

Para los que no sea obvio: si tú publicas un libro, el contenido y las ideas siguen siendo tuyos, aunque el copyright de la obra (como producto) lo cedas a la editorial, pero si publicas en Facebook, ya no es tuyo nada, ni tus fotos, ni tus artículos, ni nada. Y si los usas en otra parte, podrían demandarte por usar los contenidos que tú ya les regalaste.

9. Mark Zuckerberg tiene historia de conducta antiética. Un gerente de la companía más grande en redes sociales debe pagar 65 millones por que supuestamente se robó la idea original detrás de Facebook. A él le estamos cofiando nuestra información.

8. Facebook libra una guerra abierta en contra de tu privacidad. No solo quiere saber todo de tí, y ser dueña de tu información personal, pero también ofrecerla a particulares con fines de lucro.
Sigue leyendo

Una cebolla rota

Nunca pensé que mi felicidad y bienestar pudiesen depender de una pequeña cebolla verde.

Para aquellos a quien aún no les sea familiar, es una aplicación, que te permite acceder a Internet utilizando una dirección IP que se mueve por toda una comunidad. El proyecto llamado TOR (The Onion Routing) se inició para ayudar a la gente en áreas de extrema vigilancia en la red para dar la vuelta a los firewalls y comunicar con el mundo exterior. La red de relays (re-transmisores) se construye por voluntarios que donan cierta cantidad de ancho de banda y dejan sus computadoras encendidas con el propósito de ayudar a la gente en lugares como China e Irán. El ícono del software tiene la forma de una cebolla ([por su diseño en capas]), que rápidamente ha llegado a ser un producto de primera necesidad en muchos hogares de China.

Hoy, la vida en China es descrita y muy distinta según se encuentre dentro o fuera del Gran Muro [(Firewall)]. A menudo para una simple búsqueda de investigación, nos vemos forzados a encender la pequeña cebolla verde y escalar para ir al otro lado del muro. Y ni siquiera es que todo sea ‘información sensible’, sino meramente cosas como un artista mostrando sus imágenes en flicker o un video en YouTube.
Sigue leyendo

Por que no vamos a firmar el Manifiesto por el Dominio Público

Traducción libérrima del artículo de Richard M. Stallman.

El Manifiesto del Dominio Público en esencia está en lo correcto en tanto objeta algunas de las injustas extensiones del poder del copyright, así pues desearía apoyarlo. Sin embargo, se queda muy corto respecto a lo que es necesario.

Hay algunos defectos a nivel de hipótesis implícitas. El manifiesto frecuentemente usa términos de propaganda de la industria del copyright como “protección del derecho de copia”. Estos términos fueron escogidos para conducir a la gente a simpatizar con la industria del copyright y sus demandas de poder.

El manifiesto y sus firmantes usan el término “propiedad intelectual”, que [mezcla y] confunde el tema del copyright agrupándolo junto a una docena de otras leyes que no tienen nada significativo en común. (Lea “espejismo seductor” para más explicación acerca de esto.) Irónicamente, utiliza el término en primer lugar en un enunciado que señala que este manifiesto está interesado sólo en las leyes de copyright, no con aquellas otras leyes. Eso tiene una buena razón: las otras leyes no son relevantes a copiar y usar obras publicadas. Si estamos buscando instruir al público a distinguir entre estas leyes, deberíamos evitar dar un [mal] ejemplo con agregados espurios.
Sigue leyendo

Comparando *binarios* con Bash

Actualización por Gunnar 11/Feb/’10 22:00. Script más breve aún y elegante. ¡Gracias Gunnar!

#!/bin/bash
# Elimina el uso de temporales, y usa descriptores de archivos.
[ $# -lt 2 ] && echo "Usage: $0 file_a fileb" && exit 0
if [ -f $1 -a -f $2 ]; then
diff <(hexdump $1) <(hexdump $2)
fi

En el artículo original, se describe este sencillo script para un proyecto de ingeniería reversa, intentando encontrar la estructura de archivo de datos. Mientras un simple diff hace bien el trabajo con archivos de texto, lo que vemos es un pequeño rodeo que hace el trabajo, y para nuestra suerte el tipo es todo un hacker, que se tomó algunos minutos para compartir la solución.

Aquí está el poema original (el de Gunnar es todo un haikú, y nos lo explica en sus comentarios):

#!/bin/bash
# script to compare two binary files
TMP=/tmp
[ $# -lt 2 ] && echo "Usage: $0 file_a fileb" && exit 0
R1=`mktemp -u -p /tmp XXXXXXXX`
R2=`mktemp -u -p /tmp XXXXXXXX`
if [ -f $1 -a -f $2 ]; then
hexdump $1 > $R1
hexdump $2 > $R2
diff $R1 $R2
rm $R1 $R2
fi

Como pueden ver, si se usan adecuadamente las capacidades de bash puede llevarnos a código más sencillo y más fácil de corregir y mantener.

Esas pequeñas cosas en la vida de un(a) hacker

Cuando pasas mucho tiempo hackeando o corriendo un sistema operativo altamente personalizable como GNU/Linux es inevitable que a veces te metas en algún pequeño problema pero de ningún modo pasa de una molestia, a ser realmente un obstáculo grave para seguir trabajando.

En el curso de programar o mantener un sistema complejo, los grandes problemas son a menudo un indicador de que necesitas una mejor educación en algo, o que han surgido porque tienes detalles muy específicos a tu propio contexto, y entonces debes deiseñar tu propio camino para ‘darle la vuelta’. En este último caso, nadie excepto quien comparte tu mismo predicamento podría ayudar. En aquel otro (que nos falta estudiar) están bien atendidos en Internet, en forma de tutoriales por ejemplo. Pero la solucion a pequeños problemas puede, sólo a veces, ser frustantemente elusiva y difícil de hallar en la WWW.

Probablemente ya sepas a que me refiero por “pequeños problemas”: