jeudi 9 avril 2015

Toggle plus/moins (plus/minus) générique jquery

Bonjour,


Voici comment automatiquement rendre générique votre changement d'etat (par classe) lorsque que vous souhaiter afficher / cacher des informations.

$(".icon-minus, .icon-plus").click(function(){
    $(this).toggleClass("icon-minus icon-plus");
});
De ce fait, lors du clic sur un lien de class .icon-minus ou .icon-plus le changement de class est fait automatiquement.

a href="#" class="icon-minus" onClick="mafonction(arg1, arg2);"

Merveilleux n'est-ce pas ?



Jquery doc - toggleClass

Happy coding

lundi 8 septembre 2014

Tips n°4 - Suppression doublon caractères Oracle (regexp replace)

Bonjour,

Une astuce que je viens de découvrir, elle ne sert pas tous les jours mais on se sait jamais.
Il s'agit du remplacement des caractères en double, triple ... dans une chaîne oracle.
Au finale une expression régulière toute simple mais très puissante :

SELECT regexp_replace('aa125s6df222bbbddddccc', '(.)\1+', '\1') FROM DUAL;

Résultat : 

aa125s6df222bbbddddccc
a125s6df2bdc

Associé à une petite fonction Oracle, c'est le top !

Happy coding !

mardi 24 décembre 2013

Tips n°3 - Oracle, compter le nombre de colonne dans les tables

Bonjour,

Aujourd'hui une petite astuce Oracle, et comment voir quelles sont les tables avec le plus de colonne ? Oracle vous propose donc d'utiliser une table system : ALL_TAB_COLUMNS

SELECT   table_name, COUNT (*)
    FROM all_tab_columns
GROUP BY table_name
ORDER BY COUNT (*) DESC

C'est tout simple, ca sert pas tous les jours, mais si vous aimez les statistiques vous aimerez cette requete :)

Joyeuse fetes !

vendredi 20 décembre 2013

Tips n°2 - C# Conversion quote, caractère javascript/jquery

Bonjour à tous,

Je continue sur les petites astuces du quotidien au niveau du développement. Pour aujourd'hui une conversion des chaines de caractères depuis C# vers de javascript/jquery.

Souvent  les apostrophes ne passent pas au niveau des variables JS, du coup il faut faire des conversion dans tous les sens ... avec des vieilles expression régulieres. Clairement je ne suis pas fan !

Microsoft a donc fait encore une fois les choses correctement en proposant une fonction bien pratique mais, méconnu : HttpUtility.JavaScriptStringEncode

Du coup l'usage est vraiment tres simple :

var testAffiche = HttpUtility.JavaScriptStringEncode(Model.Texte);

Ce qui se traduit en code Html par :

... RATION / \\ \u0026\u0027 ...


Comme d'hab c'est une astuce qui m'était inconnue, donc si vous utilisé C#, MVC et javascript, ceci peu vous être d'une grande utilité :)

Coding 4 Fun

vendredi 22 novembre 2013

Compilation des vues MVC (view)

Bonjour,
Si comme moi vous utiliser MVC pour vos applications WEB avec C#, vous devriez connaitre ce mot clé : MvcBuildViews.
Pour les autres, c’est tout simplement le moyen de vérifier par compilation que l’ensemble de vos vues de votre Projet MVC ne comporte aucune erreur de compilation. Attention, cette opération est assez longue a s’exécuter.
Pour faire cette modification, il suffit de modifier votre fichier project (.csproj), sous l’élément propertygroup, rajouter la clé xml suivante :
Lancer la compilation classique de MVC dans Visual studio, et la miracle, dans la fenêtre de sortie vous devriez voir apparaitre la ligne suivante :

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v temp -p C:\MonSiteMVC\bin\maDll.dll

Maintenant, le constant :
  • changer a chaque fois le projet pour vérifier la compilation des vues c’est super chiant (passer true/false), et risque d’oubli
  • laisser a true, c’est super chiant, car la compilation prend a chaque fois 3 Min !!
  • laisser a false, c’est pas propre car on ne voit donc pas les erreurs sur les vues (surtout si il en existe beaucoup)
Du coup, une solution toute simple existe, c’est le lié l’élément XML a une configuration. Dans notre cas, ce que je conseil est d’associer :
  • Config DEBUG : MvcBuildViews : False
  • Config RELEASE : MvcBuildViews : False

Pour cela, il faut éditer le fichier projet (csproj) en rajoutant 2 sections :
Ps : si vous avez un serveur d’intégration du style TFS (Visual Studio Online de son nouveau nom) ou TeamCity, il suffit de lancer votre build en mode Release pour obtenir la compilation des vues automatiques.

Voila, j’espère être assez clair.
Coding4Fun

mercredi 9 octobre 2013

Tips n°1 - C# Comparaison de date dans l'heure (DateTime)

Bonjour à tous,

Je me lance dans les petits tuyaux de tous les jours, sur C#. (on verra si cela est suffisant, assez de matières...)

Aujourd'hui une petite astuce est la comparaison du format DateTime mais sans les horaires.

Je souhaite avoir la liste des produits qui ont été créer aujourd'hui par exemple.Je doit faire :

listeProduits.where(p => p.Creation.Date == DateTime.Today.Date)

En fait la comparaison va se faire en prenant l'heure 00:00:00.

Remarque :
DateTime.Today = DateTime.Today.Date = DateTime.Now.Date = 09/10/2013 00:00:00

Je trouve que c'est une astuce toute simple que je ne connaissait pas. Et si vous développez depuis un moment vous devez etre au courant que la comparaison de date (C#, JS, SQL), ben c'est toujours la merde ^^.

