Email de la Mozilla Foundation

Pour information, lettre de la présidente de l’association Mozilla.

Chers fans de Firefox,

Depuis le tout début, Mozilla a été créée pour être un mouvement, pas une entreprise.

Nous avons toujours considéré que les gens devaient avoir le contrôle de leur vie en ligne, plutôt que d’être maintenus dans l’ignorance. Nous voulons que les outils que nous construisons — comme Firefox — respectent les utilisateurs et leur sécurité et protègent leur vie privée.

C’est pourquoi j’ai choisi de faire de Mozilla une fondation à but non lucratif. Créer un Web ouvert et accessible est plus important que de maximiser les profits des actionnaires.

L’idée de faire passer les gens avant les profits est une conviction forte. Il y a des milliers de bénévoles et d’employés Mozilla dans le monde, et ils croient profondément en notre mission et nos valeurs. Ensemble, nous construisons un Internet qui place l’intérêt public avant les profits.

Mais nous ne pouvons pas réaliser cet important travail sans le soutien de personnes comme vous. Nous ne vous enverrons aucun autre courriel cette année pour solliciter des dons qui soutiendront notre travail. Faites votre don en ligne dès maintenant.

Une partie d’Internet sera toujours construite par de grandes entreprises. C’est une bonne chose. Ce moteur économique apporte beaucoup de compétences, d’énergie et de ressources, mais ce n’est pas suffisant.

Nous devons également construire le Web dont le monde a besoin — un Internet où les gens passent avant tout. Que ce soit rentable ou non, c’est ce qu’il faut faire.

Ce que nous avons accompli jusqu’ici a été possible grâce à des dizaines de milliers de contributeurs du monde entier qui ont rejoint et soutenu Mozilla. Savoir que tant de personnes partagent notre vision et notre engagement envers les utilisateurs nous rend plus humbles, mais cela nous donne aussi beaucoup de force. Nous aimerions vous compter parmi les nôtres.

Je vous envoie un seul courriel de levée de fonds de fin d’année pour Mozilla. Cela signifie que vous avez une seule occasion de faire un don pour soutenir notre important travail.

Le cœur de Mozilla est une communauté mondiale qui partage la même mission. C’est ce qui nous donne notre énergie. C’est ce qui nous donne de l’impact. C’est ce qui fait toute notre différence : des gens comme vous nous aident à construire l’Internet dont le monde a besoin.

Bien cordialement,

Mitchell

Mitchell Baker
Présidente
Mozilla

WordPress et shortcodes : comment les lister

Si jamais vous commencez à découvrir la chose super pratique qu’est un shortcode alors voici une petite astuce, si vous êtes sur Linux : comment lister les shortcodes présents.

Il suffit dans le shell, d’aller dans votre répertoire WordPress et de taper cette ligne de commande :

find . -type f -print0 | grep -z php$ | xargs -0 grep 'add_shortcode' | more

Et vous aurez le listing de tous les endroits où on appelle cette fonction. Il ne vous reste plus qu’à regarder ce qu’ont fait les personnes ! Il existe même des shortcodes cachés dans certains thèmes, que les auteurs ont dû faire pour eux, mais qu’ils n’ont pas documenté ! Très pratique !

Exemple :

