Me mudo de blog

Marzo 30, 2008

Llevo un año sin escribir nada, necesito una motivación extra y esa motivación es montar mi propio wordpress en casa. Así que me mudo esta es la nueva url:

http://pibgeus.homeip.net/blog/

Gracias a wordpress.com por todo.


Lo que rodea a LINQ

Abril 16, 2007

Ya tenemos LINQ hasta en la sopa. Un par de tips:

Al parecer se está trabajando en una implementación para LINQ orientada al procesamiento paralelo: PLINQ.

Evidentemente no todo es paralelizable, pero quizá en la mayoría de ocasiones los bucles lo son y por tanto las querys de LINQ también lo son, en esos casos sería interesante poderlo declarar de forma explícita.

Por lo que he visto sería algo muy sencillo, parecido a esto:

(from p in People
 join c in Customers
 on p.Name equals c.Name
 select new {p.Name, p.Age}).AsPararell();

Imaginad que People es una fuente que viene de un fichero XML y Customers viene de una base de datos, operaciones I/O que de forma intrínseca traen esperas de los hilos de ejecución, paralelizar ambas mejorará el rendimiento en la mayoría de ocasiones.

Otra que lleva mas tiempo es BLINQ: generación de vistas y controlador dado un modelo de datos. (Ojo! lo interesante es la Vista(páginas asp.net)) algo similar al Scaffold de Ruby on Rails.

Es increíble el camino que está tomando el equipo de c#, están siendo muy atrevidos y la verdad es que según mi opinión lo están haciendo muy bien, c# su aspecto hoy es más dinámico y declarativo.

De sobra es sabido que los lenguajes fuertemente tipados tienen muchísimas ventajas, dado su rigor son insuperables cuando nos encontramos con proyectos de gama media y alta en complejidad y tamaño.

Sin embargo los lenguajes dinámicos siempre han destacado por su altísima productividad (RAD) para tareas concretas en módulos pequeños y que no requieran mucha complejidad, mas hoy con lenguajes
tan potentes como Python, Ruby, Groovy(que es una gran promesa, pronto oiremos hablar de el hasta en la sopa, también sobre GRails)

Lo que es sorprendente es que hoy día se compare su agilidad y potencia sintáctica, su mayor virtud con LINQ, hoy día podemos encontrar en Internet comparativas de Ruby, Python, Groovy y LINQ!!!

Puede que c# sea un antes y un después en los lenguajes de programación.


America’s Cup: Simulador de seguimiento

Diciembre 31, 2006

El pasado Noviembre Microsoft tuvo negociaciones con Alcatel(Patrocinador externo de la America’s Cup)  con intención de promocionar su tercera generación de productos y tecnologías de desarrollo junto con Windows Vista.

Microsoft llevaba muchas suculentas ofertas, pero como llegaban tarde (empieza en junio) no podían ir con las manos vacías por lo que nos encargó que le hiciéramos una pequeña demostración para un simulador 3d para el seguimiento de las carreras en tiempo real, recogiendo datos por gps.

Nos pusimos manos a la obra y en una intensa semana y media conseguimos resultados bastante interesantes.

Lo que cabe destacar mas es la mezcla de técnicas y tecnologías que hicimos. Se trata de una aplicación Windows.Forms, con un control de Windows Presentation Foundation empotrado (barra lateral) y otro control Windows.Froms cuyo pintado funciona con DirectX9.0. Es interesante ver que algunas de ellas se consideran oficialmente incompatibles (WPF y DirectX)

Por supuesto los gráficos son mejorables, pero solo es cuestión de tiempo si el proyecto completo sale a delante. Utilizamos Jad Engine como base para realizar la aplicación, la experiencia fue reconfortante.

Otros aspectos que intentamos esforzarnos fueron:

Camaras en primera persona, movimientos suaves. Intefaces elegantes y con efectos llamativos, vídeos con streaming en tiempo real que le diera gran flexibilidad(carrera real, publicidad, comentaristas, documentales de la tripulación…).

