Higurashi no Naku Koro ni



Hoy en la madrugada metideando en Asia Team descubrí que hay un Live Action de uno de mis Animes favoritos. Obviamente me puse a descargarlo a todo vapor y para cuando estaba amaneciendo me extasie al ver el pueblo de Hinamizawa a todo gato color.-



Los links (dd) son:
  1. http://www.megaupload.com/?d=KBWNV54E
  2. http://www.megaupload.com/?d=5DAPX13W
  3. http://www.megaupload.com/?d=9NJOS1KW
  4. http://www.megaupload.com/?d=EJ7ISCNF
  5. http://www.megaupload.com/?d=IG4BWKV4
  6. http://www.megaupload.com/?d=KT2O3DQI
  7. http://www.megaupload.com/?d=030DEENP
  8. http://www.megaupload.com/?d=JBJZ55AA
Notas:
  • La contraseña para el .rar: neokenzo
  • Los links los tome del foro de Asia Team.-
  • Incluye un .srt en inglés.-
  • Para el .srt en español ve aquí.-

HOW-TO eBusiness Cluster (Parte 3 - Fin)

REPLICACION DE MySQL.-




IN ANOTHER LIFEEEEEE !

CONFIGURACIONES DEL DNS.-



Editar el archivo /etc/bind/named.conf.local para que quede así:

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

// Aqui van mis zonas tanto directa como inversa

zone "tacruel.net" {
type master;
file "/etc/bind/zones/db.tacruel.net";
};

// zona gay
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1";
};


Ingresamos nuestro forwarding /etc/bind/named.conf.options y nos queda asi:

//

// Do any local configuration here

//


// Consider adding the 1918 zones here, if they are not used in your

// organization

//include "/etc/bind/zones.rfc1918";


// Aqui van mis zonas tanto directa como inversa


zone "tacruel.net" {

type master;

file "/etc/bind/zones/db.tacruel.net";

};

// zona gay

zone "1.168.192.in-addr.arpa" {

type master;

file "/etc/bind/zones/db.192.168.1";

};



Editamos el archivo de las interfaces /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
#iface eth0 inet static

auto eth0
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1



Al archivo /etc/resolv.conf se le agrega la siguiente información:

domain tacruel.net
search tacruel.net
nameserver 192.168.1.101


Después se crea las zonas e inicio con la resolucion directa que es nuestro archivo /etc/bind/zones/db.tacruel.net y su contenido es:

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA tacruel.net. root.tacruel.net. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS tacruel.net.
@ IN A 192.168.1.101
www IN CNAME tacruel.net.
host1 IN CNAME www
host2 IN CNAME www
@ IN AAAA ::1


Ahora nuestra zona gay en el archivo /etc/bind/zones/db.192.168.1 y su contenido es:

;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA tacruel.net. root.tacruel.net. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS tacruel.net.
101 IN PTR tacruel.net.
11 IN PTR host1.tacruel.net.
8 IN PTR host2.tacruel.net.


El archivo /etc/hosts debe tener la siguiente configuración:

#127.0.0.1 localhost

#127.0.1.1 nodo2.home nodo2


#Aquí nuestro cluster

127.0.0.1 localhost.localdomain localhost

192.168.1.101 ns.tacruel.net ns

192.168.1.11 host1.tacruel.net host1

192.168.1.8 host2.tacruel.net host2


# The following lines are desirable for IPv6 capable hosts

::1 localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

ff02::3 ip6-allhosts



SCRIPT PARA EL ARRANQUE DE PROCESOS AL INICIO DE SESION:

#! /bin/sh
# /etc/init.d/lanzapen
#

# Inicio Script del Cluster hecho por PEN y la mara.-

case "$1" in
start)
ifconfig eth1 172.16.1.1 up
pen 443 -l /var/log/pen.log -p /var/log/pen.pid -w /var/www/html/pen.html -h -f -d -e 192.168.1.8:443 192.168.1.11:443

;;
esac

exit 0

Por cierto:
  • Solo utilizamos la inicialización del PEN ya que no necesitaremos detener, reiniciar ni recargar el servicio debido a que PEN tomo el control de la terminal y utilizado de la forma en que lo hemos puesto no termina de arrancar el sistema.-
  • Si quieres saber más de como crear scripts sh, bueno googlea.-

UN PAR DE TONTERAS:

  • Para facilitarnos un poco las cosas al estar trabajando en equipo (ja!) utilizamos SSH, si quieres saber más dale una mirada a esto.
  • También travesiamos vinagre.-
  • Si lo hacen en Bleach y Naruto, por qué no nosotros ? .... si .... relleno:


Marely chateando con Sofie, Toño viendo .... documentales ?


Qué que queeee!


Uno de los pocos momentos que si estabamos disque trabajando


Digan no al tequila, al menos los lunes


Para la primera defensa, creo que he visto demasiado Anime & KDoramas


Trabajando o descargando películas ?


3 noches sin dormir


Subida clandestinamente, no le digan a Marely


Bueno, hasta aquí.-

HOW-TO eBusiness Cluster (Parte 2)

joomla! + Virtuemart.-




Joomla! es una herramienta de desarrollo web para crear sitios de contenido (CMS). Es una aplicación de código abierto construida mayoritariamente en PHP bajo una licencia GPL. Este administrador de contenidos puede trabajar en Internet o intranets y requiere de una base de datos MySQL, así como preferiblemente de un servidor HTTP Apache.-

Virtuemart es un módulo para joomla! con el cual se facilita la creación de un sitio dedicado al comercio electrónico.-

Como dijimos al final de la Parte 1, no vamos a reinventar la rueda:

Después de todo lo anterior, agregamos una nueva plantilla para el sitio y empezamos a levantar inventario. Generamos:
  • Casas Editoras.-
  • Libros por Casas Editoras.-

PEN.-



PEN es un balanceador de carga basado en TCP, brinda un servicio de balanceo de carga de trabajo cuando detecta un servidor abajo. Su función es brindar alta disponibilidad. Pen nos va a servir para tener una web siempre disponible. Actua como proxy entre 2 servidores puede servir de forma temporal para dar servicio web en un dominio determinado sin necesidad de redireccionar DNS. Cuando PEN detecta un servidor inalcanzable inmediatamente escanea en busca de otro servidor activo y elige el que se uso mas recientemente.-

Penlogd
  • El balanceo de carga produce muchos logs, pero penlog nos permite guardar en un solo archivo todos los log producidos por el web server.-

Webstats
  • La opcion -w puede ser usada para obtener estadisticas de señales en formato de html.-

Portabilidad
  • PEN puede ser utilizado en los siguientes sistemas FreeBSD, Linux, HP-UX y Solaris. A la vez corre en Windows, MacOS X.-

Para instalar:

#aptitude install pen

Esta es la linea ocupada para ejecutar el balanceo para el puerto 80:

#pen 80 -l /var/log/pen.log -p /var/log/pen.pid -w /var/www/html/pen.html -h -f -d -e 192.168.1.11:80 192.168.1.8:80

Para el puerto 443:

#pen 443 -l /var/log/pen.log -p /var/log/pen.pid -w /var/www/html/pen.html -h -f -d -e 192.168.1.11:443 192.168.1.8:443

PEN puede soportar hasta 15 servidores.-

VRRPD.-




VRRPD es la implementación del protocolo de VRRP, su finalidad principal es un protocolo que elige un servidor master en una LAN y un master de respuesta con una IP virtual. Para configurar el protocolo se siguieron los siguientes pasos:

#aptitude install vrrpd

Agregar la siguiente linea en la maquina del servidor maestro:

#vrrpd –i eth0 –v 10 – p 200 192.168.1.111

En el esclavo se agrega la linea seria la siguiente:

#vrrpd - i eth0 –v 10 – p 100 192.168.1.111

Después se debe asegurar que los dos servidores tengan la IP virtual 192.168.1.111

#ip addr show eth0

Con la opción ps ax podemos ver el estado del demonio

#ps ax

Para más detalles de los parámetros:

#man vrrpd


OpenSSL.-



Primero que nada, abri una consola como root. Para ver si esta instalado el OpenSSL digita:

#apt-cache search openssl

Si no lo esta:

#apt-get install openssl

Ya instalado, podemos librementre crear los certificados digitales.-

Creación de una CA (Autoridad Certificadora):

Para comenzar nos situamos en el directorio root de nuestro servidor web, en nuestro caso /var/www/app, creamos una carpeta ya que los comandos que ejecutaremos generan archivos y es prudente tenerlos ordenados:

host1:/var/www/app# mkdir CA
host1:/var/www/app# cd CA

Con el siguiente comando creamos un CA para certificados X509 con algoritmo de encriptación rsa de 2048 bytes. Con el -keyout le indicamos que la clave privada de nuestra CA se almacene en el fichero mipri.pem y la clave publica -out en el mipub.pem. Seguidamente nos pedirá un password para nuestra CA y se lo damos (Apuntarlo o memorizarlo ya que sirve para los próximos pasos). También nos pedirá una serie de datos por ejemplo país, nombre de empresa, que nos identifica como CA. Observar que le he añadido el parámetro -days con 3650, de esta manera indicamos que la CA no expire en 10 años.

