Utilizar grep recursivamente

¡Hola Amigos!

En alguna ocasión sintieron un profundo deseo de buscar una cadena de texto a través de todos los archivos de un directorio.

Yo se que si.

A continuación, el código que satisface ese deseo:

grep -nHR "cadena a buscar" ./directorio

Fácil, ¿Eh? :P

Un abrazo grande,
Pedro

Devolver el número de fila en una consulta SQL

¡Hola amigos!

Para aquellos que estén buscando lo que promete el título, la consulta es

select @rownum:=@rownum+1 as row, gid FROM games LIMIT 3000

Para los demás, dejo una consulta muy sencilla, que sirve para obtener el lugar que ocuparía una fila en determinada consulta ( es útil para redirigir a un usuario, luego de un evento exitoso, al lugar en el que estaba, en lugar de la página uno. Obteniendo el resultado que nos da esta consulta, y dividiendolo por el número de elementos que mostramos por página, obtendremos el número de página )

SET @rownum = 0;
SELECT row FROM (select @rownum:=@rownum+1 as row, gid FROM games LIMIT 3000) result WHERE result.gid = 3675

:)

Un saludo,
Pedro

Simple XML & serialización (serialization)

¡Hola Amigos!

Encontré en el curso de mis viajes, que los objetos obtenidos con la función simplexml_load_file de php no pueden ser serializados.

Para solucionar eso, encontré esta función de PHP, que va a solucionar sus problemas.

function objectsIntoArray($arrObjData, $arrSkipIndices = array()) {
    $arrData = array();
  
    // if input is object, convert into array
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }
  
    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = objectsIntoArray($value, $arrSkipIndices); // recursive call
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}

Esto puede ser utilizado de la siguiente manera:

$xmlObject = simplexml_load_file("http://twitter.com/statuses/user_timeline/droope123.xml?count=1"); // serializar esto me daría errores de nodo no existente, o algo asi.
$xmlArray = objectsIntoArray($xmlObject);
$serializedXml = serialize($xmlArray);
print_r(unserialize($serializedXml)); // oh, alegría : D 

¡Espero que les sea de utilidad!

Un saludo,
Pedro

Referencia Javascript Completa II

¡Hola Amigos!

Previamente, en mi post La biblia del javascript, publiqué referencias a una web en donde se podían encontrar referencias y conocimientos avanzados sobre arrays, cadenas, integrers, y objetos en javascript, además de los comienzos del ajax.

Hoy, les traigo una referencia completa de el objeto javascript, con todas sus características. No entiendo muy bien que es lo que sería, pero me parece un link que merece la pena guardarse.

El objeto javascript.

¡Espero que les sea de utilidad!

Edit: Encontré algo mas: Starting javascript

Un saludo,
Pedro

Los principios perdidos de el diseño

Estimados lectores:

Escribo para ofrecer un link a un sitio web que nos explica los principios que hemos de seguir para lograr que nuestro diseño web sea agradable a los ojos de nuestros visitantes.

Se listan y ofrecen ejemplos visuales de los siguientes fundamentos básicos:

  • Balance (simetrico, asimetrico, radial)
  • Contraste (grande y pequeño, suave y áspero, grueso y fino, claro y oscuro, orgánico y geométrico)
  • Énfasis y subordinación
  • Fuerzas direccionales
  • Proporción
  • Escala
  • Repetición y ritmo
  • Unidad en la variedad

¡Espero que sea de utilidad! aquí está el enlace.

Saludos,
Droope

La biblia de Javascript

En la página que linkeo mas abajo, nos encontraremos con el sitio web de un Gurú de la programación en Javascript. Encontraremos cosas de interés para nosotros los desarrolladores, como las siguientes:

Normalmente, la mayoría de los artículos nos muestran que la única forma de crear un array en Javascript es la siguiente:

var myArray = new Array(10);

Esto funciona correctamente, pero la realidad es que prácticamente nunca tenemos en mente el tamaño de un array al crearlo.

Por eso recomienda crearla de la siguiente manera:

var myArray = [];

De esta forma, declaramos el elemento como array, sin limitarla en ningún aspecto.

Esta info fue encontrada en este blog (inglés), en donde hay mucha mas información interesante sobre las arrays en Javascript.

Otra curiosidad:

El valor de las arrays se pasa por referencia

Es decir:

var myArray = [ 'zero', 'one', 'two', 'three', 'four', 'five' ];

document.writeln(myArray[1]); // Va a mostrar: one

function passedByReference(refArray) {
   refArray[1] = 'changed';
}

passedByReference(myArray);

document.writeln(myArray[1]); // Va a mostrar: changed

Para evitarlo, vamos a tener que llamar la funcion passedByReference de la siguiente manera:

 
passedByReference(myArray.slice());

Javascript es un lenguaje al que realmente le tengo miedo :\ cosas misteriosas pasan por ahi. No se olviden de visitar el sitio de donde saqué la información. Realmente tiene mucha información respecto a arrays en Javascript. También respecto a objetos, funciones y strings.

