Add-ons que uso en Mozilla Firefox
Publicado por gustavo - 04/05/08 a las 10:05:19 pmLos Add-ons de Mozilla Firefox en estos últimos tiempos han pasado a ser el caballito de batallada de muchos desarrolladores/diseñadores que trabajan en base a entornos webs. Su amplia variedad de soluciones y principalmente la versatilidad de poder armar nuestro navegador al mejor estilo lego, hacen que nuestro trabajo diario sea un poco menos tedioso.
A continuación una pequeña lista de Add-ons que suelo utilizar con frecuencia:
- Firebug

- Greaasemonkey
- Live HTTP Headers
- Measurelt
- Regular Expression Tester
- View Source Chart
- Web Developer
- ColorZilla
- Screen Grab
Luego reviso las que tengo instalada en windows y actualizo la lista. =)
Automatizar los backups de nuestra base de datos
Publicado por gustavo - 13/01/08 a las 07:01:04 pmUtilizando el poder divino que nos brindan nuestros viejos amigos BASH y CRON, aprenderemos como automatizar en uno simples pasos una de las tareas mas tediosas con las que puede contar un administrador: LOS BACKUPS!
1. Creamos un archivo del tipo backupdb.sh (Extensión sh = Shell Script), copiamos y pegamos el siguiente código. Configurar con nuestros datos.
[CODE]
# DEFINIR VARIABLES
DBNOMBRE=mibasededatos
DBPASSWORD=mipassword
DBUSUARIO=miusuario
EMAIL=”mi@email.com”
mysqldump –opt -u$DBUSUARIO -p$DBPASSWORD $DBNOMBRE > backup.sql
gzip backup.sql
FECHA=`date “+%Y-%m-%d”` ; mv backup.sql.gz $DBNOMBRE-backup-$FECHA.sql.gz
echo “La copia de seguridad ha sido creada de forma exitosa. Base de datos: $DBNOMBRE Fecha: $FECHA” | mutt -a $DBNOMBRE-backup-$FECHA.sql.gz $EMAIL -s “Mi sitio X: Backup del dia: $FECHA”
rm $DBNOMBRE-backup-$FECHA.sql.gz
[/CODE]
2. Abrimos el ftp. Una vez logeados, subimos en el directorio /etc de nuestro root el archivo anteriormente creado. Importante: si no asignamos permisos de ejecución el script no funcionara.

3. Entramos en nuestro Cpanel. Cron jobs -> Seleccionar: [Modo Avanzado]. Configuramos el script para que se ejecute todo los días a las 12:30 PM

