viernes, diciembre 15, 2006

Finalmente...

Finalmente tengo un máquina en la que puedo hacer muchas de las cosas que tenía planificadas, lamentablemente aún no es la mía pero sirve. Que significa esto que con suerte en poco tiempo estaré publicando un par de posts largamente olvidados, mientras tanto quería comentar un par de cosas:
  1. SIF Hace poco más de una semana un amigo me comentó que habían publicado SIF en codeplex. SIF es la abreviatura de Service Invocation Framework que es un framework pensado para facilitar la vida de aquellos que trabajan con aplicaciones que consumen servicios. Si, y ase que WCF está listo y muchas cosas pero SIF les permite que sin instalar .Net 3.0 tengas funcionalidades tales como: Proxy dinámico de servicios (este por si solo vale oro), consumo de servicios independiente de transporte (WCF, ASMX, Remoting, etc.) diagnóstico, tracing y la posibilidad de tener un pipeline de proceso en el cliente. Altamente recomendado, ah si el link es http://codeplex.com/SIF
  2. Robotics Studio. Si señor la semana pasada finalmente se liberó Microsoft Robotics Studio que es libre para su descarga en uso no comercial. Sinceramente creo que esta herramienta es uno de esos productos que cambiará la vida de muchos. http://msdn.microsoft.com/robotics

Como ven eran literalmente un par de cosas. Espero que el próximo post incluya código.

jueves, noviembre 30, 2006

¿Quieres hacer pan? utiliza AJAX

Esta parece ser la premisa en todo lugar donde hablan de desarrollo Web. Al igual que ha pasado muchas otras veces con otras tantas propuestas y tecnologías AJAX se ha vuelto la palabra de moda y su uso un símbolo de status. SIn embargo no siempre AJAX es la mejor opción en muchas ocasiones en realidad estas generando tráfico y carga adicional todo por usar lo que esta de moda.

Como toda tecnología y herramienta en general AJAX tiene un lugar y uso adecuado por ello cito algunos escenarios donde AJAX no creo que se conveniente:

  • AJAX NO debe ser usado en sitios donde se redibuja toda la página. Piensen que si fuera un link seria solo una llamada en cambio con ajax tendrán la llamada, cambio de estilos y despliegue y el usuario no habrá ganado nada.
  • AJAX NO debe usarse para traer imagenes, un uso común es cambiar las imagenes pero si traen la imagen con AJAX y luego le piden al navegador desplegarla están agregando pasos innecesarios.
  • AJAX NO debe usarse para no tener que cambiar nunca de página. En este caso tus archivos JS se volveran enormes y todo el tiempo que podrías ahorrar entre llamadas lo utilizaras en descargar tus archivos. Los enlaces no son tus enemigos.
  • AJAX NO debe complicar la navegación. Tipicamente cuando alguien encuentra algo interesante lo que hace es mandar el link a otros por lo tanto un link javascript:Ejecutar('2sdfasdfasdf') no servira de nada. Este enfatiza el anterior los enlaces no son tus enemigos
  • AJAX NO debe asumir que todos los navegadores soportan Javascript habemos muchos que tenemos deshabilitadas varias opciones o incluso todo javascript así que siempre piensa en un método alterno.
  • AJAX NO debe ser usados para correr procesos Batch. Por muy tentador que parezca esto no es una buena idea. ¿Porque? porque simplemente pierdes totalmente el control del proceso al enviarlo al servidor. Es posible mantener un control pero para eso necesitarías crear al menos 4 servicios ajax Inicio, Estado, Cancelacion, Resultado. Mientras que una página de servidor puede refrescarse y mantener al tanto al usuario con un mayor control de proceso en el servidor.

En fin todo esto solo es para decir un viejo y conocido dicho la mejor solución es la más simple y recuerda AJAX no siempre lo es.

PS quiero hacer un reconocimiento al equipo de MS Visual Interdev e Internet Explorer que hace 7 años plantearon el uso de RemoteScripting y DHTML, ideas que evolucionaron en XmlHttpRequest y que hoy son base de AJAX, si tan solo todos los hubieran escuchado entonces...

martes, noviembre 14, 2006

Semanas ocupadas...

