Welcome to Comunidad .NET de Cd. Juárez Sign in | Join | Help

June 2007 - Posts

Desempeño de WCF vs. otras tecnologías de comunicación distribuída

Una razón más para considerar WCF:

To summarize the results, WCF is 25%—50% faster than ASP.NET Web Services, and approximately 25% faster than .NET Remoting. Comparison with .NET Enterprise Service is load dependant, as in one case WCF is nearly 100% faster but in another scenario it is nearly 25% slower. For WSE 2.0/3.0 implementations, migrating them to WCF will obviously provide the most significant performance gains of almost 4x.

A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies

Reseña: The Principles of Beautiful Web Design

En una plática que di, donde presenté las herramientas Expression de Microsoft, le platiqué al público que cuando se diseña la interfaz de una aplicación--ya sea tipo desktop o Web--hay dos tipos de personas: las que nos gusta tirar código y las que les gusta hacer rectángulos con esquinas redondas y cosas que brincan y hacen fade-in en la pantalla.  En el caso de las aplicaciones Web, a los primeros les dicen desarrolladores Web (web developer) y a los segundos diseñadores Web (web designer)--una distinción que al parecer los reclutadores que me llaman nunca han podido entender. 

Expression es para el segundo grupo.  Pero yo, definivamente pertenezco al primero.  Soy de ese tipo de personas que si les pides una aplicación, te sabe hacer la arquitectura, la capa de objetos de negocio, la capa de acceso a datos, servicios, etcétera, es decir, un sitio que funcione perfectamente de pe a pa, pero no me pidas que te diga qué móndrigos colorcitos o que tipo de layout deberíamos usar para las "paginitas", porque no sabría ni por donde comenzar.

Últimamente traía la idea de cambiar el diseño "gráfico" de este sitio/blog, tomando en cuenta que: A) no quería uno de los diseños estándares de Blogger, B) quería algo completamente original, lo cual descartaba usar los templetes que están disponibles en otros sitios como este, este y este, y C) a pesar de que domino CSS a un buen nivel, no sé ni p*** de "diseño gráfico".

Portada - The Principles of Beautiful Web Design Así que se me hizo una buena oportunidad para aprender.  Comencé a interesarme por el tema, busqué libros y cuando me topé con The Principles of Beautiful Web Design de Jason Beaird (SitePoint, ISBN 978-0-9758419-6-9) supe que había encontrado el indicado.  Este es un excelente libro de apenas 165 páginas--y con muuuchas ilustraciones--donde en apenas 5 capítulos pretende enseñarle a los "programadores" las bases para el diseño de un sitio Web: composición y arreglo (layout), color, textura, tipografía e imágenes.  También contiene un montón de enlaces útiles que comparto a continuación.

Composición y arreglo

Aunque algunos de los arreglos en el web son casi estándar--y ni siquiera tienes que quebrarte el coco para echar el CSS requerido--el libro explica bastante bien la teoría de cuadriculado (grid theory), la regla de tercios--así es, no solo se utiliza en la fotografía--y los layouts estándar.  Además hace un buen trabajo identificando algunas tendencias recientes que quizá ustedes ya hayan notado.

Un buen argumento que hace el autor, es que para que uno pueda hacer un buen diseño es importante ver varios diseños buenos.  Algunos recursos en este departamento son:

Color

Si son como yo, y no saben ni qué colores escoger y combinar para la ropa que se ponen en la mañana, mucho menos para un sitio Web, entonces este capítulo les servirá.  Explica desde las asociaciones psicológicas que tenemos con algunos colores, hasta la teoría RGB para combinarlos y poder desarrollar un esquema y paleta de colores basándonos en cuáles son análogos, complementarios, monocromáticos, etc.  Alguna de la información pueden encontrarla en un artículo por el mismo autor llamado Color for Coders.

De las herramientas que menciona, están unos sitios que puede ayudar enormemente en esta tarea:

Textura

Este capítulo es uno de los dos que trae algo de código CSS.  Y tiene una introducción que me cayó como pedrada (traducción mía):

Hay muchas personas bien-intencionadas por ahí que construyen un sitio Web con un layout estándar de dos o tres columnas, escogen unos cuantos colores para él y lo dan por terminado.  No se molestan con empujar su diseño más allá, o afinar los detalles.  Quizá no tienen suficiente tiempo o dinero en el proyecto, o quizá se han tomado el axioma de "menos es más" demasiado literalmente.