Resultado Final:
Asunto: Mi sitio X: Backup del día: 2008-01-13
De: XXX@ServidorX
Cuerpo del mensaje: La copia de seguridad ha sido creada de forma exitosa. Base de datos: tu_base_de_datos Fecha: 2008-01-13
Archivo adjunto: tu_base_de_datos-backup-2008-01-13.sql.gz
Tip: Para saber la hora en la que esta configurada el servidor, creamos un archivo del tipo hora.php y le pegamos el siguiente código:
[PHP]
< ?php
echo date('h:i:s');
?>
[/PHP]
Joomla 1.5 : Zona Experimental =)
Publicado por gustavo - 13/01/08 a las 05:01:13 amRecien termino de instalar en un subdirectorio del dominio una versión de Joomla 1.5 actualizada vía svn al 07/01/2008. Allí iré poniendo diferentes módulos, componentes, plugins y hacks que valla programando en el transcurso de los meses.
Nota: Instalados los plugins de vídeo y el de wikipedia para que los vean en pleno funcionamiento. =)
Plugin para Joomla 1.5 : Enlazar artículos de la Wikipedia
Publicado por gustavo - 13/01/08 a las 05:01:54 amObjetivo: Enlazar de la manera mas simple posible los artículos que se encuentran en la Wikipedia en Español.
Uso: [wiki]Joomla![/wiki]
[php]
< ?php
/**
* Autor: Gustavo Raúl Aragón
* Email: gustavo@joomlaspanish / info@delirius.com.ar
* Licencia: GNU/GPL
**/
defined('_JEXEC') or die('Restricted access');
$mainframe->registerEvent(’onPrepareContent’, ‘plgWiki’);
/**
* Función de búsqueda y remplazo
**/
function plgWiki(&$row, &$params, $page) {
// WIKIPEDIA -> [wiki]palabra de referencia[/wiki]
$patronWikipedia = ‘#\[wiki\](.*?)\[/wiki\]#si’;
$wikipedia = ‘\\1‘;
$row->text = preg_replace($patronWikipedia, $wikipedia, $row->text);
}
?>
[/php]
Plugin para Joomla 1.5 : Insertar vídeos de Google y Youtube
Publicado por gustavo - 12/01/08 a las 07:01:20 amPara el aprendizaje no hay nada mejor que la puesta en practica de los conocimientos adquiridos, por lo cual siempre es bueno ir fijando pequeñas metas.. en este caso la idea básica era crear un plugin que me permitiera insertar vídeos de youtube y google en Joomla 1.5. El código es bien simple, pero puede resultar muy ejemplificador para aquellos que están luchando con la mala documentación de Joomla! :)
[XML]
< ?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/plugin-install.dtd">
[/XML]
[PHP]
< ?php
/**
* Autor: Gustavo Raúl Aragón
* Email: gustavo@joomlaspanish / info@delirius.com.ar
* Licencia: GNU/GPL
* Notas: Patrones de búsqueda basados en el bbcode de Dragonfly CMS
*/
// ehhh.. ups!
defined('_JEXEC') or die('Restricted access');
$mainframe->registerEvent(’onPrepareContent’, ‘plgVideos’);
/***********************************************
* Función de búsqueda y remplazo de patrones *
***********************************************/
function plgVideos(&$row, &$params, $page) {
// YOUTUBE -> Uso: [youtube]id del vídeo[/youtube]
$patronYoutube = ‘#\[youtube\]([^ \"\n\r\t< ]*?)\[/youtube\]#si’;
$youtube = ‘
‘;
$row->text = preg_replace($patronYoutube, $youtube, $row->text);
// GOOGLE VIDEO -> Uso: [google]id del vídeo[/google]
$patronGoogleVideo = ‘#\[google\]([^ \"\n\r\t< ]*?)\[/google\]#s’;
$google = ‘
‘;
$row->text = preg_replace($patronGoogleVideo, $google, $row->text);
}
?>
[/PHP]
Ejercicios Joomla 1.5: explique el código..
Publicado por gustavo - 11/01/08 a las 06:01:16 amPrograme una pequeña función, pero por no documentar olvide lo que hacia.. alguien podría explicarme linea a linea que fue lo que hice? =)
[PHP]
< ?php
function getFlashNoticias() {
$query = 'SELECT id, title, hits, LEFT(introtext, 40) AS descripcion FROM #__content WHERE catid = 3 ORDER BY id LIMIT 0,5';
$db =& JFactory::getDBO();
$db->setQuery($query);
$rows = $db->loadObjectList();
foreach ( $rows as $row ) {
if ($row->descripcion != null) {
$intro = strip_tags(”$row->descripcion”);
$enlace = JRoute::_(”index.php?option=com_content&view=article&id=$row->id”);
$generarPDF = JRoute::_(”index.php?view=article;&id=$row->id&format=pdf”);
echo ” $row->title: $intro . Leído: $row->hits veces | Descargar PDF
“;
}
}
}
getFlashNoticias();
?>
[/PHP]
Resultado final:

API de google para generar gráficos estadísticos
Publicado por gustavo - 10/01/08 a las 08:01:20 pmGoogle Charp API, es una interesante librería de Google que nos permite agregar de forma dinámica gráficos estadísticos del tipo: barras, líneas, circulares, áreas, mixtos, etc. en nuestro sitio web . Su uso de bien sencillo, lo uno que solo debe tener en cuenta son los parámetros de asignación. Veamos un pequeño ejemplo:
Necesitamos crear un circulo tridimensional con el porcentaje de navegadores utilizados para ingresar al blog x:
Explicación:
http://chart.apis.google.com/chart? -> Url principal
& -> Separador
cht=p3 -> Tipo de gráfico: Circulo tridimensional
& -> Separador
chco=1296e2 -> Color
& -> Separador
chs=450×150 -> Tamaño del gráfico en píxeles
& -> Separador
chd=t:45,37,10,5,3 -> Porcentajes
& -> Separador
chl=Internet Explorer|Firefox|Opera|Safari|Otros -> Etiquetas que describen los porcentajes.
Uso:
[html][/html]
Resultado:
Nota: El único limitante es que google solo nos permite 50,000 consultas por día.
Videotutoriales CakePHP
Publicado por gustavo - 23/09/07 a las 11:09:41 amBuscando información para lograr una buena documentación sobre este exelente framework, di con el blog personal del brasileño Tulio Vitor, un programador avanzado que ha creado una exelente serie de videotutoriales que nos introducirían en el mundo cake. Cabe aclarar que los vídeos están en portugués, pero como dice el dicho.. “una imagen vale mas que mil palabras..”
- Introducción
- Añadiendo comentarios a los posts
- Creando categorías (hasAndBelongsToMany)
- Iniciando la parte administrativa - Sesión (session)
- Admin route
- Integración con TinyMCE
- Usando Bake y ganando aún más productividad con CakePHP
- Relaciones hasAndBelongsToMany
Estructura de la base de datos Joomla 1.5
Publicado por gustavo - 05/08/07 a las 04:08:24 amMe tome el trabajo organizar de forma mas clara la información sobre los cambios estructurales que se producen en la base de datos de Joomla 1.5 en comparación con la rama 1.0.X . El texto original lo pueden encontrar en Migrating to 1.5: Table Changes
Tablas agregadas:
- Banner Track
- Menu Types
Tablas removidas:
- Banner Finish
- Template Position
- User Types
Tablas renombradas:
- Mambots -> Plugins
Seguir leyendo Estructura de la base de datos Joomla 1.5…
Componente “Empleados” para Joomla 1.5
Publicado por gustavo - 28/07/07 a las 08:07:29 amEn el día de ayer estuve jugando un rato con Joomla 1.5 RC1 y su api. Dada la potencia de la nueva version, me permitió armar un componente básico en unos minutos. Ahora solo me queda solucionar el problema de edición con los datos previamente insertados (JOutputFilter :X ) agregar el sistema de paginación y pasarlo 100% al modelo MVC , para luego subir la carcasa.. tal vez le sirva de ayuda a mas de uno.. =)