Para los equipos de producto, los mismos nos han dado muchas novedades y esperé a que estuvieran todas acumuladas para comentarlas.

  • .Net Fx3 RTM. Así es el lunes pasado se hizo oficial la comunicación y hoy WPF,WCF,WF y CardSpace estan disponibles para todos. Junto con el runtime también esta disponible el SDK de Windows Vista. Más info en http://www.netfx3.com
  • PowerShell RTM, En el blog del equipo de producto hoy anunciaron que finalmente el nuevo shell de Windows esta listo. Para los administradores de redes y servidores y para los amantes de la linea de comando es obligatorio descargarlo. Más info http://support.microsoft.com/kb/926139 (por si acaso los enlaces de descarga son nuevos así que puede que tarden un poco en estar disponibles)
  • Office 2007 RTM. También el lunes pasado el equipo de producto entrego el build que fue llevado a las fabricas. Lamentablemente este producto no se puede descargar, pero si esperan hasta el primero de diciembre ya se podrá descargar un trial. Por ahora habrá que conformarse con probarlo en línea. Más info http://office.microsoft.com
  • Vista RTM. El WIndows con el nombre más raro también llegó al final de su etapa de pruebas y fue entregado a linea de ensamblaje. Al igual que con Office habrá que esperar antes de tener un instalador de Vista y la fecha estimada de disponibilidad "en tiendas" es fines de Enero del 2007, pero para las empresas con acuerdos con MS deberían tenerlo en Diciembre. Más info http://www.microsoft.com/windowsvista/ 

Bueno todo esto se traduce en... MUUUUUUUUUUUCHO por aprender y estudiar. Si bien he seguido a WCF y algo de WF tengo mucho que aprender en WPF; CardSpace. Vista API, Office Server, etc., etc. etc.

domingo, noviembre 12, 2006

Pendientes

Al publicar el post incompleto de hoy (incompleto por que se suponía debía incluir un ejemplo) me dí cuenta que hace más de un més que estoy con la máquina de reemplazo. Definitivamente es un perjuicio pues en este mes han salido muchas ideas sobre las cuales escribir y que no he podido hacerlo por no tener donde probarlas. A continuación algunas de las ideas:

  1. Completar el ejemplo del post de Http Handlers. Mi idea es construir un handler de WebDAV muy basico (no PROP solo listado, GET y PUT)
  2. Análisis de estático de código en base de datos. Sip hay mil y un razones para hacerlo y estoy pensando en como automatizarlo (parece simple pero lo veremos)
  3. Diseño físico de bases de datos en SQL 2005. El artículo que referencié hace unas dos semanas es muy bueno pero quiero incluir un par de comentarios que son importantes y que no se mencionan a detalle

Bueno, esas son las idea por ahora, además de las revisiones de los nuevos drops del service factory y del Web Client Factory.

Hay mucho que hacer espero que mi portátil vuelva pronto.

Http Handlers

Ha pasado mucho tiempo desde que escribí un post. Esto se debe principalmente a que como comente anteriormente mi portátil estuvo en reparaciones y la máquina de reemplazo no tenía los recursos para poder hacer las pruebas que debían acompañar al post. Sin embargo, este post estuvo en trabajo por mucho tiempo.

¿Qué es un HTTP handler?

Veamos para entenderlo creo que es mejor mostrar un diagrama del flujo que sigue un requerimiento que llega a un servidor IIS ejecutando ASP.Net

Antes de seguir debo aclarar que este diagrama es reducido al proceso en ASP.Net y no considera el proceso propio de IIS.

Ahora si, en materia, como se ve en el diagrama ASP.Net procesa todos los requerimientos a través de un Http Handler que es configurado por path y requerimiento Http (GET; POST; PUT; etc).

El Http Handler recibe el requerimiento en bruto y es el encargo de procesarlo para enviar una respuesta. Por ejemplo .Net utiliza el "forbidden Http Handler" para proteger archivos de configuración, código fuente, base de datos, etc., este Http Handler lo único que hace es responder que el acceso a los recursos solicitados esta denegado.

Las páginas web, los eventos y todo el manejo que tantos usuarios queremos es provisto por por el PageHandlerFactory, así como el manejo de los serviciso Web es provisto por el WebServiceHandlerFactory.

¿Porque necesito saber de los handlers?

