Add-ons que uso en Mozilla Firefox

Los 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

Utilizando 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.

Cron Bash

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

cron.jpg

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 =)

Recien 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

Objetivo: 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

Para 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">

Videos
Gustavo Raúl Aragón
gustavo@joomlaspanish.org
joomlaspanish.org
12/01/2008
Copyright (C) Mis perros. Sociedad Anónima de responsabilidad Intangible.

http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL 0.01
Insertar Videos

videos.php

[/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..

Programe 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:
Joomla 15

API de google para generar gráficos estadísticos

Google 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]Gráfico circular: Estadística de acceso por navegadores[/html]

Resultado:

Gráfico circular: Estadística de acceso por navegadores

Nota: El único limitante es que google solo nos permite 50,000 consultas por día.

Videotutoriales CakePHP

Buscando 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..”

Estructura de la base de datos Joomla 1.5

Me 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

En 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.. =)

com_empleados.jpg

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

El siguiente esquema fue creado por Torkil Johnsen. En el foro de desarrolladores Joomla! se puede seguir la evolución del mismo.

thumb_joomla_15_database_schema.png

Funciones de la rama Joomla 1.0.X que se dejaran de usar en Joomla 1.5

  • 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

Deprecated (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

La 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

01Sangre 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 =