Plugin iManage - Imágenes en tu editor HTML online

Escrito el 14/February/2008 por juan_belon

iManage es un plugin para insertar imágenes en los editores HTML [con AJAX] de formularios web, en mi caso uso tinyMCE.

Puedes descargar el fichero traducido al español por mi aquí.

Último artículo del año: Componentes imprescindibles del desarrollador web

Escrito el 31/December/2007 por juan_belon

No puede faltar un artículo en el último día del año ,¿no?!, además es Navidad jeje

Tampoco puede faltar en los módulos del Firefox de todo desarrollador Firebug e YSlow!

Gracias a éste último, combinado con Firebug podemos analizar la fuente de las esperas más largas por carga en nuestra web,es necesario para saber cómo mejorar nuestras prácticas de programación y escritura de aplicaciones para el marco de internet.

Los consejos de YSlow son buenos consejeros y nos enseñan como construir etags,hacer cacheable ajax,…y en general nos dan unas sencillas reglas para hacer que las cargas sean más rápidas, usar ficheros comprimidos con gzip, evitar las expresiones dentro de CSS,etc.

Todo un regalo de Reyes Majos para esta entrada del 2oo8!

Salu2 y cuidaros!

Cuando ya estamos en el caos!

Escrito el 13/December/2007 por pabloko

Hola a todos, hace unas semanas presté a un amigo una carpeta en un servidor mio para que se hiciera sus paranoyas y eso. Incauto, la ha liado y ha dejado acceso libre a una serie de asquerosos defacers que han poblado todo el servidor de basura, concretamente archivos de NetShell y cosas asi de molestas, ya os imaginas claves al aire libre, el servidor smtp saturado enviando spam, de todo un poco.

Lo mas molesto era un iframe que generaba en todas las paginas, y que producia miles de errores y desvios de tráfico.

Es un servidor grande, con aproximadamente 3 o 4 gigas de datos nada mas que de archivos html y php, con clientes gordos que tuvieron bastantes problemas.

Rapidamente desactive toda posibilidad de acceso SHELL, cambien passwords y elimine todos los archivos del defacing, pero los putos iframes quedaron ayi

