commentaires RSSArticles commentaires RSSCommentaires

Archive pour la catégorie ‘Geekeries’

cat Facebook > Google

Mardi 3 juin 2008

google calendarDepuis peu, j’ai succombé à Google Agenda; je déteste l’idée de dépendre de Google pour certains outils mais c’est tellement pratique… Étant utilisateur de iCal sur mac, tout est presque parfait, même la synchro en Webdav sur un serveur fonctionne bien. Alors pourquoi changer ? Parce que la synchro est readonly; iCal peut “pousser” les calendriers, mais ne les recharge pas s’ils sont modifiés par une autre application. C’est quand même dommage pour un agenda de pas pouvoir être modifié de n’importe où.
Google Agenda fait grosso modo la même chose qu’iCal et plus : possibilité de créer des calendriers thématiques, de s’abonner à des calendriers “publics” (par exemple les jours fériés français), de partager des calendriers entre amis, d’exporter au format “ICS”, “XML” ou “CSV”, notifications dans tous les sens, etc.

Le rapport avec Facebook ?

Et si vous pouviez récupérer les anniversaires de vos contacts Facebook et les importer dans un calendrier dédié de Google Agenda ? En cherchant un peu c’est possible et bien pratique.

facebook screenshotIl vous suffit d’aller dans “Events” puis sur l’onglet “Birthdays” (lien direct) et de cliquer sur “Export events” en haut de la page. Un pop-up vous propose d’enregistrer le fichier au format “ICS”.

google calendar screenshotEnsuite allez dans Google Agenda, crééz un nouvel Agenga “Anniversaires” (pour faire original), puis dans la liste des agendas, cliquer sur le bouton “Ajouter” > “Importer un agenda”, et téléchargez le fichier ICS précédemment récupéré.

Et voilà !

Passwords are like pants…

Mercredi 21 mai 2008

passwords - by Richard Parmiter - http://www.flickr.com/photos/parmiter/« … you should never leave them out where people can see them, you should change them regularly and you shouldn’t loan them out to strangers. »

Un bon conseil mais que personne n’applique (moi le premier). Pire, la plupart des gens n’utilisent que 1 ou 2 mots de passe. Le problème ? Quelqu’un découvre votre mot de passe et avec un peu de chance il peut enchérir à votre place sur eBay, usurper votre identité sur les forums & les réseaux sociaux, commander ses bouquins avec votre Amazon, etc. Pas génial hein ?

Et si il existait une solution qui permette :

  • d’avoir un mot de passe différent, unique et complexe, pour chaque site
  • de NE PAS avoir à retenir tous ces mots de passe
  • de NE PAS avoir à les stocker quelque part (online, disque dur, clé usb…)
  • de pouvoir les récupérer partout, tout le temps (ou presque) ?
  • d’être (relativement) protégé contre le pishing et les keylogger

Et bien c’est possible avec “PasswordMaker“, un soft opensource disponible sous forme de plugin firefox, d’exécutable graphique ou en ligne de commande, de page html online ou offline ou version mobile, etc. qui permet de générer ces mots de passes “forts” à la volée, sans jamais les stocker.

Évidemment sous Firefox, il y a un password manager, mais vous devez quand même choisir ces mots de passe et il sont enregistrés localement donc pas de portabilité et faible sécurité.

Comment ça marche ?

PasswordMaker génére un Hash (qui servira de mot de passe) en concaténant un mot de passe principal, l’url du site (ou le nom de l’application) et divers modificateurs pour complexifier le mot de passe généré, et en choisissant les caractères utilisés et la longueur.

C’est quoi un hash ?

Un hash est le résultat d’une fonction mathématique non-réversible, qui permet d’obtenir une chaine de caractères unique à partir d’un texte ou d’une suite de bits. C’est une signature numérique. “Non-réversible” signifie qu’il n’existe aucun moyen de retrouver le texte d’origine à partir du Hash. Il existe de nombreux algorithmes, les plus connus étant MD5 et SHA1.

Exemple

Vous êtes sur le site d’amazon.fr, avec les paramètres par défaut de PasswordMaker :