Nota: El componente solo fue creado a modo de practica por lo cual carezera de cualquier tipo de soporte.
Joomla! 1.5: Esquema de la base de datos
Publicado por gustavo - 05/07/07 a las 11:07:32 amEl siguiente esquema fue creado por Torkil Johnsen. En el foro de desarrolladores Joomla! se puede seguir la evolución del mismo.
Funciones de la rama Joomla 1.0.X que se dejaran de usar en Joomla 1.5
Publicado por gustavo - 05/07/07 a las 10:07:24 am- deldir
- doGzip
- initGzip
- mosChmod
- mosChmodRecursive
- mosGetBrowser
- mosGetOS
- mosIsChmodable
- mosMakePath
- mosParseParams
- mosPathName
- mosPathWay
- mosReadDirectory
- mosShowSource
Clases de la rama Joomla 1.0.X que se dejaran de usar o cambiaran de nombre en Joomla 1.5
Publicado por gustavo - 05/07/07 a las 10:07:47 amDeprecated (dejan de usarse):
- database
- mosAbstractTasker
- mosCache
- mosDBTable
- mosEmpty
- mosMainFrame
- mosMambotHandler
- mosProfiler
Cambian de nombre:
- mosParamaters -> JParameters
- mosCategory -> JCategoryModel
- mosComponent -> JComponentModel
- mosContent -> JContentModel
- mosMambot -> JMambotModel
- mosMenu -> JMenuModel
- mosModule -> JModuleModel
- mosSection -> JSectionModel
- mosSession -> JSessionModel
- mosUser -> JUserModel
Ayuda memoria sobre sql Inyección
Publicado por gustavo - 29/03/07 a las 02:03:34 pmLa gente ferruh.mavituna.com ha creado un interesante ayuda memoria sobre el conocido ataque “SQL Injection” que nos servirá a la hora de testear la seguridad de nuestros desarrollos que hacen uso de las siguientes bases de datos: MySQL, Microsoft SQL Server, Oracle y PostgreSQL.
A continuación veremos un pequeño ejemplo:
producto.asp?id=4
1. producto.asp?id=5-1
2. producto.asp?id=4 OR 1=1
producto.asp?name=Book
1. producto.asp?name=Bo’+’ok
2. producto.asp?name=Bo’ || ’ok (OM)
3. producto.asp?name=Book’ OR ‘x’=’x
Buenas practicas de programación
Publicado por gustavo - 25/03/07 a las 04:03:35 pm01Sangre las instrucciones correspondientes al cuerpo de toda instruccion de control.
02Coloque una linea en blanco antes y después de cada instruccion de control, para que resalten en el programa. Tener demasiado niveles de anidamiento, puede provocar que un programa sea difícil de entender. Como regla general, intente evitar el uso de mas de tres niveles de anidamiento.
03Combinar espaciado vertical, antes y después de las instrucciones de control, con sangría en los cuerpos de dichas instrucciones, proporciona a los programas una apariencias bidimensional, la cual mejora bastante la legibilidad del programa.
04Aunque las instrucciones se preceden a for y las instrucciones del cuerpo de un for, a menudo se puede fusionar dentro de un encabezado for, evite hacerlo, ya que esto ocasiona que el programa sea mas difícil de leer.
05Si es posible limite el tamaño de los encabezados de las instrucciones de control a una sola linea.
06Proporcione un caso default en las instrucciones switch. Los casos no evaluados explícitamente en una instruccion switch, se ignoran, El caso default ayuda a evitar esto, al hacer que el programador se enfoque en la necesidad de procesar condiciones excepcionales. Existen situaciones en las que no se necesita un default.
07Cuando una expresión de igualdad tiene una variable y una constante, como en x == 1, algunos programadores prefieren escribir la expresión con la constante de lado izquierdo y el nombre de la variable del derecho, como protección con el error lógico que ocurre cuando el programador accidentalmente remplaza el operador == con =