Mise à jour virtual pc 2007 sp1

Une mise à jour interessante pour virtual pc 2007 est disponible sur le site de Microsoft à cette adresse :

http://support.microsoft.com/Default.aspx?id=958162

elle permet surtout d’obtenir des resolution d’ecran jusqu’a 2048 x 1920

Yahoo meme, un nouveau concurrent de twitter

Décidement twitter est attaqué de tous les cotés, après Facebook, c’est au tour de yahoo de sortir son réseau social avec le doux nom de “meme” qui ne signifie rien de social pour nous les Français, j’ai la chance de participer une alpha version, il me reste 6 invitations, avis aux amateurs.

image

Ce que l’on peut voir tout de suite est que l’on peut poster aussi bien du texte que de la musique , des photos ou des videos, seules les photos sont uploadables, pour la musique ou la video il faut obligatoirement un lien extene. Il n’y a visiblement pas de possibilité d’envoi de message par SMS.

La page de settings est rudimentaire (comparée à twitter).

Comme pour twitter, on peut citer un utilisateur via son pseudo @utilisateur, il est plus facile de “reposter” car ceci est inclu dans l’interface (pas besoin de prefixer par RT). Il y a un compteur indiquant le nombre de “repost”. Il est possible de repondre à un post, et toute la discussion tourne autour du premier post sans s’eparpiller comme dans twitter mais n’ayant que peu de followers je n’ai pas pu tester.

C’est un compromis entre Twitter et Facebook assez interessant, ça se rapproche plus de FriendFeed, les places vont etre de plus en plus difficile a gagner, meme quand on s’appelle Yahoo, je souhaite bonne chance à ce nouveau reseau, que le meilleur l’emporte.

Lancer IE6, IE7 et IE8 sur la meme machine (mise a jour)

J’avais ecrit il y a quelque temps un article avec une solution un peu contraignante pour faire tourner  differentes versions d’internet explorer sur la meme machine, indispensable pour les web designers.

http://marc-chouteau.blogspot.com/2007/02/comment-executer-differentes-version-d.html

Microsoft a depuis,  mis en ligne gratuitement Expression Web SuperPreview for Windows Internet Explorer

http://www.microsoft.com/downloads/details.aspx?FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&displaylang=en

image

On voit bien sur le site yahoo.fr, 2 pages differentes en haut IE6 et en bas IE7/IE8, vraiment génial cet outil.

Methode d’extension pour reperer les sequences dans une liste

J’utilise cette methode d’extension pour reperer les lignes dans une liste et alterner une couleur de fond via une feuille de style.

public static string ColumnIndexName<T>(this IList<T> source, T item, int columnCount, string prefix)
{
var index = source.IndexOf(item);
return string.Format("{0}{1}", prefix, (index % columnCount) + 1);
}





Exemple d’utilisation avec asp.net mvc si Model implémente IList :




<div class="<%=Model.ColumnIndexName(item, 3, "prefix") %>">...</div>



ce qui donnera :



<div class=”prefix1”>…</div>



<div class=”prefix2”>…</div>



<div class=”prefix3”>…</div>



<div class=”prefix1”>…</div>



<div class=”prefix2”>…</div>



<div class=”prefix3”>…</div>



ect…

Récupération de la sortie html d’une vue asp.net mvc

Pour pouvoir templater des emails pour un site web en utilisant asp.net mvc, j’avais besoin de pouvoir recuperer la sortie html d’une vue sans avoir à recrawler une page (ce qui provoque des problèmes de statistiques et autres), en cherchant je suis tombé sur cet article très interessant :

http://jwbs-blog.blogspot.com/2009/08/chaining-aspnet-mvc-actions.html

Je l’ai un peu modifié pour en faire une methode d’extension :

public static string GetActionOutput<T>(this System.Web.Mvc.Controller ctrl, Expression<Action<T>> action)
{
var body = action.Body as MethodCallExpression;

var responseFilter = ctrl.HttpContext.Response.Filter;
var memoryStreamFilter = new MemoryStreamFilter(ctrl.HttpContext.Response.Filter);
ctrl.HttpContext.Response.Filter = memoryStreamFilter;

var routeData = ctrl.ControllerContext.RequestContext.RouteData;
string controllerName = body.Object.Type.Name.Replace("Controller", "");
string actionName = body.Method.Name;
var orgAction = routeData.Values["action"];
var orgController = routeData.Values["controller"];
routeData.Values["action"] = actionName;
routeData.Values["controller"] = controllerName;

var parameters = body.Method.GetParameters();
if (parameters.Length > 0)
{
for (int i = 0; i < parameters.Length; i++)
{
var expression = body.Arguments[i];
object value = null;
var constantExpression = expression as ConstantExpression;
if (constantExpression != null)
{
value = constantExpression.Value;
}
else
{
var lambda = Expression.Lambda<Func<object>>(Expression.Convert(expression, typeof(object)), new ParameterExpression[0]);
value = lambda.Compile()();
}

routeData.Values.Add(parameters[i].Name, value);
}
}

var controllerFactory = ControllerBuilder.Current.GetControllerFactory();
var c = controllerFactory.CreateController(ctrl.ControllerContext.RequestContext, controllerName);
c.Execute(ctrl.ControllerContext.RequestContext);

ctrl.HttpContext.Response.Flush();
memoryStreamFilter.Position = 0;
string result = null;
using (var r = new StreamReader(memoryStreamFilter))
{
result = r.ReadToEnd();
r.Close();
}

memoryStreamFilter.Close();
memoryStreamFilter.Dispose();

ctrl.HttpContext.Response.Filter = responseFilter;
routeData.Values["action"] = orgAction;
routeData.Values["controller"] = orgController;

return result;
}





voici la classe de wrapping pour recuperer la sortie en mémoire :




public class MemoryStreamFilter : MemoryStream
{
public MemoryStreamFilter(Stream stream)
{

}
}





pour utiliser cette methode d’extension, il suffit de faire un appel comme ceci :




public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";

var content = this.GetActionOutput<HomeController>(i => i.About());

return View();
}





il est possible de passer des paramètres, la methode est prevue pour ça.