En aplicaciónes 3D lo que primero suele llamar la atención son los gráficos estáticos (modelos, fondos etc..) pero la dinámica aunque pase mas desapercibida es imprescindible y normalmente de mayor dificultad que los gráficos estáticos.

No es trivial conseguir un movimiento realista dado una lista de coordenadas, no pueden seguir los puntos en linea recta, deben ser curvas, los barcos deben tener un movimiento de pandeo en las curvas mas cerradas, y deben ir mas rápido entre dos puntos mas separados ya que los tiempos dados se presuponen periódicos.

Para solucionarlo realizamos una implementación de las curvas de bezier, que era construida con la lista de coordenada, dicha curva nos suministraba en cada instante, la posición, la dirección y el pandeo que debía tener cada barco en cada instante de tiempo. Para calcular las rutas implementé un pequeño editor que posteriormente nos generaba un xml con la ruta lista para insertar en el simulador.

PathDesigner

Saludos y Feliz Año.


Comando nmap

Diciembre 9, 2006

Pues, bastante tiempo llevo topándome con el deseo buscar los host que hay en una red desde bash, como son pequeños problemillas al final nunca lo miro. Esta vez lo apunto.

Comando nmap : ver todos los hosts de una red, por ejemplo mi red local de mascara de red de 24 bits.

geus@GeuS-Server:~$ nmap -sP 192.168.1.0/24  at 2006-12-09 08:15 CET

Host 192.168.1.1 appears to be up.
Host 192.168.1.34 appears to be up.
Host 192.168.1.35 appears to be up.

Comando nmap para ver información de los puertos abiertos y el sistema operativo de un host

geus@GeuS-Server:~$ sudo nmap -sS -O 192.168.1.0/24 Starting Nmap 4.10 at 2006-12-09 08:16 CET
WARNING: RST from port 21 — is this port really open?
WARNING: RST from port 21 — is this port really open?
WARNING: RST from port 21 — is this port really open?
WARNING: RST from port 21 — is this port really open?
WARNING: RST from port 21 — is this port really open?
WARNING: RST from port 21 — is this port really open?

Insufficient responses for TCP sequencing (0), OS detection may be less accurate
Interesting ports on 192.168.1.1:
Not shown: 1676 closed ports
PORT STATE SERVICE
21/tcp open ftp
23/tcp open telnet
80/tcp open http

MAC Address: 00:13:49:19:C0:9D (ZyXEL Communications)
Device type: broadband router
Running: ZyXel ZyNOS, Intel embedded
OS details: ZyXel Prestige 791R, ZyXel ZyNOS based Broadband router (ZyNOS) or Intel Express ISDN router


Obtener el angulo dado un vector

Diciembre 7, 2006

Pues claro, la respuesta típica es la arcotangente! Pero bueno… los resultados no se obtienen entre 0 y 2Pi, sino entre -Pi /2 y Pi/2, por lo tanto necesita algunos ajustes. Me he topado varias veces con el problema y siempre se me olvida, al final, algo que debería resolver de inmediato acaba consumiendome un cuarto de hora de tiempo.

Gimbal Lock


Programá ta tirao!

Diciembre 6, 2006

Todo el mundo puede ser informático, por supuesto, no se trata de una ingeniería, es algo más que evidente ¿no? Hasta mi abuela utiliza ya el ordenador, además todo el mundo saben que ya no hacen falta informáticos porque los ordenadores ya lo hacen todo.

Explicaré porqué todos llevamos un informático dentro y mostraré que los informáticos deben ser relegados ha hacer páginas web, cambiar tonels de impresoras, eliminación de virus y en un caso extremo la vacunación de las computadoras, pero siempre en presencia de un teleco o veterinario ya que el uso de la jeringuilla puede ser peligroso. Cuatro Capítulos:

  1. Programar es fácil.
  2. Dirigir un proyecto software es fácil.
  3. El Hardware que se da en informática es tan sencillo como el parbulario.
  4. Los informáticos no entienden la complejidad de lo que aprenden los Teleco.

 

