Tiene sentido usar una DAL con un ORM?
Interesantes comentarios de de la lista altnet-hispano. Mi respuesta corta es que NO, que normalmente abstraer el ORM traería casi tanto trabajo como reemplazarlo cuando hiciera falta, y si además por algún nuevo requisito hubiera que cambiar el ORM, seguramente esto sería lo que menos trabajo nos causara.
Incluyo la opinión del superhéroe Ayende: In short, I am completely opposed for even trying doing something like that.
Google Reader compact
Si tienes una pantalla con no mucha resolución como yo y usas Google Reader, te puede interesar este script de Greasemonkey, para poseer la versión compact.
Yo personalmente comento las siguientes dos líneas, porque me gusta ver la barra de google, su logo y la búsqueda.
//GM_addStyle("#top-bar {display: none;}");
//GM_addStyle("#gb {display: none;}");
//GM_addStyle("#title-and-status-holder {display: none;}");
Y además cambio el color del enlace (elemento a) por: #D14836
Generar SQL a partir de SQL
Algo que que no se me había ocurrido antes, pero que me ayudó a resolver un problema de una manera muy sencilla. La idea es usar SQL para generar sentencias SQL que realizarán actualizaciones de muchas filas.
Por ejemplo, imaginemos que tenemos una tabla (Log) que posee una columna Url. El problema es que queremos actualizar el dominio de todas estas Urls.
select 'update Log set url='''+url+''' from Log
Con un pequeño reemplazar tendremos una serie de consultas SQL que nos permitirán actualizar los dominios.
Modificar el valor de Request.Param o QueryString
Hace unos días necesité modificar el valor de Request.Param y de la QueryString en una página ASP.NET. Parece que no es algo común pero sin embargo, había gente que también había necesitado hacerlo.
La manera de hacerlo fue usando un HttpModule y usando un poco de Reflection. La verdad algo bastante sencillo de hacer y con un buen resultado.
public class ChangeParamsModule : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
context.BeginRequest += (sender, e) =>
{
HttpApplication httpContext = (HttpApplication)sender;
// reflect to getting readonly property
PropertyInfo isReadOnly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// make collection editable
isReadOnly.SetValue(httpContext.Request.QueryString, false, null);
isReadOnly.SetValue(httpContext.Request.Params, false, null);
httpContext.Request.QueryString.Set("nuevoParam", "nuevoValor");
httpContext.Request.Params.Set("nuevoParm", "nuevoValor");
// make collection readonly again
isReadOnly.SetValue(httpContext.Request.QueryString, true, null);
isReadOnly.SetValue(httpContext.Request.Params, true, null);
};
}
}
Problema en ASP.NET visitando la página desde móvil
Este error, a parte de sufrirlo, es una pregunta bastante común, aún hoy. Normalmente, ocurre al visitar una página ASP.NET con webforms. Se debe básicamente al Content-Type que ASP.NET rellena en las cabeceras HTTP.
Por ejemplo, si visitamos esta página, y usamos la herramienta Fiddler desde un navegador tradicional podemos ver lo siguiente:
Sin embargo, si navegamos desde un terminal móvil, como por ejemplo, un SonyEricsson C903 [1]:
Bueno ahora tenemos el problema, una solución podría ser sobre-escribir las “capabilities” para que el Content-Type sea el adecuado. En mi caso suelo tener las capabilities construidas a partir de WURFL.
[1] User-Agent: SonyEricssonC903a/R1FA Browser/NetFront/3.4 Profile/MIDP-2.1 Configuration/CLDC-1.1 JavaPlatform/JP-8.4.3
Helper para ConfigurationElementCollection
Interesante utilidad que ayuda muchísimo para trabajar con colecciones en archivos de configuración.
[ConfigurationCollection(typeof(ConfigurationElement))]
public class ConfigurationElementCollection<T> :
ConfigurationElementCollection, IEnumerable<T> where T : ConfigurationElement, new()
{
protected override ConfigurationElement CreateNewElement()
{
return new T();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((T)(element)).ToString();
}
public T this[int idx]
{
get { return (T)BaseGet(idx); }
}
public new IEnumerator<T> GetEnumerator()
{
int count = base.Count;
for (int i = 0; i < count; i++)
yield return base.BaseGet(i) as T;
}
Linq y su futuro
Interesante publicación de E.Meijer, sobre Linq y uso uso para el acceso a datos de diversas y heterogéneas fuentes, como podrían ser los diferentes repositorios NoSQL.
Sería estupendo que Microsoft dedicara recursos para este tipo de desarrollos, por según Ayende no es nada sencillo realizar un proveedor para Linq.


