S'abonner au Flux RSS

samedi 12 juin 2010

Deletion confirmation with ASP.NET MVC

Here is my approach for deleting stuff with ASP.NET MVC 2.

As mentioned here, the default Delete view isn't quite correct. What I wanted is a deletion solution that:

  • is powered with Ajax for a better user experience
    • we will make a HTTP DELETE on /Items/Delete/12 to delete item #12
  • is accessible for non-JS enabled browsers (we need a confirmation form)
    • when confirmed, the deletion occurs with HTTP POST on /Items/Delete/12 to delete item #12

With those specifications, we can write the following (wrong) controller code:

  1. public class ItemsController : Controller
  2. {
  3. [HttpGet]
  4. public ActionResult Delete(int id) {
  5.  
  6. ViewData.Model = new ConfirmFormModel {
  7. Id = id.ToString(),
  8. BackAction = "Index"
  9. };
  10.  
  11. return View();
  12. }
  13.  
  14. [HttpDelete]
  15. [HttpPost]
  16. public ActionResult Delete(ConfirmFormModel model) {
  17. ViewData.Model = model;
  18.  
  19. // business action here
  20.  
  21. // if we use Ajax, backaction will be null and have
  22. // to prevent a secondary GET request
  23. return model.BackAction == null ? null : RedirectToAction(model.BackAction);
  24. }
  25.  
  26. }
  1. /// <summary>
  2. /// Simple model class to store the Id for a confirmation form.
  3. /// </summary>
  4. public class ConfirmFormModel {
  5.  
  6. /// <summary>
  7. /// Item's ID
  8. /// </summary>
  9. public string Id { get; set; }
  10.  
  11. /// <summary>
  12. /// Confirmation message.
  13. /// </summary>
  14. public string Message { get; set; }
  15.  
  16. /// <summary>
  17. /// The controller action to redirect to if the user wants to cancel.
  18. /// </summary>
  19. public string BackAction { get; set; }
  20.  
  21. }

A created a little model class to store the confirmation message and the item ID; this way I can use it all over my project. You can notice the [HttpDelete] and [HttpPost] on the second Delete() method. Obviously this won't work as asked here. You have to create your own attribute.

So I created the related views with (not-included) javascript. Here is the index:

  1. <!-- Index page -->
  2.  
  3. <ul>
  4. <% for (int i = 0; i < 10; i++) { %>
  5. <li><%= Html.ActionLink("Delete #" + i, "Delete", new { id = i }, new { @class = "deleteLink" })%></li>
  6. <% } %>
  7. </ul>

The delete page where I include a generic partial-view:

  1. <!-- Delete page -->
  2.  
  3. <h3>Confirmation</h3>
  4.  
  5. <% Html.RenderPartial("ConfirmForm", Model); %>

Finally, the partial view:

  1. <!-- Delete form in a partial view -->
  2.  
  3. <% Html.BeginForm(); %>
  4. <fieldset>
  5. <legend>Confirmation</legend>
  6.  
  7. <p><%= Html.Encode(Model.Message ?? "Are you sure you want to delete this?")%></p>
  8.  
  9. <p>
  10. <%= Html.HiddenFor(m => m.Id) %>
  11. <%= Html.HiddenFor(m => m.BackAction) %>
  12. <%= Html.ActionLink("Cancel", Model.BackAction ?? "Index") %>
  13. <input type="submit" name="Continue" value="Continue" />
  14. </p>
  15. </fieldset>
  16. <% Html.EndForm(); %>

Now we have a working solution to confirm some action on a website. Sources attached...

jeudi 7 janvier 2010

Test de VS.PHP 2010

Bonjour à tous.

Dans le but de créer un petit projet perso en PHP + ZF, j'ai décidé de tester pour de bon VS.PHP 2010 actuellement en développement. Le test est réalisé sur le build 2.8.1.6090.

VS.PHP est une extension pour Microsoft Visual Studio conçue pour écrire des applis PHP. Je m'attend globalement à la même expérience qu'avec Netbeans 6.5+. VS.PHP 2008 coûte $99.99 ou €73.99. Notez que Visual Studio existe sous une forme gratuite ; si vous n'êtes pas développeur .NET, VS.PHP ne nécessitera pas de version payante de VS.

A noter que je ne connais presque pas le logiciel, je pars à sa découverte.

Installation

Depuis le site de dev, récupérez l'installateur le plus récemment compilé. L'installateur est un web install.

Installation...

Première utilisation

Quelle surprise de voir qu'un projet de type 'Zend MVC Project' m'est proposé ! Effectivement, dans le fenêtre de nouveau projet, on peut créer un projet classique ou un projet ZF. Ca tombe bien, c'est mon framework préféré !

New project window

En plus de tout ça, je vais utiliser AnkhSVN pour versionner mon projet...

Voilà mon projet PHP+ZF créé. La structure de fichiers proposée ne me convient déjà pas. Le template de projet crée quelques malheureux fichiers. Rien de transcendant... De plus, la colorisation syntaxique est très mal intégrée...

