The Caribbean Weblog

"This blog is continuing @ http://christophemaximin.com "

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 30 avril 2006

Code Igniter : du sérieux à la plaisanterie

Après avoir regardé les vidéos, lu la doc, lu le code source, j'ai finalement réussi à me convaincre que Code Igniter servait à quelquechose. Mieux. J'ai même l'impression que c'est utile.
Mais je tiens quand même à exprimer mon|ma étonnement|surprise|stupéfaction|incompréhension quant à ce genre de choses, que l'on retrouve dans les helpers (/system/helpers/*) :

function form_close($extra = '')
{
	return "</form>\n".$extra;
}

... ou encore :

function br($num = 1)
{
	return str_repeat("<br />", $num);
}

... et même :

function nbs($num = 1)
{
	return str_repeat("&nbsp;", $num);
}

... en passant par :

function heading($data = '', $h = '1')
{
	return "<h".$h.">".$data."</h".$h.">";
}

Je serais très heureux que quelqu'un veuille bien m'expliquer le pourquoi de ce genre de méthodes...

samedi 29 avril 2006

Astuces bash et autres en vrac

Le man étant "un peu" long (man bash | wc -l => 4917), il n'est pas facile de trouver des astuces permettant d'utiliser son shell plus vite. Personnellement, j'utilise celles qui suivent tout le temps, et je ne sais pas trop comment je ferais sans :

Ne pas avoir à retaper les parties de comandes

  • La plus simpe et la plus utile : !^ corresponds au premier argument de la commande précédente, !$ correponds ainsi au dernier arguement

Exemple, pour lister les éléments d'une volume venant d'être monté, quel que soit son pwd :

# mount -t vfat /dev/sda1 /media/cleusb
# cd !$ && ls

Ce n'est ici qu'un exemple parmi d'autres, mais je peux vous jurer qu'une fois utilisé, il est impossible de s'en passer. Notez que la c'est la ligne "cd /media/cleusb && ls" qui est notée dans l'historique.

  • Les deux autres plus simples, !! et !* qui remplacent respectivement la dernière commande (avec tous ses arguments) et tous les arguments de la dernière commande
  • Pour accéder aux élements de la dernière commande particulièrement, il faut utiliser !:x, x remplacant le numéro d'une partie, avec !:0 pour le nom de la commande. Exemple :
# ls -l truc1.x truc2.y
# ... // résultat de la commande
# rm !:2

... ce qui supprimera truc1.x .

Alias et autre trucs utiles dans .bashrc

Alias

Il y a beaucoup de chance qu'il y aie déjà des choses comme " alias ls='ls --color=auto' " dans votre ~/.bashrc, on peut en ajouter beaucoup d'autres, le premier sera :

alias more='less'

... pour ceux (moi) qui ont l'habitude de taper "more" pour regarder ce qu'il y a dans un fichier texte, parce que more, ça suxe vraiment (impossible de remonter dans la lecture du fichier).

Variables

zik=/home/user/docs/zik

... permet de faire des trucs genre

$ mv album_fraichement_dled $zik

Notez que cd $zik/artist marchera (avec un dossier 'artist' dans '/home/user/docs/zik' bien entendu), et que la complétion y est vaguement utilisable, en entourant le nom de variable avec des guillemets.

Autre

Rajoutez-y :

export HISTCONTROL=ignoredups

pour ne pas doubler les lignes dans l'historique (.bash_history je rappelle), ce qui permet d'économiser de la place, et de faire rentrer plus de commandes (différentes).

Notez que je n'ai pas mentionné la complétion insensible à la casse et les CDPATH car ils peuvent mener à faire des erreurs, et sont à manier avec précaution... c'est à dire réveillé, cafféiné pour les cafféineux, désalcoolisé pour les bièreux.