host1:/var/www/app/CA# openssl req -x509 -newkey rsa:2048 -keyout mipri.pem -days 3650 -out mipub.pem

Creando el certificado digital:

Podremos hacer tantos como queramos los pasos son los mismos, ahora bien: Primero generamos la clave privada del que sera nuestro certificado digital: Con esto generamos la clave privada la cual tendrá un algoritmo de cifrado triple des (-des3) de 2048 y se almacenara en el archivo (-out) serv-priv.pem y con el comando -passout pass: indicamos la passfrase para nuestra clave privada yo le he puesto dlinux. Teniendo en cuenta que el algoritmo solo se puede hackear a fuerza de verga es importante tener en cuenta que entre mas digitos tenga la clave mas tiempo tardaran e descifrarla.

host1:/var/www/app/CA# openssl genrsa -des3 -out serv-priv.pem -passout pass:dlinux 2048


Generar la petición de certificado:

Ahora vamos a generar la petición del certificado, antes de hacer un certificado , hay que hacer una petición donde se define el propietario del certificado.

host1:/var/www/app/CA# openssl req -new -subj "/DC=tacruel.net/OU=net/CN=tacruel" -key serv-priv.pem -passin pass:dlinux -out petic-certificado-serv.pem

Observamos que le indicamos (req -new) con lo que indicamos que es una petición con el parámetro -subj le indicamos a quien pertenece el certificado, para ello ponemos entre comillas cada uno de los apartados que identifican separados por /. A la petición le indicamos que usara la clave privada que hemos hecho en el anterior comando -key serv-priv.pem y le indicamos el password que usemos en el anterior (-passing pass):dlinux y como salida (-out) le indicamos que genere el siguiente archivo petic-certificado-serv.perm

Emitir el certificado:

Finalmente ya podemos emitir el certificado. Para definir las características de un certificado openssl dispone del directorio /etc/ssl donde hay un archivo openssl.cnf con lo que podemos definir las características. Pero hay una forma mas simple de darle estas características, mediante la generación de un archivo de configuración por parte nuestra. Por tanto con nano generamos un archivo que contenga lo siguiente:

basicConstraints = critical,CA:FALSE
extendedKeyUsage = serverAuth

Y lo guardamos por ejemplo con el nombre config1.txt , en el archivo le indicamos el basicConstraints =critical,CA:FALSE para que cumpla con el X509v3 y con la RFC3280 (dogma de fé). Y también le indicamos que el certificado servirá para un servidor con lo siguiente extendedKeyUsage=serverAuth, por ejemplo un servidor web que es lo que queremos certificar. Y ahora con el archivo hecho, hacemos el certificado:

host1:/var/www/app/CA# openssl x509 -CA mipub.pem -CAkey mipri.pem -req -in petic-certificado-serv.pem -days 3650 -extfile config1.txt -sha1 -CAcreateserial -out servidor-cert.pem

Indicamos que sera un certificado del tipo x509 cuya CA (-CA) esta definida en el archivo mipub.pem (lo hemos hecho lo primero) y que usa como clave privada (-CAkey) el archivo mipri.pem y que el certificado a generar tendrá las especificaciones definidas en el apartado anterior (-req -in) las cuales están en el archivo de petición petic-certificado-serv.pem.

El certificado tendrá una validez de diez años (-days 3650). Y le indicamos que el certificado es para un servidor, como esto lo tenemos en nuestro archivo de configuración se lo indicamos poniendo -extfile y nuestro archivo config1.txt y utilizaremos un algoritmo de cifrado SHA (-sha1). Luego como es nuestro primer certificado le indicamos que la CA lo numere con lo cual le pondrá 2 , ya que el 1 es la CA -CAcreateserial y finalmente le decimos donde generar el certificado (-out) en el archivo servidor-cert.pem

Una vez lanzado el comando nos pedirá el password de la CA que lo emite y el archivo se generará.

Ciertas configuraciones:

Copien los archivos servidor-cert.pem y servidor-priv.pem en /etc/apache2/ssl si no existe el directorio ssl hay que crearlo, solo sirve para guardar esto en algún lado y que apache sepa de él. Al apache2 hay que indicarle que también escuche por el puerto 443 que es el del Secure Socket Layer (ssl) para eso se modifica el fichero /etc/apache2/ports.conf para que ponga:

Listen 80
Listen 443





