Translate to

Buscar

viernes, 17 de junio de 2011

Cardumen de conocimientos

Muchas personas no enseñan las cosas del modo en que ellas lo aprendieron sino que lo hacen desde su punto de vista actual.

Puede ser que alguien gane con el tiempo una mejor perspectiva de lo que le pasó y eso le sea útil para enseñar mejor cierto tema. Quizás dándole más contexto, conexiones o matices que los que pudo disponer en su momento.

Muchas veces se deja pasar un tiempo, se recolecta el material para cierto tema a enseñar y se lo prepara de un modo que nos parezca lógico y cuya efectividad depende de la habilidad del maestro.

Se suele llenar al alumno de definiciones que debe recordar para cuando llega al enunciado central. Es cansado de elaborar, es cansado de aprender. Pero, principalmente, no es natural.

En contraste, cuando uno investiga en el mundo real, se enfrenta a algo que debe descubrir debajo de muchas capas, como quien pela una cebolla, e ilustrar con definiciones que va elaborando, hasta que es capaz de volver sobre sus pasos y contar la historia en limpio.

Cuando uno descubre una solución a algo, puede sentir la inspiración de anotar ese logro. Como en una bitácora. Puede ser que el conocimiento que se manifiesta en esa nota no tenga la profundidad que adquirirá cuando se lo contemple en el futuro y se lo haga formar parte de un libro de texto, pero tiene el valor de tener más fresca la perspectiva de un logro recién alcanzado.

Eso puede ayudar mucho. En mi opinión, puede ayudar mejor a que sintamos la real dirección hacia la que se mueven las cosas, que es muy difícil de percibir cuando es sometido uno a una clase preparada.

Algún maestro podría tener el talento de recordar lo que sentía cuando descubría algo y organizar sus clases de modo que inspire a los alumnos los mismo. Seguramente nos parecería un buen maestro. Pero, si pensamos un momento, podemos notar que nos acercamos también a esa experiencia al leer la bitácora de alguien que va descubriendo cosas.

Cuando descubro algo y siento que puedo escribirlo, lo hago. Siento como si eso me ayudara a mi mismo de alguna manera. Como si la gente que lo pueda leer fuera yo mismo en otro tiempo. Imagino que si todos hiciéramos algo similar, de escribir con el recuerdo fresco, sería como dejar una estela que otros puedan seguir. Quizás, como la corriente de agua detrás de un pez en un cardumen, o de un ave en una bandada, esas anotaciones puedan ayudarnos a avanzar como un cardumen de conocimiento, donde el esfuerzo comunitario puede ser mejor aprovechado.

Revisar por dónde se ha pasado, recolectar materiales, preparar clases, ¿seguiría siendo una alternativa?. Como habría gente detrás de cada escalón de conocimiento, incluso hasta las niveles más avanzados, quizás el cardumen sería la manera más natural de lograrlo.

jueves, 16 de junio de 2011

Planificación e Impulso

Cuando no se pudo enviar un mensaje de texto, revisé y comprobé que ya no tenía saldo suficiente en el celular.

Pasaron unos minutos y recordé que tenía que avisarle algo a mi hermana. Tomé el celular e iba a empezar a escribir el mensaje cuando recordé que no tenía saldo.

Yo sabía que no tenía saldo. Sin embargo, inicié la acción y sólo después de cierto avance recordé que no tenia todos los requisitos para completarla. Fue como un impulso.

Cuando uno inicia una acción por impulso, va resolviendo lo que necesita mientras avanza. Llega a un punto donde decide si continuar o avanzar.

Pero, si falta un requisito esencial, como en el caso que describo, quizás podría haber sido útil hacer una especie de planificación (como un rápido checklist) antes de iniciar la acción.

Uno podría pensar en acostumbrarse a planificar cada acción antes de realizarla. Sin embargo, pienso que siguiendo una acción por impulso, podría también, a veces, reconocerse alternativas que no son claramente visibles o evidentes en la planificación.

En mi caso, luego de reconocer por segunda vez que no tenía saldo, se formó una especie de patrón para evitar considerar otras acciones pendientes que tuvieran ese requisito, por el momento no disponible.