Master password : plop
Use l33t : [none] (transformations type “pouet” => “þ0u3τ”)
Algorithme : MD5
URL : amazon.fr
longueur : 8
caratères : [set par défaut]
nom d’utilisateur : [vide] (nom d’utilisateur, modifie le mdp)
modificateur : [vide] (chaine pour modifier le mdp)
préfixe : [vide] (pour ajouter un prefixe au mdp généré)
suffixe : [vide] (pour ajouter un suffixe au mdp généré)

mot de passe = MD5(”plop”+”amazon.fr”) = Ie}PN”>D

Plutôt pas mal non ?

Conseils (enfin si je puis me permettre ;)

Le plugin Firefox sous mac est peu bugué, rien de grave, mais permet de gérer des profils spécifiques, de compléter automatiquemet les champs de formulaires, etc.

Pour la génération des mots de passe :

  • utilisez un seul profil (si possible) pour limiter les paramètres à mémoriser
  • utilisez un algo de Hash robuste, type : SHA-256, HMAC-*
  • changez le nb de caractères à 10 ou plus, avec les caractères par défaut
  • utilisez un modificateur, au cas ou le Master password serait compromis
  • username, l33t, prefixe & suffixe : bof, des choses en plus à se rappeler

That’s all :)

Simple Joule Thief

Mercredi 23 avril 2008

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/4e5997947ea7e8215d8f0bbbab3ed506.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/4e5997947ea7e8215d8f0bbbab3ed506.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/b285e0719a51d4b23204472c309f7ea9.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/4e5997947ea7e8215d8f0bbbab3ed506.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/9c2f4cfaef03e9b409c3bebbd71d93d5.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/4cda68dbd3f9c8cce9aa103c75a301bd.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/81105c00ff7ec47169cddd0de7b8c642.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/8561578591b22fe84b9258cc3567af56.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Warning: file_put_contents(/usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/cache/1e3e88d9945f88a8a9a4055d705b589e.cache) [function.file-put-contents]: failed to open stream: Permission denied in /usr/home/bozze/web/org.bozze.www/htdocs/wordpress-2.6.1/wp-content/plugins/flickr-tag/FlickrTagCommon.php on line 191

Il y a quelques temps, j’ai vu une video d’un Weekend Project Make: (inspiré par ce site) sur la réalisation d’un « Joule Thief », un petit montage électronique pour piloter une LED.

Au delà de l’aspect expérimental et même si ce montage n’est pas très optimisé, il permet d’allumer une à plusieurs LED avec une tension d’alimentation inférieure à la tension de seuil d’une LED et permet de vider complètement des piles que la plupart des appareils considèrent comme usées.

L’envie m’a donc pris la semaine dernière de faire ce montage sur un coin de breadboard, avec des composants de récup — pour voir — et ça fonctionne plutôt bien; voici les photos :

Ingrédients

  • 1 LED blanche ou bleue (pour une tension de seuil de ~ 3V)
  • 1 transistor NPN petits signaux (ici un 2N1711)
  • 1 résistance de 1kΩ
  • 1 tore en ferrite (antiparasite d’un boitier de PC)
  • du fil de cuivre monobrin (récupéré dans du câble RJ45)

Pour fabriquer la bobine, on enroule deux fils parallèlement autour du tore en ferrite, puis on relie le début de l’un à la fin de l’autre, pour que les enroulements soient en opposition de phase. Les deux autres extrémités étant respectivement reliées à la base via la résistance R et au collecteur.

Schéma de principe

Oui je me la donne grave en ascii art :)

                 B
          +---@@@@@@----------------+---------------+
  +-------+   ======              |/               _|_
__|__     +---@@@@@@----/\/\/\/---|  transistor    \ /  LED
 --- pile        A         R      |\    NPN        _'_
  |                                 |               |
  +---------------------------------+---------------+

Comment ça marche ?

Lorsqu’on connecte la pile, le transistor est bloqué, un courant passe à travers l’enroulement A (en bas sur le schéma) et la résistance jusqu’au collecteur ce qui a pour effet de commuter le transistor. Un courant plus important commence à circuler via l’enroulement B (mais pas dans la led). Les deux enroulements sont connectés tête-bèche et le courant circulant dans l’enroulement B induit un courant dans l’enroulement A qui s’oppose au courant circulant, jusquà l’annuler complètement. À ce moment le transistor se bloque et sans courant dans l’enroulement A, l’enroulement B se comporte comme une inductance; Le courant continue de circuler dans l’enroulement B et l’énergie électromagnétique accumulée par l’enroulement génère un courant supplémentaire (auto-induction) mais se retrouve bloqué au collecteur ce qui a pour effet d’augmenter la tension à ce point. Lorsque la tension dépasse la tension de seuil de la LED (~3V) celle-ci devient passante, le courant circule à travers et elle s’éclaire. Le courant dans l’enroulement B chute rapidement et le cycle recommence.