Ma colorisation C# PHP colors and ZF structure

Impossible de trouver les options de colorisation pour le code PHP. Une recherche sur le web m'indique qu'elles devraient s'afficher avec VS démarré en administrateur... Même pas... Petite restructuration de l'appli :

The application is ready to run Built-in web server displays an error

Un mini server web de debug est inclus. J'imagine que le but est de fournir un debug pas-à-pas. Très bon point.

Malheureusement, de nombreux bugs surviennent avec cette version beta. Actuellement VS a gardé un lock sur le fichier .phpproj et n'arrive pas à sauvegarder la structure du projet (cette action est nécessaire pour démarrer l'appli).

Néanmoins, l'IntelliSense est au rendez-vous. Vous pouvez dans un premier temps définir un include_path pour spécifier l'emplacement de votre framework.

PHP include path

Par la suite, l'IDE affichera un IntelliSense digne de celui que l'on a en developpement .NET : le meilleur.

PHP IntelliSense

Conclusion

Le bug cité ayant détruit mon projet ; considérons qu'il est trop tôt pour tester cette version. D'ici quelques jours je ferai un test avec VS 2008 si j'arrive à négocier l'extension de la durée d'évaluation...

Bug bug bug bug bug bug

lundi 30 novembre 2009

SUPINFO, le point

Me voilà en 4ième année à SUPINFO en tant que STA .NET.

Tout à commencé en 2006 lorsque je suis entré en B1. Ayant découvert SUPINFO assez tôt, la JPO à laquelle je suis allé m'a motivé à avoir mon BAC. J'ai donc bossé de mon mieux pour entrer dans cette école. Le coucours d'entrée était encore exigé. Je pense d'ailleurs que c'est grâce à SUPINFO que j'ai eu mon BAC.

L'année de B1 était fantastique. J'ai découvert des gens tous passionnés et ouverts avec un niveau général satisfaisant. Les cours était excellents, on en profitait pour bien se marrer. C'était vraiment un renouveau pour moi qui venait d'une campagne profonde du Nord. Je remercie au passage les directeurs régionaux, les assistantes de direction et les SCT pour leur excellent travail.

L'année de B2 ressemblait fortement à la précédente. C'est pourtant durant celle-ci que les petits problèmes ont commencé à arriver. Il faut dire qu'à SUPINFO, les étudiants sont les beta-testeurs constants des nouvelles pratiques que l'on ne cesse d'instaurer. Le SGES qui crash pendant l'éval de maths qui me semblait impossible à valider, c'était le pied ! Malgrès tout l'ambiance restait la même, les petits problèmes étaient et resteraient petits...

Ensuite vient la difficile année en B3. Le site de SUPINFO Lille ayant ouvert, la moitié de ma promo à Valenciennes a déserté et nous nous sommes retrouvés dans une promo de 15 étudiants. Durant l'année, j'ai entendu des feedbacks douteux concernant ce site de Lille. Mais ici à Valenciennes on ne s'en souciait pas, on était dans une sorte de bulle où tout était toujours correct (ou presque). Pourtant les communications commençaient à se faire rares, les ressources vitales du bâtiment n'était plus renouvelées. Une sorte de crise quoi. Je salue une seconde fois notre DR qui s'est impliqué au maximum pour faire tourner la baraque. C'est d'ailleurs sont implication qui lui a valu sa démission. On constatait des soucis auprès des SCT. Pourtant les SCT sont le cœur de l'enseignement à SUPINFO.

Ensuite vint les vacances d'étés façon zéro-comm' (le fait qu'il n'y ait pas de communication était en fait une forme de communication). De la dernière comm' annoncant les infos pour les conventions de stages jusqu'à la rentrée, les mails n'ont pas vraiment circulé. On était pourtant habitué à beaucoup de mails ! Les romans d'Alick que personne n'arrivait à lire jusqu'à la fin... Les mails divers de l'administration. Les avertissements pour "contenu non pédagogique sur le dossier éphémère". Les campagnes d'inscription aux pôles ! Les réunions de délégués, les communications blagues comme "Installation de caméras de surveillance sur tous les sites". Bref, on rigolait bien au début et tout fonctionnait bien ; jusqu'à cet été.

De plus cet été, la grande arrivée des français sur twitter a amplifié le phénomène de non-comm' par un phénomène de rumeur-à-gogo. Voilà toutes les conneries qu'on pouvait voir sur twitter ! Des gens qui tentaient de couler SUPINFO avec des articles de blogs bidon... Des étudiants demandant des infos... Des infos totalement bidon... Bref, je n'ai pas du tout apprécié tout ça. J'aimais mon école, je l'aime toujours et je souhaite y être impliqué à jamais ! C'est elle qui m'a sorti de ma rue de campagne sans avenir, c'est elle qui m'a fait bien rire durant des années. Je salue au passage toute ma promo (et même ceux qui se sont cassés à Lille), mais surtout Etienne, Flavien, François, Hugo, Geoffroy, Alex, Jonathan, Augustin, Bertrand.

