Link del día: Let's Make the Web Faster

Let’s make the Web Faster es el nombre de un conjunto de artículos disponible en Google Code, que explican muchas formas de optimizar una página web, cubriendo muchos aspectos, desde la codificación misma a la configuración del servidor. Las explicaciones son simples y fáciles de seguir, y están ejemplificadas y con muestras de sus resultados.

La mejor parte para mí es la de los artículos, que es en donde está toda la información compilada. Notesén las grandes categorías: CSS, gráficos, compresión, PHP, HTTP caching, prefetch, herramientas, browsers, javascript, latencia percibida (esto es, lo que el usuario tiene la sensación de lo que tarda la página)… y luego un montón de charlas técnicas sobre estos temas en Google.

Por supuesto, cualquiera de nosotros puede participar de la parte de comunidad y sugerir cambios y nuevas ideas a todo esto, con lo cual en cierta forma (y sólo en cierta forma) se vuelve un proyecto colaborativo, o al menos nos dan la oportunidad de opinar.

Soy un zorrinito rápido.

(Read more →)

Link del día: Un poquito sobre el email

EPH o “Extra Pair of Hands” es el nombre de un servicio de tercerización de atención telefónica, que se supone nos brinda la posibilidad de sacarnos un peso de encima si es que eso toma mucho del tiempo de nuestra estadía en la oficina. Pero eso no es lo interesante de hoy, sino un FAQ que publicaron sobre el tamaño de direcciones de email. El pequeño informe está bastante completo para tratar de un tema tan específico, llegando a hablar incluso de cuánto en memoria se reserva por los programadores en general y cuánto requerirían los estándares. Algo curioso de conocer.

Como extra, les dejo el blog de Cellular Obscura, que es la forma en que este fotógrafo (Shawn Rocco) sigue el mundo. No sé si tenga algo de especial, pero me gustaron las fotos que tiene.

Soy un zorrinito reservado.

(Read more →)

Link del día: IPInfoDB

Aquellos que no están mucho en el tema de la geolocalización, lo que más cerca habrán estado de encontrar el link del día de hoy útil es preguntarse algo como: ¿Puedo saber de qué ciudad se mandó un email? ¿Puedo saber en qué parte del mundo está alguien?

Para aquellos que están un poco más adentro, saben que un determinado rango de IPs está asignado a determinadas empresas, que por lo general lo utilizan en cierta parte del mundo, y no sólo eso, sino que también distribuyen sus redes en subredes (valga la redundancia) utilizando rangos menores, de forma tal que a veces es posible, con el IP de una determinada computadora, saber desde qué parte del mundo está conectada.

Para eso el día de hoy tenemos a IPInfoDB, un servicio de geolocalización gratuito que tiene dos variantes muy interesantes.

La primera de ellas es la versión web, en donde podemos verificar nuestra localización o la localización de algún IP o dominio.

La segunda de ellas es la posibilidad de bajar una base de datos IP-localización, a nivel de país o a nivel de ciudad. Sí, sí, y no sólo eso, sino que, según prometen ellos, la base de datos se actualiza todos los meses. Nos permiten bajar la versión grande o chica, según lo que nos convenga más. Por último, interesante para aquellos que quisieran agregar esto a sus aplicaciones: no hace falta tener la base de datos localmente, ya que ellos ofrecen una API gratuita utilizable para propósitos de consulta.

Soy un zorrinito geolocalizado.

(Read more →)

Seminario ASP.NET con VS 2008

El día de hoy tuve el gusto de poder participar como disertante en un seminario que se dio en la Universidad FASTA, junto a Adrián Cura, presidente de MUG Argentina, quién se encargó de explicar la parte teórica, y yo dando demostraciones en vivo y en directo de cómo funcionan muchas de las características o fundamentos mencionados.

Si bien el tema de la charla, en lo que se publicó originalmente, trataba del nuevo modelo de programación de ASP.NET con .NET Framework 3.0 o 3.5, ASP.NET AJAX y Windows Communication Foundation, en realidad el temario fue un poco más extenso.

