Entendiendo Yii
Yii – Yes, it is
Un framework es un conjunto de código, librerías y componentes de software probados, optimizados para facilitar y agilizar el desarrollo de aplicaciones, basado en las mejores prácticas de desarrollo, que permitirán trabajar de forma uniforme, organizada y con la mayor cálidad posible. Normalmente cuentan con documentación, una comunidad organizada que constantemente esta trabajando y luchando por su constante desarrollo y mantenimiento. Los frameworks tienen la intención de enfocar el trabajo de programación a las áreas que realmente agregaran un valor al negocio y que supondrán la esencia de la aplicación que se construirá, por ello intenta restarle trabajo a los programadores en áreas mas triviales a estas alturas como la validación de campos, operaciones de consultar, insertar, modificar y eliminar por decir algunos ejemplos.
Yii es un framework de desarrollo de alto rendimiento, muy flexible y versátil, escrito en PHP5 para el desarrollo rápido de aplicaciones web. Yii es software libre liberado bajo una licencia BSD, y tiene la concepción de hacer las cosas de manera sencilla, elegante y rápidas, ayudando con esto a construir aplicaciones eficientes, que fácilmente pueden ser mantenidas y escaladas.
Yii le presenta al programador un código fuente limpio, sencillo y entendible que roza con lo intuitivo de como que hace cada trozo de código y que significa cada elemento.
Yii es una opción idónea para desarrollos de sistemas pequeños hasta para desarrollos de grandes aplicaciones que necesiten garantizar la disponibilidad de la misma.
Yii es un acrónimo de Yes, it is! proveniente de la respuesta que el proyecto Yii le da a los que por primera vez se plantean si adoptar su uso:
Is it fast? … Is it secure? … Is it professional? … Is it right for my next project? … Yes, it is!
¿Es rápido? … ¿Es seguro? … ¿Es profesional? … ¿Es lo que necesito para mi próximo proyecto? … Sí, lo es!
Algunos otros frameworks existentes:
- Symfony (PHP) – symfony.com
– CakePHP (PHP) – cakephp.org
– CodeIgniter (PHP) – codeigniter.com
– Ruby on Rails (Ruby) – rubyonrails.org
– Catalyst (Perl) – catalystframework.org
– Django (Python) – djangoproject.com
-
Por que escoger Yii
Yii es un framework genérico de programación Web que puede ser utilizado para todo tipo de aplicaciones Web. Gracias a que es liviano de correr y está equipado con soluciones de cacheo sofisticadas, es adecuado desde para desarrollar aplicaciones de gran tráfico como portales, foros, CMS, e-commerce, etc… Hasta para desarrollar aplicaciones de mayor complejidad que necesiten interconexión y interoperabilidad de sistemas, bases de datos, webservices, etc…
- Rápido
Yii sólo carga las características que usted necesita. Tiene excelente y poderoso soporte de caché. Esta explícitamente diseñado para trabajar eficientemente con AJAX.
Yii es mucho más rápido, ya que utiliza la técnica de carga diferida ampliamente, es decir se carga, interpreta o procesa contra demanda únicamente lo que se solicita, Por ejemplo, no se incluye un archivo de clase hasta que la clase se utiliza por primera vez, y no se crea un objeto hasta que el objeto se accede por primera vez. Otros frameworks sufren mucho el impacto del rendimiento, ya que permiten una funcionalidad (por ejemplo, conexión DB, sesión de usuario, etc…) independientemente de que se usen o no durante una petición.
- Seguro
La seguridad es un estándar en Yii. Éste incluye la validación de entradas, filtrado de salidas, prevención de inyección SQL y Cross-site scripting.
Yii está equipado con medidas de seguridad para ayudar a proteger sus aplicaciones web de ataques como inyección SQL, cross-site scripting (XSS), cross-site request forgery (CSRF), y de manipulación de cookies (Cookie Tampering).
- Profesional
Yii le ayuda a desarrollar un código limpio y reutilizable. Sigue el patrón MVC, lo que garantiza una clara separación de la lógica del negocio y la presentación. Fomenta la sinergia en equipos de desarrollo y promueve activamente métodos ágiles de trabajo que son ideales para combinar con metodologías como SCRUM o XP
Probando LibreOffice 4 – Para todos los gustos
Lo primero es descargar la nueva versión de LibreOffice 4 desde su página y según el gestor de paquetes de tu distribución de linux en este caso paquetes .deb (que pueden instalar en Debian, Ubuntu, Canaima, o Linux Minty), arquitectura (32 ó 64), en esta entrada descargaremos y instalaremos LibreOffice Linux – deb (x86_64), versión 4.0.1, Español . Deberán hacer tres descargas, el instalador de LibreOffice4, el idioma de la interfaz y la ayuda.
Luego descomprimir los tres archivos con extensión .tar.gz que descargaron y colocar en un mismo directorio puede ser uno que creen que se llama LibreOffice4,
Abrir un terminal y realizar lo siguiente:
cd /home/lenin/Descargas/LibreOffice4/
dpkg -i LibreOffice_4.0.1.2_Linux_x86-64_deb/DEBS/*
dpkg -i LibreOffice_4.0.1.2_Linux_x86-64_deb/DEBS/desktop-integration/libreoffice4.0-debian-menus_4.0.1-2_all.deb
dpkg -i LibreOffice_4.0.1.2_Linux_x86-64_deb_langpack_es/DEBS/*
dpkg -i LibreOffice_4.0.1.2_Linux_x86-64_deb_helppack_es/DEBS/*
Si no ocurrió ningún error deberían tener LibreOffice4 correctamente instalado y listo para usar.
Monty Widenius habla sobre NoSQL y Big Data

Creador de MaxDB, MySQL y MariaDB
Michael Widenius comenta:
“La razón principal de que NoSQL se hiciera popular es que, a diferencia de SQL, se puede comenzar a utilizarlo sin diseño alguno. Esto hace que sea más fácil comenzar con NoSQL”
“Entonces, los beneficios principales (al menos antes de MariaDB) de la mayoría de soluciones NoSQL son:
✓ Acceso rápido a los datos (siempre y cuando pueda tener todo en la memoria)
✓ Replicación rápida de datos repartidos en muchos nodos.
✓ Esquema flexible (se puede añadir nuevas columnas al instante).”
“Más rendimiento y más esquemas flexibles son los dos principales impulsores de NoSQL.”
“SQL no va a desaparecer. NoSQL no puede reemplazarlo. Casi todo el mundo necesitara relaciones (JOIN’s) para utilizar sus datos. Sin embargo, hay lugares donde NoSQL tiene sentido. Creo que, en el futuro, se verá más combinado SQL y el uso de NoSQL.”
Entrevista completa: http://readwrite.com/2013/01/21/dont-write-off-relational-databases-for-big-data-just-yet
Perl – convertir ISO-8859-1 a UTF-8
Perl usa como codificación de caracteres a UTF-8 de forma predeterminada, sin embargo es común que perl tenga que interactuar con otros juegos de caracteres provenientes de fuentes de datos externos como archivos de texto, csv o bases de datos donde los caracteres sean representados típicamente en ISO-8859-1 también conocido como Latin1 si provienen de sistemas windows,colocándonos así en la tarea de tener que convertir ó transformar la codificación de los caracteres con los que estemos trabajando para así cumplir nuestros objetivos de programación.
El principal problema o dolor de cabeza de datos codificados en Latin1 presentes en entornos utf8 es la representación de caracteres especiales como (ñ y Ñ) y las letras acentuadas (con acentos) como [á,é,í,ó,ú,Á,É,Í,Ó,Ú,à,é,Á,É] que son mostrados con algo similar a: �.
El siguiente perl script usa el módulo Encode para transformar caracteres ISO-8859-1 provenientes de una base de datos MySQL a UTF-8, que para los efectos de esta entrada serán imprimidos por pantalla tanto la data original como la convertida en UTF-8.
#!/usr/bin/perl -w
use DBI;
use Encode;
$bd = DBI->connect("DBI:mysql:basededatos:host","usuario", "clave", { PrintError => 1}) || die $DBI::errstr;
$sth=$bd->prepare('SELECT * FROM noticias order by id asc limit 2000');
$sth->execute();
while(@consulta =$sth->fetchrow_array()){
print "id: ".++$incremeta_id;
print " Titulo original: ".$consulta[1]." - ";
print "Convertido UTF-8: ".encode('utf-8', $consulta[1])."\n";
}
print "\t\t\n $incremeta_id registros convertidos a UTF-8\n";
$sth->finish;
La función encode que vemos en la linea 13 recibe dos (2) parámetros. El primero el juego de caracteres que necesitamos y el segundo la cadena de texto (string) a realizar la conversión.
$utf8-string = encode("utf8", $string);
id: 1990 Titulo original: Se entreg� este a�o mil becas de Maestr�a y Doctorado – Convertido UTF-8: Se entregó este año mil becas de Maestría y Doctorado
id: 1991 Titulo original: Vecinos: “Grabaci�n aclara m�s la masacre” – Convertido UTF-8: Vecinos: “Grabación aclara más la masacre”
id: 1992 Titulo original: El inc�modo muerto – Convertido UTF-8: El incómodo muerto
id: 1993 Titulo original: Explosi�n de artefacto dej� tres heridos – Convertido UTF-8: Explosión de artefacto dejó tres heridos
id: 1994 Titulo original: Crudo repunt� a 26,60 d�lares por barril – Convertido UTF-8: Crudo repuntó a 26,60 dólares por barril
id: 1995 Titulo original: Peri�dico presentar� �Memoria – Convertido UTF-8: Periódico presentará Memoria
id: 1996 Titulo original: Derechos del ni�o – Convertido UTF-8: Internet: Derechos del niño
id: 1997 Titulo original: Recolecci�n de basura – Convertido UTF-8: Recolección de basura
id: 1998 Titulo original: “No m�s cuentos” – Convertido UTF-8: “No más cuentos”
id: 1999 Titulo original: GALER�A DE IM�GENES – Convertido UTF-8: GALERÍA DE IMÁGENES
id: 2000 Titulo original: Alcald�a entreg� donativo – Convertido UTF-8: Alcaldía entregó donativo
2000 registros convertidos a UTF-8
real 0m0.666s
user 0m0.052s
sys 0m0.020s
lenin@i5:~/Escritorio/convert$
Como resultado tenemos ya los caracteres legibles por pantalla, preparados para ser procesados, representados en otros medios ó almacenados en correcto UTF-8. El ejemplo fue realizado en Debian GNU-Linux.
Poblando SQLite con valores aleatorios en Python
Siguiendo esta entrada seremos capaces de poblar una tabla creada en SQLite, cuyos valores (usuario, nombre, apellido, password, cédula, fecha nacimiento, sexo, etc…) de cada campo serán generados de forma aleatoria, es decir seleccionando un valor de un arreglo o un rango determinado. El encargado de hacer todo esto será un sencillo script en python que recibe como argumento la cantidad de inserciones que le queremos realizar a la base de datos, lal cual creará el script en caso de que no exista. Este código fue escrito originalmente para probar las capacidades de carga y volumen de SQLite, fue adaptado a esta entrada con fines didácticos.
Por lo tanto esta sencilla práctica nos servirá básicamente entre otras cosas para:
- Aprender a usar SQLite con Python (conexión, crear tabla y hacer insert).
- Aprender a generar o seleccionar valores aleatorios con Python.
- Aprender a pasar y recibir argumentos en un script Python.
- Otros tips sobre Python.
Código Fuente
#!/usr/bin/python
# -*- coding: utf-8 -*-
# como usar: $time python test-sqlite.py 1000
import sys, datetime, sqlite3, hashlib
from random import *
db = sqlite3.connect("populate.sqlite")
dbconn = db.cursor()
crear_tabla = "CREATE TABLE IF NOT EXISTS usuarios( id_usuario INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, usuario varchar NOT NULL,"
crear_tabla = crear_tabla + "passwd VARCHAR NOT NULL, nombre VARCHAR NOT NULL, apellido VARCHAR NOT NULL, cedula VARCHAR NOT NULL,"
crear_tabla = crear_tabla + " fecha_nacimiento DATETIME NOT NULL, sexo char NOT NULL, perfil VARCHAR NOT NULL)"
str(dbconn.execute(crear_tabla))
list_nombre = ['Lenin','Ramiro','Alan','Rey','Elicer','Ana','Hugo','Ramon','Radames',
'Rosa','Dayana','Maria','Josefina','Pedro','Juan','Jose','Andres','Andrea']
list_apellido = ['Hernandez','Avalo','Rondon','Lima','Ponce','Gonzalez','Sifontes',
'Bello','Cardozo','Bermudez','Barreto','Fernandez','Delgado','Rodriguez']
if len(sys.argv) >= 2:
print "A continuacion se ingresaran ",sys.argv[1]," registros.";
else:
print "Este programa necesita el parametro de cantidad de registros a ingresar. Abortando Operacion.";
exit()
for i in range(int(sys.argv[1])):
fecha_nacimiento = datetime.datetime.today() - datetime.timedelta(days = randrange(1500, 25000))
nombre = choice(list_nombre)
apellido = choice(list_apellido)
cedula = str(randint(4000000, 21000000) )
sql = "INSERT INTO usuarios ('usuario','passwd','nombre', 'apellido', 'cedula', 'fecha_nacimiento', 'sexo', 'perfil') VALUES( "
sql = sql + "'" + nombre[0].lower() + apellido.lower() + "'"
sql = sql + ",'" + hashlib.md5(cedula).hexdigest() + "'"
sql = sql + ",'" + nombre +"','" + apellido + "'"
sql = sql + ",'" + cedula + "'"
sql = sql + ",'" + fecha_nacimiento.strftime('%Y-%m-%d') + "'"
sql = sql + ",'" + choice(['M','F']) + "'"
sql = sql + ",'" + choice(['ADMIN','ANALISTA','CONSULTA']) + "')"
try:
dbconn.execute(str(sql))
print "Se ingreso correctamentente el registro Nº " + str(i+1) + ": " + nombre + " " + apellido
except:
print sql + "\n Ocurrio un error", "Guardando los datos del usuario."
exit()
db.commit()
pgFouine – Análisis de logs PostgreSQL en Debian
PgFouine, analiza las bitácoras (logs) de la base de datos PostgreSQL para generar informes detallados sobre el uso y abuso de consultas SQL que bien sabemos tienen una gran incidencia en el rendimiento y la carga que tendrá el manejador de base de datos y el servidor que lo aloje, con fin de optimizar y realizar los ajustes necesarios para mejorar el desempeño del mismo. Esta escrito en el lenguaje de programación PHP y se distribuye como software libre por lo que podrían generar los informes con logo personalizado, agregar particularidades, funcionalidades, mejorarlo, etc…
¿Como funciona pgFouine?
PgFouine realiza un análisis al archivo de log generado por PostgreSQL con el cual genera informes, que nos indicara que consultas SQL son las que mas tardan, cuales son mas frecuentes, cuantas consultas DML están presentes en ese archivo log, inclusive generando gráficos los cuales nos facilitara mucho la tarea de determinar o hacer seguimiento al comportamiento de nuestras bases de datos.
En un sistema operativo Debian GNU/Linux ó alguno de sus derivados(Canaima, Mint, Ubuntu) lo instalamos con un sencillo:
#aptitude install pgfouine
También pueden descargar el código fuente y luego de descomprimir el .tar.gz ejecutar con php el archivo pgfouine.php
pgFouine puede ser usado de dos maneras. Configurando los logs que genera PostgreSQL para usar las facilidades de syslog del sistema operativo, o mediante salida estándar stderr que es como viene por defecto la configuración del log generado por el manejador de base de datos. El propio equipo de pgFouine recomienda usar la vía del syslog por que resulta mas eficiente para su software ya que mediante la via stderr se pudieran encontrar inconsistencias en el informe generado. Nosotros usaremos la via del syslog.
Abrir con el editor preferido (nano, vi, vim, emacs, edit, etc… ) el archivo de configuración de postgresql: /etc/postgresql/8.4/main/postgresql.conf
ubicar la sección:
#——————————————————————————
# ERROR REPORTING AND LOGGING
#——————————————————————————
descomentar la siguiente linea:
#log_destination = 'stderr'
y dejarla asi:
log_destination = 'syslog'










