25 Octubre 2009 ~ 18 Comments

Probando Google Wave

Ayer despues de muchos días en busqueda incesante a traves de blogs y “pedir” la invitación en varias ocaciones a traves del portal de Google Wave he recibido mi invitación.
Ver el correo con asunto : “Your invitation to preview Google Wave” me recordo el momento cuando hace ya algunos años recibi la invitación para ser Beta Tester de Gmail, alla en los tiempos que tener un correo de 1Gb de espacio para almacenamiento era algo realmente loco (Hotmail daba 2 Mb en ese entonces y el unico que ofrecia tal cifra era XaxaMail).

Cuando entre por fin a wave me encontre con una experiencia totalmente distinta, era como estar ante tu correo, el mensajero y el buscador. Todo en ventanas drag and drop que hasta permitian ser minimizadas.

Por lo pronto estoy probando que tanto se puede hacer, un link excelente para darse una idea de lo que es Wave, mientras yo logro darle una definición es :Google Wave, todo lo que debes saber

No es más por ahora, si quieren una invitación a Wave con gusto les comparto, solo deje un comment y a la vuelta de correo podran subirse a la nueva Ola!

Mientras tanto Kawabonga!

11 Octubre 2009 ~ 1 Comment

Photoshop on-line

No es precisamente Photoshop para que lo usemos on-line pero tiene muchas de las características interesantes que tiene el PS. Además de que puede sacarnos un apuro cuando estamos en una computadora que no lo tenga, también por los asuntos de licencias, tiempo de instalación y demás.

El programa del que hablo es Splashup, un completo editor de imágenes en línea, basado en flash (:s no me imagino el lio que se hicieron programando tremenda aplicación), en el cual podemos aplicar incluso efectos, usar filtros, pinceles y trabajo con capas.

Splashup no tiene nada que envidiarle a Photoshop
Splashup no tiene nada que envidiarle a Photoshop

Sitio oficial de Splashup: Splashup

10 Octubre 2009 ~ 0 Comments

Si estás empezando en la programación

Tú puedes pensar que los grandes programadores pueden escribir miles de palabras en un segundo, tienen un cerebro súper desarrollado y tienen adaptado un vinculo que les permite conectarse directamente a una computadora. Especialmente con lo del vínculo. En mi experiencia los mejores programadores son los que más se divierten haciéndolo, son los cuales con los que disfrutas hablando, son los que no se enojan contigo cuando encuentras un error en sus programas y quienes en algunas ocasiones aceptan que tu solución es mejor que la que ellos inventaron.

A mi me gusta mucho más trabajar con alguien así que con alguien que escribe miles de líneas de código en un minuto pero se reúsa a hablar conmigo, si yo le sugiero que alguna de esas líneas está equivocada.

Los grandes programadores se preocupan en encontrar si lo que están haciendo es el camino correcto. Si ellos trabajan para un cliente, ellos aseguran en dar al cliente lo que el cliente quiere. Ellos no sumen que conocen el mejor camino para hacerlo y que es el único, ellos se aseguran que lo que producen está probado y viene con documentación que sirva de ayuda. Ellos trabajan en equipo, hacen café cuando es su turno y hacen lo necesario para asegurarse que los proyectos lleguen a un final feliz. Po su puesto, ellos también pueden llenar tu oficina con pelotas de playa, pegar tu teclado a la mesa con pegante instantáneo, o cubrir tu silla con papel de aluminio ,pero todo lo hacen con espíritu amigable.

Grandes científicos como Isaac Newton y Benjamin Franklin desarrollaron experimentos para descubrir con funciona el mundo, entonces personas como Thomas Edisson vinieron y experimentaron de nuevo con la ciencia y la ingeniería haciendo cosas que todo el mundo quería. Tú vas a entrar a un experimento similar aprendiendo acerca de la programación. Jugando con los distintos lenguajes y escribiendo pequeñas líneas de código, investigaras como funciona una computadora y cómo inventar programas los juegos o programas que todos quieren

No sientas miedo de experimentar y probar cosas tu mismo.

Recuerda que los grandes científicos no siempre encontraban de forma fácil entender que estaba sucediendo con sus experimentos, y esto es igualmente verdad en la programación. Algunas de las cosas que tú haces cuando escribes programas puede que no tengan mucho sentido al principio, por lo tanto debes prepararte para trabajar y entender que está sucediendo adentro del programa

09 Octubre 2009 ~ 2 Comments

Membership API en ASP.NET – Creando el almacenamiento de datos

Cuando se usa  membership API, es necesario establecer el almacenamiento de datos que va a ser usado en conjunto con el proveedor de membrecía. Cuando se usa SQL Server (2005 – 2008) Express Edition en conjunción con ASP.NET, el proveedor esta en capacidad de crear el almacenamiento de forma automática para nosotros. Sin embargo cuando si estamos usando una versión distinta habrá que crear las tablas y métodos de forma manual. (o bajando los scripts :p)

Lo que vamos a hacer a continuación es agregar la base de datos que necesitamos para hacer uso de la API.

1. Debemos ubicar dos scripts que vienen incluidos desde el framework de .net desde la versión 2.0. Estos son Installcommon.sql y Installmembership.sql estos nos servirán para generar la base de datos. En mi caso se encuentran en el directorio:

C:WindowsMicrosoft.NETFrameworkv2.0.50727

2. Luego abrimos el Management Studio de SQL y arrastramos el script desde la carpeta hasta el entorno. Primero el Installcommon, cuando ya veamos el script podemos darle Execute. Luego de unos minutos y termine la ejecución, hacemos lo mismo con Installmembership. Listo eso es todo lo necesario para tener la base de datos necesaria para trabajar con la API.

SQL Server Management Studio 2008, corriendo el script

Basta con arrastrar el script hasta el SQL

Ahora bien, hay otros scripts que pueden sernos útiles dentro de esta carpeta para aplicaciones futuras. Lo que si no debemos olvidar es que todos necesitan primero de instalar –Common-

Script Descripción
InstallCommon.sql Instala algunas tablas comunes y procedimientos necesarios tanto para la API de Membership y Roles
InstallMembership.sql Instala las tablas de las bases de datos, procedimientos de almacenamiento y disparados de la API. Incluye las tablas de usuario, adicionalmente propiedades de usuarios y procedimientos para acceder a la información
InstallRoles.sql Instala todas las tablas de las bases de datos y procedimientos requeridos para asociar a los usuarios con las aplicaciones de roles. Estos roles pueden ser usados para autorización
InstallPersonalization.sql Contiene DDL’s para crear cualquier tabla y procedimiento necesario para hacer crear aplicaciones personalizadas a partir de “web parts”
InstallProfile.sql Crea las tablas necesarias para soportar el uso de ASP.NET perfiles
InstallSqlState.sql Instala las tablas para la persistencia de sesión en el temporal del servidor SQL. Cada vez que el servicio de SQL es apagado, el estado de sesión se pierde
InstallPersistSqlState.sql Instala tablas para persistencia de sesión en tablas separadas. Eso quiere decir que el estado permanece vivo incluso cuando el servicio SQL es reiniciado

Eso es por ahora, en el siguiente post veremos como hacer uso de este repositorio de datos

06 Octubre 2009 ~ 2 Comments

Membership API en ASP.NET

Cuando trabajamos en un sitio web muy posiblemente lleguemos al punto de que se necesite distinguir a los usuarios. Es decir algunos usuarios debo poder reconocerlos para ofrecerles un contenido o acceso especial. Mientras que otros simplemente acceden a las primeras paginas de nuestro sitio.

Esta distinción de usuario se hace comúnmente por medio de formularios de acceso o –login- . Pero si estamos empezando o simplemente no queremos complicarnos en el diseño pensar en la base de datos, su conexión y la serie de formularios para autenticar, crear nuevos usuarios, restablecer las contraseñas de los existentes y demás tareas de la administración de usuarios puede ser un tanto molesto.

