Link del día: The Hello World Collection

Muchos de nosotros hemos querido comenzar a aprender algún lenguaje de programación, y de seguro lo primero que hemos visto en ese lenguaje es el famoso “Hola mundo”, que no es más que un simple programita que da como salida visible una cadena de texto “Hola Mundo”, o en su versión original, “Hello world”.

Alguno se lo han tomado de forma humorística/simpática y han decidido hacer competencias respecto de esos programas (qué recuerdos! Hasta mi entrada aparece ahí), pero hay quiénes se lo han tomado de forma más… académica? y han decidido hacer una compilación de programas Hello World para exponerlos como muestra de cada lenguaje. útil? Interesante? Ustedes deciden.

Sea como sea, me gustó mucho The Hello World Collection.

Soy un zorrinito saludador.

(Read more →)

Link del día: Google Tech Talks

De casualidad me enteré de la existencia de un canal de Youtube llamado Google Tech Talks, en donde Google ha subido muchas conferencias sobre distintos temas. Según lo que ellas dicen: “Google TechTalks (Las conferencias técnicas de Google) están diseñadas para diseminar un amplio espectro de vistas sobre varios temas, incluyendo temas de actualidad, ciencia, medicina, ingeniería, negocios, humanidades, derecho, entretenimiento y las artes.

Las charlas son todas extensas y detalladas, y supongo – he visto de ellas poco y nada – que algunas son mejores que otras. Estuve tentado de mencionar algunas categorías, pero la vasta extensión de temas tratados me lo hace imposible. Además, me siento interesado en todo, desde análisis económico hasta ingeniería reversa, desde autoayuda hasta ecología.

Como dato extra, voy a mencionar que llegué ahí por un video que encontré en Youtube, bajo la categoría de The Clean Code Talks, que para nosotros desarrolladores es altamente interesante, y parece que tienen conceptos bastantes radicales, ya que por ahí escuché mencionar que los Singletons son malas ideas (y tanta estima que yo les tenía!), pero es cuestión de ponerse a analizar todo lo que cuentan ahí.

Soy un zorrinito variado.

(Read more →)

Link del día: IETester

IETester es otra de esas herramientas que nos permite probar nuestras aplicaciones o páginas web en distintas versiones de Internet Explorer, esta vez yendo hasta la versión 5.5 (aunque creo que ni deberíamos preocuparnos en probar esa). Es una aplicación de escritorio para Windows que podemos instalar y así renderizar nuestras páginas favoritas para que sean rotas de distintas formas.

Sin embargo, visitando el sitio ya me encontré con otras cositas interesantes. Una de ellas es MyDebugBar, una barra de herramientas para Internet Explorer que le agrega muchas funcionalidades para el desarrollo y testeo de páginas web. Tristemente es shareware y pasados los 60 días debemos comprar una licencia.

Otras herramienta que la misma empresa dispone de forma gratuita es (aparte de IETester) Companion.JS, un plugin al estilo Firebug que le agrega muchas funcionalidades para manejo de javascript, debuggeo, evaluación, etc. para Internet Explorer, algo que a muchos nos venía faltando.

Soy un zorrinito wheeee!

(Read more →)

Link del día: Git#

Y de vuelta, otro sistemita que está portado a C# (lo lamento VBUsers, yo soy de la otra camada, aunque en su momento fui alguno de ustedes). En este caso, se trata de Git, el famoso sistema de control de versiones que estaba pensado para ser rápido, performante y light.

Ahora con Git# tenemos el código de Git portado a .NET, la idea es poder utilizarlo como parte de algún sistema, o de nuestro propio sistema de control de versiones. Quizá la base de datos de algún sistema que vayamos a diseñar (cuando una base de datos relacional no era la respuesta porque, por ejemplo, tendríamos que guardar archivos). Quizá un sistema de control de versiones con ciertas restricciones extras que quisiéramos agregar. Quizá un controlador de cambios sobre ciertos archivos. Quizá un backup automatizado. En fin, cualquier cantidad de cosas que ahora podemos aprovechar para usar el motor de Git, directo en nuestro entorno .NET.

Si bien la noticia actual es solamente del primer release público, tenemos que saber que los módulos que lo integran se encuentran en beta y en alpha, con lo que muy seguramente le queda mucho camino por recorrer, pero no deja de ser una opción interesante para el futuro.

Soy un zorrinito C#.

(Read more →)

Joomla

Hace ya algún tiempo que me encuentro desarrollando un proyecto en Joomla, del que quizás hablaré en otro momento. Mi impresión personal del sistema en un principio era buena y prometedora, pero hubo varias razones que luego me hicieron pensar lo contrario. Me sentí raro de tener esa sensación de un sistema tan conocido y usado, pero de alguna forma me alegra no ser el único.

La primera cosa que me impactó en mal sentido es la pobreza de sus actualizaciones. Hace años que vengo escuchandoo de Joomla en su versión 1.0, para que la actual de hoy sea la 1.6 y hace tiempo que ya no veo actualizaciones… cosa más preocupante cuando realmente creo que hay cosas que urgen ser remediadas. Sin embargo, entre ellas hay cuestiones que son de nivel arquitectural, que me atrevo a destacar (citando otras lecturas al respecto).

Antes de entrar en eso, no quiero comparar Joomla con otros CMS (por más que la tentación me lo indique). Sé que CMS hay muchos, y cada uno tiene un enfoque distinto en la forma en la que deben tratarse los datos, los flujos del usuario (es decir, nosotros), la forma en la que debería extenderse, y otras cuestiones extras. No soy quién para decidir si el enfoque de Joomla es correcto o no, incluso a pesar de no encontrarlo cómodo personalmente, pero esa es una apreciación propia.

Voy a completar mi lista citando varias cosas que dijo AhYap en su review de Joomla.

Yendo a los elementos, Joomla hace una suerte de nice URLs pasando parámetros al index.php. Si bien esto puede solucionarse con un .htaccess fácilmente, según parce, Joomla no posee ningún manejo interno de las mismas. No es algo end-user, como quisiera venderse (o como parecería intentar serlo su administrador interno).

Joomla, en su versión 1.6 todavía no tiene soporte para los comentarios a los artículos. Esto me sorprende profundamente. Muchísimos (casi todos?) los sistemas CMSs poseían esa posibilidad, lo cual le daba algo de interacción al usuario, pero… aquí no apareció.

Joomla utiliza categorías y secciones. Si bien el concepto es fácil de comprender, es solamente una jerarquía de dos niveles y estática. Esto trae grandes problemas o, peor, quita flexibilidad. Prácticamente todos los sistemas han adoptado la política de los tags, que podríamos considerar como un superconjunto de categorías únicas. Otros sistemas también agregan la posibilidad de creación dinámica de categorías y de múltiples niveles jerárquicos a demanda.

El punto 4 que menciona AhYap es donde quiero detenerme. Programar en Joomla puede ser muy fácil, o puede ser traumático. La documentación disponible es realmente poca, y mucho de lo que hay se encuentra desactualizado. Peor todavía, Joomla impide el diseño de capas desacopladas, porque no permite la independencia de la forma de generar datos y la forma de mostrarlos. Esta terrible característica pone trabas desde el momento del diseño al momento de la implementación cross-browsing, haciendo que muchos buenos diseños terminen modificándose a la peor de las formas.

Alguien me dijo alguna vez que ya todo estaba hecho para Joomla, solo faltaba buscar el componente e instalarlo. Si bien es cierto que la web está atascada de componentes para Joomla, es un ejercicio interesante entrar a Milw0rm y hacer una búsqueda al respecto. Hagan el ejercicio y busquen Joomla. Igual de atascado y eso no es bueno.

Esto ha sido mi gran decepción. En el intento de creación de un template, tuve en cuenta las mejores y más prolijas prácticas para la web y PHP, para luego tener que desechar muchas para lograr que el sitio se viera como debiera verse. Decepcionante en verdad.

Su organización interna me resultó, por otro lado, terriblemente anti-intuitiva (ni mencionar que creo que le falta un poco de amigabilidad de interfaz). Leyendo la ayuda logré identificar la forma de configurar correctamente su comportamiento, pero se supone que debería de lograrse de una forma más intuitiva. Ofrece (o quiere ofrecer) mucha flexibilidad de contenidos, pero la configuración es ciertamente compleja, cuando se supone que está pensado para los usuarios finales.

(Read more →)

Link del día: C# SQLite

Por si no lo conocían, SQLite es una versión base de datos portátil, citando al sitio: “es una librería de software que implementa un motor de base de datos SQL auto-contenido, sin-servidor, sin-configuración y transaccional.” Además, es un motor realmente conocido y usado en muchos lugares (ejemplo, Firefox lo utiliza para el almacenamiento de sus configuraciones y preferencias, o muchas aplicaciones móviles lo usan por su rapidez y sus pocos requerimientos).

Por si fuera poco, además es gratuito y open source. Actualmente su código se encuentra escrito en C, aunque ya hay varias versiones compiladas para Linux, Mac y Windows.

Hace no mucho (desde Julio de este año) está disponible online el proyecto CSharp-SQLite, una versión portada a código managed C# de este motor de base de datos.

Yo ya estoy esperando la oportunidad para probarlo.

Soy un zorrinito lite.

(Read more →)

AI: Introduction | IA: Introducción

As a personal debt, liking and project, I proposed myself to read the whole book Artificial Intelligence: A Modern Approach (among others) by authors Stuart Russel and Peter Norvig. It is a very recommended book in the subject and just by the size one can tell why. The second edition is the one in my hands and the one I attempt to comment. Due to the same reason (which is it’s great extension and detail), my notes about the book and the subjects this one treats won’t be a summary of them, but personal notes or ideas that may come out of it.

The first chapter, with the title of Introduction is the one I’ll comment right now, and it is in part about the history of Artificial Intelligence as a cience and what other currents were influences or had influenced this one. It is very curious to see how it is something so polemic to suggest imitations of human intelligence, to suggest that machines, algorithms, methods can be “inteligent”, but I personally think it its part of the magic of all this, and one of those points that give so much motivation to investigater further. I don’t doubt that this’ll be a subject deeper dealt with later in the book, so I allow myself to finish my idea here.

It is also notorius to see how artificial intelligence had always been strongly related with other ciences, which makes it particullarly useful and extense, having so many different implications. ¿Would this have epistemologic implications?

On other hand, I’m still suprised (even when I already knew) that there are so many different approaches to define what artificial intelligence is, as it seems that there are different objectives for the same science. The curious thing about this definitions is that they may seem to be mutually exclusive on the way they define intelligence. Half of them take as a reference point the human being, and the others (and this is the interesant part), do not. Those theories consider intelligence against a theoric base where agents should behave a certain way on a certain situation. This subtle difference implies a deep difference in the philosophic conception of all this, as it could get down to conclude that a human being may not be intelligent at all whereas a machine would be. Again, I’ll allow myself to not dig further into this thoughts right now.

Another interesting point is to know that in the 70’s investigators had already generated algorithms that solved intelligence tests (for instance, the ANALOGY program by Evans, for which I though I would have found easily an online version, but I haven’t). This is another great improvement in the demonstration that artificial intelligence really exists. ¿What do we have today, almost in 2010?

Over there in the chapter I read that in an article, Marvin Minsky, along with other investigators had demonstrated that a two-input perceptron couldn’t had the chance of defining when its two inputs where different. This, despise being a detailed fact, imposes a big limit on this whole area, and knowing the existence of those theoric limits is the other part that’ll let us know the real potential of all this, with its boundaries included. I hope I can read that demonstration soon.

