Archive Page 2

Site de rencontre

Je travaille depuis quelques mois sur un projet de site de rencontre, et voilà enfin le travail terminé.

www.flechedecupidon.fr

Mon site est assez simple, il ne propose pas de fonction avancée tel que tchat ou webcam. Un simple site pour célibataires souhaitant faire connaissance en s’échangeant des messages.

Le site est gratuit pour les femmes. Les hommes ont la possibilité de consulter les profils en page d’accueil, mais pour envoyer un message ou faire une recherche, ils doivent souscrire à l’offre Premium. De manière assez classique, je propose trois formules d’abonnement avec tarif dégressif.

Il y a beaucoup de sites de rencontre, mais il y a aussi beaucoup de célibataires à la recherche de l’amour. Je fais d’ailleurs partie de ces hommes esseulés. Cela peut paraître paradoxale d’être célibataire et de faire un site de rencontre, mais j’ai mené ce projet dans un esprit parfaitement professionnel.

Je ne compte pas faire fortune avec ce site. Je l’ai fais surtout pour découvrir le côté grisant de la création d’entreprise. Cela fait des nombreuses années que je veux franchir le pas, c’est maintenant chose faite, et je ne compte pas en rester là.

To be continued 😉

PS : Vous pouvez également suivre l’actualité de FlecheDeCupidon sur le compte Twitter : https://twitter.com/fdc_fr

Comment utiliser Twitter

Twitter est la dernière mascotte des médias, il ne passe plus une journée sans qu’un site d’info ou un blog en parle.

Très simple en apparence, Twitter est pourtant régit par des codes obscurs pour le néophyte. Je vous propose donc un petit tutoriel pour vous initier aux pratiques en vigueur dans la twittosphère. Vous trouverez un petit lexique en bas de page.

Qu’est-ce que Twitter ?

Twitter est généralement défini comme un service de micro-blogging. Il vous permet de poster publiquement des séquences très courtes, précisément 140 caractères, sur votre dernière paire de chaussure achetée en solde, sur votre émotion en ayant apris la mort de Michael Jackson, sur une news dont vous avez entendu parlé à la pause café, bref, sur tout ce qui mérite plus ou moins d’être partagé avec qui veut bien l’entendre. Vous pouvez également échanger des opinions, partager des liens, images ou vidéos avec vos amis.

Comment se faire des amis ?

Twitter peut aussi se définir comme un réseau social au même titre que Facebook. Cependant, la notion d’ami y est différente. Sur Facebook, c’est vous qui décidez qui peut devenir votre ami et suivre les mises à jour de votre profil. Sur Twitter, c’est l’inverse. Ce sont les autres qui décident de suivre ce que vous postez. Vos tweets sont publics et ouverts à tous (sauf si vous décider de restreindre votre profil à vos amis, mais cette pratique n’est pas courante). Cela signifie que vous pouvez à votre tour suivre le profil de n’importe quel twittonaute.

C’est cet aspect qui est le plus déroutant et qui peut s’avérer le plus décourageant. Vos tweets sont jettés dans la twittosphère comme des bouteilles à la mer. Il faut du temps, comptez plusieurs mois, avant de se constituer un réseau d’amis avec lesquels vous pourrez discuter régulièrement. Car ceux que vous suivez ne vous suivront pas pour autant.

Alors pour répondre à la question « comment se faire des amis », il y a quelques règles à respecter :

  • Pour commencer, recherchez les personnes que vous connaissez avec la fonction de recherche de Twitter. Ensuite, de nombreux blogueurs mettent le lien de leur profil Twitter sur leur blog. Enfin, sachez que certaines personnalités sont présentes sur Twitter. Personnellement je suis Sébastien Chabal ainsi que Fabrice Luchini [EDIT : Le compte de Fabrice Luchini a été piraté]. A chaque fois, parcourez la liste des abonnés et abonnements pour trouver de nouveaux twittonautes.
  • Une fois que vous avez trouvé des personnes sur Twitter, choisissez parmi celles-ci des personnes dont vous partagez les idées et les centres d’intérêts. Pour cela, lisez les 20 ou 30 derniers tweets. Il est tout à fait normal de commencer avec 20 ou 30 followings, tout en ayant aucun follower au début. Vous constaterez néanmoins qu’il devient difficile de suivre un trop grand nombre de personnes car cette activité est très chronophage. Personnellement, il me faut environ un heure, répartie sur toute la journée, pour suivre mes 100 followings et entretenir mon réseau.
  • Ensuite, lorsque vous vous êtes constitué un petit réseau, adressez-vous directement à vos followers. L’usage est de commencer le tweet par le pseudo de votre interlocuteur, préfixé avec le signe @. Il n’est pas nécessaire que votre interlocuteur fasse partie de vos followers, c’est donc une bonne manière d’attirer l’attention de quelqu’un. Naturellement, ajoutez à vos followers ceux à qui vous vous adressez. Ex : @hadf Très intéressant ton tutotiel !!
  • Enfin, persévérez. Il vous semblera crier dans le désert les premiers mois.