Je constatait que beaucoup de monde tentait de casser l'école dans laquelle ils étudiaient ! Que ce soit par les sites de news en ligne ou via des réactions de profs de FAC. SUPINFO voulait se faire l'image d'une grande école au TOP niveau de la technologie. Et c'était le cas ! Et ça sera toujours le cas ! Pourtant beaucoup de monde a perdu espoir et s'est abaissé à envoyer des skuds gratuits sur les réseaux sociaux. Tous ces gens qui ont descendu l'école m'ont dégoutté. Lorsqu'on paie 5 K€ par an et que l'on a un enseignement des plus efficace de France, on n'aide pas le bateau à couler lorsqu'il y a des brèches dans la coque ! L'administration trop fière pour appeler à l'aide a juste occulté toute info. J'aurai apprécié un petit mail du style "On galère un peu. On répare tout. Vous inquiétez pas, on revient.". Je pense qu'un énorme travail de fond s'est fait durant cet été. La restructuration complète pour permettre le franchisage. Le chamboulement de tout ce qui existait (les SCT/STA, la nouvelle façon de donner cours, tout...). Malheureusement 4 mois étaient insuffisants pour tout changer, la rentrée 2009 fût donc très hésitante.

Dans tout ça, je me posais des questions. Non pas sur l'avenir de SUPINFO -car je crois qu'avec les revenus des étudiants, cette boite ne peut pas couler-, non. Mais sur le mien. Des centaines de gens -stupides pour la plupart- étaient en train de faire tomber notre réputation et de compromettre notre diplôme. M1 étant le meilleure année pour devenir SCT, j'ai donc opté pour cette option, dans l'espoir de participer un peu. Je salue au passage mes collègues qui on su me motiver et me montrer qu'un avenir magique s'ouvrait à moi avec cette école.

Me voilà donc STA en Microsoft .NET le 27 Octobre 2009. Malheureusement la procédure s'est fait tardivement. Enfin ce n'est pas grave, tout se passe pour le mieux. Ce statut va me permettre de travailler mes capacités de formateur, c'est carrément super.

En tout cas l'organisation du coté du labo .NET et Microsoft est exemplaire, des gens motivés ont repris les rennes. Mon Full Prof exige beaucoup et c'est pas plus mal. Je le remercie au nom de l'école pour le travail qu'il apporte : il s'implique beaucoup et les STA sont bien dirigés.

Me voilà donc à mon premier cours à Lille en face des M1. Certains M1 ayant quitté Valenciennes d'ailleurs. J'ai heureusement été bien accueilli.

Nous voilà donc au jour de la rédaction de ce billet. C'est assez impressionnant de raconter 4 ans sur 1 seul billet ! Bref, je me sentais dans l'obligation de faire le point sur mon école.

A tous ceux qui souhaitent intégrer l'école : SUPINFO c'est bien ! Beaucoup de gens motivés mais aussi des gens chiants à qui il ne faut cesser de prouver qu'on peut avancer ! A ceux qui on raconté de la merde sur l'école : oui, SUPINFO galère un peu mais c'est pas une raison pour empirer les choses. Pensez à la valeur de votre diplôme. A toi lecteur : merci d'avoir lu mon roman médiocrement objectif. Je tenterai de faire mieux à l'avenir.

PS : Je vous prie de pardonner l'apparence plutôt moche de mon blog,

mardi 21 juillet 2009

Nouveautées de Silverlight 3

Silverlight 3 étant sortit il y a quelques jours, je vais vous en parler un petit peu.

Je vous rapelle que Silverlight est un plugin pour navigateur ressemblant (du point de vu utilisateur) à Adobe Flash et est développé par Microsoft. Les principaux atouts de Silverlight sont les suivants :

  • C'est un format ouvert (XAML) donc théoriquement compatible avec n'importe quel OS et toutes architectures (x86, x64...).
  • Des logiciels de développement gratuits existent (Visual Studio Express). Le XAML étant un format XML, un éditeur de texte suffit presque à créer un composant.
  • L'utilisation du XAML permet à l'application d'être portée sous forme de fenêtre grâce à WPF. (Flash le permet via Adobe Air mais il est difficile de trouver une version x64 pour GNU/Linux... (en fait, il n'y en a pas))

Je vous invite à consulter le web pour plus de détails.

Au passage, voici un White paper édité par Julien Dollon regrouppant les nouveautées de la version 3.

lundi 13 avril 2009

Télécharger vidéo et musique sur un flux Windows Media depuis linux

Alors que cela est un calvaire sous Windows, il est possible de récupérer simplement un fichier vidéo Windows Media hébergé sur un serveur de streaming mms:// avec la commande mplayer.

Exemple : mplayer "mms://.../....wmv" -dumpstream -dumpfile "Ma Vidéo.wmv"

Simple et efficace

- page 1 de 5