7

vendredi 18 mai 2018

Le rechaufement climatique et les e-mail

Au moment ou j'ai voulu rédiger cette article, je me suis dis, "tien me faut une image avec un ecolo super chiant", comme j'ai pas trouvé ...

Notre écolo super chiant c'est lui, un peut d'imagination.

Bon alors, c'est quoi ton problèmes avec les mails, mec!
J'ai pas de problèmes avec eux moi, mais la population ecolo est généralement faché contre eux. Surtout contre Gmail, comme si il n'y avait qu'eux a conserver des données inutiles et a fournir un service e-mail ...
Ba wé quoi, ce sont des con, ils utilise de l'énergie pour garder mes spam ...
Non non non non non ... mais oui.


Il y a effectivement de gros problèmes de consommations de ressources avec les e-mail, quand on regarde les chiffres donné par arobase.org (on vas les croire sur parole, leurs source radicati.com proposant son rapport pour 2500$ ...) on peut constater que le trafique est énorme et qu'il ne va pas baisser demain.

Je ne doute pas du fait que les géants du web aient réfléchies a comment y remédier, mais cela nécessiterais probablement un changement de vos habitudes et de renoncer au flicage, pour ex sur mon serveur e-mail, temps qu'un e-mail n'est pas rangé dans un dossier il est considéré comme a supprimer, et après 7jours d’existence il l'est effectivement.

C'est une méthode vraiment simple et efficace pour ne conserver que l'utile, mais qui implique que chacun soit responsable de sa communication, si vous ne rangez pas un message important il est supprimé c'est votre faute, alors que pour le moment un message perdu il est possible de mettre ça sur le dos de votre fournisseur mail.

Je me demande donc si les utilisateur sont prêt a assumer leurs responsabilité. A cette question il me semble que non, l'utilisateur reprochant a google d'utiliser de la place pour des e-mail poubelle, n'est pas pret a entendre qu'il est responsable de la place utilisé du fait qu'il ne prenne pas la peine de triller.

En ceci je trouve mon approche meilleur. J'ai la flemme de triller, mais en sachant que je risque de perdre des e-mail important je prend la peine d'archiver ce que je veux garder. Vient aussi qui est plus simple et rapide d'archiver 2mail que de devoir en supprimer 10 par jours.


Alors utilisateur, prends garde et abstiens toi de critiquer, supprime ce qui n'a pas d'utilité, car un jour, la main tu te verra forcé, et comme un benêt tu seras, face a tes e-mail supprimé. (ou alors on raseras peut être ton village pour un nouveau data center)



Je n'ai pas l’habitude d'écrire ce genre d'article, mais par moment il y en a qui ont vraiment le dons de vous courir sur le haricot :')



éa, les amis.

vendredi 11 mai 2018

[Scaleway] Avoir un OpenBSD (ou autre) sur les serveurs Scaleway

Moi: Vous savez quoi?
Vous: nan, mais tu vas nous le dire !
Moi: En serveur, je préfère grandement un OpenBSD a un Gnu/Linux
Vous: Et pourquoi donc ?
Moi: Pour pleins de raisons, comme son PF, HTTPD, SMTPD ...
Vous: Moué, enfin SMTPD il est aussi sur d'autres os, puis OpenBSD est pas disponible de base, et les solutions trouvé jusque là sur le net sont pas pratiques, et c'est compliqué et blabla bla ...

Je suis pas aussi confiant que Barney pour le coup ...

[Musique de Rocky]

But:
  • Installer un OpenBSD sur les serveurs x86 de chez scaleway
  • Pouvoir contrôler l'Os depuis l'interface scaleway
  • Ne pas devoir passer par une manipe manuel a chaque boot
  • Pouvoir en faire une image prés config a déployer
  • Que ça tourne sur les x86 des gammes Start/BareMetal/Pro
