Microsoft renonce à Yahoo … provisoirement

C’est la grosse info du week-end, Microsoft retire son offre d’achat sur Yahoo. Les spécialistes étaient encore nombreux la semaine dernière à parier sur une victoire de Microsoft. Finalement, les paroles de Steve Ballmer qui déclaraient que Microsoft était capable d’aller de l’avant tout seul n’étaient pas à prendre à la légère.

Il est curieux que Microsoft n’ait pas tenté d’OPA hostile sur Yahoo, en ayant largement les moyens financiers. Le management de Microsoft considère peut-être que son argent serait mieux dépensé en Recherche et Développement. Une autre hypothèse est que cet épisode a fait naître des possibilités d’alliance jusqu’alors insoupçonnées, notamment entre News Corp et Microsoft.

Le résultat immédiat est que le cours de bourse de Yahoo dévisse sévèrement, perdant son attractivité spéculative. Il sera intéressant de voir son évolution dans les semaines et les mois à venir car un affaiblissement de Yahoo pourrait remettre l’idée d’une OPA hostile au gout du jour, passé la période de carence suivant le retrait d’une offre.

Ubuntu 8.04 est sortie

La toute nouvelle version de Ubuntu est sortie hier. Hardy Heron, de son nom de baptême, est disponible en version LTS (Long Term Support).

Parmi les nouveautés, notons une nouvelle fonction d’installation qui permet d’installer Ubuntu comme n’importe quel autre logiciel à partir de Windows. Plus besoin de créer de partitions. Cette nouvelle fonction d’installation devrait aider les newbies à passer à Linux.

Notons également que Firefox sera livré en version 3.0 bêta 5. Cela rendra le passage à la Final Release plus facile.

Microsoft travaille sur un service de synchronisation

Microsoft travaille sur le service Mesh qui est un service de synchronisation de fichiers. Ce service permettra à terme de partager des fichiers entre différents terminaux (pc, portable, etc…). Microsoft nous livre là sa vision du modèle S+S (Software+Service), en opposition au modèle SaaS. Dans le cas de Mesh, celui-ci propose uniquement un service de synchronisation de fichiers qui, pour être lus, nécessitera la présence du logiciel idoine (Word, Excell, etc…) sur chaque terminal. Tandis que dans le modèle SaaS, les fichiers, en plus d’être stockés on the cloud, peuvent être consultés directement à travers le navigateur, l’utilisateur n’a besoin d’aucun autre logiciel. C’est le cas par exemple de la suite Google Apps.

Le modèle S+S a été pensé pour préserver le modèle économique de l’informatique de bureau sur lequel Microsoft a bâti sa fortune. Jusqu’à présent, Microsoft s’est révélé incapable de vendre du service, toutes ses tentative en la matière ont plus ou moins échoué, qu’il s’agisse de son portail Live ou de sa régie publicitaire APS. La lutte entre Microsoft et Google se traduit par l’opposition de deux modèles économiques, l’un basé sur la rente offerte par une situation monopolistique, l’autre en quête de reconnaissance et sachant montrer l’agilité qui caractérise la position d’outsider.

Java est présent sur 99.9% des PC en entreprise

Selon une étude Forrester mentionnée sur Silicon.fr, le logiciel Java (JRE) est présent sur 99.9 % des PC en entreprise, devant le logiciel Flash (99%).

OOXML a été validé par l’ISO

Après de nombreux rebondissements et un lobbying acharné de la part de Microsoft, le format bureautique OOXML a finalement été validé par l’ISO à l’instar de son concurrent ODF. L’industrie se retrouve donc maintenant avec deux formats bureautiques standards.

Il se pourrait bien que la guerre des formats soit complètement dépassée par le phénomène SaaS. Le mouvement suivi actuellement par l’informatique va vers une dématérialisation de l’information. Jusqu’à présent la notion d’information était rattachée à la notion de fichier. Maintenant, avec des services tels que Google Docs, celle-ci peut-être éditée et stockée directement en ligne. Les fonctions de publication ne sont pas toujours disponible mais le mouvement est en marche. Avec un service d’édition et de publication en ligne tel que le propose un wiki, le format dans lequel est stocké un document n’a plus aucune importance, c’est le service en ligne garantie l’accessibilité à l’information.

Google Sky accessible par le Web

Quelques mois seulement après avoir été ajouté à Google Earth, Google Sky est dorénavant accessible par le Web, c’est-à-dire à travers le navigateur.

