viernes, 19 de febrero de 2010

Coleccion de efectos AJAX

AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Éstas se ejecutan en el cliente, es decir, en el navegador de los usuarios y mantiene comunicación asíncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre la misma página sin necesidad de recargarla. Esto significa aumentar la interactividad, velocidad y usabilidad en la misma. AJAX es una combinación de cuatro tecnologías ya existentes, XHTML y CSS, DOM, el objeto XMLHttpRequest y XML.
Bueno la anterior definición era la teoría del AJAX, ahora viene la parte bonita…la practica.

1) GreyBox

greybox.jpgGreyBox te permitirá lanzar páginas webs que serán cargadas en una ventana de tipo popup.
Pero sin que programas de tipo anti-popup las puedan bloquear.
Con esto evitarás que el usuario pueda perder la web de referencia de la que procede, ya que no le aparece un cuadro de url, limitando de cierta forma la navegación fuera de nuestro sitio.



2) Instant.js

instant_js1.jpg
Con instant.js lograrás darle a las imágenes de tu sitio un bonito efecto de foto sacada con una polaroid. Añadiendo un bonito borde blanco a cada una de las imágenes.
La funcionalidad de un sitio nunca tiene que estar debajo del diseño de esta, pero sin duda alguna, pero mejorar el aspecto de una web siempre ayudará a hacer más agradable tu sitio.



3) mooTable

mootables1.jpgCon este recurso ajax, podrás hacer que tus tablas se puedan reordenar sin tener que recargar la página completa, con el consiguiente ahorro de carga para el servidor, y el beneficio añadido de no hacer esperar al usuario. La ordenación se realiza realiza vía DOM.
No lo he probado, pero si trata de forma correcta los distintos formatos de monedas, será una aplicación a tener muy en cuenta.



4) FancyForm

fancy_forms.jpgCon FancyForm conseguiremos darle algo más de vida a nuestros formularios y hacerlos bastante más atractivos.
Integrarlo será bastante sencillo, sólo tendremos que agregar el fichero javascript y añadir una etiqueta de clase a los elementos que queremos que se vean modificados.



5) Image menu

phatfusion_image_menu.jpg Con este efecto ajax podremos tener un menu en el que aparezcan imágenes, lo que le dará mucha vistosidad al sitio.
Saludos desde lo más profundo de los bytes.




6) AmberJack: Site Tour Creator

Aquí tenemos una biblioteca JavaScript de poco peso pero gran utilidad, ya que le permite pequeña caja de descripción en cada página.
amberjac_site_tour_creatopr.jpg
Esto permite a los usuarios hacer un recorrido de las distintas secciones de un sitio web, sin que tengan que ver una demo en flash o similar. Como extra, tenemos la posibilidad de poder descargar diferentes pieles (skins) o bien crear nuestras propias pieles (con pieles me refiero al aspecto exterior), para que coincida con el aspecto de nuestra página web. Aquí está la galería de skins por lo que puedes ver si tienen un tema que le vaya bien a tu sitio web o bien puedes usarlo para tener ideas de como hacer tu propio skin.



7) ImageFlow

Inspirado en el “coverflow” del iPod (la forma que tiene el iPod de mostrar las carátulas de los discos), ImageFlow nos muestra una colección de imágenes que el usuario puede desplazarse usando una barra de desplazamiento situada en la parte inferior del conjunto de imágenes. Cuando el usuario hace clic sobre una imagen, se dirige a otra página web con la imagen mostrada.
imageflow_0_8.jpg



8) ShadowBox.js Media viewer

ShadowBox es un magnifico visor de medios, y ¿a qué me refiero con esto? Pués a que ShadowBox nos ofrece un soporte para mostrar archivos de varios tipos, además de imágenes, podemos poner en él vídeos flash, vídeos de youtube incrustados, y las páginas web. Lo que hace que valga la pena probar y jugar con este script.
shadowbo_js.jpg



9) TJPzoom 3

TJPzoom le permite hacer zoom sobre determinadas secciones de una imagen de alta resolución. Manteniendo presionado el botón del ratón y arrastrando hacia arriba o hacia abajo, puede aumentar o disminuir el zoom de la imagen, vamos es una lupa.
tjpzoom_3_image_magnifier.jpg



10) mootools Tips

Mootools Tips es parte de la mootools, alguna de las herramientas de esta biblioteca ya han sido comentadas antes. Este marco nos permite ofrecer consejos para el usuario, cuando el usuario pase el ratón sobre un enlace o una imagen, le aparecerá información adicional sobre el elemento.
mootools_tips.jpg
Algunas de las opciones que se pueden ajustar son los estilos CSS, la velocidad de transición….
Requiere la biblioteca javascripts mootools.

Mobile World Congress

El Mobile World Congress arrancó hoy en la ciudad de Barcelona y uno de los primeros modelos que fueron presentados en esta feria fue el Sony Ericsson Vivaz pro, un terminal orientado al uso multimedia ya que entre sus principales características está la grabación de vídeos a 720p, además de que cuenta con una pantalla táctil que promete la mejor experiencia para el usuario en cuanto a mensajes y entretenimiento.
Sony Ericsson Vivaz™ pro
Como indican en Sony Ericsson, el teléfono permitirá que los usuarios produzcan y transmitan sus vídeos en HD.

Cuenta con una plataforma abierta con la que podrás personalizar todo tu entretenimiento al descargar una gran variedad de aplicaciones a través de PlayNow™ y de la Comunidad de Desarrollo de Symbian ya que éste será el sistema operativo que integrará el teléfono.
Un poco sobre el funcionamiento del terminal Sony Ericsson Vivaz Pro:


Otras carcaterísticas del Sony Ericsson Vivaz Pro es un teclado QWERTY completo y una bonita pantalla de 3.2 pulgadas en formato 16:9 WVGA (800×480 pixeles). El diseño del teléfono es el llamado “curvatura humana” que pretende asemejar la forma del cuerpo humano, una característica que será constante de aquí en adelante en los próximos modelos que Sony Ericsson lance con el fin de que se reconozca la marca de manera inmediata.

Nueva tarjeta gráfica ASUS MATRIX EAH5870 de 2 GB

Asus ya está preparando nuevos lanzamientos para equipos de gamers. Uno de éstos es la nueva tarjeta gráfica Asus Matrix EAH5670 que promete ser la más rápida del mercado y que está basada en la gráfica Radeon HD 5870, la que actualmente es la más rápida de las que poseen un sólo núcleo.
ASUS MATRIX EAH5870 de 2 GB
Este modelo Matrix será comercializado por Asustek  y como habrás imaginado, forma parte de la serie de productos especializados en equipos para gamers Republic of Gamers.

En TechPowerUp indican que la tarjeta gráfica Asus Matrix EAH5870 incluirá materiales de alto nivel  y el mejor tipo de refrigeración y reguladores de voltaje que existen. Dichos reguladores permitirán una gran capacidad de overlocking para subir de vueltas los niveles originales de 900 MHz del núcleo y los 1.225 MHz de la memoria. Y es que la memoria es del doble de la capacidad estándar ya que incluye 2 GB de memoria  dedicada.

 ASUS MATRIX EAH5870 de 2 GB
Hay que señalar que el diseño original de esta tarjeta gráfica incluye salidas DVI-D, HDMI y de Display Port por lo que se necesitarán dos conectores de ocho pines PCI-Express para alimentar de energía a la gráfica. Incluye también una herramienta software de control de voltaje con la opción “modo seguro” que regulará automáticamente los distintos parámetros del overlocking.

Aún no hay fecha de lanzamiento ni precio pero es seguro que no será barata.

jueves, 18 de febrero de 2010

We Are The World 25 For Haiti - Official Video

La grabación de "We Are The World 25 Para Haití" encarna el mismo entusiasmo, sentido de propósito y la generosidad como la grabación original de hace 25 años. A través de las aportaciones de las nuevas voces a esta versión de 'We Are The World', y con la ayuda de nuestros socios, The We Are The World Foundation se ha comprometido con la transparencia y ayudará a hacer realidad el espíritu de activismo que está en el centro de la canción original y el movimiento.





La historia, las voces, el mensaje.

Grabado el 1 de febrero de 2010, en el mismo estudio que el original 25 años antes (Henson Recording Studios, antes A & M Recording Studios) la nueva versión, en la que Jones y Richie son los productores ejecutivos y productores, se ha creado en colaboración con los productores ejecutivos Wyclef Jean, Randy Phillips y Peter Tortorici; productores Humberto Gattica y co-productores Rickey Minor, Mervyn Warren y Patti Austin, y los productores del proyecto John Rubey y Adán cayó en beneficio de los esfuerzos de socorro de Haití terremoto y la reconstrucción de Haití.


La grabación de 'We Are The World 25 Para Haití "incorporado el mismo entusiasmo, sentido de propósito y la generosidad como la grabación original de hace 25 años. Every one of the artists who participated, regardless of genre or generation, walked into the room with their hearts and souls completely open to coming together to help the people of Haiti. Cada uno de los artistas que participaron, independientemente del género o de generación, entró en la habitación con sus almas y corazones totalmente abiertos a que se unen para ayudar al pueblo de Haití.
 

Artistas participantes:


* QUINCY JONES – Executive Producer
* LIONEL RICHIE – Executive Producer
* WYCLEF JEAN – Executive Producer
* RICKEY MINOR – Producer
* RedOne – Producer
* CARLOS SANTANA
* JENNIFER HUDSON
* JAMIE FOXX
* SUGARLAND
* ADAM LEVINE
* JASON MRAZ
* EARTH WIND & FIRE
* NATALIE COLE
* THE JONAS BROTHERS
* T PAIN
* BRIAN WILSON
* JUSTIN BIEBER
* NICOLE SCHERZINGER
* INDIA.ARIE
* JULIANNE HOUGH
* MARY MARY
* MELANIE FIONA
* BEBE WINANS
* MYA
* TYRESE GIBSON
* ANTHONY HAMILTON
* RAPHAEL SAADIQ
* GLADYS KNIGHT
* KERI HILSON
* JOEL & BENJI MADDEN
* HEART
* BRANDY
* P!NK
* MUSIQ SOULCHILD
* MILEY CYRUS
* AKON
* JORDIN SPARKS
* CELINE DION
* ROB THOMAS
* KATHARINE McPHEE
* JEFF BRIDGES
* RANDY JACKSON
* PATTI AUSTIN
* KID CUDI
* USHER
* WILL.I.AM
* KANYE WEST
* LL COOL J
* ISSAC SLADE (aka The Fray)
* SNOOP DOGG
* NICOLE RICHIE
* TREY SONGZ
* ETHAN BORTNICK
* TARYLL JACKSON
* TAJ JACKSON
* TJ JACKSON
* VINCE VAUGHN
* DRAKE
* FREDA PAYNE
* FAITH EVANS
* ROBIN THICKE
* RASHIDA JONES
* BARBRA STREISAND
* JIMMY JEAN LOUIS
* ENRIQUE IGLESIAS
* ZAC BROWN
* LIL WAYNE
* TONY BENNETT
* JOSH GROBAN
* SEAN GARRETT
* HARRY CONNICK, JR.
* AL JARDINE
* BONE THUGS AND HARMONY (BIZZY BONES)
* AR RAHMEN
* FERGIE
* MARY J. BLIGE
* ORIANTHI
* MANN
* NIPSEY HUSSLE
* IYAZ
* KEITH HARRIS
* NIKKA COSTA
* TONI BRAXTON
* FARNSWORTH BENTLEY
* PLAIN PAT
* IL TRIO

10 funciones altamente aconsejables en Javascript

En la era de la información y en la denominada Web 2.0 no es posible sobrevivir sin tener un buen nivel de Javascript. En estos pequeños 10 puntos trataré de enriquecer un poco más la capacidad del lector, detallando algunos de las funciones/métodos más importantes de Javascript, junto con ejemplos prácticos.

Javascript es un leguaje de scripting interpretado orientado a pseudo-objetos, esto es, que no existe herencia, aunque se puede conseguir clonando una clase y añadiendo más métodos o propiedades. Casi todos los navegadores existentes pueden interpretar Javascript, ya que es de hecho un estándar: ECMAScript (ECMA = European Computer Manufacturers Association).

Pero sólo con el lenguaje JavaScript no podremos hacer nada en una página web. También necesitaremos el DOM (Document Object Model). El DOM es una estructura de objetos que representa absolutamente todos los elementos que componen una web, y mediante él conseguiremos acceder a información de la página web, añadir nuevos elementos, o modificarlos.


Función1: getElementById()
Uso: var elemento = document.getElementById(id);

Este método pertenece al objeto document. Con él obtendremos el objeto que hace referencia al elemento con un id concreto. Por ejemplo, queremos obtener el objeto del elemento “status”:

Hola mundo...
Función 2: getElementsByTagName()
Uso:var array_elementos= elemento.getElementsByTagName(tag);

Sirve para obtener un array con todos los elementos con un tag concreto que están contenidos dentro de un elemento. Veamos una ejemplo. Queremos cambiar el color del texto de todos los elementos con tag “A” contenidos dentro del elemento con id “links”:

Home



Función3: join()  Uso: var string = array.join(string); El método join() pertenece al objeto Array (todos los arrays en JavaScript son un objeto Array), y nos servirá para unir todos los elementos de un array para forma una cadena de texto. Es el equivalente en PHP a implode(). Ejemplo: Queremos unir todos los nombres de un array mediante comas:
// Creamos el array de nombres
var nombres = ['Luis','Javier','Sancho','Roberto','Rafael','Manuel'];
// Unimos todos los elementos separándolos por comas
var juntos = nombres.join(“, “);
// Y lo mostramos
alert(juntos); 
Función4: split()  Uso:var array = string.split(string); Al igual que join(), split() también es un método del objeto Array, aunque sirve exactamente para lo contrario: dividir una cadena de texto en un array. Siguiendo con el ejemplo anterior:
var juntos = “Luis, Javier, Sancho, Roberto”;
var nombres = juntos.split(“, “);
for (var i=0; i
Truco: Usados ambos métodos conjuntamente podremos crear una función para sustituir un texto por otro en una cadena dada:
function str_replace(cadena, cambia_esto, por_esto) {
      return cadena.split(cambia_esto).join(por_esto);
}
alert(str_replace('Hola mundo!','mundo','world')); 
Función5: addEventListener() / attachEvent()  Uso: Internet Explorer: elemento.attachEvent(“on”+evento, funcion); Resto de navegadores: elemento.addEventListener(evento, funcion, false); Ambos métodos hacen exactamente lo mismo, sólo que, como ocurre en otros cientos de ocasiones, Microsoft usa su propia implementación del DOM. Con este método añadiremos eventos a cualquier elemento de la página web, tal como onclick, onmouseover, onmouseout, etc. Veamos un ejemplo. Crearemos una función para la abstracción de navegadores, es decir, para que funcione tanto en IE como en Firefox o cualquier otro navegador; y después añadiremos el evento onclick a varios elementos DIV para que muestre su contenido mediante una alerta al hacer clic sobre ellos.
Hola mundo!
Foo bar
Lorem Ipsum
Función6: focus()  Uso: elemento.focus(); Con este método conseguiremos pasar el foco a un elemento de un formulario. Ejemplo:
Nombre Apellidos
Función7: createElement() / appendChild()  Uso: var elemento = document.createElement(tag); Con éste método del objeto document crearíamos un nuevo elemento con un tag determinado. Ejemplo: var div = document.createElement('DIV'); Uso: elemento1.appendChild(elemento2); Con este método añadiremos el elemento “elemento2” a “elemento1”. En el siguiente ejemplo, añadiremos elementos a una lista de forma dinámica:



    Función8: removeChild()
    Uso: elemento.removeChild(hijo);

    Este método es el usado para eliminar elementos. Se elimina el elemento hijo del objeto. Si queremos eliminar un objeto concreto, tendremos que hacerlo de la siguiente manera:

    // Obtenemos el elemento
    var el = document.getElementById(“elemento-a-eliminar”);
    // Obtenemos el padre de dicho elemento
    // con la propiedad “parentNode”
    var padre = el.parentNode;
    // Eliminamos el hijo (el) del elemento padre
    padre.removeChild(el);
    
    
    Función9: setTimeout() / setInterval()
    Uso:var temporizador = setTimeout(funcion, milisegundos);
    var intervalo = setInterval(funcion, milisegundos);

    Ambos métodos (objeto window) nos sirven para ejecutar código javascript cada x milisegundos, bien para que se ejecute una sóla vez (setTimeout) o bien para que se ejecute ilimitadamente (setInterval). Ambos se pueden cancelar mediante clearTimeout(temporizador) y clearInterval(intervalo). Veamos un ejemplo, donde se muestra la hora y fecha del sistema cada segundo en un DIV:

    Función10: alert() / confirm() / prompt()
    Uso: alert(mensaje);
    var resultado = confirm(mensaje);
    var resultado = prompt(mensaje, valor);

    Con estos métodos (objeto window) mostraremos ventanas modales al usuario. Con alert() simplemente, como hemos visto en otros puntos, mostraremos un mensaje. Con confirm() haremos exactamente lo mismo, pero además obligará al usuario a seleccionar entre dos opciones, una positiva y otra negativa, que se devolverá como parámetro (boolean). Y con prompt() pediremos al usuario que introduzca un texto en una ventana modal. Veamoslo con un ejemplo:

    // Pedimos al usuario que introduzca su nombre
    var nombre = prompt(“Introduzca su nombre”);
    // Pedimos confirmación
    if (confirm(“¿Seguro que su nombre es ”+nombre+”?”)) {
          // Respuesta afirmativa...
          alert(“Hola ”+nombre);
    }
    
    confirm() es muy útil para confirmar clics en enlaces comprometidos, que hagan operaciones críticas como eliminación de datos.

    Eliminar registro
    
    Existen muchos más métodos a nuestra disposición, aunque hay que tener en cuenta que Internet Explorer no cumple el estándar ECMAScript/DOM (entre otros tantos estándares web), y puede que un método no funcione igual en IE que en Firefox o Safari.

    Aprenderse el DOM es fundamental para poder llegar a ser un buen profesional, pero por suerte para nosotros existen librerías Javascript que nos harán la vida mucho más fácil, como jQuery, la sensación del momento entre los programadores Javascript.

    Referencia

    * Manual de referencia del DOM de Gecko

    Recorrer array en javascript, estilo foreach.

    JavaScript carece de la función foreach para recorrer un arreglo como en PHP, pero con algunas lineas podemos crear nuestra propia función forach para utilizarla como en PHP.

    Existen 2 maneras de ralizarla:

    La primera es recorrerlo de una manera “más sensilla”, sin importarnos el indice.
    //instanciamos un nuevo array
        var arrValores = new Array();
            arrValores.push("naranjas");
            arrValores.push("peras");
            arrValores.push("duraznos");
       //con un for lo recorremos
      //utilizando length para saber la cantidad
      //de elementos del Array
            for(var i=0; i< arrValores.length; i++) {
                document.write(arrValores[i] + '
    '); }
    Pero muchas tenemos Array asociativos, y aveces necesitamos conservar el indice del array para existe esta alternativa.
    var arrValores = new Array();
         //cargo un array con indice asociativo
            arrValores["naranjas"] = "1 kg";
            arrValores["peras"] = "2 kg";
            arrValores["duraznos"]  = "5 kg";
           //con esta implementacion de for podemos
           //obtener de manera sensilla el indice y luego
           //el valor
            for(var indice in arrValores) {
              document.write(indice+':'+arrValores[indice]);
            }
    
    

    Recorrer caracter por carecter en javascript

    Podríamos necesitar recorrer una cadena de texto por ejemplo para validar un carácter que no esté permitido, en este caso usaremos la “ñ”.

    Es un script muy sencillo pero útil:
    function validarString (cadenaAnalizar) {
       for (var i = 0; i< cadenaAnalizar.length; i++) {
             var caracter = cadenaAnalizar.charAt(i);
             if( caracter == "ñ" || caracter == "Ñ") {
                alert("Caracter no permitido");
                 return false;
              }  else {
                 return true;
              }
        }
    }  
    

    Subir imagenes al servidor con PHP

    Realizando un trabajo me tope con esta “problemática” y tuve que realizar un script que aparte de subir imágenes al servidor realice una miniatura cuadrada de la misma. Para realizar la miniatura debemos tener en cuenta que el servidor tiene que tener instala la librería GD.

    Para quienes quieran leer más de GD pueden hacerlo desde aquí, en resumen es una librería que nos hace más fácil la manipulación de imagenes cuando trabajamos en php.

    Ahora vamos a ver el código:

    //en primer lugar hice una funcion para controlar
    //que lo que suban sea jpg
    function checkMime($mimeType) {
    switch( $mimeType )
    {
    case 'image/jpeg': return true; break;
    case 'image/jpg': return true; break;
    //si usamos Internet Explorer lo llama pjpeg
    case 'image/pjpeg': return true; break;
    
    default: return false; break;
    }
    }
    
    //preguntamos si existe la variable $_FILES
    if($_FILES["foto"]["name"]!="") {
    $nombreFile =  $_FILES["foto"]["name"];
    $tipoArchivo =  $_FILES["foto"]["type"];
    //ahora comprobamos el tipo de archivo con la función anterior
    if(checkMime($tipoArchivo)) {
    $nombreArchivo = $nombreFile;
    //con la funcion move_upload_file,
    //subimos el archivo
    if(move_uploaded_file($_FILES["foto"]['tmp_name'], '../img/' . $nombreArchivo)) {
    //ahora creamos una imagen
    //apartir de la original
    $original = imagecreatefromjpeg('../img/' .  $nombreArchivo");
    //le especificamos el tamaño
    $thumb = imagecreatetruecolor(135,135); 150x150
    //obtemeos el alto y ancho de la original
    $ancho = imagesx($original);
    $alto = imagesy($original);
    imagecopyresampled($thumb,$original,0,0,0,0,135,135,$ancho,$alto);
    // 90 es la calidad de compresión
    imagejpeg($thumb, '../img/' . thumb.jpg", 90);
    }
    }
    
    

    miércoles, 17 de febrero de 2010

    API Reflection

    API Reflection nos permite básicamente hacer ingeniería inversa de nuestras clases, pudiendo ver así a sus métodos, atributos, constructores, ya sean públicos o privados, etc. De esta manera por ejemplo, una clase puede conocerse a si misma y hacer cosas que sin API Reflection no se podrían. Esto no sólo se aplica a clases, sino que también es posible con interfaces, funciones, etc.
    API Reflection no es muy conocida, pero es utilizada para varias cosas, como por ejemplo para generar documentación de código (como phpDoc) o generar XML Schemas a partir de clases, etc.

    PHP nos ofrece una serie de clases para utilizar API Reflection, vamos a ver algunas de ellas.

    Con la clase ReflectionClass, podemos hacer ingeniería inversa de una clase, accediendo al nombre de la clase, sus modificadores, métodos, propiedades, etc.

    Instanciamos un objeto ReflectionClass, pasándole como parámetro al constructor el nombre de la clase sobre la cual vamos a hacer ingeniería inversa:

    $clase = new ReflectionClass(“LaClase”);
    
    Ya está, saquemos algo de información sobre la clase:

    echo “Nombre de la clase: ” . $clase->getName() . “n”;
    echo “La clase es abstracta? ” . $clase->isAbstract() . “n”;
    echo “La clase es final? ” . $clase->isFinal() . “n”;
    

    Si queremos obtener los métodos que tiene la clase, podemos utilizar el método getMethods() que tiene ReflectionClass:

    $metodos = $clase->getMethods();
    
    Nos devuelve un array de objetos ReflectionMethod. Que como podrán imaginar son los métodos de la clase. Con los métodos de ReflectionMethod podemos hacer ingeniería inversa de los métodos:

    foreach($metodos as $metodo) {
    echo “Es público?” . $metodo->isPublic() . “n”;
    echo “Es estático?” . $metodo->isStatic() . “n”;
    echo “Es abstracto?” . $metodo->isAbstract() . “n”;
    echo “Es un constructor?” . $metodo->isConstructor() . “n”;
    }
    

    Si queremos obtener las propiedades de la clase, podemos utilizar getProperties():

    $propiedades = $clase->getProperties();
    
    Nos devuelve un array de objetos ReflectionProperty, lo cual nos permite hacer ingeniería inversa de las propiedades:

    foreach($propiedades as $propiedad) {
    echo “Nombre de la propiedad: ” . $propiedad->getName() . “n”;
    echo “Es pública?” . $propiedad->isPublic() . “n”;
    echo “Es estática?” . $propiedad->isStatic() . “n”;
    }
    
    Podemos utilizar los métodos hasMethod() o hasProperty() para saber si una clase tiene determinado método o propiedad:

    echo “La clase tiene el método unMetodo? ” . $clase->hasMethod(“unMetodo”) . “n”;
    echo “La clase tiene la propiedad unaPropiedad? ” . $clase->hasProperty(“unaPropiedad”) . “n”;
    
    En este caso hicimos ingeniería inversa de una clase, y con los métodos getMethods() y getProperties() obtuvimos los objetos ReflectionMethod y ReflectionProperty para cada uno de los métodos y propiedades. Pero también podemos hacer ingeniería inversa de un método o una propiedad directamente, instanciando ReflectionMethod / ReflectionProperty pasándole al constructor directamente el nombre de la clase y del método / propiedad a hacer ingeniería inversa:

    >$metodo = new ReflectionMethod(“UnaClase”, “unMetodo”);
    $propiedad = new ReflectionProperty(UnaClase”, “unaPropiedad”);
    
    En caso de querer hacer ingeniería inversa de una función, en vez de un método, se utiliza ReflectionFunction:

    $funcion = new ReflectionFunction(“unaFuncion”);
    
    Tanto ReflectionMethod como ReflectionFunction, tienen un método getParameters() que devuelve un array de objetos ReflectionParameter con todos los parámetros de la función o método:

    $parametros = $funcion->getParameters();
    
    Con ReflectionParameter, podemos hacer ingeniería inversa de los parámetros de una función o método:

    foreach($parametros as $parametro) {
    echo “Nombre del parámetro: ” . $parametro->getName() . “n”;
    echo “Es opcional?: ” . $parametro->isOptional() . “n”;
    }
    
    Bueno, como podrán ver, es bastante sencillo de usar. Lo mejor como siempre, es consultar la documentación oficial de PHP sobre API Reflection.

    martes, 16 de febrero de 2010

    Los métodos mágicos en PHP

    Los métodos mágicos son una importante característica de PHP, que permite cambiar la funcionalidad interna de las clases a través de la implementación de ciertos métodos. En este artículo voy a comentar para que sirve cada uno de ellos.

    Que y cuales son los métodos mágicos

    Los métodos mágicos, son métodos que son llamados automáticamente por PHP ante determinadas situaciones. Se caracterizan porque su nombre empieza por “__” (dos guiones bajos). Estos son:

    • __construct()
    • __destruct()
    • __call()
    • __get()
    • __set()
    • __isset()
    • __unset()
    • __sleep()
    • __wakeup()
    • __toString()
    • __clone()
    Cada uno de estos métodos es llamado por PHP cuando cierto “evento” ocurre (este evento depende de cual método estemos hablando). Al implementar un método de estos, nos aseguramos de que cierto código se ejecute cuando el evento en cuestión ocurra.
    Para los que conocen Java. Sería como sobreescribir algunos métodos de la clase Object, de manera que cambiemos la funcionalidad interna del objeto (como cuando sobreescribimos finalize() o toString()).
    Por ejemplo, el método __destruct() es llamado cuando un objeto es destruido. Al implementarlo, nos aseguramos de que PHP, al destruir un objeto ejecute cierto código (obviamente este “cierto código” es la implementación que le demos al método).

    Para que sirven los métodos mágicos

    Todos son muy diferentes, y sirven para cosas distintas, por lo tanto la mejor manera de entender para que sirven es ver en detalle cada uno de ellos.


    • __construct()

      Este método apareció a partir de PHP 5. Es un constructor, se usa en reemplazo del constructor de PHP 4. Es llamado cuando se construye un objeto, y es conveniente usarlo, ya que el viejo constructor (el método con el mismo nombre de la clase) es deprecated.


    • __destruct()

      Este método también apareció a partir de PHP 5, y es llamado obviamente cuando un objeto es destruido. El método no toma parámetros ni retorna nada, se utiliza generalmente para liberar recursos.


    • __call()

      Este método es llamado cuando un método no es encontrado. Sirve para encontrar métodos no definidos evitando que se produzca un error. Aunque a simple vista tal vez no vean a este método como muy útil… ¡SI LO ES! Como ya sabrán, PHP no soporta la sobrecarga de métodos, pero con este método mágico, se puede “simular” el overloading. Se pueden hacer muchas cosas interesantes con este método, miren este ejemplo:
      < ?php
      class Person {
      private $firstName;
      private $lastName;
      private $age;
      private $country;
      function __call($method, $arguments) {
      $prefix = strtolower(substr($method, 0, 3));
      $property = strtolower(substr($method, 3));
      if (empty($prefix) || empty($property)) {
      return;
      }
      if ($prefix == "get" && isset($this->$property)) {
      return $this->$property;
      }
      if ($prefix == “set”) {
      $this->$property = $arguments[0];
      }
      }
      }
      $personObj = new Person;
      $personObj->setFirstName(“Pepe”);
      $personObj->setLastName(“Argento”);
      $personObj->setAge(50);
      $personObj->setCountry(“Argentina”);
      echo “Nombre: “.$personObj->getFirstName().” “.$personObj->getLastName().”n”;
      echo “Edad: “.$personObj->getAge().”n”;
      echo “País: “.$personObj->getCountry().”n”;
      ?>
      ¿Ahora si les parece interesante este método verdad? acabamos de ahorrarnos la tediosa tarea de tener que crear los métodos setX() y getX() para cada método.


    • __get() y __set()

      Estos dos métodos también son muy muy útiles. Son llamados cuando un atributo no existe. Y pueden utilizarse para muchas cosas interesantes. Por ejemplo, cuando necesitamos tener una manera de acceder a atributos que no conocemos en tiempo de compilación, o si queremos crear atributos haciéndolos formar parte de un array pero que se utilicen como si fueran atributos normales. Miren por ejemplo esto:
      < ?
      class Test {
      var $properties;
      function __set($property_name, $val) {
      $this->properties[$property_name] = $val;
      }
      function __get($property_name) {
      if(isset($this->properties[$property_name])) {
      return($this->properties[$property_name]);
      } else {
      return(NULL);
      }
      }
      }
      $testObj = new Test();
      $testObj->anyProperty = “Any property”;
      echo $testObj->anyProperty;
      ?>


    • __isset()

      Es llamado cuando se le pasa un atributo NO definido al método isset(). Puede aplicarse igual que __set() y __get(), pero para utilizar el método isset() sobre el atributo. Este método está a partir de PHP 5.


    • __unset()

      Igual que __isset() pero para utilizar con el método unset(). También está a partir de PHP 5.


    • __sleep()

      Es llamado al serializar un objeto por serialize(). Puede utilizarse para limpiar variables que no desean ser serializadas, etc.


    • __wakeup()

      Es llamado al deserializar un objeto por unserialize(). Es utilizado generalmente para realizar algunas tareas de “reinicialización”.


    • __toString()

      Es llamado cuando se trata a un objeto como una cadena. Vendría a ser lo mismo que el método toString de la clase Object de Java. Un ejemplo de como implementarlo:
      < ?php
      class Person {
      var $name;
      function __toString() {
      return $this->name;
      }
      }
      $personObj = new Person();
      $personObj->name = “Pepe Argento”;
      echo $personObj;
      ?>


    • __clone()

      Este método apareció a partir de PHP 5. Es llamado cuando un objeto es clonado. Para los que conocen C++, este método sería como un constructor de copia.


    • __autoload()

      Es llamado cuando una clase no es encontrada. Puede utilizarse para intentar importarla en ese momento. Así:
      < ?php
      function __autoload($className) {
      require_once $className . '.php';
      }
      $obj1 = new AnyClass();
      $obj2 = new OtherClass();
      ?>
      

    KumbiaPHP un framework con ñ

    Kumbia es un nuevo framework para PHP cuya filosofía se centra en facilitarle la vida a los programadores. Posee características como generadores de formularios, ActiveRecord, MVC, etc… Y además tiene toda la documentación en español.


    Ordenación por Inserción

    Ordenación por Inserción


    Cartas-Ordenadas
    Este algoritmo se basa en la técnica para ordenar una mano de cartas.
    Para cada carta levantada buscamos el lugar correcto y para acomodar la nueva carta debemos hacer espacio en la mano para insertarla.


    Análisis

    Arreglo
    Comenzamos con un “subconjunto ordenado” que contiene solo el primer elemento del conjunto; en este caso es el 8.
    Conjunto y Subconjunto
    Comenzamos tomando el segundo elemento del conjunto y lo comparamos con el elemento del subconjunto. Al ser 5 menor que 8; insertamos el segundo elemento en la primer posición y recorremos el 8 a la segunda posición. Así el subconjunto ordenado tiene dos elementos ordenados (5 y 8).
    Insercion-1
    Ahora tomamos el tercer elemento (2), lo comparamos con el subconjunto. Lo insertamos en la primer posición y recorremos el 5 y el 8. Así el subconjunto ordenado tiene tres elementos (2, 5 y 7).
    Insercion-2
    Luego tomamos el cuarto elemento (7) del conjunto, lo comparamos con el subconjunto. Al ser 7 menor que 8 lo insertamos en la posición en la que se encuentre el 7 y solo recorremos el 8. Ahora el subconjunto ordenado tiene cuatro elementos (2, 5, 7 y 8).
    Insercion-3
    Ahora tomamos el quinto elemento del conjunto (6), lo comparamos con el subconjunto y lo insertamos en la posición del elemento 7 y recorremos el 7 y el 8. Ahora el subconjunto ordenado contiene cinco elementos (2, 5, 6, 7 y 8).
    Insercion-4
    Tomamos el sexto elemento (3), lo comparamos con el subconjunto y lo insertamos en la posición del 5 y recorremos los elementos 5, 6, 7 y 8. Y ahora el subconjunto ordenado tiene seis elementos (2, 3, 5, 6, 7 y 8).
    Insercion-5
    Por ultimo tomamos el séptimo elemento (4), lo comparamos con el subconjunto. Lo insertamos en la posición del número 5 y recorremos los elementos 5, 6, 7 y 8. Y ahora tenemos nuestro arreglo ordenado.
    Insercion-6
    El paso que se encarga de realizar la inserción de los elementos se repite n – 1.

    #include iostream
    
    using namespace std;
    
    void insercion(int array[], int size)
    {
     int i, j, valor;
    
     for (i = 1; i < size; ++i)
     {
      valor = array[i];
    
      for (j = i; j > 0 && array[j - 1] > valor; --j)
      {
       array[j] = array[j - 1];
      }
    
      array[j] = valor;
     }
    }
    
    int main (int argc, char *argv[])
    {
     int numeros[] = {8,5,2,7,6,3,4};
    
     /* Imprimimos el arreglo original */
     for (int i = 0; i < 7; ++i) {
      cout << numeros[i] << " ";
     }
    
     cout << endl;
    
     insercion(numeros, 7);
    
     /* Imprimimos el arreglo ordenado */
     for (int i = 0; i < 7; ++i){
      cout << numeros[i] << " ";
     }
    
     cout << endl;
    }
    

    Barbie se transforma en una Ingeniera en Computación

    Barbie adquirió una nueva profesión, ahora es una Ingeniera en Computación. Barbie es la muñeca para niñas más popular del mundo durante varias generaciones. En su historia, Barbie ha sido una adolescente, una pianista, astronauta, Miss América, maestra, modelo y ahora es una Ingeniera en Computación.
    Barbie al estilo geek con un ordenador

    Esto no es casualidad, ya que los creadores de Barbie se han dado cuenta de la creciente comunidad de mujeres que son Ingenieras en Computación, pero sobre todo por el auge tecnológico, computacional y geek en estos tiempos.

    Barbie cuenta con algunos accesorios como una pieza bluetooth, lentes gruesos y fashion en color rosa, un smartphone y sobre todo un pequeño ordenador que le da el toque final a esta Ingeniera. Los diseñadores de Barbie comentaron que trabajaron con la Sociedad de Mujeres Ingenieras y la Academia Nacional de Ingenieria para asegurarse que los accesorios, la ropa y el paquete fuera “realista y representativo de una ingeniera en computación”, según explicaron en wired.
    No hay duda que la moda ha visto un potencial muy grande en la cultura Geek, para esto podemos ver el estilo geek fashion, es una forma de vestir que demuestra que (aunque se hayan basado en un estereotipo) todos podemos vernos bien, sin importar nuestro estilo.
    Barbie es ahora un chica geek, con ropa fashion pero con un lado tecnologico. 

    viernes, 12 de febrero de 2010

    Navega de manera anónima con PHProxy

    Cada vez que nos conectamos a un sitio de Internet, éste registra nuestra dirección IP, el nombre de la máquina, la página desde la que accedimos a dicho sitio y en muchos casos incluso almacena nuestra dirección de correo electrónico. Lo que sucede a continuación ya depende del servidor y de su política de intimidad y protección de datos.
    PHProxy
    El caso es que éstos elementos muchas veces terminan en alguna base de datos por las que se paga bastante dinero y al final terminamos “inscritos” en la lista de aquella publicidad que no sabemos cómo nos llegó sin dejar de lado la paranoia de muchos que temen que sus datos estén regados por toda la red.

    Y bueno, tienen razón pues a veces la información robada es muy personal.
    Es por ello que en muchas ocasiones conviene navegar de manera anónima para no dejar rastros de nosotros en la red. Si lo has intentado, ya sabrás que hay muchas alternativas para navegar anónimamente; las aplicaciones y servicios disponibles son muy variados. Así que para que tengas una opción más, aquí te dejamos otra herramienta llamada PHProxy.
    Como su nombre lo indica la aplicación está desarrollada en su totalidad en PHP y el peso es muy ligero: tan sólo unos 26,5 KB convirtiéndola así en una gran opción para cuando no quieres instalar aplicaciones pesadas. Además como indican en Dinero 2.0, la configuración es muy rápida y a diferencia de otros servicios, sirve en muchas zonas geográficas que otras aplicaciones limitan.

    Metallica y su gran éxito en México

    Metallica es sin lugar a dudas uno de los grupos musicales más emblemáticos de mediados de los 80 y principios de los 90. Dejemos de lado el hecho de que son un referente obligado al momento de hablar de música metal-rock; el grupo definitivamente ha logrado llegar a todo tipo de públicos y hoy como nunca siguen tan vigentes como lo estuvieron hace 10 años. Y si no pregúntele a alguno de los asistentes al concierto del Foro Sol en la ciudad de México.
    Metallica

    El grupo en su pasado visita a éste país realizó tres presentaciones en el Foro Sol llegando a reunir a más de 165,000 personas, tres fechas que quedaron grabadas para la posteridad en la edición súper exitosa del DVD “Orgullo, pasión y gloria”. Y lo más interesante de esto fue que las entradas de los tres conciertos se vendieron en sólo un par de horas, algo que el guitarrista Kirk Hammett expresó como una ‘Beatlemanía” que con el tiempo ha crecido exponencialmente en México.

    En la prensa escrita se menciona que el legendario grupo ha vendido en toda su carrera musical más de 100 millones de copias y ha realizado numerosas giras en todo el mundo Metallica. Pero parece ser que nada se compara ante la euforia que México siente por Metallica pues además del megaconcierto del Foro Sol, hay que recordar que en 1993 la banda completó la hazaña de abarrotar durante cinco noches consecutivas el gigantesco Palacio de los Deportes.
    “La gente decía que la última súper banda en los 80 y principios de los 90 era Guns N’ roses, pero al final ésta no pudo con el estigma. Metallica, a pesar de ellos mismos, se ha podido mantener. Es el grupo más grande en todo el mundo, después de The Beatles, y a pesar de los tropezones que ha tenido, ha recuperado la capacidad de hacer lo que mejor sabe, tocar metal” opina un conocido bloguero mexicano y fan del metal que se hace llamar Chico Migraña.
    Metallica
    ¿Pero por qué el fenómeno Metallica es más intenso y visible en México? Las razones pueden ser muchas pero la mayoría coincide con lo que el Chico Migraña declara en algo que todos los mexicanos entendemos completamente: “La banda es enorme en todo el mundo, pero creo que el fenómeno se hizo más visible en nuestro país porque somos más ‘calientes’. El grupo logró hacerse más popular aquí que en Brasil o en Argentina, el público de esos países quiere más a Megadeth”.
    Sin lugar a dudas las cadenas televisivas especializadas como MTV ayudaron a que Metallica pudiese llegar a la nueva generación de muchachos, al mismo tiempo que mantenía contentos a la old school que creció con este grupo. No cualquier grupo musical que se originó en los 80 puede salir ileso de éste crossover generacional. Y a pesar de varios tropezones que la banda sufrió con el paso de los años, es claro que éste ha sido uno de los grandes logros de Metallica que se deben de reconocer.

    Fraces geek para sanvalentin

    El día de San Valentín está muy cerca y si tienes planeado una cita con una chica, o saldrás con tu novia, es importante que tengas una que otra frase para enamorar.
    Amor geek en San Valetin
    Si tu chica es geek o tiene un nivel de conocimientos considerables en tecnología, las siguientes frases que te dejo le van a encantar en el día de San Valentín.

    Estas frases también la pueden usar las chicas que tengan un novio o pretendiente que sea geek, o le guste la tecnología. Estas frases las pueden decir directamente, pero si te da pena decírselo, puedes escribir una carta con estas frases de amor geek :
    • Eres el kernel de mi Linux
    • Tucorazon.com esta en mi pagina de inicio
    • Tu RAM le da vida a mi Windows
    • Eres el .gif que anima mi vida
    • Siempre estas en C:/Mi/Corazón
    • Te pienso más que las paginas indexadas por Google
    • Eres como el Firefox que me sacó del infierno de Explorer
    • Eres el enter de mi vida
    • Si me dejas hago Alt-F4 a mi vida
    • Cuando te veo mi ciclo de CPU se acelera
    • Tú tienes la máxima prioridad en mi lista de procesos
    • Tus deseos son signals para mi
    • En la cama eres puro overclocking
    • Sin ti mi vida sería como una web sin CSS
    • Dime cómo te llamas y te agrego a mis favoritos
    • Eres la primera en Google al buscar mi corazón
    • Tienes permisos de root en mi vida
    • Mi MacOSX tiene envidia de tu belleza
    • Juntos somos como un procesador de doble núcleo
    • Tengo el feed RSS de tus pensamientos
    • Mi sistema operativo entra en hibernación cuando no estás a mi lado
    • Quisiera ser un Pendrive para tus USB
    • Nuestros corazones sincronizan por Wifi
    ... asi k ya saben para este 14 regalen algo creativo.

    miércoles, 10 de febrero de 2010

    Bienvenida...

    Por que siempre hay que escribir una bienvenida, mmm no lo se tal vez por costumbre o mmm haa si!! por educacion jejejeje...

    Bueno yo no escribire cientos de lineas explicando el por que de este blog, quien soy, de donde soy  y etc. etc. ya que yo no soy un escritor mas bien soy un programador, asi que solo les dire que este blog lo utilizare para postear lo que me valla encontrando de interesante por el camino y que crea que pueda ser util para alguien mas y sin mas ni mas les doy la mas coordial 813nv3n1d4!!!