ASP.NET desde su versión 2.0 posee una API para el manejo de membresias (Membership API). Esta API es un “framework” basado en la autenticación por medio de formularios. Cuando usamos esta no tenemos que preocuparnos por implementar paginas de –login- o el almacenamiento de las credenciales.

Ventajas de Membership API

  • La habilidad de crear y borrar usuarios mediante programación o por medio de la utilidad de configuración web de ASP.NET
  • Restablecimiento de claves con la posibilidad del reenvió automático de la nueva clave al correo al usuario si este lo almaceno al momento de la creación de la cuenta
  • Un set de controles pre construidos para paginas de login, creación de usuarios, estado del usuario y diferentes vistas para usuarios autenticados y anónimos
  • Un componente de abstracción entre el repositorio de datos y la aplicación.

Ahora vamos a usarla!

Antes de poder adentrarnos en el uso de la API hay una serie de pasos importantes a seguir:

  1. Configurar el web.config para permitir el acceso a los usuarios registrados y negarlo a los anonimos
  2. Establecer el repositorio de datos. Por ejemplo si estamos utilizando MySQL tendremos que hacer una serie de tablas y procedimientos para el funcionamiento
  3. Configurar la conexion con el repositorio en el archivo web.config
  4. Crear los usuarios por medio de la utilidad de configuración web de ASP o directamente en la base de datos (no lo recomiendo)
  5. Finalmente crear la pagina de login que use los controles pre construidos para que valide la entrada y el almacenamiento de las credenciales en el usuario

Este es el esquema que seguiremos en los siguientes post hasta que al final tengamos una pagina de login basada en la API construida.

1. Configurando la autenticación por formularios

La API de membrecía esta basada en la parte superior de la autenticación por formularios y proporciona una mirada –out of the box- para el manejo y la autenticación de usuarios. Por lo tanto como primer paso debemos configurar la aplicación para que utilice el método de autenticación por formularios como método usual. Por lo tanto, debemos estructurar nuestra aplicación de un modo diferente. La pagina principal debe poder ser exequible tanto a usuarios anónimos como a los identificados, pero los diferentes directorios serán restringidos en función de los permisos que otorguemos a los registrados. Estos subdirectorios tiene su propio web.config que rechaza el acceso a los usuarios inválidos, tan pronto un usuario no valido intenta ingresar el –runtime- de ASP lo redirige a la pagina de inicio de sesión.

Entonces en la raiz de la aplicación, sobre el web.config se establece que el metodo de autenticación seran los form:

<system.web>
<authentication mode=”Forms” />
</system.web>

Como se puede ver , esta configuración especifica permite a los usuarios anónimos acceder a las paginas. Por lo tanto a los subdirectorios se les puede incluir en sus web.config:

<configuration>
<system.web>
<authorization>
<deny users=”?” />
</authorization>
</system.web>
</configuration>

Esta configuración no le permite a los usuarios anónimos entrar a los directorios protegidos. Si alguien no autenticado intenta acceder a los recursos de este directorio el –runtime- de ASP inmediatamente lo redirige a la pagina de login. Po supuesto hay que crear la pagina de login pero la API como se vera en los siguiente post nos hará todo mucho más fácil.

02 Octubre 2009 ~ 2 Comments

Utilizando WordPress con Windows Live Writter

En ocasiones puede volverse más interesante si se escribe en cualquier momento que tienes tiempo, sin embargo hay ocasiones en las que no se tiene acceso a internet. Para solucionar esto existen los programas como Windows Live Writter que te permiten escribir en tu computadora para luego sincronizar la información con nuestro blog cuando ya tengas acceso a la red.

Para este ejemplo utilizaremos Windows Live Writter, que es sencillo de adquirir y ahora más cuando te viene casi “agregado” con la instalación del msn messenger. Aunque sinceramente no entiendo por que cuando se instala el messenger viene con un excesivo peso (112 mb) que tanto hará por detrás el mensajerito :s