Ceux qui veulent aller (vraiment) plus loin avec les shells, devraient essayer zsh (qui supporte l'utf-8, sissi), c'est bluffant.

jeudi 27 avril 2006

|\/|`/ $|*@|\/| 1$ |33+

t3hR15 700 mUc|-| 5|*4mZ, 73h 5UxXx0rZs, j00 533 ? : |\/|`/ $|*@|\/| 1$ |33+.

lundi 24 avril 2006

De l'importance du Logiciel Libre - Sean Cohen

Aujourd'hui je vais parler de logiciels, de pourquoi l'aspect logiciel de votre ordinateur est important, des différents types de logiciels, et pourquoi vous devriez y porter une attention toute particulière (et ce qui que vous soyez et quelle que soit votre activité). Aussi sensationnaliste que cela puisse paraître, vous devriez vous en soucier tout simplement parce qu'un jour il est fort possible que vous n'ayez plus le droit d'écouter vos MP3, de lire vos documents Word ou d'envoyer des messages à des amis par le net. Vous pensez peut-être que vous pourrez accomplir ces tâches simples à tout jamais parce que, comme l'immense majorité, vous croyez que vous êtes propriétaire de la plupart des données stockées sur votre ordinateur.

C'est là que vous vous trompez.

Lisez "De l'importance du Logiciel Libre".

samedi 22 avril 2006

"rho le gros geek !"...

... foutaises.

J'en ai marre de lire les gens s'autoproclamer "gros geek" parce qu'ils font des pseudo-lapsus de merde, et que ça termine sur bashfr.

Un "gros geek", ça ressemble à ça :
Ken Thompson et Dennis Ritchie

Voilà qui est dit.

mercredi 19 avril 2006

vfu - VFU is console (text-mode) file manager for UNIX/Linux

# apt-get install vfu

# man vfu

NAME
       vfu - VFU is console (text-mode) file manager for UNIX/Linux

SYNOPSIS
       vfu [options]

DESCRIPTION
       vfu has following features:

        - Fast one-key commands
        - Extended completition and wildcard expansion
        - Directory tree with sizes (incl. sizes cache)
        - File-type colorization (extension and type)
        - Archives support (TAR, TGZ, BZ2, and many more)
        - Simple FTP support through archive-like interface
        - Internal text/hex file viewer and editor (optional)
        - Extensive user-defined external support/utils
        - Regular expressions selection and search
        - Multiple file masks
        - and much more...
[...]

# exit

$ vfu

=> t3h pUr3 l33t r0x0ry p0\/\/er3d.

dimanche 16 avril 2006

Autre voeu

...que j'èspère ne pas être un autre voeux pieux.

Je veux un interpréteur php aussi usable que irb pour ruby, et NON, php -r n'est en rien comparable.

Merci.

EDIT: Suite au soufflet offert par geoffrey, en plein dans la face, je me suis dit que j'allais le faire... et je n'aurai jamais pensé que ça serait aussi facile :

#!/bin/php
<?php
while(true){
	echo "\n>> ";
	$in = trim(fgets(STDIN));
	eval("\$ret = ($in);");
	echo "\t=> ".var_export($ret,true);
}
?>

Bon évidemment, ça ne gère pas l'historique des commandes, la completion (pas par défaut dans irb), le code multiligne, (ça commence à faire beaucoup), ni les structures de langage, mais vous concéderez qu'il ne sagit là que du détail... voici un exemple d'utilisation :

sh-3.1$ ./iphp
>> $x = 5
       => 5
>> $x
       => 5
>> $x + 2
       => 7
>> md5('nouveau mot de passe')
       => 'c0bf333e80fdf4bc4add5c877bb2d124'

Have fun.

vendredi 14 avril 2006

Easter Egg d'epiphany

En pensant à l'Easter Egg de mozilla, je me suis demandé si epiphany en avait un... et effectivement :
texte

... et c'est bien pour cette raison qu'epiphany est mon navigateur par défaut.

mercredi 12 avril 2006

Savoir, comprendre, gueuler (ou pas)

J'allais faire un billet sur le permis de conduire européen, qui va faire son entrée pour 2013, puis sur la directive "Services", et puis jme suis dis que vous étiez des grands garcons (et filles s'il y a). Si vous voulez suivre une actualité qui a de la valeur, suivez la newsletter de la commission européenne, ça vous concerne : http://europa.eu.int/newsletter/subscribe_fr.htm .

N'hésitez pas aussi à consulter le Journal officiel, vous verrez par vous même, c'est très instructif.

Maintenant vous savez.

