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 →)

Link del día: Web Usability Guidelines

Para aquellos que desarrollan web, estaría muy bueno un listado de puntos a tener en cuenta para desarrollar / evaluar / medir qué tan bien está hecho un sitio web en base a su usabilidad, o en base a la experiencia del usuario. Para eso una tentativa es usar el documento de Web Usability Guidelines disponible desde UserFocus. Es un listado de 247 puntos a tener en cuenta para el desarrollo de una aplicación o sitio web, divididas en categorías.

Soy un zorrinito web.

(Read more →)

Link del día: CrossBrowserTesting.com

Este es otro servicio que sirve mucho a los desarrolladores web, más que nada para lidiar con el problema de tener que probar el HTML desarrollado en distintos navegadores, cuando no siempre es posible tener instalados localmente todos los navegadores para probar. Es el caso, por ejemplo, de los Internet Explorer, en donde tener una versión determinada nos impide tener las demás.

Para eso está CrossBrowserTesting, que es un servicio que nos permite acceder via VNC (tanto basado en web - lo que significa que no hace falta que instalemos nada) como con un cliente VNC local, a un sistema pre-configurado por ellos con una variedad de navegadores. Una vez dentro, podemos probar lo que queramos.

En la versión gratis, cada sesión VNC está limitada a 5 minutos y cuando hacemos un pedido de conexión, nuestro pedido queda en espera, pero en la versión paga, nuestro pedido tiene prioridad sobre los gratis, y la conexión VNC puede ser ilimitada. También tenemos la posibilidad de sacar snapshots de la pantalla y guardarlos como documentación de algún proyecto.

Soy un zorrinito VNC.

(Read more →)

Link del día: Texto y Javascript

Arranquemos primero por el lado de Javascript, para lo cual tenemos una pequeña aplicación llamada Text Escaping and Unescaping in Javascript (del cual una extraña traducción podría ser “Texto en Javascript que escapa y regresa.”).

Una segunda historia relacionada a Javascript es una noticia llamada Una simple linea de Javascript desechó una venta millonaria. De todos modos, considero que el titular es un poco tendencioso, ya que no era una sola línea, sino que, de no estar esa línea, bastantes otras cosas ya la habrían desechado.

Y ahora divirtiéndonos un poco más con el texto les traigo Text Utilities, que es, básicamente, una colección de utilidades misceláneas para trabajar con texto, todo en una simple página.

Y por último, para los programadores: Hidden Features of Perl, PHP, Javascript, C, C++, C#, Java, Ruby, Python, And Others [Collection of Incredibly Useful Lists]… el título lo dice todo.

Soy un zorrinito útil.

(Read more →)

Link del día: IE6 Upgrade Warning

Este link del día, debo confesar, va acompañando un remordimiento propio y en representación del de muchos programadores web. Muchos de nosotros sabemos que Internet Explorer es uno de los navegadores más difundidos, y que más tiempo ha estado presente desde 1997 en su versión 4, que fue una de las más difundidas. Tiempo después, muchas cosas cambiaron y en el 2001, la versión 6 vio la luz.

Hoy, ocho años (ocho años!) después, todavía hay mucha gente que utiliza Internet Explorer 6. Esto es un problema para muchos programadores y diseñadores, ya que este navegador desactualizado no se comporta de la misma forma con las páginas que los nuevos. Tratar de hacer un sitio, página o aplicación web que se vea correctamente en todos los navegadores ya de por sí es difícil, pero teniendo un lastre como este se vuelve casi imposible.

Es por eso que existe un proyecto de software libre llamado IE6 Upgrade Warning, que es un script que podemos agregar a nuestros sitios que de forma muy diplomática le hace saber al usuario que su navegador se encuentra desactualizado, y le brinda opciones de otros navegadores o de versiones más nuevas del mismo navegador para descargar e instalar.

…yo creo que voy a comenzar a usarlo.

Soy un zorrinito actualizado.

[EDIT] GC me pasó este dato:

Hay un plugin de Wordpress que hace lo mismo: http://wordpress.org/extend/plugins/ie-warning/

Aunque te da la posibilidad de ser diplomático y de ser un forro (directamente no cargar la pagina si detecta IE6)

(Read more →)

Link del día: Let's Make the Web Faster

Let’s make the Web Faster es el nombre de un conjunto de artículos disponible en Google Code, que explican muchas formas de optimizar una página web, cubriendo muchos aspectos, desde la codificación misma a la configuración del servidor. Las explicaciones son simples y fáciles de seguir, y están ejemplificadas y con muestras de sus resultados.

La mejor parte para mí es la de los artículos, que es en donde está toda la información compilada. Notesén las grandes categorías: CSS, gráficos, compresión, PHP, HTTP caching, prefetch, herramientas, browsers, javascript, latencia percibida (esto es, lo que el usuario tiene la sensación de lo que tarda la página)… y luego un montón de charlas técnicas sobre estos temas en Google.

Por supuesto, cualquiera de nosotros puede participar de la parte de comunidad y sugerir cambios y nuevas ideas a todo esto, con lo cual en cierta forma (y sólo en cierta forma) se vuelve un proyecto colaborativo, o al menos nos dan la oportunidad de opinar.

Soy un zorrinito rápido.

(Read more →)