With this, my notes on the first chapter of this book finishes, hoping I’ll be able to get on with it on the further ones soon.

I’m an artificial little skunk.


Como deuda personal, gusto personal, y proyecto personal, me propongo leer completito el libro Inteligencia Artificial: Un Enfoque Moderno (entre otros), de los autores Stuart Russel y Peter Norvig. Es un libro muy recomendado en el área y sólo por su tamaño uno puede entender bien por qué. La segunda edición es la que poseo en mis manos y la que me propongo comentar. Por la misma razón (la cual es, su enorme extensión y detallismo), mis notas sobre el libro y los temas que este toque no serán resúmenes de lo que incluya, sino más bien notas personales o ideas que me surgen de las mismas.

El primer capítulo, bajo el título de Introducción, es el que trataré en este momento, y trata en parte de la historia de la Inteligencia Artificial como ciencia y qué otras corrientes fueron influenciadas o influyentes de esta. Es muy curioso observar cómo es algo tan polémico plantear imitaciones de la inteligencia humana, plantear que haya máquinas, algoritmos, métodos que sean “inteligentes”, pero personalmente creo que es parte de la magia de lo mismo, y una de esas cosas que tanta motivación dan para investigar más en el asunto. No dudo que este será un tema abordado más adelante en el libro, así que me permito terminar esa idea aquí mismo.

También es muy notorio ver cómo la inteligencia artificial se ha relacionado fuertemente con otras ciencias, lo cual la hace particularmente útil y muy abarcativa. ¿Tendrá esto implicaciones a nivel epistemológico?

Por otro lado, me sigue sorprendiendo (incluso a pesar de ya haberlo sabido) que existan varios enfoques distintos para definir la inteligencia artificial, pareciendo que existen varios objetivos para la misma como ciencia. Lo curioso de estas definiciones es que parecen ser excluyentes entre sí por la forma en que definen la inteligencia en sí. La mitad de ellas toman como referencia al humano y las otras (y esto es lo interesante), no lo hacen. Estas teorías consideran inteligencia una base teórica en donde los agentes deberán desenvolverse de una forma determinada ante una situación determinada. Esta sutil diferencia implica una separación profunda en la concepción filosófica de todo esto, ya que podría determinar que un humano no sea inteligente cuando una máquina sí lo sea. Me permitiré no avanzar más sobre este pensamiento tampoco ahora.

Otro punto interesante es el saber que ya en la década de los 70’s, los investigadores habían logrado generar algoritmos que resolvían tests de inteligencia (por ejemplo, el programa ANALOGY de Evans, del cual creí que sería fácil ver una versión actual online, pero no ha sido así). Este es otro gran avance en la demostración de que existe la “inteligencia” artificial. ¿Qué cosas tendremos hoy, casi en el 2010?

Por ahí leí también que en un artículo, Marvin Minsky, junto con otros investigadores habían demostrado que un perceptrón de dos entradas nunca tendría la posibilidad de definir si sus dos entradas eran distintas. Esto, más allá de ser un dato detallista, impone un límite a todo ese área, y conocer la existencia de esos límites teóricos es la otra parte que permitirá conocer el verdadero potencial, con sus limitaciones incluidas de varias áreas de la inteligencia artificial. Espero leer detalles de esa demostración en algún futuro.

Con esto finalizan mis notas sobre el primer capítulo de este libro, esperando poder avanzar más sobre los siguientes.

Soy un zorrinito artificial.

(Read more →)

Link del día: Unicode Table For You

Recuerdan que alguna vez hablé un poquito de encodings, y allí explicaba cómo surgían varios tipos de codificación? Entre ellos está el famoso Unicode, que tiene de fantástico ser una especie de codificación “que nos va a servir para todo! (o al menos para varios años más)”… ahora, lo problemático de este encoding es su vasto tamaño, casi como que no podemos saber qué tiene, porque se supone que está casi todo pero no tenemos alguna forma cómoda de navegarlo.

