Archives mensuelles : juin 2009

Canon 5D mark II : upgrade du firmware vers la version 1.1.0

Ce billet explique comment j’ai mis à jour le firmware de mon Canon 5D mark II de la version 1.0.7 à la version 1.1.0. Comme pour la première fois, et l’installation de la version 1.0.7, je me suis rendu à cette page très bien documentée. Si la manipulation s’avère très simple, il est toutefois recommandé de ne pas oublier les règles d’usage. A savoir que durant l’opération :

  • La batterie doit être chargée et l’appareil ne doit pas s’éteindre faute d’alimentation
  • Il ne faut pas non plus éteindre l’appareil
  • Il ne faut pas ouvrir le compartiment de la carte mémoire
  • Il ne faut appuyer aucun bouton

Il faut ne pas être sur Twitter pour ne pas connaitre les améliorations du firmware 1.1.0. On retiendra que c’est l’apport du mode manuel pour changer les ISOs et l’ouverture durant la prise d’une séquence vidéo.

Bon passons aux choses sérieuses. Lire la suite

WordPress : Affichage des updates protected depuis Twitter

Lorsque j’ai commencé à twitter, le statut de mes updates était public. Je n’ai commencé à les protéger que depuis l’année dernière. Cela ne m’intéressait plus vraiment que des personnes que je ne connaissais pas puissent accéder à des informations sur ma vie. On pourra revenir – ou pas – sur les motivations d’utiliser Twitter pour faire la promotion de son branding personnel, ce n’est pas le débat ici.
Je fais donc en sorte de tenir une following liste limitée tout en bloquant et en refusant des followers. Ce n’est surtout pas pour snober qui que ce soit, mais les relations humaines sont complexes et ne peuvent pas se traduire par à un accès ou non à des messages …
Cependant, il s’avère que certains messages ont leur place sur une timeline publique. C’est une fonctionnalité que n’offre pas Twitter (pour l’instant?), c’est pourquoi j’ai demandé à Damien de développer O2Tweet, un plugin pour WordPress permettant de sélectionner les updates à extraire. Cela se fait grâce à des tags que l’utilisateur peut définir, pour ma part j’utilise celui-ci : ✍

J’ai ensuite réfléchis à l’intégration des updates sur ce blog. Ne voulant pas passer par un widget et donc charger plus encore les sidebars, j’ai adopté la mise en page que vous découvrez. Ce positionnement permet également aux messages d’être mis en avant de manière efficace. Pour faire défiler ces derniers, on en vient naturellement à l’idée du carrousel.

Les updates sont chargés en fin de page et repositionnés dans l’entête avec les CSS. En effet, l’interrogation de l’API qui se fait server side est dépendante de la charge liée à l’utilisation de l’API, il faut donc privilégier le contenu principal.
J’ai repris le code du widget proposé par le plugin O2Tweet pour l’adapter à mes besoins, à savoir une fonction appelée dans le footer.

function getTweets() {
	global $wpdb;
 
	// Fréquence de mise à jour
	$update = get_option('o2t_update');
 
	if ($update > 0) {
		$last_update = get_option('o2t_last_update');
		if (date('U') - $last_update >= $update * 60) {
			o2t_core::update_last_tweets();
		}
	}
 
	// Récupération des updates
	$tweets = $wpdb->get_results('SELECT * FROM ' . $wpdb->o2t . ' ORDER BY created_at DESC LIMIT ' . get_option('o2t_tweets_count'));
	if (sizeof($tweets) > 0) {
		// Affichage
		echo "\n<div id=\"mytweets_wrapper\">";
		echo '<ul id="' . get_option('o2t_ulid') . '" class="' . get_option('o2t_ulclasses') . '">';
		foreach($tweets as $tweet) {
			echo "\n";
			echo '<li>' . $tweet->content . '</li>';
		}
		echo "\n";
		echo '</ul>
		</div>
		<a href="#" id="mytweets_next"></a>';
	}
	else {
		echo "<span id=\"mytweets\">Le prochain Tweet arrive bientôt!</span>";
	}
}
#twitter_updates {
	background-image: url(img/twitter.png);
	background-repeat: no-repeat;
	background-color: #9AE4E8;
	height: 30px;
	background-position: 8px 2px;
	display: block;
	width: 100%;
}
 
#mytweets_wrapper {
	position: absolute;
	top: 0;
	left: 50%;
	margin-left: -472px;
	padding: 0;
	width: 944px; // Largeur du conteneur pour un tweet
	overflow:hidden;
}
 
#mytweets {
	margin: 0;
	padding: 0;
	width: 2832px; // Désolé il faut multiplier tweet_width par le nombre de tweet que l'on veut afficher et l'inscrire à la main
}
 
#mytweets li{
	list-style-type: none;	
	margin: 0;
	padding: 5px 0;
	float: left;
	width: 944px;
}
 
#mytweets_next {
	position: absolute;
	top: 0;
	right: 5px;
	width: 25px;
	height: 25px;
	display: block;
	background-image: url(img/arrow_right_twitter.png);
	background-position: 0 2px;
}

Par défaut, seul le dernier message s’affiche, les autres étant positionnés en dehors du conteneur mytweets_wrapper grâce à l’attribut overflow: hidden; . Pour les faire défiler, voici le code du carrousel :

?View Code JAVASCRIPT
// Vérification de l'exitence de tweets	
if (document.getElementById('mytweets')) {
	var tweet_width = 944; // largeur d'une ligne de tweet
	var mytweet_width_px = jQuery("#mytweets").css('width');
	var cur_pos = 0;
	mytweets_width = 2832; // largeur correspondant à l'ensemble des tweets, désolé il faut multiplier tweet_width par le nombre de tweet que l'on veut afficher et l'inscrire à la main
 
	// Affectation de la fonction de défilement des tweets		
	jQuery("a#mytweets_next").click(function(){
		// Calcul de la position suivante
		cur_pos -= tweet_width;
		// Vérification que l'on n'a pas fait défilé tout les tweets
		if (cur_pos <= -mytweets_width) {
			cur_pos = 0;
		}
		// Défilement
			jQuery("#mytweets").animate({opacity: 0.5}, 200).animate({ 
			opacity: 1.0,
	        marginLeft: cur_pos+"px"
      	}, 1000 );
		return false;
	});			
}

WordPress : Retour du footer maous costaud avec la gestion des sidebars

Je ne sais pas si vous vous souvenez, mais dans la version précédente de mon blog, il y a avait un énorme pied de page constitué de deux lignes de trois colonnes.

Première ligne :

  • Un accès à la liste des catégories des billets
  • Une liste des billets à lire, devient une liste des billets les plus lus.
  • Une liste de billets affichés aléatoirement

Seconde ligne :

  • Une liste de liens pour faire la promotion des blogs amis
  • La liste des sites où je suis présent (forums, blog, réseaux sociaux)
  • Une liste de ressources incontournables sur les sujets qui m’intéressent

Pour éviter de passer du temps à coder et s’amuser à réinventer la roue, il suffit de passer par des sidebars. Par défaut, il n’en existe pas, leur présence dépend des modèles que vous utilisez. Ces derniers sont livrés avec un fichier php functions.php dans lequel l’auteur déclare les fonctionnalités spécifiques au thème. A priori, il est envisageable d’utiliser autant de sidebars que nécessaire pour la mise en page de votre contenu (j’ai fais un test jusqu’à 25).

Si l’enregistrement d’une sidebar dans le dashboard est assez simple, je trouve assez bizarre la façon de l’intégrer au modèle. J’ai eu recours à deux sidebars :

if (function_exists('register_sidebar'))
register_sidebar(array(
'name' => 'FooterLine1',
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>
<div>',
)
);
 
if (function_exists('register_sidebar'))
register_sidebar(array(
'name' => 'FooterLine2',
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>
<div>',
)
);</div>

Pour appeler les sidebars depuis les templates, il faut écrire :

get_sidebar() accepte comme argument le nom de la sidebar que vous aurez préalablement enregistré. Ensuite via le dashboard, il suffit de les remplir avec les widgets qui vont bien. Là où c’est bizarre, ce n’est pas tellement l’obligation de créer des fichiers intitulés sidebar-FooterLine1.php et sidebar-FooterLine2.php (fichier de contenu affiché si vous n’avez pas alimenté les sidebars via le Dashboard), mais l’obligation d’insérer ce code minimum dans les fichiers cités :

<div class="footerlines">
    <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar("FooterLine1") ) : ?>
	<!-- Rien -->
    <?php endif; ?>
	<div style="clear: left;"></div>
</div> <!-- /footerlines -->

et

<div class="footerlines">
    <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar("FooterLine2") ) : ?>
	<!-- Rien -->
    <?php endif; ?>
	<div style="clear: left;"></div>
</div> <!-- /footerlines -->

Il faudrait parcourir un peu le code source de WordPress pour comprendre la logique, mais peut être quand j’aurais plus de temps à y consacrer.

Pour terminer, j’ai du créer un widget pour afficher les derniers commentaires groupés par date, je vous en fais part :

function sutekidane_widget_badge_lastComments() {
	global $wpdb;
	$rqListeCommentaires = "
		SELECT
			comment_author,
			comment_ID,
			ID,
			comment_post_ID,
			DATE_FORMAT(comment_date_gmt, \"Les commentaires du %d/%m/%Y\") as date_formate,
			DATE_FORMAT(comment_date_gmt, \"à %H\h%i\") as heure
		FROM $wpdb->comments, $wpdb->posts
		WHERE comment_approved = '1'
		AND $wpdb->comments.comment_post_ID = $wpdb->posts.ID
		AND post_password = ''
		AND comment_type = ''
		ORDER BY comment_date_gmt DESC 
		LIMIT 0, 15
	";
 
	$rsListeCommentaires = mysql_query($rqListeCommentaires) or die (mysql_error("Les die(), c'est mal"));	
 
	echo "\t\n<div class=\"footerline\">";
	echo "\t\n<h3 id=\"badge_lastcomments\">Derniers Commentaires</h3>";
 
	if (mysql_num_rows($rsListeCommentaires) > 0) {
		$dateBalise = "";
		echo "<dl>";
		while ($commentaire = mysql_fetch_object($rsListeCommentaires)) {
			if ($commentaire->date_formate != $dateBalise) {
				if ($dateBalise != '') echo "\n\t\t\t</ul>\n\t\t</dd>";
				echo "\n\t<dt>$commentaire->date_formate</dt>\n\t\t<dd>\n\t\t\t<ul>";
				$dateBalise = $commentaire->date_formate;
			}
				echo "\n\t\t\t\t<li>
				$commentaire->heure par
				<a href=\""?phpMyAdmin=f8aa7401db868c47ec1c5040c0d7b43d . get_permalink($commentaire->ID) . "#comment-" . $commentaire->comment_ID  . "\">$commentaire->comment_author</a>
			</li>";
		}
		echo "\n\t\t\t</ul>\n\t</dd>\n\t</dl>";
	}
	else {
		echo "Il n'y a aucun commentaire pour le moment";
	}
	echo "\n\t</div>";
}
if (function_exists('register_sidebar_widget') ){
    register_sidebar_widget('Badge Sutekidane Last Comment', 'sutekidane_widget_badge_lastComments');
}

Et voilà, le footer maous costaud est donc de retour :)

Courroie de cou (neck strap) pour reflex : comparaison Lowepro Voyager et Crumpler The Industry Disgrace

Les courroies de cou livrées avec les boitiers reflex sont plus jolies qu’avant mais leur qualité restent toutefois moyenne (pour rester gentil). Elles remplissent leur objectif, à savoir permettre de porter le boitier à son cou (ou bras, si vous l’enroulez autour) sans le faire tomber. Lorsqu’on essaye de trouver quelque chose de plus confortable, on s’aperçoit, chez Canon tout du moins, qu’il n’y a pas grand chose à se mettre sous la dent.
Lire la suite

Création de sites Internet pour restaurants

Cher restaurateur, toi qui mets tant d’énergie à tenir ton établissement pour le bonheur de tes convives, tu as certainement déjà songé à avoir une vitrine sur Internet. Tu as peut être même essayé de prendre contact avec quelques créateurs de sites, mais tu n’es pas très à l’aise, c’est un univers complexe où on peut se tromper, tout le monde n’est pas compétent. Et puis il y a aussi des arnaques.

J’ai la solution pour toi. ComResto est une plateforme qui te permettra d’avoir très facilement et à prix très attractif un site pour présenter ton restaurant. L’offre est vraiment très claire et efficace, tu peux gérer le contenu à ta guise et choisir le design qui te convient. Il n’y a pas de frais cachés et tu as un buget fixe pour ta communication sur le Web.

Avoir un site Internet est très important, cette carte de visite numérique sera associée à des annuaires mais surtout, à des sites de critiques de restaurants. Par expérience, nous savons tous qu’un site Internet avec une galerie de photos permet souvent aux internautes de se décider parmi plusieurs restaurants.

Je t’invite donc à regarder en détail l’offre de ComResto et te dis à bientôt sur le site Internet de ton restaurant.

comresto-logo

PS: ceci n’est pas un billet sponsorisé.

Paris Web : avant goût du programme de l’édition 2009

Je ne sais pas vous, mais je ne m’en lasse pas. J’attends encore avec impatience de retrouver toutes les bonnes têtes pensantes du Web lors du prochain Paris Web. Plus encore lorsqu’on voit le programme, non définitif, qui nous y attend :

  • Gautier Barrère et Alain Vagner : « Concevoir un produit web c’est bien, faire en sorte qu’il soit accepté c’est mieux ! » ;
  • Eric Daspet : « Un Web ouvert » ;
  • Stéphane Deschamps : « Intégrateurs, montez au front ! » ;
  • Karl Dubost : « HTTP pour les naifs et les brutes » ;
  • Daniel Glazman : « Un seul Web » ;
  • Hervé Mischler : « Design itératif pour un site web de grande échelle » ;
  • Tristan Nitot et Paul Rouget : « Les nouveaux standards du web et leur implémentation dans les nouveaux navigateurs » ;
  • Jeremie Patonnier : « Le Webdesign orienté business » ;
  • Nicole Sullivan : « CSS peut-il être orienté objet ? »

On note le retour aux sources de Karl Dubost et de Tristan Nitot qui étaient intervenus lors de la première édition en 2006. Autant dire qu’Elie Sloïm aura de la concurrence.

Via.