Partiendo de que ya tenemos nuestro WLW instalado vamos a configurarlo para usar nuestro blog.

Agregando un blog

Imagen 1. Agregando un nuevo blog

Buscamos la pestaña Blog, y click sobre agregar cuenta de blog…

Que servicio de blog usasImagen 2. ¿Qué servicio de blog usas?

En nuestro caso diremos que hacemos uso de otro servicio de blog, este servicio puede ser el de Blogger, WordPress, etc.. Le damos siguiente

Agregar una cuenta de blog

Imagen 3. Dame toda tu información!

En esta  pantalla colocamos toda nuestra información de la cuenta. Siguiente…

XML-RPC Services are disabled on this blog. An admin user can enable them Imagen 4. El peor error que puedes encontrar

En el caso que estemos usando una instalación sobre nuestro propio servidor, es posible toparse con este error, sin embargo la solución es muy sencilla. Lo único que esta sucediendo es que tu Blog no esta permitiendo la edición desde un programa externo a él por cuestiones de seguridad.

Para solucionar esto vamos a la administración de WordPress, buscamos Settings, Writing, y validamos [] Enable the WordPress, Movable Type, MetaWeblog and Blogger XML-RPC publishing protocols.

image Imagen 5. En WordPress

Y listo! si se obtuvo el error anterior basta con repetir los pasos anteriores al problema … siguiente y listo, puedes usar WLW con el blog que prefieras.

28 Septiembre 2009 ~ 0 Comments

Nintendo vende su calidad por volverse masivo

Hace un par de meses compre una Nintendo DS, rebosaba de alegrìa por que nunca una consola de esta marca me ha dejado decepciones.
Sus juegos siempre estan llenos de contenido e historias magnificas, y en muchos casos no tenian los ultimos graficos pero aprovechaban al maximo las ventajas de la consola.

Sin embargo con la inclusiòn en el mercado de màs competidores (Microsoft y Sony), y una increible explosiòn de empresas de desarrollo hicieron que Nintendo dejara la  explotaciòn de sus consolas estas  dejando solo a sus propios desarrolladores los juegos insignia de la marca (Mario, Zelda, Star Fox).

Ahora bien todas estas empresas de desarrollo nuevas han hecho lo que han querido con la reputaciòn de los juegos, sacando al mercado cantidad de juegos feos, pobres de contenido y dejando por el suelo la popularidad de algunos titulos. Es màs un buen aficionado a Nintendo podria notar la falta de calidad en titulos originales de la marca como Donkey Kong

El caso es que cambiar juegos de buen contenido por cantidad de juegos de pobre calidad es la nueva estrategia de Nintendo. Parece que nos tendremos que conformar con juegos sencillos (Puzzle Bobble Galaxy) mientras toman conciencia que juegos como estos ( Naruto Shippuden Ninja Destiny 2) solo empeoran la reputaciòn de su consola portatil.

24 Septiembre 2009 ~ 0 Comments

Algunas lineas sobre inteligencia artificial

Hay muchos conceptos y definiciones que son difíciles de definir con cierto grado de formalidad, es decir, algunas cosas son tan propias de la naturaleza que expresarlas o sintetizarlas en forma de conocimiento humano tiene grandes dificultades. Es el caso pues de la inteligencia, algo de lo que hablamos, sentimos y aprovechamos como humanos e incluso la reconocemos en las especies animales pero no podemos definir con certeza que es lo es.

Mucho se ha filosofado e investigado sobre el tema, y el articulo expone diferentes visiones, pero una de las que considero más importantes es la respuesta de San Agustín sobre el tiempo “Si no me lo preguntan, lo sé, si me lo preguntan, no lo sé” y es que enfrentarse al problema de definir la inteligencia es de esa magnitud.
Ahora bien los estudios realizados a través de los tiempos nos han permitido paulatinamente acercarnos a bocetos de lo que podría ser la inteligencia y en tiempo modernos incluso intentar simularla por medio de las herramientas que ahora se poseen. Respecto a este moldeamiento A.Turing es visionario pues propone una metodología formal para intentar describirla y aprovecharla e incluso entrega los modelos de evaluación para que esta se pueda probar cara a cara con la capacidad humana.

