jueves, 7 de febrero de 2013

Monitor Consultas, Queries o SQL en MySQL

Ahora le toca el turno a MySQL esta vez, lo que necesitaba era monitorear todas las instrucciones MySQL para detectar un problema que tenía con una consulta, query, sql o como gustes llamarlo, bien para poder monitorear una de las tantas formas de hacerlo es utilizando el GQL (General Query Log).

Por lo general el GQL viene desactivado por lo que para activarlo se debe iniciar MySQL con la consola, y posteriormente para saber si lo tenemos activado o no utiliamos el siguiente comando:
mysql> SHOW VARIABLES LIKE "general_log%";

+------------------+----------------------------+
| Variable_name    | Value                      |
+------------------+----------------------------+
| general_log      | OFF                        |
| general_log_file | /var/run/mysqld/mysqld.log |
+------------------+----------------------------+
Con lo anterior podemos ver de entrada en donde esta configurado que estará el archivo y por otro lado si esta activado o no, como no esta activado entonces debemos activarlo primero:
mysql> SET GLOBAL general_log = 'ON';
Cuando ya no necesitemos estar almacenando estos datos ya que este archivo puede crecer indefinidamente utilizamos el comando:
mysql> SET GLOBAL general_log = 'OFF';
Para ver el contenido de la consola podemos utilizar el comando ya fuera de mysql:
$ sudo cat /var/run/mysqld/mysqld.log
En mi caso tuve que utilizar sudo por los permisos. Una vez ejecutado podía ver las consultas que se estaban ejecutando.


Espero te haya sido de utilidad !


Fuentes:
http://stackoverflow.com/questions/568564/how-can-i-view-live-mysql-queries
http://dev.mysql.com/doc/refman/5.1/en/query-log.html

martes, 5 de febrero de 2013

Git con Dropbox

Basado en el post: http://mario.thefrutos.com/2011/12/06/crear-un-repositorio-git-en-dropbox/

OBJETIVO: Tener un directorio de trabajo donde se capture el código fuente y tener un directorio donde se almacene el control de versiones o repositorio maestro (master).

NOTA: Esta realizado en windows, pero debe ser muy similar para Mac OSX.

1. Una vez instalado Git se debe configurar el nombre de usuario y el correo electrónico:

> git config --global user.name "James Bond"
> git config --global user.email "james007@gmail.com"

2. Inicializar el repositorio maestro donde se guardará el historial de cambios. Para esto nos dirigimos al directorio de Dropbox donde queremos almacenar el historial y estando ahí ejecutamos el siguiente comando:

> cd c:/users/miuser/dropbox/misproyectos/
> git init --bare miproyecto.git

NOTA: la opción bare nos permite llevar un mejor control de un repositorio central para más información http://sitaramc.github.com/concepts/bare.html

3. Ahora nos dirigimos al directorio donde queremos trabajar es decir donde estaremos programando nuestra aplicación, inicializamos el directorio con el siguiente comando:

> git init

4. Posteriormente le indicamos cual será el directorio remoto:

> git remote add miproyecto.git c:/users/miuser/dropbox/misproyectos/miproyecto.git

NOTA: Debemos tener cuidado aqui con la ruta ya que si no queda indicada la correcta

entonces podremos tener un error de permisos o bien de que no se encontró el repositorio.

5. Creamos archivos directorios, etc., es decir trabajamos en el (o programamos en otras palabras), entonces posteriormente estamos listos para enviar cambios, ejecutamos el siguiente comando para incluir todos los archivos (podemos incluir también nada más los que queremos; si no es el caso con el -punto- señalamos todos los archivos y directorios de trabajo):

> git add .

6. Una vez incluidos realizamos el commit para preparar el envío, esto nos permite incluir un mensaje que describa brevemente el conjunto de cambios que hemos realizado:

> git commit -m "Concluido el módulo X"

7. Una vez realizado lo anterior ahora si enviamos los cambios a nuestro repositorio remoto:

> git push miproyecto.git master

8. Al ejecutar el comando anterior aparecerá un proceso indicando que los archivos han quedado sincronizados. Con lo anterior podemos trabajar con Git, ahora que si lo que queremos es descargar lo que ya tenemos en otro equipo utilizamos el comando:

> git clone c:/users/miuser/dropbox/misproyectos/miproyecto.git

Esto nos creará una copia de lo que tenemos actualmente.

Si la url es diferente, es decir la ruta del directorio para llegar al repositorio central (en este ejemplo miproyecto.git) es diferente entonces será necesario usar la ruta completa cada vez que actualicemos en los diversos equipos. Por ejemplo:

> git push c:/users/miuser/dropbox/misproyectos/miproyecto.git master

NOTA: Como en este caso estamos utilizando Dropbox entonces lo más seguro es que tendremos que hacerlo de esa forma.

La proxima vez que en este mismo ordenador necesitemos bajar los archivos ya solo usamos:

> git pull c:/users/miuser/dropbox/misproyectos/miproyecto.git master

Con el comando:

> git status

Obtenemos las diferencias entre lo que tenemos del directorio de trabajo.

Con el comando:

> git log

Obtenemos los commit que hemos enviado al repositorio.

Ahora que si queremos una herramienta gráfica existe la siguiente:
http://code.google.com/p/gitextensions/

Para actualizar la versión de git he seguido esta guía:
http://ayanim97.com/mac/installing-and-upgrading-git-mac-os-lion

NOTA: En Mac OSX tuve problemas tuve que agregar la siguiente línea a mi ~/.bash_profile:

export PATH=/usr/local/git/bin:/usr/local/sbin:$PATH


ACTUALIZACION 2013-02-08:

Descartar cambios que no se han enviando en un commit: 
> git checkout -f 



Más información:
http://stackoverflow.com/questions/8957862/how-to-upgrade-git-to-latest-version-on-mac-osx-lion
http://blog.gautamkedia.com/discarding-local-changes-in-git


Espero te sea de utilidad !

martes, 22 de enero de 2013

Django guía ultra rápida (en proceso)

Considero que hay una infinidad de tutoriales por la red relacionados con Django así que me limitare a poner referencias que me vayan sido utiles así como algunos comandos que sean los que más voy utilizando, espero les sea de utilidad, igual se aceptan sugerencias y correcciones :)

TERMINAL

Crear Proyecto
$ django-admin.py startproject [nombreproyecto]

Crear App
$ python manage.py startapp [nombreapp]

Validar Modelos
$ python manage.py validate

Sincronizar base de datos
$ python manage.py syncdb

Crear superusuario
$ python manage.py createsuperuser

Correr el Servidor
$ python manage.py runserver 192.168.0.1:80
NOTA: La ip y el puerto son opcionales si no se especifican por omisión correo en 127.0.0.1:8000



CARACTERES Y FORMATOS

Codificación UTF8
Al inicio del archivo colocar
# -*- encoding: utf-8 -*-



MODELOS
Ejemplo archivo: models.py

from django.db import models
from django.contrib.auth.models import User

class Refs():
    sexo = ((‘F’,‘Femenino’),(‘M’,‘Masculino’))
    estado_civil = ((‘S’,‘Soltero’),(‘C’,‘Casado’),(‘U’,‘Unión Libre’),(‘D’,‘Divorciado’),(‘V’,‘Viudo’))

class Persona(models.Model):

    usuario = models.ForeignKey(User)
    nombre = models.CharField(max_length=100)
    clave = models.IntegerField(verbose_name=u’La Clave’)
    municipio = models.ForeignKey(Municipio)
    tipo = models.ForeignKey(Tipos,null=True,blank=True)
    cursos = models.ManyToManyField(Curso)
    universidades = models.ManyToManyField(Universidades, through=‘Uni_Per’)
    activo  = models.BooleanField(default=True)
    obs = models.TextField(max_length=500)
    sexo = models.CharField(max_length=1, choices=Refs.sexo, default='F')


    def __unicode__(self):
        return (u’ %s >> %s’) % (self.nombre, self.tipo)

    class Meta:
        verbose_name=u'Descripción Singular del Modelo'
        verbose_name_plural=u'Descripción Plural'

class Curso(models.Model):
    nombre = models.CharField(max_length=50)

class Universidad(models.Model):
    nombre = models.CharField(max_length=50)

class Uni_Per(models.Model):
    persona = models.ForeignKey(Persona)
    universidad = models.ForeignKey(Universidad)
    promedio = models.DecimalField(decimal_places=2,max_digits=4)
    titulacion = models.DateField(verbose_name=u’Fecha de Titulación’)



ADMINISTRADOR DE DJANGO
Ejemplo archivo admin.py
 

Agregar un modelo al admin

from django.contrib import admin
from catalogos.models import *
admin.site.register(Universidad)
admin.site.register(Persona)
admin.site.register(Curso)



VISTAS
Ejemplo de un archivo views.py

from django.http import HttpResponse
import datetime

def fecha_actual(request):
    now = datetime.datetime.now()
    html = "El día de hoy es %s." % now
    return HttpResponse(html)




URL
Ejemplo de un archivo urls.py, que tiene activado además el admininistrador de Django.

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

 
urlpatterns = patterns('',

    # Vista inicial
    url(r'^$', 'miapp.views.fecha_actual', name='fecha_actual'),


    # Uncomment the next line to enable the admin:
    url(r'^control/', include(admin.site.urls)),
)





Otras utilerías
Usar bootstrap en Django
El API Form de Django


 

viernes, 18 de enero de 2013

Django Error 'str' object is not callable base.py in get_response

Después de desarrollar una vista me tope con este error que parece ser algo sencillo pero no encontraba como solucionarlo, bien el detalle era que en mi archivo url.py tenía:

url(r'^prueba/', 'prueba_view', name='prueba'),

Para solucionarlo la línea debe ir así:

url(r'^prueba/', 'campo.views.prueba_view', name='prueba'),

En otras palabras se debe especificar la ruta completa para no tener problema alguno.


Espero te sea de utilidad !



Referencias:
http://stackoverflow.com/questions/4668040/django-str-object-is-not-callable

martes, 15 de enero de 2013

Firebird agregar usuarios o crear usuarios con gsec

Por lo que estuve buscando no existe una instrucción SQL para crear un usuario utilizando Interbase o Firebird 1.5 todo debe ser utilizando el comando GSEC aquí veremos como emplearlo:

$ gsec -user sysdba -password tucontraseña
gsec>add usuarionuevo -pw passwordusuarionuevo -lname etiquetanombre
gsec>quit
$ _

Listo con eso el usuario queda creado ahora para darle permisos si podemos utilizar sql:
GRANT SELECT, UPDATE, INSERT, DELETE ON USUARIOS TO usuarionuevo

Con eso se le aplican los permisos sobre la tabla usuarios al usuario nuevo.



Espero te sea de utilidad !


Más información:
http://www.destructor.de/firebird/gsec.htm
http://www.firebird.com.mx/descargas/documentos/tema_5-administracion_y_seguridad.pdf
http://www.firebirdsql.org/refdocs/langrefupd25-security-grant-revoke.html





miércoles, 9 de enero de 2013

Conectar Python con Firebird

Hoy definitivamente ando bien Python ;) ... El siguiente documento es para conectar Python con Firebird, lo realizo en Mac OSX pero debiera ser similar para Windows:

Para poder realizar la conexión Python - Firebird, primero es importante tener instalado el Firebird en el equipo la versión que utilizaremos debe ser compatible con la versión 2 o superior ...
http://sourceforge.net/projects/firebird/?source=dlp

Una vez que se haya descargado debemos ejecutar la el pkg de instalación.

Posteriormente es probable que tengamos que editar el ~/.bash_profile con las siguientes líneas:
export FIREBIRD_HOME=/Library/Frameworks/Firebird.framework/Resources
export PATH=$PATH:$FIREBIRD_HOME/bin
Más información en:
http://www.firebirdsql.org/file/documentation/papers_presentations/html/paper-fb-macosx-install.html
Uso de la terminal:
http://www.firebirdsql.org/manual/es/qsg15-es-connecting.html#d0e1215


Una vez instalado el Firebird, existen varios controladores (Driver) para conectar python con firebird, pero este fue el que mejor me dio resultado ya que esta desarrollado usando solo python:

https://github.com/nakagami/pyfirebirdsql/archive/master.zip
Más información aquí: https://github.com/nakagami/pyfirebirdsql

Una vez descargado y descomprimido entramos al directorio y corremos el siguiente comando:
$ sudo python setup.py build

Si hubo errores, después del comando anterior revisa la conectividad y funcionamiento de firebird, en caso de que todo haya salido bien, entonces procedemos con el siguiente comando:
$ sudo python setup.py install

Podemos probar que haya quedado instalada la librería usando el shell de python e importando la librería firebirdsql.

El siguiente fragmento de código es para ejemplo de conectividad:
_________________________________

# Conectarse a la base de datos de firebird
import firebirdsql as fb

# Conectar con la base de datos
con = fb.connect(dsn='127.0.0.1:c:\\base.gdb',user='miusuario', password='miclave')

# Se crea el cursor de la conexión
cur = con.cursor()

# Ejecuta el comando SQL
cur.execute(" select clave, nombre from municipios ")

# Imprime los municipios encontrados en la base de datos ...
for row in cur:
print str(row[0])," > ",str(row[1])

_________________________________

Sitios de Referencia:
http://maxirobaina.tumblr.com/post/27867131429/firebird-sql-estado-del-driver-para-python
http://nakagami.github.com/pyfirebirdsql/installation.html
[ Tutorial de la librería ] http://nakagami.github.com/pyfirebirdsql/tutorial.html
http://www.fpress.com/revista/Num0704/unart6.htm
http://stackoverflow.com/questions/11787012/how-to-install-mysqldb-on-mountain-lion
[ Tutorial del terminal ] http://www.firebirdsql.org/manual/es/qsg15-es-connecting.html#d0e1215



Espero te sea de utilidad !




Enviar correo electrónico desde python en gmail con smtplib


Con el requerimiento de enviar correos automatizados me vi en la necesidad de este script en python les dejo parte del código ...

_________________________________

# -*- coding: utf8 -*-

#Importar la librería de SMTP ...
import smtplib

#Tu correo o el correo que enviará los mensajes ...
FROM = "micorreo1@gmail.com"

#Lista de correos a enviar ...
TO = ['destinatario1@gmail.com','destinatario2@gmail.com']

#Correos que se verán en la sección PARA del correo ...
TOstr = 'micorreo1@gmail.com'

#Comandos que serán enviandos al servidor de gmail ...
server = smtplib.SMTP('smtp.gmail.com',587)
server.ehlo()
server.starttls()
server.ehlo

#Es necesario logearse con el servidor utilizando tu cuenta micorreo1@gmail.com y tu clave.
server.login(FROM,'miclave')

# Crear el encabezado del correo
header = 'To:' + TOstr + '\n' + 'From: ' + FROM + '\n' + 'Subject:Reporte hoy \n'
print header

# Unir el encabezado con el mensaje ...
msg = header + '\n Esta es una prueba \n\n'

# Una vez que se haya pasado lo anterior ahora si a enviar ...
server.sendmail(FROM,TO,msg)
print "Listo !"

# Cerramos sesion ...
server.quit()


_________________________________

Estos sitios me sirvieron de referencia:
http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
http://stackoverflow.com/questions/6941811/send-email-to-multiple-recipients-from-txt-file-with-python-smtplib



Espero te sea de utilidad, saludos !