Esta es una tipica pregunta, bueno las respuesta son variadas pero yo enumero algunos ejemplos:

  • Seguridad. Es de conocimiento de todos que un sitio web que maneja información crítica debe ser protegido adecuadamente y una de las principales prácticas en temas de seguridad es la reducción de la superficie de ataque. Es decir deshabilitar todos aquellos componentes que no utilicemos. Por ejemplo en un sitio de servicios Web es recomendable deshabiltiar el PageHandlerFactory y de ser posible incluir la extensión aspx en la sección de forbiden. También deberían incluirse en forbidden extensiones como ser cgi, asp, etc.
  • Reutilización. Un handler es una herramienta muy poderosa para lograr grandes niveles de reutilización. Por ejemplo se podría crear un handler que lea un xml y con eso genere un feed en un formato especifico (RSS, ATOM u algún otro). Esto hace que todas mis aplicaciones solo tengan que generar un XML interno y cualquier cambio en la salida lo define en el Handler.
  • Performance. Hoy casi todas las aplicaciones necesitan almacenar algún tipo de archivo en la base de datos y para recuperarlo se crea una página que en base a los parámetros limpia el response y manda el resultado. SI bien esto no es malo (y muchos proyectos públicos muy grandes lo usan) es muy ineficiente y resta gran escalabilidad a la solución. ¿Por qué? pues porque para atender el requerimiento se creo una instancia del PageHandlerFactory una instancia de una página, se hizo manejo de eventos y muchas otras cosas innecesarias, en este escenario un handler evita toda esta maquinaría y es más directo en el envío de la respuesta resultando en ganancia de performance y escalabilidad. Para que quede claro esta recomendación no solo es valida para la carga y descarga de imágenes, sino para: Feeds, documentos, páginas Html estáticas ensambladas, Filtro de contenido, etc.

Creo que estas son muy buenas razones para que los desarrolladores presten atención a los Http Handlers y piensen mejor cuando podrían utilizarlas.

En un próximo post haré un ejemplo más concreto en el cual trataré de mostrar la ganancia en seguridad y performance. Eso si tendrán que esperar a que retorne mi portátil.

lunes, octubre 30, 2006

Diseño físico de base de datos

Este tema es una de los que personalmente ha estado en mi cabeza los últimos años pues es una de las áreas más descuidadas a la hora de implementar soluciones medianas y grandes, por eso es que cuando encontre este artículo me parecio que vale la pane difundirlo.

http://www.microsoft.com/technet/prodtechnol/sql/2005/physdbstor.mspx

PS: Estoy con problemas que me impiden hacer pruebas y documentar lo que tengo en la cabeza para poder publicar más a menudo, espero que en unos 10 días esto estará solucionado.

jueves, octubre 12, 2006

Lo que debo tener instalado si o si

El día lunes sin previo aviso mi laptop paso a mejor vida, si ya se que no es nada raro . El tema es que esta vez lo que paso a mejor vida fue el hardware en general. No la instalación, no el disco duro, sino todos lo demás.
Bueno mientras mi laptop es revisada por la gente de servicio técnico me fue entregada una de respaldo con lo básico (Windows y Office) y sin los permisos para instalar nada más.
Después de usarla menos un día lo que me queda claro son las cosas que se han vuelto imperativas en mi modo de uso de la PC
  • Resolución de 1400. El tamaño de esta pantalla me esta matando...
  • Total Commander. Mucho más que un simple manejador de archivos, manejo de servicios, procesos, event log, compresión, etc.
  • PowerShell. El futuro del shell en la para Windows se volvió casi imprescindible en muy poco tiempo (como extraño esa orientación a objetos y dinamismo).
  • SharpReader. Este fue el primer agregador que usé y que luego deje de usar por un tiempo pero que al final siempre vuelve por su interfaz simple y clara y además por su bajo consumo de recursos.
  • Tarjeta Wireless Si, ya se que esta no tiene que ver con software pero cuando no eres administrador no puedes conectar ningún hardware adicional.
Muchas otras cosas seguro vendrían a mi cabeza si supiera que esta es mi máquina definitiva. Pero estas se que son las que extrañaré aún si esta máquina la tengo solo una semana.

martes, octubre 03, 2006

Fx-> CF -> MF

Estoy muy retrasado con esta noticia pero la semana pasada no estuve muy conectado para verlo con anticipación. El día 26 de septiembre en el Embedded Conference de Boston se liberó el beta de .Net Micro Framework.

.Net MF es la implementación del framework para aquellos dispositivos que están restringidos en memoria y recursos de hardware y surge del viejo proyecto de research Smart Personal Objects que mostró hace unos años un reloj que corría .Net en 64KBs y luego derivo en la comercialización del smart watch y su integración con msn a través de Direct MSN utilizando bandas de FM para la comunicación.

Pero no quiero desviarme de la historia la idea es que el equipo siguió trabajando y logró obtener una versión "genérica" que esta siendo probada por varias empresas que construyen dispositivos inteligentes. Lo interesante de esta versión del framework es que a diferencia de las anteriores que se ejecutan sobre un sistema operativo .Net MF trata de ejecutar directamente en procesador (bueno una HAL ligera para facilitar el cambio de componentes), es decir que todo el código que se genera es manejado. Si, leyeron bien código 100% manejado no Interop, no marshalling no nada. Esto quiere decir que incluso los drivers de hardware que si son escritos en C o similar por rendimiento son expuestos en interfaces de código manejado, esto es simplemente impresionante.

El grupo además ha hecho leverage de todo el trabajo de VS2005 y el .Net CF por lo que se dispone de emuladores para probar el código, se puede hacer debug de mismo en el emulador o en el dispositivo como tal. Estas cosas que para los desarrolladores de aplicaciones Windows y Web son algo comunes para los desarrolladores de dispositivos inteligentes son en algunos casos impactantes y en casi todos innovadoras.

Obviamente que el .Net MF no está disponible al público por el nivel acoplamiento que hay entre el dispositivo y el framework como tal (aunque el código que corra en hardware similar debería ser el mismo) pero se puede obtener algo de información básica en http://www.aboutnetmf.com

Ahora solo me pregunto si la gente de Robotics esta al tanto para que podamos contar con el manejo de servicios, estado, CCR e incluso el lenguaje de modelado en estos dispositivos. En fin, el futuro de los dispositivos inteligentes y robots se ve brillante en el mundo .Net

lunes, septiembre 25, 2006

Compresión y Servicios (Parte 2)

En el anterior post traté de explicar la necesidad de un mecanismo de compresión que pueda ser con los servicios. COn esto en mente veamos algunos de los mecanismos que se han estado utilizando.

Compresión en transporte

Este camino es el que tipicamente se ha encarado y principalmente por que Http 1.1 incluye en su especificación la posibilidad de utilizar la cabecera Content-Encoding para comprimir el contenido. Esta especificación es de mucha utilidad pues las razones que llevaron a la implementación de esta parte de la especificación son las mismas que discutí en el anterior artículo (no olvidemos que XML y HTML son substes de SGML). Es así que cuando el transporte era Http era la opción ideal para compresión.

Hablando especificamente de Windows IIS es capaz de comprimir el contenido generado por cualquier página o servicio que se ejecute en su contexto. Los pasos para habilitarlo están aquí. Y en lo que se refiere al cliente .net en la versión 1.0 y 1.1 soporte para Content-Encoding: gzip por lo cual era necesario algo de magia para que funcionara. Pero en la versión 2.0 solo es necesario hacer uso de la opción EnableDecompression.

Pero en lugar de seguir con Http Compression exclusivamente, entendamos el concepto si utilizaba Colas, SMTP, FTP o el transporte que fuera la tarea de compresión era responsabilidad del mismo y no así de la capa de manejo de SOAP y otros.

Lamentablemente WCF no provee soporte nativo para Http Compression y sus otros transportes tampoco lo implementan por defecto.

Serialización optimizada

Esta idea surge como contrapartida de la necesidad de compresión y su objetivo no es comprimir un mensaje sino generar un mejor mensaje, este enfoque en teoria evita todos las sobrecargas descritas en el anterior post. Casi todas las iniciativas se han denominado Serialización binaria o alguna otra variante. La desventaja de este tipo de escenarios es que ninguna se ha impuesto como un estándar y su nivel de compatibilidad es muy limitado.

Actualmente hay un par de ideas alrededor que han extendido este concepto. Estos conceptos se basan en que la serialización no debería modificarse y debería seguir serializandose el mensaje a XML Infoset, en cambio estos deberían codificarse (encode) en binario y no en documentos XML, WCF utiliza este concepto en su encoding binario que es, en palabras de Clemens Vasters en su blog, el nieto moderno y bajamente acoplado de NDR. Otro proyecto que esta tomando cuerpo es Fast Infoset , este proyecto impulsado por Sun y que basa su mecanismo de codificación en ASN.1  pretende ser la alternativa en escenarios Java. De nuevo estos mecanismos no aseguran interoperabilidad (aunque ya hay muchos trabajando en tener FI para WCF) y a pesar de que el tamaño del mensaje es mucho mejor no es comparable con un mensaje compreso.

Doble codificación

Este mecanismo lo han utilizado algunos en distintos transportes y consiste en que el generador del mensaje luego de serializarlo y codificarlo en XML lo vuelva a codificar esta vez utilizando un mecanismo de compresión, si queremos plantearlo así es llegar el concepto del content-encoding a la capa de codificación.

Esto no había sido utilizado mucho anteriormente pero me imagino que esta situación cambiará mucho al incluir los nuveos frameworks de servicios la facilidad de reemplazar o extender los codiicadores (encoders).

