BD País, Estado, Municipio, Parroquia.

Buscando en la web una base de datos con información de sobre Estados, Municipios, Parroquias; en Venezuela los resultados fueron bastantes pobres, ademas del hecho de que como comprobar la veracidad de tal información, es allí donde decido apuntar a los entes oficiales, me comentaron que el INE de Venezuela tenia tal información pero en todo su web no la encontré,  así que apunte al CNE y bueno luego de un trabajo interesante (problema de estructura datos que comentare mas adelante), obtuve los script que encontraran mas adelante.

A continuación, veremos dos formas de implementar a nivel de base de datos la información de las localidades:

1. – Modelo normalizado donde encontraremos esta información divida en diferentes tablas.

Modelo Normalizado

Modelo Normalizado de varias tablas

Este modelo no necesita mayor explicación, ya que es la forma habitual como trabajamos con una tablas de BD.

2. – Modelo de una sola tabla, esto debido a que muchos en algunas ocasiones por la naturaleza de los datos, unen en una sola tabla este tipo de información, ya que básicamente estamos hablando de localidades (texto).

Tabla localidades

Modelo de una Tabla

En este modelo manejamos 2 ordenes, uno superior que es la tabla localidades en si misma y uno de menor nivel que  indica el tipo localidad que estamos manejando, que esta representado por campo tabla, el cual debería contener algo como los siguientes valores: país, estado, municipio, parroquia, posiblemente región, entre otros. Algunos podrían comentar que el campo no hace falta, pero en mi caso yo lo agrego para tener una información mas consistente del dato que estamos manejando y facilitar algunas consultas SQL. Otro tema a tener en cuenta es que MySQL no implementa cheks de campos como lo hace PosgreSQL, en ese sentido, tal vez es necesario el uso de un trigger (no implementado en estos scritps) para garantizar que el campo tabla, contenga solo los valores permitidos.

Los scripts fueron migrado a github, aquí el enlace: https://github.com/josearodrigueze/localidad-ve

Para finalizar, me gustaría hacer crecer estos scripts con la información de mas naciones, al menos en primera instancia latinoamerica. Quienes deseen colaborar pueden dejar un comentario o escribirme a josearodrigueze@gmail.com o por twitter @josearodrigueze. Otra forma simple de colaborar es compartiendo el post para así sumar la mayor cantidad de colaboradores posibles. Gracias.

Entrada Original: Jose A. Rodriguez E.

Anuncios

Registro de Auditoria/logs de sistema.

Actualmente estoy un sistema web empleando CodeIgniter (CI), PostgreSQL, JQuery y Bootstrap. Como todo sistema es necesario llevar un registro de las operaciones realizadas por los usuarios.

Imagen-auditoria-shutterstock

Busque alguna librería de CI que permitiera llevar este registro, pero no conseguí.

Así que me pregunte ¿qué datos de la operación en curso necesito almacenar?:
¿Cuál? URL.
¿Cuándo? Timestamp.
¿Quién? Usuario.
¿Desde dónde? Dirección IP.

Esos serian los datos más básicos, también podríamos almacenar: Navegador, Versión de Navegador, Sistema Operativo, entre otros.

En mi caso, es extremadamente necesario guardar los datos manejados en la operación y el resultado de la misma (ACCESS, SUCCESS y FAILURE).

Nota: para este post se tomo en cuenta que los lectores ya tiene un conocimiento previo sobre CI.

Me decidí crear una librería el cual pudiera llamar desde cualquier parte del sistema y así almacenar esta info. Identifique que CI posee dos librerías de las cuales podemos sacar la mayoría de la información, las cuales son: Input Class y User Agent Class.

Librería audit para CI.

Librería de CI para registro de Auditoria/Logs

Librería de CI para registro de Auditoria/Logs

Modelo para librería audit

Clase que provee el acceso a datos de la librería de CI Audit

Clase que provee el acceso a datos de la librería de CI Audit

Para implementar la librería, cárgala en tu controlador y en cada método donde necesites registrar la auditoria pega esta línea

$this->audit->register();

Para registrar el ID del usuario, utiliza la siguiente linea:

$this->session->set_userdata('user_id', IDUSUARIO); Si ya tienes registrado tu ID de usuario en session, pues cámbialo en la librería.

Si tu operación trabaja con datos recuerda llamar antes del método register() a:

$this->audit->setResult($result);
$this->audit->setData($data);

Con esas dos líneas registra los datos y el resultado de la operación.

En el caso del método setResult(),  recibe un Boolean, para indicar si el almacenamiento fue exitoso o no.

En mi caso yo centralice la salida de CI con el callback de controlador _output($output), allí coloque mi método register() y solo me preocupo por llamar los métodos setResult() y setData() donde es estrictamente necesario.

Descarga todo el código mas ejemplo aquí

Instrucciones copia el contenido de la carpeta application en tu carpeta application de CI (Ojo verifica bien no vayas a sobre escribir tu trabajo). Ejecuta los script en tu BD y listo.

Nota: Esto no es un log de los errores cometidos dentro del sistema, sino el registro de las paginas y que datos utilizo el usuario dentro del sistema.

Entrada Original: José Rodríguez


Cheat Sheet de Diferentes lenguajes de Programación

 

Acabo de encontrar una entrada de blog que agrupa diferentes Cheat Sheets de lenguajes programación, librerías, htaccess, apache mod_rewrite, herramientas como wordpress,  entre otros. La entrada es un poco antigua pero igual nos puede ser util

[Enlace] 57 Estupendas Chuletas (Cheat Sheets) … para nuestros proyectos web y otros lenguajes.


Como mejorar el proceso de carga de un sitio web

page-como-perder-peso-navegador

Como primera entrada me gustaría compartir con uds, una fantástica de guía de consejos a ser utilizados para mejorar la carga de nuestros sitios web, quizás ya conozcamos algunas de estas recomendaciones pero siempre es bueno recordarlas, en ella encontraremos consejos de los mas diversos que van desde: minificar tus archivos .css y .js, a configuraciones en el servidor donde esta alojado tu sitio web, como consejos de como mejorar la ejecución de script .js, entre otros.

Lo genial de esta guía es que esta totalmente en español.

[Enlace] Como perder peso (en el navegador).