Demostraré que en Europa y el Mundo están equivocados y que son unos ignorantes. La informática no debe ser reconocida como una disciplina própia, sino que la poca materia que se imparte, debe ser separada entre ingenierías de Mayor calado como Teleco o Industriales. Por supuesto debemos apoyar a nuestro querido gobierno para llevar a cabo las reformas planeadas.

Programar es fácil:

Un amigo informático me pregunto algo de que si sabía algoritmia?.
complejidad de algoritmos?

Yo que soy teleco, muy orgulloso le respondí que yo sabía C y que si era capaz de resolver una integral triple evidentemente hacer una función en C no podría ser tan difícil, y el tipo encima me responde con mala educación diciendo que no era cociente de que un simple programita mal hecho con complejidá nose que puede tardar millones de años con una tablita de 20 o 30 huequitos, por muy potente que fuera el procesador…

El tio ya se picó y empezó a decirme que si sabía algo de estructuras de datos? ¡Yo con listas lo hago todo y eso es un struct con un puntero a otro struct, mu fácil!

Y seguia…¿Eres capaz de almacenar información compleja y tratarla de manera eficiente? Que ocurre cuando una estructura de datos tiene millones de elementos, que ocurre cuando se accede de manera concurrente? ¿sabes algo de Computabilidad? Eres capaz de hacer todo esto de una forma, flexible, potente a la vez de escalable y comprensible? Sabes algo sobre patrones de diseño?….

En fín por eso nunca contrataré a un informático en mi empresa, hacen de lo fácil un mundo, solo saben traer problemas. Mejor contrato a un Teleco que se está mas callado y hace mejor código, eso sí por poco tiempo ya que un ingeniero de tal categoría no merece el puesto de un picacódigo.

Lo que mas me rio es de la base matemática de los informáticos, bua! cosas realmente inútiles: teoría de grafos, matemáticas discretas, estadísticas. Encima me dicen que son muy necesarios que si para seguridad que si criptografía…¿pero quien va a ponerse a descifrar una contraseña?¿además quien va a querer atacarme? Yo no tengo ni ningún enemigo.

Me preguntaron si tenía alguna experiencia con otros lenguajes: c++, java, prolog, sql, lisp, html, clips, php, asp, xml, c#, visualbasic… Yo sé C que es el lenguaje mas potente y mejor, el resto seguro que no hacen tanto y además serán muy fáciles.

Estar en un mercado que tus conocimientos tecnológicos se quedan obsoletos en tres meses de descanso no es tan complicado como dicen, el problema es que los informaticuchos se dedican a aprener de memoria como papagayos y no comprenden nada, a mi no me hace falta saber ninguna tecnología, ni experiencia con tecnologías pasadas, comprender cosas dificiles de verdad es lo que yo hago con mis integrales triples de cálculo y tratamiento de señales.

Bueno ya me he cansado de este monologo, porque me estoy alterando a mi mismo con este tonto virtual, así que seguiré hablando como informático:

La experiencia con lenguajes es otro factor importante, aumentar la productividad, escalabilidad, simplicidad, mas aún cuando los mezclas, es importante conocer las cualidades que hacen un lenguaje fuerte y explotarlas. ¿Tienes alguna idea de como hacer un compilador? ¿Como crear nuevos lenguajes que mejoren la productividad manteniendo la potencia?

Sabes que ocurre cuando mas de una persona intenta utilizar el mismo programa simultáneamente, y la mas mínima idea de las consecuencias que conlleva esto?
Programación Concurrente y Distribuida?

Inteligencia Artificial? Algoritmia básica? Redes neuronales? Algoritmos evolutivos? Árboles de decisión? Agentes software? Programación declarativa?

Bases de Datos? Transacciones, concurrencia, sabes que es minería de datos, sabes que es inferir nuevo conocimiento de una base de datos? Creo que mucha gente ni si quiera se ha planteado que ventajas trae tener bases de datos. Por supuesto dudo que mucha gente mas que fp o informáticos sean capaz de conectar un programa con una de ellas.

Hay que saber Tecnologías y herramientas, es importante, permiten mejorar la productividad infinitamente, además es bueno tener experiencias con tecnologías pasadas, control de sistemas operativos a nivel de aplicación (cuanto menos), conceptos de protocolos de comunicaciones a nivel de aplicación…


En fín podría llevarme mucho tiempo escribiendo sobre cualidades necesarias solo en el téma de la programación pero ya me he cansado.

Dudo que la mayoría de telecos sepan hacer de forma real, no teórica , las cosas mas simples que utiliza a diario en su PC, desde un notepad a una simple página web. Y esque después de todo puede que sea fácil, pero si alguien puede decirlo, somos nosotros, que sabemos hacerlo y que comprendemos los problemas de una manera mas profunda.
Ellos… ellos no saben ni por donde empezar

Por supuesto los informáticos no somos la panacea y todo el mundo que estudie estas ramas puede aprender, pero ya basta de tanta hipocresía, no son tareas fáciles ni triviales y es bastante molesto escuchar a personas con estudios, ingenieros o gente que se supone que sabe razonar decir todo tipo de barbaridades y desprecios hacia la informática.

Odio tener que evaluar carreras, me parece estúpido. El que debe evaluar es el mismo mercado, pero puestos a poner atribuciones que sean defendidas de manera institucional, que no sean con argumentos estúpidos e ignorantes, si vamos a poner las cosas en su sitio. Aquí los que sabemos de esto somos nosotros, y vosotros a hacer chips, con transistores, resistencias y bobinas, ala! a montar una antena FM.



Minería de Datos.

Noviembre 13, 2006

Llevo dos semanas sin postear nada de mi PFC. Y no ha sido por falta de cosas que escribir, todo lo contrario por el exceso de información y de ideas que puedo o quiero aplicar a mi PDF.

El primer fin de semana de Noviembre estuvimos en la CodeCamp. Un repasito a algunas cosas que vimos que me hicieron volar mi imaginación y querer aplicarlas a mi proyecto. Entre ellas una conferencia de minería de datos.

Minería de datos con SQLServer 2005 Analysis Services. Basicamente se trata de una herramienta que te permite realizar tareas de extracción de información (entre otras muchas) e inferencia sobre nuevo conocimiento a partir del conocimiento dado. Ofrece varias técnicas interesantes, las cuales mucha las hemos dado en la asignatura IA2, entre ellas a destacar los arboles de decisión ID3, redes bayesianas o redes neuronales. Muy Interesante y buena pinta en cuanto a la curva de aprendizaje, ya que todo se realiza con workflows y wizzards.

Esta herramienta viene acompañada de SQLServer 2005 Integration Services, para integración de datos entre formatos y proyectos distintos. Ha coincidido en un mes que ambas herramientas me han podido ser útiles para tres tareas distintas. Mi proyecto de ISW3, El proyecto “Cuadernos en Doñana” para el cual trabajo y mi PFC.

En cuanto a mi PFC la idea es la siguiente:
Me gustaría ir guardando toda la información posible de aplicaciones con AGs, relacionando problemas y sus parámetros, técnicas de AGs utilizadas y resultados. Esto sería útil para sacar conclusiones estadísticas sobre que técnicas y sobre que problemas o dominios son mas eficientes. Personamlente creo que esta técnica puede dar una visión mas “gráfica” de los resultados de los AGs y puede ser muy útil para decidir o escojer entre varias lineas de investigación.


A lo práctico…

Octubre 22, 2006

La verdad es que la cantidad de información en la web es impresionante, una investigación detallada podría llevar años y sin tener apenas nada práctico hecho, así que es mejor ir a lo práctico y comenzar a picar código y ha hacer pruebas.