No todos los sitios Web tienen que estar hermosos, pero cada sitio puede serlo. El surgimiento de CSS le ha dado a los diseñadores Web un gran control sobre cómo se ve un sitio, pero creo que el problema es que muchas personas simplemente no saben por dónde empezar cuando se trata de personalización. (p. 67)

Y sí, como habría de esperarse, habla--entre varias otras cosas--de cómo hacer rectángulos con esquinas redondas, jejeje.  Para ello hay una herramienta que menciona el autor que también es bastante útil:

  • Spanky Corners - Una herramienta que genera las imágenes y CSS necesarios para este efecto de acuerdo a los colores que tú escogas.

Tipografía

Este quizá fue el capítulo con el que más familiarizado estaba dado mi interés por la tipografía.  Es decir, yo ya sabía la diferencia entre un font serif y uno sans-serif, así como cuáles eran los 7 fonts "seguros" para el Web.  Aún así aprendí algunas cosas nuevas. 

De los enlaces útiles en este capítulo están:

  • sIFR 2.0: Rich Accesible Typography for the Masses - Explica una técnica que se degrada "graciosamante" utilizando Flash y JavaScript para aplicar prácticamente el font que quieras a encabezados.
  • Typetester - Una herramienta que permite comparar el efecto de diferentes configuraciones sobre distintos fonts.

Y si de veras se quieren clavar en el tema, yo agregaría el siguiente:

Imágenes

Este fue uno de los capítulos que quizá le faltó un poco más de "carnita", aunque trae buenos ejemplos del proceso de criticar y arreglar una fotografía.  También explica muy bien sobre los diferentes esquemas de licenciamiento para fotografías stock--gratis, royalty-free y rights-managed--y dónde conseguirlas.   

El autor menciona dos sitios donde puedes obtener fotografías stock completamente gratis:

Conclusión

The Principles of Beautiful Web Design es un libro que es tan corto que me lo eché en tres sentadas.  Se clava más con los muchos ejemplos e ilustraciones sobre los conceptos de diseño, en vez del código CSS necesario para producirlo, lo cual fue perfecto para no desviarse de los temas.  La narrativa y es amena y tiene muchos chistoretes con los que me identifiqué. Hasta veces sentía como si estuviera leyendo una revista larga, más que un libro.  Si están en la misma lancha que yo con respecto al "diseño gráfico" de sitios Web, entonces se los recomiendo.

Armado con este nuevo conocimiento, comenzará el re-diseño de este sitio, así que si de repente ven cosas raras no te asustes, solo soy yo experimentando y aprendiendo un poco.

Aventuras con Safari 3 en Windows

Apple anunció hoy en el WWDC que la versión Beta de Safari 3 está disponible no solo para Mac sino también para Windows. Pueden ver algunos screenshots en este artículo y descargarlo desde este enlace.

Como soy desarrollador de aplicaciones Web, pues definitivamente me interesó jugar con él, ya que es uno de esos browsers de los que he escuchado cosas buenas (p. ej. que es de los que cumplen más con los estándares y que está basado en khtml igual que Konqueror, y que tiene un feel bastante bueno), pero con quien no he jugado simplemente porque no tengo una Mac (todavía).

Así que pronto me aventé a instalarlo. Pero al arrancar, me recibió esto:

WTF??? smile_sarcastic

No había texto, ni en los menúes ni en las páginas. Nada. Lo reinstalé (ya saben, la solución Microsoft), pero esta vez utilizando el instalador que traía QuickTime, a ver si hacía alguna diferencia. Naranjas dulces, limón partido.

Digo, es un beta, así que cosas como estas son de esperarse. Así que me eché un clavado buscando la solución hasta que en los foros de soporte de Apple me topé con este thread. Luego de algunos intentos esto es lo que tuve que hacer para echarlo a jalar (por si les pasa lo mismo a ustedes).

Paso #1: Instalar los fonts necesarios

Por alguna extraña razón, parte del problema era que los fonts requeridos para la aplicación no se instalaron apropiadamente. No es gran cosa, solo hay que ir a Control Panel > Fonts y luego menú File > Install New Font... y agregar los fonts Lucida Grande y Lucida Grande Bold. Estos los puedes sacar de

C:\Program Files\Safari\Safari.resources\

Paso #2: Forzar un arranque erróneo de la aplicación (sí, lo leíste correctamente)

Por alguna razón hay algunos archivos que no son creados con la instalación. Así que para que los cree, es necesario forzar un error en la aplicación, por extraño que eso parezca. Para hacerlo, tienes que renombrar el fólder Safari.resources (el mismo de donde sacaste los fonts) con algún otro nombre y luego arrancar Safari directamente usando el Safari.exe (si intentas utilizar un shortcut el instalador automáticamente reparará la instalación y re-creará el fólder, lo cual no es lo que quieres).

