antes de perder la esperanza, usar Process Monitor :D

Y es que a veces hay momentos, que ni el chapulín colorado te salva la razón de algunos problemas es muy difícil detectar. Lo primero es revisar el Event Viewer (visor de eventos), pero si no hay nada ahí, que hacemos?, como detectar el origen del problema?

Por ejemplo hago "View in Browser", en VS2005 o VS2008, y obtengo el siguiente mensaje:

Internet Explorer cannot display the webpage
   Most likely causes:
You are not connected to the Internet.
The website is encountering problems.
There might be a typing error in the address. 

Y hace unos días estaba trabajando sin ningún problema, y de pronto dejo de funcionar sin razón aparente. Y ni el Event Viewer te puede decir que esta pasando.

Felizmente me sugirieron (no solucionaron mi problema) usar Filemon para rastrear que estaba pasando. Ahora existe una herramienta llamada Process Monitor, que combina las features de FileMon y RegMon.

Process Monitor: es una herramienta avanzada de monitoreo para Windows, que muestra en tiempo real la actividad del sistema de archivos, el registro, y los procesos.

Es decir, para ese tipo de marcianadas que no sabes porque ocurren, y no tienes ninguna pista de la causa del problema. A través de esta herramienta podemos monitorear nuestro sistema, y tener una idea de lo que esta pasando.

Y el problema por el cual no funciona el servidor virtual, al hacer "View in Browser" desde Visual Studio, era debido a la reciente instalación que hice de una nueva versión de NOD32: NOD32 3.0.612.0. Por lo menos ahora ya se la causa de mi problema, sólo queda solucionarlo :D.

P.D.: Hay excelentes herramientas en Windows Sysinternals, y vale la pena hacer un overview de ellas, por que ya tendrás tiempo de conocerlas a detalles cuando las necesites xD!

Saludos,

problemas caseritos en Web Application Projects… hoy Profiles

Cuando se liberaron los Web Application Projects (para saber más de WSP y WAP, revise esta entrada) para Visual Studio 2005, salieron a la luz algunos muertitos algunos bugs, los que fueron reportados, y que han sido listados y catalogados como: problemas caseritos conocidos con:

  1. Report Designer
  2. Profiles
  3. Declarative Typed DataSets (.xsd files)
  4. Conversion and Source Control
  5. Mobile Web Forms
  6. Using TFS Team Build
  7. Using TFS Source Control
  8. Starting a Web Service and another Project which uses the Web Service
  9. Installing on non-English Locales
  10. Refactoring will not work for Inline code

Para mayores detalles de los mismos, pueden revisar esta entrada: FAQ and Known Issues (Web Application Projects).

No se, si todos fueron corregidos con el VS2005 SP1, o ahora con la liberación VS2008. No voy hablar de todos, por que aún no se cruzan conmigo :@.

Hoy voy hablar acerca del soporte de Profiles. Y como pueden ver en el link anterior, hay 1,140,000 páginas aproximadamente como resultado que hablan de Profiles, así que no voy hablar mucho de ellos. Esta demás decir que cuando necesitas guardar ciertas preferencias del usuario con respecto a su perfil en la web, que si quiere la web en rosa o en amarillo patito, o quiere guardar la cantidad de resultados a mostrar cuando hace una búsqueda, Profiles se convierte en el mejor aliado, ya que te ahorra una pasta de tiempo en la implementación, sobre todo si te dan sólo unos meses para hacer una web, y con la ventaja que si más adelante te das cuenta que quieres personalizar profiles, cambiar el modelo de acceso a datos, cambiar el modelo a datos, pues lo haces y punto, para eso hay Custom Profiles. Pero hombre, que tampoco todo lo vas a meter a Profiles, que si cuál es el estado civil: casado, soltero, viudo,  bigamio, el número de hijos reconocidos, los hijos por reconocer, el teléfono, mobile, mail, … y todos los datos que puede tener un contacto, estos son datos del contacto y deben estar en tu modelo de datos, y no hay mucha justificación para tenerlos en Profiles. Recuerden que cuando usamos Membership, Roles, Profiles, o WebParts, lo que hace aspnet_regsql.exe, es crear su propio modelo de datos, con sus propios stores procedures, y ahí esta la magia de arrastrar el control Login, y que ya funcione, aspnet_regsql.exe, ya hizo el trabajo macho :D.