Le montage oscille à une fréquence d’environ 65kHz (cf. les photos), ce qui rend le clignotement de la LED imperceptible.

First Wordpress Plugin

Jeudi 10 avril 2008

Wordpress Icon(pour faire plaisir à Kat qui s’impatientait)
Hier soir, en écrivant mon précédent billet, je me suis dit que ça serait pas mal de faire un système de notation classique avec des petites étoiles. La tâche ne semblant pas ardue, j’ai pensé que ça ferait une bonne occasion de voir comment marchent les plugins Wordpress et d’en faire un.

Après un petit tour dans mes plugins existants et une lecture en diagonale de l’API Wordpress voici mon premier plugin. L’idée (et le plugin) est simple, lors de l’édition du post je place une balise <!--star-rank:X:Y--> où X est la note et Y le maximum. Le plugin se charge de parser le post et de remplacer la balise par les petites étoiles.

star onstar onstar onstar onstar off
<= par exemple : <!--star-rank:4:5--> :)

// on déclare l’url du plugin
global $sr_url;
$sr_url = get_bloginfo(‘wpurl’).‘/wp-content/plugins/star-ranking’;

// on déclare le plugin
load_plugin_textdomain(’sr’,$path = $sr_path);

/* Fonction de filtre sur le contenu d’un post
 * parser et remplacer la balise < –star-rank:X:Y–> */

function sr_callback( $content )
{
  global $sr_url;

  // on recherche notre balise et on vérifie le format
  // <!–star-rank:X:Y–> sinon on renvoie la ligne telle quelle
  if(! preg_match(‘/<!–star-rank:(\d+):(\d+)–>/’, $content, $matches)) {
    return $content;
  }

  // nombre total d’etoiles (on limite a 10)
  $max = ($matches[2] > 10) ? 10 :  $matches[2];

  // nombre d’etoiles allumées, inférieur ou égale au total d’etoiles
  $score = ($matches[1] > $max) ? $max : $matches[1];

  // Début du bloc HTML de remplacement
  $rank = "\n<div id=\"star-rank\">";

  // on place d’abord les etoiles "allumees"
  for ($i = 1; $i <= $score; $i++) {
    $rank .= ‘<img src="’.$sr_url.‘/star_on.gif" alt="star on" />’;
  }

  // …puis les etoiles restantes (c-a-d "eteintes")
  for ($i = 1; $i <= ($max - $score); $i++) {
    $rank .= ‘<img src="’.$sr_url.‘/star_off.gif" alt="star off" />’;
  }
  // on ferme le bloc
  $rank .= "</div>\n";

  // Enfin on remplace notre balise par le nouveau contenu HTML
  return preg_replace(‘/<!–star-rank:\d+:\d+–>/’, $rank, $content);
}

// On rajoute notre filtre de contenu à Wordpress (Hook)
add_filter(‘the_content’, ’sr_callback’);

Wordpress plugin translation

Mercredi 2 avril 2008

Pouloum pouloum, je me suis rajouté un plugin sur Wordpress qui n’était pas en français (Au RER et Dame Nation) mais avec gettext, sous Unix et pour peu que le développeur dudît plugin ait pensé à créer un fichier “.pot” contenant les chaînes de caractères, c’est pas très compliqué.

Il suffit de jeter un oeil dans les fichiers “.php” du plugin, chercher les fonctions de traduction afin d’identitfier le domaine (dans mon cas, le template ne portait pas le nom du domaine); il y a deux types d’appels :

__("message", "domaine")
/* ou alors */
_e("message", "domaine")

puis on dérive le .pot vers un fichier .po comme suit :

# "ll_CC" est la locale (pour moi : fr_FR)
# et "dom", le domaine du plugin
msginit –locale=ll_CC –input=‘fichier.pot’ –output=‘dom-ll_CC.po’

On compile le .po et on laisse le fichier généré (.mo) dans le dossier du plugin :

msgfmt -o dom-ll_CC.mo dom-ll_CC.po

That’s all falks !