Una vez que intentas arrancar con el .exe, te aparece un error de que la aplicación no pudo correr. Simplemente es cuestión de cerrar el mensaje y restaurar Safari.resources con su nombre original.

Una reiniciada y ya casi estaba listo.

Paso #3: Agregar fonts comúnes

Resulta que hay un archivo que Safari arma con la información de los fonts que están en tu máquina, pero si tienes muchos, el archivo puede no incluirlos todos, causando que algunas páginas no despleguen su texto. El problema más común es con el font Verdana (que estaría al final de la lista). Si has hecho desarrollo de web sabrás que hay TONELADAS de páginas que lo utilizan, así que por ahora tienes que agreagar los más importantes a este archivo:

C:\Documents and Settings\<username>\Local Settings\Application Data\Apple Computer\Safari \fonts.plist

La info que tienes que agregar es algo así como esta:

<key>Verdana</key>
<string>C:\WINDOWS\Fonts\verdana.ttf</string>
<key>Verdana Bold</key>
<string>C:\WINDOWS\Fonts\verdanab.ttf</string>
<key>Verdana Italic</key>
<string>C:\WINDOWS\Fonts\verdanai.ttf</string>
<key>Verdana Bold Italic</key>
<string>C:\WINDOWS\Fonts\verdanaz.ttf</string>
<key>Tahoma Bold</key>
<string>C:\WINDOWS\Fonts\tahomabd.ttf</string>
<key>Tahoma</key>
<string>C:\WINDOWS\Fonts\Tahoma.TTF</string>
<key>Trebuchet MS</key>
<string>C:\WINDOWS\Fonts\trebuc.TTF</string>
<key>Trebuchet MS Bold</key>
<string>C:\WINDOWS\Fonts\trebucbd.TTF</string>
<key>Trebuchet MS Bold Italic</key>
<string>C:\WINDOWS\Fonts\trebucbi.TTF</string>
<key>Trebuchet MS Italic</key>
<string>C:\WINDOWS\Fonts\trebucit.TTF</string>
<key>Lucida Grande</key>
<string>C:\WINDOWS\Fonts\Lucida Grande.ttf</string>
<key>Lucida Grande Bold</key>
<string>C:\WINDOWS\Fonts\Lucida Grande Bold.ttf</string>

Ahora sí, a jugar

De las primeras cosas que noté (y que alguna gente se quejó) es que el anti-aliasing que utiliza para el texto no es ClearType (la imagen de arriba no está editada). Ya saben que para mi esto es importante tenerlo en cuenta, ya que determina parte de la "experiencia" (por usar la palabra de marketing) que tienen nuestros usuarios.

Otros se quejaron de que no era tan rápido como Apple dijo (2 veces más rápido que IE 7 y 1.6 veces más rápido que Firefox), pero rápidamente se retractaron. Mi opinión personal es que jala hecho-la-mater (un término completamente técnico), un poco más incluso que Firefox, aunque quizá se deba a que mi instalación de FF carga de cajón con varias extensiones que para mi son "escenciales" (AdBlock, Del.icio.us, Web Developer en fin).

Por otro lado me he topado con algunos bugs y también diferencias a las que tengo que acostumbrarme. De entre las pulgas estan que a veces no toma bien los settings del proxy (al parecer toma los de IE y no puedes configurarlo, o algo así) y que el link de "Add Bookmark..." cuando estás viendo un RSS feed al parecer no funciona (tienes que dar Ctrl+D o dar clic en el botón del navegador para suscribirte al feed). Y de las diferencias con otros browsers están que Ctrl+Enter no te pone el www.<sitio>.com y que Clic-Medio no abre un Tab nuevo como lo hacen FF e IE.

Sin embargo, no puedo negar que Safari tiene un look 'n feel bastante sofisticado y de fácil uso, igual que iTunes, algo que tanto a FF e IE7 les hace falta. Además tiene features únicos como Private Browsing, que lo hacen útil cuando andas en sitios de dudosa reputación... haciendo... investigación sobre temas de seguridad... ahem. smile_wink

Conclusión


A pesar de las bondades que tiene, Safari probablemente no se convierta en mi navegador preferido para uso diario/personal en algún momento cercano (una palabra: extensiones), pero sí planeo tenerlo a la mano para probar la compatibilidad de mis apliaciones web. Quizá te sirva a ti también.