Comenzamos a las 9.15 de la mañana, presentándonos y mostrando un video, la publicidad de Proyecto Natal de Microsoft. Hablamos de la experiencia del usuario, y cómo las nuevas tecnologías apuntan a mejorar esa experiencia y tratar de naturalizar la interacción del usuario con los sistemas, en lugar de adaptar el usuario a los paradigmas de programación. Esto se enlazó con la facilidad que el programador debe tener para poder tener una buena experiencia como desarrollador y las herramientas que posee. Esto a la vez se enlazó y comenzó la exposición sobre .NET Framework 2.0, 3.0 y 3.5 y se explicó qué tiene de nuevo y en qué nos beneficia.

Entre estas cosas, se mencionó ASP.NET AJAX y la gran diferencia que genera en la experiencia del usuario la presencia de AJAX, y la gran diferencia de desarrollo que genera que todo esto esté presente en una herramienta existente, sin necesidad de reinventar la rueda. Tras una breve pausa para tomar un café, se hizo una exposición en vivo de algunos pequeños ejemplos mostrando el funcionamiento de ASP.NET AJAX, explicando cómo funcionaban internamente y cómo hacían transparente al desarrollador y al usuario un montón de cuestiones que siempre fueron necesarias tener en cuenta para el desarrollo web.

Pasamos a una segunda sección, que fue WCF (Windows Communication Foundation). Se habló del paradigma de programación orientado a servicios brevemente, y cómo este pilar de la arquitectura .NET nos provee de herramientas para poder afrontar dicho paradigma. Se habló de los servicios, sus características, y tras haber refrescado todo eso, una breve demostración en donde se podía ver un servicio funcionando, y la manera en que este era implementado a través de las herramientas que Visual Studio 2008 provee.

Finalmente, se pasó a una explicación introductoria a Silverlight y Windows Presentation Foundation, otro pilar de la arquitectura .NET, que se basa en enriquecer la experiencia del usuario y generar una interfaz amigable para cualquier tipo de aplicación, y de qué forma Microsoft provee nuevas herramientas y estándares para no hacer de esto una tarea imposible para los desarrolladores y los diseñadores.

La charla terminó a las 13:00 como se encontraba previsto, aunque nos quedamos un rato más hablando sobre ciertas inquietudes particulares de alguna gente, tras lo cual efectivamente nos retiramos.

Soy un zorrinito ASP.NET.

(Read more →)

Link del día: Genetic Algorithms

Recuerdan que en algún caso publiqué una introducción a algoritmos genéticos (que incluía visualizaciones gráficas y todo)? Bueno, varios luego de ver eso me preguntaron “Y esto para qué sirve?” y aparte de la chorrera de palabras que habré largado, poco convincentes, hoy publico también 15 Real-World Applications of Genetic Algorithms.

Por si fuera poco, me animo a publicar otra introducción más al tema, llamada Genetic Algorithms: Cool Name & Damn Simple y otra más: Introduction to Genetic Algorithms, y a republicar el autito generado con algoritmos genéticos, o la evolución de la Mona Lisa.

Soy un zorrinito genético.

(Read more →)

Testing Flexible | Flexible Testing

Español:

Estos días estuve trabajando en desarrollar un proceso de testing adaptable a empresas que pueden querer tener un ciclo de testing completo (con todo el ciclo de vida del mismo que eso implica) como también tener simplemente un par de días y un par de recursos libres para poder testear. Ante tanta variabilidad, es necesario generar un modelo de testing que sea adaptable y particionable según las necesidades del momento, o según lo planificado con anterioridad.

Para casos planificados, pueden anticiparse testings que comienzan a trabajarse desde los requerimientos del sistema en desarrollo, y pueden incluso seguir el ciclo de vida de desarrollo del software a lo largo del mismo y en paralelo. Este es el famoso modelo en V del ciclo de vida de testing, pero este es el que presenta una gran deficiencia, que es la misma dependencia entre todas sus etapas. Este modelo se ajusta perfectamente a desarrollos con ciclos de vida de cascada, y si bien es fácilmente adaptable a otros ciclos de vida definidos, qué ocurre cuando nuestras etapas no son del todo claras? O peor aún, qué pasa cuando diferentes etapas se mezclan entre sí?