Quizás sería útil considerar un mecanismo similar en un sistema de planificación.

martes, 24 de mayo de 2011

Sistema con convención en lugar de configuración

Algo que me gustaba mucho de los programas DOS era que podía copiar el directorio de un programa y moverlo a cualquier lugar, incluso a otro disco, y debía seguir funcionando.

Bueno, casi siempre. Con el tiempo empezaron a aparecer programas que tomaban nota de su ubicación y la de otros directorios y había que tomar en cuenta eso a la hora de intentar moverlos.

No me agrada mucho la idea de necesitar un programa de instalación para poder usar un programa. Porque los programas instalados suelen ser difíciles de mover o eliminar. Hay que usar programas intermediarios para hacer eso. Aparece una burocracia que no ayuda a hacer más simple el mantenimiento del sistema.

En cambio, me gustan los programas portables. Que simplemente se desempaquetan y ya están listos para usar. Puedo ubicarlos en cualquier lugar. Incluso puedo tener más de una copia y ejecutar cada una de ellas de modo diferente. Es más libre.

La tendencia de usar instaladores no solo está en Windows, también en Linux. En RedHat hay que manejar rpm. En CentOS es yum. En Debian/Ubuntu es apt-get. Son comandos útiles, pero me parece que son como buena medicina para tratar los síntomas causados por un diseño que podría ser mejor. Que hay cosas que pueden ser más sencillas. ¿Por qué no se puede colocar un programa en cualquier lugar que yo quiera? ¿Por qué no se puede tener varias copias del mismo programa, si yo quisiera? ¿Por qué no puedo usar un programa después de copiar simplemente su directorio, o deshacerme de él simplemente eliminándolo?

Entiendo que está la cuestión las bibliotecas de recursos compartidos. Pero, en este tiempo de abundancia de disco, ¿vale la pena complicar la administración sólo para evitar tener duplicados?. ¿No sería más simple que cada programa pudiera contener una copia de todos los recursos que requiere?

Quizás sería más fácil de usar y valdría la pena el gasto extra de disco. Opino que simplificaría el uso de programas y tal vez incluso la programación.

Sin embargo, si se requiere usar bibliotecas compartidas, se me ocurre un modo de lograrlo sin tener que usar instaladores. ¿Qué tal si usamos convención en lugar de configuración?

Un programa puede colocarse en un lugar y se ordena que se ejecute. Entonces, si requiere algún recurso, la ruta de búsqueda es 1) explorar primero si el recurso está en el mismo directorio que contiene el ejecutable, 2) explorar luego si el recurso está en el directorio padre, 3) explorar luego si el recurso está en el directorio padre del nivel anteriormente consultado... y así sucesivamente.

Así, un árbol de programas tiende a organizarse según niveles de prioridad. Los recursos básicos del sistema estarían en el primer nivel. Más adentro los drivers. Más adentro las bibliotecas. Más adentro los programas.

Puede ocurrir que haya un recurso compartido por varias aplicaciones y un grupo requiera una versión diferente que los demás. Entonces se crea una segunda rama de directorios, cada una con una versión diferente del recurso compartido y, más adentro, las respectivas aplicaciones dependientes de ellas.

Puede ser que dentro de los directorios diferentes hayan copias idénticas de los mismos recursos. Eso se podría optimizar usando enlaces simbólicos.

Pienso que sería interesante hacer una distribución Linux con esas características.

La idea también se puede aplicar en otros lugares, como el desarrollo web. Uno puede idear un framework que busque los recursos de manera similar, de modo que no es necesario usar archivos de configuración, simplemente seguir la convención y dejar que el flujo nos ayude.

viernes, 20 de mayo de 2011

unobstrusive web dev

En el desarrollo web, cuando se trata de sites muy simples, se puede usar HTML, CSS, javascript y flash.

Para volver el site dinámico, usualmente ese trabajo debe ser reescrito, para expresarlo en términos del framework que estemos usando.

