Fases del desarrollo de software
Parallelize development. The short 6 month development time was partly a product of the quality infrastructure, but of also running significant development activities in parallel. The development team was split into design, front-end engineering, infrastructure engineering, and data migrations. In parallel they built: UI prototypes on a test backend, production UI on a simulated backend, the scalable backend, the denormalization framework, the data warehouse, and simulated load testing.
via.
Descripción de Bango Analytics
Interesante documento en el que se describe Bango Analytics. En el se explica la información almacenada en su EventLog
- Owner
- Time
- Type: Page tracking events, Link tracking events, Payment events, Identification events.
- UserId: MSISDN, Bango user ID, MNO network identify, email <= headers, IP, cookies, etc
- Route: Device capabilities, Connection to internet: Country and Mobile operator
- Location
- Web specific: Referrer, Querystring
Y las distintas medidas que realizan sobre esta información.
Como consumo información
Aquí voy a incluir un pequeño listado de las herramientas que uso para poder manejar la cantidad de información disponible.
- GoogleReader, en versión compacta mediante un script de greasemonkey modificado. Para iphone, tras mucho tiempo usando MobileRSS, he tenido que cambiar a Reeder debido a problemas de sincronización y/o conexión.
- Delicious, incluso desde iphone.
- Readability, a veces es imposible leer algo.
- Readitlater.
- Evernote, sobre todo para ir recopilando información sobre un tema que este estudiando o trabajando. Si la información es importante entonces después al blog.
Borrar ficheros más antiguos en Windows
Para borrar ficheros que se crearon hace 7 días.
forfiles -p “C:\path\elmah” -s -m *.* -d -7 -c “cmd /c del @path” via.
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);
};
}
}