Diferencias en herramientas de diferencias e integración con SourceGear Vault

Cuando desarrollas software como parte de un equipo, es bastante común que en algún momento tú y Fulanito De Tal modifiquen el mismo archivo para dos cambios distintos y que tengas que reconciliar las diferencias antes de que puedas hacer el check-in. Pero a menudo, las herramientas que vienen con el controlador de código son HO-rrendas (SourceSafe 6.0 anyone?)

Es por eso que una buena herramienta de diferencias es escencial en el toolkit de un desarrollador, y si eres igual de codo ejem, digo... práctico que yo, pues siempre buscas lo bueno, bonito y barato (léase gratis, de preferencia).  Así que voy a mencionar 3 de mis favoritas en esta categoría: WinMerge, DiffMerge y BeyondCompare.  Todas ellas soportan básicamente las mismas características: comparación de fólderes, múltiples archivos, y archivos con diferentes encodings, pero también tienen uno que otro extra que las hace diferentes e interesantes.

Finalmente, veremos también cómo hacerle para integrarlas a SourceGear Vault (el controlador de código que uso en mi trabajo) de manera que solo tengas que darle clic derecho en el Solution Explorer de Visual Studio, selecciones "Compare..." y voilá, compares la versión local contra la versión controlada.

WinMerge

WinMerge es una herramienta de esas que son gratis en todo el sentido de la palabra.  Es gratis para descargar y open source.  De las cosas interesantes que ofrece son que permite la creación de los parches de código (para aquellos controladores como CVS, supongo) y tiene integración al shell de Windows, incluso en las versiones de 64 bits (osea que sale si le das un clic-derecho a un archivo en Windows Explorer, te sale la opción para comparar archivos). 

De las cosas que no me gustan (y dirás que qué payaso, pero en fin) son que la interfaz está un poco fea, estéticamente hablando y no tan intuitiva. Solo corre en Windows, y la capacidad de editar archivos a la hora de hacer el merge es limitada.  Pero aún así es una herramienta bastante competente.

Puedes ver algunos screenshots aquí, y descargalo desde acá.

DiffMerge

Vault viene con una herramienta llamada DiffMerge la cual solo la obtenías con el producto y no era muy robusta.  Sin embargo, la semana pasada Eric Sink anunció que DiffMerge 3.0 ahora está disponible de manera gratis y separada.  La nueva versión tiene varias bondades que la anterior carecía: comparación de 3 archivos a la vez, soporte para edición de archivos y oh sí, corre en Windows, en Mac OS X o en Linux (!)

De las cosas que no me gustaron está que no tiene integración con el shell de Windows, limitando un poco la capacidad de hacer comparaciones rápidas.  Además, cuando comparas fólderes enteros tarda un poco ya que lee todos los archivos en todos los subfólderes de un solo golpe.  Pero si no te importa esto, pues vale la pena que lo pruebes.

Puedes ver algunos screenshots aquí, y descargarlo desde acá.

BeyondCompare

BeyondCompare es una de las herramientas que cuesta dinero, pero no mucho ($30 dlls por una licencia individual).  De hecho, nosotros compramos 10 licencias a $13 dlls cada una, lo cual es una ganga si lo comparan con otras como Araxis Merge, donde UNA licencia cuesta $130 dlls.  He usado BC por años y cada versión solo se pone mejor.  Soy fan, y al parecer no soy el único.

Aparte de lo estándar, el feature que nos mantiene con este producto es la habilidad de exportar el reporte de diferencias a un archivo HTML (o XML si así lo deseas). Ninguna otra herramienta barata o gratis que yo haya visto trae esto.  Nosotros lo utilizamos para la documentación de los cambios al código, y como parte de nuestro proceso de revisión de código para que otros desarrolladores puedan darle el visto bueno antes de que se le haga check-in a los cambios. 

En la columna de "contras" está que carece de la capacidad de hacer un merge automático--lo cual podría ser irrelevante si eres igual de desconfiado que yo en esas operaciones.  Y su capacidad de edición de archivos es limitada.  Sin embargo, parece que van a agregarle todo eso a la versión 3.0 de BC que va a salir a finales de este año.  No estoy seguro si la integración al shell que trae funcione bajo 64 bits. 

Puedes descargar una versión shareware de 30 días desde aquí.

Integración de herramientas de diferencia a SourceGear Vault

En mi equipo usamos Vault de SourceGear como nuestro controlador de código.  No les voy a escribir una carta de amor sobre el producto, pero sí les diré que es lo que SourceSafe debió ser desde un principio (¿y les comenté que está hecho en .NET?)

