mardi 18 décembre 2012

Parcours fichier commande Doc (cmd)


Un petit script qui peux servir pour des taches planifiées.(en ligne de commande)
  • Instruction FOR … DO
  • Instruction DIR
  • Instruction GOTO
Comment parcourir un dossier avec un tri pas date de modification (last modified)
@echo off   
CLS
REM On fait un dir pour avoir les fichiers du répertoire en tri par DATE '/O:-D'
REM /B indique pas de summary
FOR /F %%i IN ('dir /B /O:-D C:\MonDossier') DO (
    REM Effectue la copie du dernier fichier 
    XCOPY ….
    
    GOTO FINISH
)
:FINISH

J’espère que cela vous aidera a faire vos petits petit scripts Sourire

lundi 17 décembre 2012

Tree Size - Taille des arborescences

Un petit utilitaire sympathique pour connaitre rapidement la taille de chaque dossier de votre arborescence Windows :
Il vous permet de voir ou gagner de la place...

TreeSize :
http://www.jam-software.com/treesize_free/#
image

Dans notre exemple Google Chrome conserve les installations, du coup .... hop 1Go de libre.

jeudi 24 mai 2012

Optimisation Oracle Index et tables

Bonjour,

Je viens de découvrir les ordres des requêtes SQL qui permettent d’optimiser les tables et index d'une table.

Cela permet via script (automatique) et par exemple suite a de grosse opération de mise a jour (update / delete), de restructurer la table en question.
select 'ALTER INDEX ' || index_name || ' REBUILD;' from user_indexes  where table_name = 'MA_TABLE';
select 'ANALYZE INDEX ' || index_name || ' VALIDATE STRUCTURE;' from user_indexes  where table_name = 'MA_TABLE';
Analyze Table MA_TABLE Estimate Statistics;

A la fin du script permet de tout mettre tout propre ^^

Voila en espérant que ces instructions puisse vous aidez.
Par contre, ce que je n'ai pas fait (par manque de temps) est le Benchmark de ses actions pour savoir le gain. Il aurait fallut analyse les performances avant la mise a jour des index/tables et après l'opération pour avoir le rapport de performance.
Dans tous les cas, cela ne peux pas faire de mal :)

vendredi 4 mai 2012

Concaténation Oracle

Bonjour a tous, Une petite astuce en Oracle pour concaténer des lignes sous forme de "Champs" (champ1, champ2...). Il suffit d'utiliser une fonction présent dans les fonctions d'oracle : wmsys.wm_concat avec un group by Comme cela :
select wmsys.wm_concat(libelle) as LIBELLE, max(date_creation) as MA_DATE, CHIFFRE
from maTable
where critere = 1
and critere2 in (1,2,3)
group by CHIFFRE
Le résultat
LIBELLE MA_DATE CHIFFRE
-------- ------------------- ----------
aa,bb,cc 2007-11-19 44000

mardi 28 décembre 2010

IndexOutOfRangeException: Index xx non valide - Nhibernate

Bonjour,

La gestion de Nhibernate est très complexe ... et je me permet de noter l'erreur suivante qui intervient lors d'un Update :

System.IndexOutOfRangeException: Index 29 non valide pour ce OracleParameterCollection avec Count=29

C'est erreur est lié a la mise a jour de trop de champs (champs en doublons dans le fichier hbm.xml : mapping de Nhibernate). C'est souvent le cas lorsque vous avez un many-to-one pour une assoc et qu'il existe également une property sur le même champs.

A ce niveau la, Nhibernate ne sait pas quel champs prendre, il utilise donc les deux ... et plante joyeusement ^^.


[...]


Dans mon cas, 29 correspond au nombre de champs (property) mappées dans mon fichier xml.

Pour résoudre le problème, deux solutions sont disponibles :
1- Rajouter les attributs update="false" insert="false" sur la/les property

2- Supprimer soit le/les many-to-one soit la/les property


Bonne journée

lundi 30 août 2010

Incorporer une ressources dans une DLL

Bonjour,

Petit billet pour expliquer comment incorporer n'importe qu'elle type de ressources (image, javascript, ...) dans un DLL puis en faire l'appel.

Problème : Comment faire si l'on a plusieurs sites web qui font appel à des même images et script en évitant la répétition ? (copier/coller)

1er élément : le mettre sur un serveur disponible n'importe ou. Du type Google (http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js), qui en interne (en entreprise) n'est pas spécialement le bon choix, on s'orientera plus sur le meme exemple avec nos propres serveurs du style : http://entreprise.intern.fr/ajax/libs/jquery/1.4.2/jquery.min.js.

Cette solution fonctionne parfaitement, mais ce n'est pas celle que j'ai retenu d'expliquer en détails. Le 2nd élément est la mise en place d'une DLL contenant les divers images, scripts nécessaire pour les sites web.

Pour cela nous avons besoins de 2projets (ils peuvent être dans la meme solution ou non).
1. ClassLibrary (bibliothèque de classes)
2. SiteMvc

Dans - ClassLibrary - ajouter une image a la racine du projet (ici worms.jpg) :
Dans les propriétés de l'image (ou de n'importe quelles ressources), changer l'action de génération de "Contenu" en "Ressource incorporée" ! Cette étape est obligatoire !
Ensuite, ajouter une nouvelle classe au projet ClassLibrary (ou ouvrir celle par défaut : Class1.cs). Ajouter en entête de classe :
[assembly: System.Web.UI.WebResource("ClassLibrary.worms.jpg", "image/jpg")]
namespace ClassLibrary
{
    public class Class1
    {

    }
}
Attention, la casse et le namespace/dossier sont très important, sinon depuis vos autres projets vous ne pourrez pas faire l'appel correctement !
Compiler votre 1er projet, il ne doit pas avoir d'erreur.

Maintenant sur votre 2nd projet, ajoutez la référence vers votre DLL ainsi créer. Et depuis l'une de vos vue, ajouter le code suivant pour faire appel a notre image (worms.jpg)

< img src="< % = ClientScript.GetWebResourceUrl(typeof(ClassLibrary.Class1), "ClassLibrary.worms.jpg") % >" / > 

Compilez/Exécuter, tadaaaaaaaa magique l'image des Worms s'affiche sur votre navigateur. Si vous regardez dans le source de la page vous devriez voir l'url peu commune :

< img src="/WebResource.axd?d=haVvUhxQKye3YgyVc9g8l32EYKRgja8RJmuPLLUPaamPyZ8Eyx76lCDu-nUPvlKb0&t=634187628689941128" / >

Voila, c'est tout pour l'instant, j'espère que vous avez appris quelque chose, et que cela vous a servi :)

Coding4Fun

jeudi 26 août 2010

Gestion des Type Enum C#

Bonjour a tous !

De retour de vacances, en forme pour de nouveau épisode de code sur mon Blog ^^. J'espère que pour vous que vos vacances se sont bien passé et que vous avez pu vous reposez et profitez du soleil.

Un petit billet pour faire quelques explication sur les Enum en C#.

Ma question initial était de pouvoir avoir des types défini et comparable en string. Cependant a ma connaissance les Enums n'etaient que comparable avec des int de cette manière :

private enum InputType
{
    Checkbox,
    Hidden,
    File,
    Password,
    Radio,
    Reset,
    Submit,
    Text
}

... InputType.Text == 7 ...

Or, ce que je souhaite c'est de pouvoir afficher le texte de mon Enum (et non la valeur) :

Console.WriteLine("Le champ Text : " + InputType.Text)
// produit : Le champ Text : 7

Pour cela, il faut utiliser les méthodes présentes dans System.Enum : (2 essentiellement)

// Récupération de tous les textes de l'enum en question
var tab = System.Enum.GetNames(typeof(InputType));
// Récupération du texte de l'enum donné
var elm = System.Enum.GetName(typeof(InputType), InputType.Checkbox);

Cependant, une méthode plus courte existe, l'utilisation du .ToString() sur le type donné. Néanmoins, l'intellissence de Visual Studio (2008 - C# 3.5) note que cette méthode est désapprouvée et qu'il faut utiliser System.Enum.ToString() ?!

Ça marche très bien comme cela :

string val = InputType.Text.ToString();

vendredi 9 juillet 2010

Gestion des paramètres culturel MVC Asp.net

Bonjour,

Petite news bien pratique, la gestion de la culture sur un site MVC en Asp.Net.

Dans mon cas, je travail en local (dev) sur mon Poste Windows, en français. Or lorsque je déploie il n'est pas toujours évident de retrouver les paramètre culturel identique a son poste de travail.

Pour cela, il suffit de rajouter ses quelques lignes dans le fichier Global.asax.cs

/// 
/// Begin Request début de requete HTTP sur l'application
/// 
/// /// protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpCookie cookie = Request.Cookies["CultureInfo"];

    if (cookie != null && cookie.Value != null)
    {
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);
      Thread.CurrentThread.CurrentCulture = new CultureInfo(cookie.Value);
    }
    else
    {
      Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
    }
}        

mercredi 9 juin 2010

Ne pas mettre a jour une table/entité avec Nhibernate

Bonjour a tous,

Aujourd'hui je me suis confronté a un problème de mise a jour par Nhibernate. Je m'explique, j'ai un traitement qui récupère/parcours plusieurs objets/entités mappées depuis une vue (oracle) bien spécifique (jointures...).

Le souci c'est que je modifie les enregistrements de cette vue pour effectuer un certain nombre de contrôle. Suite a ces tests, j'ai une opération de suppression (delete) ou mise a jour (update). Pour ces deux commandes, je stipule deux choses sur la session :

this.Session.Update(entite);
this.Session.Flush();

Or dans mon cas j'obtiens une erreur sur un update non souhaité du type : 
NHibernate: UPDATE vue_qui_va_bien SET champ1 = :p0 WHERE id= :p1;:p0 = '00000', :p1 = 123
Deux solutions se présente alors pour la gestion des mise a jour des tables et objets.

1° Lecture seule - Readonly sur tout la table


En précisant le terme mutable="false", cela précise à Nhibernate de ne pas mettre a jour cette table (vue). Aucune commande Update ou Delete ne sera effectué ! Nickel c'est ce que je voulais.

http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/reference/fr/html/mapping.html#mapping-declaration-class
     mutable (optionnel, vaut true par défaut) : Spécifie que des instances de la classe sont (ou non) immuables.


2° Lecture seule - Readonly sur un ou plusieurs enregistrements

En précisant le terme update="false" sur le ou les champs en question. Nhibernate ne fera pas de mise a jour si celui ci est modifié.

En esperant que cela vous aide dans vos développements avec Nhiberate !

mardi 20 avril 2010

Clé composite, mapping et class avec Nhibernate

Il vous est peut etre déja arrivé d'essayer de mapper une table qui ne contient aucune clé primaire (ou alors qui est composé). Pour ma part, hier cela m'est arrivé !
C'est ce que je vais essayer de décrire dans les étapes suivantes.

Lors de l'execution et du mapping de NHibernate, logiquement (sans mettre de clé primaire dans votre fichier xml), vous devriez tomber sur ce message :
- “composite-id class must override Equals()”
- “composite-id class must override GetHashCode()”

Pour corriger cette erreur, il faut absoluement avoir une clé primaire. Dans notre cas, elle sera composée (de Contrat_ID et Code_Agn).

Voici notre mapping:

















Notre classe :
public class Allegement
{
    public virtual string Contrat_ID { get; set;}
    public virtual string Lot_Paie { get; set;}
    public virtual string Montant_ALLGT_1 { get; set;}
    public virtual string Code_Agn { get; set; }

    // nécessaire lors des clés composites
    public override bool Equals(object obj)
    {
        if (obj == null)
            return false;

        Allegement a = obj as Allegement;
        if (a == null)
            return false;

        if (this.Contrat_ID == a.Contrat_ID && this.Code_Agn == a.Code_Agn)
            return true;
        else
            return false;
    }

    // necessaire lors des clés composites
    public override int GetHashCode()
    {
        int hash = 666; // ce que l'on veux 
        hash += (null == this.Contrat_ID ? 0 : this.Contrat_ID.GetHashCode());
        hash += (null == this.Code_Agn ? 0 : this.Code_Agn.GetHashCode());

        return hash;
    }
}}

Les élements a retenir de cet exemple sont :
- pas de mapping sans clé primaire
- la redefinition des méthodes "Equals" et "GetHashCode", des classes de bases

Pour plus d'information sur le mapping : http://nhforge.org/doc/nh/en/index.html dans la partie "5. Basic O/R Mapping"