Por supuesto, esta situación no es deseable, pero al momento de darse, también sería deseable que nuestro modelo de testing no sea un contra más en esta situación, sino que permita ser utilizado también para aportar calidad, que es – al fin y al cabo – la finalidad del mismo.

Nuestro acercamiento a dicha tarea fue definir distintos tipos de testing, que variarían según los requisitos que estos tuvieran (documentos en qué basarse, cantidad de recursos necesarios proporcionalmente al tamaño del sistema, tiempo invertido, nivel de capacitación necesaria para los recursos, etc.), y para cada nivel de este tipo de testing, una variante que permitiera evaluar cierto aspecto de un sistema. De esta forma, logramos tener testing que puede ser hasta casi improvisado por los mismos desarrolladores, dejando documentación útil para el futuro del desarrollo del sistema, como a la vez también tenemos testing que puede planificarse desde el comienzo del proyecto y comenzar a trabajarse desde los requerimientos.

Por supuesto, creemos que mientras más haya, mejor, pero esto no es siempre posible, y es una realidad a la que tenemos que mantenernos atentos, porque negarla es condenarnos al fracaso.

Desafortunadamente, no puedo detallar información sobre los tipos de testing que hemos definido (ya que estos son propiedad e información de la empresa), pero los mismos también han sido planeado de un estilo y estructural totalmente formal, de manera que fácilmente puede tercerizarse el trabajo, o realizar testing para terceros de ser necesario o de surgir la oportunidad.

Soy un zorrinito adaptable.


English:

These days I’ve been working on developing a testing process which would be adaptable to companies having a large testing cicle (including the whole life-cycle for testing it implies) as well as companies having just a couples of days they can use for testing and few resources available. On such variability, it was necesary to generate a testing model which would be adaptable and partitionable acording to particular necesities, or according to what can be planned in the project.

For cases where the testing is a planed part of the whole development cycle, testing itself may begin from the requirement specification and may even follow the whole development life-cycle at the same time. This is the famous V-model of testing life-cycles, but this model presents a great deficiency, and it is the same dependency between all of its internal stages. This model adjusts perfectly to developments with waterfall life-cycles and, it is even adaptable to other well-defined life-cycles. But what happens when these life-cycles do not have well-defined stages? Or, even worse, when this stages are sometimes mixed-up?

Of course, this situation is not desirable at all for a project, but, when it is found, it would be desirable that our testing model does not fall with it, but should allow us to be used also to give more quality – i.e., the purpose of it.

Our approach to this task was defining several different types of testing, which would vary from the requirements they had (documents on which to be based on, resources needed according to project size, time invested, knowledge level required for resources, etc.), and for each of these levels of testing, different variants which would allow us to evaluate a certain aspect of a system. This way, we achieved having testing processes which could be improvised by the developers themselves leaving useful documentation for future developments, as well as it could be also used for being planned and start being analyzed by a testing team from the very beggining of the development proces.

Of course, we belive that as more testing, best quality can be achieved, but this is not always posible, and this is a fact we should take into account, as deying it is condemn ourselves to failure.

Unfortunately, I’m not allowed to go into details on about the different types of testing we’ve defined – as they are our company’s property – but these types of testing had been designed with a formal structure and style, so that they can be also used to be outsourced to other testing companies, or that, needed the case, we could be testing another’s company code.

I’m an adaptable little skunk.

(Read more →)

Link del día: Un poquito de Encodings

El otro día, leyendo un post de I know the answer (it’s 42) hablando sobre cuál es el post del blog por el que te conocen (cosa que generalmente suele ocurrir), me desvíe leyendo otro de los artículos que él linkea, llamado The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) […la frotó sobre una piedra, la colgó de un abedul…]. Dicho post en particular habla de toda la historia que hay detrás de las distintas representaciones de los caracteres y la forma de codificarlos. Muy fácil de leer y hasta muy didáctica. Importante para los desarrolladores y buen dato para los curiosos (notesé que tiene fecha del 2003… y aún aplica muy bien).

Por ahí también anda el link a la página oficial de Unicode, que es actualmente el repositorio más grande de información que hay sobre símbolos utilizados para la transmisión de información, desde letras latinas y números hasta símbolos matemáticos y caracteres ideográficos.