Una joya.

¡Saludos!
Pedro

Simplificar ajax en JS puro

¡Hola Amigos!

Encontré este blog, que propone reemplazar nuestra clásica forma de llamar un objeto XMLHttpRequest:

if (window.XMLHttpRequest){ // Firefox, Chrome, ...
    xhrRequest = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
    try {
        xhrRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
        try {
            xhrRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {}
    }
}

Por esta nueva forma:

 
if(!window.XMLHttpRequest) window.XMLHttpRequest = function(){
    return new ActiveXObject("Msxml2.XMLHTTP")
    || new ActiveXObject("Microsoft.XMLHTTP");
};
ajax = new XMLHttpRequest();

Nótese que las primeras cuatro líneas de este código solo tienen que ser escritas una sola vez en todo el script. Dejo a continuación el script que utilizé para comprobar que esto funcionara. Quedé maravillado por la simpleza que adoptó mi código.

<script>
// declaramos nuestro XMLHttpRequest
if(!window.XMLHttpRequest) window.XMLHttpRequest = function(){
    return new ActiveXObject("Msxml2.XMLHTTP")
    || new ActiveXObject("Microsoft.XMLHTTP");
};

var ajax;

// inicializamos un pedido ajax
function ajaxRequest(where) {
	//mucho mas lindo, verdad? : )
	ajax = new XMLHttpRequest();
	ajax.onreadystatechange = ajaxListen;
	ajax.open('get', where, true);
	ajax.send(null);
}

// esta funcion sera llamada a medida que el servidor procesa nuestro pedido
function ajaxListen() {
	if(ajax.readyState === 4)
		alert(ajax.responseText);
}

ajaxRequest("asd.html");
</script>

¡Espero que les sea de utilidad!
Saludos,
Pedro

Nunca reescribir el código desde 0

Muchas veces miramos un código, y lo vemos, ahi parado. Está despeinado, y está vestido lleno de harapos, abandonado, viejo. La primera tentación, cuando estamos trabajando sobre código que no admiramos, es la de decirle al jefe: “Jefe, este código es un asco, realmente un desastre. Observe por que.”

Y ahi comenzamos a evaluar el código de otro programador, sin haber modificado una línea de ese código, y pretendiendo que uno, al desarrollar el arte secreto de la programación, hace todo a la perfección, y siempre va a escribir mejor código que ese que observamos (cosa que podría no ser real a los ojos de otro programador).

Este artículo cita otro artículo que leí hace bastantes años, y que anteayer volví a encontrar. Nos da la opinión de un experto sobre la muerte de netscape.

Comienza así.

26/04/2000, jueves

Netscape 6.0 acaba de sacar al público su primera beta. Su última versión, la versión 4.0, se liberó hace 3 años. Bastante tiempo sin un release, ¿Verdad?

Esa demora causó que su cuota del mercado se desplomara abismalmente, al punto en que hoy la mayoría de los usuarios no lo utiliza mas. No es una decisión muy inteligente.

Bueno, es un poco cruel el hecho de que los critique por hacer eso…Después de todo, no lo hicieron a propósito, ¿O si?

De hecho, eso es exáctamente lo que hicieron, comentiendo el error mas grande que puede cometer una empresa de desarrolo de software.

Decidieron reescribir el código desde 0

Y así nos va explicando, y describiendo detalladamente la muerte de netscape y varias otras companías de software. Es un poco doloroso, asique voy a saltearlo, y voy a dejar la resolución, que merece ser dicha en h3.

Leer código es mas dificil que escribirlo

Somos programadores. Somos, en nuestro corazón, arquitectos, y lo primero que queremos hacer cuando vemos un edificio es tirarlo abajo, y crearlo de nuevo. No nos emociona la mejora contínua, la pintura y el plantado de flores.

Muy recomendable el artículo.

¡Saludos!
Pedro

Drupal: Como descargar nodos (modulo)

Si, drupal.

Drupal es un CMS, como muchos que existen en el mundo, pero con una diferencia: Drupal es una masa, está espectacularmente desarrollado, y es impresionante ver la cantidad de cosas que pueden hacerse sin tocar una sola línea de código.

Por ejemplo, uno podría asignarle una dirección física (ej Callao 297) a un post (nodo), y luego hacer que automáticamente se muestre un Gmap. Obviamente, algo hay que saber, y no es que lee nuestra mente; pero no es para nada complejo.

Otra cosa que uno podrìa, por ejemplo, es, en caso de que quisiera desarrollar una aplicación que mande datos a un servidor y los guarde y muestre, un simple formulario, hacerlo en una hora y media. Y no me refiero a un form sin estilo, sinó a una aplicación completa con paginado, control de usuarios, upload de múltiples imágenes y muchos chiches mas, como caching, image-resizing, y mas.
Continue reading