J’ai eu un peu de mal à me repérer au début, et pourtant je connais bien la carte des étoiles car je suis un passionné d’astronomie. Il m’a fallu recourir au filtre “historique” pour repérer les principales constellations. En revanche, la fonction de recherche est très efficace. Il est possible de rechercher une constellation, une étoile ou n’importe quel astre par son nom ou sa désignation NGC. Même les planètes sont visibles à leur position réelle.

Un framework Swing

J’ai développé un framework Swing que j’ai appelé Swinger et qui permet de décrire une application de bureau avec un simple fichier XML :

<j:frame width="600" height="400" addWindowListener="actions.ActionQuitter" x="50" y="50">
	<j:menubar>
		<j:menu text="Fichier">
			<j:menuitem text="Quitter" addActionListener="actions.ActionQuitter"/>
		</j:menu>
	</j:menubar>
	<j:panel width="600" height="400">
		<j:textarea text="Hello !" width="300" height="200"/>
	</j:panel>
</j:frame>

Je dois avouer que je suis plutôt fier de mon bébé. Il est encore très incomplet car cela ne fait que trois jours que je travaille dessus, mais j’espère qu’il est promit à un bel avenir. J’ai écrit un KickStart sur le wiki du projet. Si vous avez des questions, n’hésitez pas à les poser dans l’onglet “Issues”.

Comment Google est devenu un concurrent de Microsoft ?

Amazon, eBay, et bien d’autres, les exemples ne manquent pas de sociétés qui fleurissent dans la plus grande indifférence de Microsoft. Alors, comment Google, à l’origine une startup tout à fait ordinaire, est devenu la bête noire de Steve Ballmer ?

Lorsque Larry Page et Sergey Brin travaillaient sur leur sujet de thèse à l’université de Stanford, il est vraisemblable qu’ils n’avaient pas d’autre ambition que de concevoir un simple moteur de recherche. Leur concurrent de l’époque s’appelait alors AltaVista et non Microsoft. Le génie des fondateurs de Google a été de décrocher un accord commercial avec Yahoo! pour la fourniture du service de recherche en ligne. Cet accord n’est pas sans rappeler celui qu’une autre startup des années 80 signait avec le géant informatique de l’époque qu’était IBM, j’ai nommé Microsoft.

Dans les années 90, la recherche en ligne était perçu comme un service secondaire car il n’apportait aucune rente. Le modèle dominant était celui du portail. Figure emblèmatique de cette époque, Yahoo! n’a rien inventé, il s’est contenté de retransposer sur le net le modèle économique des médias traditionnels, à savoir la vente d’espace publicitaire. Il faut attendre l’invention par Overture des liens sponsorisés pour que tout bascule. Google saura mieux que quiconque mettre à profit cette invention marketing pour en faire un véritable modèle économique. Dans le capharnaum qu’est devenu le Web à la fin des années 90, il devient en effet de plus en plus difficile de se faire connaître de sa clientèle. Pour la même raison, les moteurs de recherche sont devenus un service incontournable. L’alchimie qui est à l’origine du décollage de Google est un mélange de tout cela, combiné à la sobriété, la qualité et la rapidité du service.

Pendant ce temps, le Web a mûri et commence à proposer des services en ligne tel que la messagerie. L’avènement des webmails est un tournant dans l’histoire du Web. Jusqu’alors, le Web fournissait essentiellement du contenu, avec les webmail, il fournit un service. Le rachat de Hotmail par Microsoft est significatif de la révolution en cours. L’avènement des services en ligne font renaître avec force le mythe de l’informatique distribuée dans lequel les postes de travail ne seraient plus que de vulgaires terminaux d’accès au Web.

C’est dans ce climat que Google émerge comme un acteur de ce nouveau Web, constitué de services. La technologie a progressé et laisse entrevoir tout le potentiel du Web qui offre bientôt des services de toute sorte. La créativité des développeurs alliée au pouvoir d’attraction d’Internet confirme l’intuition que le Web est destiné à devenir bien plus qu’un média de masse. Les progrès réalisés en terme d’architecture, notamment avec le pattern AJAX, repoussent les frontières du possible jusqu’à venir gratter à la porte du monopole de Microsoft.

Google Earth, GMail, etc… Avec sa frénésie créative, Google est devenu une figure emblématique du nouveau Web. A ce titre il incarne ce que le Web a de prometteur en terme d’innovation. Microsoft a flairé ce potentiel et a tenté de suivre le mouvement en posant un pied dans les services tels que la messagerie ou la recherche. Mais il le fait presque à son corps défendant. Microsoft est le théâtre de l’affrontement entre le modèle de l’informatique de bureau et le modèle distribué des services en ligne. C’est parce que Google est un des acteurs majeurs de ce changement qu’il est devenu le principal challenger de Microsoft.

Un concert pour la paix

Créer une application Facebook en Java

Je vous propose un tutoriel pour créer votre première application Facebook. Il existe deux APIs standards, l’une en PHP, l’autre en Java. Nous allons étudier la seconde. Notre application s’appellera yafba (Yet Another Facebook Application).

Nota : Certaines lignes de code sont trop longues et ne s’affichent pas entièrement. Dans ce cas, faites un copier-coller dans un éditeur de texte.

Prérequis

Vous devez posséder un compte sur Facebook et ajouter l’application developers. Cette application va vous permettre d’obtenir une clé d’API pour votre application et vous permettre d’accéder à la documentation en ligne.

Vous devez également avoir un hébergement Java. En effet, bien que les utilisateurs accédent à votre application par l’intermédiaire de Facebook, vous hébergez vous-même l’application et les données que vous recueillez. Ce qui est important, c’est que le serveur qui héberge votre application doit être accessible publiquement par une URL. Notez qu’il n’est pas nécessaire d’acquérir un nom de domaine, vous pouvez utiliser l’URL fournie par votre hébergeur.

L’environnement de développement

Vous devez télécharger l’API Facebook. Celle-ci est disponible via l’application developers :

L’archive contient le code source de la librairie à partir duquel vous pourrez générer la javadoc. Vous trouverez également la librairie compilée sous la forme d’une archive facebook.jar que vous devez importer dans votre projet.

Notez qu’il n’est pas possible de tester une application Facebook en localhost. Pour être testée, l’application doit être déployée sur le serveur que vous avez déclaré dans l’adresse de callback. Il existe néanmoins un émulateur accessible en ligne qui permet de tester son code FBML ou de tester l’API Facebook.

L’architecture

Nous n’aborderons pas la structure d’une application Facebook en détail, celle-ci est constituée de plusieurs composants dont la plupart sont générés automatiquement par les serveurs de Facebook. Nous nous intéresserons uniquement à la génération de la page d’accueil.

Pour faire fonctionner notre application, nous utiliserons un simple conteneur de Servlet, par exemple Tomcat. L’application reposera sur les Servlets et les JSPs. Les Servlets auront la responsabilité d’extraire les informations de l’API Facebook, et les JSPs serviront à générer la couche présentation au format FBML (FaceBook Markup Langage). Nous utiliserons accessoirement la librairie JSTL.

Référencement de l’application sur Facebook

Avant de développer notre application, nous allons commencer par la référencer sur Facebook. Pour cela, vous devez demander une clé d’API par le biais de l’application developers.

Les informations importantes à fournir sont le nom de votre application et l’URL de callback. Cette dernière doit correspondre à l’URL de votre serveur suivi du répertoire dans lequel vous avez l’intention de placer votre application. Elle est de la forme http://serveur.com/yafba/.

Vous pouvez également définir une URL pour le canvas qui correspond au cadre de votre application. Celle-ci est de la forme http://apps.facebook.com/yafba/. Ainsi, lorsque votre serveur contient un fichier http://serveur.com/yafba/index.jsp, celui-ci est accessible à travers Facebook par l’url http://apps.facebook.com/yafba/index.jsp.

Demandez enfin à ce que votre application puisse être intégrée à Facebook, cela permettra aux utilisateurs de l’ajouter à leur profil sous la forme d’un widget. Vous verrez alors apparaître des options supplémentaires. Parmi celles-ci, l’URL Post-Add correspond à l’URL “frontale” vers laquelle sont dirigés les utilisateurs qui cliquent sur le lien de votre application.

Toutes ces opérations se font à partir de l’application developers.

Connexion

Maintenant que notre application est référencée sur Facebook et que notre environnement de développement est correctement configuré, nous allons commencer à coder.

Nous allons écrire une Servlet “test” qui traitera les requêtes en provenance de Facebook :

<servlet>
	<servlet-name>test</servlet-name>
	<servlet-class>fr.hadf.yafba.servlets.Test</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>test</servlet-name>
	<url-pattern>/test</url-pattern>
</servlet-mapping>

La classe centrale de l’API est FacebookRestClient. Il s’agit d’une classe abstraite qui est héritée par deux sous-classes qu’on choisi selon le protocole qu’on veut utiliser, XML ou Jason. Nous allons utiliser le protocole XML.

La première chose que nous faisons est d’extraire le champ “fb_sig_session_key” de la requête entrante. Si ce champ est vide, nous redirigeons l’utilisateur vers la page de login dont l’URL est construite avec la clé d’API. Lorsque l’utilisateur aura été authentifié, il sera à nouveau redirigé vers notre Servlet, mais cette fois avec un champ “fb_sig_session_key” renseigné :

private void connection(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException, FacebookException {
	String sessionKey = req.getParameter("fb_sig_session_key");
	if(sessionKey == null) {//on redirige l'utilisateur vers la page de login
		String url = "http://www.facebook.com/login.php?api_key="+api_key+"&v=1.0&canvas&next=test";
		res.getWriter().println("<fb:redirect url='"+url+"' />");
		return;
	}
	else {//l'utilisateur est maintenant authentifié
		FacebookXmlRestClient client = new FacebookXmlRestClient(api_key, secret, sessionKey);
		loginSuccessfull(client, req, res);
	}
}

Utilisation de l’API Facebook

Nous allons maintenant utiliser l’API Facebook pour extraire la liste des amis de l’utilisateur courant :

protected void loginSuccessfull(FacebookRestClient client, HttpServletRequest req, HttpServletResponse res)
throws IOException, FacebookException, ServletException {
	Document root = (Document)client.friends_get();
	NodeList list = root.getElementsByTagName("uid");
	ArrayList friends = new ArrayList();
	for(int i=0; i<list.getLength(); ++i) {
		String uid = list.item(i).getTextContent();
		friends.add(uid);
	}

	req.setAttribute("friends", friends);
	getServletContext().getRequestDispatcher("/test.jsp").forward(req, res);
}

Nous utilisons simplement la fonction FacebookRestClient.friends_get(). Cette méthode retourne un objet diffèrent selon qu’on utilise le protocole XML ou Jason. Dans notre cas, nous récupérons un objet de type org.w3c.dom.Document. Pour connaître le format de la réponse, il suffit d’interroger la console de test disponible sur Facebook :

<?xml version="1.0" encoding="UTF-8"?>
<friends_get_response 	xmlns="http://api.facebook.com/1.0/"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd"
	list="true">

	<uid>1</uid>
	<uid>2</uid>
	<uid>3</uid>

</friends_get_response>

Nous extrayons alors le champ uid et utilisons l’objet request pour passer la liste des valeurs à la JSP.

Nous n’utilisons pas cette fonction, mais sachez que l’API permet également d’interroger la base d’utilisateur de Facebook grâce au langage FQL :

Document root = (Document)client.fql_query("SELECT name FROM user WHERE uid=" + uid;

Couche présentation

Nous commençons par écrire une page index.jsp qui nous servira d’URL “frontale”, celle déclarée en URL Post-Add. Elle sollicite l’utilisateur pour envoyer une série d’invitations à ses amis afin d’ajouter notre application à leur profil :

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<fb:fbml>
	<fb:request-form type="yafba"
		action="test"
		content="Je vous invite à ajouter l'application yafba">
		<fb:multi-friend-selector actiontext="Selectionnez les amis auxquels vous voulez adresser une invitation"/>
	</fb:request-form>
</fb:fbml>

Notre application est ensuite très simple, elle se contente d’afficher une liste d’amis (test.jsp). Rappelons que cette liste a été extraite à partir de la Servlet “test” qui est appelée après validation du formulaire d’invitation. Nous utilisons la librairie JSTL pour garder propre la couche présentation :

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<fb:fbml>
	<c:forEach items="${requestScope['friends']}” var=”uid”>
		<fb:name uid=”${uid}”/><br>
	</c:forEach>
</fb:fbml>

Conclusion

Vous venez d’écrire votre première application Facebook. Elle est accessible à partir du cadre “My Application” dans l’application developers.

Il ne s’agit que d’une présentation très modeste de ce qu’il est possible de faire. Ce tutoriel vous a surtout permis de comprendre l’architecture d’une application Facebook. A vous maintenant d’explorer la documentation si vous voulez aller plus loin.

Bonne continuation ;-)

Remerciements

Je remercie Michael Bagur pour son aide précieuse, en particulier pour la phase de connexion à l’API, et pour sa relecture.

Page suivante »