About me

asdfasdf aasdf Read more about me »

Keep in touch

RSS Feed Twitter Facebook Delicious

Subscribe via Email

getKeyAsc obtener el valor de un indice en un Arra...

July 27th, 2010 by PakoS received No Comments »

Aquí les dejo una pequeña función que se me ocurio formar a partir de un twitt del buen @danielniquet quien buscaba una forma de recuperar un elemento de un array asociativo sin que afectara el case sensitive de PHP, de forma nativa al parecer PHP no cuenta con una función que haga esto ya que digamos por “políticas” de php los keys de los arreglos asociativos son evaluados con case sensitive, por lo tal si en un array tengo el key “Mensaje” y trato de recuperar con $arr['mensaje'] no me retornara el valor ya que tiene que ser escrito el key exactamente igual $arr['Mensaje'], getKeyAsc en base solo hace posible recuperar el valor de un key sin que nos afecte esto, cabe destacar que lo que se hace es buscar comparando los key y en cuanto se encuentre el primer key que pasado a minúsculas sea igual al segundo parámetro que seria el key buscado de igual se pasa a minúscula cuando sean iguales se retorna el valor esto puede generar un error si tenemos los indices “mensaje” y “Mensaje” la función retornaría el primero que encontrara.

/*
FcoDiaz
www.devtics.com.mx
27/jul/2010
*/
function getKeyAsc($arr,$strIndex,$caseSesitive=false){
	if($caseSesitive)return $arr[$strIndex];
	foreach($arr as $i => $v)
	   if(strtolower($i)==strtolower($strIndex))return $v;
        return null;
}

Ejemplos

$arr=array("frutA"=>"naraja","noMbre"=>"pako","musiC"=>"rock");
echo "->{$arr["music"]}\n";
echo "->{$arr["FRUTa"]}\n";
echo "->{$arr["frutA"]}\n";
echo "->".getKeyAsc($arr,"music")."\n";
echo "->".getKeyAsc($arr,"FRUTa")."\n";

Out:

->
->
->naraja
->rock
->naraja

Cambiar Wallpaper de GNOME con PHP-CLI Automaticam...

July 25th, 2010 by PakoS received No Comments »

Buscando un comando para cambiar el wallpaper desde la consola en linux, se me ocurrió hacer un deamon para que este se cambiara automáticamente, así llegue a este pequeño script en PHP que cambia el papel tapiz en un determinado tiempo tomando las imágenes aleatoriamente de una carpeta

Quien en realidad hace la magia es el comando gconftool-2, el cual nos permite manipular el gconf-editor que seria como “el regedit” de gnome desde donde se pueden manipular diferentes aspectos del entorno Gnome

Yo he utilizando Ubuntu10.4 y PHP5.3 con CLI y me ha funcionado de maravilla espero a ustedes les funcione.


Para cambiar el papel tapiz de linux con gnome desde la linea de comando debemos de editar la variable /desktop/gnome/background/picture_filename del gconf-editor a la cual se le asignará la ruta a la imagen que queremos de papel tapiz. Para hacerlo desde consola como lo comente nos valemos de comando gconftool-2 para ello ejecutamos el siguiente comando:


gconftool-2 -t str -s /desktop/gnome/background/picture_filename /home/usuario/wallpaper.jpg

Ahora en PHP, podemos ejecutar comandos del S.O con las funciones system, exec, passthru o shell_exec, en el script utilizo exec, en algunos servidores de hosting por seguridad estas funciones las deshabilitan :( , pero por lo pronto esto no nos afecta ya que se supone este script correrá en nuestro Desktop y no en un servidor.

En PHP podemos crear deamons que se ejecuten como procesos independientes, entonces uniendo todo esto podemos crear un script que este corriendo en segundo plano y en determinado tiempo nos cambie el papel tapiz :)

Download Script phpcwall.php

#!/usr/bin/php
<?php
/*
 * Fco Diaz
 * www.devtics.com.mx
 * Twitter: @fcodiaz
 * 25/jul/2010
 */
$segundos = 5*60;//segundos a esperar antes de cambiar al siguiente wallpaper
$path = "/home/pakos/Pictures/wallpapers";//path de las imagenes