Ahora tenemos que decirle a apache que soporte el ssl para ello:

host1:/var/www/app/CA# a2enmod ssl

Y con esto ya solo nos queda configurar nuestro fichero de sites-availables donde tenemos nuestra configuración para poder acceder a nuestro site mediante https.

Editamos el archivo /etc/apache2/sites-availables/default y creamos el virtual host adecuado para el puerto 443:



Poniendo en el DocumentRoot el lugar donde tenemos nuestra pagina. Le indicamos que utilizamos certificados (SSLEngine on) y le decimos donde tiene que que leer el certificado (SSLCertificateFile) y la clave privada de este (SSLCertificateKeyFile).-

Ahora solo nos queda parar y arrancar nuestro apache:

host1:/etc/apache2/sites-enabled# /etc/init.d/apache2 stop
Stopping web server: apache2 ... waiting .
host1:/etc/apache2/sites-enabled# /etc/init.d/apache2 start
Starting web server: apache2Apache/2.2.9 mod_ssl/2.2.9 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server tacruel.net:443 (RSA)
Enter pass phrase:
OK: Pass Phrase Dialog successful.
.
host1:/etc/apache2/sites-enabled#

Se observa que les pide password , el cual es el password del certificado.

Evitar petición de password:

Como se vio en el paso anterior, siempre nos va a pedir el password el cual es el password de nuestro certificado.Como lo del password puede ser un problema ya que ahora si la maquina se arranca y cuando arranque el apache, se quedara parado hasta metáis el password. La solución chafa (la que adoptamos) es ponerle en el archivo /etc/sites-availables/default una directiva (fuera de los virtual host):

SSLPassPhraseDialog exec:/etc/apache2/claveputa

Donde claveputa es un archivo bash que creamos nosotros para que se invoque cuando apache arranque y le proporcione la clave. El contenido del archivo es:

#!/bin/sh
echo dlinux

Observar que simplemente es un echo con el password. Ahora solo le tienen que dar permiso de ejecución:

#chmod 700 claveputa

En la Parte 3 veremos:
  • Replicación de MySQL.-
  • Configuraciones del DNS.-
  • Script para para el control de los demonios.-
  • Un par de tonteras.-

Bueno, hasta aquí.-

HOW-TO eBusiness Cluster (Parte 1)



EL PROYECTO.-

Un vendedor de libros ha descubierto que el comercio electrónico es una gran opción para vender sus productos por medio de la internet, para lo cual contrata los servicios de Ingenieros de Sistemas Informáticos para levantar una aplicación que le permita tener su negocio on line en todo momento trabajando con usuarios y sesiones. El propósito de este vendedor es no perder ninguna venta por lo cual requiere un proxy o un cluster que le brinde Alta Disponibilidad para que en caso de tener problemas en un servidor no sea necesario detener las ventas sino más bien que el otro servidor dentro del proxy o cluster tome las riendas de la transacción.

LA METODOLOGÍA.-

Para realizar este proyecto se ha utilizado un cluster con un equipo de entrada y dos servidores otorgando los servicios necesarios para el funcionamiento de este. En el equipo principal se encuentra levantado el comando PEN sirviendo como demonio, el cual es el encargado de recibir las peticiones de DNS por medio del puerto 443 (que es donde escucha https, es decir http seguro) y redireccionarlas al equipo inmediato el cual es un servidor (al cual denominamos maestro) que mantiene corriendo la aplicación del e-bussines por medio de Apache2, PHP5, joomla!, Virtuemart y MySQL. Y para el caso de perder la comunicación con este contamos con un servidor (al cual denominamos esclavo) que contiene los mismos servicios que el maestro corriendo de forma auxiliar al mismo. El encargado de hacer este cambio en caso de error es nuestro "demonio" PEN corriendo en el equipo de entrada.-

El balanceo de carga en nuestro cluster esta a cargo de VRRPD, un demonio basado en el Protocolo de Redireccionamiento de Ruteo Virtual originario de algunos equipos de CISCO.-

EL ENTORNO.-



LAMP Maestro:
  • Intel Celeron 2GHz
  • 512MB RAM
  • 60GB HD
  • Debian GNU/Linux 5.0 "Lenny" kernel 2.6.26
  • Apache 2.2.9
  • PHP 5.2.6-1
  • MySQL 5.0.51a-24
  • MySQL Administrator 1.2.12
  • joomla! 1.5.10
  • Virtuemart 1.1.3
  • OpenSSL 0.9.8g
  • VRRPD 1.0
  • SendMail 8.14.3
  • nano 2.0.0
  • Dia 0.96.1

