Android, mon bel Android

date
3 / 9 / 2010
comments
0

Bonjour !

Je suis l'heureux possesseur d'un Android ! Et là vous vous dîtes "mais qu'est-ce qu'il vient nous narguer celui là ?". Nonon je ne vous nargue pas, je vous en vente les mérites ! :)

  • Le premier : Android est basé sur Linux, un bel avantage humm miam :D
  • Après quelque jour de test, je le trouve très réactif, aucun lag etc...
  • Facilement personalisable, j'ai mon p'tit Android totalement geekisé :) (je prévois de caller un ptit ssh dessus pour m'amuser sur mon pc avec mon cher snartphone ^^)
  • Intuitivité dans certain menu impressionnante (j'avoue que je me suis un peu perdu dans les paramètres mais pas très longtemps ^^)
  • Ergonomie du tonnerre !

Bref, tout ces petits détails font de mon android mon smartphone chéri :D

android logo

Utilisez votre clavier/souris en réseau avec Synergy

date
1 / 9 / 2010
comments
0

Bonjour!

Les vacances m'ont empéchés de beaucoup écrire mais je reviens avec un article très intérressant (pour moi du moins, j'espère qu'il le sera pour vous ;) ).

Il s'agit du logiciel Synergy, celui ci vous permettra d'utiliser un seul clavier/souris pour deux ordinateurs (ou plus) et cela via le réseau.

My desktop

Tout d'abord il vous faudra installer Synergy :

Sous Archlinux :
# pacman -S synergy
Sous Debian :
# aptitude install synergy
Sous Gentoo
# emerge -av synergy

Ceci installe le serveur et le client. Chez moi je lance l'application serveur sur mon PC fixe (le dual screen sur la photo ci-dessus) et je lance le client sur le labtop (qui se connecte au fixe).

Tout d'abord vérifiez vos /etc/hosts.deny, cela peut être embéttant si ils bloquent les connexions ^^.

Editons la configuration du serveur :

# Fichier de configuration de Synergy -- /etc/synergy.conf

# Ici on défini les ordinateurs sur lesquels on utilisera Synergy
# NB: on utilise leurs hostname
section: screens
    freeworld:    # Mon fixe
    arch-labtop:  # Mon labtop
end

# Ici on défini leurs emplacement
section: links
    freeworld:    # à gauche de ce PC on a le portable
        left = arch-labtop
    arch-labtop:  # donc le fixe est à droite de celui-ci
        right = freeworld
end

Il nous reste plus qu'a lancer le serveur et le client :

Lancer le serveur :
$ synergys -f
Personnellement je préfère le lancer dans un screen pour éviter
d'avoir un term utilisé pour rien : screen -d -m synergys -f

Lancer le client :
$ synergyc -f <IP-du-serveur>
Dans mon cas l'IP est 192.168.1.132 ;)
--> screen -d -m synergyc -f <ip>

Ce logiciel nécéssite X pour être lancé, donc pour le lancer au démarrage je l'ai mis dans mon .xinitrc. J'utilise également ssh sur le labtop pour me connecter au fixe, avec le X11Forwarding (bien qu'un peu lent) pour pouvoir travailler en 64bits alors que le labtop est lui en 32 ^^

Maintenant, have fun ;)

Gitli

date
22 / 7 / 2010
comments
0

Gné!

Gitli, hum décomposons le nom. Git et li. Git ça on connait, le magnifique gestionnaire de version développé par Linus Torvalds. Gestion perfectionné des branches, des remotes etc... Bref une merveille (bien que au code un peu désordonné mais ne tombons pas dans le troll baveux). Li est bien évidement la première syllabe du désormais bien connu Linux. Mais que symbolise cette association ?

La réponse est bien simple. Une distribution linux entièrement géré par git ! Mais quelle idée folle ! Et impossible nous dira-t-on. Que neni, nous n'y croyons pas. Laissez moi vous expliquer le concept.

Installation

Tout simplement, clonez le dépot à partir d'un système hôte (livecd après formattage des partitions par exemple) :

# mkdir /mnt/chroot
# cd /mnt/chroot
# git clone git://github.com/additk1ve/master.git
Ou si vous désirez une autre architecture que la principale, clonez une autre branche (x86_64, etc...)

Mise à jour du système de base

Ici on suppose que vous avez démarré avec Gitli.

# cd /
# git pull

Un petit backup ?

Il vous suffira de clone le dépot /.git de votre disque dur :)

Hum, marre de la version stable, je veux passer en testing !

De nouvelles versions de logiciels ? Des paquets construits différements ? Un système de base expérimental ?

# cd /
# git checkout x86_64-testing
Si vous êtes en x86_64 bien évidement :)