...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-title', 'hybrid_entry_title_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-author', 'hybrid_entry_author_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-terms', 'hybrid_entry_terms_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-comments-link', 'hybrid_entry_comments_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-published', 'hybrid_entry_published_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-edit-link', 'hybrid_entry_edit_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-shortlink', 'hybrid_entry_shortlink_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-permalink', 'hybrid_entry_permalink_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'post-format-link', 'hybrid_post_format_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-published', 'hybrid_comment_published_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-author', 'hybrid_comment_author_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-edit-link', 'hybrid_comment_edit_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-reply-link', 'hybrid_comment_reply_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-permalink', 'hybrid_comment_permalink_shortcode' );
...gelines/includes/class.shortcodes.php: add_shortcode( $shortcode, array( &$this, $data['function']) );
...b/library/shortcodes.php:add_shortcode('gallery', 'gallery_shortcode_tbs');
...b/library/shortcodes.php:add_shortcode('button', 'buttons');
...b/library/shortcodes.php:add_shortcode('alert', 'alerts');
...b/library/shortcodes.php:add_shortcode('block-message', 'block_messages');
...b/library/shortcodes.php:add_shortcode('blockquote', 'blockquotes');
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: * Creates new shortcodes for use in any shortcode-ready area. This function uses the add_shortcode()
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: * @uses add_shortcode() to create new shortcodes.
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'the-year', 'cleanretina_the_year_shortcode' );
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'site-link', 'cleanretina_site_link_shortcode' );
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'wp-link', 'cleanretina_wp_link_shortcode' );
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'th-link', 'cleanretina_themehorse_link_shortcode' );
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-site', 'mantra_site_link_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-author', 'mantra_the_author_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-tag-cloud', 'mantra_tag_cloud_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-multi', 'mantra_multi_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-column', 'mantra_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-pullquote', 'mantra_pullquote_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-button-light', 'mantra_button_light_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-button-dark', 'mantra_button_dark_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-button-color', 'mantra_button_color_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-site', 'mantra_site_link_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-author', 'mantra_the_author_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-tag-cloud', 'mantra_tag_cloud_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-multi', 'mantra_multi_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-column', 'mantra_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-pullquote', 'mantra_pullquote_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-button-light', 'mantra_button_light_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-button-dark', 'mantra_button_dark_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-button-color', 'mantra_button_color_fn' );
...artupwp/functions.php:add_shortcode('wp_caption', 'fixed_img_caption_shortcode');
...artupwp/functions.php:add_shortcode('caption', 'fixed_img_caption_shortcode');
...p:add_shortcode('wp_caption', 'img_caption_shortcode');
...p:add_shortcode('caption', 'img_caption_shortcode');
...p:add_shortcode('gallery', 'gallery_shortcode');
...p:add_shortcode( 'audio', 'wp_audio_shortcode' );
...p:add_shortcode( 'video', 'wp_video_shortcode' );
...-embed.php: add_shortcode( 'embed', '__return_false' );
...-embed.php: * @uses add_shortcode()
...-embed.php: add_shortcode( 'embed', array( $this, 'shortcode' ) );
...es.php: * add_shortcode('footag', 'footag_func');
...es.php: * add_shortcode('bartag', 'bartag_func');
...es.php: * add_shortcode('baztag', 'baztag_func');
...es.php:function add_shortcode($tag, $func) {

La ville de Munich achève avec succès sa migration de 14000 PCs vers l’Open Source

Article copié collé ici :

Dix ans après avoir amorcé la migration de l’ensemble de son parc informatique vers Linux, la ville de Munich dans un communiqué affirme avoir finalisé avec succès l’adoption des solutions open source.

Désormais, la grande majorité du personnel de l’administration publique utilise une version personnalisée de Linux. Baptisée LiMux, la distribution Linux de la ville de Munich fonctionne sous 14 800 postes de travail, sur 15 500 PC de l’administration. Le but initial était de faire migrer 12 000 postes de travail de Windows vers LiMux.

LiMux intègre une infrastructure de bureau entièrement open source. Le format ODF (Open Document Format) a également été adopté par la ville de Munich en tant que norme pour les documents bureautiques (texte, tableurs, présentations, diagrammes, etc.).

Malgré la migration d’un nombre important de PC, la ville de Munich affirme que l’administration est toujours restée opérationnelle et réactive. Les administrateurs et les utilisateurs ont pu, avec le temps, se familiariser avec le système d’exploitation et les outils open source.

Cette adoption de l’open source aurait permis à la ville de Munich d’économiser près de 11,7 millions d’euros en novembre de l’année dernière. En plus des réductions de couts, cette opération permettrait également à la localité d’être moins dépendante des fabricants et des systèmes d’exploitation propriétaires.

Toujours dans son élan en faveur de l’open source, la ville de Munich encourage ses citoyens à s’orienter vers Linux. Pour résoudre l’équation de la fin du support de Windows XP en avril 2014, le comité administratif de la localité avait procédé à la distribution de 2 000 CD de la version LTS (long-term support) d’Ubuntu 12.04.

WordPress et JavaScript : mettre du code en dur dans vos articles

Si jamais un jour, comme moi, vous essayez de mettre du code JavaScript directement à l’intérieur de votre article – ou de votre page – alors irez dans l’onglet à droite ainsi :

Wordpress edition d'un article - onglet texte.jpg

Et vous taperez sûrement quelques lignes basiques comme celles-ci :

<script>
alert('bonjour');
</script>

Cela ne fonctionnera pas !

J’ai posé la question ici, et la réponse était : le code généré dans la page n’est pas correct, il faut le corriger… ce qui est vrai ! La seule solution que j’aie trouvé : écrire un fichier JavaScript externe, et l’embarquer dans la page. Malheureusement, j’ai codé la chose en dur, et je cherche actuellement parmi ces possibilités :

  • Soit pouvoir écrire du code qui ne sera pas retravaillé dans les articles / et / ou / pages ;
  • Soit pouvoir inclure des fichiers uniquement en fonction des pages.

Ce que je n’ai pas fait. Mais ma solution fonctionne, même si elle n’est pas la meilleure.

Solution 1

Je suis allé dans mon thème, et j’ai fait un include « générique » dans et j’y ai rajouté l’inclusion de mon script :

wp_enqueue_script( 'olivierpons', get_template_directory_uri() . '/js/op.js' );

C’était ici :
Wordpress description de l'inclusion de javascript dans un theme

Et là, j’ai pu écrire mon script, entièrement en JavaScript, qui n’est pas modifié par WordPress.

Pour information, ce script crée un formulaire complet afin de générer une requête SQL pour créer une base de données SQL avec un utilisateur et un mot de passe afin de copier coller le code pour créer la totale. Cela est si souvent fait que ça m’a lassé un peu et j’ai écrit ce code.

Vous pouvez retrouver ce formulaire dans cet article et dans cette page.

Solution 2

Les shortcode. Vous écrivez une function Php qui renvoie une chaine qui ne sera pas modifiée. Donc cette chaine peut tout à fait être du code dans une balise Javascript : <script>alert('bonjour');</script>. Seul problème : elle doit être codée en dur.

J’ai essayé de le contourner pour rendre le code entièrement dynamique.
Essayez ce code dans le fichier functions.php de votre thème :

if (!function_exists( 'foobar_func' )):
function foobar_func( $atts, $content, $tag ){
  echo $atts['script'];
  return (isset($content) ? $content : '');
}
add_shortcode( 'foobar', 'foobar_func' );
endif;

Puis essayez d’appeler la fonction ainsi dans un article :

[f oobar script="<script>
  jQuery(document).ready(function() {
    var j=jQuery('<div />');
  });
</script>"]

Et vous verrez que malgré tout, les paramètres sont retravaillés par WordPress et malmenés !

Au final, deux solutions

  • Ecrire un fichier JS externe, et l’inclure soit de manière générique dans toutes les pages, soit de manière dynamique (à vous de le paramétrer) :
  • La seconde qui consiste à écrire un shortcode et que ce shortcode renvoie le code Javascript au complet, sachant que le gros inconvénient, c’est que le code que vous renverrez sera difficilement lisible : en effet, ce sera une chaine de caractères « simple » dans votre fichier Php, il n’y aura aucune coloration syntaxique.

Symfony 2 Embedded Forms: Catchable Fatal Error: Argument 1 passed to Entity::addProperty must be an instance of XX\MyClass, array given

Encore une abstraction qui fuit.

Si jamais vous avec un problème avec un ManyToMany et que vous rencontrez une erreur du type : Symfony 2 Embedded Forms: Catchable Fatal Error: Argument 1 passed to Entity::addProperty must be an instance of XX\MyClass, array given, c’est que vous avez peut-être le même problème que moi, à savoir : une mauvaise déclaration de votre type de formulaire.

Enfin… mauvaise… disons qu’il manque des choses, et que logiquement, tant qu’on n’a pas une connaissance parfaite des rouages de Symfony, on ne comprend pas pourquoi ça ne fonctionne pas.

Je vais donc vous dire ce qu’il me manquait : j’avais une table personne et une table adresse.
Ces deux tables étaient reliées par une relation ManyToMany : une personne peut avoir une ou plusieurs adresses, et à une même adresse, plusieurs personnes peuvent habiter (heureusement ! 😉 ).

Dans la déclaration du type d’adresse, tout semblait cohérent, il n’y avait aucune erreur, mais il manquait une seule chose : la fonction setDefaultOption(). Je vous la fais courte : le code qui suit fonctionne.

Même si cette astuce ne fonctionne pas pour vous, essayez de suivre mon raisonnement : j’ai refait complètement un projet en partant de zéro, en suivant les instructions ici (Symfony 2 : Comment imbriquer une Collection de Formulaires) : et ensuite j’ai comparé pas à pas avec mon code. Pour en arriver aux six petites lignes qui manquaient : la fonction setDefaultOption().

<?php

namespace MaSociete\Bundle\MyBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver;
use Symfony\Component\Form\FormBuilderInterface;

class AdresseType extends AbstractType
{
   /**
    * Builds the form.
    *
    * This method is called for each type in the hierarchy
    * starting form the top most type. Type extensions can
    * further modify the form.
    *
    * @see FormTypeExtensionInterface::buildForm()
    *
    * @param FormBuilderInterface $builder The form builder
    * @param array                $options The options
    */
    public function buildForm(
        FormBuilderInterface $builder,
        array $options
    ) {
        $builder->add('adresse1', 'text')
            ->add('adresse2', 'text')
            ->add('cp', 'text')
            ->add('ville', 'text');
        }
    public function setDefaultOptions(
        \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver
    ) {
        $resolver->setDefaults(array(
            'data_class' => 'MaSociete\Bundle\MyBundle\Entity\Adresse',
        ));
    }
    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'MaSociete\Bundle\MyBundle\Entity\Adresse',
        );
    }
    public function getName()
    {
        return 'adresse';
    }
}

Linux équipe plus de 95 % des 500 supercalculateurs les plus puissants au monde

Je cite, citation prise ici :

Pour résumer 493 supercalculateurs sont Linux + Unix. Il y en a 6 sous Windows !
Soit 1,2 %.
Aucun Apple. Ah si ! Le système d’origine d’apple, BSD : 1 sur 500, soit 0.2 %.

Que dire de plus ? Les chiffres parlent d’eux-même.

Si Linux a du mal à s’imposer dans le monde des ordinateurs de bureau, l’OS open source se taille une part de lion dans l’embarqué (notamment avec Androïd pour les smartphones) et dans le monde des superordinateurs.

La dernière liste du top 500 des supercalculateurs les plus puissants du monde montre que Linux équipe plus de 95 % des appareils présents dans la liste.

Au total 482 supercalculateurs du top 500 fonctionnent sous Linux.
Ce qui fait une part de marché de près de 96,4 % pour l’OS. Il est suivi par Unix, qui fonctionne sur onze appareils. Quatre systèmes fonctionnent sur une combinaison de systèmes d’exploitation. Windows équipe juste deux appareils de la liste et BSD un seul superordinateur.

Coding game : les résultats : olivier pons

Je suis content, je suis 92ème sur 1167 :

Coding Game résultat pour Olivier Pons 92ème sur 1167