Ayer comencé a montar toda la infraestructura necesaria. He instalado en mis máquinas las herramientas para el control de versiones.

Además he añadido un proyecto con algunos algoritmos de IA al repositorio que quizá me sean útiles como base para algunas cosas, así como mi trabajo de algoritmos genéticos en C para la asignatura IA1.

También en instalado LINQ en mi portatil para poder usar esta extensión del lenguaje c# y poder usar algunos algoritmos que lo usaban en los algoritmos de IA.


Buscando Referencias

Octubre 21, 2006

Realmente me siento inundado por la cantidad de referencias existentes en la web.
Aquí muestro algunas de las primeras referencias, las cuales intuyo son las mas importantes.

ISGEC International Society for Genetic and Evolutionary Computation. Esta es la organización mas “digamos seria o dedicada” al area de la programación evolutiva. Desde aquí podemos acceder a información sobre los siguientes eventos:

  1. GECCO: Genetic and Evolutionary Computation Conference. Evento a nivel estado unidense anual, seguramente el mas importante y organizado de todo el mundo.
  2. FOGA: De caracter mas secundario, pero mucho mas internacional. En el año 2002 se realizó en Torremolinos, Malaga. (Creo que también es anual)

Primeras entradas en google:

  1. en.wikipedia.org/wiki/Genetic_algorithm ->Wikipedia
  2. cs.felk.cvut.cz/~xobitko/ga/ -> Introducción a algoritmos genéticos, muy completa, sencilla, con applets de ejemplo. Muy interesante.
  3. http://www.rennard.org/alife/english/antsgb.html-> ejemplos muy interesantes, comportamiento de hormigas, detección de patrones.

Algunos proyectos y librerías que implementan funcionalidad de AG’s:

  1. La principal JGAP: http://jgap.sourceforge.net/
  2. Aplicando JGAP a Redes Neuronales: http://sourceforge.net/projects/joonegap/
  3. Pequeña API para AG’s en c# http://www.codeproject.com/useritems/aforge_genetic.asp
  4. Otra mas de CodeProject http://www.codeproject.com/useritems/GenticsDevTwo.asp
  5. Varias librerias relacionadas con el tema.
    http://www.mathtools.net/C_C__/Genetic_algorithms/index.html

Paginas con muchas referencias:

  1. http://www.genetic-programming.org/

Algunas ideas de propósitos.

Octubre 21, 2006

Una de las dificultades iniciales que observo en todo sistema estocástico en general es la dificultad para evaluar la calidad el sistema en sí. Realmente un algoritmo genético parece una gran idea, pero hasta que punto es algo superior a lo ya inventado es otro tema a analizar.

Para intentar ver donde se encuentran hoy dia los algoritmos genéticos debo comenzar a buscar en algunas referencias, la idea de un algoritmo genético y muchisimo de su potencial lo tengo muy claro pero lo que me parece mas importante es poder comparar con los métodos existentes actualmente y poder localizar cuales son sus ventajas, inconvenientes y diferencias con cada uno de ellos, así como que linea de investigación elegir para poder desarrollar el máximo de potencial a dicho método.

No solo esto, si de alguna forma se quiere demostrar que esta metodología ofrece realmente algunas cualidades únicas o especialmente sobresalientes hay que tener en cuenta que en el mundo real, en la industria, vale todo contal de encontrar la solución por ejemplo la mezcla de métodos para encontrar la solución obteniendo las ventajas de cada uno de ellos.

De todas formas, en este proyecto es muy importante ser lo mas pragmático posible, al fin y al cabo no soy matemático, y ya existen multitud de libros que realizan un análisis de este tipo para este tema, así que no quiero obsesionarme mucho, aunque se debe tener cierta corbertura matemática y no ir a ciegas ya que no es cuestión de perder el tiempo, no estamos por la labor de demostrar empiricamente la utilidad de algo que se ha demostrado su inutilidad de forma analítica.