Por ejemplo, para usar PHP, en la forma simple, se puede ingresar código a la página y luego renombrarla, para darle la extensión .php.

Para usar un framework PHP de tipo MVC, hay que definir vistas que reproduzcan lo que se se veía en el diseño estático, y colocar placeholders que se reemplazan con el contenido generado con controladores y modelos.

Para usar un framework PHP de tipo Drupal, es similar. Hay que definir templates que reproduzcan lo que se veía en el diseño estático, y colocar placeholders que se reemplazan con el contenido generado con módulos.

Si luego decido cambiar de framework, hay que volver a definir las vistas/templates y la colocación de placeholders. Es como traducir el trabajo de un idioma a otro.

Durante varios años la gente viene trabajando de ese modo. Hay mucha discusión sobre reutilización de código, representación de base de datos como objetos, optimización del acceso y otros temas sofisticados de programación. Sin embargo, me parece que es una cuestión básica resolver la falta de reutilización de los diseños estáticos.

Pensemos en un sistema de vistas/templates que sea independiente del framework.

Se me ocurre que lo más simple es respetar el diseño estático todo lo que se pueda y actuar desde afuera, de manera unobstrusiva.

Es decir, alguien desarrolla un site completamente funcional con contenido estático de muestra. Una maqueta. Luego, un framework unobstrusivo entra en acción, haciendo en las páginas los reemplazos de contenido que se requieran, respetando los archivos, para que otro framework unobstrusivo pueda hacer lo mismo.

Así, uno podria encargar la programación web estática a una agencia y la programación web dinámica a otra (u otras). Si quiero probar otro framework unobstrusivo, adelante, la web estática está tal cual.

uphp es un framework PHP que contiene esa idea. Tomo un sitio estático que funciona y le voy agregando el comportamiento dinámico desde afuera, con ayuda de QueryPath, que me permite seleccionar elementos del documento web y modificarlos con lo que quiera, por ejemplo, con el resultado de un proceso.

Si tuviera luego udrupal, ujsp, o cualquier otro framework unobstrusivo similar, el trabajo de portabilidad se haría sólo en la parte de programación, y la maqueta estática y todo lo que tiene permanecería tal cual.

Se podría ir un poco más allá... ¿y que tal si se lograra evitar tener que reescribir un módulo de una versión de un framework a otra?.
Hay soluciones de envío de email, pdf, excel, multimedia, etc, implementadas de modo particular en cada framework porque no son muy compatibles un framework con otro.
Imagine que eso no importara y se pudiera correr muchos frameworks en simultáneo sobre la misma maqueta estática y cada uno hiciera una parte respetando a los demás.

viernes, 22 de abril de 2011

Estático y Dinámico

En el desarrollo web, se llama páginas estáticas a aquellas cuyo contenido está fijo y determinado de antemano.

En cambio, las páginas dinámicas tienen un contenido variable que puede ser determinado por la entrada del usuario, la hora, u otros parámetros.

De modo similar, pienso en las películas. Cuando se hace un video, se prepara todo de antemano para la presentación que se hará. Nada cambia. Es contenido estático.

Lo mismo se podría decir de las fotografías.

Me pregunto si sería posible hacer imágenes, fotografías y videos dinámicos. O incluso música. Contenido multimedia que sea variable y pueda ser determinado por parámetros externos.

Sería interesante.

Imagine un comercial con texto que se pueda cambiar sin rehacer el comercial. O que muestre diversas escenas según la hora en que es emitido.

Imagine una fotografía también con texto variable...

El efecto se puede conseguir en web programando presentar diferentes fotografías o videos según las circunstancias, pero imagine que ese comportamiento fuera parte de la fotografía o video en si mismos.

Quizás lo que se aproxima a esto sea Flash. Un archivo flash puede contener cierta programación y mostrarse diferente según ciertos parámetros.

viernes, 19 de noviembre de 2010

Polvos Virtuales

En Lima, Perú, hay galerías comerciales llamadas Polvos Azules, Polvos Rosados, y así por el estilo.

La idea es que son populares y allí uno puede conseguir cosas interesantes a buen precio.