Je désire forker votre distribution, comment faire ?

Il vous suffit de créer un dépot public, par exemple git@github.com:linkdd/my_gitli.git :

# cd /
# git remote add origin git@github.com:linkdd/my_gitli.git
git add // git commit // other funny git's stuff
# git push origin master

Hop it's done ! :)

Et pour les paquets ?

Présentation de gitports

Vous connaissez certainement portage (Gentoo), ou les ports BSD. Imaginez un mix des deux, géré par git !

Le concept est simple, on a un dépot git contenant bon nombre de GITBUILD (qui sont de bête script shell qui s'occupe de compiler le dit logiciel). On clone le dépot on lance le script principal (nommé gitports). Celui-ci lance la compilation du logiciel, va l'installer dans une sous=arborescence, y initialiser un dépot git et merger le tout dans / !

Pas clair ? Ca va venir...

Installer gitports

# cd /usr
# git clone git://github.com/linkdd/gitports.git
# cd gitports
# ln -sv /usr/gitports/gitports /usr/bin/gitports
Le lien symbolique ajoute ici le script gitports au PATH et permettra la mise à jour automatique lors du git pull
# cp gitports.conf.sample /etc/gitports.conf
Editez ce fichier pour l'adapter à vos besoin.

Pour mettre à jour gitports, un simple git pull suffit.

Installation/mise à jour d'un paquet

# gitports install www/cream-browser
Le script cherche si /usr/gitports/www/cream-browser/GITBUILD existe.
Si oui on charge les données du scripts (définition de quelques variables et quelques fonctions utilies)
On lance les fonctions du GITBUILD.
Le logiciel sera installé dans /usr/gitports/www/cream-browser/fakeroot
On initialise un dépot git dans ce dernier dossier et on y ajoute tout le contenu
On retourne dans le dossier racine avec : (ce qui suit est fait automatiquement)
# cd /
# git remote add cream-browser /usr/gitports/www/cream-browser/fakeroot/.git
# git pull cream-browser master
 Cette dernière commande pourra être utilisé pour mettre à jour le logiciel après compilation de la nouvelle version.

Ainsi la commande git remote fournira une liste des paquets installés, git remote | grep <paquet> une recherche parmi ceux-ci. :)

Certains détails restent à peaufiner comme la gestion des fast-forwards généré par un logiciel qui installe les mêmes fichiers que le sysbase ou un autre logiciel.

Désinstaller ?

Il suffira de lister les fichiers du fakeroot, les supprimer du trueroot et retirer le remote avec git remote rm <le soft>. Ceci sera aussi fait automatiquement par le script gitports.

Conclusion.

Un travail de forcené nous attend pour gérer tout les problèmes, les résoudres et ainsi fournir une distribution stable et performante. Et purement geekesque (stop troll !!!!! :D), comme nous la décrivons, elle est RTFM (Read The Fucking Manual) car il faudra lire bien attentivement la doc de git autant coté dev que coté user.

Je vous invite à rejoindre le canal #gitli @ irc.freenode.net

Tips #1: Compresser ses executables en XZ

date
22 / 7 / 2010
comments
0

Bonjour!

