J'étais d'humeur aujourd'hui. J'ai développé en une après-midi un site web en PHP, MySQL, AJAX. Ce site est une copie de bashfr, mais ne se limitant pas aux seuls quotes IRC, mais prend également les blagues diverses, les proverbes et les citations célèbres. Je me suis pas appliqué sur le graphisme, comme toujours, mais la simplicité et les fonctionnalités sont au rendez-vous, tout comme la sécurité. J'ai utilisé pour la première fois captcha (très facile d'utilisation), et j'ai créé un système complet de login (login, création de compte, envoie d'e-mail, activation de compte). Les blagues envoyées peuvent être modérées avec un lien prévu, ce qui donne 4 choix à l'utilisateur : demander une suppression (insulte, diffamatoire...), proposer un reclassement (changement de catégorie), proposer une correction orthographique ou indiquer un doublon. Je déteste les doublons.
Puis dernière chose, le classement : une blague possède un classement, calculé par le nombre de vote positif et le nombre de vote total. Ceci se fait en AJAX et une même personne ne peut voter qu'une seule fois par blague.
http://www.beaudier.fr/lol
Affichage des articles dont le libellé est php. Afficher tous les articles
Affichage des articles dont le libellé est php. Afficher tous les articles
samedi 29 décembre 2007
Gagner quelques minutes sur les heures que je perds

.png)
C'était le but de ce "gros" script codé en mIRC qui m'allégeait le travail de ce jeu pénible et prenant. Il avait un buffer de 2 Mo, et écoutait systématiquement le presse-papier. Dès que l'on copiait le contenu d'une page d'Ogame, le script bufférisait le contenu. Une fois que l'on a copié tout ce que l'on voulait, le script analysait le buffer ligne à ligne. C'était des rapports d'espionage. Le but était d'éliminer les rapports inutiles (la planète visée ne contient pas assez de ressources pour l'attaquer ou est trop bien gardée), et n'afficher que les rapports suceptible de m'intéresser. Une fois la liste effectuée, il me demandait pour chacun d'eux ce que je voulais envoyer (la consomation de carburant, la durée du trajet par rapport à la distance et une estimation des pertes en utilisant speedsim m'était indiquée). A la fin, j'avais ma liste des planètes a attaquer (avec la flotte que j'ai choisi d'y envoyer). Les planètes trop bien gardée était stocké pour les "EDLMer" plus tard. Celles sans défense étaient gardée pour les raider à la sonde. Ce script n'est pas illégal étant donné qu'il ne se connecte pas au serveur. Voici quelques screenshots.
Egalement, j'ai été l'une des cibles prioritaires de nos ennemis qui voulaient me missiler mes planètes. Pour anticiper leur approche dans les systèmes environnants le mien (ou le rachat de missile de joueurs neutre), j'ai réalisé un autre script, se servant toujours du presse-papier des rapports d'espionnage, pour réaliser une cartographie des missiles, silo à missile et des ennemis, neutre ou alliés. Celà m'a permis de raider les installations ennemis avant de leur permettre d'avoir assez de missiles.
J'ai également réalisé ce petit calculateur de vitesse en C++ (de la même manière que speedsim) sauf qu'il calculait également la durée planète-lune, ce que ne faisait pas speedsim.
Sous Excel (avec l'aide de mIRC) j'ai réalisé des cartographies de phalanges ennemies...
Utile dans le début, j'ai réalisé un petit script mIRC qui calculait la prodution de mes usines, et calculait a quelle heure (en incluant les changements de vitesse de production, le manque énergétique, le pourcentage de production et les arrivages de transports de ressources alliés) les ressources demandées seront disponible, et beeper le cas échéant.
mIRC (qui aspire le presse-papier, détectant le classement statistiques) génère une liste des 1500 premiers joueurs de l'univers. En se souvenant de la dernière liste, il établie alors un différentielle entre les deux listes, voyant la progression des uns et des autres. Ce script utile permet d'une pars :- détecter ceux qui progressent vite (gros coup, HoF ?)
- détecter ceux qui progressent vite en cheatant (apport régulier de ressources)
- détecter ceux qui ont beaucoup baissé (s'est fait recyclé)
- détecter les inactifs qui ne progressent pas
Puis la page HTML ainsi générée était envoyée sur mon serveur par FTP.
J'ai par la suite réalisé un script PHP cette fois ci qui lisait le fichier "presse-papier" que mIRC envoyait par FTP. Et PHP triait dynamiquement selon un formulaire html, les informations (permettant d'avoir la différence entre 2 listes aux choix), ect..
Comme vous pouvez le constater, Ogame a été une grande source d'idée de développement :)
mercredi 26 décembre 2007
Optimisation ! maître mot

Tous les matins, je perds un temps fou, entre les news de PC Inpact, la météo du jour, le cours de mes actions EDF, le cours du baril à New York, ce qu'il y a ce soir sur TF1, mon horoscope, l'actualité internationnale ou les news d'une blogosphère francophone. J'ai décidé que ce que je fais, mon ordinateur va le faire à ma place pour gagner du temps.
J'ai créé un "portail" pour moi-même, qui rassemble toutes ces informations, pour que je gagne un temps fou, le matin. D'un simple coup d'oeil, je vois la météo, la bourse et les news. Je pense avoir gagné environ 10 minutes tous les matins, ce qui n'est pas rien. De plus, ça m'évite "d'oublier" certains site. Maintenant, je visite à toute heure !
Questionnaire à la con
Je me suis amusé il y a quelques temps a réaliser un petit questionnaire en PHP/MySQL de 100 questions. Ce questionnaire possède un "id", qui est unique. Une fois le questionnaire rempli il ne peut plus être accéder. Et inutile d'entrer des "id" aléatoire.
A la fin, le script vous donne un pourcentage (qui est ni plus ni moins qu'une formule mathématique bidon selon le nombre de case coché). La vérité est que je possède, pour chacun des ID, les réponses qu'elles ont cochés. Et comme j'ai donné l'URL avec un id précis, le questionnaire n'est pas anonyme du tout ! Ce questionnaire était pour savoir ce que les autres pensent de moi, et j'ai été assez surpris ! ...
je suis trop bavard
je dit trop de la merde
je suis trop muet au téléphone
je suis trop vulgaire
je ne dit pas assez merci
je ne dit pas assez s'il vous plait
je ne dit pas assez bonjour
je ne dit pas assez aurevoir
je suis trop timide
je contredis trop
j'ai pas assez de répartie
je ne fais pas assez preuve de tacte
je ne suis pas assez diplomate
je parle trop d'informatique
je soul trop avec mes mails ou sms
j'ai un humour de merde
je prend tout au premier dégré
je me connecte pas assez
je casse de trop
je suis trop distant
je suis trop chiant
je me mêle trop de ce qui me regarde pas
je suis trop paranoïaque
je suis trop méchant avec ma mère
je suis trop méchant avec mon frère
je me montre trop quand je baille
je manque de retenue quand je pète
je manque de retenue quand je rote
je suis trop raciste
je ne suis pas assez croyant
je suis pas assez entreprenant
je suis pas assez modeste
je suis pas assez courrageux
je suis pas assez social
j'aime de la music de merde
j'aime des films de merde
j'aime bouffer de la merde
j'ai des goûts de merde
j'ai pas assez de culture
je suis trop prévisible
je suis pas assez honnête
je suis trop pessimiste
je suis trop dépressif
je suis pas assez impliqué dans la politique
je cède trop facilement
j'assume pas assez mes actions
je ne sais pas me défendre
je suis trop hypocrite
je ne suis pas assez patient
je ne fait pas assez mes devoirs
je ne sais pas lire
je ne sais pas écrire
je ne sais pas parler
je ne sais pas compter
je suis pas assez intelligent
je fais des études de merde
t'aime pas ma gueule
t'aime pas ma coupe de cheveux
t'aime pas mon parfum
t'aime pas ma mère
t'aime pas mon frère
je suis trop petit
je suis pas assez sportif
j'ai trop de boutons
je suis trop gros
je suis pas assez poilu
je suis trop myope
je pu de la gueule
je pu de partout
je pu de trop quand je chie
je ronfle trop
je mange trop
t'aime pas mon lit
je ne m'investie pas assez dans l'humanitaire
je prend pas assez soin de mes affaires
je prend pas assez soin des affaires des autres
je suis trop radin
je donne pas assez de mon temps
je suis trop axé sur l'économie et l'environnement
j'ai trop pas de tune
j'ai un studio de merde
je suis trop fénéant
je regarde pas assez la télé
j'écoute la musique trop fort
je suis trop jaloux
j'assure pas au lit [...]
je sais pas embrasser [...]
j'aime une trop petite bite [...]
j'ai de trop grosses couilles [...]
je suis trop émotif
je suis pas assez romantique
je suis trop macho
je suis trop coincé
t'aime pas mon frère et ma mère
je suis trop vieux jeu
j'habite trop loin
je conduit mal
t'aime pas ma voiture
t'aime pas mon PC
je n'ai pas assez de loisirs
A la fin, le script vous donne un pourcentage (qui est ni plus ni moins qu'une formule mathématique bidon selon le nombre de case coché). La vérité est que je possède, pour chacun des ID, les réponses qu'elles ont cochés. Et comme j'ai donné l'URL avec un id précis, le questionnaire n'est pas anonyme du tout ! Ce questionnaire était pour savoir ce que les autres pensent de moi, et j'ai été assez surpris ! ...
je suis trop bavard
je dit trop de la merde
je suis trop muet au téléphone
je suis trop vulgaire
je ne dit pas assez merci
je ne dit pas assez s'il vous plait
je ne dit pas assez bonjour
je ne dit pas assez aurevoir
je suis trop timide
je contredis trop
j'ai pas assez de répartie
je ne fais pas assez preuve de tacte
je ne suis pas assez diplomate
je parle trop d'informatique
je soul trop avec mes mails ou sms
j'ai un humour de merde
je prend tout au premier dégré
je me connecte pas assez
je casse de trop
je suis trop distant
je suis trop chiant
je me mêle trop de ce qui me regarde pas
je suis trop paranoïaque
je suis trop méchant avec ma mère
je suis trop méchant avec mon frère
je me montre trop quand je baille
je manque de retenue quand je pète
je manque de retenue quand je rote
je suis trop raciste
je ne suis pas assez croyant
je suis pas assez entreprenant
je suis pas assez modeste
je suis pas assez courrageux
je suis pas assez social
j'aime de la music de merde
j'aime des films de merde
j'aime bouffer de la merde
j'ai des goûts de merde
j'ai pas assez de culture
je suis trop prévisible
je suis pas assez honnête
je suis trop pessimiste
je suis trop dépressif
je suis pas assez impliqué dans la politique
je cède trop facilement
j'assume pas assez mes actions
je ne sais pas me défendre
je suis trop hypocrite
je ne suis pas assez patient
je ne fait pas assez mes devoirs
je ne sais pas lire
je ne sais pas écrire
je ne sais pas parler
je ne sais pas compter
je suis pas assez intelligent
je fais des études de merde
t'aime pas ma gueule
t'aime pas ma coupe de cheveux
t'aime pas mon parfum
t'aime pas ma mère
t'aime pas mon frère
je suis trop petit
je suis pas assez sportif
j'ai trop de boutons
je suis trop gros
je suis pas assez poilu
je suis trop myope
je pu de la gueule
je pu de partout
je pu de trop quand je chie
je ronfle trop
je mange trop
t'aime pas mon lit
je ne m'investie pas assez dans l'humanitaire
je prend pas assez soin de mes affaires
je prend pas assez soin des affaires des autres
je suis trop radin
je donne pas assez de mon temps
je suis trop axé sur l'économie et l'environnement
j'ai trop pas de tune
j'ai un studio de merde
je suis trop fénéant
je regarde pas assez la télé
j'écoute la musique trop fort
je suis trop jaloux
j'assure pas au lit [...]
je sais pas embrasser [...]
j'aime une trop petite bite [...]
j'ai de trop grosses couilles [...]
je suis trop émotif
je suis pas assez romantique
je suis trop macho
je suis trop coincé
t'aime pas mon frère et ma mère
je suis trop vieux jeu
j'habite trop loin
je conduit mal
t'aime pas ma voiture
t'aime pas mon PC
je n'ai pas assez de loisirs
Ma mort ? j'y pense déjà
Je ne sais pas trop pourquoi, mais j'ai déjà pensé comment se dérouleront les choses après ma mort. Je suis peut-être bien loin de la vérité. Mais j'ai comme un "patrimoine" virtuel, enfin je rêve surement encore. Et pour y accéder, je suis en train de réaliser un portail numérique, en PHP, qui sera hébergé sur mon site www.beaudier.fr.
Première chose, un mot de passe sera demandé, et seule une personne peut le trouver, la personne qui, à l'heure où je vous parle compte le plus pour moi. Ce mot de passe n'est ni plus ni moins que le sien. Par la suite, la personne accèdera à un tableau de bord. Sa mission, pour accéder a mon patrimoine sera simple. Cliquer sur 5 boutons et attendre. Le bouton envoie un email a une personne que je connais particulièrement bien, et lui demandera de répondre a quelques questions, seulement si je suis réellement mort. Ces questions, seule la personne concernée peut y répondre, et elle n'aura pas le droit à l'erreur. Dès qu'au moins 3 des 5 personnes ont répondu au questionnaire, alors la personne pourra accéder a mes secrets.
Première chose, un mot de passe sera demandé, et seule une personne peut le trouver, la personne qui, à l'heure où je vous parle compte le plus pour moi. Ce mot de passe n'est ni plus ni moins que le sien. Par la suite, la personne accèdera à un tableau de bord. Sa mission, pour accéder a mon patrimoine sera simple. Cliquer sur 5 boutons et attendre. Le bouton envoie un email a une personne que je connais particulièrement bien, et lui demandera de répondre a quelques questions, seulement si je suis réellement mort. Ces questions, seule la personne concernée peut y répondre, et elle n'aura pas le droit à l'erreur. Dès qu'au moins 3 des 5 personnes ont répondu au questionnaire, alors la personne pourra accéder a mes secrets.
Espionner les mouvement d'un contact MSN

Etant grand conservateur, je garde toujours mes archives de conversation, mais aussi les évènements. A partir de ce fichier au format XML enregistré par MSN Plus!, je peux couvrir, selon mon temps de connexion une grande période. Ainsi, je peux déterminer en moyenne, les temps de connexion de mes contacts, leurs habitudes.
Quelques petites améliorations restent encore à apporter tel-que :
- si le contact se déconnecte avant que j'ai trouvé sa connexion : alors le contact était connecté avant moi
- et d'autres ? utiliser alors si possible les autres évènements (changement de status, de pseudo, d'avatar, de sous-pseudo...)
Transformée de fourrier lente 2D
Bon les maths c'est pas mon truc. J'ai vaguement compris ce qu'était la transformée de fourrier, et il fallait l'implémenter dans le langage de notre choix. J'ai commencé en PHP, le langage le plus commode :
J'ai d'abord découpé l'image d'entrée en un tableau d'entier a deux dimentions (entier équivalent à unsigned char). Ceci était pour optimiser la vitesse de lecture des pixels.
J'ai ensuite 4 boucles imbriqués qui, pour chacun des pixels (i, j), alors faire la somme d'un calcul complexe pour chacun des pixels de l'image (i,j).
Puis la recomposition de l'image en écrivant pixel par pixel les valeurs du tableau.
Problème, l'implémentation des complexes, notamment exp(-2*i*val) était ennuyeuse. J'ai sèché. Le problème a été résolu en C#, après avoir revu des formules sur les complexes : j'aurai du écouter en terminale !
J'ai d'abord découpé l'image d'entrée en un tableau d'entier a deux dimentions (entier équivalent à unsigned char). Ceci était pour optimiser la vitesse de lecture des pixels.
J'ai ensuite 4 boucles imbriqués qui, pour chacun des pixels (i, j), alors faire la somme d'un calcul complexe pour chacun des pixels de l'image (i,j).
Puis la recomposition de l'image en écrivant pixel par pixel les valeurs du tableau.
Problème, l'implémentation des complexes, notamment exp(-2*i*val) était ennuyeuse. J'ai sèché. Le problème a été résolu en C#, après avoir revu des formules sur les complexes : j'aurai du écouter en terminale !
CSG to Voxel
Bien que ce n'est pas un langage que l'on utiliserait habituellement pour faire ceci, je dois dire que l'implémentation des expressions régulières en PHP est si simple, que le PHP devient dans ce cas un langage très utile.
J'ai créé un convertiseur de fichier CSG (*.pov, de PovRay) vers un autre fichier CSG mais qui ne créé lui que des voxels (pixels volumétriques).
Dans un premier temps, je traite le fichier d'entré pour éliminer les parasites (les structures de contrôle, les commentaires, les lignes vides), puis je met les accolades au bon endroit.
Ensuite je parcours ce fichier ainsi nettoyé pour traiter les formes a dessiner en 3 temps. Premier temps, est la détection de la forme : { . A partir de ceci, toutes les lignes suivantes, sauf si cette ligne vaut précisément }, alors fait parti de la définition de la forme. Selon la forme courante, j'attends différents paramètres (coordonnées, diamètre, rotation, translation) que je stock dans un tableau temporaire, lequel est lu lors de la détection de l'accolade fermante (accolade qui doit être de la même profondeur que lors de l'ouverture avec la définition de la forme) et j'écris sur le fichier de sortie mes Voxels.
J'ai créé un convertiseur de fichier CSG (*.pov, de PovRay) vers un autre fichier CSG mais qui ne créé lui que des voxels (pixels volumétriques).
Dans un premier temps, je traite le fichier d'entré pour éliminer les parasites (les structures de contrôle, les commentaires, les lignes vides), puis je met les accolades au bon endroit.
Ensuite je parcours ce fichier ainsi nettoyé pour traiter les formes a dessiner en 3 temps. Premier temps, est la détection de la forme :
Poster un article sur skyblog en PHP:
C'est ma dernière réalisation, un simple script PHP:
if($_SERVER['REQUEST_METHOD'] !== "POST") die("E600");
if(!isset($_POST['titre']) || !$_POST['titre'] || !isset($_POST['text']) || !$_POST['text']) die("E601");
$login = "need_login_form_login=login&need_login_form_password=pass";
$file = fsockopen("www.skyrock.com",80);
if(!$file) die("Impossible de se connecter");
$header = "POST /blog/?connect=1 HTTP/1.1
Host: www.skyrock.com
Content-Type: application/x-www-form-urlencoded
Content-Length: ".strlen($login)."
Connection: close
$login";
$str = "";
fwrite($file, $header);
while($resp = fread($file, 100)) {
$str .= $resp;
}
$tab = explode("\r\n", $str);
ereg("PHPSESSID=([0-9a-f]+);", $tab[3], $reg);
$PHP = $reg[1];
$file = fsockopen("www.skyrock.com",80);
if(!$file) die("Impossible de se connecter");
$header = "GET /m/blog/article_new.php HTTP/1.1
Host: www.skyrock.com
Cookie: PHPSESSID=$PHP; number_of_failed_login=deleted; locale=fr_FX;;
Connection: close
";
$sendme = 0;
fwrite($file, $header);
while($resp = fread($file, 10000)) {
if(ereg("\"sendMe\" value=\"([0-9a-f]+)\"", $resp, $reg))
$sendme = $reg[1];
}
$titre = $_POST['titre'];
$text = $_POST['text'];
$str = "title=".urlencode(utf8_decode($titre))."&text=".urlencode(utf8_decode($text))."&online=1&media=none&align=0&sendMe=$sendme&save=Continuer";
$file = fsockopen("www.skyrock.com",80);
if(!$file) die("Impossible de se connecter");
$header = "POST /m/blog/article_new.php HTTP/1.1
Host: www.skyrock.com
Cookie: PHPSESSID=$PHP; locale=fr_FX; connected=1;
Content-Type: application/x-www-form-urlencoded
Content-Length: ".strlen($str)."
Connection: close
$str";
fwrite($file, $header);
echo "OK";
?>
if($_SERVER['REQUEST_METHOD'] !== "POST") die("E600");
if(!isset($_POST['titre']) || !$_POST['titre'] || !isset($_POST['text']) || !$_POST['text']) die("E601");
$login = "need_login_form_login=login&need_login_form_password=pass";
$file = fsockopen("www.skyrock.com",80);
if(!$file) die("Impossible de se connecter");
$header = "POST /blog/?connect=1 HTTP/1.1
Host: www.skyrock.com
Content-Type: application/x-www-form-urlencoded
Content-Length: ".strlen($login)."
Connection: close
$login";
$str = "";
fwrite($file, $header);
while($resp = fread($file, 100)) {
$str .= $resp;
}
$tab = explode("\r\n", $str);
ereg("PHPSESSID=([0-9a-f]+);", $tab[3], $reg);
$PHP = $reg[1];
$file = fsockopen("www.skyrock.com",80);
if(!$file) die("Impossible de se connecter");
$header = "GET /m/blog/article_new.php HTTP/1.1
Host: www.skyrock.com
Cookie: PHPSESSID=$PHP; number_of_failed_login=deleted; locale=fr_FX;;
Connection: close
";
$sendme = 0;
fwrite($file, $header);
while($resp = fread($file, 10000)) {
if(ereg("\"sendMe\" value=\"([0-9a-f]+)\"", $resp, $reg))
$sendme = $reg[1];
}
$titre = $_POST['titre'];
$text = $_POST['text'];
$str = "title=".urlencode(utf8_decode($titre))."&text=".urlencode(utf8_decode($text))."&online=1&media=none&align=0&sendMe=$sendme&save=Continuer";
$file = fsockopen("www.skyrock.com",80);
if(!$file) die("Impossible de se connecter");
$header = "POST /m/blog/article_new.php HTTP/1.1
Host: www.skyrock.com
Cookie: PHPSESSID=$PHP; locale=fr_FX; connected=1;
Content-Type: application/x-www-form-urlencoded
Content-Length: ".strlen($str)."
Connection: close
$str";
fwrite($file, $header);
echo "OK";
?>
Inscription à :
Articles (Atom)