No quise hablar de Profiles, pero era inevitable… ahora ya sabemos que son los profiles, y para que sirve. Recuerden que profiles, es como usar una variable de sesión, pero almacenado de manera persistente (en una base de datos), y que además lo tenemos strongly typed tipado, eso que pones un punto y te sale el nombre, el famoso intellisense. Por ejemplo si quiero guardar que pepito le gusta ver en la portada solo las noticias de la categoría rosa policial:

   1: Profile.CatPortada = "Policial";

Eso es para guardar el perfil de pepito, ahora en la portada sólo tengo que leer el valor de su Profile.

Esto va de las mil maravillas en un Web Site Projects. Y como dicen por acá, Profile (de la forma como lo conocemos en Web Site Projects), no existe en Web Application Projects. Ni con el VS2005 SP1, ni tampoco esta presente en VS2008.

Pero no es que, no sea un problema detectado. Dentro de las guías de migración de Web Site Projects a Web Application Projects, que fueron publicadas cuando se liberaron estas últimas para VS2005. Se recomienda el uso de un add-in llamado: ASP.NET WebProfile Generator, que habilita el acceso a los Profiles de ASP.NET (como lo conocemos en Web Site Projects), en los Web Application Projects. Como dice en la página esto es un add-in para VS2005, no lo he probado en VS2008, pero vi que daban el código fuente, así que imagino que no debe ser difícil adaptarlo.

Pero me gusto, y me quedo con esta solución, la propuesta planteada por Jon Galloway: Writing a custom ASP.NET Profile class. Y es crear una clase que herede de ProfileBase, agregar las propiedades que deseamos habilitar (lo que harías con el web.config), y en el web.config, sólo indicarle que el elemento Profiles herede de esta clase.

Es una manera simple, legible, y portable de habilitar Profiles (como lo conocemos en un Web Site Project) en un Web Application Project.

El código ejemplo esta en esta entrada: Writing a custom ASP.NET Profile class.

Saludos,

[PLEFDS] Inline, beside, behind, Web Site Project, Web Application Project, y bla bla bla…

De ahora en adelante [PLEFDS = para leer el fin de semana]. Digamos que hay dos maneras de tener el código de página: código "Inline", ósea dentro del mismo archivo aspx, y el modelo separado del código de la aspx, ósea hablamos de Behind y de Beside. La primera pregunta es ¿Inline o código de separado?.

Ahora si escogo código separado, Behind o Beside?. En VS 2003 sólo teníamos Behind (Web Application Project). En VS2005 sólo teníamos Beside (Web Site Project), pero si a VS2005 le poníamos SP1, tenemos disponible los tipos de proyectos, en VS2008 tenemos los dos también, y ahora la segunda pregunta es: ¿Web Site Project o Web Application Project?.

Por cierto, y antes de que salte alguien, estos temas no son nuevos y no es mi intención presentarlos como una novedad, la idea es presentar un resumen de estos, y como va esto ahora con VS2008.

Leyendo todos los artículos de abajo, tengan por seguro que no les quedará ninguna duda. Si estamos nuevos en esto, y vamos a iniciar un nuevo tipo de proyecto este tipo de decisiones puede darte satisfacciones o dolores de cabeza si no tomas una decisión correcta respecto a tu escenario.

Voy a dar una aproximación rápida, aunque primero quería leer los principales artículos de abajo cuando hubiera un tiempito libre, pero si ese tiempito no llega (cosa muy común), quería dejar la lista para los interesados, y dejar una rápida opinión de acuerdo a la pequeña experiencia que llevo :D.