Tandis que je codais tranquillement en Assembleur ce matin (oui je sais j'ai le réveil dur), essayant de réduire la taille de mes executables. J'ai viré les libs standards pour utiliser les syscalls, j'ai codé directement le header ELF32 dans le fichier source, du coup je compile mon fichier en binaire brut et le voila executable en 91 octets contre 3Mo en C, bref je m'égare.

Je me suis dit, comment pousser la chose ?Et la je découvre ce site. Leur solution était de compresser au format gzip l'executable et de le décompresser lors de l'execution (le script de décompression et l'executable compressé étant concatenés dans un seul fichier). Pour exemple, l'executable brut de Cream-Browser fait environ 6,2Mo, une fois compressé j'obtiens un executable de 1,5Mo.

Cependant la décompression prend du temps! J'ai donc choisi de compresser avec XZ pour 2 raisons :

  • malgré un temps de compression élevé, la décompression et fortement rapide
  • la compression est bien plus forte que gzip

Voici un petit bench :

         | cream-browser | cream-browser (gzip) | cream-browser (xz)
Taille   |     6,2Mo     |         1,5Mo        |       202ko
Time (s) |     0,946     |         5,045        |       1.201

Comme vous le voyez on a une grande perte de temps avec gzip. Alors qu'avec xz on a un gain de place énorme et une perte de temps peu significative.

Voici donc la marche à suivre, un fichier compress.sh :

    #!/bin/sh
    if [ ! -a /tmp/cream-browser ];then
     dd if=$0 bs=1 skip=188 2>/dev/null|xz -cd>/tmp/cream-browser
     chmod +x /tmp/cream-browser
    fi
    /tmp/cream-browser
    rm /tmp/cream-browser
    exit

Si vous modifiez le script n'oubliez pas de mettre à jour la valeur de skip qui est extrêmement importante.

    $ xz -z cream-browser
    $ cat compress.sh cream-browser.xz > cream-browser
    $ chmod a+x cream-browser
    $ ./cream-browser

Enjoy! ;)

SCSS, Sass est une extension de CSS

date
12 / 7 / 2010
comments
3

SCSS (Sassy CSS) est une extension au CSS, il est fourni par Sass 3. Il vous permet en gros de rédiger des feuilles de style CSS d'une manière plus organisé, avec des variables, des fonctions etc...

$blue: #3bbfce;
$margin: 16px;

.content_navigation
{
    color: $blue;
}

.border
{
    padding: $margin / 2;
    margin: $margin / 2;
    border: 2px $blue solid;
}

On peut imbriquer les différentes règles :

table.hl
{
    margin: 2em 0;

    td.ln
    {
        text-align: right;
        padding-left: 0.2em;
    }
}

Et déclarer des portions de code que l'on peut inclure :

@mixin table-scaffolding
{
    th
    {
        text-align: center;
        font-weight: bold;
    }
    td, th { padding: 2px; }
}

@mixin left ($dist)
{
    float: left;
    margin-left: $dist;
}

#data
{
    @include left (10px);
    @include table-scaffolding;
}

Vous pourrez voir un exemple ici même : lien. Il s'agit de la feuille de style du site de Cream-Browser.

Utiliser SCSS

Il vous faudra pour cela installer Sass 3 via gem :

$ gem install haml --pre

Ensuite il vous suffit d'utiliser l'executable Sass pour compiler vos fichier SCSS :

$ sass style.scss style.css

$ sass --watch style.scss:style.css
$ sass --watch scss:stylesheets

Convert a single file to SCSS syntax
$ sass-convert --from sass2 style.sass style.scss

Convert all files to SCSS syntax
$ sass-convert --from sass2 --to scss --recursive .

Pour plus d'info : Intro à SCSS pour les utilisateurs de Sass - Site officiel

Linux et LVM2

date
26 / 6 / 2010
comments
0

Bonjour,

Je vous accueille aujourd'hui avec un article sur LVM2, merveille que je vais vous présenter sur le champ.

Qu'est-ce que LVM2 ?

LVM, signifiant Logical Volume Manager, permet de concatener plusieurs partitions en une seule. Par exemple, vous avez 2 disques dur de 20Go. Vous faites trois partitions :

  • /dev/sda1 monté sur /boot de taille 1Go
  • /dev/sda2 en tant que swap de taille 1Go
  • /dev/sda3 de taille 18Go
  • /dev/sdb1 de taille 20Go

Vous créez un Physical Volume pour chaque partition comme ceci :

# pvcreate /dev/sda3 /dev/sdb1
Physical volume "/dev/sda3" successfully created
Physical volume "/dev/sdb1" successfully created

Nous allons maintenant concaténer ces volumes physiques dans un groupe de volume :

# vgcreate myVG /dev/sda3 /dev/sdb1
Volume group "myVG" successfully created

La commande vgdisplay affichera toute les informations sur vos Volume Group.

Nous allons maintenant créer un volume logique sur lequel nous créerons notre partition :

# lvcreate -n myLV1 -L 38G myVG
Logical volume "myLV1" created

La taille de /dev/sda3 est de 18Go, celle de /dev/sdb1 est de 20Go, on veut concatener nos disques ce qui donne une taille de 38Go. Nous créons ce volume logique dans le groupe de volume "myVG" (qui est la concaténation de /dev/sda3 et /dev/sdb1)

Il ne reste plus qu'a créer votre troisième partition monté sur / :

# mkfs -t xfs /dev/myVG/myLV1
ou
# mkfs -t xfs /dev/mapper/myVG-myLV1

NB: S'il reste de la place sur vos disques vous pouvez bien entendu créer d'autre volume logique.

Quelles sont les autres atouts de LVM2 ?

Agrandir un volume

Bon, vous venez d'acheter un troisième disque dur de 20Go que vous avez ajouté. Et vous avez créé une partition unique dessus que vous souhaitez ajouter à votre partition pour obtenir une taille de 58Go :

# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
# vgextend myVG /dev/sdc1
Volume group "myVG" successfully extended

Nous venons de créer un nouveau volume physique et de l'ajouter à notre groupe de volume

Il ne nous reste plus qu'à agrandir la taille du volume logique et du système de fichier :

# lvextend -L +20G /dev/myVG/myLV1
Extending logical volume myLV1 to 58,00 GB
Logical volume data01 successfully resized
# resize2fs /dev/myVG/myLV1

NB: Ceci peut être fait à chaud sans démonter le système de fichier

Réduire un volume

L'inverse est également possible, par exemple passer votre volume de 58Go à 50Go. Il vous faudra dabord réduire le système de fichier :

# fsck -f /dev/myVG/myLV1
# resize2fs /dev/myVG/myLV1 50G

Puis réduire le volume logique :

# lvreduce -L 50G /dev/myVG/myLV1

NB: Ceci ne doit absolument pas être fait à chaud, vous devez démonter le système de fichier avant de faire quoi que ce soit.

Aller plus loin

Ce n'est qu'un bref aperçu des possibilités de LVM2, il est également possible :

  • d'ajouter et de supprimer à volonté des volumes physiques d'un groupe de volume
  • de déplacer le contenu d'un volume physique vers un autre
  • de créer plusieurs groupe de volumes
  • de créer et de supprimer autant de volume logiques que souhaités dans un groupe de volumes
  • d'agrandir et de réduire à volonté la taille des volumes logiques
  • de créer des miroirs de volumes logiques
  • de créer des snapshots (figer le contenu d'un des miroirs précédement créé) pour une sauvegarde, une resynchronisation ou une restauration
  • de créer des solutions RAID+LVM

Notez qu'il existe des outils graphiques permettant de ne pas s'encombrer de la ligne de commande si celle ci vous repousse.

Grosse mise à jour du site de Cream-Browser

date
13 / 6 / 2010
comments
0

Bonjour,

Je vous annonce que le site de Cream-Browser a entièrement été refait (toujours en gardant le même thème).

Tout dabord, j'ai passé le code en PHP (le code HTML étant chiant à maintenir). J'ai ensuite remarqué que le bugtracker flyspray utilisant mysql était down. Je me suis donc lancé dans la rédaction d'un bugtracker home-made et parfaitement intégré au site (et beaucoup plus simplifié que flyspray).

J'ai donc commencé par créer un espace membre (s'inscrire). Vous pouvez vous inscrire en toute sécurité, les mots de passe sont chiffré à l'aide de MD5 et j'utilise la librairie reCAPTCHA pour la génération des captchas.

J'ai ensuite dynamisé la page Authors afin de répartir les membres inscrit dans les trois groupes : manager, developper, et packager. Cerise sur le gateaux, vous aurez un avatar défini à partir de votre addresse email grâce au site internet Gravatar. Allez donc vous inscrire dessus et y mettre votre avatar favoris :)

Viens enfin la création du bugtracker, la chose est simple, type (bug ou feature), status (ouvert, fermé, fixé), ID de l'utilisateur qui a reporté le bug, ID de l'utilisateur à qui il est assigné (par défaut -1 = unassigned), et le contenu. J'ai ajouté aujourd'hui la possibilité d'ajouter des commentaires aux bugs afin d'en discutter (la aussi très simple, id du bug, id de l'utilisateur, contenu du commentaire).

On pourra observer sur la page du membre les bugs qu'il a reporté et ceux qui lui sont assignés.

Après, pour le confort personnel, j'ai décidé de gérer les news du site (le petit paragraphe en bas de l'index) et les screenshots directement dans la BDD. Normalement je ne toucherai plus au code (ouf ^^). Ah si, pour la TODO list ^^"

Enjoy sur le nouveau site ;)

NixOS, la seule distribution GNU/Linux fonctionnelle

date
29 / 5 / 2010
comments
0

Comme le dit cet article, NixOS est probablement la seule distribution GNU/Linux fonctionnelle.

Nix, un gestionnaire de paquet alléchant

La distribution est basée sur le gestionnaire de paquet Nix, celui ci, qui est au coeur du système, propose bon nombre de fonctionnalité à s'en lécher les babines, on pourra citer par exemple :

  • La présence d'un arbre contenant la totalité des logiciels :

    /nix/store/r8vvq9kq18pz08v249h8my6r9vs7s0n3-firefox-2.0.0.1/
    

    Ce dossier contient la totalité des dépendances à firefox-2.0.0.1 et le programme en lui même. Ici r8vvq est le hash MD5 de l'arbre des dépendances. Ce qui affecte un identifiant unique à chaque paquet et permet à l'utilisateur d'installer plusieurs versions différentes d'un même logiciel le tout dans une transparence des plus complètes. Ce système sera également utilisé pour effectuer des downgrades complet du système (revenir à une ancienne version).

  • La gestion du multi-utilisateur, cela signifie donc qu'un utilisateur ne possédant pas les privilèges administrateur peut installer un programme dans l'arbre sans l'ajouter au PATH global (uniquement au PATH utilisateur). Si le logiciel installé a déjà été installé par un autre utilisateur, alors celui-ci ne sera pas retéléchargé/compilé et sera tout simplement ajouté au PATH utilisateur. En même temps il est impossible pour un utilisateur d'injecter un trojan dans un paquet qui pourrait être utilisé par un autre utilisateur.

  • Les rollbacks. Ici on notera une fois de plus l'avantage des hash MD5. Ils permettent à l'utilisateur d'effectuer un retour en arrière dans le système (les downgrades dont je vous ai parlé) :

    état 1
    $ nix-env --upgrade some-packages
    état 2
    $ nix-env --rollback
    Nous revoila à l'état 1
    
  • Les patchs binaires. Vous connaissez surement les patchs (utilisés par la plupart des gestionnaires de version comme git) généré par exemple par le programme diff. Ici le principe est le même mais il s'applique sur les fichiers binaires. Cela permet donc un téléchargement des mise à jour bien plus rapide et une installation quasi-instantanné (dépendant de la taille du programme à patcher)

  • Et bien d'autres, je vous invite à visiter cette page pour plus d'infos.

Le reste du système

Je vous l'ai dit plus haut, Nix est au coeur du système, c'est lui qui compile tout les logiciels, ainsi que le noyau et il génère la configuration (généralement situé dans /etc). Ceci permet donc d'avoir plusieurs configurations possible, d'effectuer à nouveau les rollbacks du système de base complet, ou bien d'utiliser le langage de script Nix. Voici un exemple :

{
    boot.loader.grub.device = "/dev/sda";

    fileSystems = [
        { mountPoint = "/";
          device = "/dev/sda1";
        }
    ];
}

Après avoir modifié /etc/nixos/configuration.nix, vous pouvez mettre à jour la configuration en lançant cette commande :

    $ nixos-rebuild switch

Et pour revenir en arrière :

    $ nixos-rebuild switch --rollback

Cependant la distribution vous permet de reconstruire tout la configuration sans l'établir comme configuration par défaut, ce qui vous permettera de tester vos modifications :

    $ nixos-rebuild test

Au démarrage suivant, vous avez votre ancienne configuration, vous pouvez cela dit tester tout cela en demandant la compilation et le lancement d'une machine virtuelle :

    $ nixos-rebuild build-vm
    $ ./result/bin/run-*-vm

Ceci démarre une machine virtuelle contenant la nouvelle configuration (une copie de la configuration de l'hôte avec toute les modifications que vous y avez faites). La machine virtuelle ne partage aucune donnée avec l'hôte, vous pouvez donc y faire tout vos test expérimentaux dedans.

Encore une fois, je vous invite à lire cette page pour plus d'informations.

Nixpkgs, une multitude de logiciel...

... qui sont mis à votre disposition. Une multitude ? Environ 2500 à l'heure actuelle supportant les platformes suivantes :

  • GNU/Linux 32-bit et 64-bit x86 (i686-linux et x86_64-linux)
  • Mac OS X (i686-darwin et x86_64-darwin)
  • FreeBSD (i686-freebsd et x86_64-freebsd)
  • OpenBSD (i686-openbsd)
  • Windows / Cygwin (i686-cygwin)

Voici la page officielle de Nixpkgs.

Le reste du projet

Vous pourrez trouver toutes les informations nécéssaire à ce lien.

Je vous souhaite bon amusement avec cette distribution plus que prometteuse :)

