lunes, 30 de marzo de 2009

Sobre el IQ

Hace rato que tenia ganas de escribir sobre esto. Cuantas veces uno ha oído "tal persona tiene tanto de IQ" o "determinado personaje posee un coeficiente intelectual de X"
Ahora, alguna vez uno se planteó qué es un IQ??
Según wikipedia el IQ es un resultado de un test:

El cociente intelectual o coeficiente intelectual,[1] abreviado CI (en inglés IQ) es un número que resulta de la realización de un test estandarizado para medir las habilidades cognitivas de una persona, "inteligencia", en relación con su grupo de edad


La primera vez que me enteré de la existencia de esto (tendría unos 15 años) me pareció interesante, anque simplista voy a reconocer. Simplista para ser algo que "define" la inteligencia. O sea, vendría a ser, X individuo hace un test que consiste en N numero de preguntas (de logica, reconocimiento de series, patrones) y dependendiendo de como le vaya, es cuan inteligente es esa persona. Muy chato para mi gusto. Sin envargo realicé varios tests por curiosidad. No recuerdo los resultados (seguramente me salió que estoy en la media) pero lo que si recuerdo es que, siendo distintos los tests, hacer el primero me fue mas dificil que el segundo. Esto es, el hacer el primero me "entrenó" de alguna forma. Hizo que hacer el segundo fuera más sencillo, además de que sabía que esperar (a pesar de que los tests no eran iguales) me había mostrado una forma encarar ciertos problemas. Entonces, hice algunos más y noté que era como si justamente fuera un entrenamiento, practicar el tipo de ejercicios hacía que los posteriores costaran un poco menos.
De todo esto se desprende mi conclusión. Los tests de IQ dan un número a la habilidad/experiencia de una persona para resolver un tipo de problema. La inteligencia no es algo "medible" y mucho menos por completar unas series de cuadraditos o de números. Estos tests sólo dividen, y estancan. Le dicen a alguien "vos sos la media" como que no hubiera más remedio.

No me hubiera atrevido a publicar esta entradad (hubiera considerado que estos son disparates míos) si no fuera por un comentario que leí en un libro de Paenza (de las serie "matematica, estás ahí?") donde él mismo opinaba algo similar a mi.

miércoles, 25 de marzo de 2009

Estudiar Programación

Esta entrada no tiene ningún test. Sólo es para plasmar una opinión acerca de cómo se enseña (mayormente) programación en, por lo menos, Argentina.
Mejor dicho, voy a exponer como creo que se debería enseñar haciendo referencia por momentos a cómo se enseña o a aquellos aspectos que considero erróneos.

Primero, considero que los métodos tradicionales de enseñanza no son aplicables. Con esto me refiero al esquema:

Pizarrón --> Profesor --> Alumnos

Éste esquema lineal es, o puede ser, muy útil en otros ámbitos. En programación no sirve de nada. No existe tal cosa como "teóricas"(o, al menos, no debería).
El esquema que propongo es:

|----> Profesor (si se requiere)
|
alumno <--> PC
|
|-------> Google, manuales y/o pdf

Explico:
El alumno tiene una pc (una por alumno)
Al alumno se le dan tareas de programación. Es decir, se lo hace programar, subiendo en dificultad claro, pero estando en contacto con el código, debugger, y compilador (si lo hubiera) desde la primer clase.
El alumno debería tener acceso a bibliografía (puede ser impresa o material en la pc) sobre el lenguaje en cuestión. Además de google y cualquier otro medio que el profesor (o incluso el alumno) proponga.
Ante cualquier tipo de duda, el profesor debe tener el conocimiento para acercarse a la pc del alumno y ver el problema con éste.
Cada clase tiene un mini TP que hay que entregar.

Con esto logramos varias cosas:
1) Por un lado que la clase sea entretenida. Nadie quiere escuchar a un tipo hablar más de media hora.
2) El alumno comienza a programar desde la primera clase con problemas lo más reales posibles.
3) Si un alumno avanza más rápido que otro no se aburre porque va a su ritmo. Lo mismo para uno que sea más lento, no se pierde.
4) Es fácil monitorear el avance antes de un parcial o prueba.
5) El alumno se entrena en "pensar". El foco está en resolver problemas, aplicar lógicas. Memorizar la sintaxis (saber si es print, printf, sprint, etc) no sirve de mucho. Es mejor aprender a pensar lógicas, sin importar la sintaxis (para eso están las referencias del lenguaje) En todo caso, es mejor saber pensar, memorizar la sintaxis va a venir sólo con el uso mismo del lenguaje.

Cómo una excepción a lo que serían las teóricas, se podrían dedicar unas clase si es que los alumnos no poseen conocimientos de programación (es decir, si están de cero) a explicar conceptos básicos como: qué es un loop, un condicional, etc
Pero esto sólo si es necesario.

Para la evaluación, con los TP se va viendo si el alumno progresa o no (ya que son individuales)
Como final, se podría hacer un TP grande o un parcial.
En el caso de un parcial, obviamente, escrito en papel no tiene sentido (si, en algunos lados toman asi) . Mucho menos creo que haya que hacerle memorizar las sintaxis, o preguntas del tipo:
Cuántos parámetros lleva el bucle For?
Los manuales que el alumno tiene en los TP, debería tenerlos en el final o parcial. Lo importante es que sepa pensar y resolver los problemas. El memorizar la sintaxis no es, NI DEBERIA SER, la finalidad.