Que puis-je bien poster sur Twitter ?

C’est sans doute la question que se posent tous les néophytes. Que puis-je bien dire en 140 caractères ?

Tout dépend de l’usage que vous souhaitez faire de Twitter. Personnellement j’utilise Twitter comme un fil d’actualité, donc je partage moi-même des news qui m’intéressent ou mon opinion sur l’actualité informatique du jour. Mais vous pouvez parler de mode et de frou-frou si c’est ce qui vous passionne ^^ Le plus important est de se constituer un réseau qui soit en phase avec ses centres d’intérêts.

Très bien, mais 140 caractères, c’est un peu court. Eh bien, c’est justement cette contrainte très forte qui a stimulé la créativité des twittonautes. Ceux-ci ont développé des codes pour communiquer en si peu d’espace.

Voici un petit tour d’horizon des pratiques les plus répandues :

L’aparté :

Nous en avons déjà parlé, ce message débute avec le pseudo de votre interlocuteur préfixé avec le signe @. A ne pas confondre avec le message direct (DM : Direct Message) qui est très peu utilisé.

Sachez que, lorsqu’un tweet débute par un pseudo, celui-ci apparait uniquement dans la timeline des followers que vous avez en commun avec votre interlocuteur.

Ex: @hadf Merci pour ce tuto

Dans cet exemple, ce message apparaîtra uniquement sur la timeline des followers que vous avez en commun avec @hadf

Le lien :

Puisqu’il est difficile de philosopher en 140 caractères, la qualité d’un tweet est généralement jugé à la qualité du lien auquel il renvoi. Ainsi, vous partagez un article de journal ou un billet de blog. Le problème est que, limité à 140 caractères, vous ne pourrez bien souvent pas posté l’url complète de votre article. Il existe un service qui permet de contourner cet obstacle, ce sont les raccourcisseurs d’url. Le service officiel de Twitter est bit.ly, mais vous trouverez de nombreux autres services qui permettent de raccourcir une url pour la faire tenir en moins de 140 caractères, ce qui vous permettra d’y ajouter un commentaire car on ne poste généralement pas un lien tout seul.

Ex: Excellent tuto http://bit.ly/7RC9fd (ce lien renvoie vers cet article)

Le retweet :

Le retweet est une pratique qui consiste à reprendre à votre compte, tout en citant l’auteur, un tweet qui vous a particulièrement intéressé. Cette pratique est très répandue, c’est grâce à elle qu’une info peut se diffuser très rapidement dans la twittosphère, comme ce fut le cas lors de la mort de Michael Jackson. Les twittonautes ont été les premiers à apprendre le décès de la star car, de retweet en retweet, l’info s’est propagée à toute la twittosphère. Pour retweeter un tweet, il suffit de le copier-coller en le préfixant par les lettres RT suivies de l’auteur d’origine. La plupart des clients Twitter ont une fonction de retweet intégrée qui évite de copier-coller manuellement. Le problème du retweet est qu’il nécessite un peu d’espace supplémentaire. Donc quand vous écrivez un tweet que vous espérez voir retweeté, laissez toujours quelques dizaines de caractères libres. Etre retweeté est un signe d’influence dans la twittosphère.

Ex: RT @toto Excellent tuto http://bit.ly/7RC9fd

Le hashtag :