Le compilateur clang

date
26 / 5 / 2010
comments
0

Bonjour,

Sur la majorité des systèmes, le compilateur par défaut n'est autre que gcc. Cependant le projet LLVM, visant à créer une suite de compilateur bytecode générant ainsi des executables portables sur tout système doté de LLVM, se dote d'un sous-projet : Le projet clang

clang est un compilateur des langages de la famille du C (le C, le C++, l'Objective-C, le C#, etc...). Mais pourquoi l'utiliser lui et non gcc ?

  • Tout dabord on remarquera une plus grande rapidité de compilation :

time to parse space preprocessor

  • On notera ensuite une sortie plus expressive que GCC :

    $ gcc-4.2 -fsyntax-only t.c
    t.c:7: error: invalid operands to binary + (have 'int' and 'struct A')
    $ clang -fsyntax-only t.c
    t.c:7:39: error: invalid operands to binary expression ('int' and 'struct A')
      return y + func (y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X);
                           ~~~~~~~~~~~~~~ ^ ~~~~~
    
  • Il est également compatible avec GCC, c'est à dire qu'il gère les extensions de ce compilateur ajouté au langage (étant majoritairement utilisé par les développeurs qui ne veulent uniquement que leurs codes compilent)

  • clang permet de compiler le code source directement en bytecode executable par LLVM

C'est un compilateur vraiment performant et qui mérite grande attention :)

Deux dépendances en moins pour Cream-Browser

date
19 / 5 / 2010
comments
0

Hier sur le salon IRC de Cream-Browser (je le rappelle : #cream-browser @ irc.freenode.net ) quelqu'un m'a dit ceci :

Salon IRC: 20:58 < _nathan> linkdd, tu avais vu ça "GNet is maintained, but not developed any further. You should not use it in new software." 20:58 < _nathan> ? 20:59 < linkdd> non 21:08 < _nathan> linkdd, maintenant si

Je ne pouvais donc pas utiliser une librairie qui n'est plus développé dans Cream-Browser ! J'ai donc décidé de recoder moi même ce pourquoi je l'utilisais, soit :

  • Création du socket UNIX serveur
  • Connexion au serveur FTP dans l'objet FtpClient (anciennement GFtp, je l'ai renommé car GFtp faisait penser au logiciel du même nom ^^ )
  • Connexion au serveur Gopher dans l'objet GopherClient
  • Et quelque autre petit truc.

C'est donc la librairie GNet qui s'en va !

Mais je n'en reste pas la ! En effet j'en ai profité pour supprimmer l'objet CurlClient en prévision de la prochaine inclusion du FtpClient fait main, ce qui signifie que actuellement le FTP est indisponible dans Cream-Browser (ce n'est que temporaire cela dit).

Curl, je n'ai plus besoin de toi :)