Skip navigation.

digital-nation

Blog-note d'un informaticien procrastinate...

Posts tagged with "blog"

Oups !

, ,

Non je n'oublie pas que j'ai un blog... Non je n'oublie rien... Mais parfois la vie change tellement que je ne sais pas où donner de la tête.

Pour le moment elle m'enchante beaucoup. Ma future femme aussi... Surtout quand j'essaie de lui mettre un pampers ! :D :yes:

Merci à tous ceux qui contribue à notre bonheur.

Les 5 raisons pour lesquelles je blogue

, ,

Ou comment choisir 5 victimes volontaires (ou non) d'une chaine !

J'ai hérité d'un cadeau de ce cher TomTom, il s'agit de la chaine du moment ! Et celle-ci consiste bien entendu à donner 5 raisons pour laquelle je poursuis ce blog depuis pratiquement 3 années.
  • L'amusement : en tout premier c'est bien entendu pour m'amuser que je le fais, certainement pas d'un point de vue professionnel comme certain ou autre. Je l'ai d'ailleur annoncé dans mon tout premier billet que je ne tiendrais peut-être pas le rythme que je m'étais imposé, mais j'essaie de faire de mon mieux (promesse quand tu nous tiens !) ;
  • La communication : essentielle dans la société actuelle, elle est aussi présente dans les médias moderne pour donner des avis, des idées, des envies et c'est ce que représente actuellement les blogs. C'est une raison aussi pour donner cette envie de partager des connaissances (via quelques scripts, tests et impressions personnelles) et bien entendu j'ai envie d'aller plus loin ;
  • La curiosité : c'est un de mes malins plaisir, c'est de pouvoir découvrir, d'être curieux, de tester, d'apprendre etc. C'est aussi une raison pour laquelle je m'abonne très (trop ?) facilement à des fils de syndication et que j'essaie (est-ce que j'y arrive ?) à redistribuer cette curiosité !
  • Le plaisir : le plaisir de vous lire, de vous découvrir, le plaisir tout simplement d'avoir de la lecture et de l'occupation sur l'internet alors que beaucoup semble se cacher derrière des logiciels de messagerie instantanée etc. les blogueurs ne se contente pas de passivité ils sont aussi les citoyens de l'internet, c'est un plaisir d'être citoyen ;
  • L'envie : oui parce que j'en ai envie, de tout cela... Ne serais-ce pas aussi la raison la plus importante ? Envie de bloguer, envie d'aller plus loin, envie d'être curieux, envie de m'amuser, envie d'être curieux ? Je le pense...

Et évidement comme tout bon virus faut que je refile cela à quelques-uns d'entres-nous (s'ils veulent participer bien sur !)... Alors Mélissa, Somebaudy, eMich, Eric et ma dernière victime mon dernier choix Maggie.

Bon courage à tous,

Edit : un petit oubli de citer TomTom !

M.A.J. Opera Software

, ,

Ce n'est pas que l'envie de bloguer me manque mais pour le moment je suis plus qu'overbooké ! Ah oui, le temps passe, passe, mais ne se rattrape pas alors j'applique la maxime : Carpe Diem et essaie de passer un maximum de temps avec ma belle compagne afin de construire quelque chose de solide !

Cependant j'insiste quand même en tant qu'adorateur du navigateur Opera de vous dire qu'une mise à jour mineure (version 9.22) est disponible.

De plus, les plateformes blog (du coté administrateur) ont étés mises à jour... Plein de bonnes choses en perspective !

Bon amusement, j'en ferais autant...

Blog et microbloging

, , , ...

A la lecture d'un billet d'une personne de ma twittosphère, je me dis que je suis victime du même syndrome que cette jeune femme.

Depuis que j'ai adoté Twitter, et le microbloging, je suis de moins en moins adepte du blog "normal" ! Je constate que je suis devenu accro de cette manière de communiquer. Simple, courte, efficace.

Est-ce que le microbloging, par sa simplicité, sa rapidité et sa ressemblance au SMS (texto pour nos amis français) va-t-il décrocher le bloging classique ?

D’un premier abord je ne dirais pas. Il est impossible de communiquer une idée, un avis correctement en 140 caractères ! Ah vous ne saviez pas que c’était 140 caractères ? Mais vous voila avertis.
En second temps, la communauté est majoritairement anglophone, comme le site lui-même. Malgré un succès croissant de la plateforme du coté français, ce n’est pas encore gagné de voir une équité.

J’ai l’impression que la plateforme de microbloging va encore gagner en puissance, mais à la longue cela va s’épuiser pour virer sur une sorte de « chat » privé et plus lent… Le but initial de dire ce que l’on fait sur l’instant présent est déjà pas suivis maintenant par tous et sert de moyen de communication ; ce qui est rassurant car je n’ai pas envie de savoir que monsieur Untel a été à la toilette à tel moment.

A suivre, mais je suis déjà conquis.

Ce qu'il faut lire

, , , ...

Quelques billets...

Read more...

Microbloging, Twitter et Google Reader

, , , ...

Suite à un horaire léger, j’ai pu consacrer un peu de temps à l’article d’hier sur le microblogging.
J’ai pu donc tester légèrement l’application de Twitter… J’ai pu en tirer les conclusions qu’il est simple d’utilisation, que ce que je vous ai dis hier n’étais pas que des « conneries » et autres de ce style… Mais en plus il procure un certain amusement à être complété.

Mais je n’ai pas fais que cela, j’ai aussi récupéré les données de Google Reader qui étaient partagé afin de remodifier la fonction. La modifier est un bien grand mot, je dirais plutôt l’éclaircir, et la rendre compréhensible.

Au fil de la journée, je suis arrivé à un résultat assez pertinent, qui semble valider, et accessible malgré les technologies utilisées : Adobe Flash, Javascript, etc.
Disons qu’il faudrais séparer les deux : l’un est accessible, l’autre pas ?

Afin de partager cela, je vous cite ci-dessous le code source :

HTML :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Twitter Party Badge</title>
<script type="text/javascript" src="groumphy.js"></script>
</head>
<body>
<!-- 
Service Twitter et Google Reader (Shared)
Auteur : Google Inc., Twitter
Modification : Groumphy
Copyright : respectif aux scripts 
Version : 1.0.0 alpha
--> 
<div id="twitter_and_googlereader">
<!-- debut de Twitter --> 
<div>
<object 
type="application/x-shockwave-flash" data="http://static.twitter.com/flash/twitter_timeline_badge.swf" 
width="250" 
height="600">
<param name="movie" value="http://static.twitter.com/flash/twitter_timeline_badge.swf">
<param name="FlashVars" value="user_id=6611282&color1=0x999999&color2=0x999999&textColor1=0x5E5E5E&textColor2=0x0&backgroundColor=0xCCCCCC&textSize=12">
<param name="allowScriptAccess" value="always">
<param name="wmode" value="transparent">
<!-- debut de Twitter (alternatif 1) --> 
<div id="twitter">
<ul id="twitter_list">
<li id="texte_twitter"><li>
<li id="temps_passe"></li>
</ul>
<script type="text/javascript" src="http://www.twitter.com/statuses/user_timeline/6611282.json?callback=twitterCallback&count=1"></script>
<p><a href="http://twitter.com/statuses/friends_timeline/6611282.rss">Suivez ce que fais le Groumphy (RSS)</a></p>
</div>
<!-- fin de Twitter (alternatif 1)-->
<!-- debut de Twitter (alternatif 2) -->
<noscript>
<p>
<a href="http://twitter.com/statuses/friends_timeline/6611282.rss">Suivez ce que fais le Groumphy (RSS)</a>
</p>
</noscript>
<!-- fin de Twitter (alternatif 3) -->
<!-- debut de Twitter (alternatif 4) -->
<p><a href="http://twitter.com/Groumphy">Suivez les aventures de Groumphy</a><p>
<!-- fin de Twitter (alternatif 4) -->
</object>
<p><a href="http://twitter.com/statuses/friends_timeline/6611282.rss">Suivez ce que fais le Groumphy (RSS)</a></p>
</div>
<!-- fin de Twitter --> 
<!-- debut de Google Reader --> 
<div id="google_reader">
<script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/15343427923727093981/state/com.google/broadcast?n=10&callback=GRC_p(%7Bc%3A%22gray%22%2Ct%3A%22Je%20lis%20en%20ce%20moment%22%2Cs%3A%22true%22%7D)%3Bnew%20GRC"></script>
<noscript><p><a href="http://www.google.com/reader/public/atom/user/15343427923727093981/state/com.google/broadcast">Lisez ce que lis le Groumphy(RSS)</a></p></noscript>
<p><a href="http://www.google.com/reader/public/atom/user/15343427923727093981/state/com.google/broadcast">Lisez ce que lis le Groumphy(RSS)</a></p>
</div>
<!-- fin de Google Reader --> 
</div> 
</body>
</html>


En Javascript, cela donne :
// ---------------------------------------------------------------
// Script de partage de flux de Google Reader (labs)
// Auteur : Google Inc. (c) 2006
// Modification : Groumphy.net (c) 2007
// Information : v.Labs 1.0
// ---------------------------------------------------------------
(function (){
var z = "/reader/shared/";;;
var G = G || { }, 
H = this;
if(!Function.prototype.apply){
Function.prototype.apply = function(a,b){
var c = [],
d,
g;
if(!a) a = H;
if(!b) b = [];
for(var e = 0; e < b.length; e++){ 
c[e] = "args[" + e + "]" }
g = "oScope.__applyTemp__.peek().(" + c.join(",") + ");";
if(!a.__applyTemp__){ 
a.__applyTemp__ = [] } 
a.__applyTemp__.push(this);
d = eval(g);
a.__applyTemp__.pop();
return d } };
if(!Array.prototype.push){
Array.prototype.push = function(){
for(var a = 0; a < arguments.length; a++){ 
this[this.length] = arguments[a] }
return this.length } }
if(!Array.prototype.pop){ 
Array.prototype.pop= function(){ 
var a;
if(this.length){
a = this[this.length-1];
this.length--}
return a } }
Array.prototype.peek = function(){ 
return this[this.length-1] };
if(!Array.prototype.shift){
Array.prototype.shift = function(){
var a;
if(this.length){
a = this[0];
for( var b = 0; b < this.length-1; b++){ 
this[b] = this[b+1] }
this.length-- }
return a } }
if(!Array.prototype.unshift){ 
Array.prototype.unshift = function(){ 
var a = arguments.length;
for(var b = this.length-1; b >= 0; b--){ 
this[b+a] = this[b] }
for(var c = 0; c < a; c++){ 
this[c] = arguments[c] } 
return this.length } } 
var I = function(a){ return/^\s*$/.test(a) }, 
J = function(a){ return I(K(a)) }, 
K = function(a){ return a == null ? "":String(a) }, 
x = new p;
function p(){ 
if(document.all){ this.r = true } 
else { this.r = false } 
this.O = "pop" in Array.prototype;
this.z = "contains" in document;
this.M = "implementation" in document && "createDocument" in document.implementation;
this.L = "compatMode" in document; 
this.N = "XMLHttpRequest" in window; 
vara = navigator.userAgent, 
b = /\(.*\) AppleWebKit\/(.*) \((.*)/.exec(a);
if(b){ this.B = true; this.Q = parseInt(b[1],10) } 
else{ this.B = false } 
this.A = window.opera;
this.P = a.indexOf("Wii")!= -1 }
p.prototype.n = function(){
return this.r && !this.z && !this.o() };
p.prototype.o = function(){ 
return this.A };
function v(a,b){ 
var c = b || document; 
return c.getElementById(a) }
function i(a,b,c){ 
var d = c || document, g = d.createElement(a);
if(b){ for(var e in b){
var h = b[e];
if(x.n() && e == "class"){ 
e = "className" }
g.setAttribute(e,h) } }
return g }
function j(a){ 
return document.createTextNode(a) } 
var C = function(a){ 
if(!a) return "";
var b = /<[^>]*>/gi; 
return a.replace(b,"") };
function D(a,b){
if(a.length <= b){ return a}
var c = a.split(/\s+/);
a = [];
for(var d = 0; d < c.length && a.join(" ").length <= b; d++){
a.push(c[d]) } 
a = a.join(" ");
if(d != c.length){ a += "..."} 
return a}
var m = {}, 
y = { blue: {f:"#fff", 
e:"#bccceb", 
k:"#090992", 
j:"#bccceb", 
i:"#1010c8", 
d:"#7a7ee0", 
h:"#e5ecf9", 
b:"#898de9" },
green: {f:"#fff", 
e:"#d8dbbc", 
k:"#2d8509", 
j:"#d8dbbc", 
i:"#58bf2f", 
d:"#97e07a", 
h:"#f5fbeb", 
b:"#adb094" },
slate: {f:"#123", 
e:"#345", 
k:"#5e805e", 
j:"#5e6f80", 
i:"#abc", 
d:"#5e6f80", 
h:"#152939", 
b:"#abc" },
gray:{ f:"#fff", 
e:"#ccc", 
k:"#666", 
j:"#ccc", 
i:"#999", 
d:"#ccc", 
h:"#eee", 
b:"#aaa" },
khaki:{f:"#f2e9ca", 
e:"#8e7c6a", 
k:"#d52", 
j:"#cba", 
i:"#543", 
d:"#ba9", 
h:"#eae0c6", 
b:"#987" },
pink:{ f:"#fff", 
e:"#aaa", 
k:"#d69", 
j:"#ddd", 
i:"#e684ad", 
d:"#ebc", 
h:"#fcf0f7", 
b:"#a88" },
black:{f:"#000", 
e:"#aaa", 
k:"#ccc", 
j:"#d8dbbc", 
i:"#d52", 
d:"#7a2b0e", 
h:"#111", 
b:"#999" } },
u = {margin:0, 
padding:0, 
background:"transparent none", 
border:"none", 
textAlign:"left", 
textIndent:"0",
textDecoration:"none", 
fontWeight:"normal" };
function k(a,b){ 
//this.l = "readerpublishermodule" + this.p();
this.l = "id_div_googlereader" + this.p();
this.g = a; 
this.u = m["c"];
this.v = m["t"];
this.K = m["s"] == "true";
if(b){ 
b.innerHTML = ""; 
b.id = this.l; 
this.m(v(this.l)) } 
else{
document.write('<div id="' + this.l + '" class="reader-publisher-module"></div>');
var c = this;
window.setTimeout( function(){ c.m(v(c.l)) }, 0) } }
k.prototype.p = function(){ 
if(!("GRC_c" in window)){ window["GRC_c"] = 0 }
return window["GRC_c"]++ };
function A(a){ m =a }
k.prototype.m = function(a){ 
function b(F){ 
return F }
var c = this.q(); 
this.a(c.J, a);
if(this.v){ 
var d = i("h3");
this.a(c.I, d);
d.appendChild(j(this.v));
a.appendChild(d) }
var g = i("ul");
this.a(c.H, g);
for( var e = 0, h; h = this.g.items[e]; e++){ 
if(!h.alternate){ continue }
var o = i("li");
this.a(c.G, o); 
var t = i("a",{href:b(h.alternate.href), 
title:h.title, 
"class":"i" });
this.a(c.C, t);
var f = C(h.title);
if(!J(f)){ f = D(f,48) }
t.appendChild(j(f));
o.appendChild(t);
if(this.K && h.origin.title){ 
var q = h.origin, 
l = i("div", { 
"class":"s" });
this.a(c.F, l);
o.appendChild(l);
l.appendChild(j(" from "));
var f = q.title;
if(f.length > 48){ 
f = f.substring(0,48) }
if(q.htmlUrl){ var r = i("a", { 
href:b(q.htmlUrl), 
title:f });
this.a(c.D,r);
r.appendChild(j(f));
l.appendChild(r) } 
else{ l.appendChild(j(f)) } }
g.appendChild(o) }
a.appendChild(g);
var s = i("div", {
"class":"f"});
this.a(c.w, s);
if(this.g.id){ 
var w = this.g.id.indexOf("feed/") == 0, 
E = this.g.alternate && this.g.alternate.href;
if(!w || E){ 
var n = i("a"); 
this.a(c.b, n); 
//n.href = w ? this.g.alternate.href:"http://www.google.com" + z + this.g.id;
n.href = w ? this.g.alternate.href:"http://my.opera.com/groumphy";
n.appendChild(j("Lire plus..."));
s.appendChild(n) } }
a.appendChild(s)};
k.prototype.q = function(){ 
if(this.u == "-"){ 
return{ } }
var a = y[this.u];
return{
J:{ fontFamily:"arial, sans-serif", 
fontSize:"10pt", 
MozBorderRadius:"8px", 
background:a.f,
border:"solid 4px " +a.e,
margin:"0.5em" },
I:{ padding:"0.2em 0",
margin:"0 0.5em",
MozBorderRadius:"8px 8px 0 0",
borderBottom:"solid 1px " + a.j,
color:a.k },
H:{ padding:"0.2em", 
margin:"0 0.5em", 
overflow:"hidden" },
G:{ listStyleType:"none",
padding:"0.4em 0 0.4em 0" },
C:{ color:a.i, 
borderBottom:"solid 1px " + a.d },
F:{ paddingLeft:"0.5em", 
color:a.d },
D:{ color:a.d },
w:{textAlign:"right",
borderTop:"solid 1px " +a.e,
background:a.h,
MozBorderRadius:"0 0 4px 4px",
padding:"0.2em 8px", 
fontSize:"small",
whiteSpace:"nowrap" },
b:{ color:a.b,
textDecoration:"underline" } } };
k.prototype.a = function(a,b){ 
if(!a) return;
B(b);
for(var c in a){ 
b.style[c] = a[c] } };
function B(a){ 
for(var b in u){ 
a.style[b] = u[b] } }
window["GRC_p"] = A;
window["GRC"] = k; })();

// ---------------------------------------------------------------
// Script de boite Twitter, pour le microblogging
// Auteur : Twitter (c) 2007
// Modification : Groumphy.net (c) 2007
// Information : 1.0.1modification par Groumphy 06.06.2007
//1.0 version originale
// ---------------------------------------------------------------
function relative_time(time_value) {
    var values = time_value.split(" ");
    time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    delta = delta + (relative_to.getTimezoneOffset() * 60);
    if (delta < 60) { return '(moins d\'une minute)'; } 
else if(delta < 120) { return '(il y \à une minute)'; } 
else if(delta < (45*60)) { return '(Il y \à' + (parseInt(delta / 60)).toString() + ' minutes)'; } 
else if(delta < (90*60)) { return '(Il y \à une heure)'; } 
else if(delta < (24*60*60)) { return '(plus de ' + (parseInt(delta / 3600)).toString() + ' heures)'; } 
else if(delta < (48*60*60)) { return '(Il y \à un jour)'; } 
else { return '(Il y \à ' + (parseInt(delta / 86400)).toString() + ' jours'; } }  
function twitterCallback(obj) {
var id = obj[0].user.id;
document.getElementById('texte_twitter').innerHTML = obj[0].text;
document.getElementById('temps_passe').innerHTML = relative_time(obj[0].created_at); }

Intéressé ? Simple, modifier quelques variables, et le tour est joué !
Pour voir le résultat opérationnel encore en test, rendez-vous sur Groumphy.net !
Mais je me pose encore quelques questions… Faut-il faire un rafraichissement de la page toutes les X minutes (afin de garder le contenu à jour pour le visiteur) ? N’y a-t-il pas déjà un service qui offre cela (tout combiné dans la même plateforme) ? Etc.

Information : pour le code, l'indentation n'est pas présente.

Microblogging

, , ,

Alors que les blogs sont en pleine expension, que nous savons que si un blog passe les premiers six mois et qu’il passe une année entière, celui-ci aura la chance de survivre (ou du moins de rester en vie plus longtemps), nous voyons de plus en plus de plateforme émerger dans des idées les plus originales qui soit.

A la lecture du billet de Shoob j’ai décidé de tester une nouvelle plateforme de blog.
Mais pas n’importe quelle plateforme : une plateforme de microblogging, Twitter(uk).

La première étape, est évidement l’inscription. Par après quelques étapes de configuration et une bonne nouvelle : cela semble fonctionner plutôt correctement sur des navigateurs alternatifs ; en effet, il s’agit d’une simple application Adobe Flash (v9 pour être précis), suscitant toutefois quelques craintes pour les utilisateurs Linux.

En second temps, tout semble personnalisable, adaptable à ce que l’on a besoin et l’insertion est facilité par les codes en ligne. Par contre sur ce dernier point, il reste bien entendu l’accessibilité, la standardisation qui ne semble pas respecté ; lacune vite comblée si vous remanier le code… (Je pense même le fournir au besoin…)

Enfin, il faut bien évidement l’insérer sur son site… Et pour mettre son microblog à jour, une simple connexion à la plateforme de microblogging, insertion du texte… Et le tour est joué !

Simple comme qui dirais bonjour. Nous allons voir…

Mais maintenant viendrais les questions un peu plus complèxe, à quoi bon sert cette plateforme, à quoi bon peut-elle nous avancer alors que nous disposons déjà d’un blog ?
Pour des nouvelles simples, sur lesquelles nous n’aurions pas envie, pas le temps de faire un billet… Mais aussi pour les fanas du blogging de dire ce qu’il font en minute, de ne pas laisser une nouvelle périr, un p’tit lien rapide etc.

En bref, de l’interactivité, de la mise à jour, … Tout plein de bonnes choses !
Chez moi cela se passera sur la page principale de mon site (encore en construction, oui je sais ; www.groumphy.net) et de plus il y aura même un flux RSS.

Affaire à suivre, mais avez-vous déjà des réactions positives ou non par rapport au microblogging ?

Photographies 2ieme rencontre des blogueurs belges

, , , ...

Album photographique disponible

Read more...

2ieme rencontre blogueurs belges

, , ,

A l'image de Paris Carnet ?
  • 15h50 : Tic-tac… Je suis devant le Café Central. Fermé !
  • 15h51 : mode panique, je me suis trompé de jour, d’heure, de lieu… Y-a-t-il plusieurs Café Central à Bruxelles ? Faudrait alors les appeler « Cafés Centraux ». Arf, ne pas faire le con. Pour une fois que je puis venir et que le travail n’est pas trop chargé.
  • 15h52 : bon patientons. Attendons au moins le quart d’heure académique. C’est le minimum et puis s’il y a plusieurs cafés de même nom, nous serons peut-être deux ou plus à nous être trompé.
  • 15h55 : ah, quelqu’un qui fais les 100 pas. Cool, patientons. A 16h je demande.
  • 15h57 : « bonjour, vous attendez aussi pour la rencontre de blogueurs ? » et c’est sur ces termes que j’ai fais la connaissance de Cyril (http://entre4yeux.fr/), que toutes mes craintes se sont envolées.


Et hop, c’est avec quelques minutes d’avance, sur un Café Central toujours fermé qu’à commencé cette deuxième rencontre de blogueurs belges !

Très vite le duo s’est complété, complété ; certains arrivants en couple, en groupe, habitués… Confiant.

L’ambiance se détendait au fur et à mesure des minutes qui avançaient dans 16h, au fil des arrivants etc.

Bien rapidement les discussions ont tourné sur les points technologiques les plus courants, les impressions que l’on se faisait, et par la suite au fil du groupe qui s’était formé, dispersé ou reformé… Enfin il y avait possibilité de choisir « le forum » sur lequel on voulait parler ! Les discussions étaient lancées.

C’est avec regret que j’ai du quitter le groupe aux environs de 18h, le travail me rappelant à la dure réalité. Mais je dois dire que j’aurais eu ENORMEMENT de mal à quitter dans tous les cas vers 19h, un autre rendez-vous privé… Un soulagement. Dommage.

Mais comme promis à Monique je ferais autre chose qu’un passage éclair à la 3ième réunion.
Et comme promis, je parlerais ENFIN avec toi (après les passages éclairs du FOSDEM, REWICS, etc.) !

Par contre il me reste quelques interrogations si un nom ou pas à été choisis pour cette réunion ? (et dans la même optique les tags !)
A défaut je propose que vous postiez en commentaire les noms que vous désireriez pour ce type de réunion et par la suite je mettrais un sondage afin que le plus grand nombre l’emporte.

Bien évidement à l’image des autres participants, j’avais emmené mon appareil photographique. Le problème est qu’il… Enfin que… Que je n’ai pas encore fait les transferts de photographie et dès que j’arrive à la page du manuel de celui-ci m’indiquant faire, ce sera réalisé !
Un album photographique sera créé.

Chat sur blog

, , , ...

Une nouvelle option

Read more...

Canon EOS 400D

, , , ...

J'en rêve !

Read more...

Blogueurs belges

, , ,

Un rendez-vous !

Read more...

Teasing

, , , ...

Blog and blues se réveille !

Read more...

PureBlog de Pure FM

, , , ...

La radio que je cite... Elle blogue !

Read more...

Un peu de tout !

, , , ...

Ce qui se dit sur la toile !

Read more...

Cartographier la blogosphère

, , , ...

Etablir une carte des blogs sur le net

Read more...

Enfin

, , , ...

Loic Le Meur commence l'année en force

Read more...

Migration en cours

, , , ...

Digital-nation est mort... Vive digital-nation !

L'ancien site internet, mon blog, mes fichiers sont supprimé du domaine Users de Skynet. Je suis occupé à faire les différents transfers vers la plateforme en ligne Opera.

Désolé des désagréments, mais je pense que je serais mieux ici.

Encore quelques heures de patience pour le transfers, désolé des désagréments.

Sondage

, , ,

Un petit sondage a été ajouté...
Les votes sont ouvert !

Widgetize! Personnalisation d'une automatisation

, , , ...

Me revoici dans l'idée de faire un fil de l'information avec le journal Le Soir.
Après les récents articles sur l'automatisation d'un widget et plus particulièrement sur la manière de l'extérioriser, je me suis dit qu'il était temps de passer à la pratique.

Je vous avais récement montré en plus comment faire un widget, donc nous pouvons ici combiner les deux.
Alors en premier temps il nous faut récupérer le widget que nous avons créé pour notre blog, et qui est dans le répertoir Widget de Opera dans vos paramètres locaux (comme dit précédement il s'agit d'une simple archive à décompresser).

Une foix que cela est fait, nous obtenons la structure suivante :

  1. dossier JS
  2. dossier SKIN
  3. fichier CONFIG.XML
  4. fichier INDEX.HTML
  5. fichier CONFIG.JS


Récupérons maintenant le fil de l'information du journal Le Soir ( http://www.lesoir.be/services/rss/le_fil_Info/index.xml ). Pour ce faire, il suffit d'éditer la source du site et de récupérer la ligne qui vous intéresse dans les RSS... Cela s'identifie par un simple lien (balise HTML LINK) avec le type

RSS+XML (attribut de la balise LINK sur TYPE="APPLICATION/RSS+XML").

Maintenant il nous faut configurer le widget. Comme vous vous en douter, le fichier CONFIG.JS est là pour cela !
Donc éditons le dans le bloc-note et remplacons les données comme suit :

var skeletonConfig = {
feedURL : "http://www.lesoir.be/services/rss/le_fil_Info/index.xml",
feedTitle : "Journal Le Soir : le fil de l'info",
feedVersion : "generic",
maxItems : 10
};


Théoriquement votre widget est pret à l'emploi ! Vous enregistrer le tout, vous remettez au format archive et vous faite une lecture du fichier config.xml par Opera et le widget est lisible.

Mais comme vous vous en douter, il n'est pas parfais ! De nombreux anglicisme sont encore présent dans le widget. Normal me direz-vous car Opera Software,

l'éditeur maitre du widget que nous modifions, n'est pas du tout orienté vers le français !
Alors continuons à personnaliser le widget :

Ouvrons le fichier CONFIG.XML :

Et comme vous le voyez, nous pouvons donc le personnaliser :
  • La balise <widgetname> représente le nom du widget, changeons le par Le Soir,
  • La balise <description> elle représente la description du widget, placer y ce que vous y désirez comme description sans faire dans la longueur,
  • Par la suite, ce qui est entre les balise d'identification (<id>), représente l'identification du widget, le HOST représente l'hôte d'hébergement du widget,


Le NAME est le nom et REVISED est la dernière revision du widget... Jusque là que du connus que nous avons déjà passé en revue lors de la création du premier Widget.
Vous pouvez maintenant déterminer la hauteur et la largeur (balise WIDTH et HEIGHT) en pixel.
La suite reste tout aussi connue par les auteurs (nom, liens, organisation...) !

Ceci devrait donner cela :

<?xml version="1.0"?>
<widget>
  <widgetname>Le Soir.be</widgetname>
  <description>Le fil de l'information</description>
  <id>
     <host>localhost</host>
     <name>Lecteur RSS</name>
     <revised>2006-08-12</revised>
  </id>
  <width>400</width>
  <height>250</height>
  <author>
    <name>Opera widgets</name>
    <link>http://widgets.opera.com/</link>
    <organization>Opera Software ASA</organization>
  </author>
</widget>


Passons maintenant à la suite, le plus amusant, franciser l'interface...
Pour ce faire, très simplement éditons le fichier INDEX.HTML comme il se doit :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!--
/**
 * Copyright (c) 2006, Opera Software ASA
 * All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of Opera Software ASA nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY OPERA SOFTWARE ASA AND CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL OPERA SOFTWARE ASA AND CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
-->
<!-- 
Auteur : Opera Software ASA - version d'origine
Groumphy (http://users.skynet.be/digital-nation/blog/) - modification 
Licence : (c) Opera Software ASA 2006 All rights reserved
Changelog : francisation
personnalisation du widget
Version : 1.0.0- version d'origine
1.0.1- version modifiée par Groumphy
-->
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Lecteur RSS</title>
<link rel="stylesheet" type="text/css" href="skin/base.css">
<link rel="stylesheet" type="text/css" href="skin/skin-specific.css">
<script type="text/javascript" src="config.js"></script>
<script type="text/javascript" src="js/date.js"></script>
<script type="text/javascript" src="js/general.js"></script>
<script type="text/javascript" src="js/animation.js"></script>
<script type="text/javascript" src="js/Feed.js"></script>
<script type="text/javascript" src="js/Tooltip.js"></script>
<script type="text/javascript" src="js/parsers.js"></script>
<script type="text/javascript" src="js/script.js"></script>
</head>
<body>
<div id="wrapper">
<div id="header">
<div id="logo"></div>
<h1 id="widgetTitle">&nbsp;</h1>
<span id="unread" title="Unread items">0</span>
<button id="flip">Basculer</button>
<button id="close" onclick="window.close()">Fermer</button>
</div>
<div id="cbody">
<div id="content">
<ul id="itemList"></ul>
<div id="back">
<h2>Widgetize!</h2>
<p><a href="http://widgets.opera.com/widgetize/">Widgetize!</a> est un produit de Opera Software sur lequel vous 

pouvez créer vos propres 
                widget. (version modifiée par <a href="http://users.skynet.be/digital-nation/blog/">Groumphy</a>)</p>
<p class="downcenter"><input type="checkbox" id="disanim">Désactiver animations</p>
</div>
</div>
</div>
<div id="footer">
<button id="reload">Recharger</button>
<span id="lastUpdate">&nbsp;</span>
<button id="expandMinimize" class="minimize"></button>
</div>
</div>
</body>
</html>

Parfais... Maintenant il nous faut voir du coté Javascript. Cela fait un petit plus non négligeable d'avoir des dates à l'européenne et surtout que ce soit inscrit en français.
Alors éditons le fichier Date.js se trouvant dans le dossier JS et changer les deux premières variables par des contenus francisé :
var months = [
'Janvier',
'Fevrier',
'Mars',
'Avril',
'Mai',
'Juin',
'Juillet',
'Aout',
'Septembre',
'Octobre',
'Novembre',
'Decembre'
];
var tw = {
second : 'seconde',
seconds : 'secondes',
minute : 'minute',
minutes : 'minutes',
hour : 'heure',
hours : 'heures',
yesterday : 'Hier',
and : 'et',
ago : 'depuis',
today : 'Ce jour',
at : ', ',
future : 'dans le futur',
date : '%DATE% %MONTH%',
longdate : '%DATE% %MONTH%, %YEAR%'
}

Comme vous avez pu le remarquer, j'ai aussi adapté la date dans un ordre européen (voir variable date et longdate dans la zone mémoire tw)...

Vous avez aussi la possiblité de modifier la fonction de calcul de l'heure. En effet, la variable ago de la zone de mémoire tw se situe à la fin (dans la version anglaise), hors en français elle devrait se placer à l'avant...

Modifion alors l'appel de la fonction dans une variable de la manière suivante :
Date.prototype.toAge = function() {

var now = new Date();
var yesterday = new Date( now.getFullYear(), now.getMonth(), now.getDate() );

var delta = yesterday.getTime() - this.getTime();
var ticks = now.getTime() - this.getTime();

if ( delta > 0 || ticks < 0 ) {
// Yesterday or before
if ( delta < 1000 * 60 * 60 * 24 && ticks > 0 ) {
// Yesterday
return tw.yesterday;
} else {
// Long ago
var d = (now.getFullYear() != this.getFullYear()) ? tw.longdate.replace( '%YEAR%', this.getFullYear() ) : tw.date;
d = d.replace( '%MONTH%', months[this.getMonth()] ).replace( '%DATE%', this.getDate() );
if (ticks < 0) d += ' (' + tw.future + ')';
return d;
}
} else {
// Today

if (ticks < 0) {
return tw.future;
}
// Seconds
ticks = Math.floor( ticks / 1000 );
if (ticks < 60) {
//return ticks + ' ' + (ticks == 1 ? tw.second : tw.seconds) + ' ' + tw.ago;
return tw.ago + ' ' + ticks + ' ' + (ticks == 1 ? tw.second : tw.seconds);
}
// Less than, or an hour ago
ticks = Math.floor( ticks / 60 );
if (ticks <= 60) {
if (ticks < 60) {
//return ticks % 60 + ' ' + (ticks == 1 ? tw.minute : tw.minutes) + ' ' + tw.ago;
return tw.ago + ' ' + ticks % 60 + ' ' + (ticks == 1 ? tw.minute : tw.minutes);
} else {
return tw.ago + ' ' + '1 ' + tw.hour;
}
}
// Less than, or two hours ago
if (ticks <= 120) {
if (ticks < 120) {
return tw.ago + ' ' + '1 ' + tw.hours + ' ' + tw.and + ' ' + ticks % 60 + ' ' +
(ticks == 1 ? tw.minute : tw.minutes);
} else {
return tw.ago + ' ' + '2 ' + tw.hours;
}
}
// Otherwise, write out the time
else {
return tw.today + tw.at + ' ' + padZero(this.getHours()) + ':' + padZero(this.getMinutes());
}
}
};


Hum, voila qui est fait pour une grande partie et c'est bientôt terminé. Il ne nous reste plus que quelques petites modifications et le tour est joué !
Ouvrons maintenant SCRIPTS.JS et dans la changeons la fonction oneNewItemHandler comme ceci :
function onNewItemsHandler(noChange, err) {
/* Advanced - lastupdate */
    updateStatus(err);
    /* End advanced */

var container = document.getElementById('itemList');
var list = feed.getItemList();

   /* Advanced - modified for lastupdate */
if (err) {
        if (container.firstChild) {
    return;
    }

var li = document.createElement('li');
li.appendChild( document.createTextNode( '(Affichage RSS non possible)' ) );
container.insertBefore( li, container.firstChild );
li.id = 'noContent';
return;
}
   /* End advanced */

if (list.length == 0) {
container.innerHTML = '';
var li = document.createElement('li');
li.appendChild( document.createTextNode( '(Pas de News)' ) );
container.appendChild(li);
li.id = 'noContent';
return;
}

// Unchanged feed, leave it alone
    if (noChange) return;

// Display feed items
container.innerHTML = '';
var pointer = null, li = null, content = null;

for (var i = 0; pointer = list[i]; i++) {
li = document.createElement('li');
li.className = pointer.read ? 'read' : '';
li.guid = pointer.getGUID();
container.appendChild( li );

var tit = pointer.getTitle() || '(Pas de titre)';
if ( typeof tit == 'string' ) tit = document.createTextNode( tit );
var h2 = document.createElement('h2');
h2.className = 'postTitle';
h2.appendChild( tit );
li.appendChild( h2 );

var content = document.createElement('div');
var h3 = document.createElement('h3');
h3.className = 'dateTime';
/* Advanced - lastupdate */
var pub = pointer.getDate();
h3.appendChild( document.createTextNode( pub ? pub.toAge() : '(Pas de date)' ) );
h3.timestamp = pub ? pub.getTime() : 0;
/* End advanced */
        content.appendChild( h3 );
li.appendChild( content );
li.expander = content;

var desc = pointer.getDesc() || document.createTextNode( '(No text)' );
if ( typeof desc == 'string' ) desc = document.createTextNode( desc );
content.appendChild( desc );

var link, href = pointer.getLink();
if ( href ) {
link = document.createElement('a');
link.href = href;
link.appendChild( document.createTextNode( ' Voir ' ) );
} else {
link = document.createTextNode( '(Pas de lien)' );
}
link.className = 'morelink';
content.appendChild(link);

}

    updateUnread();

/* Advanced - fancy unread */
if (feed.getUnreadCount() > 0) {
document.getElementById('unread').style.visibility = 'visible';
var animation = document.getElementById('unread').createAnimation();
animation.style.opacity = 0;
animation.speed = 5;
animation.accelerationProfile = animation.constant;
animation.addAnimation('opacity', animation.style.opacity, '1').run();
}
/* End advanced */
}

En bref nous avons simplement traduit les commentaires données dans les structures conditionnelles.

Après ces quelques manipulations, il n'y a rien d'autres à faire.
Si vous recompiler le tout, et que vous proposer cela en téléchargement, il n'y a aucun soucis pour l'exécution du widget.

Ce dernier article devrait pouvoir vous aider sur pas mal de problème de lecteur RSS, en essayant que ce soit le cas.

filinfoLeSoir.zip

Bloqué...

, , ,

Zut ! Je viens de constater que les communautés sont bloquées via le proxy de mon boulot.
De fait, je ne sais même plus venir consulter mes scripts postés en ligne, ni en poster à chaque idée qui me vienne.

J'espère pouvoir encore tenir ce blog à jour.
Il serait dommage d'abandonner si bonne plateforme de blog.

A suivre...

Rectification d'avis

, , , ...

Je vous donnais il y a quelques temps mes surprises sur la qualité de la plateforme avec toutefois deux avis assez négatif...

Dans toute ma surprise, je puis déjà en supprimer un (qui se trouve être la personnalisation) et encore mieux, je puis en rajouter un : la validation du W3C en XHTML Transitionnal.

En effet, la personnalisation du blog peut se faire de plusieurs manières différentes :
  • soit par le choix d'un modèle établis,
  • soit par l'envois d'une feuille de style unique, additionnelle ou complémentaire à la feuille de style désirée,


Je vous laisse aussi profiter de la validation...

Dans cette continuité, je pense migrer complétement sur cette plateforme... Mais les tests continuent (principalement sur les albums photographiques et le système de lien)... A suivre encore, mais après les vacances.

Message personnel

, , ,

A la bonne attention d'un grand blogueur : Franck Paul

Aaah zut ! Je viens à peine de rentrer chez moi que je met à jour mes RSS sur mon navigateur principal et je constate que je me situe juste en dessous de Franck Paul !

Hum... Normal, j'ai aussi utilisé

Carnet

dans mon titre de blog. Alors j'adresse un petit mot à Franck, ne crois en rien que j'ai voulu te copier ou te faire de l'ombre. Si tu le désire, je puis encore changer le titre du blog. Ici c'était une erreur "d'inatention".

Premières impressions

, , , ...

Je viens de faire un premier tour de la plateforme de blog de My.Opera et je suis assez séduit.
Toutes la simplicité d'une plateforme en ligne semble être présent ainsi que toutes les fonctionnalités.

Je ne met pour le moment qu'une unique chose sur le tapis : la traduction... Aucunes pages ou événement ne peut être indiqué en français. Dommage.

Dans les points positifs que je cite :
  • intégration complète de la plateforme sur une unique page,
  • albums photos,
  • ajout aisé d'éléments (événement, carnet de lien, etc.),
  • trackback et commentaires,
  • l'éditeur de nouveau post,
  • la simplicité d'emploi,
  • les possibilités d'administration simplifiée,
  • la capacité de stockage,



Ce que je regrète :
  • la francisation,
  • la personnalisation du design,


Un Groumphy séduit qui passera bientôt complétement sur My.Opera si cela continue...

Premier post et informations

, , , ...

Bonjour, bonsoir,

Voici que je crée un nouveau blog, en effet celui que vous lisez en seconde n'est pas le premier que je crée, mais j'espère toutefois qu'il sera différent du précédent.

Pour cause me voici au départ d'un nouveau système incluant les trackbacks, les réponses de posts et tutti quanti.

Bien évidement, je pense qu'il diffère aussi sur le type de post qui sera édité... Ici ne sera pris en compte que des brouillons. Il faut bien commencer par quelque chose.
Script, trucs, astuces, sites internets seront donc ainsi édité de manière rapide.

Dans la continuité, il y aura quelques humeur. Hum, ... Cela arrive à tous de passer ses nerfs ou d'avoir des coups de gueules.

En bref, ce blog me servira de fourre-tout.

Bonne lecture,

Groumphy
November 2009
M T W T F S S
October 2009December 2009
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30