samedi 8 avril 2006

Représentation hexadécimale des couleurs

À l'époque où je choisissais mes couleurs avec le spectre de couleurs (vous savez, le gros rond là, entouré d'un cercle) d'applications diverses, je ne connaissais pas l'hexadecimal.
Depuis, de l'eau (beaucoup d'eau) à coulé sous mon pont, et c'est en faisant un design que je me suis rendu compte de la simplicité du système : La couleur est calculée en trois octets (donc deux chiffres/lettres), r(ouge),g(reen=>vert),b(leu).

Et "plus t'en mets, moins t'en as" : chaque couleur passe du noir 00 au blanc ff, l'on comprends donc mieux aisément pourquoi #0000ff donne du "vrai" bleu, et #ff0000 du "vrai" rouge.

(Comme toujours,) Vous aurez plus d'informations sur Wikipedia : http://fr.wikipedia.org/wiki/Codage_informatique_des_couleurs

jeudi 6 avril 2006

Voeu pieux, en passant

J'aimerais que les applications/framework/librairies PHP dites "professionnelles" ne provoquent pas moult d'erreurs avec l'error_reporting à E_ALL.

Merci.

mardi 4 avril 2006

ClassTags, pour gérer les tags id3 et vorbis (id3 surtout)

Pour les besoins du site sur lequel je travaille, j'ai fait cette petite classe, qui permet de "gérer" les tags id3v1, id3v2 (ce dernier étant prioritaire) et vorbis des fichiers mp3 et ogg.
Mais en fait, je m'inquiétais surtout pour sa sécurité, surtout au niveau de la méthode tag(), et je n'ai inclus aucun système d'anti-dépassement (éventuel) de buffer, vu que je ne m'y connais pas du tout.
Si un (ou deux) de vos yeux avisés remarquait un trou à ce niveau, ailleurs, ou quelquechose de codé par les pieds, je serais (très) heureux d'en être averti, afin de pouvoir le recharcuter comme il faut.

<?php
/* 
** only support mp3 and ogg tags
** software needed in $PATH : tagtool, id3v2
** methods : getTags( file.[ogg|mp3] ), 
** convertToid3v2( file.[ogg|mp3] ), 
** tag( field , newvalue , file.mp3 , [format)
*/
class ClassTags {
	
	public $status, $file, $result;
	public $tag = array();
	public $taggableF = array(); // formats we can tag
	
	// the three functions following are only about grabbing the tags
	
	function __construct(){
		$this->taggableF = array('mp3');
	}
	
	public function getTags($arg){
		if(!is_file($arg)){
			$this->status = 'NoFile';
			return;
		}
		
		$this->file = escapeshellarg($arg);
		$this->result = shell_exec('tagtool --dump '.$this->file);
		// for avoid to create a notice error when one of these fields is empty and we try to access it 
		$this->tag['title'] = ''; $this->tag['artist'] = '';
		$this->tag['album'] = ''; $this->tag['year'] = '';
		
		if(shell_exec('file -ib '.$this->file) == "application/ogg\n")
			$this->status = $this->getVorbis($this->result);
		else { // if it isn't an ogg, we assumes that's mp3
			$this->result = utf8_decode($this->result);
			if(substr_count($this->result,'---- ID3 v2 ----') 
			&& preg_match("/ID3 v2 ----\n(.*)/s",$this->result,$matches))
				$this->status = $this->getId3($matches[1]);
			elseif(substr_count($this->result,'---- ID3 v1 ----') 
			&& preg_match("/ID3 v1 ----\n(.*)/s",$this->result,$matches)){
				$this->status = $this->getId3($matches[1]);
				// doesn't deserve anything now, but we know that id3v2 is cooler than id3v1 :)
				$this->convertToid3v2($this->file); 
			} elseif(substr_count($this->result,'No ID3 tags.'))
				$this->status = 'NoTags';
			else 
				$this->status = 'UnknowErr';
		}
	}
	