En el SDK de WCF podrán encontrar un ejemplo de un encoder que comprime utilizando GZip. Lo bueno de este encoder es que puede utilizarse en cualquier transporte. Lo malo es que no hay interoperabilidad

WS-Compression

Tengo que reconocer que no se exactamente donde surge esta especificación pero se que la primera mención de la misma se de en el proyecto PlumbOrange de Christian Weyer y cia y que fue implementado por gente de Lagash (Rodolfo y Pablo) para las distintas versiones de Web Services Enhancements y siendo la última disponible la creada para WCF RC1 por Pablo.

Bueno, esta es una especificación que siguiendo el ejemplo de XML Encryption reemplaza el contenido de un infoset XML con un elemento que contiene el binario (en base64) que cooresponde a la versión compresa. Y luego modifica el infoset para incluir información de referencia para descomprimir el elemento.

Este mecanismo tiene la ventaja de que puede ser más interoperable que la doble codificación y la codificación binaria, pero tiene la deventaja que al ser el resultado aún un documento XML no se obtiene el mejor resultado de compresión.

Conclusión

De las alternativas mencionadas casi todas ya están disponibles en WCF y/o WSE por lo cual es recomendable que se evalúe cuando puede ser beneficioso implementar estos mecanismos.

lunes, septiembre 18, 2006

los lenguajes pasan, la lógica se mantiene

Robo un tiempo a la escritura de la segunda parte de serviciosy compresión para comentar en los lenguajes de programación. Esto surge porque el día de hoy recibi uchos mensajes relacionados con lenguajes, primero el anuncio de que las presentaciones de Lang.NET estan disponibles. Luego me envían el link de un artículo en el que se recomiendan los lenguajes de programación que uno debe aprender para estar a la par del mercado (el orden sigue sin convencerme pero los lenguajes me parece que son los encaminados) y finalmente leo varios comentarios respecto a IronPython.

En fin si analizo cada tema por separado cada uno me trae muchas ideas y en este momento solo comentare algunas:

  1. Lang.NET: Cuando uno lee el temario de este simposio queda claro que hay mucho trabajo alrededor de los lenguajes dinámicos, Aún recuerdo que en mis primeras interacciones con JavaScript lo que más me atrajo del lenguaje fueron las características que lo hacen dinámico y con el tiempo descubrí muchas ventajas y llegué a establecer cariño con algunos lenguajes dinámicos. La principal ventaja de este tipo de lenguajes radica en la extensibilidad y capacidad de adaptación que brindan estos lenguajes a sus soluciones. Por ejemplo permiten que interfaces gráficas sean fáciles de crear y embeber en soluciones empaquetadas, otro ejemplo es la generación de objetos totalmente consistentes sobre la marcha (para ejemplo basta un botón TurboGears o Ruby on Rails.
    Sin embargo también hay que recordar que los lenguajes adolecen de una gran contra que es el impacto en rendimiento tipicamente los lenguajes dinámicos son interpretados y debido a que son dinámicos se hace un manejo muy complejo de las declaraciones y tipos.
    Bueno creo que hablaré más de esto en el punto 3, pero sigo con el simposio. Más allá de los lenguajes dinámicos es interesante ver como el CLI se vuelve objeto de todos tipo de lenguajes funcionales, dinámicos, etc. y ver que los distintos esfuerzos alrededor están demostrando que es una plataforma viable para realizar implementaciones optimizadas.
    Creo que es importante que los equipos de desarrollo involucrados con el CLI (en Microsoft y en Mono) empiecen a considerar algunas mejoras que surjan como recomendación de estas iniciativas y aseguren que la implementación de estas esten disponibles para todos los lenguajes generando una plataforma común y evitando que se dupliquen esfuerzos. Y si se puede finalmente incluirlo en el CLI. Hay que entender que muchos requerimientos de otros lenguajes pueden afectarse entre sí y allí es donde nosotros los mortales confiaremos en la sapiencia de los gurús.
  2. Los lengaujes a aprender: Hace unos 8 años cualquiera que salía de la universidad había escuchado al menos una vez de Delphi y lo importante que era aprenderlo, es más yo era uno de sus defensores (lo que no quita que también usara Visual Basic). Y hoy no existe ninguna variante o descendiente que haya logrado ingresar en el top ten de e-Week. Personalmente creo que un programador debe poder adecuarse a cualquier sintaxis, pero también creo que no cualquier sintaxis se adecúa a cualquier problema. Por ello es muy importante que un buen programador conozca al menos 3 lenguajes de desarrollo, y en el caso de un arquitecto ... bueno un arquitecto tiene tiempo para leer mucho, ¿verdad?.
    Así que empecemos a hacer una revisión de como estoy yo con respecto a la lista:
    Lenguaje Lectura Escritura
    PHP Media Básica, ha pasado mucho tiempo
    C# OK OK
    AJAX OK OK
    JavaScript/ECMAScript OK OK
    Perl Básica casi :S :S
    C OK Basica - Media
    Ruby Básica Básica, muy básica
    Java Media :S
    Python OK Media - OK
    VB.Net OK Media -OK
    Primero tengo que aclarar mi escala: OK significa que siento que puedo leer/escribir una aplicación completa sin mayores sobresaltos, Media significa que podría leer/escribir una aplicación con algunas consultas a fuentes de documentación del lenguaje, Básica es mi entendido de que puedo darme una idea pero requiero de actualizar mis conocimientos o de tener la referencia del lenguaje a mi lado y finalmente :S significa que tendría que pedir ayuda a alguien que si sepa.
    No esta mal, solo tengo dos en los que no podría escribir código y en ambos casos es un tema de afinidad con el lenguaje, en este punto tengo que aclarar que nunca me han gustado ni Perl, ni Java ni su sintaxis. Es cierto que he escrito código en Java pero no fue una sensación agradable.
    Si ya se que me dirán si escribo ECMAScript y C# no debería tener problema con Java, pero esa no es la verdad.
    En fin, creo que es importante revisar al menos 5 de estos lenguajes y tenerlos en un nivel medio o superior para lectura y al menos 3 en medio o superior para escritura. Para cerrar quiero decir que en la lista falta una variante de lenguaje que para mi esta dando y dará mucho que hablar y que toca varios puntos importantes de la lista: IronPython y con esto paso al punto 3.
  3. IronPython Como habrán visto de mi lista anterior Python es un lenguaje con el que me siente comodo, esto viene de hace unos años cuando necesitando una aplicación que permitiera que una aplicación cualquiera se coenctara a un sitio que autenticaba con NTLM y encontré NTLMAPS viendo la aplicación encontré muchas cosas de Python que nunca habia visto así que me involucre y estuve mucho tiempo jugando con Python y llegó a posicionarse como uno de mis lenguajes favoritos.
    Luego por razones de falta de tiempo deje de verlo y hace dos años o poco más vi en listas que había algo llamado IronPython que era un compilador de Python para .Net al ver el sitio de proyecto quede encantado porque Jim no solo estaba portando Python, sino creando un derivado que le permitiera utilizar las ventajas de Python y las ventajas de .Net.
    Durante mucho tiempo seguí el proyecto, me alegré cuando me enteré que Jim ingresaa a Microsoft y mucho más cuando supe que IronPython contaría con el apoyo de Microsoft. Bueno con esos antecedentes les contaré que hace un par de semanas Jim Hugunin anunció en su blog la liberación de la versión 1.0 de IronPython y no tarde en descargarlo. La verdad me parece un gran trabajo y el hecho de que pueda pasar  un 90% de las pruebas de la libreria estándar de Python es áun más sorprendente (el 10% que falta utiliza extensiones compiladas en C so..).
    Bueno desde la liberación estuve haciendo un par de cosas y la verdad me encanta IronPython. Me queda pendiente probar el add-in para visual studio pero Python es un lenguaje para trabajar en archivos y consola :)

Para finalizar este post que se extendió un poco solo quiero recalcar que si bien como desarrolladores podemos comulgar con un lenguaje u otro y que gracias a los servicios podemos comunicarnos facilmente con soluciones en otros lenguajes, no debemos olvidar que en un mundo de desarrolladores libres siempre habrán otros lenguajes y que cada uno tendrá un lugar para ser y crecer (yo creo que ya veremos algún lenguaje tipo pascal darnos una sorpresa).
Los lenguajes van y vienen pero mientras tu lógica, deseos de aprender y capacidad de análisis se desarrollen puedes estar seguro que siempre habrá uno que te satisfaga.

Presentaciones Lang.NET