Sin embargo al modelo Turing se le enfrenta una pregunta interesante ¿La inteligencia es poder aprender, poder resolver problemas, o ambas? Y esta visión es importante pues el articulo expone el argumento de la habitación china de Jhon Searle, poniendo en evidencia el hecho de que en el momento la inteligencia que tienen las maquinas no es sino un pequeño reflejo de la nuestra, y aunque hagan las cosas bien no están entendiendo en lo más mínimo que es lo que está sucediendo. Por lo tanto no están aprendiendo, solo están resolviendo problemas en la medida que sus capacidades y las propias de sus diseñadores les permiten.

Posteriormente el articulo muestra el avance del campo con los trabajos de McCulloch y Pitts incluso la afirmación sobre que con sus descubrimientos demostraban que cualquier maquina de Turing se podía construir con neuronas y que los cerebros son maquinas de Turing. Pero aunque sus resultados no han sido completamente satisfactorios, esta afirmación se puede interpretar en el sentido que no es “lógico” que un sistema físico no pueda ser simulado a través de un sistema conceptual. Hemos avanzado tanto en la comprensión y replica de nuestro mundo por medio de modelos conceptuales que se hace difícil y hasta imposible pensar no poder replicar un sistema físico y tan propio a nosotros como lo es el cerebro. En este punto me atrevería a sugerir, más que problemas con el modelo de neuronas tengamos un problema con la rigidez del modelo de Turing.

Haría una comparación entonces con la mecánica clásica y la mecánica cuántica, la mecánica cuántica funciono bien en la manipulación de los objetos grandes en las situaciones cotidianas, pero cuando se adentraron a la verdadera esencia de la materia descubrieron las particularidades y situaciones extrañas que ocurren al interior, y digo extrañas porque aunque existan grandes avances en esta ciencia, se manipule y se desarrolle resulta imposible que en nuestra calidad de seres humanos podamos realmente entenderla, por que no es propia de nuestra naturaleza, no es natural a nuestra condición que algo pueda ser dos cosas al mismo tiempo (Particula o onda). Por una parte debido a nuestros sentidos, no hay experiencia sensorial que permita esta apropiación. Finalmente podría plantear que nuestro problema es similar a cuando se intenta decir que es un color a un invidente de nacimiento, sus sentidos no le permiten apropiarse de ese conocimiento por lo tanto ello solo puede existir en su cabeza y este conocimiento llego solo por medio de otra persona, a través de su experiencia propia, de su visión de las cosas.

Los invidentes son las maquinas, las cuales poseen sentidos limitados, nosotros les explicamos nuestra percepción del mundo, pero la limitación de nuestra comunicación se basa los distintos modelos que adoptamos (Algunos tan rigidos como el de Turing).

Si podremos o no comprender por completo la inteligencia al punto de enseñarla a las maquinas no lo sé. Pero algo sabemos, el universo tiene un tamaño infinito, lo números también son infinitos, no se ajustan muy bien a nuestros esquemas mentales, pero se trabaja y se obtienen resultados grandiosos. La inteligencia es similar, no podemos comprenderla por completo, pero simulándola algún día tendremos avances que podrán reflejar lo que hasta ahora nosotros mismos hemos aprendido.

Y si te gusto el articulo pues acá lo dejo para tu propia conclusión : Inteligencia Artificial

22 Septiembre 2009 ~ 2 Comments

Innovación en el software, unas cuantas lineas

Haciendo una de mis labores para Gerencia Institucional llegue a un punto del taller donde decia:

¿Que es innovación en el software?

… Pregunta dificil… entonces a continuación lo que respondí.

Innovación.
(Del lat. innovatĭo, -ōnis).
1. f. Acción y efecto de innovar.
2. f. Creación o modificación de un producto, y su introducción en un mercado.