Inline o código separado?, pues, puedes tener los dos en un mismo sitio web, ya que esto es por página, y puedes usarlo en un Web Site Project, como en un Web Application Project. Ahora Inline puede recargar mucho el código de página, convirtiendo el mantenimiento de la misma en una tarea compleja. Yo recomendaría Inline, para cosas simples como una página que haga un redirect, y cosas así, cosas que no comprometan la seguridad, porque es más fácil que vean el aspx (sólo con notepad), que una dll (necesitan Reflector).

Ahora la pregunta Web Site o Web Application?, a ver decir que en VS2005 eliminaron Web Application, pero después con el SP1 agregaron nuevamente Web Application. Y en VS2008 tenemos disponibles los dos: Web Site Project o Web Application Project. Me quedo con esta frase del primer artículo de Patrick MacKay:

"Como ya había mencionado, en Visual Studio 2005, la forma de compilación y entrega para proyectos web cambió considerablemente. Sin entrar en justificaciones como tampoco en detalles, sólo agregaré que Microsoft enmendó el rumbo proveyendo algo similar a como funcionaba en Visual Studio 2003. Éste se llama Visual Studio 2005 Web Application Projects"

No voy a comentar cual es mejor entre Web Site o Web Application, con respecto si uno es más fácil de abrir, o si con el otro es más fácil migrar aplicaciones desde VS2003, si no con respecto al modo de compilación, por lo que pude ver el modo de compilación de Web Application Project es mas ordenado que Web Site Project… pero esto hay que sustentarlo como lo hace Patrick en la serie de artículos que tiene, y también hay que leer un poco de como funciona todo esto de la compilación… cuando llegue ese tiempo libre espero poner screenshoots de las pantallas con los diversos modos, pero si quieren ir adelantándose pueden probar esto: Creen dos Webs: Web Site Project y Web Application Project, dentro de cada uno agreguen una página Inline a la ya existente (en Web Site habrá una página Code-Beside, y en Web Application una página Code-Behind), agreguen código simple, botones, cajas de texto, y labels. Publiquen las dos web, y revisen esta carpeta: C:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files. Después de navegar en la web, verán como se construyen las carpetas de compilación, las pruebas que pueden hacer en los web Site es: Cambiar el código de la página Inline (C# o VB), y vean como afecta en cada Web, y después de esto cambien el código en una página con el archivo de código separado, y también como afecta… esta son las primeras cosas que se me ocurren probar…

P.D.: Y yo que quería dejar un comentario de unas pocas líneas :S.

Espero que llegue ese tiempito, pero por mientras la pequeña lista de artículos:

Introducción:

 

Web Site vs Web Projects:

 

Code-Behind vs Code-Inline vs Code-Beside:

Model Compilation ASP.NET 2.0:

MSBuild:

Saludos,

nueva version de MS Forums… que os parece?

ha sido liberado una nueva versión de los MS Forums… pueden leer la nota (obvio, que en inglés) en la siguiente entrada del Dev Lead responsable de los nuevos foros: Today my team today has released Community Platform 1.0 with our all new Microsoft Forums 3.0 Web Application.

Por el momento están abiertos los foros generales:

Los otros foros como todos los de MSDN, y seguro que también los de MSDN en espaniol, dicen que serán migrados en los siguientes meses.

Si quieren conocer los detalles de las features revisen los detalles de la entrada de Sam, como resumen que se va poniendo más Web 2.0. También dejo un video con las nuevas features: http://xpstream.winisp.net/samjarawan/msdn%20forums%20overview.wmv.

¿Qué os parece?, obvio que los comentarios críticas, y todo lo que se les ocurra no lo dejen aquí, rajen en el foro de Bugs: http://forums.msdn.microsoft.com/en-US/reportabug/threads/.

El editor de thread, aún no me convence. Prefería cuando esta en el TOP (y no al frente), es mas rápido así poder revisar los anteriores threads… esperemos que tengan en cuenta nuestras sugerencias :@… y ya saben lo que opino de los foros y que tan importantes pueden llegar a ser…

Saludos,

Post cruzado

basico, Remove y Sort using en (VS2008)

Hace tiempo que vi esta feature en un RSS, pero daba lata abrir VS2008 no probé en ese momento esta feature.

Hoy estaba dando lata unos conflictos de nombres:

Además que el intellsense contiene demasiadas clases como ayuda. Un tip rápido, es usar una nueva feature para remover y ordenar las directivas using (editor de C# – VS2008):

Si aún haciendo esto tienes problemas con los nombres, puede usar sobrenombres para la directiva using. No es el gran tip, pero si eres de los que les gusta tener ordenado su código, no ver clases innecesarias en el intellsense, esta feature te va a molar.

Puede revisar mas mejoras en el IDE, en este post de ScottGu’s: Nice VS 2008 Code Editing Improvements.

P.D.: Disculpen mi anglicismo.
P.D.2: Use bien “molar”?, se puede usar como verbo?, se acostumbra a usar así? :D.

Saludos,

Post cruzado

Fiddler herramienta de bolsillo para depurar trafico HTTP y mas…

¿De que me puede servir depurar tráfico http?. Veamos:

Podemos ver que llamadas a recursos no tienen respuesta, (pusiste elementos img, pero te olvidaste de subir las imágenes al server :S). Pero quizás la principal feature es ver a detalle el request y response. En la imagen para el request seleccionado, vemos cuantos bytes son enviados al servidor, y cuantos bytes recibimos del servidor. Esto nos puede ayudar sobretodo, cuando estamos buscando opciones de performance, con esto podemos ver a detalle, que esta generando que nuestra web tengo un tráfico de bytes demasiado alto. Otro cosa rápida y útil que podemos hacer es ver la ventajas de usar AJAX, por ejemplo este es el request/responde, cuando cambio de página en un gridView:

Como pueden ver en el response se vuelve a enviar todo el contenido de la página al cliente. Pero si por ejemplo ponemos nuestro GridView en un UpdatePanel, el responde sólo será del html que engloba al GridView, más no toda la página. Esta es una de las ventajas de usar AJAX, reduce el tráfico de nuestra web.

Y si queremos ser un poco mas extremos, podemos hacer llamadas desde JavaScript a Servicios Web. Como lo hace el control AutoComplete, del ASP.NET AJAX Toolkit:

Como pueden ver, lo que viaja es sólo información, ya en JavaScript se hace el trabajo de maquillaje de la información. Usar JavaScript con WebServices, es más limpio en cuanto al envió (modelo centrado en el cliente: data), pero también mas complejo ya que nosotros a través de javascript debemos dar la presentación a esa información. Con el UpdatePanel viaja información, pero también viaja la presentación (modelo centrado en el servidor: data+html).

Para leer un poco más sobre los modelos de programación de AJAX revisar: Atlas Programming Model. Pero resumiendo JavaScript+WS modelo centrado en el cliente, solo viaja información y a través de JavaScript recibimos la información y tenemos que darle presentación antes de mostrarlo al usuario a través de JavaScript; usando UpdatePanel modelo centrado en el servidor, viaja información más presentación, el servidor además de enviar la información también envía la presentación (elementos html). Para tomar la decisión de que modelo usar tenemos que examinar tiempo/tráfico, ¿Cuál es la prioridad: desarrollo para ayer o reducir a lo máximo el tráfico de la web?

Ya hable de AJAX sin querer :$, y la otra feature importante de Fiddler es poder grabar pruebas Web para Visual Team System for Tester:

Esto es importante sobre todo cuando tenemos que hacer pruebas web a aplicaciones que hacen uso de AJAX.

Web Site: http://www.fiddlertool.com
Title: Fiddler: Web Debugging Proxy
Description: Fiddler is a HTTP Debugging Proxy which logs all HTTP traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP Traffic, set breakpoints, and “fiddle” with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.
Download: Fiddler2 (536KB)

sergiot @ trujillo

Saludos,

Post cruzado