ASP.NET MVC 1.0 Release Candidate

Hoy anduve probando esta publicación de Microsoft que pueden descargarse gratuitamente desde [aquí](http://go.microsoft.com/fwlink/?LinkID=141184&clcid=0x409), disponible para VS 2008. Estaba siguiendo las indicaciones que mostraban más que nada las nuevas features, que leí en [Scott's Blog](http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx), pero imagino de todos modos que el [sitio oficial de ASP.NET MVC](http://www.asp.net/mvc/) estará lleno de tutoriales y explicaciones al respecto. La instalación es totalmente indolora, tan natural como el típico "Acepto, siguiente, siguiente" y el instalador se encarga de todo por nosotros. Fuera de eso, la integración a VS 2008 se hace a través de un nuevo project template, en este caso, el ASP.NET MVC Web Application, que ya incorpora cierta estructura que incluye una definición de Master Pages. También se encuentra muy organizado el proyecto, separando obviamente Views, Controllers y Models, pero incluyendo además una sección en donde organizar la estructura de nuestro sitio web, como puede ser la sección de Scripts, Content, o (de forma opcional) Code Templates, que nos permiten extender y modificar el comportamiento por defecto para la generación de muchos elementos. Con algunas primeras pruebas y experimentaciones, pude ver que realmente es muy ordenada la forma en que está pensado para trabajar, y que en muchos aspectos respeta la esctructura de MVC, incluso en muchos aspectos no permitiéndonos saltar el esquema de trabajo para que todo se haga - por decirlo de alguna forma - de la manera que debe hacerse. Esto, si bien quita un poco de flexibilidad, garantiza una buena manutención del código. Me gustaría poder opinar en términos de performance, pero el haber efectuado pequeñas pruebas no me da mucha evidencia de algo que marque realmente una diferencia. Personalmente no noté mucha distancia en tiempos de lo que tardaría un sitio diseñado con algún otro patrón, pero sí entiendo que existe mucho procesamiento de fondo que está siendo hecho, excepto que para algunos casos se esté cacheando mucho de la solución en sí. Más allá de eso, es altamente reconocible el trabajo que han hecho para que el programador pueda llevar a cabo el proyecto con código muy entendible, y, lo más interesante, con muchos templates que le hacen el trabajo muy rápido y dinámico. De esta forma, el programador puede concentrarse por "enlazar las partes", y programar tanto la lógica como la forma que debe verse y tratarse los datos, más que en pelear con las bases de datos, con cuestiones de diseño de objetos y demás cuestiones que no hacen a la funcionalidad final. En fin, me parece una buena aproximación, aunque por alguna razón se siente que no está totalmente orientado a eso todavía, puesto que muchas de las features no funcionaron o se encuentran algo defectuosas todavía... pero recordemos que nos encontramos en una release candidate y no en una versión final. _Soy un zorrinito MVC._

(Read more →)

Problemas con el feed

Para aquellos que me seguían a través de algún feedreader habrán notado que de golpe no hubo más actualizaciones (o, de otra forma: “habrán dejado de notar que había actualizaciones”). Esto se debía a un problema de configuración que surgió un tiempo después de que reconfiguré los subdominios… el por qué, no lo tengo claro todavía, ya que con el subminio nuevo ya había entradas y estaban correctamente publicadas.

Ahora supongo que es cuestión de tiempo para que todos los feeds que quedaron apretados esperando salir aparezcan en sus correspondientes lectores. Posiblemente tengan un rato para leer. Ojalá lo disfruten.

Soy un zorrinito con problemas.

(Read more →)

Link del día: The Database Programmer

El día de ayer me crucé con un post sobre cómo hacer un diseño de base de datos inmune a SQL Injection (o en su título original: A comprehensive database security model). La idea resumida de este tipo es hacer un diseño de base de datos orientado completamente a la seguridad, por lo cual, incluso aunque el supuesto atacante lograra acceso directo a la base de datos, no podría hacer más que acceder a los datos que podría desde la aplicación en cuestión.

La idea está buena, pero en algunos puntos me parece impracticable, aunque sí me hizo surgir ideas parecidas mucho menos complejas que podrían utilizarse… pero eso será motivo de algún post extra o taller. En fin… dicho sea de paso, dejo el link direct al blog de ese artículo, llamado The Database Programmer, que conforma una serie de posts dedicados a cuestiones sobre la programación de base de datos, pero desde un punto de vista algo más abstracto. No tanto el “como”, sino el “qué”, lo cual lo vuelve más interesante.

Soy un zorrinito de datos.

(Read more →)

Link del día: Javascript CAPTCHA Decoder

Desde Hackzine me llega un artículo sobre un pequeño script que Shaun Friedle construyó sobre javascript utilizando Greasemonkey. El script en sí toma la imagen que Megaupload muestra para verificar que uno es humano, y la descifra utilizando una red neuronal.

El script de Shaun puede verse completito aquí. Si se preguntan de dónde salen los valores de constantes que Shaun pone ahí, yo supongo que será el resultado de haber entrenado ya a la red neuronal, al fin y al cabo, el CAPTCHA decoder no tiene que aprender, solamente reconocer.

Si quieren una explicación un poquito más extensa, pueden visitar el artículo de John Resig al respecto, o simplemente verlo funcionando.

No subestimen el poder de javascript. D=

Soy un zorrinito del lado del cliente (por esta vez).

(Read more →)

Link del día: La máquina de emociones

Aunque se quejen, sí, es un link para leer, y mucho. Yo solo leí un poco y me fascinó, lo dejo en mi listadito de lectura para cuando me ponga, quizá incluso vaya a comprar una copia impresa.

El libro en cuestión es de Marvin Minsky, un groso desde ser uno de los que ayudó a diseñar la tortuguita del Logo, hasta ser una de las eminencias indiscutibles actualmente en el campo de la inteligencia artificial. El libro se llama The Emotion Machine (La máquina de emociones) y es un resumen analítico del pensamiento humano y cómo eso puede ser visto desde un punto de vista automatizado.

El link lleva al borrador previo a la publicación que Minsky dejó para el público.

Como el mismo Minsky resume su libro por capítulos:

  1. Enamorarse: “Nacemos con muchos recursos mentales.”
  2. Apegos y metas: “Aprendemos de interactuar con otros.”
  3. Desde el dolor y el sufrimiento: “Las emociones son otras formas de pensar.”
  4. Conciencia: “Aprendemos a pensar sobre nuestros pensamientos recientes.”
  5. Niveles de actividades mentales: “Aprendemos a pensar en niveles múltiples.”
  6. Sentido común: “Acumulamos grandes cantidades de conocimiento común.”
  7. Pensamiento: “Cambiamos entre distintas formas de pensar.”
  8. Recursos: “Buscamos muchas formas de representar las cosas.”
  9. El ser propio: “Construimos múltiples modelos de nosotros mismos.”

Soy un zorrinito emocional.

(Read more →)

Link del día: Detecting Packet Injection

Para todos aquellos que no estén contentos con sus proveedores de internet (sí, todos) y aquellos que sospechemos que de alguna forma están interfiriendo nuestra comunicación (sí, todos), y aquellos que creamos que puede ser algún tipo de inyección de paquetes (...ya no son todos), acá les dejo un link que tiene un artículo largo de teoría muy explicativa sobre todo el tema y una pequeña guía con una aplicación ([WireShark](http://www.wireshark.org/)) para detectar si efectivamente nuestro ISP está inyectando paquetes en nuestra conexión. Sobre el artículo en sí... creo que lo más interesante es toda la teoría al respecto, me resulta bastante explicativa. [Electronic Frontier Foundation - Detecting packet injection: A Guide to observing packet spoofing by ISPs](http://www.eff.org/wp/detecting-packet-injection) (Y no, se ve que no les preocupan los títulos largos) _Soy un zorrinito inyectado._

(Read more →)

El cracking y la memoria

Hace un par de días encontré un hueco de seguridad muy grande en un foro conocido (no voy a dar direcciones por protección del mismo), y dicha falla permitía acceso directo a su base de datos.

No sé si tenga que ver (puesto que mi intención original nunca fue atacar ese foro, sino que simplemente estaba navegando por él), pero el foro es de un tipo MyBB, y la falla ocurrió de la siguiente manera.

Dicho servidor, ese día, esta un tanto sobrecargado de pedidos, por lo que cada tanto fallaban las respuestas al cliente. Esto es algo normal y esperado en dichas condiciones, pero lo que no se espera, es que el proceso de PHP se muera.

Y si lo hiciera, dado que puede tener mucho procesamiento de fondo, que no haya tenido un buffer sin preprocesamiento en la salida. Digamos, que ese proceso PHP ya ponía en la salida el código PHP y luego lo procesaba. Si moría en el medio, entonces el código salía sin pre-procesar, por lo cual yo, solo navegando con mi humilde zorro, podía ver todo el código PHP que formaba al foro.

El header con comentarios en el archivo PHP ya me indicaba que se trataba de un foro MyBB.

Luego le pregunté a Google: “dónde guarda los archivos de configuración MyBB?”
Google respondió: “/inc/config.php”

Entonces le digo a mi zorro: “Andate a http://www.adasdadadaad.com/inc/config.php”

Y ahí veo:

$config['dbtype'] = 'mysql';
$config['hostname'] = '<nombreservidor>';
$config['username'] = '<usuario>';
$config['password'] = '<password>';
$config['database'] = '<schema>';
$config['table_prefix'] = 'mybb_';

Obviamente, los datos no son los mismos que el original, por protección.

Mi siguiente pregunta fue: “Se aceptarán conexiones remotas a la base?”

Ctrl+Space, abrí el Launchy, “mysql”, seleccioné el MySQL Query Browser, Enter. Ingresé los datos, Enter.

Estaba adentro.

Mi próximo paso fue enviar un mail a los administradores del foro para avisar del tema, pero dado que como todo andaba sobrecargado, tuve que hacerlo después.

Por entretención y entrenamiento (uno nunca sabe), me quedé con los hashes md5 de las tablas de usuarios (ni me los pidan, no los voy a repartir), como para analizar la fuerza de los passwords. Paso previo, me correspondía crackearlos, bajo algún método de criptoanálisis.

Hace algunos días que estoy creando Rainbow Tables para crackear los passwords, y a la vez aprendo sobre esto, el desempeño de mi máquina y cosas similares.

SE ME MUERE LA MAQUINAAA!!!

Como se puede apreciar, esto no es para cualquiera… no por uno, sino por la salud de la máquina. Ni hablar de que poseo actualmente 40 archivos de 2 GBs cada uno lleno de hahes md5, que se graban, se leen, se ordenan, se indexan, se buscan, etc, etc, etc… por ahora no he tenido suerte con nada, pero eso es una buena señal de que estoy fallando en algo…

…y ahí es donde tengo que seguir experimentando para aprender.

BTW: Ya pasaron 4 días y tras haberme comunicado con 3 administradores, ninguno me envía respuesta.

Soy un zorrinito de sombrero blanco.

(Read more →)

OCR MatLab 2.0

No, no es para MatLab 2.0, sino que es el OCR que yo había implementado, pero versión 2.

A recomendación de la cátedra que vio este trabajo, re-estructuré la red para trabajar de una forma más competitiva, lo que, sin duda, ha resultado en una gran performance en entrenamiento de la msma y mejores resultados en la identificación de caracteres. La distribución en este caso sólo incluye el archivo script de MatLab 2007 (porque la documentación quedó desactualizada xD), y dos archivos de ejemplo con datos generados en la nueva versión de Thot, la 1.3.

Actualmente el error de esa red neuronal varía entre 5 y 15%… lo cual va buenísimo en aceptable.

Sin embargo, todavía es demasiado dependiente de los datos, que significa que sin un buen conjunto de entrenamiento, pierde su magia. Hoy por hoy, la medición de Thot es lo mejor que tengo, pero tengo pensados varios cambios para el futuro.

La nueva versión de este OCR experimental la pueden bajar de aquí.

Soy un zorrinito en progreso.

(Read more →)

Thot 1.3 Released

Cambié la técnica de escalado de las fuentes.

Radicalmente.

Esto tiene una gran ventaja, que es la generación de conjuntos de datos mucho más homogéneos, y por tanto, una facilidad mucho mayor para las redes neuronales de aprender bajo dichos datos. A la vez, me deshice del problema del Font Padding, que es espacio extra que una fuente utiliza para generar una cadena en pantalla. (Gracias Graphics.MeasureString! No fuiste muy útil pero sí performante).

Sin embargo, con ello viene una gran desventaja, que es el tiempo extra de procesamiento (y claro! lo proceso todo a mano), pero por suerte arreglé el bug de la barra de progreso y algunos detalles más de la aplicación y el deploy.

Download de Thot, aquí.

Soy un zorrinito cambiante.

(Read more →)

OCR con Redes Neuronales en MatLab

Esta es una investigación, a modo de trabajo práctico que me pidieron para la universidad en la que estoy. La idea básica es construir un OCR en MatLab, utilizando redes neuronales. Acá está hecho de una determinada manera, que en conjunto con Thot, se logró un error de alrededor del 56%. Obviamente, no es nada bueno ni aceptable para una aplicación real, pero al menos funciona. Es el comienzo de algo.

Recién hoy que el trabajo fue presentado puedo mostrarlo públicamente. El código es sólo para MatLab 2007. Lo lamento gente, es eso o nada.

Pueden revisar el código o la documentación (a la vez de las diapositivas para las explicaciones que dí de esto) en http://alphagma.googlepages.com/.

Dicho sea de paso, ya se vienen varias mejoras. Pero no digo nada al respecto para que no me apuren. Hoy por hoy es 56% de error y punto.

Soy un zorrinito neuronal.

(Read more →)