Le hashtag permet de tagger un tweet pour préciser le thème en le préfixant par le symbole #. Il est possible d’ajouter plusieurs hashtags, en revanche il n’est pas recommandé de hashtagger tous ses tweets. L’intérêt du hashtag est de réunir sous un même tag tous les tweets traitant du même sujet. Ainsi, le site http://www.hashtags.org permet de suivre les hashtags les plus populaires.

Ex: Sortie de prévue de Firefox4 fin 2011 #Firefox #Firefox4

Entretenir son réseau

La règle la plus élémentaire est de répondre à ses followers, ce qui vous oblige à consulter régulièrement les tweets qui vous sont adressés. Pour cela deux solutions. La première est de vous rendre régulièrement sur le site de Twitter et de cliquer sur le lien à droite qui porte votre pseudo (dans mon cas @hadf). La deuxième solution, de loin celle préférée par les twittonautes, est d’utiliser ce qu’on appelle un client Twitter. Il s’agit d’un petit logiciel qui vous permet de poster sur Twitter et de suivre votre timeline ainsi que les tweets qui vous sont adressés. Il existe de nombreux clients, personnellement j’utilise Seesmic Web, car cela me permet d’accéder à Twitter au boulot sans rien installer sur mon ordinateur de travail. Il existe une liste officielle de clients Twitter :

Pour entretenir votre réseau, sachez également qu’une pratique courante sur Twitter consiste à gratifier ses followers les plus intéressants par un Follow Friday. Comme son nom l’indique, le Follow Friday se pratique le vendredi et consiste à poster les pseudos des personnes que vous voulez mettre en avant en ajoutant le hashtag #FF. Il est tout à fait possible de mentionner un follower à plusieurs reprises, ou d’en mentionner plusieurs en même temps. Néanmoins, je recommande d’éviter de mentionner trop de personnes en même temps car cela atténue la visibilité de votre Follow Friday.

Ex: #FF @hadf @toto

Les applications exotiques

Twitter, comme nous l’avons vu, est un service de micro-blogging. Mais sachez que ce service peut être utilisé à d’autres fins qui reposent généralement sur le hashtag.

Je citerai deux services qui utilisent Twitter :

  • Facebook : Vous pouvez poster sur Facebook à partir de Twitter, ce qui permet de partager un message sur les deux réseaux en même temps. Vous devez pour cela ajouter l’application Selective Twitter à votre compte Facebook. Ensuite, la manipulation consiste tout simplement à ajouter le hashtag #fb à la fin de votre tweet, et dans les minutes qui suivent, votre message apparait également dans votre profil Facebook
  • Covoiturage : Le site easycovoiturage.com a mis en place un service basé sur Twitter. Vous pouvez ainsi proposer des trajets à partir de Twitter en utilisant le hashtag #covoiturage et en respectant une syntaxe bien précise : départ/arrivée/commentaire #covoiturage. Ce service est très peu utilisé, mais il donne un aperçu de ce qui se fait autour de Twitter.

Je citerai également une des plus anciennes applications faite autour de Twitter, il s’agit de TwitterVision, un service qui permet de localiser les tweets en temps réel :

Conclusion

J’espère vous avoir donné envie de mieux connaître Twitter et surtout de l’utiliser. N’hésiter pas à m’ajouter dans vos followings ^^

Lexique

tweet : message posté sur Twitter

twittosphère : le réseau Twitter

twittonaute : adepte de Twitter

follower : twittonaute qui suit votre profil (abonné)

following : twittonaute que vous avez décidé de suivre (abonnement)

timeline : fil d’actualité qui agrège tous les tweets de vos followings

client : logiciel que vous installez sur votre ordinateur

url : lien hypertexte commençant par http://

Responsabilité et atomicité des fonctions

Le projet sur lequel je travaille comporte des problèmes d’architecture que j’ai déjà évoqué dans mon billet précédent. Aujourd’hui, je souhaite aborder un autre problème de conception, qui concerne la répartition des responsabilités dans une classe.

Craig Larman nous conseille de respecter le principe de forte cohésion lorsqu’on défini les responsabilités que doit implémenter une classe. A une échelle inférieure, une méthode doit également respecter une certaine cohésion.