* C'est la win
** C'est la loose pour le moment
Observations:
  • Avec "fdisk -l" on constate une partions EFI
  • Sans OS sur le disque, le serveur "hard reboot" puis passe en mode off
  • En écoutant le port 80 au boot on peut surprendre une discutions avec 169.254.42.42
    • xxx IP xxx > 169.254.42.42.http: Flags [P.], seq 1225680221:1225680383, ack 1681506505, win 229, options [nop,nop,TS val 6113219 ecr 329066878], length 162: HTTP
      E...".@.@...
      .B...**.z.PI.e]d9......!......
      .]G...)~PATCH /state HTTP/1.1
      Host: 169.254.42.42
      User-Agent: curl/7.52.1
      Accept: */*
      Content-Type: application/json
      Content-Length: 26

      {"state_detail": "booted"}
    • 17:13:11.459660 IP 169.254.42.42.http > xxx: Flags [P.], seq 1:164, ack 162, win 235, options [nop,nop,TS val 329067003 ecr 6113219], length 163: HTTP: HTTP/1.1 200 OK
      E.....@.;.4...**
      .B..P.zd9..I.e............
      ..)..]G.HTTP/1.1 200 OK
      Server: Tengine
      Date: Tue, 08 May 2018 17:13:11 GMT
      Content-Type: text/plain
      Content-Length: 20
      Connection: keep-alive

      STATE_DETAIL=booted
  • Avec un petit grep -rn on trouve un script contenant "state_detail" nomé scw-signal-state
Solution:
  1. Créer un serveur x86 64 avec un volume 50G pour OpenBSD
  2. Installer qemu et Dl miniroot**.fs
  3. New VM miniroot**.fs et en utilisant le volume prévus
    qemu-system-x86_64 -curses -drive file=miniroot**.fs -drive file=/dev/vdb -net nic -net user
  4. Installer OpenBSD comme vous voulez, sauf pour: 
    • IPv4 address for em0? (or 'dhcp' or 'none') [dhcp]
    • Change the default console to com0? [no] yes (Pour utiliser la console en ligne)
    • Which disk is the root disk? ('?' for details) [wd0] wd1
    • Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole] G (Partition GTP pour EFI)
    • Installez BSD.mp affin d'étre en kernel MultiProcessor (il fonctionne aussi en sigle core) 
    • A la fin de l'install, copier la hostname pour l'interface vio0 (nom de l'interface des vps sous OpenBSD)
      # cp /etc/hostname.em0 /etc/hostname.vio0
  5. Quand c'est fini on éteins tout, on fait un snapshot du volume et création d'un nouveau serveur avec ce snapshot
  6. /*ATTENTION le serveur hard reboot après quelques minutes temps que l'on send pas la validation, pour finir en erreur */
  7. Une fois le serveur boot, il faut installer curl (et wget d'apres moi), puis mettre en place le script scw-signal-state (j'ai hébergé les script, car je ne les ai pas trouvé en ligne)
  8. Vous pouvez éteindre le serveur et openBSD afin de faire un snapshot stable.
- Si le signal n'est pas envoyé, peut étre que votre PATH est mal renseigné, un petit "whereis curl" afin de vérifier ça.
- Si il est impossible de résoudre les nom de dommaines, modifiez votre /etc/resolv.conf en ajoutant par ex le name serveur de google 8.8.8.8. Le temps de fixer ça plus tard

A ce moment là vous pouvez réaliser une image d'installation dans votre interface avec le snapshot précédemment crée.

Vous trouverez ici : https://git.iglou.eu/NonIgImport/Scaleway-scripts/tree/master le repos ou j'ai upload deux script scw-*, celui qui send le "booted" et un autre qui vous renvois toutes les informations relatives au serveur. J'ai aussi mis une version modifié de scw-signal-state, qui fait un loop temps qu'elle n'a pas put effectué l'envoi du signal, car j'avais de temps en temps un signal envoyé avant que le serveur soit connecté.

Et ça ne fonctionne que sur la gamme start, donc un petit fail quand même !


Pour les serveurs BareMetal et Pro, n'ayant pas la possibilité d’accéder au local boot, grub ou iPXE ... C'est pas gagné. Mais je reste en recherche !

Rien ne devrais empêcher cette "technique" de fonctionner avec n'importe quel Os.

Si vous avez des question, ou des améliorations a me proposer, je reste disponible :)


éa, les amis.

samedi 3 février 2018

[Imprimante 3D] Offset Z, Sonde et astuce ATX

Bonjours a tou·te·s,
Waaoooo, bien tôt 1ans sans articles, je suis tout ému !


“I do not understand why the Designer chose to put such flaws into the world, that it appears almost as if it were damaged. But I must believe that there is a purpose here I cannot see.” – 1w/Faith v10.3.0047f

Voici Le grand jour enfin arrivé ! M'armant des derniers outils de notre époque, la pointe de la technologie, dons un tourne vis et un marteau. Je fis route vers ma destiné, depuis longtemps tracé.

Cette .... quête, fut un combat acharné de 24h, a la suite des quel je put crier dans ma victoire "J'AI UNE IMPRIMANTE 3D !".