LAMP Esclavo:
  • Intel Centrino M 1.73GHz
  • 512MB RAM
  • 60GB HD
  • Debian GNU/Linux 6.0 "Squeeze" kernel 2.6.26
  • Apache 2.2.11
  • PHP 5.2.9-4
  • MySQL 5.0.51a-24
  • MySQL Administrator 1.2.12
  • joomla! 1.5.10
  • Virtuemart 1.1.3
  • OpenSSL 0.9.8g
  • VRRPD 1.0
  • SendMail 8.14.3
  • nano 2.0.0

Proxy:
  • Intel Pentium 1.6GHz
  • 256MB RAM
  • 60GB HD
  • Debian GNU/Linux 5.0 "Lenny" kernel 2.6.26 (sin entorno gráfico)
  • PEN 0.18.0-1
  • Bind9

1 Switch CentreCom MR815T
Cables UTP Cat-5

LA RED.-



LA MARA.-



Por cierto:
  • Son las 3:23 a.m.
  • De izquierda a derecha: Omar Guzmán, Antonio Escobar y Marely Cárcamo.
  • No hay cigarros !!!!

INSTALACION DEL LAMP.-

Para que reinventar la rueda, mira esta perfecta guía

En la Parte 2 veremos la instalación y configuración de:
  • joomla! + Virtuemart
  • PEN
  • VRRPD
  • OpenSSL

Bueno, hasta aquí.-

Algo .....

... depresivo ... me siento ..............



HJ-Split



En la casa de una amiga deje descargando varias películas asiáticas, cuando llegue a traerlas vi varios archivos con extensión numérica y debido al cansancio de estar terminando el proyecto de una materia agarre llave y no me acordaba como putas unir todas las partes. Por suerte después de mis 12 horas de buen sueño, inmediatamente me acorde de HJ-Split.-



Es un software que:
  • Separa archivos.-
  • Une archivos.-
  • Es multiplataforma.-
  • Es Freeware.-
  • Es fácil de usar.-
  • Esta hecho en Delphi !!!!

Por cierto, en buen salvadoreño:
  • Hj-Split es una programa gratuito que permite dividir un archivo en varias partes. Cada archivo lleva una extensión numérica: .001, .002... Este mismo programa sirve para volver a unir después todas las piezas. Suele usarse en la descarga directa de archivos (sobre todo la mara de Asia Team).

LPIC-1 Study Guide



Para aquellos linuxeros de corazón, encontré esta Guía de Estudio para obtener la Certificación ofrecida por Linux Professional Institute (LPI).-

Algunos de los tópicos que cubre la Guía de Estudio:
  • Herramientas de línea de comando.-
  • Administración de Software.-
  • Configuración de Hardware.-
  • Administración de Archivos y Sistemas de Archivos.-
  • Trabajando con el sistema de ventanas X.-
  • Administración del Sistema.-
  • Networking Básico.-

Por cierto:
  • El libro es editado por la Sybex y fué lanzado en Febrero de este año.-
  • El archivo a descargar esta en PDF y anda por los 8.11MB.-
  • La certificación completa es de 3 niveles, este libro es para el Nivel 1.-

Libros joomla!



A petición de un amigo que quiere facilitarse la vida creando sitios de contenido de una manera kgada de la risa, aquí van un par de libros de joomla!

Los links (dd) son:





Por cierto:
  • Hay una comunidad joomla! en el país.-
  • Ambos libros estan en PDF y entre los dos andan por los 22MB

CAKEPHP (Parte 4)

Antes que nada:

Debido a que se explicará como realizar los mantenimientos y todo lo que conlleva, esta publicación saldrá un "poco" larga por lo que les pido disculpas y paciencia.-

Preámbulo:

El framework CAKEPHP como hemos mencionado se basa en el paradigma MVC (Modelo-Vista-Controlador) pero, qué es ? Básicamente, es una separación eficiente de las operaciones tipicas agrupadas en áreas específicas:
  • Modelos (Models): para toda la interacción con la base de datos, propiamente por cada modelo debe haber una tabla. Aqui se define toda la reglas de negocios, las validaciones de los datos, integridad referencial, etc.-
  • Vistas (Views): para todas las páginas de entrada y salida (lo que el usuario ve).-
  • Controladores (Controllers): para todos tus scripts, Aqui es donde se programa.-

Nota:
  • Por cada método o acción hecho en el Controlador debe haber una Vista.-

