Puyb Inside

jeudi 26 juillet 2007

Astuces Ubuntu

Deux petites astuces que je viens de trouver pour Ubuntu Feisty :
  • Pour pouvoir choisir la vitesse du CPU avec l'applet gnome cpufreq :
    sudo dpkg-reconfigure gnome-applets
    Puis autoriser l'applet cpufreq à être lancé en tant que root...
  • Pour pouvoir changer facilement les réglages multi-écrans (c'est à dire sans trifouiller le xorg.conf) :
    Télécharger et installer les deux paquets situés à cette adresse (en commençant par le guidance-backend).

    Et hop, un joli panneau de contrôle dans le menu système pour régler simplement le double écran... C'est pile ce qu'il manquait à Linux.

mardi 17 juillet 2007

Liens et icônes

Comme vous l'avez peut être remarqué, dans le menu "liens", les urls des sites sont décorées d'une icône. Je vais vous expliquer comment ça marche...

Internet Explorer 6 à introduit la possibilitée d'associer une icône à un site. Le principe retenu est de simplement placer un fichier favicon.ico à la racine du site. Ce fichier est une icône au format Microsoft de taille 16x16. Les principaux navigateurs ont copiés cette fonctionnalité. Ce système à été adopté par de nombreux sites.

Donc, pourquoi ne pas faire un petit script javascript pour ajouter cette icônes à tous les liens d'une page.

Le principe est simple : on cherche tous les liens dans un calque (voir, dans la page), on extrait les URL (attribut href), puis on crée un image pointant vers le fichier favicon.ico du site.
Pour améliorer un peu le principe, je crée deux images. La première est une image générique (représentant un lien) située sur mon serveur. La seconde est le favicon du site. Elle apparaît cachée par défaut. Dès que l'image favicon.ico est chargée, je cache la première image générique et j'affiche l'image spécifique au site (grâce a une fonction sur son événement onload). Cette astuce me permet d'avoir toujours une icône sur les url, même quand il n'y en a pas pour ce site ou que le site est lent à répondre.

Mais trêve de bavardage, voici le code (il marche avec la librairie prototype) :
$A($('links').getElementsByTagName('a')).each(function (el) {
		var img = $(document.createElement('img'));
		img.src = el.href + 'favicon.ico';
		img.style.display = 'none';
		img.width = '16'
		img.height = '16'
		img.onload = function() { this.style.display = 'inline'; $(this).previous('img').style.display = 'none'; };
		el.insertBefore(img, el.childNodes[0]);
		var img2 = $(document.createElement('img'));
		img2.src = 'themes/sofresh/img/url.png';
		img2.width = '16'
		img2.height = '16'
		el.insertBefore(img2, el.childNodes[0]);
	});

Et voilà, c'est tout...

Pour info, le fait d'utiliser un fichier favicon.ico, bien que supporté par tous les navigateurs, n'est pas standard. Maintenant, le standard spécifie que l'URL du fichier utiliser comme icône doit être spécifié via quelques balises link dans le head.
<link rel="shortcut icon" href="http://example.com/favicon.png" type="image/png" />
<link rel="icon" href="http://example.com/favicon.png" type="image/png" />
Mais cette méthode n'est pas supportée par Internet Explorer 6 (heureusement, il est voué à disparaître). Mais en attendant, heureusement que le web est relativement lent pour adopter les standards, car si c'était le cas, mon script ne marcherait pas...

En attendant, je ne vois pas bien comment rendre mon script compatible avec le standard. Il faudrait pouvoir récupérer la page d'index du site, pour analyser le head à la recherche les balises link. Le problème, c'est que les navigateurs n'aprecient pas trop que l'on aille chercher des infos (avec une requête Ajax par exemple) sur un domaine différent (c'est pour éviter des attaques de type cross site scripting XSS). Une solution pourrait être d'utiliser un iframe invisible, mais dans ce cas, le problème serait que la totalité de la page du site distant serait chargée par vos visiteurs, ce qui imposerait à vos visiteurs de longs temps de chargement (il faut multiplier ça par le nombre de liens sur la page) et qui consommerai un peut trop de bande passante sur les sites distants (charger toute une page juste pour trouver une icône !)... L'autre solution ne serait plus purement javascript, en utilisant par exemple un script PHP sur le serveur qui se chargerait de récupérer l'icône (et qui au passage pourrait faire du cache)... Bref, on dépasse un peu le cadre du petit script simple à mettre en place ;-)

dimanche 8 juillet 2007

Nouveau look

Je viens de mettre à jour le look de site...
Pas de révolution, mais plus une évolution.

Tous les changements concernent la barre de navigation à droite. J'ai mis en place des menus déroulants, ce qui permet de gagner beaucoup de place. La barre peut enfin être visible sur un petit écran (quelle idée de naviguer sur internet avec un écran inférieur a 1280x1024 ;-) )... J'ai aussi ajouté quelques petites icônes pour égayer le tout... J'ai mis la barre de titre en position fixe (elle ne scroll plus avec le texte). Quand au champs de recherche, je l'ai déplacé dans la barre de titre et relooké à la Apple.

Bon, il reste encore un petit peu de boulot pour finir tout ça... Voici une liste non exhaustive de ce qui ne fonctionne pas (ce sont des problèmes de compatibilité multi-navigateurs) :
  • Bord arrondis des menus sous IE et Safari :
    Comme ces navigateurs ne supportent par l'attribut CSS3 border-radius (Firefox le supporte via son attribut propriétaire -moz-border-radius), il va sans doute falloir mettre un petit peut de javascript pour ajouter plein d'image de coin arrondi et de bordure...
  • Le fond coloré des liens dans les menus ne s'affiche pas bien sous Safari (il ne s'affiche pas si le curseur est au dessus du texte, mais s'affiche s'il est sur le bord d'un lien...).
  • Toujours dans les menus, mais sous IE7, cette fois, le texte disparaît au survol des liens de la catégorie "Liens". Bizarre...


Voilà... Z'en pensez quoi ?

Merci iCat

Voici ce que ma chatte m'a offert ce matin pour le petit déjeuner...

Le plus inquiétant, c'est que je vis en appartement et qu'elle ne peut pas sortir dehors... Ce pigeon a du s'approcher un peu trop près de la fenêtre !!!

En tout cas, j'ai retrouvé des morceaux dans tout l'appartement ... beurk.

Poussière

Il était temps de nettoyer ça ;-)