Quel bonheur de pouvoir s'adonner a la passion de créer et réaliser ce qui fut par le passé hors de notre portée. Mais en réalité ... ça doit bientot faire 2semaines et je n'ai toujours pas fini de calibrer ce truc, depuis le début j'imprime des boites, des benchs et un bateau !

Du coup je vous fais un petit article, sur ce que j'ai compris, appris et que je n'ai pas ou peut trouvé malgré mes innombrables recherches.


Ainsi parla Norihiori le sage:


1) "Ton beau plateau, ta plaque de verre, ton aluminium tu n'utiliseras point pour te faire la main."

Effectivement, j'ai eu la chance de ne PAS avoir de plaque de verre a la bonne taille et me suis donc retrouvé avec une planche d'un vieux meuble IKEA. Quel chance, car vue les trous et les rainures, je n'aurais pas aimé expérimenter ça sur du verre, ou autre.





2) "Pour ton offset ne pas te casser la tête."
  • Calibrer son axe Z (100mm demandé bouge de 100mm)
  • Faire un G28 pour définir le Zero de la sonde
  • Désactiver les Software Endstop afin de pouvoir ce déplacer en négatif avec M211 Z0 S0
  • Prendre une feuille de papier 0.1mm et la poser sur le bed
  • Faire descendre l'axe Z petit a petit (1mm>0.1mm>0.02mm) pour toucher la feuille 
  • Voila vous êtes à 0.1mm du bed, si vous descendez encore de 0.1mm vous serez a zéro (ne faites pas ça ...)
  • Vous pouvez définir cette valeur négative comme étant zero et faire des testes pour arriver a faire de jolies couches et définir votre zero final (putain c'est aussi chiant que de chercher le Graal)
  •  


3) "Si la mémoire eeprom est activé, ne pas l'oublier, car comme un benêt, tu serais bien embêté."

Burn-Out
Si vous avez Marlin (je ne connais pas les autres), et avez activé la mémoire interne ... il ne faut pas l'oublier. Car les modification effectué en flashant le firmware ne seront prises en compte qua la réinitialisation de cette mémoire. Sachant que j'ai tout défini en dur ... avoir oublié de réinitialiser cette mémoire m'a jouer des tours.

Pour vider l'eeprom et réinitialiser avec les valeurs du programme (ce que l'on a compilé et flashé), utilisez M710







4) "Une sonde tu as, alors a chaque print tu ne proberas pas" (notez l'inventivité de ma langue française)

Si vous avez activer l'eeprom, il es possible de stoker en mémoire "aplanissement virtuel du plateau" comprenez la commande G29 (nota. sous smoothieware c'est l'utilisation de G32, le résultat est automatiquement mis en mémoire).
Pour ce faire, on fait un G28 histoire de tout remettre a zero et on prob le bed avec G29, une fois fini on demande a l'imprimante de nous garder ça au chaud avec un M500. Et voila c'est en mémoire !
Pour l'utiliser il est cependant nécessaire de le demander a l'imprimante avec un M420 S1 avant chaque print (placez le aprés un G28 dans votre start script G-code)




5) "Et Elohim dans sa grande bontés, les ATX créa."

Il est possible de "piloter" les alimentation atx avec les ramps 1.4, il serait dommage de ne pas en profiter ... Suivez le guide
La petite image sous gimp pour l'occasion !
Pour activer ce support c'est dans Configuration.h:

  • #define POWER_SUPPLY 1
  • #define PS_DEFAULT_OFF // L'imprimante reste éteinte par default
Une fois ceci fait, vous pouvez allumer l'imprimante avec M80 et l'éteindre avec M81; Pour ma part j'ai ainsi mis un M80 dans mon script Gcode de début et un M81 dans mon Gcode de fin.
Du coup l'imprimante s'allume pour un print et s’éteint a la fin.



6) "Boucher, est celui qui débitera sans ventiler."

Mais où donc il ce branche ce ventilo, non mais c'est vrais, le ventilo pour le radiateur de la buse, il ce branche où ? Non parce-que sur tous les schémas il y a un ventilo sur branché sur D9, mais ça c'est des conneries ! D9 c'est pour le ventilateur destiné au refroidissement des pièces ou a une deuxième résistance chauffante.
Je joue du gimp ce soir !





6) "Pousser n'est pas jouer."