Y aquí es donde la necesidad se volvió la madre de la invención en donde Unicode Table For You nos permite curiosear dentro de esta codificación y ver todos los simbolitos que se han asignado, por páginas y solo navegando con tres sliders de distinta magnitud.

Curioseen, y si quieren buscar algo en particular, siempre pueden hacerlo desde Unicode Character Search de FileFormat.info, o navegarlo de alguna otra forma.

Soy un zorrinito de 16 bits.

(Read more →)

The Emotion Machine: Emotional States, Attachments and Goals, From Pain to Suffering

Alguna vez publiqué algo de información sobre el libro de Marvin Minsky, La Máquina de Emociones _(_The Emotion Machine), pero nunca había tenido la oportunidad de leerlo en profundidad. Finalmente, a través del paso del tiempo, fui avanzando sobre las páginas – si es que es válida la expresión – del mismo.

El libro es en extremo interesante, pero desafortunadamente la versión online tiene muchos rasgos que nos hacen notar que se trata de un borrador previo a la publicación, debido a la forma poco explicativa de ciertos conceptos, pero no por eso deja de ser muy entendible, siempre cargadísimo de ejemplos y explicaciones que nos permiten comprender lo explicado.

El primer capítulo, Emotional States (Estados Emocionales) plantea principalmente la teoría que se desarrollará durante el resto del libro: las teorías de ciencias cognitivas por lo general fallan porque buscan explicar la mente bajo reglas simples, siendo que posiblemente sea más compleja de lo que estas leyes plantean. Entonces, ¿por qué no plantearla como una combinación de elementos que se relacionan de forma compleja?

Introduce la idea de los recursos, que son (según su teoría) elementos que producen distintas respuestas dentro del comportamiento humano, y cada recurso puede a su vez generar acción en otros recursos. A medida que el tiempo pasa y aprendemos a controlarnos, estos recursos tienen reforzadas o disminuidas las relaciones entre sí, lo que formaría nuestra personalidad. Las emociones fuertes son aquellas que más recursos despiertan, o que generan cascadas de gran intensidad, dejando salir entonces aquellos recursos que más se manifiestan en nosotros de forma más fuerte.

El segundo capítulo, Attachments and Goals (Afectos y Logros) habla de esto, de la forma en la que aprendemos a enlazar ciertos comportamientos con ciertas situaciones. Se introduce el concepto de planificación, el cumplimiento de submetas subyugadas a una meta principal, y el concepto de impresor (imprimer), como aquél agente externo del cual aceptamos el premio o el reproche para modificar nuestra conducta. Finalmente los contrasta contra los conceptos de modelos o impresores ficcionales que modelan nuestra conducta de otra forma.

El tercer capítulo, From Pain to Suffering (Del dolor al sufrimiento) comienza tratando algo de lo que el primer capítulo trató: ¿Cómo es que una emoción fuerte comienza a despertar muchas sensaciones distintas? ¿Cómo es que una emoción o sensación fuerte puede hacernos perder completamente la noción de dónde estamos o qué estamos haciendo? ¿Qué tiene de bueno eso? Aquí también vuelve a hablarse un poco de cómo es que un recurso puede accionar otros y cómo es que la mente puede inducirnos a ciertos estados provechosos para nosotros, aprendiendo de esa misma relación entre recursos (aunque queda pendiente todavía la explicación de cómo la mente tiene auto-conciencia sobre su funcionamiento). Finalmente se hace una contraposición entre las teorías de la conciencia de Freud con la teoría de los recursos activándose.

Hasta aquí ha llegado mi lectura del mismo, pero espero pronto poder continuarla.

Soy un zorrinito con recursos.


Once ago I published some information about Marvin Minsky’s book, The Emotion Machine, but I never had the chance to get to read it deeply. Finally, with time flying by, I kept on crawling through along the pages.

The book itself it extremely interesting, but sadly the online version has lots of quirks that makes us realize it is just a draft prior to publication, due to some of the poor explanation of certain concepts, but it still is quite understandable, always full of practical and simple examples and explanations that allow us to comprehend the concept being developed.

The first chapter, Emotional States proposes the theory that will be developed further in the remaining parts of the book: some cognitive sciences may fail because they want the explain mind’s behavior with simple rules, whilst probably it is really more complex than these rules may call. Then, why not treat it as a complex related element combination?

The idea of resources is introduced here, which are (according to its theory) elements that produce certain responses on human behavior, and each resource may in turn generate action on another ones. As time goes by and we learn to control ourselves, these resources will have their relationships enhanced or decreased, that would define our personality. Strong emotions that those that arise more resources, o that generate great intensity cascades, letting out those resources that are more manifested in us.

Second chapter, Attachments and Goals speaks further on this, about the way we learn to link certain behaviors to certain situations. The concept of planification is introduced here, the achieving of sub-goals subjugated to primary goals, and the concept of imprimer, as that external agent that we’ll accept the reward or the reproach in order to modify our conduct. Finally, it contrasts them against the concepts of models or fictional imprimers that model our behavior on different ways.

The third chapter, From Pain to Suffering starts with some of what the first chapter dealed with: How is it that a strng emotion arises many different sensations? How is it that a strong emotion or sensation may makes us loose the notion of where we are standing or what are we doing? What’s the benefit of all this? Also some of how a resource may activate anothers and how mind may induce us to certain states helpful to us is detailed here, although the explanation on how the mind may learn about the relation between resources and how is it self-aware on its inner working is still missing. Finally, a contraposition between Freud’s counscience theories and the activating resources theory is described.

That’s how much I’ve managed to get on with my reading on this book, but I hope to be able to continue it soon.

I’m a resourceful little skunk.

(Read more →)

Windows Azure

Varios de mis últimos proyectos han tenido que ver con Windows Azure, la versión Microsoft de cloud computing. Azure se divide en algunas secciones básicas, que al comienzo pueden ser difíciles de entender pero luego se hacen bastante naturales.

Por un lado tenemos los servicios de almacenamiento de datos en Azure, storage services, que pueden dividirse en blobs (datos de tipo blog, divididos en blobs y blogs containers), queues (colas, un tipo de dato cualquiera que se encole en forma FIFO para su consumo por otro lado) y tables. El caso de table suele ser el más útil para el programador común, ya que permite mantener todo el esquema de datos para una aplicación completa en él. Desgraciadamente, el nombre de “table” (tabla) es algo confuso, ya que no existen tales cosas como tablas o menos aún, entidades relacionales. En realidad se trata de un conjunto de elementos estilo property bags, en donde cada entidad se identifica por algún campo que designemos como RowKey y se pueden ordenar (indizar) según algún campo o combinación de campos que indiquemos como PartitionKey. Hay que estar atentos al momento de diseñar la estructura de nuestra aplicación y tener en cuenta esto, ya que de otra forma podría caerse en fallas de performance por tener necesidad de tratamiento relacional entre datos.

Otro de los servicios ofrecidos en la plataforma de Azure son los servicios .NET. Los servicios .NET de Azure pueden comportarse equivalente a una aplicación. En este caso, es el tiempo de ejecución por lo que pagaremos, cuando antes, en el caso del storage, lo que pagábamos era por el almacenamiento y la transferencia de los datos. Los servicios .NET de Azure pueden funcionar como aplicaciones web con interfaces interactivas con usuarios (web roles), como también podrían funcionar como servicios en constante ejecución en background (worker role). También, por supuesto, podemos implementar web services.

Finalmente, el tercero de los pilares para Windows Azure es Live Services, que es una integración con los servicios de Live que Microsoft ha estado desarrollando (y continúa desarrollando) a lo largo de estos años. No he indagado prácticamente nada respecto de este tipo de servicios, pero parece ciertamente prometedor, siempre que uno pueda integrar su unidad de negocios a través de las redes de Live.

Soy un zorrinito celeste.

(Read more →)