Diccionario de la real academia española de la lengua. Innovación.

Innovar.
(Del lat. innovāre).
1. tr. Mudar o alterar algo, introduciendo novedades.

Diccionario de la real academia española de la lengua. Innovar

Según esta definición de innovación es realmente sencillo definir que es la innovación en el software pues no hay dos productos de software iguales, como tampoco hay dos proyectos y equipos iguales. Cada construcción de un nuevo programa que cambie en alguna manera los productos ya existentes se convierte en una innovación.

Buscando un poco entre blogs y páginas sobre arquitecturas de desarrollo hay una marcada tendencia a pensar que el software libre es innovador. Esto porque “busca” hacer lo que ya está realizado de otras formas y se nutre principalmente de ese colectivo de programadores y comunidades que le dan continúo crecimiento a estos proyectos. Pero también gran parte de ese software libre se ha dedicado replicar lo que ya existe, haciendo que el usuario corriente piense que Linux es un Windows en sus inicios.
Las líneas se llenan entonces de pasión mostrando que algunas de las principales innovaciones parten del campo de la libertad del código. Se menciona a Wikipedia, DNS (Domain Name System), Internet y el correo electrónico. Olvidando que muchas de estas ideas parten de ideas privativas desarrolladas originalmente por empresas como IBM o Sun Microsystem en su momento. Solo por mencionar un ejemplo se dice que Linux es innovador pero que diferencia sustancia habría para el usuario final entre Linux y Unix sin su consola grafica, y con su consola grafica ¿de donde se ha basado si no ha sido de Windows?

Esto solo lleva a una primera conclusión, el software sea innovador o no, no depende de si su código esta liberado al mundo para que millones de personas impriman sus propias ideas sobre él o si este posee un núcleo secreto que solo los elegidos pueden tocar.

Luego de esto parto entonces de mi propia visión de innovación. ¿Cuando las personas andaban sobre carretas, pasar a poder desplazarse sobre una estructura metálica a mayores velocidades fue innovador? Aun más, ¿llegar a cruzar los cielos fue algo innovador? La respuesta es indiscutiblemente que sí. Por lo tanto podría aventurar a pensar que innovar tiene más relación con cambiar la vida de las personas o su relación con el mundo a través del objeto creado. Es decir, si la creación permite nuevas formas de interacción, sensaciones o resultados para las personas esa creación es innovadora.

Volviendo al campo del software definitivamente Internet cambio la forma de comunicarnos, como también Microsoft o Apple cambio nuestra visión sobre las computadoras, haciéndolas un poco más amigables y no esas extrañas maquinas llenas de caracteres verdes. La animación digital creo mundos que antes solo podían verse en nuestras mentes o en los libros de Verne y las descargas de música nuestro aprecio por cada canción.
El software es entonces innovador si entrega al usuario ese –plus-, la poca o mucha funcionalidad que no tienen los programas que hay en el momento. Si cambia su forma de pensar e interactuar con el mundo.

Y termino con una frase que me llamo bastante la atención. Tomada del blog de pctux respecto al tema de innovación.

Como dijo Tolkien una vez: “No sigas el ca mino marcado que sólo te lleva a donde otros ya han ido”

22 Septiembre 2009 ~ 0 Comments

Netlogo y simulaciones

Netlogo es un entorno de desarrollo para programación de modelos para simular fenómenos biológicos y sociales. Diseñado en 1999 su autor es Uri Wilensky pero ha sido continuamente desarrollado por el departamento de computación basada en modelos de la universidad de Northwestern.
Este sistema permite a los modeladores dar instrucciones a cientos de “agentes” que operan de manera independiente. Esto hace posible explorar las conexiones entre los comportamientos pequeños e individuales y los patrones de comportamiento macro a partir de estos comportamientos individuales.
En los casos estudiados en la asignatura de sistemas expertos se encuentran diferentes modelos ya diseñados sobre Netlogo que cumple las condiciones de tener comportamientos individuales a nivel de agentes pero representan resultados a nivel de grupo.

[…]