Pour l'axe Z on utilise généralement deux moteurs, le problème est qu'il faut pousser le pololu au cul pour qu'il veule bien faire bouger les deux, il y a donc plus de risque de l’endommager. Ou alors on utilise un autre pololu a la place du 2eme extrudeur qui sera utilisé pour le 2eme moteur de l'axe Z.

L'option est prévue par marlin sur les RAMPS uniquement et dans le fichier Configuration_adv.h

  • #define Z_DUAL_STEPPER_DRIVERS


SOURCES: 

- IRC freenode #reprap-fr
- http://reprap.org/wiki/G-code
- http://reprap.org/wiki/RAMPS1.4
- MakerBot Z calibration
- https://github.com/ErikZalm/Marlin/blob/Stable/Marlin/Configuration.h

Comme toujours si je raconte des conneries, dites le moi, ça évitera au clampin qui passe dans le coin d'appliquer celle-ci.
éa, les amis.

mercredi 24 mai 2017

Installer un windows depuis "n'importe" quel OS

Salut à tous,
haaa ces produits windows de chez M$, quel merde, et dire qu'il y a des moments ou l'on ne peut pas s'en passer .... Merci les solutions proprio -_-

Cette solution fonctionne sur tout Os ayant de la virtualisation (virtualbox ici)


Que ce soit pour flasher des dispositifs chinois,
Maj mon vieux GPS (qui est 100% pas libre, 100% fermé et 100% mal foutu),
Debug un prog dont on ne penserais jamais être utilisé sous Windows,
...
Enfin bref, il y a des moments il faut faire avec !

--- L'angoisse ---

Si vous n'avais pas un CD, une clé USB avec W$ ou un hdd avec tout de bien installé ... Ça peut vraiment être ennuyeux.

Vous avez peut être déjà tenté la création d'une clé avec une iso windows depuis un Gnu/Linux, encore pire depuis un BSD ou Solaris (il y en a qui ont de drôles d'idées), bah vous savez que ce n'est pas amusant.

Pour les autres, prenez des tools simple comme "dd if/of", liliusb, unetbootin et tous ces truc là, bah ça fonctionne pas !

Je vous parle pas des solutions dédiées qui sont super chiante à mettre en place, des petites astuces bancales, ou des programmes aux interminables problèmes.

--- La Solution ---

L'idée est d'utiliser la virtualisation, genre virtualbox (il y en a qui doivent me voir venir) et de définir un disque physique comme disque virtuel. 

TADAM, vous en voulez plus ? Bah c'est partis pour la pratique :)

Note: Dans l'exemple, je vais utiliser un disque e-sata nommé /dev/sde

1) On connecte le dispositif de stockage (ne pas oublier que W$ n'aime pas trop être sur autre chose que du sata ou e-sata)

2) Création d'une nouvelle table de partition sur le dispositif, histoire de faire propre (si vous savez pas comment on fait, utilisez gparted, profitez en pour noter le nom de votre dispositif)

3) Création d'un disque virtuel depuis le disque physique
"# VBoxManage internalcommands createrawvmdk -filename /tmp/w7.vmdk -rawdisk /dev/sde"

4) Lancement de VirtualBox et création d'une nouvelle box, on configure ça suivant le windows choisi, pour le disque on sélectionne "disque existant" puis notre disque virtuel vmdk

5) On fait comme dab (iso dan slecteur etc ...) et on débute l'installation de windows normalement

6) J'ai choisi d’arrêter à la fin de la 1ère étape d'installation quand il y a plus besoin du CD (ça fonctionne probablement, même en allant jusqu'au bout)

7) On coupe virtualbox, déconnecte et reconnecte le dispositif à l'ordi qui doit l'utiliser

8) On boot et fini l'install  de ce p***** de windows !

--- TADAM ---

 Il y a pas à chier c'est super simple, j'ai été confronté à une seule erreur "Windows: erreur STOP:0x0000007B" qui venait du fait que j'avais connecté le HDD en USB, une fois passé en e-sata plus de probléme.

 Pour faire tous ça je n'ai utilisé que le root, même pour vitualbox, mais j’étais sur une live, je ne pense pas que je lancerais un programme graphique en root sur mon install de boulot.



éa, les amis.

lundi 30 novembre 2015

[PHP] Utiliser ncurse pour des petits projets php

Alors oui, le curse c'est pas vraiment aimé, puis on en croise de moins en moins. N’empêche que j'aime bien ça,  c'est classe et faire du curse en php c'est rigolo.


La lib Ncurse pour php est "standard" et le man Ncurse peut du coup être utilisé.

Pourquoi  faire ce petit article ?
Pour présenter la lib en php, faire une petite introduction du fonctionnement ...
Au final cette article est peut étre plus pour moi qu'autre chose.

! ATTENTION !
Les programmes écrit en C ont généralement deux fonctionnement True/False.
1) Ceux qui utilisent -1 en cas d'erreur et sinon 0 (plus répandus);
2) Ceux qui font l'inverse (plus classique);
Ncurse est le 1er cas, ne l'oubliez pas dans vos structures de testes.

Installation :
- Installer Ncurse
- Installe PECL
- $ svn checkout http://svn.php.net/repository/pecl/ncurses/ ncurses
- $ cd ncurses/tags/ncurses-1.0.2/trunk/

// J'ai un problème avec cette extension et PECL du coup ...
- $ pecl build

// Sois je copie a la main (crade)
- # cp <LienRetournéParPecl> /usr/lib/php/modules/

// Sois je compille puis install
- $ ./configure && make
- $ sudo make install OU # make install

Les pages a garder sous la main :
- Les couleurs prés définies
- Les Clés du clavier (les clés sont des int 8bit)
- Les actions de souris
- La liste des fonctions de Ncurse (a utiliser avec un ctrl+f)

La base :

Initialiser ncurse puis le détruire.
je vous donne le contenu de mes fonction, la source à la fin.
// Initialisation de la lib
ncurses_init();
// Désactivation de la souris
ncurses_curs_set(0);

// Vérifier si les couleurs sont supporté et les activer
if (ncurses_start_color() === -1) {
    exit('ERR : ncurses_newwin => Color not supported !');
}

// On enregistre la nouvelle window; // (0, 0, 0, 0) = Nombre de rangés, de colonnes, position x, y
$this->window = ncurses_newwin(0, 0, 0, 0);

// On check si la fenêtre est bien initialisé
if ($this->window !== -1) {
    ncurses_refresh();
    // Taille de la fenêtre,  STDSCR = default window, retourne height/width
    ncurses_getmaxyx(STDSCR, $this->size['height'], $this->size['width']);

    ncurses_noecho(); // Ne rien afficher d'exterieur
} else {
    exit('ERR : ncurses_newwin => FAIL !');
}

Histoire d'utiliser exit() proprement on utilise ici __destruct()
    private function __destruct() {
        $this->envSound();
        ncurses_end();
    }
Pour check les inputKey c'est simple, a savoir que les fonction de ncurses sont bloquantes donc pas vraiment intéressantes ... L'astuce est tout simplement d'ouvrir stdin en lecture, le définir comme non bloquant, puis de le lire ... Easy ! Il ne reste qu'a faire un switch pour gérer l'action de vos input.
    private function getStdin()
    {
            $stdin = fopen('php://stdin', 'r');
            stream_set_blocking($stdin, false);
            $this->usedKey = fread($stdin, 1);
    }

En gros voici la base, aprés il y a deux trois fonctions utile qu'il peut étre compliqué a comprendre ou trouver.

Ma fonction de "d'affichage" ce compose de :
- ncurses_wclear // Vide la fenetre
- ncurses_wrefresh // Rafraichir la fenetre
- ncurses_getmaxyx // Reprendre la taille de la fenêtre pour s'adapter a un resize
- ncurses_border // Retirer toutes bordures
pour ce qui concerne le petit coup de nettoyage avant affichage,
 - ncurses_wattron // Remplace les attributs de la fenêtre taille de police, couleur de fond ...
 - ncurses_wattroff // Retour a la normale
 - ncurses_wcolor_set // Changer les couleurs, dépends des couleurs déclaré avec ncurses_init_pair
voila ce qui concerne la partie mise en forme, puis un petit coup de rafraichissement
 - ncurses_wmove // Sortir le curseur du champ (dans ce cas précis)
 - ncurses_wrefresh // Rafraichir la fenetre

Pour gérer l'affichage de char on utilise juste
ncurses_wmove // Bouger le curseur où l'on veut afficher le char
ncurses_waddstr // Ajouter un char a l'emplacement du curseur
Il suffit de faire une boucle pour afficher une string

--- --- ---

Ba rien qu'avec cette mini base là il est possible de faire tout ce que l'on veut ou presque, que ce soit du jeux comme des logiciels. C'est vraiment super simple et pour les personnes qui ne font que du php ça fait le job !

La lib est pas vraiment pas lourde, elle ne bloque pas php (contrairement a php-gtk)
et est simple d'utilisation. En même temps cette lib a toujours était génial, php ou pas.

Voici la source de mon petit snake, bien sur il y a beaucoup d’améliorations possibles, je ne fais notamment que trés rarement du PHP OO, là ce fut un choix pour la porté des variables principalement, et la volonté de faire ça "propre" mais en un seul fichier.
C'est codé pas trop salement et en quelque heures sur deux jours.
http://inuit.iglou.eu/iglou.adrien/Snake/blob/master/snake

Prochaine fois petit tour sur PHP-GTK histoire de pas trop en chi*r si vous voulez débuter avec, je nais pas fini mon projet avec et ne le finirais jamais ...
C'est insupportable (pour moi) de ne pas gérer mes boucles et interactions à la main.



éa, les amis.

samedi 28 novembre 2015

[PHP] Benchmark a base de XDebug et graphiques by kcachegrind

Des bench, des bench, oui mais des bench xdbug !


Alors on trouve des Bench php partout sur le net, mais de deux choses l'une (ou plus):
- Ils ne sont pas actualisé
- La version php et les infos serveurs ne sont pas indiqué
- Chaque bench en contredis d'autres
- Ils utilisent time() et microtime()(plus rarement), n'utilisent pas les fonctions de math ... et presque jamais $_SERVER['REQUEST_TIME']
- Le temps d’exécution est en variation constante, il est donc logique de faire des résultats relatif (%)

Débutons donc avec ces bench qui sont peut être complétement débiles, mais tester par soi même avec des approches différentes c'est sympa :)

Toutes les sources et images sont dispo ici : https://git.iglou.eu/adrien/benchmark_php/tree/master

Méthode :
J'ai volontairement fais des scripts simples avec beaucoup de répétitions, j'ai tenté d'équilibrer le plus possible entre les entités à tester.
Pour tester les entités avec XDB et KCG, chaque entités est dans une fonction.
Les loop sont de 100.000 et ils sont externe à la fonction de l'entité testé, afin de ne pas la prendre en compte dans le résultat.
On obtiens la moyenne par fonction "TempsPour100.000/100.000" tout simplement ... TP100k étant le résultat de la définissions de main par les fonctions

Infos serveur :
- Serveur virtuel utilisé uniquement en teste
- 8Go ram
- 4core 3Ghz

Infos logiciel :
- Archlinux kernel 4.2.4
- Apache 2.4.17-2
- XDebug 2.3.3-1
- Php 5.6.14-1

Infos php :
- Cache désactivé
- GC activé
- Xdebug seulement le profileur est activé

Résultats :

Parcourir un tableau,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_arrayLoop.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_arrayLoop.php

k = key; v = value; Pv = pointer to value;
Opérateurs de comparaison (égal et n'est pas égal),
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_comparisonOperators.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_comparisonOperators.php


Définir un array,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_deffineArray.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_deffineArray.php


Utilisation de echo,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_echo.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_echo.php


Utilisation de echo pour plusieurs variables (concat),
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_echo_multiVar.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_echo_multiVar.php


Définir des variables globales,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_globalVariables.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_globalVariables.php


Is array ?
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_isArray.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_isArray.php


Afficher une chaine,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_outputAString.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_outputAString.php


Concaténation d'un chaine,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_stringConcat%C3%A9nation.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_stringConcatenation.php


If ou Switch ?
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_switch.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_switch.php


Unset me,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_unset.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_unset.php


Pour ce qui est des licences vu que quand ont partage un truc c'est obligatoire si non vous ne pourrez pas réutiliser quoi que ce soit...
Je conserve la paternité, c'est obligatoire en france.

Donc pour le code :
/*
* Copyright 2015 Kara adrien
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

Pour les images :
Attribution (BY): Le titulaire des droits autorise toute exploitation de l’œuvre, y compris à des fins commerciales, ainsi que la création d’œuvres dérivées, dont la distribution est également autorisé sans restriction, à condition de l’attribuer à son l’auteur en citant son nom. Cette licence est recommandée pour la diffusion et l’utilisation maximale des œuvres.

Comme toujours si vous relevez des erreurs, merci de m'en faire part ça compte dans mes remises en question quotidiennes =D

Si je fais d'autres bench ils seront ajouté ici, peut probable de pondre un autre sujet pour ça. Sauf si les prochains bench sont sous PHP7.



éa, les amis.

vendredi 27 novembre 2015

[recette] Poéle à gaufres

Il y a bien longtemps que je voulais me prendre une poêle a gaufres, c'est pas trop gros et ça se range dans le placard.


On veut bien adrien, mais c'est bon ton truc ?
Ba ... De base non ! Ça ne ressemble vraiment pas au gout d'une gaufre, mais on y reviendra.

Et ça à quel tronche, c'est présentable au moins ?
C'est a dire que ... Nan c'est pas vraiment "présentable" non plus on dirait un genre de gaufre mais en beaucoup plus ... Moins ... Enfin voila quoi.

Mais du coup ça t'as pas fait chier d'acheter ça ?
Au départ j'étais vraiment, mais vraiment pas joice. Puis avec 2/3 expérience ça c'est amélioré.

Alors la recette en question, trouvé sur le net et légèrement modifié.
Pour ~6 Gaufres :
- 125g de farine
- 1/2 sachet de levure
- 1 œufs
- 20cl de lait tiéde
- De l'huile

Mélanger Farine, Levure, Oeufs,
Ajouter Le lait tiéde,
Huiler la poêle et hop mise en cuisson !

Retourner les gaufres quand vous le sentez, ça cuit vraiment vite !

La 1ere face de cuisson est "présentable", la 2eme ... pas vraiment.

Maintenant, si vous laissez ça reposer vous aurez la chance d'avoir une gaufre qui comme elle n'a pas suffisamment gonflé fait éponge et est donc toute mole, et un peu dégueu.

Alors soit vous les manger dans la seconde, soit ... Un fucking coup au grille pain et là, LÀ, pendant 2minutes vous avez une gaufre bien chaude qui est pas loin du gout d'une véritable gaufre. Mais juste pendant 2mn hein, sinon ça ce re gorge d'eau ...

Et sinon t'as un conseil en plus a nous donner ?
Oui, n'achetez pas de poêles a gaufres ...

Sauf si vous préférez avoir ça :


















A la place de ça :

















éa, les amis.

mardi 24 mars 2015

[PHP] $_SESSION = array(), session_unset et session_destroy()

[MiniArticle] Aidant de temps en temps sur des forums ou en IRC, je tombe par moment sur des personnes qui mélangent, confondes et font des mélimélo perso. Mais pas seulement, il arrive que ce soit les "helpers" qui induisent en erreur (et là, c'est le drame) ...



Dans ce post nous allons parler des sessions avec PHP et plus particulièrement de leurs destruction.

Croisé sur le net :
  1. session_unset() ne doit pas étre utilisé car il détruira également la super globale $_SESSION qui deviendra inutilisable.
  2. On doit utiliser $_SESSION = array() puis session_unset() avant de "destroy"
  3. Il est inutile de vider $_SESSION si on fait un session_destroy()
  4. $_SESSION = array() et session_unset() font exactement la même chose
Alors que :
  1. Bien sur c'est faux. session_unset va entre autre vider $_SESSION, en revanche si l'on indique session_unset($_SESSION) on rigole jaune. C'est au passage indiqué sur le man de PHP ...
  2. Encore une idée étrange. Les deux vont faire une chose, c'est vider $_SESSION. Alors hors idée perverse d'utiliser le double de ressources c'est pas utile.
  3. session_destroy() vas détruire le fichier de session, mais ne vide pas la mémoire. On peut donc toujours accéder aux données.
  4. C'est pas si faux que ça et en vulgarisation c'est le cas. La seul différence est que session_unset(), va vérifier si ce qui est passé en arguments correspond bien à une "php_session_active".
Les exemples et sources :
Je vois déjà des "c'est bien beau, mais comment on peut savoir si toi aussi tu racontes pas des conneries ?"

Pour le 1er et 2eme points il est simple de vérifier : http://php.net/manual/fr/function.session-unset.php

Pour le 2eme point on peut tout de même vérifier :
<?php
session_start();
$_SESSION['time'] = time();
session_unset();
var_dump($_SESSION);
$_SESSION = array();
var_dump($_SESSION);

Le 3eme points est très simple à tester :
<?php
session_start();

$_SESSION['time'] = time();
$a = &$_SESSION;

session_destroy();
var_dump($a);

Le 4eme points ce trouve dans la source de php :
static PHP_FUNCTION(session_unset)
{
    if (PS(session_status) != php_session_active)
    {
        RETURN_FALSE;
    }

    IF_SESSION_VARS() 
    {
        HashTable *ht_sess_var = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars)));

        /* Clean $_SESSION. *
        zend_hash_clean(ht_sess_var);
    }
}

Petite Astuce : Pour vraiment faire le ménage de la session ajoutez setcookie(session_name(),'',0,'/'); ce qui supprime le cookie utilisateur de sa session terminée.


éa, les amis.

samedi 18 octobre 2014

[TEST] KingFast F8 120GB / Du ssd 100% chinoi, ça donne quoi ?

Ayant besoin de commander un ssd (pour un client) pour quoi ne pas tester un KingFast qui était à moins de ~48€ pour 120Go au moment de mon achat.


Une fois réception je me demande ce qu'il y a dedans et ce qu'il peut bien valoir !


C'est de la conception "légère" prévus par palier, mais pas forcément bas de gamme comme on pourrait s'y attendre.

Avec un contrôleur SSD de chez JMicron "jmf667h" (qui rattrape leurs ratage passé ...) capable de fournir 480Mo/s en lecture, 300Mo/s en écriture et 58000IOPS en EC-4Ko (sur le papier bien sur) avec du véritable Sata 3.1

Une puce mémoire 128Mo "NT5CB64M16DP-DH" pour un cache qui a fière allure. En DDR3/L-1600Mb/s avec une Organisation 64Mx16, un Clock de 800Mhz et un Timings mémoire de 10-10-10. Plus d'infos techniques =>[ICI]

Les 120Go F8 séries sont annoncé à :
Sequential (en MB/s) Read:471 / Write:148
Random (iops) Read:52.214 / Write:25.792

Pour vérifié ça je l'ai comparé avec mon vieux "OCZ Vertex Plus R2 120Go". Ils sont testé avec la même machine et une image parfaite du disque (dd if of). Le teste est réalisé avec "CrystalDiskMark".

Les spec du pc :




On débute avec les résultats pour le OCZ :

Puis on enchaine avec le fameux KingFast :


En conclusion, ce SSD tien ses promesses, étale ce vieux OCZ et épaule un "Optima 240GB" de chez PNY en lecture. Pour ce qui concerne l’écriture sans être une foudre de guerre ça reste relativement correcte !

Plutôt satisfait de ce SSD et sur tout de son prix. Il reste en ce moment le moins chère des SSD 120Go en Sata 3. Comptez bien 3semaines pour l’expédition depuis la chine ...

Chez AMAZON avec frais de port à 2.15€. KingFast KF2710MCJ09-120 SSD 2,5'' 120 Go SATA III

PS : Ce pendant il est en ce moment disponible un PNY 120Go pour 56.21€ livraison gratuite ici => PNY Optima 2,5'' 120Go SATA III.



 éa, les amis.

mercredi 25 juin 2014

[BG/BGEE] Continuer à jouer apres la mort de Sarevok

Grand fan de La serie Baldur's Gate, je n'avais pourtant jamais fini le 1er du nom ... Voici qui est chose faite !


Mais comme moi il est probable que vous vous soyez dis ... "Tien je vais aller tuer Sarevok et me garde TotSC pour apres" !
Grave erreur mes amis, grave erreur. Car une fois Sarevok mort, il est impossible de continuer et il suffit d’être un peu idiot (comme moi) pour ne pas avoir de sauvegardes juste aven d'entrer dans le bâtiment ...

Miracle, il existe une solution !
un moddeur (ou peut importe la dénomination en vigueur), Kerozevok si j'ai bien compris à lui voulu fêter dignement la mort de notre beau frère commun (Sarevok) à l'Auberge de Brasamical.

Cette solution fonctionne avec ou sans steam et sur l'original de BG1 tout comme la BG1EE (enhanced edition).

- Pour ce faire, rendez-vous dans le répertoire du jeux et entrez dans le dossier "override" créez le si besoin. Pour BGEE, tout fichiers de scripts présent dans "override" prends l’ascendant. (Une bonne nouvelle, info trouvé sur le forum officiel de BGEE)
- Placez dans celui-ci les fichiers de script telechargé "ar0123.bcs", "ar0125.bcs", "NARRAT2.DLG". (contenu dans le zip en lien)

Le site du gentil Mr : http://childofbhaal.chez-alice.fr/ (Je vous invite a bien regarder, il y a de tres bon scripts)
Lien direct vers le .zip : http://childofbhaal.chez-alice.fr/Custom/Fichiers/PasDeFin.zip


éa, les amis.