Dans les faits, si on enlève ceux qui sont à 0% (on ne sait pas s’ils ont participé ou pas), je suis 92ème sur 871. Ce qui n’est pas trop mal.
Si j’avais réussi à résoudre le second challenge en entier, j’aurais été dans les 40 premiers…

Vous pouvez avoir accès à mes codes sources ainsi qu’aux résultats ici.

J’étais content pour le premier, réalisé assez rapidement (32 minutes) :
Coding Game 2013 11 22 analyse 1

Alors que pour le second, j’ai galéré comme un fou (sachant que je suis allé chercher une pizzas et que je l’ai mangé en famille pendant le concours) :

Coding Game 2013 11 22 analyse 2

Ce qu’il y a de marrant, c’est qu’en travaillant en local, je me suis ressorti le fichier décompressé au format texte et c’était amusant à voir :

Coding Game 2013 11 22 notes de musiques fichier décompressé au format texte

Développement : Coding contest !

Nouveau challenge de codeurs !

C’est pour le fun, essayez vous aussi 

Le principe est simple

Vous aurez deux puzzles de programmation à résoudre.

Pour ce faire, vous pourrez choisir votre langage favori parmi ceux-ci : Java, C, C++, C#, Javascript, PHP, Python, Ruby, Objective-C, Haskell and Go.
La durée moyenne d’un challenge est de 2 heures et 30 minutes.

J’y serai, le 23 novembre !

Inscrivez vous !
Si jamais plus de trois personnes se sont inscrites via le lien précédent, et ont dépassé un score de 0% (= y sont allées), j’aurais un t-shirt codingame 😉

IUT informatique : script Shell pour injecter la base de données WordPress

Dumper la base de données

mysqldump -u root -pmysql wordpresslocal > 2013.12.19.wordpresslocal.sql

Réinjecter la base de données

mysql -u root -pmysql -e "DROP DATABASE IF EXISTS wordpresslocal;"
mysql -u root -pmysql -e "CREATE DATABASE wordpresslocal DEFAULT CHARACTER SET utf8;"
mysql -u root -pmysql -e "USE wordpresslocal ; GRANT ALL PRIVILEGES ON wordpresslocal   TO 'v69a6YK614454xA'@'localhost' IDENTIFIED BY 'nQ1e7NfDRXG2q6H';"
mysql -u root -pmysql -e "USE wordpresslocal ; GRANT ALL PRIVILEGES ON wordpresslocal.* TO 'v69a6YK614454xA'@'localhost' IDENTIFIED BY 'nQ1e7NfDRXG2q6H';"
mysql -u root -pmysql wordpresslocal < 2013.12.19.wordpresslocal.sql