lundi 7 octobre 2013

Injection de dépendance sur les controllers WebApi MVC (ApiController)

Bonjour à tous,
Dans un précédent article, je vous parlais de la mise en place de WEB Api avec les instructions MVC 4. Dans l’article, je ne parlais pas d’injection de dépendance, très souvent utilisée avec NHibernate par exemple (ce qui est mon cas).
Pour cela quelques étapes sont nécessaire pour faire le paramétrage de cette injection. MVC a déjà tout prévu pour nous :)
  • Modification du Global.asax
  • Utilisation de IHttpControllerActivator
  • Utilisation de Windsor Castle
Avant de rentrer dans le vif du sujet, attardons nous un petit moment sur l’injection de dépendance. Comment résumer cette notion sur un blog ? Hum pas évident. pour ma part je l’expliquerai avec une boite (container – conteneur en français ^^) qui connait les définitions des (de nos) objets.
De ce faite, c’est ce container qui construira/fabriquera/instanciera a la demande les objets nécessaire a l’exécution du code. L’intérêt de cette méthode est de rendre autonome au maximum nos classes (dépendance). Généralement cette dépendance, se voit au constructeur; ce dernier disposera alors comme paramètre l’ensemble des dépendances a résoudre lors de l’instanciation.
Ce n’est pas une notion facile a appréhender / comprendre. Moi même j’ai eu beaucoup de mal au début. Cependant, l’intérêt est tout de suite parlant dès lors ou vous avez a faire a des projet utilisant, ou nécessitant l’utilisation de ce mécanisme.

Global.asax

Le point d’entré de l’application permet d’exécuter le paramétrage de notre/nos injection(s). Dans notre cas, nous alors donc remplacer la “routine” du Controller sur nos  Web API, par notre propre “Activator” qui se positionnera donc entre la demande de la requête et son traitement. Permettant ainsi de résoudre, et de fournir le contrôleur adéquate (comprendre: Castle.Windors instanciera alors notre Controller avec les dépendances et le retournera a MVC).
Il est important de noter qu’il faut distinguer les routes de type WebAPI et les autres (mvc classique). L’injection ne sera pas la même, on passera alors par la fabrique de controller (ControllerBuilder.Current.SetControllerFactory(controllerFactory) )

protected void Application_Start()   
{

[…]

GlobalConfiguration.Configuration.Services.Replace(typeof(System.Web.Http.Dispatcher.IHttpControllerActivator), new WindsorCompositionRoot(container.Kernel));

}

IHttpControllerActivator

Une fois l’appel fait dans notre Application_Start, nous fournissons alors a notre Activator le Kernel (notre container de référence), pour que ce dernier puisse piocher dedans afin de faire l’instanciation.
L’interface est assez simple; 2 méthodes
- Create : création du controller en question, on va résoude (resolve) dans notre container la référence, et retourner ce dernier.
- Le Dispose, il faut lors de la fin d’execution de la requete HTTP (webapi) que les ressources acquises soient libérées. On implemente alors un classe Disposable, utilisable a l’aide de RegisterForDispose.
public class WindsorCompositionRoot : IHttpControllerActivator   
{    
    private readonly IKernel kernel;

    public WindsorCompositionRoot(IKernel kernel)   
    {    
        this.kernel = kernel;    
    }

    public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)   
    {    
        var controller = (IHttpController)this.kernel.Resolve(controllerType);

        request.RegisterForDispose(new RessCtrlRelease(this.kernel, controller));

        return controller;   
    }

    private class RessCtrlRelease : IDisposable   
    {    
        private readonly IKernel kernel;    
        private IHttpController httpController;

        public RessCtrlRelease(IKernel kernel, IHttpController httpController)   
        {    
            this.kernel = kernel;    
            this.httpController = httpController;    
        }    
        public void Dispose()    
        {    
            this.kernel.ReleaseComponent(this.httpController);    
        }    
    }

}

Je ne sais pas si j’ai été suffisamment clair, c’est un sujet assez vague et complexe, mais j’espère que les bouts d’informations que j’ai mise en place permettront d’éclaircir et d’aider les développeurs que nous sommes.
Parce que beaucoup d’information existe sur la toile, un article m’a beaucoup aider : http://blog.ploeh.dk/2012/04/17/InjectingHttpControllerContextWiththeASP.NETWebAPI/
Articles en relation :

lundi 5 août 2013

Mise en place de Web API - MVC4


Bonjour à tous, aujourd’hui dans ce billet nous allons voir et appréhender une nouveauté de MVC 4 qui est les WEB API. Pour faire simple, est le WEB API de MVC4 permet principalement de faire du REST (REpresentational State Transfer) afin de piloter les données envoyées depuis différentes sources :
  1. le serveur reçoit un requête HTTP (http://mon-site.com/api/GetProducts)
  2. le serveur traite la demande (base de données, calcul etc…
  3. le serveur renvoi la requête sous forme XML/JSON au client.

mardi 30 juillet 2013

Recherche JQuery (Ctrl+F)


Aujourd’hui un petit bout de JavaScript pour effectuer une recherche dans un bloc HTML. L’exemple montre comment rechercher une occurrence (sans respect de la casse) dans un bloc, afficher le nombre de résultat, et passer a l’occurrence suivante en appuyant sur ENTREE.

mercredi 24 juillet 2013

Ajout d’item dans le bouton droit windows (shell)


Aujourd’hui nous allons voir comment ajouter un item dans le contexte menu Windows lors du clic droit.
image