Monday, December 22, 2008

El código que si debería preocuparte

Basándome en la premisa de "pensar que cosas hacer en vez de como hacerlas", es que debemos tener cuidado al momento de diseñar o presentar ciertas recomendaciones.

Dado que, de acuerdo a lo que debe hacerse, se plantea un esquema de construcción, y luego de priorizar dichas actividades uno debería tener ya en cuenta que las funcionalidades van por delante del código/librerías a construir/implementar. Y que, dicho sea de paso, las funcionalidades determinan los contratos "mínimo/suficientes" que deben considerarse para determinar el cumplimiento de los requerimientos.

Con estas funcionalidades transformadas en contratos es que se tienen que trabajar los conocidos casos de prueba (me parece es que David estaba hablando de pruebas en su ultimo post?) desde el inicio del proyecto, ya que a mi parecer, estos casos se van enriqueciendo con el pasar de los días. De ser asi, por que esperar hasta terminar el desarrollo para tener listo todo el set de pruebas?
Que si es posible lo contrario? creanme que he experimentado situaciones en las que no consideraban la construcción de casos de pruebas desde el inicio.

En si, las pruebas, independientemente de la manera en que sean ejecutadas (el cual es un tema largo de conversación) deben en primer lugar, enfocarse en los resultados y cumplimiento de estos contratos "mínimo/suficientes". Dado a que, en resumidas cuentas, nuestro trabajo es reconocido por si el producto funciona. Si no es asi, favor corrijanme si es que al usuario no todo le parece transparente.

He notado que en la mayoría de situaciones es menos probable encontrar la explotación y seguimiento de resultados de casos de prueba, puesto que, principalmente es el código que le preocupa a cada desarrollador.
Pero que sucede con el caso del resto de componentes? es decir:
- Librerías de la compañía (Librerias de uso comun, como acceso a datos o correo)
- Librerías especializadas-externas (Proveedoras de controles/componentes/etc.)
- Librerias Open Source

Lo que debe tomarse ya como cierto es que no tenemos que caer en el juego de "lo necesito, lo construyo". Dado a que, tiempo es dinero y ese dinero es el que estamos ahorrando para disminuir costos, a corto o largo plazo.

Considero que a pesar de ello debe tenerse bastante cuidado con las librerias con las que se decida trabajar. La importancia con la que se maneje tal situación determinará el cumplimiento del objetivo de "no reinventar la rueda"
Y porque digo esto?

***Caso: Librerias de la compañía
Creo que en cierto punto, casi todos hemos pasado por la situación de haber construido un componente que "a nuestro entender" puede convertirse en algo de uso común.
El problema viene cuando dicho componente/librería/control/piece of code, no está del todo documentado o peor aun, luego de algunas pruebas llegamos al punto de "ese caso no nos ha pasado, pero no debería caerse".
Esto en vez de aportar al proyecto puede convertirse en un cuello de botella.

Pues que solución?
Entre tantas, creo con un poco de Gestión de la Configuración y algo de compromiso de parte del Gestor o responsable para que al liberar versiones de componentes de construcción, estos se mantengan estables, documentados o en todo caso, autosostenibles que permitan el correcto uso de las funcionalidades que brindan.
Creo que tambien ayuda un poco menos de ego, no les parece?

***Caso: Librerías especializadas-externas
Este tema es mas que conversable, pues estamos hablando de pagar por librerías de uso comprobado.
El problema está en que muchas veces nos dejamos llevar por las propagandas o animaciones que podemos encontrar en la red. Creanme, que a veces es asi.
El caso es similar si es que hablamos de complejidad de uso, documentación, ejemplos y lo mas importante, costos de soporte. En algunas situaciones, este deja de ser gratuito (muchos de mis amigos me dicen que alli radica el negocio, o no?)

Pues que solución? Evaluacion directa de las alternativas de compra, asi como tambien la revisión de la actividad pública de los foros de usos de la librería y de la rapidez de respuesta y aportes brindados por el soporte de la empresa.
Como punto adicional, algo que debe considerarse en la evaluación, es la periodicidad de fixes/patchs liberados, la compatibilidad hacia atras, y ademas claro, de la caducidad del contrato.
En mi caso he pasado por estos procesos de evaluación. Sinceramente es algo tedioso, ya que no estamos hablando de un juguete para navidad, esto es algo serio!

***Caso: Librerías Open Source
Este aspecto es de por si delicado, ya que ademas de la estabilidad, documentación o ejemplos de uso, debemos considerar aspectos como el nivel de aporte brindado por la comunidad (se de un caso en que el proyecto fue cerrado porque el unico que desarrollaba era el dueño de la idea, asi que un día se cansó y dejó de hacerlo).
En si, los riesgos o problemas identificables en este aspecto son similares a los encontrados en el caso de las librerías especializadas, pero bajo la premisa que la empresa de terceros es ahora una comunidad abierta y algunas veces, volatil.

Pues que solución? En las evaluaciones debe considerarse el aporte de la comunidad en lo que desarrollos se trata, ademas de la periodicidad de releases y compatibilidad con nuestras plataformas de trabajo. 
Si hemos llegado aqui, debemos coincidir en un punto medio, ya que tampoco conviene estar actualizando constantemente las librerias.
Lo que no debe olvidarse de que las ideas Open Source no dejarán de ser buenas ideas, pero que muchas veces caemos en trabajos de entusiastas (esto claro, sin animo de ofender a nadie) que -muchas veces- cubren el trabajo bajo la idea de "primero que funcione luego ya veo".
Asi que, debemos atenernos al riesgo de encontrar disparidad de estándares, manejo de memoria, falta de ejemplos, etc.



En resumen.
De por si son demasiados los aspectos que debemos considerar en nuestras preocupaciones sobre que parte de código probar o no, pero muchas veces olvidamos darle cierta importancia a algunos empaquetados que "se supone" deberían funcionar correctamente.
Creanme, somos humanos, existe aún código por probar.

Nota: Les recomiendo el libro "Code Leader", al escribir este post recordé claramente algunas recomendaciones que pude resumir brevemente, creo que el capítulo se llamaba "Buy or not buy code".

Saludos[at]Cama

Friday, November 28, 2008

Elementos que no dejo de usar en la red.


No acostumbro tener demasiadas ventanas abiertas, pero gracias al Chrome y conversando con David, les comparto algunas herramientas web que uso ultimamente...
Esto claro, sin orden en particular.

- Google Reader: De todas formas, imprescindible... requiero leer entre lo básico del día, miscelánea, gurúes y demas temas que muchos dirían "y que significa esto?"

- Web de Noticias: BBC de Londres - El Comercio Perú, pues bien, trato de leer cosas variadas, intento si, seriamente no ubicarme en temas dolorosos (No a la Violencia)

- GMail: Correo que sin darme cuenta se volvió en mi cuenta personal!

- Google Analytics: No diariamente, pero si cada cierto tiempo.

- Google Alerts: La verdad es que, me entero de muy buenas cosas, y todo esto... sin esfuerzo alguno!

- Twitter: Bueno, este es un vicio que vale la pena tener en cuenta!


Como pueden notar, no son muchas las cosas que considero imprescindibles, pero entre los feeds y alerts que reviso, tengo muchísimo por revisar.

Lo preocupante es ver como cada día soy uno mas, un Google Fan Boy que sigue usando "productos beta", pero bueno, mientras no compren TwT seguiré tranquilo (asi que FaceBook, apurate con la compra)

Sin mas me despido, y ya saben... Jersson tambien tiene twitter.


Saludos[at]Cama

Sunday, November 16, 2008

Recuentos del PDC2008 - IV

Del último día solo puedo decirles
- "M" se vé muy bonito, Chris Anderson se lució en la presentación, pero siento que aun falta demasiado por recorrer (eso no quita que tenga el libro y lo haya revisado rapidamente durante todo todo el trayecto de regreso a Lima)

- F# es mas de lo que parece!, Luca Bolognese tuvo una de las mejores presentaciones que he visto en mucho tiempo. Les cuento que cuando terminó su sesión, pues salí en busca en cualquier cosa (Libro/Sticker/Mochila) que dijera F#. Lamentablemente ya casi todo estaba cerrado (incluso ya muchos se habian ido), asi que me senté en una escalera por fin, descansando de todos esos días.
Hasta que levanto la mirada y veo caminando a Edgar Sanchez, lo saludo, y comenzó la conversación (Diablos, debería grabar todo lo que comento, pregunto o respondo)

Que de que hablamos? pues desde mis posts hasta mis puntos de vista de todo tipo.
Creo que terminé aprendiendo mas de la cuenta, y bueno, luego de 4 días de reventadas de cerebro y mas de 6 horas de asesoría personalizada, pues uno como que termina contento, no?

Saludos[at]Cama

Sunday, November 09, 2008

Jersson tambien tiene twitter

hace un par de dias, ya que es mas rápido escribir una linea que tooodo un post (los que me conocen saben que demoro en demasía).
Aqui mi dirección,
http://twitter.com/Jersson
a ver que pasa

Saludos[at]Cama Prestada

Thursday, November 06, 2008

Recuentos del PDC2008 - III

El dia 3 comenzó muy bien, mucho mejor que el día 2, y eso que terminamos yendo al Universal Studios de Los Angeles, muy bonito, de verdad, y escalofriante tambien, ya que todo estaba acorde a la noche de brujas. La sensacion del momento, pues las casas de terror... y no me digan nada de Elm Street, que alli no regreso.

Pero bueno, el día tres comenzó y camino al keynote de la gente de Research me di cuenta de lo poco que había comido ultimamente.
Ya dentro del keynote quede algo sorprendido por algunas cosas que ya se habian visto, es decir, los avances que se tenían en Microsoft Robotics, pero cuando ya comenzaron a hablar de programacion sobre sensores y que ya se tenian implementaciones que administraban la temperatura, comencé a pensar en tantas cosas... (Estos quieren meterse en HW!!!)
Luego tuve que salir un momento a revisar unos libros al Store del evento, puesto que el día anterior fuí y me dijeron "lo siento, cerrado".

Días despues Edgar Sanchez (una gran persona) me comentó que me habia perdido de algo muy bueno, lo siento, pero prefiero no recordar ahora lo que me perdí, lo gracioso es que me salí media hora antes de terminar la sesión, todo sea por los Libros que queria revisar (y ya les contaré)

Bueno, el día continuó muy bien, primero con la sesion de WCF 4.0 (4.0!!!) en la cual comentaban como la convergencia entre WCF y WF se hacia cada vez mas natural, claro, que todo bajo .net 4.0 (es decir...)
De por si este es un tema que conlleva demasiado tiempo en una conversación, lamentablemente las personas que interactuen deben tener una background estable en WCF y WF, por suerte hoy se tuvo al menos un alcance de que es lo que se busca con algunas de estas tecnologías.
Un momento, dije hoy, si... es que una vez mas, tuve dos sesiones con dos equipos diferentes, una en el almuerzo, con un breve resumen de este PDC, mientras que en otra veiamos varios puntos relevantes con todo lo que se viene (pero bueno, este es un post del PDC no de otras cosas!)

Bien, volviendo al tema en mención, me gustó mucho la breve intro que hizo Ed Pinto (que pena que no tenga su blog actualizado), puesto que, una de las primeros slides es algo asi como "pero, un momento, de que estamos hablando? que es WorkFlow Foundation?" y sigue con un breve resumen de lo que es, la mejor explicacion es "WF es un coordinador de actividades sin demasiada ceremonia" (osea sin mucho trabajo, asi, de frente, esta es la mejor definición de WF, me encantó la palabra ceremonia). Ya poco a poco habla del resto de componentes, es decir, el runtime mismo (el motor que gestiona los workflows) y herramientas adicionales.
Aqui nos detenemos un poco y vemos el nuevo editor de WF, un designer completamente basado en WPF, en este momento ya se veia la seriedad con que estan tomando el uso de WPF (pues claro, si todo el VS estará basado en eso!)
De por si la convergencia entre ambas tecnologías ya se veia venir, puesto que, WCF, en resumidas cuentas se encarga de que servicios que estamos construyendo, sean disponibles in the cloud (no, no debi decir eso, pero bueno a la larga es la verdad).
Es decir(una vez mas) WCF es un empaquetador de lógica de negocio, y bueno, los flujos construidos en WF son un reflejo de (una vez mas) lógica de negocio.
Es decir... la convergencia se ve como algo natural, o no?

Pues bien, de WCF debo confesar que hace muchos años (no recuerdo ya, hace cuanto), conversando con un amigo le contaba mi afinidad por COM+, y de como es que, me sorprendia que los chicos de Redmon sacaban conceptos como System.Transaction y de como se hacian las implementaciones a mano limpia (es decir, puro código), pero que no se hablaba de un gestor que permita la administración de los servicios ya publicados. Si, algo como el Enterprise Services. Yo recuerdo claramente como le decia, que lo ideal sería que Indigo (pues asi le decian los chicos de la vieja escuela) tenga su gestor.
Pues les cuento (o quizá ya deben saberlo, pues este blog posiblemente esté demasiado desactualizado), el concepto que tanto pediamos con algunos amigos, saldrá a la luz, mientras que de momento se llama Dublin, la idea de este producto es tener un set de herramientas que se integre a la interfaz del IIS, y permita hacer una administracion mas decorosa, de los servicios que vamos construyendo/publicando.

La pregunta es, porque esperaron tanto tiempo?

Ya para este momento la sesión estaba por terminar y la pregunta que todo desarrollador WCF/WF estaba haciendose era "un momento, pero cuando uso esta convergencia", y para eso uno de los ultimos slides indicaba los puntos clave, los cuales en resumen decian cosas como "cuando la lógica se complique, o hayan ejecuciones en paralelo, o cuando haya secuencia/coordinación de mensajes".

Ya entrando al lunch session (conseguí algunas frutas y me fui volando al salón) de Windows Seven, Principios de Diseño, escuchaba algunas consideraciones que debemos tomar en cuenta al construir aplicaciones basadas en Windows Seven.
La verdad, muy bonita la presentación (sobre todo porque aun recuerdo haber escuchado cientos de veces "we love the jumplists!"), pero siento que de momento no la iré a aprovechar demasiado (bueno, estoy muy tentado de instalar Seven en mi laptop, ustedes que dicen?)

Entré luego a una sesión de Performance y Escalabilidad, la cual dejó como mensaje principal lo siguiente "tengamos las metas de PyE claras, incluso desde la fases iniciales de nuestro proyecto". Lamentablemente hay paradigmas que evitan esto, y ciertamente les digo, me he encontrado con casos en los que decian "eso lo podemos ver despues", o peor aun "pero, eso no es todavia en la fase de pruebas?".
Dicho sea de paso, hablaron un poco del funcionamiento del Garbage Collector y de porque debemos de preocuparnos de tener siempre en cuenta el uso/abuso de los objetos en memoria (espero que esto no requiera explicación).
Es imposible dejar mencionar que mostraron las características del VS2010 orientadas a estos aspectos. Aquí dejenme decirles que, si usaron el Ants Profiler, pues se encontrarán con algo muy familiar.

Ya bueno, dejenme comentarles (quizá una vez mas) que andaba completamente cansado, no de escuchar todo lo que venia, o que tenia que aprender, estudiar o compartir. Estoy hablando de un aspecto físico, pues ciertamente, el Convention Center no era gigante pero no era un cuarto pequeño, y a mi me gusta caminar, pero, creo que varios días con una dieta reducida estaban destruyendome! En fin, continuemos!

Minutos despues me iba acercando a la sala que tenia como ponente al mismo Anders Hejlsberg (si, el papá de C#), en una sesión que dejó las cosas muy claras, C# es y será cada vez un lenguaje mas potente.
La influencia de la programación dinámica tiene mucho que ver en todo esto, ya que, el trabajo y reconocimiento del tipo de dato en tiempo de ejecución permite explotar el trabajo en diferentes aspectos.

Si de dan cuenta, no estoy mencionando ejemplo alguno, pues me detengo dado que, si volvemos al pasado, recordaremos uno de los puntos claves de .net, un ambiente con lenguajes fuertemente tipados, y si hablamos de C#, se llegaba a un poco mas, su falta de soporte a parámetros opcionales obligaba a marcar la diferencia entre lo que es programar en VB.net y C#.

Pues bueno, Anders partió del hecho "El cliente lo pide, al cliente se lo damos", ademas claro, de aceptar la culpabilidad de la pureza con la que fue construido el lenguaje.

En si, todo parte del hecho del advenimiento de lenguajes como IronPython y la programacion dinámica persé, la necesidad del trabajo con objetos COM que trabajan si, es cierto, con parámetros opcionales.
Asi que, si estas bajo C# y requieres interoperar con COM, pues en algunos casos tendras que lidiar con parámetros opcionales, como indica esta referencia.

Anders indicó que ellos tenian en mente que COM iba desaparecer y que la interoperabilidad sería, por ende, un problema menos con que lidiar "pero, seguimos aqui, y COM sigue vivo", asi que, "de paso que mejoraremos la interoperabilidad a nivel de performance, tambien habran mejoras a nivel de programación, por eso, soportaremos parámetros opcionales"

Ya bueno, para terminar con la programación dinámica mostró rapidamente como trabajar con un poco de AJAX y objetos Javascript, haciendo llamadas a estos, desde el codebehind!
Y si no sabes un poco de JavaScript, no seria mejor, que aprovechemos los tipos dinámicos y peguemos el JS en el código .net y con unas modificaciones (tipos de dato, dinámicos, basicamente), ejecutar todo desde la misma página? Pues si, si se puede, claro, en C# 4.0

Luego comentó sobre el concepto de Compilador como Servicio, es decir, permitir usar las APIs del compilador. Es decir, ejecutar el metodo Compile() en tiempo de ejecución? pues si.
Ya para esto la gente estaba tomándole fotos al código fuente, la chica de mi costado sonreía como loca y yo no sabia si tomar fotos, apuntar, grabar, hacerle el habla en mi ingles menos que masticado, pero bueno, a seguir.
Luego, Anders poco a poco construyó una aplicación que recibía una expresión, por ejemplo, una suma o algo combinando restas y divisiones, y esta era ejecutada por el compilador.
Eso ya me habia dejado todo claro, ya lo habia visto en otro lado. Asi es, en Mono y en Interactive C# Shell. Recuerdan el post?

Ya terminando comenzaron las preguntas y respuestas, yo necesitaba salir un momento, alli cerca de la puerta me encontré con Edgar Sanchez (MVP de Ecuador y RD) y luego de presentarme, le comenté sobre lo poco que habia revisando en Mono, y que justo eso del Compilador como servicio era algo que ya estaba liberado, pero claro, en Mono. Conversamos un poco mas, y bueno, me fui camino a la sesión de Mono.

La sala estaba comenzando a llenarse, faltaban quince minutos (eso lo dijo Miguel de Icaza), yo hace mucho que queria saber mas de como exponía, me habian comentado que tiene un método particular. Yo, ya dije, quería saber mas.
Asi que me senté en la primera fila, vacia por cierto.
Luego de unos minutos, vino un chico, algo gordito y le dice a uno que está a un lado si podía moverse un poco a la izquierda que vendrían "sus amigos", yo vi a ese chico y me parecía alguien conocido.
Lo cual confirmé cuando vinieron casi al instante, de "sus amigos", algunos de ellos venían con la camisa celeste de Microsoft, yo dije "un momento..." mientras que Miguel de Icaza dijo algo tipo "chicos de MS, humm me siento intimidado..."

Comenzó la sesión de Mono y mientras todo estaba, no miento, completamente lleno, Miguel comenzaba diciendo que ellos amaban .net pero que buscaban una alternativa basada en Linux, pues, tambien amaban Linux.
En su escritorio pude ver tres sistemas operativos diferentes, un Leopard, un Linux (no recuerdo la distribución) y un Windows Vista.
Todo continuaba bien, y comentaba como es que mejoraron la performance del compilador, puesto que, cuando querian trabajar sobre 10000 líneas de código, 16 segundos de compilación eran demasiados.
Luego de ciertas mejoras comentaron que "a pedido de Anders" hicieron una comparación con el compilador oficial de C#, y que, pasaron la prueba, habian mejorado muchismo (y aquí estamos hablando de una mejora considerable)
Me sorprendí cuando llegaron al tema de Compilador como Servicio, si... justo lo que queria preguntar. No puedo negar que en ese momento sonreí pues mi dudas estaban aclarándose, Mono es una plataforma que debe respetarse, y desde hace tiempo esta haciendo cosas, a manera de perfil bajo.

Ya cuando comenzaron las demos, fue demasiado gracioso, ver como todo parecía una parodia de las demos realizadas en la sesión de C# 4.0 que acababa de terminar, ademas claro de una demo similar a un administrador de fotos que mostraron en el KeyNote de Live Services, pero claro todo esto basado en Mono.
Sinceramente, fue muy bacan, ver en dos sesiones, dos plataformas que trabajan en contextos diferentes, presentando servicios similares.
Claro, es mas bacan escuchar a alguien de Mono decir "justo como Anders hizo" mientras hacia la demo. Por cierto Miguel de Icaza escribe en C# como si fuera una bala!

En lo que respecta a programación para juegos, mono está bastante avanzado (no por algo hace un tiempo Second Life migró a Mono), llegando incluso a mostrar un juego que pudo desplegarse y ejecutarse sin problemas en un iPhone!. Aunque ya en ese momento, solo los que estabamos en primera fila vimos el iPhone y el juego en mención (no jail-breaking). Aqui pueden ver un poco mas de lo que les cuento.

Como nota aparte, al mostrar el visor de imagenes, Miguel queria hacer una demo de inyecccion de código sobre procesos que ya estaban ejecutandose. El problema es que el visor de imagenes comenzó a presentar problemas (no le hacía caso) y el gordito de adelante grito "inyecta un parche para que se arregle!", en ingles claro.
Por esos momentos Miguel ya habia dicho "los chicos de esta fila son de Microsoft y los de esta otra de Novell", yo me senti, como decirlo, sorprendido, pues... estaba en primera fila!

La ronda de preguntas y respuestas fue todo muy rapido, preguntas en todos los idiomas y fotos con todo el mundo, desde la puerta del otro extremo se escuchó un "we love mono!!!", en ese momento no pude reconcerlo, pero... fue acaso Don Box? (En realidad, fue Brad Adams)

Muchas de las preguntas eran del tipo "por que no hay WPF?" mientras que las respuestas de Miguel eran del tipo "eres bienvenido a ayudarnos a construirlo!"

Yo me acerqué casi al final y me presenté, le dije que estaba bacan la presentación y que bueno que hayan liberado el concepto de compilador como servicio, pero si es que habia alguna influencia desde C# 4.0 (que aun no sabemos cuando será liberado), obtuve como respuesta "es todo una coincidencia pero nosotros nos demoramos en construirlo solo dos semanas" Dos semanas!
Miguel fue una persona muy amable, me dió una de sus tarjetas y mientras todos peleaban por un polo de Moonlight (el cual ya esta terminado, mas no liberado, cuestiones de Marketing y MS), yo me tomaba una foto de despedida y un gusto de conversar con alguien tan inteligente.

Ya luego tomé mis souvenirs y me fuí, pues era demasiado tarde y mi cuerpo no soportaba mas, necesitaba reflexionar sobre ese dia, que fue de verdad, alucinante.

Claro, que cuando salía, me encontré con el gordito de primera fila y no dude en preguntarle si era Jeff Atwood, si, el mismisimo de Coding Horror!
Luego de una breve conversación y felicitaciones por el nacimiento de su hijo, pues, se despidió!
Claro, antes de irse, me dió algo que tenía en la mano, un sticker de CodingHorror!!! no sabia que habia algo asi!!! Es mas, no sabia que se vendían!

Y bueno, asi terminó el día 3.

Monday, November 03, 2008

Recuentos del PDC2008 - II

Continuando con mi saga de recuentos...
La mañana del Martes prometía en demasía, ya que, de acuerdo al cronograma habrían keynotes hasta la hora de almuerzo. El tema central de estos era experiencia de usuario (user experience), es decir la característica que muchas veces olvidamos al desarrollar nuestras aplicaciones, puesto que, mientras mas enriquecida la interfaz de usuario, la tendencia a depender del personal de sistemas, disminuye.

En si, ver a Steven Sinofsky (VP del equipo de Ingenieria de Windows/Windows Live) vestido con jean azul y polo negro de manga larga me causó algo de gracia pues me recordaba a una persona en particular (de la cual comentaré mas adelante). Pero el punto mas importante es como poco a poco nos mostraba las bondades de Windows Seven, producto que, sinceramente quedé sorprendido, por el impacto que tendrá aprovechando las funcionalidades touchscreen, pero vamos que esa solo era una parte del pastel!
Ya que, luego de las demostraciones que mostraban, podia uno entender la integración entre dispositivos, la mejora de interfaz de usuario, el aprovechamiento de la virtualización (como por ejemplo poner un disco virtual como físico y luego de una configuración en el administrador de discos ponerlo como particion booteable, aunque claro, esta parte no la ejecutaron), recursos y demas cosas que de verdad me dejaron, repito, sorprendido (beacuse, we love jumplists!).

Hace un tiempo incluso, recuerdo haber mencionado algo relacionado a las mejoras del SO, en resumen eran buscar mejorar temas de rendimiento, seguridad y productividad, todo esto intentando no alterar la arquitectura base de Windows Vista / 2008. De lo cual, de momento indican que los drivers no cambiaran y en lo que respecta a hardware, estan logrando estabilidad y confiabilidad en una PC de 1GB de RAM.

Ahora, en ese momento Steve, digo, Steven, ya tenia en su mano una laptop ligera (calculo que a lo mas era de 13') sobre su mano izquierda, indicando que no tenia problemas con su laptop personal.

Yo de verdad no pude tomar una foto de la escena, todo me parecía tan irónico, tan, I AM PC, tan mira Steve Jobs, yo tambien puedo tener una laptop sobre mi mano (la cual por cierto, tenia un sticker con ese lema), y ojo, que estoy usando tu uniforme!

En fin, cosas que a uno le pasan por la cabeza.

Ya en lo que respecta a desarrollo, salió Scott Guthrei (o gattri como realmente se pronuncia) mostrando las facilidades en construcción, de por si, el avance de WPF ha incrementado considerablemente, inclusive AutoCad est;a invirtiendo al respecto, con su herramienta AutoDesk (una herramienta de diseño 2D/3D), la cual combina WPF y tecnología touchscreen (es decir, diseñar con tus propias manos), que nos deja con la boca abierta o al menos con la idea de "yo tambien quiero eso!".

Por otro lado, nunca habia visto a Scott de tan cerca, la verdad es que personalmente hablando, he quedado impresionado por la aficion que tenia el publico hacia el, en serio, que, incluso algunos le aplaudian y saludaban como si fuera una estrella de Rock!

Ya de por si al mostrar el VS2010 uno solo tenia que aplaudir, ya que, al tener una herramienta renovada y, ojo a esto, completamente basada en WPF, como que, lo deja a uno pensando (es momento de hacerlo todo en esto?, todo indica que si).

En lo que respecta a Office 14 y Live Services, pues, es lo que uno estaba esperando!, es decir, publicacion de servicios similares a Google Docs, esto claro sin necesidad de Office Web Components, fue, de verdad demasiado.
Ahora, si a todo esto le agregamos integracion con los servicios arriba mencionados, pues, mucho mejor ya que, de primera mano podemos trabajar sobre el mismo documento sin necesidad de que todos estemos usando el cliente Office. Es decir, uno puede estar usando la herramienta convencional, mientras que el resto puede trabajar sobre la version web del documento, y a la vez, tener el mismo documento, actualizado y con control de cambios!

Ya cuando cambiamos de Keynote y comenzó el turno de Don Box y Chris Anderson, ya fue suficiente, mi pasaje estaba pagado, ver a estos mounstruos escribir código como si yo tipeara mi documento de word me dejó tarado (asi quiero ser mamá, que hago?).
Mas aun si creaban desde la nada, un bloque de código basado en WCF que luego publicarían via Live Services. Si, via Live Services! es decir, crearon un puente entre un punto de internet y una máquina convencional.
Ya luego mientras mostraban el Live Framework uno se daba cuenta que los cambios que tenía que hacer al código era mas que poco. Asi que, todo parece tan claro ahora.

Ojo, que no estoy comentando como se aprovechaba la integración con servicios como el del Live Messenger, es decir, que contactos estan en linea y cosas asi.
Ahora, si han usando Live Mesh (el concepto aquí es tener en la red un escritorio y documentos que sean independientes del dispositivo, es decir, una manera de copia de seguridad que mediante sincronización nos permita tener a la mano la información en cualquiera de nuestras pcs. Bueno, yo cuento la de mi trabajo, asi que me parece buena la idea, al menos para algunos documentos), bajo ese punto es que se mostró la manera de explotar programáticamente las facilidades del servicio.

De verdad, que la sesion de estos dos maestros fue mas que productiva, por el hecho mismo de la facilidad de construcción y despliegue.
Claro, es cierto que en los ejemplos no se pueden ver todos los casos, pero los cambios son serios, la facilidad de construccion aumenta, si, pero el nivel de información que uno debe revisar ni los problemas contra los que te puedes enfrentar son tampoco es así de sencillos.

Yo por mi parte ya los habia visto via Channel 9, la verdad es que, son tan humanos, me recuerdan a un par de amigos locos que tuve alguna vez desde el colegio. Los cuales, combinaban muy bien locura y habilidad!

Ya por la tarde pude ir a la sesion de Debugger Tips & Tricks, en la cual, han mejorado la herramienta de una manera considerable, siendo mas concreto, han creado una vista particular para la depuración, en la cual uno puede hacerle seguimiento a una función, mas desde el punto de vista de cuantas veces o como es que me la estan invocando.
De por si, el concepto es bueno, ayuda bastante, es cierto, pero creo que cada vez que pasa, estan construyendo un Visual Studio a prueba de tontos, es decir "ya, si con esto no programas bien, preocupate". Considero que ese es un punto de conversacion que debería tocarse mas adelante.

Para este punto de la tarde tambien estrando a una sesión de Oslo, y, bueno, el concepto me parece intersante, pero creo que aun está siendo demasiado sobrevalorado, claro, el trabajo es muy bueno, nadie puede negar que el metalenguaje y herramientas ofrecidas, a la larga eliminará el vacio que existe entre el diseño y el desarrollo, pero de momento se ve bonito, si, pero aun quedan pendiente muchos puntos.
Del lenguaje en si, es cierto, Don Box tuvo otra presentación, y uno sale muy contento con lo que se viene. Ojo, dije, con lo que se viene. Considero que, en otras publicaciones (y luego de revisar otros apuntes y referencias) podre poner algunos puntos mas que aclaren todo este tema.

En general luego de haber salido de dos sesiones seguidas de Oslo, como que aun tenia un sinsabor, mas por el hecho de que esperaba mas de lo mostrado. Eso de por si no quitan mis ganas de terminar el leer el libro que tengo aqui en la mano, el de las especificaciones del lenguaje, versión Octubre 2008.

(bateria al 25% indica que debo terminar esto, ya pronto)

Ya terminando el día pasé un buen momento en la sesión de Microsoft AJAX Framework, que de por si, se llamaba ASP.Net y JQuery. Aquí rapidamente mostraron lo brindado por JQuery (increible, pues es una tecnología no microsoft) y como es que se extará explotando en adelante por los chicos de Redmon, ademas claro del soporte que daran, a pesar claro, de no sea de su familia. Lo bonito es como crearon rapidamente una apicacion web convencional y poco a poco via AJAX, JQuery y algunas extensiones hacia una aplicación mas amigable. Por m parte todo quedó mas claro, sobre todo por el nombre =D (ya saben Microsoft AJAX Framework), pero mas aun, por la idea de aprovechas cosas que ya existen, lo que vi es que hay algunas funcionalidades que se estarian repitiendo, pero creo que al final van a sacarlas del ToolKit y respetar algunos no MS.

Ahora, no se olviden que MVC está entrando con fuerza!!

Bueno, creo que debo terminar, la bateria esta pidiendo refuerzos, y no veo cerca algun proveedor de corriente.

Saludos[at]Aeropuerto de Bogota

Wednesday, October 29, 2008

Recuentos del PDC2008 - I

Y bueno, es el tercer dia del PDC2008 y la verdad es que estoy completamente anonadado con la cantidad de noticias e informacion que tengo bajo la manga.

El primer keynote estuvo muy bueno, ya estarán enterados de Windows Azure, la verdad es que luego de la mención el publico comenzó a aplaudir con mucha fuerza, de mi parte quedé encantado con todo eso y no saben, recordé mi post de windows strata y dije, tengo que actualizarlo! (pero, no, no lo haré)

El concepto del sistema operativo soportando servicios sobre la nube me parece realmente el punto de inicio de una era (casi casi como cuando llegó la electricidad? si, creo que si)

En realidad, era algo que se veia venir y conceptos ya desarrollados por Google (con su par Google Apps) confirman que es LA tendencia.

Luego ya me metí de cabeza a las sesiones de Cloud Services, claro, ya les dije, estaba impresionado con lo que mencionaron/mostraron, asi que mientras estaba en las sesiones iba confirmando lo que me habia comentado un amigo, todo es un servicio, asi que, si no lo comprendes, pues, asustate.

Con algo de suerte pude ver algo de VS2010, y la primera sorpresa es que está basado en WPF!!! asi, que mas maquina!! (es broma, jeje, pero, ya veran, recuerden esa frase)

De por si, VS2010 se ve muy interesante, con solo haber visto su característica de facilidad en extensibilidad (es decir, copia de archivos en una carpeta determinada) puedo decir que hay mucho que recorrer y que, por otro lado, la sección de pruebas esta cada vez mas reforzada.

De esta parte, hay una frase que siempre me ha gustado, "no debes preocuparte por los problemas no funcionales, mas si en el negocio", escuchar una de sus versiones en ingles como que me hace sentir bien, de paso que me lleva a mis sesiones de la universidad, pero bueno, esa es ootra historia (recuerdan el post del qué y el cómo? bueno, tambien me senti bien por eso).

Ya terminando el día era imposible perderse la sesión de Framework Guidelines, creo haber comentado al menos en persona, que soy fanatico de ese libro, y claro, del autor (jeje, como suena eso?), en fin, el tema es que ese día presentaron la segunda edición del mismo, el cual, es cierto, lo tengo aqui a mi costado, pero, no deja de ser bueno. Por si no lo conocen, es un compendio de recomendaciones para construcción de frameworks, pero vamos, que tambien se puede usar para construir un Hello World empresarial!
Como adicional a este parrafo, pues siempre me ha gustado que dentro del libro la gente de MS comente cosas como "es cierto, ya hemos cometido ese error"

Bueno, quisiera comentarle mas, pero creo que la noticia ya está pasando de moda, de momento mi apreciación es esta. Hoy, por cierto fue un buen día, luego de mucho tiempo conversé en español, primero con Edgar Sanchez (en 4 años, es la segunda vez que converso con el, y me agrada que se dé un tiempo para escuchar a un simple mortal!) y bueno, luego con Miguel de Icaza, pero de todo esto, mas adelante!

De momento tengo que buscar comida!

Saludos[at]Cuarto Alquilado

Saturday, October 25, 2008

Sunday, October 19, 2008

Coming Soon...

Dicen las malas lenguas que lo venderan en el PDC (amazon dice que sale oficialmente en Noviembre)

Friday, October 10, 2008

Algo Rapido sobre SQL2008


Debo confesar que estaba algo cerrado en ese aspecto, luego de revisar los features me quedé pensando un poco en si debía o no instalarlo.

Asi pasaron los dias, y dias, y nada.

Pues bien, luego de tanta molestias de algunos amigos, lo instalé, confirmé algunos features,

Y solo puedo decir.
Qué esperan?

Si eres un developer y odiabas una depuración no deseada, pues, date un momento y haz unas pruebas.

Reporting Services? Report Builder? debo decir algo mas que.
Qué esperan?

Monitoreo de información (que se elmina, actualiza o inserta?)
Qué esperan?

Y si no les alcanza para la versión oficial, pues, la express, no? hasta viene con libro de regalo. (UPDATE: Segun veo, el libro es del SQL2005, estaba demasiado contento, de verdad)

Bueno, nada mas. Creo que fue demasiada propaganda por hoy :D

Saludos[at]SQL Server 2008

Thursday, October 09, 2008

Windows Strata? (Vamonos a la nube!)

Si de novedades se trata, hace mucho que la gente del entorno menciona aspectos como cloud services, S+S, SaaS y relacionados.

Sin ir muy lejos, el ultimo post de Jorge Serrano menciona un curso de S+S, de que primera mano puedo decir, que me parece muy bueno (a pesar de haber tenido ciertos problemillas con mi navegador y el plugin que de momento no quiero mencionar)

A lo que venía con este post, es que está mas que confirmado que en el PDC 2008 los amigos de MS mostrarán su Sistema Operativo basado en Cloud services, es decir...

nada!, no podemos decir mucho al respecto, puesto que antes se hablaba de un codename Red Dog, y de acuerdo a Mary Jo Foley (de all about Microsoft), no se tiene claro si se trata de lo mismo.

Se entiende? la verdad es que es un misterio.

Ahora, todo esto de Strata salió pues en la página de sesiones del PDC apareció un nuevo bloque llamado "Windows Strata", y revisando las imágenes contiene sesiones relacionadas a Cloud Services.

Dije "revisando las imagenes", pues entré a la página del PDC y no encontré tal información, incluso inicié sesión vía passport, pero nada!

Aquí uno y otro de los post que comenzó todo este por decirlo de alguna manera "marketing viral"

Aquí la imagen que no pude replicar (vía iStartedSomething)

Ahora si, supongo que, a dormir.

Saludos[at]cama temporal 

Monday, October 06, 2008

Mono 2.0 & Interactive C# Shell


La siguiente es para comentarles que de acuerdo a la siguiente nota del site oficial, mono 2.0 ha sido liberado.
La verdad es que ya habia olvidado la promesa de mono 2.0, un mono que esté a la par del nuevo framework.

Un momento, no es que ya estamos cerca del Framework 4.0? Bueno, ya estamos en 3.5 (por mas comercial que sea el nombre, y no lo pienso solo yo, sino el mismo ScottHa)

Pues si, incluso en la nota que mencioné líneas arriba, indica que cubre soporte a funcionalidades .net 2.0 pero de momento nada de Workflow, Comunication o Presentation.
Aunque, de acuerdo a una entrevista concedida por Miguel de Icaza, esto se verá en mono 3.0 (es decir...)

Y bueno, revisando el blog de Miguel, acabo de encontrarme con el post que menciona la liberación de mono 2.0 (osea, Miguel, casi te gano en publicarlo? es broma)
Lo que si, me sorprende (y bastante) en primera instancia es la inclusión de Linq (bacán, no?)

Por otro lado, hace mucho que no leia las publicaciones de Miguel, y es que, viendo algunos posts es que sigo con mis sorpresas, como por ejemplo:
- Cambiar el tipo de licenciamiento MS de algunas distribuciones/proyectos publicados en CodePlex. Como por ejemplo lo referente a MEF.
- Interactive C# Shell, esta funcionalidad si que me sacó de la silla del trabajo, salté hasta el techo viendo esta herramienta, pues, una cosa es escribir tu código y luego de compilarlo verlo en ejecución. Pero otra cosa es ver tu codigo funcionando "al vuelo" mientras vas escribiendolo.
Algunos me dirán "oye eso de alguna manera ya se podia", pero, a ver, veamos una ventanita como esta:
 

Como que dan ganas de entrar a la página del proyecto, descargar las fuentes y hacer una pequeña implementación completamente basada en .net, no?

Bueno, ya me despido, tengo que bajarme las fuentes del mono (digo, seguir trabajando)

Saludos[at]Silla defectuosa
PD: Sabian que Miguel estará en el PDC? Claro... el PDC!

Friday, October 03, 2008

3 Comentarios

Hoy tuve una reunión relampago, la cual ademas de una propuesta de implementar SCRUM en un proyecto que ya ejecutándose, me trajo las siguientes dudas:
- "Debería grabar y publicar este tipo de reuniones en las que listamos problemas y luego de un brainstorming, dibujos y demas, salen propuestas realmente interesantes?"
- "Debería encotrar la manera de hacer que estos chicos escriban las experiencias que compartimos de manera offline"
- "Deberia escribir sobre lo que converso de manera offline"

Ante esto, me respondo:

"Debería grabar y publicar este tipo de reuniones en las que listamos problemas y luego de un brainstorming, dibujos y demas, salen propuestas realmente interesantes?"
- De grabar las conversaciones que tenemos (aunque algunas si fueron grabadas), sería gracioso escuchar hasta las anecdotas que salen en el momento. Pues, hemos demostrado que una anecdota vale mas que cien ejemplos o tecnicas de desarrollo.
Lamentablemente, algunas historias son demasiado personales o intelegibles.

Debido a que algunas veces caemos en la informalidad o el desenfoque, las grabaciones contendrían chistes, risas, información de la bolsa de Londres o incluso comentarios referentes a técnicas de como puedes hacerte famoso sin necesidad de escribir un libro, ganar un grammy o chocar el carro de tu jefe.

Aqui me detengo un momento, solo para agregar que hasta cierto punto y estando fuera de la reunión uno puede notar ciertos elementos de falta de productividad/eficiencia. Pero he demostrado que luego de cada desenfoque en las conversaciones, al retomar el tema principal las respuestas se vuelven cada vez mas claras.
Recuerdo cuando mas de una vez un problema no me salía y decidía dejarlo unos minutos (en ese instante decidia salir a comprar un helado o simplemente jugar cualquier cosa), para luego de volver, encontrar una luz, una salida ante tal elemento bloqueante.

Volviendo a la primera interrogante, considero complicado publicar una de estas grabaciones, sería si, gratificante, transcribir un poco de todo lo conversando en las sesiones de trabajo. Creo sinceramente que serían posts espectaculares.
Pero, ya lo dije hace una lineas, algunas partes se vuelven intelegibles, y la verdad es que, algunas conversaciones se vuelven largas y la unica manera de explotar la información es  escuchando todas las horas de la reunión (si, horas)

"Debería encotrar la manera de hacer que estos chicos escriban las experiencias que compartimos de manera offline"
- Hoy una vez mas me di cuenta que existe mucho potencial entre las personas que he podido conocer hasta el momento -y estoy seguro- afuera debo encontrar muchos mas.
El problema es que, de toda esta gente no muchos escriben acerca de todo eso que saben.

La verdad es que no comprendo como es que decimos que no hay información en nuestro idioma, cuando muchos fuentes estan entre nosotros pero quizá el tiempo, las ganas o desconocimiento de lo que es tener un blog, no permiten que existan puntos de vista disponibles para cualquier habitante de la red.
El problema es que a veces uno pierde el concepto de lo que es compartir, o simplemente no tiene tiempo, o no sabe como hacerlo (sea escribir, o compartir)

Es gracioso, pero a veces sucede que hablamos de un tema, o se reenvia cierta información que luego de unos días (o peor aun horas) se convierte en tema recurrente de blogs, noticas técnicas o uno que otro etc.
Eso si me causa gracia, sinceramente.

Pero, les dire algo, aun no me rindo en este punto. Es cuestion de cambiar lo offline por online y listo.

"Deberia escribir sobre lo que converso de manera offline"
- La verdad es que me siento, digamos que con algo de suerte cuando de alguna u otra forma, sale un tema de conversación interesante y estoy presente para poder dar mi apreciación personal.
Técnicamente hablando, recuerdo por ejemplo, haber conversado con chicos del mundo java acerca de persistencia de datos, cadena de responsabilidades, metamodelos, maquina virtual y mucho mas de la recurrencia del término Separation of Concerns.
Pero de todos estos temas, siempre queda claro que la solución nunca será un término cerrado.
Pero, creo que alli mas que nunca es que recuerdo cuanto blog, artículo, libro o capítulo de libro he podido ojear mas de una vez, pues, a veces recuerdo términos o conceptos interesantes, que la verdad, valdría la pena planificar bien una que otra grabación/transcripción.

El problema es que este asuntillo del internet hace tiempo que se volvió propagandezco, y la verdad es que no me motiva mucho poner mis apreciaciones personales a pesar claro que no me importa eso del "que diran".
Pero claro, que periódicamente considero conveniente escribir de ciertas cosas, pero a veces uno por dar sus puntos de vista cae en lucha de puristas o inclusive, cerca de los límites del fanatismo absoluto.

A veces es gracioso, incluso mientras uno conversa que haya gente que replique con frases del tipo "pero la otra vez dijiste lo contrario" o "pero en este modelo que comentaste, no se cumple".
Aqui digo "gracioso" pues existen lo que muchos llaman, contextos (es decir, realidades) que determinan la validez de ciertas reglas, modelos, formas de trabajo. Y el punto de la risa, es que a veces uno se amarra a un solo paradigma olvidando que existen otras soluciones que no se resuelven solo con un "depende", "mi cuaderno de universidad dice..." o "la experiencia determina..." sino con un mix de todo esto.

Del poco tiempo que llevo trabajando, he descubierto que lograr que un grupo comprenda una linea de trabajo denota tiempo. Ergo, escribir "algo" (por decirlo asi) de esa naturaleza, y mas aun, que sea abierto al público, denota mas tiempo de lo esperado.



---
De todo esto, puedo decir que me he quedado corto, tengo demasiadas ideas en mi cabeza, y -sinceramente- mas ganas de escribirlo (como por ejemplo, saben que es DDD? realmente saben de que se trata? de verdad, saben de que se trata? ahora la pregunta mas importante... como lo han usado?), pero debo dormir (aunque muchas veces creo que es opcional)

Saludos[at]Cama

Thursday, September 04, 2008

La Caja - Artículos Recomendados - ANTS Profiler - Brad's Sure Guide to SQL Server 2008 (Free)

Holas, volvemos con La Caja (ya era hora)

Artículos Recomendados
Mas que un articulo, me gustaría comentarles que hace un tiempo descubrí una página llamada LittleTutotials, la cual de por si me dejó pensando, mas aun, luego de haber leido "36 steps to success as technical lead", en la cual se resumen de manera muy interesante y a la vez detallada lo minimo que deberia tenerse en cuenta si es que se busca ser un buen lider técnico.
Tambien pueden encontrar algunos puntos de vista referentes al uso de UML en "13 reasons for UML’s descent into darkness", artículo que de verdad, te hace confirmar la frase que sueltan algunos "bueno, veamos que tanto tenemos que usarlo"

ANTS Profiler
Ya debo estar cansándolos con tanta herramienta de profiling que debo haber mencionado en este medio (no creo que hayan sido muchas, je). Pero la verdad es que ANTS Profiler es la que mas recuerdo cuando se habla de este rubro. Lo gracioso es que siempre recordaba el símbolo, pero no el nombre ni el proveedor.
Lo bueno, es que pude averiguar como se llamaba (por fin) y hasta hace poco la version 4.0 estaba en Beta.
Pues bien, a mi siempre me llamó la atención esta herramienta, sobre todo por hacer mas visible el profiling, es decir, en cada línea de código puedes tener un detalle del profiler! Esto pueden observarlo en la imagen sacada del sitio de ANTS, es decir Red Gate.

 

Les recomiendo la herramienta, si han usado CLR Profiler o dotTrace JetBrains (los cuales he mencionado en posts como este y este), van a sentirse mas que comodos. Claro, que el problema es el precio =D

Brad's Sure Guide to SQL Server 2008 (Free!)
Vía el newsletter de Red Gate me entero de la disponibilidad de este libro, acabo de bajarmelo y está muy interesante pues ha listado rápidamente los diversos features de esta nueva versión del SQL Server.
Lo bueno de los chicos de redgate te dan un enlace directo a la descarga del libro, aduciendo, claro, que ya tenemos sus productos al menos en modo trial.
Como les decía el libro esta interesante, y mas aun si es que luego de bajar el archivo te das con la sorpresa que vienen ademas, otros dos libros, uno de buenas prácticas en SQL y otro que, segun entiendo luego de una rapida revisada tendria que ser un must read de los DBAs.
Olvide decirles, una vez mas, que es Gratis!

Comentarios.
Bueno, creo que de momento eso es todo por hoy en La Caja, lo que si no podía dejar comentar es que, la ultima vez que escribí para La Caja mencioné al YSlow, y bueno, al mes siguiente, The ToolBox tambien la mencionó. Te gané por un mes, ScottMi!

Saludos[at]Trabajo/Trabajo/Trabajo

Tuesday, August 26, 2008

Regla Básica: Pensar en el QUE HACER y no en COMO HACERLO

Este es un tema de conversación que he tenido muchas veces, claro, on algunos miembros de diferentes equipos.
Pues es alli, cuando conversamos, sobre la importacia de tomar requerimientos o de como tomarlos.

Pensar en ciertos aspectos de diseño que muchas veces nos quitan demasiado tiempo por entrar en detalle cuando todavia no es necesario hacerlo (pues nunca deja de ser necesario, solo que hay momentos para hacerlo a a detalle)

A veces, cuando converso con algunos chicos, sale el comentario que notan algo aburrido al usuario al que estan entrevistando.
El silencio llega si es que les pregunto "Qué tal la primera vez que se reunieron, de qué tipo eran tus preguntas, qué tanto ahondaste?"

Quizá demasiado, no?

Lo que sucede es que muchas veces pecamos de entusiastas, y de esa forma es que a pesar que caemos en el hecho de que no cubriremos toda la información necesaria en una sola entrevista, queremos seguir preguntando y preguntando al usuario detalles que de primera mano no vienen al asunto.

Es mas importante para el usuario, entrar a comprender las necesidades básicas que desea satisfacer.
Cierto, los requerimientos principales, funcionales del sistema.

Aunque, algunos recomiendan tener todavia, menos detalle, llamándoles "Requerimientos Macro" o simplemente "Características" (algo asi como matricular, vender, comprar, grabar).
Lamentablemente esto a veces logra confundir, asi que lo recomendable es comenzar a comprender, o al menos tomar en cuenta aquello QUE debe cumplir el proyecto, es decir el QUE del proyecto.

El problema es que, mientras vamos comprendiendo aquellas cosas QUE deben hacerse en nuestro proyecto (en este caso, nuestro sistema), vienen interrogantes que hacen nos desviemos del objetivo.
Asi es, nos preguntamos como es que vamos hacer esas cosas de las cuales, seguimos tomando nota.

Error! eso nos desenfoca demasiado del problema a resolver, en estos casos, el COMO nos cambia la dirección del problema, y mientras mas vamos ahondado en como cubrir esas duda, vamos perdiendo la hilación y el objetivo de las primeras reuniones.

Lo mismo sucede en la fase de diseño, he notado el problema en la preocupacion sobre el nombre de un método (lo cual, tambien a veces me concierne, pues sigo creyendo que el nombre de las cosas es muy importante para un correcto desenvolvimiento), que ademas de pensar en los parámetros a recibirse, hay integrantes del equipo que comienzan a hurgar en COMO hacer el método, cuando el objetivo de algunas tareas que son solo, la definición del objeto, el QUE del objeto, no el COMO cumplir con ciertas actividades.

Es gracioso, pero, la palabra clave siempre termina siendo "No Desenfoques, estamos averiguando el QUE, luego veremos el COMO", o simplemente "NO Desenfoques!!!"

Ahora, como es que vamos convirtiendo el QUE en muchos COMOs? pues iterando. o no?

Saludos[at]Cama

Thursday, August 14, 2008

Windows Live Messenger 9 Beta 2 = WPF?

Acabo de enterarme via esta noticia, que, entre las nuevas características del WLM una dice que está basado en Windows Presentation Foundation.

En si, no me sorprende la idea, creo haberla leido o escuchado hace ya un tiempo.

De por si, el hecho que escribo este pequeño post es para mencionar la estrategia usada por MS para que tengamos instalado en nuestra PC el core de WPF.

La verdad es que de por si, la estrategía no deja de ser buena, ya que, usuarios del servicio de mensajería, son miles de miles. Pero, qué pasa si no quiero instalar el core debido a malas experiencias?

Actualmente uso Firefox y muy pocas veces he tenido buenas opiniones del control de SilverLight en el navegador, no han sido pocas las veces en las que me ha pedido reinstalar el producto.

De verdad, espero que con el tiempo llegue a lo que hasta el momento ha logrado Flash.
Pero bueno, el tiempo lo dirá, no?

Un saludo[at]Gesfor-Lima
PD: Gracias por todos los comentarios al último post en Geeks.ms. aun sigo sorprendido.

Saturday, August 02, 2008

LINQ - Cuestiones de performance - II

Bien, para terminar con esta serie de posts (2/2), partiremos de algo mencionado en la sección consideraciones del post anterior.
No es recomendable el uso de datasets. Entonces, continuemos con el trabajo!

La prueba -digamos, más- real es cuando se trabaje bajo un modelo con la siguiente combinación:

- Uso de Entidades (Clases mapeadas a las tablas de la base datos)
- Procedimientos Almacenados
- DataReaders
- Carga en Listas Genéricas de entidades

Luego de esto se revisarán los siguientes casos:
- Linq en C# - Procedure/DataReader/Lista Genérica en C#
- Linq usando Stored Procedure en C# - Procedure/DataReader/Lista Genérica en C#

Los ejemplos serán una continuación de los usados el post anterior.
Comencemos pues.

Tiempos de Respuesta:  Linq en C# - Procedure/DataReader/Lista Genérica en C# - Linq usando Stored Procedure en C#
Para continuar debemos considerar que se necesita construir un stored procedure, una clase y cargar una lista genérica por medio de un DataReader.
Parte del código utilizado es el siguiente:

up_ListarClientes

SpListaCs 

Para el caso de Linq usando Procedures el código es el siguiente:
SpLinq
En este caso, se utiliza el método ListarClientes, que es un reflejo del procedimiento usado líneas arriba, si requieren información sobre como realizar este mapeo, les recomiendo este post de ScottGu.

Con esto y verificando los tiempos de respuesta, se obtiene lo siguiente:

Usando Jet Brains para el Ejemplo Linq en C# (Del post anterior)
TiemposCS

Usando Jet Brains para el Ejemplo Stored Procedure/DataReader/Lista Genérica en C#
TiemposSpDrLgCs

Usando Jet Brains para el Ejemplo Linq usando Stored Procedures en C#
TiemposSpLinq

Como puede observarse, el caso propuesto obtiene 1,853 ms contra los 2,521 ms entregados por el modelo Linq usando C#.
Si, es cierto, utilizar Stored Procedures desde Linq toma 4,911 ms. Es incomparable, no?
Pasemos entonces a la revisión del uso de memoria.

Hablemos de memoria:  Linq en C# - Procedure/DataReader/Lista Genérica en C# - Linq usando Stored Procedure en C#
Pasemos a los resultados del CLR Profiler.

Usando CLR para ejemplo Linq (Del post anterior)
MemoriaLinq

Usando CLR para ejemplo Stored Procedure/DataReader/Lista Genérica en C#
MemoriaCSReader

Usando CLR para ejemplo Stored Procedure en Linq
MemoriaLinqSp

Luego de la respectiva inspección, puede observarse que el consumo de recursos con Linq es considerable con respecto al modelo Procedures/Reader/Listas.
Si hablamos del modelo Linq2Sql "tradicional" (usando expresiones de consulta), el uso de recursos es casi el doble.
Pero si cambiamos a la alternativa de aprovechar los Stored Procedures, el consumo se incrementa hasta casi el triple.
Esto ultimo si que es preocupante.

Comentarios y Consideraciones
- El caso propuesto fue usando Northwind,
- Debemos recordar que hay un grupo en codeplex que está buscando algo mas acorde a la realidad, indicando que no se ajusta a las necesidades de Linq (y adicionales).
- A pesar de ello, el modelo no tiene mucha ciencia en lo que respecta a lógica de negocio requerida.
- En resumen es un stored procedure que ejecuta un filtro sobre dos campos (seleccionados al azar por el desarrollador, es decir, yo).
- Sinceramente creía que el modelo que combina Linq y Stored Procedures tendría mejor performance.
- El código usado para la ejecución del procedure desde Linq puede optimizarse (noten que uso una variable tipo "var" cuando defino la variable datacontext)
- A pesar de ello, los tiempos de respuesta, no cambian mucho (dejo a su elección la verificación de este caso)
- El consumo de recursos me parece preocupante, pero lamenteblemente he notado que muchas veces esto pasa a segundo plano.
- Un ejemplo claro para mi, es el Windows Vista.
- A mi me gusta, pero cuando lo usaba desde mi PC de 1GB me sentía como en los viejos tiempos, pero no tenia intención de desinstalar el SO, menos regresar a Windows XP.
- Ahora tengo 3GB, sigo feliz con el Vista.
- Creo haberlo comentado al menos una vez, Linq me gusta mas como herramienta de consultas contra otros objetos, no como alternativa al SQL.
- A menos claro que se cambie el modelo de SQLServer (SQL 2012? como diría David)
- Alguna explicación a los tiempos de respuesta y consumo de memoria?
- Yo creo que los mapeos que utiliza Linq para realizar las ejecuciones contra la Base de Datos son de alguna manera, una evolución a lo que se tenia con el uso de los Typed DataSets, los recuerdan?
- Recuerdan entonces que habian "Duelos" (por decirlo asi), entre usarlos o no usarlos?
- Volviendo al ejemplo propuesto, la consulta usada retorna 3 registros.
- Es un ejemplo simple, lo sé.
- Pero eso no deja de hacerlo usar tantos recursos.
- Consideran que si usara mas de 100 registros, las respuestas cambiarán considerablemente?
- Lo dejo a su elección.

Antes de despedirme, solo me queda agradecer a David por la presión a escribir estos posts, sino fuera asi, todo esto hubiera quedado en las conversaciones del msn.
Pues claro, a Carlos Walzer, por sus posts reveladores (e inspiradores, claro está).

Saludos[at]Cama

Tuesday, July 29, 2008

LINQ - Cuestiones de performance

Bien, sinceramente quisiera comentarles todo lo que he podido averiguar, investigar, estudiar y conversar al respecto.
La verdad es que el post sería interminable y como le decia a David, pues, no tendría mucho sentido (explicaciones sobran)

De LINQ puedo decirles que hace tiempo que nos enteramos de su advenimiento, yo por mi parte, estaba emocionado, recuerdo que alguna vez dije frameworks sobre frameworks, y lo mejor, frameworks y mas frameworks!

Es que, al fin y al cabo, todo lo que competa a Framework 3.0 / 3.5 y relacionados, significa para mi frameworks sobre frameworks.
Siendo la base, pues nuestro querido .net framework (2.0, por supuesto).

Es cierto, Linq2Sql es muy interesante, que uno no necesite conocer T-SQL para trabajar y realizar ejecuciones contra la base de datos, puede ser para muchos, un gran alivio.

No para mi.

Considero que si somos algo puristas al respecto, uno debe realizar una tarea con la mejor herramienta disponible, a su vez, debe contarse con el experto en el ambito.
No recuerdo cuando fue la ultima vez que estuve en un proyecto en el que no habia DBA, la verdad no recuerdo, quizá fue en la universidad, pero hace mucho tiempo que ademas de un DBA, el personal de desarrollo tiene la capacidad necesaría para construir un stored procedure con menor probabilidad de ajuste en lo que respecta a lógica y performance.

Por ese aspecto no me preocuparía mucho tener como alternativa, el uso de Linq2Sql.

Pero dejemos mi punto de vista de lado, comencemos con una de mis preocupaciones.
Creo yo, con el tiempo he mencionado algunas de ellas, pero una vez no está de mas.

Estaba algo interesado en la forma de trabajo de LINQ, pues es interesante todo esto de los datacontext y expresiones de consulta dentro del código .net, pero queria ver exactamente como hacía para obtener la información de la base de datos.

Encontré la respuesta con un poco de código a la mano y una que otra depuración cuando llegaba a la expresion de consulta.
Ahora es menos complicado encontrarnos con imagenes como la siguiente (via lancefisher.net):


Como puede notarse, la expresión se transformará en T-SQL.

Todos felices, no? el CLR se encarga de interpretar parte de lo que escribimos, transformándolo en una consulta SQL que será enviada a ejecutarse contra la base de datos.

Dije, interpretar. Es decir, estariamos regresando, en parte al código interpretado.

Por otro lado, el T-SQL generado será enviado desde nuestra aplicación hacia la base de datos, cierto?
Si lo tomamos desde otro punto de vista, estamos regresando al concepto de escribir las sentencias SQL dentro de la aplicación.
Estariamos obviando entonces el uso de stored procedures?
Claro, este es un tema controversial, como puede notarse aquí, aquí, aquí o aquí.
Por mi parte soy partidario del uso de stored procedures.

Cuando hablamos de performance uno recuerda al instante "tiempo de respuesta al cliente", lo cual es cierto, pero que pasa si hablamos de espacios de memoria? y qué hacemos con la memoria disponible?
Claro, a estas alturas uno puede olvidar esos "aspectos mínimos", aqui me estoy refiriendo al hardware.
Lamentablemente ya se han obviado las epocas en las que se luchaba por cada bit a usarse, quizá ese sea el problema.

Pero si, "esas cosas" influyen y bastante, solo para darnos una idea, veremos algunos escenarios. Para esto usaremos Northwind.

Tiempos de respuesta: Linq en C# - Linq en VB
Lo que se hizo fue construir una expresion que contiene un filtro simple, no mostraré la imagen depurando la aplicación. Pero puedo adelantarles que la expresión SQL de la imagen anterior solo puede reproducirse cuando se trabaja en una aplicación basada en C#.

Aquí la consulta construida.

Expresiones

Para seguir con el ejemplo usaremos las herramientas recomendadas por Carlos Walzer (esto en su sección Anti Prácticas.NET, la cual es una lectura que no deben dejar pasar), en este caso usaremos Jet Brains luego el CLR Profiler.

Usando JetBrains para el Ejemplo en VB
TiemposVB

Usando JetBrains para el Ejemplo en CS
TiemposCS

La linea resaltada indica el tiempo de respuesta para la ejecucion del ejemplo mostrado.
La diferencia es notoria, no? bueno, algo tendrán que ver los chicos de C# no? (es que, Linq fue creado sobre C#)

Para el siguiente caso se trabajará sobre el ejemplo en C#.


Tiempos de respuesta: Linq en C# - Ejecución de T-SQL desde código C#

Se agregó el siguiente código de prueba.

SqlEnCodigo

En este caso no se está usando una librería en particular, bueno, continuemos con las pruebas de tiempos de respuesta.
TiemposCsSql

Como puede observarse, ejecutar el código mostrado, demora 2688 ms, el cual, comparado con los 2521 ms del caso Linq en C#, nos indica que usar Linq en C# es mas rápido.

Debemos confiar en este resultado?
Estamos hablando de poco mas de 100 milisegundos.
Por esta diferencia debemos cambiar de forma de trabajo?
Pues bien, que ganamos? Un modelo completamente tipado (recordemos que las primeras propuestas venian de la mano con los datasets tipados).
Esa es una buena respuesta, pero aun no me siento convencido.


Hablemos de memoria: Linq en C# - Ejecución de T-SQL desde código C#
Aquí usaremos el CLR Profiler, la verdad es que me gusta bastante esta herramienta, sirve para darnos una vista diferente cuando hablamos de performance.

Usando CLR para ejemplo Linq
MemoriaLinq

Usando CLR para ejemplo C#
MemoriaCs

Aqui el asunto es algo preocupante.
Como puede observarse, el uso de memoria nos muestra un 607kB de Linq contra 187kB de C# tradicional, es decir estamos hablando de mas de 100% de diferencia en lo que respecta a consumo de recursos.
Qué deberiamos hacer al respecto? Qué modelo deberiamos seguir?
Yo aun no me siento convencido.

Consideraciones
- En primer lugar, el ejemplo usando DataSet es algo que no debería ocurrir en el mundo real, a pesar de que he visto lugares en los que se han construido asi, y que, funcionan!, asi que, por qué cambiarlo? Es lo que dirian, estoy seguro que si. Recuerdan el post del paradigma?
- Como les iba diciendo, el ejemplo fue con un DataSet, y hablando seriamente, la diferencia se volvería abismal si es que realizamos el ciclo completo usando un DataReader. Aqui aplicaremos la lógica y los mitos cazados por Carlos Walzer en su seccion Antiprácticas .Net. (Oye Carlos, no me conoces, pero ya te estoy haciendo bastante propaganda!!!!, es broma, es broma)
- Debemos tomar en cuenta que dejé el ejemplo con la sentencia SQL incrustada en el código C#, la respuesta mejorará si es que hablamos de una llamada a un stored procedure.
- Aplicando lo aprendido por los posts de Carlos, comprenderemos a detalle que el DataReader combinado con modelos de entidades y listas genéricas, es de momento, la mejor alternativa en lo que respecta al trabajo y desarrollo orientados al modelo de base de datos.
- El modelo tipado ofrecido por Linq (Aqui me refiero a los datacontext y entidades análogas a las tablas de la BD) puede ser reemplazado por herramientas que generan entidadas mapeadas a las tablas (Aqui me estoy refiriendo a generadores de código, en el mercado hay cientos, y que no decir en cada empresa de desarrollo)
- Este post no busca controversia alguna, hace mucho que conocí una frase que nos saca de algunas situaciones y esta es "eso depende" (y esto a veces genera desorden)
- Personalmente hablando, considero Linq como un lenguaje interesante, pero que debe afinarse en muchas cosas.
- Lo bueno de todo esto es que uno puede seguir construyendo sus procedimientos SQL y enlazarlos a las clases Linq2Sql, pero eso es mas trabajo, no? (Qué creian que el designer nos iba a ayudar toda la vida?)
- Me despido

Saludos[at]Cama

Monday, July 21, 2008

Para qué debe usarse la depuración? (y cuándo?)

Depurar el código tal vez no sea la respuesta indicada si es que se necesita entender el proceso de un negocio en particular.

Menos aun si es que si quiere identificar de buenas a primeras un problema.

Menos aun si es que estamos hablando de la depuración línea por línea.

No estoy en contra de la depuración, no he dicho eso.
Con lo que no estoy de acuerdo es con el uso incorrecto que se le dá, a veces pienso que el termino apropiado es "abusar" de tal funcionalidad.

Considero que si tenemos que depurar una aplicación es debido a un funcionamiento no esperado de la misma, algo que el código no tenia contemplado, si... una excepción a la regla.

Correcto, una parte de la depuración debe ser cubierta por el manejador de excepciones,
Pues claro, dado a que, si sucede un problema en el código, uno no debería preguntarse dónde comenzar, menos aun basarse en corazonadas del tipo "a ver, en que ventana se cae?". (A menos claro, que uno termina cayendo por las corazonadas, observaciones y/o experiencias)

Si es que estamos en una construcción debemos tener en cuenta que el mensaje de error nos tiene que entregar información suficiente que sirva como base para identificar el problema.

En este caso la corazonada se convierte en pregunta del tipo "veamos el mensaje de error
Es muy cierto que con el tiempo una persona termina preguntando "qué dice el mensaje de error?" (incluso por teléfono), pero la idea es que la descripción entregada por la misma sea comprensible por personas de menor experiencia.

Cómo se logra esto? si estamos en etapa de construcción, el detalle debe ser explícito, incluyendo información del stack (okey, creo que fui demasiado técnico), es decir hay maneras de obtener incluso la línea de código que presenta el problema.

Con esto ya sabriamos donde comenzar y el espectro de revisión será cada vez menor.
Y eso que no estamos mencionando aspectos muy importantes como lo son, las pruebas unitarias.

Cuando el rango de revisión es cada vez mas pequeño, estamos obligados de manera inconsciente, a reemplazar la depuracion línea por línea por una revisión del código manteniento un correcto uso de los puntos de interrupción (es decir, por ejemplo, antes y despues de la llamada a una función).

Claro, que esto puede lograrse mientras mas información del error se tenga. Y si estamos hablando de construcciones propias, pues podemos controlarlo, o no?

Ahora, si estamos hablando de algun legado que tenemos que terminar de construir o agregar funcionalidad y este sistema no cuenta con un manejador de excepciones o tiene mensajes no apropiados al ojo humano (es decir, error general, por favor, arreglame), pues preparense, que necesitan paciencia.

Saludos[at]Trabajo