Pour être concret prenons l’exemple d’une méthode qui s’appellerait isValide() et supposons que l’implémentation de cette méthode nécessite d’effectuer une itération sur une liste. La tentation est de profiter du parcours de cette liste pour effectuer des traitements annexes « à la volée », ce qui évite de parcourir la liste une deuxième fois. Dans notre cas, le contrat annoncé par la méthode isValide() consiste fournir la réponse à une question. Pour respecter la cohérence de la fonction, celle-ci doit se contenter strictement d’y répondre et rien d’autre. Tout traitement annexe vient polluer la méthode et rend son utilité moins évidente.

Le problème qu’on peut rencontrer est que cela peut aboutir à une duplication de code. Pour reprendre l’exemple d’une fonction qui implémente une itération sur une liste, on peut se retrouver à implémenter cette itération dans plusieurs méthodes pour respecter l’unitarité de chacune d’elle. Si cela pose des problèmes rédhibitoires de performance, la solution est de n’avoir qu’une seule itération et d’implémenter le pattern Observer pour effectuer plusieurs traitements sur les éléments de la liste.

La cohérence d’une fonction rend son utilité plus claire ce qui facilite la maintenance du code.

La gestion des dates en Java

Je travaille actuellement sur un projet dans lequel nous avons besoin de manipuler des dates. Le projet est assez ancien, il date de plus de quatre ans, et à l’évidence, ceux qui ont écrit cette appli ne maîtrisaient pas très bien la programmation orientée objet. Et comme dans le même temps, très peu de documentation a été rédigée et que le projet a changé de domaine, je me retrouve tout seul à essayer de décrypter des lignes de code absconses et indigestes.

Je souhaite donc vous faire profiter d’un petit retour d’expérience afin d’améliorer la gestion des dates dans vos projets Java.

Petit rappel, il existe deux classes qui permettent de représenter une date dans l’api standard. Il s’agit de Calendar et Date, toutes deux dans le package java.util. Je ne traite pas ici du package java.sql.

Lorsque vous avez besoin de représenter une date en attribut d’une classe, je recommande l’utilisation de Date plutôt que Calendar. En effet, Date est un objet immuable (ou presque), il garanti qu’il ne sera pas modifié par mégarde et élimine les problèmes d’accès concurrent en cas de programmation multithread :

public class Personne {
    public final String nom, prenom;
    public final Date dateDeNaissance;
}

Faites attention lorsque vous initialisez une Date. Si vous utilisez le constructeur par défaut, la date sera initialisée avec pour valeur le nombre de milliseconde depuis le 1er janvier 1970. Le problème est que lorsque vous récupérez une deuxième Date par défaut et que vous les comparez toutes les deux, bien que ces deux dates correspondent au même jour calendaire, la comparaison échouera car la valeur en milliseconde sera différente.

Je recommande donc l’écriture d’une classe d’utilitaire qui permettra de manipuler les dates en adoptant une approche fonctionnelle :

public class CalendarUtil {
    private static final Calendar calendar = Calendar.getInstance();

    public static Date getDate(int jour, int mois, int année) {
    }
    public static Date getDate() {
        //retourne une date correspondant à la date courante (aujourd'hui)
    }
    public static Date incrementer(Date date, int jours) {
    }
    public static boolean equals(Date date1, Date date2) {
        //indique si deux dates correspondent au même jour calendaire
        //sans tenir compte des heures, minutes, secondes
    }
    public static int difference(Date date1, Date date2) {
        //retourne la différence en nombre de jours
    }
    public static boolean isEcheanceEchue(Date date, Periodicite period) {
    }
    public static String format(Date date, String pattern) {
    }
    [...]
}

Comme vous l’aurez constaté, cette classe d’utilitaire ne prend que des Date en paramètre. C’est en effet ma troisième recommandation et sans doute la plus importante. L’usage de Calendar doit être réservé aux calculs sur les dates, et donc être circonscrit à la classe CalendarUtil.

Je ne traite pas de la question des fuseaux et des locales, mais je recommande là encore une approche fonctionnelle

Par ailleurs, les plus perspicaces d’entre vous aurons remarqué que la méthode incrémenter() de CalendarUtil peut entrainer une conflit de signature. C’est le cas si l’on a besoin d’ajouter des mois ou des années à une date.

Dans ce cas, je recommande de suivre les préconisations de Stephan Schmidt :

public static Date incrementer(Date date, NbJours jours) {
}
public static Date incrementer(Date date, NbMois mois) {
}
public static Date incrementer(Date date, NbAnnees annees) {
}
public class NbJours {
    public final int value;
    public Jour(int value) {
        this.value = value;
    }
}
[...]

Ces recommandations, si elles sont suivies à la lettre, vous éviterons bien des soucis tel que je peux en rencontrer actuellement avec mon vieux projet. Dernier conseil qui va de soit, vous devrez évidemment tester unitairement chaque méthode de CalendarUtil.

Lancement du projet CodeLang

Je vous annonce le lancement du projet CodeLang.

Il s’agit d’un projet extrêmement ambitieux qui vise à créer un metalangage permettant de retranscrire un document texte dans n’importe quel langage naturel, pourvu que ce langage soit supporté.

J’ai ce projet en tête depuis un certain nombre d’années, mais ce n’est que très récemment que m’est revenue la volonté de le mettre en oeuvre.

Ce projet ce compose en plusieurs phases.

Tout d’abord la rédaction d’une spécification détaillée du metalangage. En parallèle, un Modèle Conceptuel des Données précisera la structure de la base de données.

Puis lorsque les spécifications auront été rédigées, viendra la constitution des données elles-même. Ce travail sera le plus laborieux. J’envisage de le réaliser sur un mode collaboratif à l’instar de l’encyclopédie Wikipedia.

L’annonce de ce lancement se fait à un stade très embryonnaire du projet. Je dois dire que, compte tenu de l’ambition du projet, je ne peut pas affirmer avec certitude qu’il aboutira avec succès. Néanmoins, je pense avoir suffisamment muri le problème pour être convaincu de la pertinence de l’approche.

Google Chrome OS

Google lance une véritable bombe thermonucléaire sur le monopole bien gardé de Microsoft. Les rumeurs couraient bon train depuis quelques mois, et même quelques années. Personnellement je n’y croyais pas car il me semble que Google s’éloigne de son coeur de métier, mais il faut avouer que je ne suis pas insensible à l’idée de voir un challenger de poids proposer une alternative sérieuse à Windows.

J’aime beaucoup le navigateur Chrome et j’ai hâte qu’il soit disponible en version stable pour Linux. Ce qu’ils ont fait avec Chrome montre que les ingénieurs de Google ont des idées neuves et le talent pour les mettre en oeuvre. Pour Chrome OS, le défi est d’une toute autre ampleur et l’ambition clairement affichée. Créer un OS fiable, rapide et conviviable. Je suis certain que les ingénieurs de Google sauront répondre à chacun de ces critères.

C’est une bonne chose que Google ait décidé de développer un OS spécifique pour le marché des PC car celui-ci a des exigences différentes en matière d’ergonomie que les téléphones portables. Cela permettra d’ailleurs aux équipes d’Android de concentrer leurs développements sur le marché très prometteur des terminaux mobiles, et aux équipes de Chrome OS de travailler sur l’ergonomie propre aux PC.

Google a une vision de l’informatique diamétralement opposée à celle de Microsoft. Il sera donc intéressant de voir la concrétisation de cette vision car elle apportera un regard nouveau sur notre relation à la machine. Microsoft base son modèle économique sur la notion de biens et de possession alors que Google met en avant les possibilités en matière de services et de mutualisation qu’offrent les réseaux. Il y a autant de différence entre le modèle économique de Microsoft et celui de Google qu’entre la notion d’économique primaire et tertiaire.

Je suis ravi que Google assume sans complexe son rôle de challenger de Microsoft car cela va mettre un terme à l’économie de rente qu’est devenue le marché des systèmes d’exploitation pour favoriser au contraire l’innovation.

Swinger 0.4.1 is released

Comme le titre l’annonce, j’ai livré une version intermédiaire qui ajoute le support des layouts managers. Il est donc possible de choisir son layout, ce qui n’était pas le cas auparavant.

Cette version corrige également un bug concernant le chargement des scripts groovy à partir d’une librairie externe.