El caso es que una de las razones por las que Vault me cae bien, es que te permite configurar la herramienta que desees utilizar para las comparaciones (diff) o para la reconciliación de cambios (merge). Para hacerlo solo tienes que ir a las opciones de Visual Studio y de ahí acceder a las de Vault. 

  • Desde Visual Studio, selecciona "Options..." del menú "Tools".
  • Selecciona "Plug-In Settings" que está debajo de "Source Control" al lado izquierdo.
  • Da clic en "Advanced…" (esto te llevará a las opciones de Vault)
  • Selecciona "Diff/Merge" del lado izquierdo.

Lo único que tienes que hacer despues de eso, es especificar el programa y los argumentos que le vas a pasar.

Si quieres usar WinMerge, tienes que especificar lo siguiente (tomados de esta página):

Diff Program: C:\Program Files\WinMerge\WinMerge.exe\
Diff Arguments: /dl "%LEFT_LABEL%" /dr "%RIGHT_LABEL%"  "%LEFT_PATH%" "%RIGHT_PATH%"
Merge Program: C:\Program Files\WinMerge\WinMerge.exe\
Mege Arguments: /dl "%WORKING_LABEL%" /dr "%OTHER_LABEL%" "%WORKING_PATH%" "%OTHER_PATH%" "%DEST_PATH%"

Si quieres utilizar DiffMerge 3.0, entonces solo tienes que modificar la ruta al ejecutable que viene con la configuración de Vault.  Quedaría entonces, así:

Diff Program:

C:\Program Files\SourceGear\DiffMerge\DiffMerge.exe

Diff Arguments:

/ro1 /ro2 /title1:"%LEFT_LABEL%" /title2:"%RIGHT_LABEL%" "%LEFT_PATH%" "%RIGHT_PATH%"

Merge Program:

C:\Program Files\SourceGear\DiffMerge\DiffMerge.exe

Mege Arguments:

/ro1 /ro3 /merge /title1:"%WORKING_LABEL%" /title2:"%DEST_LABEL%" /title3:"%OTHER_LABEL%" /result:"%DEST_PATH%" "%WORKING_PATH%" "%BASELINE_PATH%" "%OTHER_PATH%"

Y finalmente, si quieres utilizar BeyondCompare, entonces los argumentos serían:

Diff Program: C:\Program Files\Beyond Compare 2\BC2.exe
Diff Arguments: /title1="%LEFT_LABEL%" /title2="%RIGHT_LABEL%" "%LEFT_PATH%" "%RIGHT_PATH%"

O puedes mezclar un poco las cosas.  Por ejemplo yo uso BeyondCompare para la funcionalidad de comparación y DiffMerge 3.0 para la funcionalidad de reconciliación.

Conclusión

Una buena herramienta de diferencias es escencial para tu kit de desarrollador.  Hay varias en el mercado que son gratis o bastante baratas y que pueden integrarse con tus herramientas de desarrollo.  Tómate un tiempecito para echarles un ojo y escoger la que mejor se acomode a tus necesidades.

Que NO hacer al mostrar errores en un sitio de ASP.NET público

Ayer que me disponía a ir al cine a pesar de ser miércoles 2x1 (o "miércoles de pelusa" como dice un amigo), pues lancé mi navegador para intentar revisar la cartelera en el sitio de una de las cadenas de salas de cine nacionales (no les digo cual pa' no quemarlos).

Me recibió el siguiente mensaje. Como dicen los gringos: what's wrong with this picture?



Pues para comenzar se me ocurre:
  1. No están manejando las excepciones adecuadamente. Aunque un error levantado por el HttpRuntime es un poco más difícil de atrapar, hay maneras de regresar páginas de error personalizadas que estén más bonitas y no asusten a los usuarios con las letrotas grandes y rojas.
  2. Están mostrando la información de debug con todo y el stack trace (!). Esto podría darles las herramientas o al menos información a alguien que quisiera hackearlos. Por ejemplo, con ese mensaje ya sé al menos qué versión del .NET Framework están utilizando, lo cual podría servirme para ver qué vulnerabilidades específicas pudiera explotar. Pero algunos otros mensajes de error son mucho más chismosos.
  3. "Server Too Busy" en mi mente se traduce a "somos bien codos y no compramos un web farm" o "no le invertimos en planear la capacidad necesaria" o "nuestra aplicación no escala como debería"...
¿Se te ocurre alguna otra razón para no permitir este tipo de situaciones?
Posted from Diario de un Dotnetero | 0 Comments
Filed under: