PhpStorm, Windows / WAMP et xdebug : howto – la solution

Si jamais vous êtes comme moi, et que vous n’avez pas réussi à faire fonctionner PhpStorm avec xdebug sous Windows avec WAMP, vous avez peut-être le même problème que moi à savoir : le serveur Apache semble mal configuré – ou configurable, et incapable d’utiliser Php correctement avec xdebug.

Je passe toutes les étapes de configuration « classiques », parce qu’elles sont simples et bien documentées – y compris dans PhpStorm. Malgré tout ça, il se peut que cela ne fonctionne pas.

La solution :

Solution PhpStorm RunDebug Configurations pour Windows - WAMP

En fait il faut configurer PhpStorm pour qu’il ne passe pas par Apache, mais qu’il lance le serveur Php intégré (si, Php a un serveur HTTP, cherchez dans la documentation).

Et ainsi, le déboguage en ligne fonctionnera.

C’est grâce à cette vidéo que j’ai eu l’idée d’essayer :

http://www.youtube.com/watch?v=LUTolQw8K9A

Bien sûr, si vous essayez xdebug sous Linux, vous aurez nettement moins de difficultés :).

Symfony 2 Notice: Undefined offset: 0 in vendor/…/Hydration/SimpleObjectHydrator.php line 103

Voici un petit problème que j’ai résolu.

Supposons que vous ayez plusieurs entités qui descendent d’une seule.
Dans l’entité mère, vous précisez ce qui va différencier les autres via la propriété DiscriminatorColumn :

/**
 * @ORM\Entity
 * @ORM\Table(name="table_de_base")
 * @ORM\InheritanceType("JOINED")
 * @ORM\Entity(
 *   repositoryClass="SOCIETE\Bundle\MegaSuperBundle\Repository\PersonRepository"
 * )
 * @ORM\DiscriminatorColumn(name="person_type", type="integer")
 * @ORM\DiscriminatorMap({"1" = "PersonneBoss", "2" = "PersonneLarbin"})
 */
abstract class Personne extends BaseUser
{
...
}

Cela signifie en clair : l’entité «PersonneBoss», descendante de «Personne», aura aura la valeur «1» dans le champ person_type, et l’entité descendante «PersonneLarbin», de «Personne», aura la valeur «2» dans le champ person_type. C’est, comme son nom l’indique, un «discriminateur».

Si jamais vous vous retrouvez avec une erreur de ce type : Notice: Undefined offset: 0 in vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php line 103, alors il se peut, comme c’était le cas pour moi, que les valeurs pour le «discriminateur» n’aient pas été correctement renseignées : dans mon cas, les valeurs étaient soit null, soit 0 et en fait cette valeur sert apparemment d’indice dans une table afin de pouvoir faire la jointure avec les descendants : donc il essayait de chercher une table avec l’indice 0, alors que je n’ai précisé que 1PersonneBoss») ou 2PersonneLarbin»)… donc pour la valeur 0, forcément, Symfony sort un Notice: Undefined offset: 0.

Bref, si vous avez une erreur comme celle-là, vérifiez que les valeurs en base de données sont cohérentes avec vos déclarations !

symfony 2 : isset et null avec Twig

Une des questions qu’on cherche le plus souvent avec Twig, c’est comment vérifier si une variable existe ou pas ?

La réponse se fait en trois étapes :

  1. Vérifier si une variable existe (= si elle a été initialisée) :
    En php, c’est isset().
    En Twig, c’est defined.
    Exemple de code Twig :

    {% if app.user is defined %}
    Code html
    {% endif %}
  2. Vérifier si une variable n’est pas null (= elle est définie, mais contient la valeur null) :
    En php, c’est !is_null().
    En Twig, c’est is not null.
    Exemple de code Twig :

    {% if app.user is not null%}
    Code html
    {% endif %}
  3. Vérifier si une variable existe et qu’elle n’est pas null (= elle est définie, et contient autre chose que la valeur null) :
    En php, c’est isset() && (!is_null()).
    En Twig, c’est is defined and is not null.
    Exemple de code Twig :

    {% if app.user is defined and app.user is not null%}
    Code html
    {% endif %}

En espérant que cela aide du monde !

Jeu en ligne : league of legends : les expressions que vous ne connaissez peut-être pas

xpeke

À cause de son backdoor avec Kassadin à IEM Katowice beaucoup de joueurs crient « xPeke ! » si un nexus se fait backdoor

imba

imbalanced. Aucun champion ne contre cette personne, ou par exemple, en ARAM, c’est pas équitable et la partie est jouée par avance.

Bon allez pour la route, un aperçu des gens qu’on peut rencontrer quand c’est les vacances scolaires (sourire).
LOL SMS time (pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure,pleure)

CodinGame challenge : les résultats

Vous pourrez trouver la totale ici.

Je cite :

Sur les 3245 inscrits, 1124 ont tenu bon jusqu’à la fin. Et il faut dire que le niveau était plutôt excellent. Avec un 3e exercice que certains codeurs de notre connaissance auraient qualifié de « torture japonaise », le challenge nécessitait de jongler entre plusieurs compétences complémentaires.

Ils ont tout à fait raison, vu que… je ne l’ai pas fait !

Vous pouvez voir le classement complet ici.

Moi je suis le pseudo SurferIX, position 120 :

120 - SurferIX - 65% - 03:48:46 - PHP, C

Et mon code fait en 3 heures 48 ici.

Packtlib : Mastering ExtJS : impressions à chaud

Pour les Anglais uniquement, vous serez sûrement intéressées :

Le livre Mastering ExtJS.

Mastering Ext JS montre aux lecteurs comment utiliser le potentiel de Ext JS au complet et créer une application au complet en partant de rien, mais explique aussi comment créer un thème WordPress avec ExtJS. Cette dernière section est assez surprenante, mais semble efficace.

  • Chapter 1. Getting Started
    Les bases pour installer ExtJS (LAMP, ou pour les newbies WAMP etc)
  • Chapter 2. The Login Page
    La plupart des applications ont une page d’identification. L’auteur explique comment faire l’identification « classique » avec ExtJS.
  • Chapter 3. Logout and Multilingual
    La plupart des applications ont une page de déconnexion, et en 2013, il faut savoir rapidement implémenter une autre langue. L’auteur explique comment faire cela : déconnexion et gestion du multilangue.
  • Chapter 4. Advanced Dynamic Menu
    Comment créer des menus dynamiques, qui sont constitués en fonction des droits de la personne connectée (cf chapitres 2 et 3).
  • Chapter 5. User Identification and Security
    Création d’une page de gestion complètes des identifications : comment donner les permissions à des utilisateurs (lister tous les utilisateurs, créer, éditer et supprimer des utilisateurs et aperçu d’une image d’un utilisateur qui va être envoyée).
  • Chapter 6. MySQL Table Management
    Création d’un système modulaire appelé « données statiques ». Liste de toutes les informations d’une table MySQL. Créer de nouveaux enregistrements dans la table. Live search sur les tables. Mettre en place des filtres. Éditer et supprimer des enregistrements. Créer un composant abstrait réutilisable pour toutes les tables.
  • Chapter 7. Content Management
    Gestion de contenu complexe avec ExtJS : comment gérer les associations many-to-many. Comment gérer et faire des formes avec les associations. Explication pour faire des composants réutilisables.
  • Chapter 8. Adding Extra Capabilities
    Possibilités supplémentaires. Comment imprimer des champs d’un panneau de type grille (GridPanel). Comment exporter des champs d’un panneau de type grille (GridPanel) en PDF ou au format Excel. Comment créer des graphiques /courbes. Comment utiliser des composants tiers ou des plugins.
  • Chapter 9. The E-mail Client Module
    Cette partie explique comment développer un client Web mail avec ExtJS. Comment dessiner le client email. Comment lister les emails. Comment créer la boîte de réception (gestion d’un TreePanel). Comment gérer le drag’n’drop entre deux composants (grid et tree). Améliorer le GridPanel de manière impressionnante (customisation).
  • Chapter 10. Preparing for Production
    Comment créer un thème personnaliser. Comment préparer (packager) l’application pour qu’elle soit prête pour la production. Comment utiliser le packager. Il peut sembler y avoir peu de choses dans ce chapitre, mais les explications sont longues et détaillées et j’ai appris énormément de choses.
  • Chapter 11. Building a WordPress Theme
    Je pensais que l’idée était de faire à la main un thème WordPress, mais non : l’idée est d’utiliser tout l’habillage au complet ExtJS, ainsi que le code JavaScript qui va avec, afin de l’intégrer dans une application WordPress. Comment fonctionne WordPress. Comment créer un thème, un header, un footer, une page principale, une Sidebar, une page d’articles et enfin une page de type « Page » (par opposition aux pages de type « Article »)
  • Chapter 12. Debugging and Testing
    C’est un des chapitres les plus pratiques pour la vie quotidienne : la plupart des outils avancés et peu connus y sont, pourtant il sont très utiles : comment déboguer une application ExtJS. Comment tester les applications ExtJS. Les outils utiles (JSLint, YSlow, Sas, Less, YUI Compressor…). Comment passer de ExtJS à une version mobile. Composants tiers et plugins utiles pour développer rapidement. Résumé

Au final, ce livre comporte beaucoup de choses intéressantes, et (à mon sens), même si vous êtes développeur avancé ExtJS, les trois derniers chapitres sont super intéressants et rien que pour ces trois derniers, même si vous trouvez qu’acheter un livre c’est trop cher (ce que je comprends ;)), les quelques 17 € que vous coûteront la version en ligne seront rapidement rentabilisés.

D’ailleurs en parlant de version en ligne, ils ont complètement refait leur reader en ligne, et ce dernier est très bien fait : moi qui suis très critique, je n’ai rien trouvé à redire !

JavaScript : comment faire un truncate

L’idée est ingénieuse, mais il fallait y penser.

Le principe est d’utiliser une fonction d’opération sur les bits.

Comme JavaScript ne peut que faire une opération sur des entiers, il est « forcé » de convertir ce qui n’est pas un entier en entier.

Donc :

"6874654" | 0

forcera JavaScript à convertir les deux opérandes en entier. Dans la réalité c’est carrément des entiers sur 32 bits, donc ce principe ne peut pas s’appliquer à des chiffres supérieurs à (2^32)-1.

Par contre, si, comme moi, vous n’avez que des petits chiffres à convertir, surtout n’hésitez pas, c’est la méthode la plus rapide.

Ainsi, vous aurez :

"6874654" | 0 = 6874654
"6.87" | 0 = 6
"8.999" | 0 = 8
"azazea" | 0 = 0

L’idée vient de stackoverflow, bien sûr ! 😉

Cela dit – ceci dit

« Ceci dit » est un non sens, car « ceci » désigne ce qui va arriver

Il faut dire « cela dit ».

Mémo facile : ça suit car « ci-suivent » les documents, « ci-suit ma remarque » etc.

La plupart des gens font cette faute, et on la voit même dans les magazines !

Un erreur très commune de français : « ceci dit » est un non sens, car « ceci » désigne ce qui va arriver. Il faut dire « cela dit ».

Ne dites plus jamais « ceci dit » mais plutôt « cela dit » !

Citation Wikipedia :

« Cela » est relatif à ce qui vient d’être dit, établi, exposé. « Ceci » indique ce qui vient, ce que l’on va montrer ou expliquer.
Exemples :
Je vous dis ceci : je suis fatigué.
Je suis fatigué, cela dit, je veux bien venir avec vous.
On ne peut donc pas dire ou écrire « ceci dit », il faut dire ou écrire « cela dit ». Le succès usurpé de « ceci dit » semble provenir de l’assonance entre « ceci » et « dit ». (Remarque : la distinction, autrefois préconisée, n’est plus guère suivie à l’usage. Dès lors, de nombreuses références considèrent comme correct l’usage de « ceci dit », « tout ceci », etc. Cf. à ce sujet le TLF / le centre national de ressources textuelles : http://www.cnrtl.fr/lexicographie/ceci .)

Bonne journée 😉

Hadopi. Quelle honte, l’état Français.

C’est toujours mieux de réprimer que de trouver une méthode positive qui pourrait rémunérer les ayant-droits.
Quelle honte.
Haute autorité pour la diffusion des oeuvres et la protection des droits sur internet
Premier avertissement – Haute Autorité pour la diffusion des œuvres et la protection des droits sur internet (Hadopi)
Dossier n° 9 24 297 0 0 1Date : 11 septembre 2013
En tant que titulaire d’un abonnement à internet, vous êtes légalement responsable de l’utilisation qui en est faite. L’obligation de surveillance de cet accès est prévue par l’article L. 336-3 du code de la propriété intellectuelle.
Les faits constatés ont été commis avec le(s) logiciel(s)/protocole(s) BitTorrent, depuis l’adresse IP 7.2.1.16   attribuée à votre connexion par votre fournisseur d’accès à internet Free SAS / ProXad.

Le téléchargement illégal, appelé couramment « piratage », prive les créateurs de leur rétribution et représente un danger pour l’économie du secteur culturel. Pour vous aider à identifier les sites internet proposant des contenus légaux et à préserver le développement du secteur culturel, vous pouvez découvrir l’ensemble des offres labellisées par l’Hadopi sur le site internet www.pur.fr .

Il vous est recommandé de prendre sans délai toutes mesures utiles pour éviter une nouvelle atteinte au droit d’auteur. A cette fin, vous pouvez consulter les fiches pratiques « usage et internet », disponibles sur le site internet de l’Hadopi : www.hadopi.fr/ressources/fiches-pratiques qui vous apporteront notamment des informations pour sécuriser votre ligne. Vous pouvez également vous rapprocher de votre fournisseur d’accès à internet.

Si, malgré les avertissements de l’Hadopi, votre accès à internet était à nouveau utilisé pour des mises en partage ou des téléchargements illégaux, vous pourriez, à l’issue de la procédure suivie devant l’Hadopi, être poursuivi(e) devant le tribunal de police pour contravention de négligence caractérisée. Vous risquez alors une amende d’un montant maximum de 1500 € (article R. 335-5 du code de la propriété intellectuelle). Retrouvez toute information utile sur www.hadopi.fr/acces-au-formulaire-reponse-graduee-jai-recu-un-mail.

Vous avez la possibilité de demander des précisions sur le contenu des œuvres qui ont été téléchargées ou offertes en partage et de formuler des observations, en contactant l’Hadopi :

  • Par voie postale :

Hadopi – Commission de protection des droits,

4 rue du Texel,

75014 Paris

  • Par téléphone au  09.69.32.90.90 (Appel non surtaxé)

Veuillez agréer, Madame, Monsieur, l’expression de mes salutations distinguées.

Mireille IMBERT-QUARETTA
Présidente de la Commission de Protection des Droits de l’Hadopi

 

 

Annexes
Code de la propriété intellectuelle
*Article L. 336-3 du code de la propriété intellectuelle :
« La personne titulaire de l’accès à des services de communication au public en ligne a l’obligation de veiller à ce que cet accès ne fasse pas l’objet d’une utilisation a des fins de reproduction, de représentation, de mise à disposition ou de communication au public d’œuvres ou d’objets protégés par un droit d’auteur ou par un droit voisin sans l’autorisation des titulaires des droits prévus aux livres Ier et II lorsqu’elle est requise.
« Le manquement de la personne titulaire de l’accès à l’obligation définie au premier alinéa n’a pas pour effet d’engager la responsabilité pénale de l’intéressé, sous réserve des articles L. 335-7 et L. 335-7-1.
** Article R. 335-5 du code de la propriété intellectuelle
I.-Constitue une négligence caractérisée, punie de l’amende prévue pour les contraventions de la cinquième classe, le fait, sans motif légitime, pour la personne titulaire d’un accès à des services de communication au public en ligne, lorsque se trouvent réunies les conditions prévues au II :
1° Soit de ne pas avoir mis en place un moyen de sécurisation de cet accès ;
2° Soit d’avoir manqué de diligence dans la mise en œuvre de ce moyen.
II.-Les dispositions du I ne sont applicables que lorsque se trouvent réunies les deux conditions suivantes :
1° En application de l’article L. 331-25 et dans les formes prévues par cet article, le titulaire de l’accès s’est vu recommander par la commission de protection des droits de mettre en œuvre un moyen de sécurisation de son accès permettant de prévenir le renouvellement d’une utilisation de celui-ci à des fins de reproduction, de représentation ou de mise à disposition ou de communication au public d’œuvres ou d’objets protégés par un droit d’auteur ou par un droit voisin sans l’autorisation des titulaires des droits prévus aux livres Ier et II lorsqu’elle est requise ;
2° Dans l’année suivant la présentation de cette recommandation, cet accès est à nouveau utilisé aux fins mentionnées au 1° du présent II.

Données à caractère personnel
Loi n°78-17 du 6 janvier 1978 relative à l’informatique, aux fichiers et aux libertés (articles 39 et 40)
Les données à caractère personnel recueillies par la Commission de Protection des Droits de l’Hadopi sont enregistrées dans le
« système de gestion des mesures pour la protection des œuvres sur Internet ». Vous bénéficiez d’un droit d’accès et d’un droit de rectification de ces données.
Si vous souhaitez exercer ces droits vous pouvez écrire à la présidente de la Commission de Protection des Droits en joignant une copie d’une pièce d’identité à l’adresse ci-dessus mentionnée en précisant sur l’enveloppe : « droit d’accès ».
*Horaire GMT : l’heure de Paris correspond à l’heure GMT +1h en hiver et +2h en été

De la nourriture pour le cerveau !

Pris ici, et traduit en français par moi même.

C’est mon site favori.

Je le visite presque tous les jours.

Il n’est pas « responsive ». Il n’est pas optimisé pour iPhone.
Il a l’air flou sur un affichage de type Retina.
Il n’utilise pas le tout dernier framework HTML5/CSS3.
Il n’a pas un « rythme vertical réfléchi pour être agréable ».
Les fontes n’ont rien d’original. Ni Le skeuomorphique ni plat.
Il n’a pas son propre favicon.
Il n’a aucune application native Twitter ou Instagram.
Il n’utilise ni d’AJAX ni de SCRUM ou de node.js ou de Sinatra.
Il n’a pas sa propre API ou son suivi RSS, et pas de VC funding.
Il n’a jamais été numéro un sur un blog technique connu et n’a jamais gagné un seul concours.

Il me dit comment faire la soupe du jour.

Une information donnée gratuitement, qui est pratique pour la personne qui le lit.

C’est ça, le web design.