Sé que con PERL con una sola linea de texto (perl -pi -e ‘s/sustituir/sustituido/g' *) se puede hacer todo eso, pero como soy masoka, he elaborado todo este php para hacerlo ;)

";
$sustituto="";
function extension($archivo){
$posicion = strrpos($archivo,'.')+1;
$extension = substr($archivo,$posicion);
return $extension;
}
function listar_directorios_ruta($ruta){
if (is_dir($ruta)) {
if ($dh = opendir($ruta)) {
while (($file = readdir($dh)) !== false) {
if ($file=="." or $file=="..") {} else {
$EXT=extension( $ruta. $file);
if ($EXT=="html" or $EXT=="htm" or $EXT=="php" or $EXT=="php3" or $EXT=="php4" or $EXT=="txt") {
$readed=file_get_contents($ruta.$file);
$pos=strpos($readed,$sustituir);
if ($pos!="") {$basura="SE HA ENCONTRADO BASURA";
$contenido=str_replace($sustituir,$sustituto,$readed);
if (is_writable($ruta.$file)) {
if (!$gestor = fopen($ruta.$file, ‘w')) {
echo "NO SE ABRE";
exit;
}
if (fwrite($gestor, $contenido) === FALSE) {
echo "NO SE ESCRIBE";
exit;
}
echo "WEA ARREGLADO SII";
fclose($gestor);
} else {
echo "NO ES ESCRIBIBLE";
}
} else {$basura="";}
echo "
Nombre de archivo: $ruta$file : Es un: " . extension( $ruta. $file).$basura; }}
if (is_dir($ruta . $file) && $file!="." && $file!=".."){
listar_directorios_ruta($ruta . $file . "/");
}
}
closedir($dh);
}
}else
echo "
No es ruta valida";
}
listar_directorios_ruta("./");
?>

No os preocupeis, porque ami de una sola pasada me ha hecho los 4 gigas de datos, pero si veis que no, pasadlo tantas veces como sea necesario.

Lo bueno es que incluye un debug para ver cuales estabamn infectados y si se ha solucionado o no

Me ha dado tanto placer terminarlo que lo he decidido publicar por aqui

Saludossss

Optimizando el uso de Arrays (Matrices o Vectores)

Escrito el 12/November/2007 por juan_belon

Escribir programas en PHP es muy fácil, porque su sintáxis es muy simple y efectiva. Sin embargo debemos saber ciertos conceptos básicos para escribir programas eficientes, si vas a tener un sitio con mucho tráficos, ésto se convierte en algo realmente importante, ya que esas pequeñas optimizaciones de código en cuanto a eficiencia hacen que no se sobrecarge el servidor atendiendo todas las peticiones de los clientes.

Evitar arrays de arrays ( multidimensionales )

Un array (matriz o vector) es una estructura de datos consistente en un grupo de elementos que son accedidos por una llave o índice. En la mayoría de lenguajes de programación el indice de un array es un número,pero en PHP la llave puede ser cualquier cosa ( string, integers, floats), eso es porque PHP hace un hash con el índice, gracias a esta característica podemos desarrollar programas más flexibles.

Aunque ésto puede tener un efecto negativo si usamos un “array de array”. Ejemplo:

<?php
for($i=0; $i < 60000; $i++)
	$f[a][b][$i] = $i;
?>

Aunque a veces es necesario usar arrays multidimensionales “array de array” para hacer el código más simple y corto.

<?php
$b = &$f[a][b]; //dirección de memoria del array de array
for($i=0; $i < 60000; $i++)
	$b[$i] = $i; //Recorrer ahora el array,además de ser mas simple,
	// es más rápido en tiempo de ejecución porque se ahorra haces 3 hash
	// en cada iteración del bucle for
?>

No usar constantes sin declarar como llaves de un array

PHP procesa en $f[a] ,”a” como una constanste y si “a” no es una constante de PHP ni declarada por el usuario entonces la procesará como ‘a' quedando como $f[’a'], además es mucho más ineficiente por tener que buscar en la tabla de constantes…

Mal hecho:

<?php
inicio_contador_tiempo();
for($i=0; $i < 60000; $i++)
	$f[a] = $i;
print _fin_contador_tiempo(Tiempo de ejecución: );
?>
Tiempo de ejecución: 0.23406291008 segundos

Bien hecho:

<?php
inicio_contador_tiempo();
for($i=0; $i < 60000; $i++)
	$f[a] = $i;
print _fin_contador_tiempo(Tiempo de ejecución: );
?>
Tiempo de ejecución: 0.0413820743561 segundos

Podemos comprobar que la diferencia en tiempo de ejecución es muy grande, el segundo script se ejecuta al menos 6 veces más rápido que el primero, y la única diferencia es el no haber utilizado comillas (dobles o simples,es lo mismo).

No usar llamadas funciones DENTRO de las condiciones de un bucle

Intentar sacar todas las llamadas como "count()" fuera de una condición de un bucle,para que no se ejecute cada iteración, Ejemplo:

Mal hecho:

<?php
$array= range( 1, 10000);
inicio_contador_tiempo();
for($i=0; $i < count($array); $i++)
	;
print _fin_contador_tiempo(Tiempo de ejecución: );
?>
Tiempo de ejecución: 0.0144419670105 segundos
Bien hecho:
<?php
$array= range( 1, 10000);
inicio_contador_tiempo();
$b = count($array);
for($i=0; $i < $b; $i++)
	;
print _fin_contador_tiempo(Tiempo de ejecución: );
?>
Tiempo de ejecución: 0.00201916694641 segundos
Otra opción aunque gasta recursos de memoria:
<?php
$array= range( 1, 10000);
inicio_contador_tiempo();
foreach($array as $k => $v);
	;
print _fin_contador_tiempo(Tiempo de ejecución: );
?>
Tiempo de ejecución: 0.00279021263123 segundos

Podemos comprobar que el primer script tiene un rendimiento peor porque cada iteración llama a count() de la longitud del array. En el segundo se salva en $b, el la solución más rápida porque normalmente un array no cambia de tamaño durante el bucle… El tercer script está a medias entre los dos anteriores en cuanto a tiempo de ejecución pero consume más memoria,sin embargo si el array no tiene índices numéricos es una buena opción para iterarlos.

Seguro que quedan muchas cosas en el tintero de los arrays…

Quien da más ,aporta tu granito de code-arena XD

* Las funciones usadas:

<?php
function inicio_contador_tiempo() {
	global $t;
	$t = time() + (float)microtime();
}

function _fin_contador_tiempo($s) {
	global $t;
	$e = time() + (float)microtime();
	return $s.($e-$t). segundos<br/>;
}

?>

Mención al que escribió el artículo original y me recordó recordar estas cosas tan importantes al resto de programadores de la comunidad para que luego no nos encontremos basuras sino programas elegantes,funcionales y sencillos de entender :) [ http://cesarodas.com/2007/09/php-optimizing-the-use-of-arrays.html ]

Salu2 ó 3 jeje

Truco para renombrar varios ficheros

Escrito el 04/October/2007 por juan_belon

Éste truco es útil cuando tenemos muchos ficheros con un patrón, por ejemplo, imágenes en un idioma, que empiezan por es_[nombre_imagen].[extensión], para renombrarlos a otro idioma, por ejemplo: en_[nombre_imagen].[extensión]…y para hacerlo utilizaremos una expresión regular super simple.:D
Para renombralos todos de golpe en una sóla instrucción simplemente hacemos la llamada:


<?php
rename
(‘y/es_/en_/',"*");

?>


o bien podemos hacer uso del comando de GNU/Linux con la instrucción adecuada para ello:


<?php
chdir
(RUTA_COMPLETA_AL_DIRECTORIO_DE_LOS_FICHEROS);
shell_exec("rename 'y/es_/en_/' * ");

?>


Así que podemos crearnos una función simple para renombrar ficheros masivamente, que quedaría tal que así:


<?php
function renombra_ficheros($original,$cambio){
return 
rename‘y/'.$original.‘/'.$cambio.‘/',"*");
}

?>


Si alguien tiene otra idea, simplemente la comenta XD

Truco para instalar componentes de Joomla con SAFE_MODE activado

Escrito el 19/September/2007 por juan_belon

Truco para instalar componentes de Joomla en servidores con SAFE_MODE activado:

  1. Descomprimir en una carpeta local el fichero del módulo,mambot, o lo que sea…
  2. Eliminar todos los FICHEROS ,y sólo los FICHEROS de todos los directorios del componente,módulo,etc.
  3. Subir éste directorio local a un directorio del servidor y darle permisos 777 a todos los directorios incluido el del mismo componente,módulo o lo que sea…
  4. Ir a la administración -> Instaladores-> ….. y poner la ruta completa en " Instalar desde un directorio" : por ejemplo "/var/www/web/joomla/media/nombre_componente";
    pinchar en "Instalar"…
  5. ¡La instalación ha de funcionar correctamente!. Ahora vamos a abrir el fichero nombre_modulo.XML y veremos donde tenemos que colocar los ficheros, normalmente, suele haber un fichero nombre_modulo.php y nombre_modulo.xml para guardar en el directorio correspondiente a esa parte de Joomla; i.e., si es un editor, en /mambots/editors , si es un componente se suele dividir en varios, /components/com_nombre_componente y /administrator/componentes/com_nombre_componente, etc.
    Para copialos primero hemos de borrar TODOS LOS FICHEROS que se copiaron desde el programa de instalación de Joomla ya que tendrán el usuario asignado de Apache, (que tiene otro nivel de acceso y no podremos utilizar) es por ésto que los borramos para copiarlos por FTP y asi recibir los permisos de éste usuario.
  6. El punto anterior se resume en ir a los directorios donde están los ficheros y borrarlos para volver a subirlos, de forma que el usuario pasa a ser el del FTP y así podemos tener permiso de ejecución y solucionamos el problema de la restricción SAFE_MODE de una forma un tanto chapucera pero totalmente útil y rápida.
  7. Comprobar que todo ha ido correctamente,recordar establecer los permisos de lectura y ejecución…en caso de error repetir pasos desde el 3.

Manual de safe_mode

CodeIgniter traducido al Español [ 1.5.3 ]

Escrito el 05/June/2007 por juan_belon

Hola, he traducido el CodeIgniter al español ,versión 1.5.3, espero que lo utilicéis mucho!!

descargar  spanish__1.5.3.zip

Depurando JavaScript con Firebug para Firefox

Escrito el 04/June/2007 por juan_belon

Ésta es una presentación que hice para la asignatura Traductores de Ingeniería Informática de Sistemas para presentar en clase, espero que os guste, el Powerpoint aquí XD
[ Diapositiva #1 | Diapositiva #2 | Diapositiva #3 | Diapositiva #4 | Diapositiva #5 | Diapositiva #6 | Diapositiva #7 | Diapositiva #8 | Diapositiva #9 | Diapositiva #10 | Diapositiva #11 | Diapositiva #12 | Diapositiva #13 | Diapositiva #14 | Diapositiva #15 | Diapositiva #16 | Diapositiva #17 | Diapositiva #18 | Diapositiva #19 | Diapositiva #20 | Diapositiva #21 | Diapositiva #22 | Diapositiva #23 | Diapositiva #24 | Diapositiva #25 | Diapositiva #26 | Diapositiva #27 | Diapositiva #28 | Diapositiva #29 | Diapositiva #30 | Diapositiva #31 | Diapositiva #32 | Diapositiva #33 | Diapositiva #34 ]
Saludations!

Eliminar la espera de Megaupload

Escrito el 17/February/2007 por juan_belon

Seguramente ya estareis usando las descargas de la web http://www.megaupload.com ,y también ,seguramente no os gustará esperar mucho  a que  termine la cuenta atrás para  comenzar la descarga….pues bien,aquí tenéis un  truco para hacer que la espera se reduzca  bastante, sólo tendréis que disponer de la extensión de Firefox llamada  FireBug …

Leer el resto del artículo »