$pid = pcntl_fork();//se crea el pid de proceso
if($pid == -1)die("El Deamons no arranco");
if($pid) die("PID=$pid\n");//salgo del padre y muestro su pid
posix_setsid();//con esto suelto la terminal para q el proceso quede independiente
$ultimoWall = false;
while( true ){//se cicla el proceso para q nunca termine
    $files = array();//inicializo el arreglo $files
    exec("ls $path/*.jpg",$files);//busco los .jpg en el $path indicado
    do{
        $newWall = $files[rand(0,count($files)-1)];
    }while($newWall == $ultimoWall);//si es el utimo wall cambio por otro
    $ultimoWall = $newWall;//el nuevo a la vuelta siguiete sera el ultimo wall
    exec("gconftool-2 -t str -s /desktop/gnome/background/picture_filename \"{$newWall}\"");//coloco el papel tapiz
    exec("gconftool-2 -t str -s /desktop/gnome/background/picture_options zoom");//le digo a gnome que haga un zoom a la wallpaper si no se ajusta en la resolución
    sleep($segundos);//se duerme el proceso por el tiempo indicado
}

ahora para arrancar nuestro deamons, tenemos que darle permisos de ejecución


chmod +x phpcwall.php

para ejecutarlo vasta con ejecutar

./phpcwall.php

pero el fin de un deamon es que no tengamos que inicializarlo nosotros, para ello podemos agregarlo al grupo de aplicaciones que se ejecutan al iniciar nuestra sesión para ello vamos a Sistema/Preferencias/Aplicaciones al Inicio

y agregamos nuestro script a la lista de aplicaciones

Con esto cada que iniciemos nuestro escritorio se arrancara este script y cambiara nuestro papel tapiz en el tiempo indicado en el script

¿Donde esta ifconfig en CentOS?

June 9th, 2010 by PakoS received No Comments »

Hoy estoy haciendo algunos experimentos bajo la distro de Linux CentOS, un comando muy requerido en el ambiente Linux es el ifconfig, que no es otro que el equivalente a ipconfig para aquellos que son windowseros xP, este comando nos da información acerca de nuestra configuración de red, pues bien al teclear el comando me lleve gran sorpresa al ver que no encontraba el comando, he usado varias distros base debían y siempre me había funcionado, inmediatamente googlie y encontré que ifconfig en CentOS esta en:

/sbin/ifconfig

Ok ya sé donde está!… pero no está disponible como comando, siempre hay que teclear toda la ruta, una solución para tener disponible el comando desde cualquier parte de Shell es crear un enlace simbólico a ifconfig en /usr/bin/, para ello tendremos que ser root, una vez logeado o “convertido” como root tecleamos


ln –s /sbin/ifconfig /usr/bin/ifconfig

Con ello ya tendremos ifconfig disponible en cualquier parte de nuestro shell =)

Google el patrocinador de JavaScript

May 23rd, 2010 by PakoS received 1 Comment »

En algunos foros y aquí no he dejado de dejar plasmado mi gusto y pasión por el lenguaje de scripting JavaScript(JS), Google siguiendo su tradición de conmemorar los eventos históricos importantes alguno que otro homenaje a personajes, programas, inventos, científicos. etc.. etc.. etc… el pasado Viernes 21 Google sorprendido a varios incluyéndome al cambiar un poco la dinámica de sus logos en esta ocasión google coloca una imagen conmemorando el 30 aniversario del uno de los grandes clásicos de los videojuegos pacman, pero esta imagen tiene algo en particular, es una imagen que atreves de la técnica de sprite y un excelente trabajo en javascript logran un mini-juego de pacman.. Basado solamente en CSS/Javascript/DOM, algo que para muchos resulta increíble, hubo quien al ver, casi afirmo que se trataba de HTML5-Canvas, pero no, es un par de png’s y un rutinario JS que bien pudimos haber programado hace 10 o 12 años… incluso tuve una pequeña discusión por el origen de ese script ya que incluso hay quien asegura que se pudo haber utilizado GWT pero la verdad lo dudo por que el código pese a estar compactado para producción al pasarlo por una herramienta para reordenarlo queda muy limpio y entendible algo imposible para un código generado por GWT.

Tengo tiempo queriendo escribir algo que me molesta un poco de los programadores actuales más aun, de los que migran de la programación tradicional a la web, en lo personal inicie con a programar en C/C++ en mis clases de bachiller, por gusto incursione en la programación web, en aquel entonces 2001, la Web aun no dejaba de ser un periódico mural donde solo se mostraba información y muy pocas páginas iniciaban a tener comunicación en dos vías(un librito de visitas), que el usuario subiera información al web, tenían poco tiempo los web mails, poco se sabía de paginas conectadas a bases de datos y mucho menos se sabía de la existencia de técnicas como AJAX aunque se podía lograr algo muy parecido, en IE ya existía XHR!, en ese tiempo conocí un poco de Javascript y algo de PHP, vi como podían interactuar y lograr verdaderos sitios muy ricos y que a la larga se convertían en sistemas de información y ya no solo una revista, que podía atreves de una web alimentar una DB, en el servidor procesar esa información y atreves de la web manipularla y consultarla. Lo que se venía haciendo en los sistemas de escritorio tradicionales y afortunadamente evite la tentación de aprender e invertir mi tiempo en aprender Java por aprender y perfeccionar HTML/CSS/JavaScript/PHP/MySQL, creo que fue una buena elación hoy Java sigue siendo muy potente pero incluso al llegar al Java EE terminas haciendo lo que se hace en PHP claro con algunas mejoras en los procesos del lado servidor pero al final caemos a lo mismo y creo la tendencia hoy día esta mas que clara.

Creo que Google a creado una Joya de la programación en JS, es una muestra de su potencial, creo que es una lástima y es algo que me llega a molestar es que pocos programadores crean en este lenguaje y su falta de interés por invertir en aprender este lenguaje, hoy veo incluso que en foros se hablar más de librerías como jQuery que también es joyas del JS, pero le quitan el crédito principal a JS incluso muchos novatos y no tan novatos creen que al programar un Script JS que use jQuery están programando en algo distinto a JS, algo que para mí me parece lamentable, el uso del término AJAX para el manejo general del objeto XHR es otra cosa que me parece lamentable y no deja de molestar ya que se le quita el crédito al lenguaje muchos creen que AJAX es otra cosa e incluso le llaman “tecnología” pero no todo esto no es más que simple y sencillo JS común y corriente y aun así hay quien sigue creyendo que es un lenguaje débil al cual no hay que invertir mucho tiempo en aprender, o siguen anteponiendo el adjetivo “dificil “ y buscan atajos para no aprender.. Llámense frameworks(ZK, GWT, XAJAX) o librerías como jQuery

Google ha sido el Gran patrocinador de JavaScript no solo con la creación de este juego conmemorativo, si no porque prácticamente todas sus app’s están basadas en este lenguaje en el lado cliente he allí su Gmail o sus Google Docs o su potente y tan incomprendido Google Wave todas ellas aplicaciones RIA basadas en JS. Este post no es más que una invitación a los programadores a invertir un poco de tiempo en aprender JavaScript fuera de librerías esto al final le ayudara incluso a comprender y explotar mejor librerías tipo jQuery incluso crear grandes aplicaciones con solo JS/HTML/CSS,JS se puede orientar a objetos aunque con algunas diferencias que notaran ya que JS no usa clase en su modelo de OOP lo cual afecta directamente al paradigma de herencia que solemos utilizar en lenguajes como Java es algo importante mencionar que es otro paradigma de OOP al cual le llaman OOP basado en Prototipos contario al de Java y otros que son basados a Clases, prometo crear algunos contenidos de JS Orientado a Objetos, bueno sin mas solo les invito a conocer este gran lenguaje muy desvalorado el cual a pesar de los años se sigue creyendo que es para trivialidades como la validación de un form.

Bueno recomendaciones, antes de entrar a JS, estudia HTML/CSS son indispensables, para JS hay muchos tutoriales por desgracia algo anticuados en cuanto a técnicas de calidad, utiliza cualquiera de tantos, posterior investiga algo de “JavaScript no obstructivo” y finaliza con DOM y OOP en Javascript, al final puedes apoyarte de librerías como jQuery, prototype o mooltools para hacer un poco más eficiente tu trabajo.
Suerte y en verdad no es pérdida de tiempo invertir en aprender JavaScript