Como extra también tenemos una página para testear distintos encodings en nuestro navegador (aunque a mí no me anduvo del todo bien), o una que tiene varios elementos todos juntitos, acá o acá.

Soy un zorrinito latin-1.

(Read more →)

Testing como parte del proceso de calidad de software

Hoy finalizó el curso de tres días de Testing como parte del proceso de calidad de software, organizado por [ATICMA](http://www.aticma.org.ar/), [Universidad FASTA](http://www.ufasta.edu.ar/) y [SEPYME](http://www.sepyme.gov.ar/), en conjunto con el [INTI](http://www.inti.gov.ar/). Dicho curso, dictado por Victoria Martínez Suárez del Laboratorio de Testing y Aseguramiento de Calidad de Software del INTI Córdoba, constó de una serie de puntos a tener en cuenta en el momento a comenzar con el proceso de testing y cómo integrarlo a un proceso de desarrollo ya implantado en nuestras empresas. El curso constó de 7 (siete) horas por día durante 3 (tres) días, siendo los mismos Jueves 19, Viernes 20 y Sábado 21 de Marzo de 2009. El curso comenzó con la introducción al testing del software. Sus ventajas y desventajas, y la introducción a conceptos comunes en un área que aún se encuentra en desarrollo como parte del proceso de software. Se introdujeron varios de los estándares internacionales utilizados para la organización de dicho proceso en cuanto a documentación, definiciones de ciertos de los aspectos del mismo. Ese mismo día, tras haber terminado con esa introducción, se procedió a hablar del testing como parte del proceso de calidad. Se hizo mucho énfasis en el valor agregado que aporta el hecho de hacer testing de software ante el aseguramiento de la calidad, y, como se repitió varias veces: "el costo de no hacerlo". Finalmente, se procedió a hacer combinar el proceso de desarrollo y el proceso de testing, que posee un ciclo de vida propio, flexible y complejo. Terminada la visión de proceso, se siguió ya introduciéndonos en distintas metodologías de testing de software, que incluyen distintos tipos de prueba, es decir, según el aspecto que quiera medirse. Según lo deseado de evaluar, qué tipos de pruebas pueden efectuarse y cómo se relacionan con el proceso, qué granularidad deben tomar esas pruebas, qué se debe hacer para que sean satisfactorias, qué hacer con los resultados, cómo re-evaluar, etc. Teniendo una posición más práctica, comenzamos a indagar en el proceso de derivación de casos de prueba a partir de distinta documentación o fuentes de información (bases de las pruebas) que pueden generarse a lo largo de las etapas del desarrollo de software (sea cual sea su ciclo de vida, cascada, iterativo, ágil, etc). Luego se habló del ambiente de pruebas, se resaltó la enorme importancia de un ambiente de pruebas controlado y correctamente configurado. Luego se habló de un modelo tentativo para el ciclo de vida de las pruebas (no confundir con el ciclo de vida del proceso de testing), y cómo puede tratarse de forma organizada y ordenada los resultados de las mismas. Para esto fue que luego se dedicó toda una sección a explicar gestión de la configuración, que si bien no es algo directamente relacionado al testing, sino más a áreas de Quality Assurance, tiene enorme impacto en todos estos procesos que de otra forma se volverían caóticos e incontrolables. Por último, se realizó un repaso sobre la automatización del testing, que incluyó demostraciones prácticas sobre aplicaciones web y Selenium para testing funcional y NUnit como ejemplo de testing unitario. Agradecemos a Victoria por su dedicación, esfuerzo, organización y dictado del curso, con el cual tuvimos una visión bastante satisfactoria. Esperemos que este sea el comienzo de un proceso de interiorización en el área de testing y quality assurance para la mejora de los procesos en las empresas y en el testing en sí, para que madure como proceso reconocido y firme. _Soy un zorrinito testeado._

(Read more →)

Jobeet - symfony en 24 horas

Ayer terminé de leer y prepararme según el manual de symfony 1.2 llamado _Jobeet_. Este manual es uno de los de la saga de _Practical symfony_, de aquellos que presentan las principales características de la plataforma en base a un ejemplo práctico que se desarrolla de principio a fin. De esta forma, permite al lector no solamente conocer esas características sino además poder ponerlas en práctica, y experimentar por cuenta propia. Por mi parte, cometí el pequeño error de utilizar no la versión en inglés online (que está disponible [aquí](http://www.symfony-project.org/jobeet/1_2/)), sino la versión PDF descargable en español (disponible [aquí](http://www.librosweb.es/jobeet/pdf/)). Ese error me llevó a tener que pelear con ciertos problemitas menores de traducción, ciertas correcciones que no se encontraban aún realizadas en el PDF a modo fe de erratas (en cambio, la versión original en inglés se está constantemente actualizando), y, curiosamente, posee menos formato y menos aclaraciones la versión PDF que la versión online. Más allá de eso, creo que como manual en parte peca de cumplir esos prejuicios que a veces tenemos sobre los manuales de 24 horas. Primero, son un poco superficiales en cuanto a muchas de las características. Segundo, nunca son realmente 24 horas. Respecto de lo primero, debo decir que si bien era un poco superficial, me resultó mucho más fácil de comprender que otro libro que comencé a leer, llamado _symfony, la guía definitiva_. Esto se debe a que esta última planteaba muchas de las características de symfony como "arte de magia" y no explicaba la forma de utilizarlas, haciendo un gran conjunto de conocimientos nuevos para el lector disponibles de un solo golpe y sin ninguna idea de siquiera como ponerlos en funcionamiento. En cambio, el paulatino avance que nos propone la guía práctica resulta mucho más útil y más fácil de asimilar y poner en práctica a la vez que uno comienza a adquirir experiencia. Respecto de lo segundo, debo aclarar que, se supone, el manual estaba diagramado en 24 capítulos que deberían consumir una hora del lector cada uno. En esta hora, el lector podría leer y trabajar al mismo tiempo, y luego de esa hora estaría disponible. En algunos casos, una hora era una cuestión de sobra para comprender y llevar a la práctica los conceptos (por ejemplo, la comprensión de las clases del modelo), mientras que en otra era una hora demasiado estirada. Como ejemplo de este último caso puedo mencionar el capítulo dedicado a los plugins de symfony, en donde se suponía que leyendo el capítulo, refactorizando todo nuestro proyecto, comprendiendo la estructura de los plugins, creando un plugin, reconfigurando nuestra aplicación, y a la vez asimilando lo aprendido, no habría pasado más de una hora. Considero ese caso un poco irreal, pero también ha habido casos (como el día del diseño, o el día del descanso), en donde literalmente no se hace nada, y uno puede simplemente adelantar trabajo de otros días o experimentar cosas que quedaron en el tintero. Más allá de todo eso, debo aclarar que es un buen libro y un buen manual para comenzar. No sirve para adentrarse en los aspectos más ocultos de symfony, pero como introducción es realmente muy bueno, y fácilmente asimilable. _Soy un zorrinito en 24 horas._

(Read more →)

Capacitación VS2008 & Framework .NET 3.5

De la parte de la gente del [MUG](http://www.mug.org.ar/) hemos podido realizar una capacitación interna sobre las novedades que Visual Studio 2008 y el Framework .NET 3.5 nos ofrece sobre las respectivas versiones2005 y 2.0 de las mismas. El temario fue bastante extenso para el tiempo disponible de tres días (unas doce horas completas de capacitación, que en realidad se convirtieron en catorce), pero el tiempo fue totalmente aprovechado, y pudimos tener una buenísima introducción a todo lo que es .NET 3.5 y lo que el entorno de Visual Studio nos provee en su nueva versión. Más allá de eso, también se abordaron algunas tecnologías que si bien no son nuevas, están comenzando a tomar peso en estos tiempos, como lo es la dinámica de Workflow, Windows Communication Foundation y Windows Presentation Foundation. También hicimos un breve paneo de otras, como Silverlight, Expression Studio y otras herramientas que forman parte de la nueva suite de Microsoft para desarrollo y diseño. De parte de la empresa queremos agradecer a Adrián Cura, quién fue el orador que nos estuvo acompañando en esos días y dictando esa capacitación.

(Read more →)