Para finalizar, solo quiero agregar que este esquema respondería a lo que un autodidacta haría en su casa:
- Instalar una Ide o interprete (o lo que se necesite de un lenguaje)
- Probar algo sencillo
- Programar algo mas real.
- Consultar un manual, manual online, google, etc
- Programar
- Consultar un manual, manual online, google, etc
- Programar
- Consultar un manual, manual online, google, etc
- Programar
- Consultar un manual, manual online, google, etc
- Programar
- Consultar un manual, manual online, google, etc
- Programar
....

Esta es la forma de aprender de verdad. Entonces, porqué no aplicarla (de manera más controlada si se quiere) a las cátedras y/o cursos de programación?

sábado, 21 de marzo de 2009

Octopus Project: Software Multiclipboard

Esto es sólo para darle un lugar a un soft mío.

http://octopusproject.tk/

En la página está todo explicado pero, basicamente, es un software que permite manejar hasta 8 clipboards.

viernes, 20 de marzo de 2009

Black Hole: Un link que apunta a otro

Pensando el otro día se me ocurrió probar que pasaba si un acceso directo de windows (archivo .lnk) apuntaba a otro y a su vez, ese otro apuntaba al primero.
Es decir:

A.lnk --> Apunta a B.lnk
B.lnk --> Apunta a A.lnk

Formando asi una especie de ciclo sin fin.
Obviamente, esto no se puede hacer con el sistema operativo en si, es decir, tecnicamente hablando: "el windo' no te deja, che"
Pero, con la ayuda de un editor hexa se puede lograr. El efecto (y por el cual lo nombré blackhole) es que el explorer crashea. No podés ver que hay dentro de la carpeta que los contiene.
Esto fue testeado en windows2000 y windowsXP.
En windows98... NO FALLA!!!
Aparentemente en windows Vista está corregido. La prueba que hice no falló. Quedaría ver que sucede con accesos creados en Vista, pero me imagino que es lo mismo, no va a fallar.

Procedimiento:
Antes que nada, no lo pongan en el escritorio ya que crasheará el explorer y no lo podrán arreglar mas que entrando en modo consola.

1) Crear un archivo. Digamos: C:\Prueba\A.txt
2) Generar un acceso directo al mismo. Digamos C:\Prueba\A.lnk
3) Borrar A.txt
4) Editar A.lnk con un editor HEXA. Es sencillo, van a ver varios caracteres ilegibles y, en medio de todo eso, por varios lados aparece el nombre del archivo
"C:\Prueba\A.txt" eso lo cambiamos por C:\Prueba\B.lnk
5) Copiar el A.lnk editado y pegarlo. Renombrarlo a B.lnk.
6) Abrir B.lnk. Vamos a encontrarnos que dentro apunta a B.lnk (ya que es el A.lnk editado) Reemplazamos C:\Prueba\B.lnk por C:\Prueba\A.lnk
7) Nos quedó A.lnk apuntando a B.lnk y viceversa.
8) Al entrar en la carpeta prueba usando el explorador de windows, veran como crashea.

NO me hago responsable si se les cuelga windows o algo mas desagradable pasa. En todas las pruebas que realice solo moria el explorer (y levantaba de nuevo por si solo)

Happy Testing.

Visual Basic 6 (testeo de compilación)

Queriendo compilar en visual basic 6 de la misma forma que en C (generando objects por separado y luego linkeandolos) encontré lo siguiente:

El tema es, el VB6 compila con un exe C2.exe y linkea con el LINK.exe
Lo que hice fue, reemplazar el C2.EXE por un exe mio, mi exe loguea los parametros que le pasa el vb6. Luego hice lo mismo con el link.exe y listo, tenia los parametros que le tengo que pasar a los dos exes.
El C2.exe crea los OBJ, el link, linkea.
log del C2.exe
-il "C:\DOCUME~1\Martin\CONFIG~1\Temp\VB375862" -f "Class1" -W 3 -Gy -G5 -Gs4096 -dos -Zl -Fo"C:\Documents and Settings\Martin\Escritorio\frmLala.OBJ" -QIfdiv -ML -basic
log del link.exe
"C:\Documents and Settings\Martin\Escritorio\frmLala.OBJ" "C:\Documents and Settings\Martin\Escritorio\Proyecto.OBJ" "C:\Archivos de programa\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /OUT:"C:\Documents and Settings\Martin\Escritorio\Proyecto.exe" /BASE:0x400000 /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0 /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078

Queda corregir un problema más. El vb6 genera un archivo por cada frm en un "lenguage intermedio". Se supone que es ese archivo que guarda en temporales y que genera usando el comando iL (intermediate language) Esto es una suposición mía.


Extensión XPI: Zips camuflados

Asi que eran zips camuflados nomás.
Viendo el xpi (extensión de firefox) de piratesoftheamazon con un editor HEXA veo la marca
PK
Al comienzo del file. "Es un zip" pienso. Le cambio la extensión y ahi lo tenía. Todos los files que usa, js, archivos de imagen, etc.
Interesante para hacer xpi propios.
Luego busqué en google, cosa que debería haber hecho antes :)

http://filext.com/file-extension/XPI