samedi 7 juillet 2007

Auto detection de vos postes Ubuntu

Sous Windows, quand on va dans les partages réseaux, tous les postes du réseau local apparaissent automatiquement (normalement...).

Sous Ubuntu, on peut avoir le même comportement. Les postes Windows sont auto-détécté... Tout comme les postes Linux équipés d'un serveur Samba... Mais comment avoir de l'auto-détection de services un peu plus libres comme le sftp ou le webdav...

La solution porte le doux nom de mDNS/zeroconf (on comprend pourquoi Apple a préféré appeler ça "Rendez-Vous" puis "Bonjour" ;-) ).

mDNS est un protocole d'auto-détection de machines et de services sur un réseau local. Cela permet de trouver une machine par son nom (sans serveur DNS) ou encore de détecter tous les serveurs de fichiers, toutes les imprimantes, ou même tous les clients IM ou VOIP...

Ubuntu est pré-équipé pour utiliser mDNS grâce d'un coté au démon avahi qui sert à faire les annonces et à Gnome (nautilus ?) qui affiche les services de partages de fichiers.

Il suffit donc de configurer correctement avahi pour qu'il annonce correctement les services présent sur vos machines.
Il faut placer des fichiers .service dans /etc/avahi/services/

/etc/avahi/services/sftp.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_sftp-ssh._tcp</type>
    <port>22</port>
  </service>
</service-group>

/etc/avahi/services/ssh.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_ssh._tcp</type>
    <port>22</port>
  </service>
</service-group>

/etc/avahi/services/webdav.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_webdav._tcp</type>
    <port>80</port>
  </service>
</service-group>

Bien sûr, on peut annoncer plein d'autres choses... Il suffit de trouver le bon type de service et le port approprié. Le problème, c'est que relativement peu d'applications Linux utilisent l'auto-détection mDNS... Dommage.