	private function getId3($str){ 
		if(preg_match("/^TIT2 [^\n]*?\n\s+(.*)$/m",$str,$temp))
			$this->tag['title'] = $temp[1];
		if(preg_match("/^TPE1 [^\n]*?\n\s+(.*)$/m",$str,$temp))
			$this->tag['artist'] = $temp[1];
		if(preg_match("/^TALB [^\n]*?\n\s+(.*)$/m",$str,$temp))
			$this->tag['album'] = $temp[1];
		if(preg_match("/^TYER [^\n]*?\n\s+(.*)$/m",$str,$temp))
			$this->tag['year'] = $temp[1];
		if(preg_match("/^TRCK [^\n]*?\n\s+(\d+)\/.*$/m",$str,$temp))
			$this->tag['track'] = $temp[1];
		return true;
	}
	
	private function getVorbis($str){
		if(preg_match("/^TITLE=([^\n]*)$/m",$str,$temp))
			$this->tag['title'] = $temp[1];
		if(preg_match("/^ARTIST=([^\n]*)$/m",$str,$temp))
			$this->tag['artist'] = $temp[1];
		if(preg_match("/^ALBUM=([^\n]*)$/m",$str,$temp))
			$this->tag['album'] = $temp[1];
		if(preg_match("/^DATE=([^\n]*)$/m",$str,$temp)) 
			$this->tag['year'] = $temp[1]; 
			// as you can see, it's not really the year, but we'll use that name in 
		return true;
	}
	
	// it can be (?? don't remember why i wrote this)
	public function convertToid3v2($arg){ // assumes that's a valid mp3 file with NO id3v2 tags AND id3v1 ones
		if(preg_match("/\.\.\. converted\n/",shell_exec('id3v2 --convert '.$this->file)))
			return true;
		else
			return 'UnknowErr';
	}
	
	// set tags
	public function tag($field,$value,$file,$format='mp3'){ // field ISN'T protected
		$escval = escapeshellarg($value);
		$file = escapeshellarg($file);
		if($format == 'mp3'){ // we tag only in id3v2
			if(preg_match("/^(album|year|artist|comment)$/",$field))
				$opt = $field;
			elseif($field == 'title')
				$opt = 'song';
				
			shell_exec("id3v2 --$opt $escval $file");
		}
	}
}
 
?>


Vous aurez remarqué qu'il n'y a rien pour éditer les tags vorbis (je n'ai que très peu cherché en vérité) et que oui, j'utilise un plugin kisenbon.
Donc le tout s'utilise comme ceci :

$file = 'Natsukawa Rimi - SINGLE COLLECTION Vol.1 (Album)/12 famureuta ( komoriuta ).mp3';
// pour le get
$tagg = new ClassTags;
$tagg->getTags($file);
// et vlan, on peut faire un var_dump($leson) pour constater que l'on a accès à $leson->tag['artist'], etc...

// pour le put
$tagg->tag('title','ふぁむれうた(こもりうた)',$file);
$tagg->tag('artist','夏川りみ',$file);

Vous noterez que id3v1 qui ne supporte pas l'unicode va crier à la mort, tout comme geshi, mais tant pis pour lui, vu que l'on taggue id3v2 aussi.

dimanche 2 avril 2006

Comprendre (la base de la base) des encodages en moins de 5 minutes

Note: le but de ce post n'est ABSOLUMENT PAS le problème des charset/encodages des pages web, c'est juste un exemple, (et ne me parlez surtout pas de <meta />)

Situation initiale

Vous avez enregistré votre page web depuis un éditeur texte "standard", comme gedit, et elle ressemble à ça :

<html>
<head> <title>ma page</title> </head>
<body>
mon site qui va me rapporter du blé !
</body>
</html>

Et vous consultez ça dans un navigateur "standard"...

Lire la suite

samedi 1 avril 2006

Trente ans d'aventure

Logo de Apple Il y a 30 ans de cela, naquit une entreprise qui n'aura de cesse d'inover, et de révolutionner le monde informatique, par ses produits, sa philosophie, ses fondateurs, son histoire...
Pour ma part, je peux affirmer qu'elle a très certainement fait de moi ce que je suis aujourd'hui... cette firme restera toujours gravée quelque part en moi, et en nous, que l'on le veuille ou non, trente ans après, et pour de nombreuses années à venir...

http://www.aventure-apple.com/

Pages: