Agosto 27, 2008 at 11:23 am · Filed under Novedades
Si, la noticia llego un poco tarde al blog, pero vale la pena recordarlo.
Firebug es claramente una de las mejores extenciones para firefox si nos dedicamos a desarrollar claro. Así que ya fue liberada la versión 1.2 Final teniendo a cuestas:
Mejoras:
Mejorados el panel de Red, Javascript y la consola
Reparados muchos bugs
Aumentaron la seguridad de la consola
Viene desactivado (para mejorar la performance) por defecto el panel de Red,Guión y Red
Está en Español !!!
Sigue teniendo compatibilidad con FireCookie
En Red, podes filtrar los listados segun el tipo de archivo (.js/Imagen/Css/etc)

Las opciones de Red, Javascript y Consola están desactivadas por defecto
Agosto 23, 2008 at 4:05 pm · Filed under PHP, Tips y Trucos
Investigando una nueva forma de hacer un controlador para MVC, me encuentro, con que Xampp, por defecto no tiene activado el módulo mod_rewrite.
Que es mod_rewrite?
Para hacerla simple, es un modulo de apache, que permite procesar las URL al vuelo mediante reglas y proponer acciones a seguir.
Por ejemplo en mi caso, tenía que hacer la siguiente regla:
# Redireccionador para MVC
RewriteEngine on
RewriteRule !\.(js|gif|jpg|png|css)$ index.php
Si el archivo de la petición URL no es extención js,gif,jpg,png o css redirigir a index.php
Pero lamentablemente, al hacer el archivo .htaccess (Donde se situan las reglas) me daba el siguiente error en la aplicación:
Error 500
¡Error en el servidor!
El servidor encontro un error interno y fue imposible completar su solicitud.
Existe tambien la posibilidad de que el servidor este sobrecargado o de
algún error en un programa de CGI.
Entonces los pasos que seguí para activar el mod_rewrite fueron:
Paso 1:
Fui al directorio a donde está instalado Xampp
Paso 2:
Me metí en el directorio apache/conf/
Paso 3:
Abrí el archivo httpd.conf con el editor de textos
Paso 4:
Busque la linea que contenía: rewrite_module
La línea completa es:
#LoadModule rewrite_module modules/mod_rewrite.so
Paso 5:
Como estába comentada, la descomente (sacando el # de adelante) y guardé los cambios
Paso 6:
Reinicié apache y listo, ya tenemos el módulo funcionando !!
Agosto 21, 2008 at 3:57 pm · Filed under PHP, Recursos
Webeando por ahí, me topé magicamente, como en tantas otras oportunidades con SQLBuddy, un Administrador de MySQL vía web hecho en PHP ( cual conocido phpMyAdmin ).
Lo bajé inmediatamente desde acá tras enterarme que era OpenSource y gratuito. Boton derecho, lo descomprimí en la carpeta de Apache, y listo, eso fue toda la instalación, me reconoció el MySQL local y la configuración, así que tras ingresar un usuario y contraseña ya estaba disfrutando del poder de esta herramienta.
Entre lo que nos permite, se encuentra:
Administrar usuarios de manera muy simple
Importar / Exportar de/a SQL
Ejecutar consultas y ver los resultados (Ajax)
Explorar las Bases de datos
Agregar / Modificar / Eliminar tablas
Brinda información sobre las tablas
Explorar los datos de las tablas
Abrir una determinada fila en una ventana interna para usarla más tarde
A simpe vista, note que es mucho más rápido que phpMyAdmin y está un paso sobre ésta última en cuanto a facilidad y agilidad de uso.
Descarga:
Version: SQL Buddy 1.2.9
Tamaño: 167 KB
Requerimientos: PHP 4.3+, MySQL 4+
Navegadores Soportados:Firefox, Safari, Opera 9.5, Internet Explorer 7
Idiomas:Español, Inglés, Aleman, Italiano, Japones, etc.
Descarga: Link de Descarga
Y finalizo con algunas capturas en mi Firefox :


Agosto 19, 2008 at 9:11 pm · Filed under PHP, UML a PHP
Iteradores, cosa poderosa si las hay. Para ser concreto voy a empezar con su definición:
Iterador:
El patrón de diseño Iterador, define una interfaz que declara los métodos necesarios para acceder secuencialmente a un grupo de objetos de una colección (1)
Pero lo más importante es que:
Este patrón de diseño permite recorrer una estructura de datos sin que sea necesario conocer la estructura interna de la misma.(1)
Esto quedo claro, ahora, que es SPL, esas siglas que aparecen en el título del post.
SPL (Standard PHP Library) , son un conjunto de interfaces y clases que intentan resolver de manera rápida los problemas más comunes. Hablar completamente de la SPL sería cuestion de muchos artículos, así que solo me voy a dedicar a hablar de :
ArrayIterator
Creo que el ArrayIterator en el más útil y extendido, ya que permite crear un iterador sobre un Array.
Es tan simple como:
// Creo un Array con una sucesión
$arr = Array(0,1,1,2,3,5,8,13,21);
// Creo el iterador sobre el Array
$iterador = new ArrayIterator($arr);
// Mientras tenga mas valores que recorrer
while($iterador->valid())
{
// Muestro el valor actual
echo $iterador->current()."-";
// Me muevo al siguiente valor
$iterador->next();
}
echo '<br />';
// Podemos volver al primer valor
$iterador->rewind();
// Lo recorremos con un Foreach
foreach($iterador as $aux)
{
echo $aux."-";
}
echo '<br />';
// Muestro la cantidad de objetos en el iterador
echo "Cantidad: ".iterator_count($iterador);
La salida para que lo comprendan un poco mejor es:
0-1-1-2-3-5-8-13-21-
0-1-1-2-3-5-8-13-21-
Cantidad: 9
Para esto, Array Iterator implementa varias interfaces:
class ArrayIterator implements
Iterator,Traversable,ArrayAccess,SeekableIterator,Countable
{ ... }
Lo que lo deja con los siguientes métodos:
mixed current() // Devuelve el elemento actual
mixed key() // Devuelve la llave del Array
void next() // Pasa al siguiente valor del Array
void rewind() // Va al primer valor del array
void seek( int $position ) // Se mueve a la posición indicada
bool valid() // Contiene más valores?
Claro está que esto no sería muy útil sino se pudieran iterar Arrays de Objetos:
// Hacemos un array de objetos
$lista = Array();
// Creamos objetos de Prueba
$cliente = new Cliente();
$cliente2 = new Cliente();
$cliente3 = new Cliente();
// Los agregamos al array
$lista[] = $cliente;
$lista[] = $cliente2;
$lista[] = $cliente3;
//Creamos el mismo iterador
$iterador = new ArrayIterator($lista);
//Lo recorremos y usamos el objeto indicado
while($iterador->valid())
{
echo '<br />'.$iterador->current()->getNombre();
$iterador->next();
}
// Objeto de prueba
class Cliente
{
// El rand() es para diferenciar cada objeto
public function getNombre()
{ return "Socio N:".rand(); }
}
Esto tiene una salida, por ejemplo:
Socio N:32143
Socio N:14364
Socio N:7205
Una modesta opinión
Sin duda los iteradores dentro de SPL son un avance para hacer que PHP no se quede en el tiempo y se convierta en un lenguaje obsoleto frente a sus competidores como JAVA o .NET. Pero, no están al alcance de estos, por ejemplo. Primeramente faltan los métodos:
hasPrevious()
nextIndex()
previous()
previousIndex()
Para que? para recorrer los datos como se nos ocurra, osea ir para adelante o para atras según lo necesitemos, o para mostrar los datos en un orden inverso, son muchas las funcionalidades que dejaron de lado. Y si, algunos dirán “Pero puede hacerce de una manera muy simple”, si, estoy de acuerdo, pero la idea es simplificar las cosas, hacer que estos problemas tipicos en todo sistema se resuelvan simplemente, no hacer algunas cosas y dejar el resto en la mano del programador.¿Será que estoy muy acostumbrado a java?
Articulos de interés:
(1) Iterador - Wikipedia
SPL Manual
Agosto 15, 2008 at 9:28 pm · Filed under PHP
Primero definimos lo que es un Singleton, y de que se encarga:
El Patrón Singleton, garantiza que una clase tenga sólo una instancia, y proporciona un punto de acceso global a ella
(Patrones de Diseño :: Addison Wesley :: Erich Gamma, Richard Helm, Balplit Jonhson, John Vhissides)
Entonces, vamos a tener una y solo una instancia de la clase Singleton en memoria por ves, y solo puede accederse desde un único punto.
Perfecto para guardar configuraciones, ya que garantizamos que esté siempre actualizada y que solo podamos acceder desde un punto y no dupliquemos datos.
Al ser única instancia ahorramos memoria (aunque últimamente ya no es tan crítico lo que se puede proratear).
Un ejemplo claro que estoy usando en un proyecto es éste.
Una Clase (Singleton) Config. “SConfig” para los amigos, que no es otra que la encargada de mantener la configuración del acceso a la base de datos y algunas otras cosas, como límites, nombres, etc.
Su uso es muy simple, se agrega el atributo, se lo inicializa, y listo.
/**
* DESCRIPCION:
* Es una clase que define un patrón Singleton
* OBJETIVO:
* Encargado de guardar las configuraciones del sistema para poder accesarlas
* en todo momento de forma única, simple y rápida.
*
* @copyright Creative Commons Atribución 2.5 Argentina.
* @author Iuga - iuga77@gmail.com
* @version 1.0.6
* @todo: ---
*
* Agradecimientos:
* Enrique Place, Martin Alterisio, andres
*/
class SConfig implements ISingleton
{
// Definimos el atributo que guarda la instancia del Singleton
private static $config = null;
// Definimos las variables de la configuracion
private $bdHost; // Host de la BD
private $bdUsuario; // Nombre de Usuario de la BD
private $bdPass; // Password de la BD
private $bdBd; // Schema a usar
/**
* Retorna la clase Singleton si existe en memoria
* Si no existe, crea una nueva
* @return (Singleton)
*/
public static function getInstance()
{
if ( self::$config == null )
{
self::$config = new SConfig();
}
return self::$config;
}
/**
* Constructor del Singleton
* Se inicializan las variables
*/
private function SConfig()
{
// Este es el constructor, definimos la configurcion
$this->bdHost = "localhost";
$this->bdUsuario = "root";
$this->bdPass = "pass";
$this->bdBd = "BaseDePrueba";
}
/**
* Método "GET", se usa para obtener los parametros
* independiente si existe su get o no
* @param $var Nombre del atributo
* @return $valor_atributo
*/
public function getData ( $key )
{
if(isset($this->$key))
{
return $this->$key;
}
else
{
return NULL;
}
}
}
Y la interfaz ISingleton:
/**
* Interface que define el comportamiento de todas las clases Singleton
* del Sistema, para que cumplan con el mismo contrato de obtención de datos
*
* @copyright Creative Commons Atribución 2.5 Argentina.
* @author Iuga - iuga77@gmail.com
* @version 1.0.0
*
* Agradecimientos:
* Enrique Place, Martin Alterisio, andres
*/
interface ISingleton
{
/**
* Método que va a retornar la instancia Singleton
* @return (Singleton)
*/
public static function getInstance();
/**
* Método para obtener los datos definidos dentro del Singleton
* @param <string> $key
*/
// public function getData($key);
// Fuera de la interface hasta que alguien proponga lo contrario
}
</string>
Para usar una de las configuraciones, podemos simplemente:
echo "Host de la Base de Datos: ".SConfig::getInstance()->getData("bdHost");
Fácil de mantener, de actualizar y acceder.
Ese es mi caso, sería interesante ver como guardan los coders PHP sus configuraciones y comparar.
Artículos de interés:
PHPSenior: Patrón de Diseño “Singleton”
WikiPedia Singleton
Agosto 15, 2008 at 12:28 am · Filed under Netbeans, PHP, Tips y Trucos
Si si, leiste bien, si en un punto lo criticaba mucho a NetBeans era en el que no era capaz de hacer los getters, setters y Constructores por si solo, luego de darle la definición de atributos.
Más ahora es un punto a favor.
Por favor, vayan a una clase creada, situense en alguna parte de la clase y presionen
Alt + Insert
Que es eso, un menú “Generate” con varias opciones:
Podemos hacer solo los getters , solo los setters o ambos al mismo tiempo. Una conexion a la base de datos o una consulta mostrando los datos de una tabla, interesante.
Si ponemos hacer los Setters nos aparecerá una nueva ventana, en la que podemos seleccionar cuales son los que realmente queremos generar, punto a favor.
Para cerrar, ya que lo que quiero hacer es que ustedes lo conozcan y lo exploren, muestro algo interesante, pero en un proyecto grande, inútil. es buscar una tabla, seleccionar X campos y te inserta un codigo que hace la consulta, la itera y te la muestra en una tabla, simple, pero saca del apuro.
Algo como esto:
genera algo así:
echo '<table>';
echo '<tr>';
echo '<th>nroCandidato</th>';
echo '<th>nroPersona</th>';
echo '<th>fechaAlta</th>';
echo '<th>urlFoto</th>';
echo '</tr>';
$result = mysqli_query($conn, 'SELECT `nroCandidato`, `nroPersona`, `fechaAlta`, `urlFoto` FROM candidato');
while (($row1 = mysqli_fetch_array($result, MYSQLI_ASSOC)) != NULL) {
echo '<tr>';
echo '<td>' . $row1['nroCandidato'] . '</td>';
echo '<td>' . $row1['nroPersona'] . '</td>';
echo '<td>' . $row1['fechaAlta'] . '</td>';
echo '<td>' . $row1['urlFoto'] . '</td>';
echo '</tr>';
}
mysqli_free_result($result);
echo '</table>';
Espero que lo vean como una novedad provechosa, y que si ya lo conocian les refresque la memoria, más de esto no puedo llegar a provocar.
Agosto 14, 2008 at 2:55 pm · Filed under Novedades, PHP
Hoy fue liberada la nueva versión “Beta” de Netbeans, más precisamente es la 6.5
Entre las novedades:
PHP
* Code Completion
* Quick Fixes and Semantic Checks
* Code Generator
* FTP Support
* Debugging with Xdebug
* Support for popular Web Services
Ajax/JavaScript
* Debugging support for Firefox and IE
* HTTP client monitoring
* Bundled popular JavaScript libraries
Java
* Groovy/Grails support
* Compile on Save
* Eclipse project import and synchronization
* Built-in Hibernate support
* JSF CRUD Generator now Ajax-enabled
Database
* New Connection Dialog
* SQL Editor Improvements
C/C++
* Improved code completion and error highlighting
* Remote Development
* Support for packaging
Ruby
* New Ruby/GlassFish v3 “Prelude” Bundle
* Support for Ruby Tests
* Updated Rails to 2.1.0
* Improved support for Rake build tool
GlassFish v3 “Prelude” Bundles
* Modular, OSGi based architecture
* Small footprint, fast startup and deployment
* Support for scripting, including jRuby
Para más información:
Descargar:
http://download.netbeans.org/netbeans/6.5/beta/index.html?cid=926302
Documentación del lanzamiento:
http://www.netbeans.org/community/releases/65/index.html?cid=926302
Tutoriales y documentación:
http://www.netbeans.org/kb/index.html?cid=926302
Agosto 14, 2008 at 2:49 pm · Filed under PHP
Han sido descubiertas varias vulnerabilidades en PHP 4.4.x que podrían
permitir a un atacante remoto acceder a información sensible, causar una
denegación de servicio o comprometer un sistema vulnerable.
…
A continuación se detallan los problemas de seguridad corregidos en la
última versión:
* La primera vulnerabilidad consiste en múltiples errores en la librería
PCRE (Perl Compatible Regular Expressions) que podrían ser aprovechados
para acceder a información sensible, causar una denegación de servicio o
comprometer un sistema vulnerable.
* La segunda vulnerabilidad está causada por un error no especificado en
la función “imageloadfont”. Un atacante remoto podría provocar que el
sistema dejase de responder mediante el uso de una fuente no válida.
* La tercera vulnerabilidad consiste en un error no especificado en la
extensión “curl” relacionado con el manejo de la función “open_basedir”.
* La última vulnerabilidad está causada por un fallo de desbordamiento
en la función “memnstr” que podría ser aprovechado por un atacante para
ejecutar código arbitrario.
Las vulnerabilidades están confirmadas para la versión 4.4.8 y todas las
anteriores.
Se recomienda actualizar a la versión 4.4.9 o superior
Fuente:
Hispasec - una-al-día - 13/08/2008
Agosto 13, 2008 at 11:33 am · Filed under Proyecto phpAurora
La idea de un generador de clases, es que mediante una GUI simple, se pueda contruir una clase con todos sus atributos, métodos y mapeo a la Base De Datos.
En lineas generales un buen generador de clases tiene que tener:
Una GUI simple, de facil uso y completa
Tener en cuenta, la clase, atributos, métodos, tablas
Proveer el mapeador para la Base De Datos
Implementar patrones
Implementar la gestión de las configuraciones de una manera centralizada y única (Singleton)
Dividir la clase en si, del mapeo y carga
Permitir cargar un objeto en particular
Permitir la carga de multiples objetos del mismo tipo
Permitir la creación y actualización persistente de los objetos
Soporte para Herencia y Asociación
Ser independiente del motor de Base De Datos
Ésto es lo que me propongo crear, un mapeador/generador de PHP hecho en Java.
Va a llevar tiempo y esfuerzo, pero pienso que sea OpenSource y gratuito, para que todo el que quiera ayudar o contribuir, lo logre con un pequeño esfuerzo.
Web del Proyecto:
http://code.google.com/p/phpaurora/
Agosto 11, 2008 at 11:55 am · Filed under PHP
Leyendo un articulo sobre PHP-GTK me encuentro con un ejemplo en el que usa un If else comprimido muy interesante, sobre todo para cuando tenemos que hacer comprobaciones simples.
La sintaxis es la siguiente:
echo ($condicion) ? "Es verdadera" : "Es Falsa";
eso, equivale a un:
if($condicion)
{
echo "Es verdadera";
}
else
{
echo "Es Falsa";
}
Acotra mucho el código e incrementa la legibilidad para que no sea tan engorroso, sobretodo cuando se mezcla PHP con HTML.
Se denominan Operadores Ternarios (gracias Joan, Embat Consultors) y no sirven para bifurcar los caminos de la ejecución, solo se emplean para asignaciones condicionales (gracias andres)
El ejemplo en el que fue usado, es claramente contundente:
dl('php_gtk.'.( strstr(PHP_OS,'WIN') ? 'ddl' : 'so') );
En este caso arma un string con el nombre de una librería, en el caso de que php corra sobre windows (condición verdadera) el archivo será php_gtk.ddl en otro caso, como Linux php_gtk.so.
Como notan, puede usarse cualquier función en la pregunta, en este caso hace un strstr es decir, que si en algún momento de la cadena constante PHP_OS sale ‘WIN’ devuelve true.
strstr
Devuelve toda la cadena pajar desde la primera aparición de aguja hasta el final.
PHP_OS
Devuelve información sobre el sistema operativo en el que está corriendo PHP
- Windows NT XN1 5.1 build 2600
- Linux localhost 2.6.21-0.13 #1 Fri Mar 14 15:08:06 EST 2003 i686
Entradas Anteriores »