Pero, cómo funciona ?



  1. El Usuario Cliente (Client) envía una petición de página a la aplicación, por medio de un link o digitando la URL. Por cierto, CAKEPHP estandariza la estructura de la URL: http://{Dominio}.com/{Aplicación}/{Controlador}/{Acción o Método}/{Parámetros}
  2. Un script Despachador (Dispatcher) se encarga de verificar la estructura de la URL y determina que controlador se va a ejecutar (tomando en cuenta la acción específica y si hay parámetros).-
  3. La acción o método en el controlador podría necesitar mas datos que los que se le enviarón como parámetros, en este caso enviará una petición al modelo asociado.-
  4. El modelo determina como interactuar con la base de datos usando las peticiones enviadas por el controlador (obtención de datos, manipulación de datos, etc.).-
  5. Una vez que el modelo ha cumplido con lo suyo, devuelve la salida (datos) al controlador.-
  6. El controlador procesa todos los datos y los despliega a traves de una vista.
  7. La vista agrega cualquier diseño visual y despliega los datos enviados por la salida del controlador en una página web en el navegador del usuario cliente.-

Suficiente paja, vamos a lo nuestro.-

Creando Mantenimientos (CRUDS):

Para generar los manteniemientos adecuados, debemos llevar un orden en la elaboración de los scripts según el paradigma MVC:
  1. Generar Modelos.-
  2. Generar Controladores.-
  3. Generar Vistas.-

Nota:
  • Los servicios de MySQL y Apache deben estar arriba.-

Comencemos entonces, como se mencionó en la Parte 3, debemos abrir una consola en el subdirectorio console y digitar (según en mi máquina):

cake bake -app "c:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\eval\app"

Con lo que veremos:



Aquí nos aparece el menu principal con todas las opciones BAKE, si hubiese problemas nos pediría (al menos) configurar la conexión a la base de datos. Ya que todo esta vergón, ya podemos realizar todo lo necesario para nuestra aplicación, como vemos nos aparece:

  • Database Configuration (Configuracón de la Base de Datos): hecho en la Parte 3, aunque siempre podemos reconfigurar la conexión.-
  • Model (Modelo): para crear el script del modelo.-
  • View (Vista): para crear los scripts de las vistas.-
  • Controller (Controlador): para crear el script del controlador.-
  • Project (Proyecto): algo innecesario ya que cuando llamamos al BAKE le pasamos el parámetro -app
  • Quit (Salir): obvio, para cerrar la ejecución del BAKE.-
  • What would you like to Bake? (/D/M/V/C/P/Q): Qué es lo que te gustaría hornear? aqui solo se digita una letra para la opción que queramos.-

Lo primero que debemos hacer es crear nuestros script de modelos, o sea vincularse con una tabla de la base de datos. Cuando elijamos esta opción, debemos tener en cuenta varias ondas:
  • El nombre de la tabla con la que vamos a trabajar.-
  • Conocer los campos de dicha tabla, asi como su tipo.-
  • Si dicha tabla hace referencia a otra o si es usada como referencia.-
  • La integridad referencial para sus relaciones.-

Para nuestro caso empezaremos eligiendo la tabla Empresas. En la consola deben digitar la letra m:



Como ven les aparece todas las tablas contenidas en la base de datos (incluyendo vistas). Se les pide digitar el numero de la opción o sea la tabla a la que le desean asociar/crear el modelo, digitemos el numero 4:



Ahora les pregunta si desean generar validaciones para los campos de dicha tabla, digan que si, en este caso solo den un ENTER:



Les pregunta que validación desean para el campo id, como es la llave primaria y autonumérica hagamos caso a la sugerencia, o sea la opcion 29, o sea solo un ENTER. Para el campo nombre, pueden elegir la sugerencia (opción 20) o la opción 1 o 16 o 17. Aqui en consola solo les permite seleccionar una opción, después veremos como mezclar varias opciones, den un ENTER (nos quedamos con la sugerencia):




Para el campo dirección, den un ENTER:



En el campo departamento ya que es tipo enum, la sugerencia es la opción 29 (o sea no validar). Cuando estemos trabajando en las vistas ahondaremos en este detalle pero por el momento seleccionemos la 20 y den un ENTER:



Ya hemos terminado con las validaciónes (ya no hay más campos) por lo que ahora BAKE nos pregunta si queremos definir asociaciones, esto se referiere a las relaciones con otras tablas (o modelos), por eso nos aparecen los diferentes tipos de relaciones:
  • hasMany: una relacion tipo 1-n (uno a muchos)
  • hasOne: una relación tipo 1-1 (uno a uno)
  • belongsTo: una relación tipo n-1 (muchos a uno)
Digan que si, o sea den un ENTER:



Cuando dieron ENTER, el BAKE tardo un par de segundos ya que rastreo las posibles relaciones de la tabla Empresas verificando en la estructura de la base de datos (relaciones en si o a traves de los campos llamados empresa_id de todas las tablas). Ya después de buscar les pregunta que confirme las asociaciones, propiamente para este caso les pide si la relacion de Empresa con Plaza es de tipo 1-n o sea de uno a muchos (tengan cuidado en no confundirse, en este momento BAKE esta usando los nombres de las tablas en singular ya que BAKE asi nombra los script de los modelos). Presionen ENTER:



Les pregunta si también hay una relación hasOne o sea de uno a uno, ya que no es cierto digiten una n y presionen ENTER:



Ahora les pregunta si quieren definir más relaciones, esto BAKE lo hace debido a que puede no haber encontrado todas las relaciones y le pide a usted que las ingrese manualmente (en caso de que si hay), solo den un ENTER:



BAKE ahora nos pregunta si ya todo esta bien, avisandonos que se creará el script del modelo. Si todo esta correcto, solo den un ENTER:



Se generó el archivo del script (empresa.php) en el subdirectorio app/models. Luego nos preguntan si deseamos generar archivos de prueba para el modelo, digan que no o sea solo digiten una n y presionan ENTER.-

Terminamos de generar el script del modelo, ya que si todo salió bien después del ultimo ENTER nos apareció de nuevo el menu principal de BAKE.-

Ahora a crear el controlador, digitemos una c y presionemos ENTER:



Nos aparece el listado de las tablas a la cual le podemos generar el controlador, digitemos 4 y presionemos ENTER:



Digan que no, o sea digiten una n y presionen ENTER:



Aqui les pregunta si desean incluir métodos básicos de clase o sea acciones, las cuales son:
  • index(): acción por defecto, mostrar todos los registros.-
  • add(): acción para agregar registros.-
  • view(): acción para ver el contenido de un registro.-
  • edit(): acción para editar el contenido de un registro.-

Nota:
  • Recuerden que todo por lo maneja en ingles por default.-

Solo presionen ENTER:



Ahora nos pregunta si deseamos crear métodos para la administración del ruteo, la verdad no es necesario ya que por default CAKEPHP ya lo hace asi que solo digiten una n y presionen ENTER:



BAKE nos avisa que se creará el controlador y nos pregunta si las configuraciones son correctas, solo digiten ENTER:



Se generó el archivo correspondiente (empresas_controller.php) en el subdirectorio app/controllers y de nuevo nos pregunta si queremos generar archivo de prueba, le decimos que no y nos volverá a aparecer el menu principal de BAKE.-

Para crear las vistas, estando siempre en el menu principal de BAKE, elegimos la opción v:



Como siempre, nos muestra todas las posibles vistas a generar basandonos en la estructura de nuestra base de datos (claro siempre que exista el controlador correspondiente), elegimos la opción 4:



Ahora nos pregunta si deseamos generar las vistas: index, add, view, edit para el controlador especifico dandonos un aviso de que ya debe existir el modelo y controlador (y sus acciones). Debemos digitar una y y presionar ENTER:



Queremos vistas para la administración del ruteo, no, digiten n y le dan al ENTER:



Se crean todos los archivos de las vistas (index.ctp, add.ctp, edit.ctp, view.ctp) en el subdirectorio app/views/empresas.-

Notas:
  • La extension .ctp significa cake template page.-
  • Como se menciono antes, para cada accion del controlador debe haber una vista correspondiente de tal forma que para la acción add() debe existir la vista add.ctp
  • Las vistas a diferencia del modelo y del controlador, son generadas en un nuevo subdirectorio de app/views que tendra el nombre de la tabla (o controlador), en este caso se creó automaticamente empresas y ahi se colocaron las vistas.-

Abran su navegador y empecemos a verificar si funciona todo. Como se menciono al principio CAKEPHP estandariza la forma en como se debe accesar su aplicación, para nuestro caso se debe digitar:



Con lo que mágicamente aparecerá:



Dicha página es la vista index.ctp que por medio de la acción index() del controlador empresas_controller.php y por medio del modelo empresas.php nos presenta los datos contenidos en la tabla Empresas.-

Notas:
  • Antes ya había metido un par de datos ... sorry.-
  • Todo aparece en ingles, lo cual arreglaremos después.-
  • Los títulos que aparecen en la cabecera de la tabla son los nombres de los campos en la tabla.-

En cualquiera de los registros hagan click en:



Con lo que aparecerá:



Aquí vemos la vista view.ctp que por medio de la acción view() del controlador y modelo correspondiente, nos muestra el contenido del registro. Observen la barra de direcciones de su navegador:



Vemos:
  • El Dominio: localhost
  • La Aplicación: eval
  • El Controlador: empresas
  • La Acción: view
  • El Parámetro: 3 (el id de la empresa, los parámetros son generalmente las pk)

Fácil de usar y entender verdad ?

Regresemos a la página anterior. Por cierto, han visto lo que se despliega en la parte inferior de cada página:



Es un traza de las consultas que se hicieron a la base de datos para poder desplegar los datos o realizar acciones, obviamente no queremos que aparezca (a menos cuando estemos depurando). Para quitarlo, abran el archivo core.php en el directorio (según mi máquina):



Diriganse a la línea 41 (más o menos) y busquen:



Cambien el 2 por un 0 (cero):



Guarden el archivo, regresen a su navegador y refresquen la página (F5):



Asunto arreglado!

Ahora lo tedioso, cambiar lo que esta en inglés a buen salvadoreño; drásticamente tenenemos que abrir todos los archivos que hemos generado con el CUIDADO debido, empezaremos con el controlador. Abran empresas_controller.php (app/controllers) y busquen el bloque de código para el método view()



Y dejenlo asi:



Ahora busquen el método add()



Cambiandolo a:



Ahora vamos con el método edit()



Modifiquenlo asi:



Por ultimo el método delete()



A esto:



Guarden y cierren el archivo. Ahora diriganse al directorio app/views/empresas y abran cada una de las vistas, empecemos con index.ctp y verán que su contenido es más que todo html con secciones de código php. Busquen:



Y cambienlo a:



Ahora busquen:



Y solo hagan cambios en la línea seleccionada (amarillo):



Lo demas no lo toquen! ya que son los nombres de los campos de la tabla. Busquen ahora la línea 39 (más o menos):



Quedando después de los cambios:



En las últimas líneas:



Modifiquen para que quede así:



Guarden los cambios, cierren el archivo y volviendo a su navegador refresquen la página (F5):



Más entendible verdad ? Antes de los cambios, cuando haciamos click en Delete nos aparecía:



Ahora haciendo click en Eliminar:



Haciendo click en Ver:



En inglés no ? abramos la vista view.ctp y vamonos a las últimas líneas de código:



Cambien a:



Guarden y cierren, refrescando la página en el navegador:



Abran la vista correspondiente a editar datos (edit.ctp), con lo que veremos:



Modifiquen a esto:



Guarden y cierren, refrescando en mi navegador:



Estando de nuevo en la página donde se muestran todos los registros, hagan click en Nueva Empresa para que les aparezca:



Bueno, abran add.ctp para que vean lo siguiente:



Modifiquen para que les quede asi:



Guarden y cierren, en su navegador hagan un F5:



Solo para probar hagan click en el boton Guardar Datos:



Como ven se han disparado las validaciones para los campos, is las que estan en el modelo empresa.php en app/models, con lo que tenemos:



Modifiquemos para que quede:



Como les dije anteriormente se pueden mezclar validaciones, todo se maneja en un arreglo. Además se puede personalizar el mensage de error mediante el parámetro message. Tengan cuidado ya que se anidan varios arreglos. La página después de refrescar queda:



Por cierto, en el campo departamento (que es un enum) esta dificil (al menos para el usuario) digitar, pongamoslo fácil haciendo unas modificaciones a las vistas add.ctp y edit.ctp. Abran primero add.ctp y diriganse a la línea 8:



La línea seleccionada borrenla y agreguen lo siguiente:



Lo que se hizo fué que se cambio un textbox por combobox, desplegando en la lista todos los departamentos de la república y guardando como valor para el campo el mismo valor desplegado (observar el arreglo) y colocando como valor por defecto a Santa Ana. Lo mismo para la vista edit.ctp

Refrescando para ver la página (add):



Más Pro verdad ?

Todo el proceso descrito hasta ahora lo tienen que hacer para todas las tablas de la base de datos, pueden que lo vean algo tedioso ya que lo estan haciendo por primera vez. Eso si, ya al dominar esto, el trabajo que tendrían que hacer en una semana lo harían en una tarde, lo cual es un gran ahorro de tiempo y cerebro.-

En la Parte 5 veremos cómo hacer la página principal de su sitio, colocar disque menus y elaboraremos el control de las sesiones.-

Bueno, hasta aquí.-