Un programador más
Experiencias de un programador curioso del SEO
Experiencias de un programador curioso del SEO
23 ene
En este articulo os hablare de como calcular el famoso tiempo transcurrido o time ago en c# , el time ago suele usarse en aplicaciónes sociales como twitter o facebook para indicarnos hace cuanto tiempo sucedio una publicación en nuestro timeline.
/// <summary>
/// Función que devuelve un string con el formato "time ago" usado en aplicaciones como twitter
/// </summary>
/// <param name="fechadesde">Fecha anterior</param>
/// <param name="fechahasta">Normalmente la fecha actual</param>
/// <returns></returns>
public static string GetTimeAgo(DateTime fechadesde, DateTime fechahasta)
{
//Comprobamos si la fechahasta es mayor que la fechadesde
if (DateTime.Compare(fechahasta, fechadesde) >= 0)
{
TimeSpan ts = fechahasta.Subtract(fechadesde);
if (ts.Days >0)
{
if (ts.Days > 1)
{
return (ts.Days + " días antes");
}
else
{
return (ts.Days + " día antes");
}
}
else
{
if (ts.Hours > 0)
{
if (ts.Hours > 1)
{
return (ts.Hours + " horas antes");
}
else
{
return (ts.Hours + " hora antes");
}
}
else
{
if (ts.Minutes > 0)
{
if (ts.Minutes > 1)
{
return (ts.Minutes + " minutos antes");
}
else
{
return (ts.Minutes + " minuto antes");
}
}
else
{
if (ts.Seconds > 0)
{
if (ts.Seconds > 1)
{
return (ts.Seconds + " segundos antes");
}
else
{
return (ts.Seconds + " segundo antes");
}
}
}
}
}
return "Compruebe las fechas";
}
else
{
return "Compruebe las fechas";
}
}
Como siempre para vuestra comodidad tambien os la dejo disponible en pastebin.
La inspiración de este articulo me vino del el excelente artículo de Alfredo Artiles sobre Fechas en formato tiempo transcurrido(time ago) con PHP
14 ene
En ocasiones queremos lanzar custom exceptions que nos permitan lanzar errores personalizados cuando por ejemplo se ha hecho una llamada al servidor con un parametro incorrecto pero no queremos utilizar una de las excepciones predefinidas ya que queremos guardar y generar más información sobre la excepción. En este articulo os dejo un ejemplo de como crear nuestro propio custom exception en c#.
public class MyCustomException : ApplicationException
{
public MyCustomExceptionException(string message)
: base(message)
{
}
}
Cuando queremos usar nuestro custom exception en la creación de un error controlado lo hariamos de la siguiente forma:
throw new MyCustomException("Mensaje de error customizado");
Podriamos usarlo en el control de errores mediante la captura de errores en global.asax redirigiendolos a una página creada para gestionar los mensajes de error a nuestros usuarios:
protected void Application_Error(Object sender, EventArgs e)
{
if (Context != null && Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx", false);
}
}
Una vez redirigo el error podriamos usarlo de la siguiente forma:
Exception ex = Server.GetLastError();
if (ex != null)
{
Exception innerException = ex.InnerException;
if (innerException != null)
{
if (innerException is MyCustomException)
{
HttpContext.Current.Response.StatusCode = 401;
this.lblError.Text = ex.Message;
}
}
Espero que os sea útil y como siempre para vuestra comodida tambien en pastebin.
6 ene
Hara unos días creando un módulo de twitter para el CMS Cuyahoga tuve que desarrollar una función de c# para dar formato a un tweet.
Revisando el twitter he visto el excelente artículo de Alfredo Artiles sobre Expresiones regulares para dar formato a un Tweet , este excelente profesional ha desarrollado funciones para php y javascript y despues de leer su articulo se me ha ocurrido que podria compartir con vosotros la que realice para c#.
const string ScreenNamePattern = @"@([A-Za-z0-9\-_&;]+)";
const string HashTagPattern = @"#([A-Za-z0-9\-_&;]+)";
const string HyperLinkPattern = @"(http://\S+)\s?";
public static string FormatTweetText(string text)
{
string result = text;
if (result.Contains("http://"))
{
var links = new List<string>();
foreach (Match match in Regex.Matches(result, HyperLinkPattern))
{
var url = match.Groups[1].Value;
if (!links.Contains(url))
{
links.Add(url);
result = result.Replace(url, String.Format("<a href=\"{0}\">{0}</a>", url));
}
}
}
if (result.Contains("@"))
{
var names = new List<string>();
foreach (Match match in Regex.Matches(result, ScreenNamePattern))
{
var screenName = match.Groups[1].Value;
if (!names.Contains(screenName))
{
names.Add(screenName);
result = result.Replace("@" + screenName,
String.Format("<a href=\"http://twitter.com/{0}\">@{0}</a>", screenName));
}
}
}
if (result.Contains("#"))
{
var names = new List<string>();
foreach (Match match in Regex.Matches(result, HashTagPattern))
{
var hashTag = match.Groups[1].Value;
if (!names.Contains(hashTag))
{
names.Add(hashTag);
result = result.Replace("#" + hashTag,
String.Format("<a href=\"http://twitter.com/search?q={0}\">#{1}</a>",
HttpUtility.UrlEncode("#" + hashTag), hashTag));
}
}
}
return result;
}
Como siempre para vuestra comodidad tambien os la dejo disponible en pastebin.
31 dic
Voy a intentar sintetizar aquellas técnicas o ideas a seguir para conseguir una estructura interna de enlaces para una rápida indexación y una correcta distribución del pagerank.
Por último os dejo una serie de enlaces via un tag en Delicious creado para la ocasión que os pueden ser útiles para entender esta serie de recomendaciones que he tratado de sintetizar.
26 dic
Prevención y recuperación de errores , un tema extenso que intentare sintetizar de forma amena y como siempre en formato “resumen”.
Los errores ocurren por muy bien que este diseñado un sitio web, debemos tener claro que además los usuarios siempre cometerán errores , ya sea por lapsus accidentales o por no comprender la funcionalidad de la aplicación. Debemos pues seguir dos estrategias claras :
A nivel general podemos seguir estos consejos para preveenir y minificar los errores:
Los formularios suelen ser el mayor input de errores , es por ello que debemos tratarlos de forma especial. A continuación os enumero unas cuantas tácticas a seguir:
.
Hemos intentando preveenir los errores , pero como ya he comentado esta tarea utopica , nos encontramos con que se ha producido un error. ¿Como debemos afrontarlo? En primer lugar nos vamos a centrar en como comunicamos al usuario que se ha producido un error.
Un mensaje de error debe:
No hemos de olvidar que una página web no deja de ser una aplicación y esta puede devolver errores del lado del servidor. Debemos tratar estos errores y no dejar que el control de errores de la aplicación o servidor de páginas web se encarge de ellos , devolviendo mensajes de error incomprensibles para el usuario. Al igual que con los errores de usuario debemos seguir unas “buenas prácticas”: