[Trucs & Astuces]

Discussion dans 'Web, design' créé par SkYlEsS, 25 Avril 2007.

Statut de la discussion:
Fermée.
  1. Offline
    SkYlEsS Kawai
    :signe: les zamis !

    Voici une liste de trucs et astuces utiles organisée selon le code ... N'hésite pas à en proposer l'une ou l'autre toi aussi afin d'agrandir cette liste !

    Pour ce faire :

    • Introduis ton code par une explication ou un commentaire sur l'effet obtenu et informes en quel language il est rédigé.
    • Copies ton code entre les balises [ CODE ]
    • N'hésites pas à préciser ensuite une partie ou tout ton code si celui-ci semble peu clair par exemple.
    • Si source il y a, nommes-la !
    • Tu puis également mettre une infime partie de ton code en [ DarkOrange ] afin d'attirer l'oeil sur une partie importante de ton code par exemple.


    [gv3titre]xHTML / CSS[/gv3titre]
    [gv3titre]PHP / MySQL[/gv3titre]

    [gv3titre]JavaScript[/gv3titre]

    [gv3titre]Ajax[/gv3titre]

    [gv3titre]Assembleur[/gv3titre]

    [gv3titre]C / C++[/gv3titre]
    [gv3titre]Java[/gv3titre]
    SkYlEsS, 25 Avril 2007
    #1
  2. Offline
    Ahava Revenant
    Bonne idée :)


    Astuce toute conne, pour ne pas créer une variable d'incrémentation pour le remplissage d'un tableau vide, avec les données d'une requete sql par ex :

    Code:
    $bla = array();
    foreach($source as $obj){
    $bla[[COLOR=Sienna]count($bla)[/COLOR]] = new Blabla($obj->id,$obj->name,...);
    }
    Ahava, 25 Avril 2007
    #2
  3. Offline
    SkYlEsS Kawai
    Tu puis m'en dire plus ou me montrer un exemple stp ? C'est le truc typique que je ne comprends guère :-' (manque un peu de rouge sur les joues de ce smiley)
    SkYlEsS, 25 Avril 2007
    #3
  4. Offline
    Bingo Beer Addict
    Excellente idée, mais ne serait-ce pas mieux de faire un sujet par langage ou famille de langage ?
    Par exemple un sujet pour PHP/ASP/HTML, un sujet Java, un sujet Autres (VB, Batch, etc...) ?
    Sinon ça risque vitre d'être la bazar !
    Bingo, 25 Avril 2007
    #4
  5. Offline
    SkYlEsS Kawai
    Je compte simplement réaliser plusieurs listes :)
    SkYlEsS, 25 Avril 2007
    #5
  6. Offline
    Shrekju ex membre
    Le gain en mémoire ne vaut pas toujours le gain en ressource.
    Sinon $bla[] = 127;
    Shrekju, 25 Avril 2007
    #6
  7. Offline
    Ahava Revenant
    Le code est l'exemple :

    donc au lieux de déclarer un $var = 0 ; et dans la boucle faire $var++ ; je lui met comme position count($var) qui retourne le nombre d'éléments dans le tableau : Quand il est vide, il retourne 0, 1 élement retourne 1, etc. Donc, si tu suis, quand le tableau est vide, je le remplis à la position 0, puis au tour suivant à la position 2, etc...
    Ahava, 25 Avril 2007
    #7
  8. Offline
    Ahava Revenant
    Je sais, c'est ridicule comme truc, j'ai pas dit le contraire, mais j'aime bien :p
    Ahava, 25 Avril 2007
    #8
  9. Offline
    SkYlEsS Kawai
    Tu n'aurais pas un exemple concret ? Parce qu'j'ai franchement du mal là :]
    SkYlEsS, 25 Avril 2007
    #9
  10. Offline
    Ezekiel ! Elite
    Premier ptit truc qui me passe par la tête :
    Quand vous avez besoin de mettre une image dans le cache du navigateur (pour un script en js par exemple) et bien vous créez un <div> qui contiendra les img en arriere plan :
    Code:
     <div id="#miseEnCache">
    Code css :
    Code:
     #miseEnCache 
    {
    background-image: url('img1.jpg');
    background-image: url('img2.jpg');
    display: none;
    }
    Voila :)
    Sinon un petit script mega simple en PHP mais quand je vois le code de certain CMS y a pas grand monde qui utilise cette technique :-s :
    Code:
         /* Traite les $_GET & $_POST en convertissant tout les symboles en leur équivalent HTML */
        function secureGetAndPost()
        {
            foreach($_POST as $key => $value)
            {
                if (!is_array($_POST[$key]))
                {
                    $_POST[$key] = htmlentities(stripslashes($_POST[$key]), ENT_QUOTES);
                }
            }
            foreach($_GET as $key => $value)
            {
                if (!is_array($_POST[$key]))
                {
                    $_GET[$key] = htmlentities(stripslashes($_GET[$key]), ENT_QUOTES);
                }
            }
        }
    Ezekiel !, 25 Avril 2007
    #10
  11. Offline
    Calvin80 Elite
    POST et GET ? pkoi ne pas utiliser REQUEST dans ce cas ?
    Calvin80, 25 Avril 2007
    #11
  12. Offline
    Ezekiel ! Elite
    Ouep t'as raison on peut tout faire en une boucle :p
    C'est pcq à la base je traitais juste les $_POST :p
    Ezekiel !, 25 Avril 2007
    #12
  13. Offline
    Calvin80 Elite
    je pense qu'on peut meme tout faire en une ligne avec array_walk ;)
    Calvin80, 26 Avril 2007
    #13
  14. Offline
    whatever42 ex membre
    Code:
    array_walk_recursive($_REQUEST, create_function('&$ref, $key', '$ref = htmlentities(stripslashes($ref, ENT_QUOTES))'));
    Garanti 100% non testé et la doc francophone de array_walk_recursive est erronée.
    whatever42, 26 Avril 2007
    #14
  15. Offline
    neku Codeur roumain
    Rediriger la sortie standard STDOUT vers un fichier en c++

    Code:
    	#define REDIRECT_COUT_TO_LOG() \
    		ofstream Log_File("./debug.log", ios::app); \
    		streambuf* Buffer_log = Log_File.rdbuf(); \
    		streambuf* Buffer_cout = cout.rdbuf(); \
    		cout.rdbuf(Buffer_log);
    
    	#define REDIRECT_COUT_TO_COUT() \
    		cout.rdbuf(Buffer_cout); \
    		Log_File.close();
    
    neku, 26 Avril 2007
    #15
  16. Offline
    SkYlEsS Kawai
    'vais faire le topic avec la liste ce soir ou demain ;)

    Sinon, pour adapter automatiquement un ou plusieurs éléments à la résolution de l'écran via css, non pas dans la feuille de style mais en déclarant le css dans le fichier php :

    Code:
    <style type="text/css">
    .page {
    width: 800px;
    width: expression(document.body.clientWidth > 800 ? "800px" : "770px");
    }
    </style>
    Source : Alsacreation

    La class page obtiendra une taille de 800px si la résolution est supérieur à 800px sinon 770px. Si le javascript est désactivé, il sera d'office à 800px. Ne fonctionne ni sous FF ni Opera je crois ... :)

    Si quelqu'un a une meilleure manière, je suis preneur ! (Genre, une option compatible IE & FF quoi)
    SkYlEsS, 28 Avril 2007
    #16
  17. Offline
    zoheir cvm.mangaleet()
    nice :)
    zoheir, 28 Avril 2007
    #17
  18. Offline
    neku Codeur roumain
    Convertir une CFString en chaine C standard (Code Carbon Mac)

    Code:
    CFString Ma_CFString = CFST("coucou");
    const char* C_String = CFStringGetCStringPtr(Ma_CFString, CFStringGetSystemEncoding());
    printf("%s\n", C_String);
    ne pas oublier les entête :
    Code:
     #include <Carbon/Carbon.h>
    #include <CoreFoundation/CoreFoundation.h>
    et le link :
    Code:
     -framework CoreFoundation
    neku, 29 Avril 2007
    #18
  19. Offline
    SkYlEsS Kawai
    J'ai laissé le code Ez3kieL car les réponses à son code ne sont pas complètes (array_walk / array_walk_recursive ?) ou non testée. Si quelqu'un veut bien soit vérifier le code, soit donner un code dont il est sûr du fonctionnement ...

    Si un modo veut bien effacer les topics voire mettre ce thread en post-it :]
    SkYlEsS, 29 Avril 2007
    #19
  20. Offline
    neku Codeur roumain
    Afficher sous forme hexa une zone mémoire

    Code:
    	#define DebugToHex(Pointer, Len) \
    		if (Len) { \
    			cout << "Hex dump @ " << hex << (void*)Pointer << " to " << hex << (void*)(Pointer + Len) << endl; \
    			for(int i = 0; i < (int)Len; i++) { \
    				if (!i) \
    					cout << "\t0x0" << hex << i << " | "; \
    				if ((int)*(Pointer + i) < 0x10) \
    					cout << hex << "0x0" << (int)*(Pointer + i) << " "; \
    				else \
    					cout << "0x" << hex << (int)*(Pointer + i) << " "; \
    				if (!((i + 1) % 16) && (i != ((int)Len - 1))) { \
    					cout << endl; \
    					cout << "\t" << "0x" << hex << (i + 1) << " | "; \
    				} \
    			} \
    			cout << endl; \
    		}
    
    résultat :
    Code:
    Hex dump @ 0x5a230 to 0x5a234
    		0x00 | 0xa1 0x30 0x00 0x00
    

    Vérifier une zone mémoire a l'aide d'une signature dynamique
    Code:
    		bool CheckSig (DWORD Pointer, DWORD Len, BYTE* Sig, const char* Mask) {
    			for (unsigned int Offset = 0; Offset < Len; Offset++) {
    				if (*(Mask + Offset) == 'x') {
    					if (*((BYTE*)(Pointer + Offset)) != *(Sig + Offset))
    						return false;
    				}
    			}
    			return true;
    		}
    
    utilisation:
    Code:
    			if (!CheckSig((DWORD)Buffer, (DWORD)16, (BYTE*)"\x12\xA4\x00\x01\xFF\x03\xFF\x00\x00\x00\x00\x00\xFF\x00\x00\x00", "xxxx?x?xxxxx?xxx")) 
    
    On vérifie donc que les octets a l'adresse de Buffer sur une longueure de 16 octets
    On sait que certain octets sont fixe et d'autre variables, ici j'ai mis 0xFF pour la valeur des octets variable si on aurais eu un 0xFF comme octets non variable cela n'aurais pas posé de probleme puisque les octets variable et non variable sont défini par le mask : "xxxx?x?xxxxx?xxx"
    les octets fixe sont représenté par : x
    et les variables par : ?

    donc maintenant si chaque octets fixe correspondent à ce que l'on recherche, on a trouvé !

    Exemple d'utilisation dans mon driver mac pour la wiimote :
    voici les mask des touche de la wiimote :
    Code:
    #define BUTTON_MOTE_UP		0x0800
    #define BUTTON_MOTE_DOWN	0x0400
    #define BUTTON_MOTE_LEFT	0x0100
    #define BUTTON_MOTE_RIGHT	0x0200
    #define BUTTON_MOTE_A		0x0008
    #define BUTTON_MOTE_B		0x0004
    #define BUTTON_MOTE_MINUS	0x0010
    #define BUTTON_MOTE_PLUS	0x1000
    #define BUTTON_MOTE_HOME	0x0080
    #define BUTTON_MOTE_1		0x0002
    #define BUTTON_MOTE_2		0x0001
    nous savons que le packet contenant les evenements appuyer/relacher commence par 0xA1 0x30 puis 2 octets pour les bouttons 0x?? 0x??

    Code:
    if (CheckSig((DWORD)Data, (DWORD)event->u.data.dataSize, (BYTE*)"\xA1\x30\xFF\xFF", "xx??")) {
    			int ButtonData = ((short)Data[2] << 8) + Data[3];
    			if (ButtonData & BUTTON_MOTE_1)
    				printf("1\n");
    			if (ButtonData & BUTTON_MOTE_2)
    				printf("2\n");
    }
    On a pu facilement isoler les packets contenant les evenements relatif aux bouttons de la wiimote
    neku, 30 Avril 2007
    #20
Statut de la discussion:
Fermée.