Para los que no saben Lang.Net es un simposio que se llevo a cabo en Redmond a fines de Julio. Las sesiones están orientadas exclusivamente a tem[as como ser compiladores, CLI, virtual machines, lenguajes. En fin sesiones de bajo nivel pero definitivamente muy interesantes. Recientemente se publicaron en video las presentaciones así que para quienes esten interesados este es el link

http://www.langnetsymposium.com/speakers.asp

sábado, septiembre 16, 2006

Compresión y servicios (Parte 1)

Una de las principales dudas que tuvimos todos cuando SOAP y todos sus parientes hicieron aparición en escena fue el impacto en el rendimiento de estos protocolos tan pesados, XML era basicamente un formato de serialización muy chatty y no se comparaba con serializaciones binarias altamente optimizadas que utilizaban los protocolos de objetos distrbuidos (DCOM, CORBA).

Con el tiempo y entendiendo los conceptos que hoy conforman SOA se entendió que esto no impactaría tanto como se esperaba por el cambio en la programación de interfaces y contratos.

Sin embargo esto no quita que aún así XML sea una serialización muy cara, si hablamos de una red corporativa con LAN de 100 Mbps es manejable pero cuando se empiezan a construir soluciones que se se ejecutarán en enlaces bajos (dial-up, satelital, etc) y es en este punto donde mucha discusión se ha dado en el uso de compresión para la comunicación con servicios.

Si consideramos que las respuestas grandes de servicios serializados en XML son documentos con un conjunto de registros similares cualquier algoritmo de compresión puede hacer un muy buen trabajo para disminuir el tamaño de un archivo. Tomemos por ejemplo un servicio de búsqueda que devuelve un documento con los resultados de búsqueda. La estructura del mensaje sería la siguiente.

<resultados registros="100" inicio="0" total="1054">
<resultado>
<Titulo>Sitio 1</Titulo>
<Descripcion>Breve descripción del sitio</Descripcion>
<Url>http://sitio/</Url>
</resultado>
...
<resultado>
<Titulo>Sitio 100</Titulo>
<Descripcion>Breve descripción del sitio</Descripcion>
<Url>http://sitio34131</Url>
</resultado>
</resultados>

En este caso al existir tanto texto similar el grado de compresión puede ser muy alto, por ejemplo un archivo XML de 1.5 MB utilizando gzip como algoritmo de compresión (RFC 1952) se convierte en 120 KB es decir un 8% del archivo original. Es cierto que el archivo que utilice como ejemplo tiene otros textos repetidos pero sirve como referencia.

Obviamente nunca deberíamos retornar 1.5 MB como resultado de un servicio pero tomando la estructura de ejemplo al retornar 100 registros tenemos un archivo de 13750 bytes. la transmisión de este resultado a través de una linea de 56Kbps( aproximadamente 7KBps) sería de 1.91 segundos (tiempo ideal sin ruido y confiabilidad de 100%). Si se que suena a que no es nada pero siguamos analizando. Si este mismo archivo lo comprimimos con gzip nivel 3 se convierten en 327 bytes con un tiempo ideal de 0.04 segundos. SI se considera que este tiempo es uso de ancho de banda y red esto podría significar atender a unos cuantos cientos de usuarios más con el mismo ancho de banda.

Como siempre no todo puede ser miel y en este caso el costo es un tiempo adicional para la compresión, el uso de procesador y memoria del servidor. entonces el tiempo adicional de proceso debe sumarse para ver cual sería el tiempo real de proceso.

En nuestro caso el tiempo de compresión es de no más de 10 milisegundos (utilizando la clase GZipStream del .Net Framework 2.0), si sumamos este tiempo al tiempo de transmisión tenemos un total 0.05 segundos lo cual es aún un muy buen resultado.

Otro aspecto a considerar es el uso de procesador, tipicamente todos los algoritmos de compresión tienen niveles que permiten definir la carga en procesador y memoria de la tarea de compresión. En el ejemplo se ha utilizado gzip nivel 3 (el que provee el framework) que no tiene impacto mayor al de un proceso de servicio por lo cual es una extensión solo en tiempo

El último aspecto es el uso de memoria, dado que la mayoría de las especificaciones WS-* requieren el Infoset de respuesta completo para su proceso actualmente casi todas las soluciones de publicación y consumo de servicios manejan los mensajes en buffer por lo que el consumo de memoria adicional es el relacionado al tamaño de la versión compresa de los datos. De nuevo en nuestro ejemplo es un 2%. Este dato no es despreciable en servidores de muy alto uso porque puede llegar a convertirse en punto de contención.

Con todo lo anteriormente dicho cual sería el criterio para decidir si utilizar compresión en la publicación de servicios:

1. Si se conoce que los clientes disponen de bajo ancho de banda y el nivel de concurrencia no estima que la memoria de servidor sea saturada es recomendado utilizar compresión, el nivel de compresión será determinado por la capacidad de procesador del servidor.

2. Si en cambio tenemos mucha concurrencia y anchos de banda aceptables es mejor no utilizar mecanismos de compresión de datos.

Con este pseudo-análisis (si ya se que tiene muchos vacios y que no puede llamarse un análisis serio) veamos cuales son las alternativas que se han manejado para la compresión de datos en servicios.

martes, septiembre 12, 2006

Nueva distribución de contenido

Como mencioné en un post anterior ya tengo dos blogs es por eso que he tomado la decisión de utilizar cada uno de ellos para un fin distinto, el Space de Live seguirá siendo el lugar donde ponga mis pensamientos, divagues, cuando sea que ellos desean llegar, y comentarios de indole familiar y de amistad.

El relativamente simple de blogger en cambio lo utilizaré para publicar datos y comunicación de orden laboral y técnico. De esta manera cada quien podrá visitar o suscribirse al contenido que desee.

Solo por si alguien se lo preguntaba el sitio técnico estará en castellano y estará abierto a que puedan enviarme preguntas para que en aquellos casos que pueda ayudar así lo haga.

Obviamente esto no significa que estaré escribiendo más a menudo pero es solo una decisión tomada hoy.

jueves, septiembre 07, 2006

No todo en los iPod es color de rosa

Dejenme empezar diciendo que hasta el día de hoy habia tenido la mejor de las experiencias con mi iPod. Tengo un iPod Nano de 4GB en el que tengo casi toda la música que poseo (obviamente mi colección de CDs es algo limitada)

En fin, el día de hoy cuando me disponía a ir a una reunión prendí mi IPod y me vi con la maravillosa pantalla de diagnóstico. "Bueno", me dije, "sin duda hice reset sin querer" (es raro desbloquear, bloquear y presionar acción y menu por 6 segundos sin querer y luego presionar acción y prev otros seis, pero...) es así que por los próximos 40 minutos corri una variedad de pruebas en las que afortunadamente mi iPod aprobó.

El último punto Reset. Bueno llegando a casa lo sincronizo de nuevo. Y así paso el resto del día. Sin embargo llegue a casa y cuando conecto el iPod solo obtengo el nefasto

Para los que no conocen la simbología de los IPod esto significa que necesitas reinicializar tu IPod. Bueno habramos iTunes

:S ¿qué no esta conectado mi iPod?
Si tu lo dices... probemos con el iPod Updater
"Can't mount iPod" (perdón pero no estaba de humor para sacar copia de las ventanas)

Bueno, veamos que nos dice el sitio de Apple... reintente con ITunes, Updater,  yadda, yadda, yadda. Ah, pruebe moviendose a disk mode 

Probemos... nop sigo viendo el condenado folder y aunque esta vez el iPod Updater se bloquea

Revisemos otros pasos, y encontre este artículo iPod shows up in Windows but not in iTumes.

Es decir que tengo que eliminar todo y reinstalar, bueno vamos por ello y para estar seguros descargo de nuevo iTunes y el iPod Updater. Finalizado, llego el momento cumbre conecto de nuevo mi iPod y ... nada "can't mount ipod"

Me estoy preocupando, ¿y si corro de nuevo el diagnóstico? aqui voy bloquear, desbloquear, presionar acción y menu por 6 segundos, presionar acción y prev otros seis si ya estoy en el menu corramos el diagnostico de scan (prueba del disco)..... Como diría mi amiga Paula ¡rayos!

 Este icono significa que el sistema de iPod no pudo recuperar datos del disco duro, la documentación dice que si no puedo llevarlo a disk mode esto es historia. Cruzo los dedos y hago todos los pasos Check estoy en disk mode fiu....

Esperen iPod Updater lo detecto y pudo montarlo, Restore si... esta restaurado. En este momento estoy sincronizando de nuevo toda mi música pero esta vivo. Todo producto de software es susceptible a este azares.

miércoles, septiembre 06, 2006

Contigo Avanzar en Santa Cruz

Bueno esa era la idea pero debido al problema del paro civico es probable que hayan cambios en las fechas. El día viernes estaba planificada la realización de la jornada de trabajo, sin embargo con el paro convocado esta en duda y no se exactamente cuando se realizaría.

El concierto sería el sábado 9 de septiembre a partir de las 19:00 en la casa de la cultura. Esta vez son cuatro los participantes:

Como siempre la entrada será libre así que estan todos invitados

Inicio en Blogger

Por un proyecto que en un futuro próximo espero se de a conocer (proyecto.. bueno una idea) es necesario que habilite una cuenta en blogger por ello hoy debuta http://relativamentesimple.blogspot.com  . Esto no significa que dejare de user mi space en Live, esta cuenta es complementaria y esta versión del blog será una replica de la que se encuentre en spaces.

Si ya se que no he escrito mucho pero espero que esto cambie en el curso de la próxima semana.