Hace varios años empecé a recibir solicitudes de personas que estaban interesadas en tener presencia comercial en Internet. Tenían algún tipo de producto o servicio que les gustaria fuese dado a conocer en la red, de manera atractiva, como habían visto que otros negocios hacían.

Aparte de mis limitaciones como diseñador (creo que soy mejor programador), una de los principales obstáculos era que muchas veces el precio del trabajo de hacer un site era más de lo que estaban dispuestos a pagar. Y, por lo que querian pagar sólamente se podía hacer algo no tan espectacular como lo que querían para atraer a su público.

Una forma de solucionar esto es reducir la dificultad del trabajo, reutilizando elementos de una galería de trabajos previos (que yo no tenia).

Sin embargo, me pareció que había una necesidad que podía resolverse de otro modo.

Podría ser conveniente para este caso aplicar lo que hace la gente en el mundo real. Cuando alguien no puede poner una tienda es un espacio propio y exclusivo, por las dificultades, el trámite, los costos, etc., puede probar alquilar un puesto en un centro comercial, o una galería como Polvos Azules.

Qué tal si hubiera un Polvos Virtuales. Un sitio web donde uno fuese conducido por diversas tiendas, cada una de las cuales tuviera su propia página web, su vitrina, con elementos que el mismo dueño trajo, o que puede conseguir en alguna otra tienda de la galería.

Cuando uno compra en una galería, la disposición hace que uno mire otras tiendas. El flujo de clientes de una tienda ayuda a las otras.

Además, están las otras ventajas de servicios compartidos de luz, agua, teléfono, seguridad, etc. La galería virtual podría tener servicios comunes que beneficiaran a todos y con un costo por cabeza mucho más bajo que para alguien que los tuviera en exclusiva.

Las otras de la galería virtual podría ofrecer vitrinas virtuales, simples o sofisticadas, de diversos precios y funcionalidades, creadas por programadores que quisieran aprovechar esa oportunidad.

La motivacion de esta idea es facilitar a la gente ofrecer con comodidad un buen servicio a la comunidad de Internet. Seria util implementar un mecanismo de confianza, similar a las de las bolsas de productos, donde los usuarios acuerden seguir reglas comerciales más simples y eficaces que las convencionales del mundo real.  Así, pueden haber mecanismos de oferta y demanda anónimos, que faciliten a los clientes encontrar ofertas que se adecúen a lo que puedan pagar. Los proveedores contribuyen a la galería con una garantía que le permita cubrir las pérdidas que algún cliente pudiera tener por algún incumplimiento, y podrían ser amonestados o sacados del circulo de confianza si no honrara sus compromisos. De ese modo, la gente compraría y ofreceria con confianza.

Pintando como en el mundo real

En los programas como Photoshop, se suele contar con pinceles, máscaras y otras ayudas para crear imágenes.

Ese ambiente artificial de pintura permite hacer muchas cosas interesantes. Sin embargo, me gustaría contar con la posibilidad de reproducir el comportamiento de elementos de pintura del mundo real.

Por ejemplo, diversos tipos de papel, con diversas texturas y grados de absorción de tinta. Que la tinta se pueda expandir en un papel absorbente a medida que transcurre el tiempo (el cual se debería poder manipular también). Que la tinta se seque en grumos. Ver las marcas que dejen no sólo pinceles, sino espátulas, esponjas, manos, dedos u otros objetos que se puedan definir con libertad y comodidad, o conseguir de un estante.

Que la pintura se pueda aplicar como resultado de eventos físicos, como el lanzamiento de una partícula de pintura, de un chorro, de un globo, etc.

Que la pintura se pueda combinar como en la vida real, permitiendo dejar vetas mezcladas con vetas. Que reaccione a algo que haga la función de aguarrás o aceite, u otros elementos que estén disponibles también en un estante.

Poder prender fuego a la pintura de aerosol, como hacen los pintores en la calle.

Que la pintura y lo pintado pueda ser el resultado de procesos, ya sea matemáticos, como físicos, químicos, mecanicos, etc.

Crédito de la imágen: IN THIS MOMENT…