[Trucs & Astuces]

Statut
N'est pas ouverte pour d'autres réponses.

SkYlEsS

Elite
: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]
SkYlEsS a dit:
Forcer le rafraichissement d'une image grâce à la fonction time() de php:

Code:
echo '<img src=“image.jpg?[COLOR=DarkOrange]time()[/COLOR]” alt="" />';
Ez3kieL a dit:
Quand vous avez besoin de mettre une image dans le cache du navigateur (pour un script en js par exemple), vous créez un <div> qui contiendra les images en arriere plan :

Code:
 <div id="#miseEnCache">
Code:
 #miseEnCache
{
    background-image: url('img1.jpg');
    background-image: url('img2.jpg');
    display: none;
}
SkYlEsS a dit:
Pour adapter automatiquement un élément à 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 ... :)
[gv3titre]PHP / MySQL[/gv3titre]
Ahava a dit:
Astuce 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 exemple :

Code:
$bla = array();
foreach($source as $obj)
{
    $bla[[COLOR=DarkOrange]count($bla)[/COLOR]] = new Blabla($obj->id,$obj->name,...);
}

Ez3kieL a dit:
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($_GET[$key]))
        {
            $_GET[$key] = htmlentities(stripslashes($_GET[$key]), ENT_QUOTES);
        }
    }
}
[gv3titre]JavaScript[/gv3titre]

[gv3titre]Ajax[/gv3titre]

[gv3titre]Assembleur[/gv3titre]

[gv3titre]C / C++[/gv3titre]
neku a dit:
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êtes :
Code:
#include <Carbon/Carbon.h>
#include <CoreFoundation/CoreFoundation.h>
Et le link :
Code:
-framework CoreFoundation
neku a dit:
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();
[gv3titre]Java[/gv3titre]
 

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,...);
}
 
1er
OP
SkYlEsS

SkYlEsS

Elite
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)
 

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 !
 
1er
OP
SkYlEsS

SkYlEsS

Elite
Je compte simplement réaliser plusieurs listes :)
 
S

Shrekju

ex membre
Ahava a dit:
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,...);
}
Le gain en mémoire ne vaut pas toujours le gain en ressource.
Sinon $bla[] = 127;
 

Ahava

Revenant
SkYlEsS a dit:
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)
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

Revenant
Shrekju a dit:
Le gain en mémoire ne vaut pas toujours le gain en ressource.
Je sais, c'est ridicule comme truc, j'ai pas dit le contraire, mais j'aime bien :p
 
1er
OP
SkYlEsS

SkYlEsS

Elite
Ahava a dit:
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...
Tu n'aurais pas un exemple concret ? Parce qu'j'ai franchement du mal là :]
 

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);
            }
        }
    }
 

Calvin80

Respect is key
Ez3kieL a dit:
* Traite les $_GET & $_POST en convertissant tout les symboles en leur équivalent HTML */
POST et GET ? pkoi ne pas utiliser REQUEST dans ce cas ?
 

Ezekiel !

Elite
Ouep t'as raison on peut tout faire en une boucle ^^
C'est pcq à la base je traitais juste les $_POST :p
 

Calvin80

Respect is key
je pense qu'on peut meme tout faire en une ligne avec array_walk ;)
 
W

whatever42

ex membre
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);
            }
        }
    }
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.
 

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();
 
1er
OP
SkYlEsS

SkYlEsS

Elite
'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)
 

zoheir

cvm.mangaleet()
neku a dit:
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();
nice :)
 

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
 
1er
OP
SkYlEsS

SkYlEsS

Elite
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 :]
 

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
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut