martes, 5 de julio de 2011
Estos son los enlaces publicados en Variable not found en Facebook y Twitter desde el lunes, 27 de junio de 2011 hasta el lunes, 04 de julio de 2011. Espero que te resulten interesantes. :-)
Publicado en: Variable not found
- C#/.NET Little Wonders: The Nullable static class.
Fecha: 01/07/2011 - jQuery 1.6.2 Released (y ya en #nuget).
Fecha: 01/07/2011 - Swiffy, herramienta en Google Labs para convertir Flash a HTML5.
Fecha: 30/06/2011 - Elijah Manor: "Manual Validation with Data Annotations" by K. Scott Allen
Fecha: 30/06/2011 - Jorge Serrano (MVP): Declaración de los using ¿dentro o fuera del namespace?
Fecha: 30/06/2011 - Eduard Tomàs: Helper.LabelFor
parametrizable en ASP.NET MVC -
Fecha: 30/06/2011 - Phil Haack: What's the diff between a ValueProvider and ModelBinder and how do I send JSON to them?
Fecha: 30/06/2011 - Google Web Fonts. Cientos de fuentes optimizadas para la web.
Fecha: 29/06/2011 - Introducción a las pseudo clases de CSS3.
Fecha: 29/06/2011 - The history of ASP.NET MVC, so far, by Simone Chiaretta.
Fecha: 29/06/2011 - 30 (New) Google Ranking Factors You May Over- or Underestimate.
Fecha: 29/06/2011 - 5 Little-Known Web Files That Can Enhance Your Website
Fecha: 29/06/2011 - Tips to Design a Website for Mobile
Fecha: 29/06/2011 - 10 HTML Entity Crimes You Really Shouldn’t Commit
Fecha: 29/06/2011 - Webcast de Hadi Hariri sobre ASP.NET MVC y arquitecturas REST.
Fecha: 29/06/2011 - Ref returns and ref locals, by Eric Lippert
Fecha: 27/06/2011 - Phil Haack: ASP.NET MVC 3 Documentation now released in 9 languages other than English
Fecha: 27/06/2011 - José Manuel Alarcón: "Direcciones MAC y cómo obtener información detallada sobre tarjetas de red con .NET."
Fecha: 27/06/2011 - Guide to CSS support in email.
Fecha: 27/06/2011 - ASP.NET MVC Project Awesome, jQuery Ajax helpers (controls) .
Fecha: 27/06/2011 - EFMVC: Demo web app using ASP.NET MVC 3, Razor, EF Code First and Unity 2.0.
Fecha: 27/06/2011 - jQMvc project: jQuery Mobile Extensions for ASP.NET MVC.
Fecha: 27/06/2011
Publicado en: Variable not found
Publicado por José M. Aguilar a las 9:29 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
lunes, 4 de julio de 2011
Hace unos días recibí una alegría que necesito compartir con todos vosotros de forma urgente :-)
El escenario era el siguiente: toda la familia metida en el coche a las cinco de la tarde, rumbo a la costa para pasar el fin de semana, un calor de narices, una morriña siestera bastante importante y muchas ganas de llegar a la playa.
Decidimos parar en una estación de servicio para tomar un café que nos permitiera continuar la marcha en condiciones razonables. Como de costumbre, aprovecho para revisar el correo electrónico desde el móvil por si ha surgido alguna emergencia de última hora, y me encuentro con esto:
Para el despistadillo que aún no lo sepa, el MVP es un galardón que concede Microsoft a personas de la comunidad técnica que dedican parte de su tiempo a compartir con otros usuarios sus conocimientos y experiencias sobre productos y tecnologías de esta compañía. Si estás interesado en saber más sobre ello, aquí puedes leer sobre el programa MVP.
Es para mí un honor y un privilegio el poder entrar a formar parte de este grupo, y sólo espero estar a la altura de esta distinción. Intentarlo, lo intentaré, os lo aseguro ;-)
Gracias a todos los que lo habéis hecho posible.
¡Nos vemos!
El escenario era el siguiente: toda la familia metida en el coche a las cinco de la tarde, rumbo a la costa para pasar el fin de semana, un calor de narices, una morriña siestera bastante importante y muchas ganas de llegar a la playa.
Decidimos parar en una estación de servicio para tomar un café que nos permitiera continuar la marcha en condiciones razonables. Como de costumbre, aprovecho para revisar el correo electrónico desde el móvil por si ha surgido alguna emergencia de última hora, y me encuentro con esto:
Asunto: ¡Enhorabuena MVP de Microsoft 2011!De pronto se me quitaron el calor, el sueño, e incluso las ganas de playa. ¡Vaya sorpresa! :-)))
Estimado/a Jose Maria Aguilar,
Enhorabuena. Nos complace presentarle el programa de nombramiento MVP de Microsoft de 2011. Este nombramiento se concede a los líderes excepcionales de la comunidad técnica que comparten de forma activa su experiencia de alta calidad y de la vida real con otras personas. Le agradecemos especialmente la contribución que ha realizado en las comunidades técnicas en el área de ASP.NET/IIS a lo largo del pasado año.
[…]
Para el despistadillo que aún no lo sepa, el MVP es un galardón que concede Microsoft a personas de la comunidad técnica que dedican parte de su tiempo a compartir con otros usuarios sus conocimientos y experiencias sobre productos y tecnologías de esta compañía. Si estás interesado en saber más sobre ello, aquí puedes leer sobre el programa MVP.
Es para mí un honor y un privilegio el poder entrar a formar parte de este grupo, y sólo espero estar a la altura de esta distinción. Intentarlo, lo intentaré, os lo aseguro ;-)
Gracias a todos los que lo habéis hecho posible.
¡Nos vemos!
miércoles, 29 de junio de 2011
Hace unos días, el gran David Ebbo publicaba un proyecto experimental llamado “Razor Generator”, un conjunto de herramientas destinadas a precompilar las vistas Razor que he visto bastante interesante y que creo que vale la pena comentar.
Aunque ya aquí hemos hablado varias veces sobre la compilación de vistas, el enfoque de este nuevo proyecto es bastante diferente, pues permite generar clases en C# partiendo de las vistas, lo que permite, por ejemplo:
Una vez descargada esta extensión, si deseamos generar la clase asociada a una vista simplemente debemos acudir a las propiedades del archivo, y establecer a “RazorGenerator” su herramienta personalizada, como puede observarse en la captura de pantalla adjunta.
A partir de ese momento, cada vez que modifiquemos la vista (el archivo .cshtml), se generará de forma automática el fichero de código .cs con la clase correspondiente, de forma que al compilar el proyecto ya éstas se estarán incluyendo en el ensamblado resultante.
La siguiente parte del proyecto de David es un ViewEngine especialmente diseñado para la ocasión, que en lugar de utilizar las vistas disponibles en el sistema de archivos del servidor, intenta localizar las clases compiladas correspondientes.
Para facilitar la tarea e instalar de forma correcta este ViewEngine, simplemente hemos de utilizar Nuget para montar el paquete “PrecompiledMvcViewEngine”:
Bien, pues lo curioso del tema es que este paquete podemos instalarlo directamente sobre un proyecto de biblioteca de clases e introducir en él todas las vistas de nuestra aplicación. Estableciendo la herramienta personalizada de todas ellas a “RazorGenerator”, tendremos las vistas compiladas y para utilizarlas únicamente será necesario referenciar esta biblioteca desde el proyecto MVC principal. Y obviamente, ya no tendremos que distribuir las vistas de /Views, puesto que se estarán utilizando las versiones compiladas :-)
Puedes ver un completo paso a paso sobre cómo precompilar las vistas en el blog de David Ebbo.
Aunque todavía es pronto y quizás no sea buena idea utilizar estos componentes el producción, la precompilación de vistas con este enfoque aporta un gran número de ventajas directas ya comentadas, y lo que es mejor, deja entrever interesantes utilidades como la posibilidad de conseguir plugins o áreas fácilmente reutilizables de una aplicación a otra simplemente copiando los ensamblados al proyecto. A ver si un día de estos tengo un rato y hago alguna pruebilla al respecto y os comento mis conclusiones.
Publicado en: Variable not found.
Aunque ya aquí hemos hablado varias veces sobre la compilación de vistas, el enfoque de este nuevo proyecto es bastante diferente, pues permite generar clases en C# partiendo de las vistas, lo que permite, por ejemplo:
- distribuir vistas compiladas en una DLL, facilitando así el despliegue,
- evitar la distribución de los archivos .cshtml y, por tanto, la posibilidad de que sean modificados fácilmente,
- al disponer de una clase que genera la vista, podemos realizar pruebas unitarias que comprueben su contenido de forma muy sencilla (puedes ver un ejemplo aquí),
- reducir drásticamente el tiempo de arranque de la aplicación ASP.NET MVC en producción, dado que no es necesario compilar las vistas en ese momento,
- … y, por supuesto, comprobamos su corrección sintáctica en tiempo de compilación.
Una vez descargada esta extensión, si deseamos generar la clase asociada a una vista simplemente debemos acudir a las propiedades del archivo, y establecer a “RazorGenerator” su herramienta personalizada, como puede observarse en la captura de pantalla adjunta.
A partir de ese momento, cada vez que modifiquemos la vista (el archivo .cshtml), se generará de forma automática el fichero de código .cs con la clase correspondiente, de forma que al compilar el proyecto ya éstas se estarán incluyendo en el ensamblado resultante.
La siguiente parte del proyecto de David es un ViewEngine especialmente diseñado para la ocasión, que en lugar de utilizar las vistas disponibles en el sistema de archivos del servidor, intenta localizar las clases compiladas correspondientes.
Para facilitar la tarea e instalar de forma correcta este ViewEngine, simplemente hemos de utilizar Nuget para montar el paquete “PrecompiledMvcViewEngine”:
PM> Install-Package PrecompiledMvcViewEngine Attempting to resolve dependency 'WebActivator (≥ 1.4)'. Successfully installed 'WebActivator 1.4.1'. Successfully installed 'PrecompiledMvcViewEngine 1.0'. ...
Bien, pues lo curioso del tema es que este paquete podemos instalarlo directamente sobre un proyecto de biblioteca de clases e introducir en él todas las vistas de nuestra aplicación. Estableciendo la herramienta personalizada de todas ellas a “RazorGenerator”, tendremos las vistas compiladas y para utilizarlas únicamente será necesario referenciar esta biblioteca desde el proyecto MVC principal. Y obviamente, ya no tendremos que distribuir las vistas de /Views, puesto que se estarán utilizando las versiones compiladas :-)
Puedes ver un completo paso a paso sobre cómo precompilar las vistas en el blog de David Ebbo.
Aunque todavía es pronto y quizás no sea buena idea utilizar estos componentes el producción, la precompilación de vistas con este enfoque aporta un gran número de ventajas directas ya comentadas, y lo que es mejor, deja entrever interesantes utilidades como la posibilidad de conseguir plugins o áreas fácilmente reutilizables de una aplicación a otra simplemente copiando los ensamblados al proyecto. A ver si un día de estos tengo un rato y hago alguna pruebilla al respecto y os comento mis conclusiones.
Publicado en: Variable not found.
martes, 28 de junio de 2011
Estos son los enlaces publicados en Variable not found en Facebook y Twitter desde el lunes, 20 de junio de 2011 hasta el lunes, 27 de junio de 2011. Espero que te resulten interesantes. :-)
Publicado en: Variable not found
- Óscar Sotorrío: "Y tú ¿tienes en casa instalado Visual Studio ?"
Fecha: 25/06/2011 - Lluis Franco: [Blog post] LINQ to SQL: Mostrando el progreso de Context.SumbitChanges()
Fecha: 23/06/2011 - JavaScript Attack/Defend (XSS & CSRF).
Fecha: 23/06/2011 - Simple .NET MVC 3 web application with integrated Facebook OAuth API
Fecha: 23/06/2011 - Interesantísimo! David Ebbo: Precompile your MVC Razor views using RazorGenerator
Fecha: 23/06/2011 - AspNetMVCNinja: Installing NuGet packages from packages.config ASP.NET MVC
Fecha: 22/06/2011 - The 20 Essential Habits of Highly Passionate People
Fecha: 22/06/2011 - System.Web.Providers - ASP.NET Universal Providers for Session,Membership,Roles & User Profile on SQLCompact and Azure.
Fecha: 21/06/2011 - Using NuGet for Application Plug-Ins
Fecha: 21/06/2011 - Kinect – Getting Started – Become The Incredible Hulk.
Fecha: 21/06/2011 - Rachel Appel: HTML5ify your ASP.NET MVC 3 applications
Fecha: 21/06/2011 - Performance is a Feature, by Jeff Atwood.
Fecha: 21/06/2011 - Recomendación - Jo HTML5 Mobile App Framework, by Gonzalo Pérez
Fecha: 21/06/2011 - jQuery Mobile Beta 1 Released.
Fecha: 21/06/2011 - Genial artículo explicando la seguridad de contraseñas. ¿Mayúsculas, números, 8 caracteres? (vía José Manuel Alarcón)
Fecha: 20/06/2011 - Create Code 39 Bar Codes in ASP.NET.
Fecha: 20/06/2011
Publicado en: Variable not found
miércoles, 22 de junio de 2011
El próximo miércoles 29 de junio de 2011, a las 19:30 horas en el horario peninsular español, AUGES (ASP.NET User Group España) nos ofrece, para cerrar la temporada hasta después de verano, un eventazo online de los que no os podéis perder.
En primer lugar por el ponente, que no podía ser otro que el gran Hadi Hariri, evangelista técnico de JetBrains, Microsoft MVP, ponente internacional, y un auténtico fenómeno donde los haya.
En segundo lugar por el tema: arquitecturas REST. Ha llegado el momento de comprender, de la mano de un experto, en qué consiste y cómo implementar este tipo de sistemas utilizando ASP.NET MVC.
Publicado en: Variable not found.
En primer lugar por el ponente, que no podía ser otro que el gran Hadi Hariri, evangelista técnico de JetBrains, Microsoft MVP, ponente internacional, y un auténtico fenómeno donde los haya.
En segundo lugar por el tema: arquitecturas REST. Ha llegado el momento de comprender, de la mano de un experto, en qué consiste y cómo implementar este tipo de sistemas utilizando ASP.NET MVC.
Título: Arquitecturas REST con ASP.NET MVCInformación y registro gratuito: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032488451&EventCategory=4&culture=es-ES&CountryCode=ES
Descripción: Crear arquitecturas REST con ASP.NET MVC es más que decorar acciones con verbos. Se trata de aprovechar el protocolo HTTP en todo su potencial. Al hacerlo, podemos crear aplicaciones robustas y escalables, no solo desde el punto de vista de rendimiento sino también en términos de mantenibilidad. ASP.NET MVC nos ofrece un gran potencial para crear arquitecturas REST que pueden ser consumidas por otros sistemas así como personas, reduciendo la cantidad de esfuerzo. Te esperamos en este evento si quieres aprender de que trata REST realmente y cómo podemos crear un sencillo pero potente sistema con ASP.NETMVC.
Ponente: Hadi Hariri- Technical Evangelist en JetBrains.
Publicado en: Variable not found.
Publicado por José M. Aguilar a las 9:48 a. m.
Etiquetas: arquitectura, aspnetmvc, auges, eventos, rest
martes, 21 de junio de 2011
Hace poco he puesto en producción una aplicación ASP.NET MVC 3 que sustituía una web anterior basada en puro HTML. Dado que este sitio llevaba ya activo varios meses, los usuarios, buscadores, y links entrantes hacían referencia a páginas concretas con extensión .htm y .html.
El caso es que al no existir ya estos archivos, el acceso a través de las referencias externas acababa siempre enviando al usuario hacia una página de error… y me parece que la mejor bienvenida que se puede dar a un visitante no es una página de error, por muy amigable que ésta sea ;-)
En lugar de esto, al menos durante un tiempo, he optado por redirigir las peticiones a archivos .htm y .html hacia la página principal utilizando una redirección permanente (301); así, además de no sorprender a los usuarios con un mensaje de error, supongo que ayudo a los miles de bots que pululan por el ciberespacio a encontrar los nuevos contenidos.
Siendo prácticos, la forma más rápida y sencilla de conseguirlo es utilizando una solución a la vieja usanza, introduciendo el siguiente código en el global.asax.cs:
Como podéis ver, en el principio del proceso de la petición, comprobamos si en su path existe la subcadena “.htm” (será cierto para .htm y .html), redirigiendo al raíz en caso afirmativo.
Y es que una de las cosas buenas que tiene ASP.NET MVC es que está construido sobre ASP.NET y, por tanto, podemos seguir utilizando muchos conocimientos que ya traíamos del mundo Webforms.
Publicado en: Variable not found.
El caso es que al no existir ya estos archivos, el acceso a través de las referencias externas acababa siempre enviando al usuario hacia una página de error… y me parece que la mejor bienvenida que se puede dar a un visitante no es una página de error, por muy amigable que ésta sea ;-)
En lugar de esto, al menos durante un tiempo, he optado por redirigir las peticiones a archivos .htm y .html hacia la página principal utilizando una redirección permanente (301); así, además de no sorprender a los usuarios con un mensaje de error, supongo que ayudo a los miles de bots que pululan por el ciberespacio a encontrar los nuevos contenidos.
Siendo prácticos, la forma más rápida y sencilla de conseguirlo es utilizando una solución a la vieja usanza, introduciendo el siguiente código en el global.asax.cs:
protected void Application_BeginRequest(object sender, EventArgs e)
{
String originalPath = HttpContext.Current.Request.Url.AbsolutePath.ToLower();
if (originalPath.IndexOf(".htm") != -1)
{
HttpContext.Current.Response.RedirectPermanent("/", true);
}
}
Como podéis ver, en el principio del proceso de la petición, comprobamos si en su path existe la subcadena “.htm” (será cierto para .htm y .html), redirigiendo al raíz en caso afirmativo.
Y es que una de las cosas buenas que tiene ASP.NET MVC es que está construido sobre ASP.NET y, por tanto, podemos seguir utilizando muchos conocimientos que ya traíamos del mundo Webforms.
Publicado en: Variable not found.