Christian KAKESA

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

vendredi 28 septembre 2007

E-Texteditor

Site officiel : E-texteditor

Suite au billet d'un ami (E-texteditor - Un ersatz de Textmate pour Windows) sur cet éditeur de texte qui a pour but d'être un fork de l'éditeur ultra puissant Textmate uniquement disponible sur MacOSX. J'ai décidé de le tester et voir un peu ce que donne E (E-texteditor)...

Screenshot E-texteditor

J'ai été agréablement surpris par sa simplicité et son intuitivité. Les fonctionnalités les plus courantes sont présentes :

  • Mode colonne
  • Select/Replace multiple !!!
  • Fin de ligne Linux, Mac, windows
  • Encodage des fichiers : utf-x, iso etc...
  • etc, etc...

La liste est donc déjà assez longue, je vous conseille de regarder le petit screencast sur le site de l'éditeur : E.
Beaucoup de fonctionnalités sont à venir même si il en implémente déjà pas mal...

Pour ma part j'ai choisit d'installer le cygwin à l'installation. Donc je n'ai eu aucun problème de performances. Je pense que l'éditeur est pas mal mais doit encore implémenter beaucoup de fonctionnalités...
Le gros point faible de E c'est qu'il n'y a pas de version linux, mac ou même bsd !!! Bref pour le moment je ne peux pas acheter cet outils car encore trop jeune ; mais qui sait peut-être d'ici quelques mois.

mardi 25 septembre 2007

Installer des plugins dotclear 1.2.7 sans "allow_url_fopen"

J'héberge actuellement mon blog sur une une plateforme ne permettant pas l'utilisation de "fopen" avec une url distante, J'ai voulu me lancer dans l'écriture d'une alternative utilisant un client http (curl) ou les sockets, j'ai assez vite trouvé une fonction permettantde récupérer des données en http.
Pour faire simple voici la manip à suivre :
  • Editer le fichier à la racine de dotclear "inc/libs/lib.files.php"
  • Trouver la ligne
    # Copier d'un fichier binaire distant
    function copyRemote($src,$dest)

    Chez moi la ligne 157
  • Supprimer cette fonction. Pour les développeurs modifier la fonction. ajouter les deux suivantes
  • Inserer ces deux fonctions juste en dessous comme ci-après
        # Copier d'un fichier binaire distant
	function copyRemote($src,$dest)
	{
		if (($fp1 = @fopen($src,'r')) === false)
		{
			//return __('An error occured while downloading the file.');
			files::copyRemote2($src,$dest);
		}
		else
		{
			if (($fp2 = @fopen($dest,'w')) === false)
			{
				fclose($fp1);
				return __('An error occured while writing the file.');
			}
			else
			{
				while (($buffer = fgetc($fp1)) !== false) {
					fwrite($fp2,$buffer);
				}
				fclose($fp1);
				fclose($fp2);
				return true;
			}
		}
	}

	function copyRemote2($src,$dest)
	{
		$buffer = files::httpGet($src);
		if (($fp = @fopen($dest,'w')) === false)
		{
			return __('An error occured while writing the file.');
		}
		else
		{
			fwrite($fp, $buffer);
			fclose($fp);
			return true;
		}
	}
	
	function httpGet($url)
	{
		$url_stuff = parse_url($url);
		$port = isset($url_stuff['port']) ? $url_stuff['port'] : 80;
		
		$fp = fsockopen($url_stuff['host'], $port);
		
		$query  = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
		$query .= 'Host: ' . $url_stuff['host'];
		$query .= "\n\n";
		
		fwrite($fp, $query);
		
		while ($tmp = fread($fp, 1024))
		{
			$buffer .= $tmp;
		}
		
		preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
		if (!($parts[1] > 0))
			return __('An error occured while downloading the file.');

		return substr($buffer, - $parts[1]);
	}

Avec ceci je peux installer un plugins via l'installeur sans problème.
Si vous rencontrez des soucis n'hésitez pas à émettre vos commentaires sur ce billet.