domingo, 22 de diciembre de 2013

Explorador de Archivos en Vim (File Explorer) en OSX

Me estoy haciendo definitivamente adicto a Vim, ahora veremos como instalar el explorador de archivos.

A través de este sitio: http://www.vim.org/scripts/script.php?script_id=1658 encontramos el proyecto de github de nerdtree, con los siguientes comandos podemos realizar la instalación:

$ cd ~/.vim/bundle    #NOTA: Se debe tener el directorio bundle creado previamente
$ git clone https://github.com/scrooloose/nerdtree.git    #NOTA: Implica tener instalado git
$ cp nerdtree/autoload/nerdtree.vim ~/.vim/autoload/nerdtree.vim
$ cp nerdtree/doc/NERD_tree.txt ~/.vim/doc/NERD_tree.txt
$ mkdir ~/.vim/lib  #NOTA: Yo no tenía este directorio
$ cp -rf nerdtree/lib/nerdtree ~/.vim/lib/nerdtree
$ mkdir ~/.vim/nerdtree_plugin
$ cp -rf nerdtree/nerdtree_plugin ~/.vim/
$ cp nerdtree/plugin/NERD_tree.vim ~/.vim/plugin/NERD_tree.vim
$ mkdir ~/.vim/syntax
$ cp -rf nerdtree/syntax ~/.vim/


Una vez realizado lo anterior ya podemos usar el plugin, bien para utilizarlo de forma básica abrimos vim, de entrada ya debe mostrar como un explorador de archivos muy diferente, pero para darle más poder agregaremos al .vimrc la siguiente instrucción:

map < silent > < C-n > :NERDTreeToggle< CR > 
#NOTA: Eliminar espacios en blanco

Con la instrucción anterior abrimos y cerramos el directorio utilizando las teclas Ctrl+N cuando nos posicionamos en un archivo podemos dar ENTER para abrir el archivo o podemos presionar i para que se abra haciendo split con el archivo anterior.

 Dejaré las referencias por si quieres investigar más opciones.

Espero te sea de utilidad !



Referencias:
http://make-believe.org/in-words/post/vim-is-forever/
http://www.vim.org/scripts/script.php?script_id=1140
http://www.youtube.com/watch?v=CPu9mDpSYj0

miércoles, 18 de diciembre de 2013

Instalando vim-airline OSX

Buscando potenciar el uso de vim me tope con un plugin que me dejo atónito con dicha herramienta puedes hacer algo como lo que se ve en las siguientes imágenes:



En cuanto lo vi me dije, tengo que tenerlo, pero al principio creí que solo era un plugin y son varios para lograr el funcionamiento máximo me aboqué solo en algunos de ellos que son los que utilizaré y dejo aquí como es de costumbre el procedimiento para instalarlo, el cuál esta basado para OSX pero es probable que no haya mucha diferencia para MsWindows.

Por principio de cuentas no tenía mucha experiencia instalando plugins para vim por lo que también lo veremos aquí.

PASO 1 | Descargar vim-airline

Con el fin de llevar algo de orden todo lo que descargue lo dentro del directorio ~/.vim/bundle de esa manera desde ahí puedo trabajar y copiar lo que se necesita. El primer comando que vamos a ejecutar entonces es:

$ cd ~/.vim/
$ mkdir bundle                 # Solo en caso de no tener este directorio
$ git clone https://github.com/bling/vim-airline.git

PASO 2 | Instalar vim-airline

Con el paso anterior nos descargara el proyecto en una carpeta con el mismo nombre dentro de vim-airline ahí tendremos una carpeta de nombre autoload, doc y plugin. Estas carpetas debemos copiarlas al directorio ~/.vim solo hay que tener cuidado que si ya tenemos las carpetas entonces solo copiar el contenido de ellas dentro del directorio correspondiente (Si copiamos la carpeta directamente podemos borrar lo que estaba ahí).

Esto es el contenido de:
 ~/.vim/bundle/vim-airline/autoload/ copiarlo a ~/.vim/autoload/
 ~/.vim/bundle/vim-airline/doc/ copiarlo a ~/.vim/doc/
 ~/.vim/bundle/vim-airline/plugin/ copiarlo a ~/.vim/plugin/

Básicamente este es el proceso de instalación de un plugin en vim, se descarga y luego se mueven los archivos que se encuentran en los directorios autoload, doc y plugin a los directorios raíz.

PASO 3 |  Activar la barra y el airline

Para activarlo es muy sencillo necesitamos editar el archivo ~/.vimrc para esto podemos hacer el siguiente comando:

$ vi ~/.vimrc

Dentro de ese archivo colocaremos las siguientes líneas:
   set laststatus=2
   let g:airline#extensions#tabline#enabled = 1       "Habilita los tabs, para cambiar de tab presionar gt

Guardamos el archivo y al volver a entrar veremos las primeras posibilidades que nos ofrece este StatusLine de vim.

PASO 4 |  Uso de Git

Como podemos observar en la barra podemos ver las inserciones y la rama que estamos utilizando en git, para eso debemos instalar dos plugin (El proceso es el mismo que con el airline, solo recuerda que en esta ocasión ya debes tener las carpetas autoload, doc y plugin, por lo que solo deberás copiar los contenidos de cada carpeta). Dichos plugin son los siguientes:

https://github.com/airblade/vim-gitgutter
https://github.com/tpope/vim-fugitive

Una vez instalado lo anterior podrás ver la rama y el control de modificaciones de los archivos.

PASO 5 |  Fuentes especiales

Hasta el paso anterior ya queda algo bastante funcional, lo siguiente es solo para darle un poco de formato utilizando fuentes especiales, es importante mencionar que esto solo me funcionó en MacVim. Para instalar dichas fuentes es necesario realizar varios procesos:

5.1 Instalar Home Brew (Solo en caso de no tenerlo instalado):

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
$ brew update

5.2 Instalar font

$ brew install fontforge            #Si ya estaba instalado ejecutar $ brew uninstall fontforge

5.3 Obtener el directorio de fontpatcher del repositorio:
https://github.com/Lokaltog/vim-powerline/tree/develop/fontpatcher
NOTA: Solo ese directorio ya que lo necesitaremos para instalar las fuentes.

5.4 Descargar las fuentes de: https://github.com/Lokaltog/powerline-fonts

5.5 Una vez obtenidas las fuentes será necesario correr el siguiente comando:

$ fontforge -script /ruta/al/fontpatcher.py "Ubuntu Mono derivative Powerline.ttf"
Realizando los cambios correspondientes: la ruta del fontpatcher.py y el archivo Ubuntu Mono derivative Powerline.ttf es solo como ejemplo, debe sustituirse por el que se desea instalar.

5.6 Realizado el proceso anterior entonces podemos añadir a nuestro .vimrc lo siguiente:

let g:airline_powerline_fonts=1

5.7 En el .gvimrc elegimos el tipo de fuente que escogimos en el punto 5.5:
set guifont=Ubuntu\ Mono\ derivative\ Powerline\
set anti gfn=Ubuntu\ Mono\ derivative\ Powerline:h19

De esta forma aparecerán los iconos, espero te sea de utilidad !



Referencias:
https://github.com/bling/vim-airline
https://github.com/airblade/vim-gitgutter
https://github.com/tpope/vim-fugitive
http://brew.sh/







lunes, 4 de noviembre de 2013

Conectando la terminal de Mac OSX con el servicio AWS de Amazon

Para conectar con el terminal del Mac OSX lo primero que se debe hacer es generar un certificado desde tu servicio de Amazon, una vez que lo obtengas descargalo a tu equipo y en la terminal vamos al directorio donde se encuentra.

El archivo descargado debe tener extensión ".pem" entonces una vez en la carpeta realizaremos los siguientes comandos:

$ cp miarchivocertificado.pem ~/.ssh/miarchivocertificado.pem
$ chmod 600 ~/.ssh/miarchivocertificado.pem

Ahora para cuando necesitemos conectar utilizaremos la siguiente instrucción:
$ ssh -i /users/tuusuario/.ssh/miarchivocertificado.pem root@[IP de tu servidor]

Con eso debes poder entrar a tu servicio.

Espero te sea de utilidad !



Referencias:
http://stackoverflow.com/questions/14229846/connecting-to-amazon-aws-linux-server-by-ssh-on-mac

Configurando vim, macvim o gvim con el archivo vimrc o gvimrc

Para configurar el vim en sus diferentes modalidades (macvim o gvim) se debe utilizar el archivo .vimrc o .gvimrc (para macvim y gvim) y dentro de ese archivo colocar los parametros de configuración; para acceder al archivo podemos hacerlo desde el terminal utilizando el siguiente comando:

$ vi ~/.vimrc
ó
$gvim ~/.gvimrc

Dentro del archivo debemos colocar una serie de comandos de acuerdo a lo que necesitemos voy a dejar aquí algunos de los que yo utilizo, en caso de que vaya encontrando más hiré actualizando el archivo igual si tu conoces alguno muy bueno y que no lo haya colocado en este post, puedes hacerlo en los comentarios seguro nos servirá a todos.

"Cambiar a pantalla completa:
set fullscreen

"Esquema de Colores
"colorscheme default
colorscheme desert

"Línea
:set nowrap
:set textwidth=0
:set wrapmargin=0

"Barra de estatus
set laststatus=2

"Linea de nombre de archivos
hi StatusLine guifg=#eeeeee guibg=#888888

hi StatusLineNC guifg=#eeeeee guibg=#898989 "Sección no seleccionado
hi StatusLine termbg=blue ctermfg=white "Para el terminal

"Carácter para el Vertical Line Split
set fillchars+=vert:\

"Cambiando el cursor Cursor
highlight Cursor guifg=#888888 guibg=#eeeeee
highlight iCursor guifg=white guibg=#3780ff
set guicursor=n-v-c:block-Cursor
set guicursor+=i:ver100-iCursor
set guicursor+=n-v-c:blinkon0
set guicursor+=i:blinkon0

"Fondo y Color de Texto General
set transparency=20
highlight Normal guifg=white guibg=#111111
highlight NonText guifg=white guibg=#111111
 
"Fondo Seleccion
highlight Visual guibg=#73cbff guifg=white

"Fuente o tipo de letra
set anti gfn=Ubuntu\ Mono\:h17
set linespace=1 "Espacio entre líneas

"Ubicación de la pantalla
winp 52 244

"Tamaño de la Pantalla
win 120 20

"Comentarios
hi Comment guifg=#aaaaaa

"Columna de números
set number "Muestra la columna de numeros
highlight lineNR guifg=#cccccc


"Oculta Scrolls
set guioptions-=r "Hide Scrolls
set foldcolumn=0
set tabstop=2
set wrapmargin=15 "Margen del texto de lado izquierdo

"Barra de comandos
set ruler "Muestra la barra de columna y fila

Espero te sea de utilidad !

miércoles, 2 de octubre de 2013

Django Implementación (Deployment) Ubuntu + NGINX + uWSGI + MySQL en 10 pasos (Actualizado)

Bien ya me toco instalar django sobre apache, pero mucha gente me ha referido a nginx como un gran servidor para equipos con bajos recursos ( quiero ponerlo dentro de una maquina virtual -_- ), que pueden levantar con mayor velocidad, así que me dispuse a probarlo dentro de una maquina virtual aquí el procedimiento:


PASO 1

Instalar el Ubuntu, en este caso no hubo mayor problema descargue virtualbox versión 4.2.18 y la versión de ubuntu 12.04.3 LTS. Te recomiendo que durante el proceso de instalación cuando te pregunte por instalar un servidor Open SSH, si lo actives, te será más facil lo siguiente realizando una conexión ssh (Sobre todo si estas utilizando un maquina virtual).


PASO 2

Como siguiente paso instalaremos mysql usando las instrucciones:
$ sudo apt-get upgrade
$ sudo apt-get install mysql-server

NOTA: Ojo con el password que se requerirá posteriormente. Que bonito funciona ubuntu todo con línea de comandos y casi sin problema :) ...


PASO 3

Ahora instalamos pip ( Generalmente python ya viene instalado por defecto a menos que desees otra instalación de python ) para instalarlo usamos:
$ sudo apt-get install python-setuptools
$ mkdir setup 
$ cd setup
$ wget http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py
$ sudo easy_install pip

NOTA: Es increíble lo bien que funciona, todo desde el terminal si hay errores solo es buscar un poco en internet.


PASO 4

Instalar Django hacemos lo siguiente
$ sudo pip install Django


PASO 5

Ahora bien empezamos con el enlace mysql-python para eso debemos instalar la herramienta de mysqldb usando los siguientes comandos:

Ese comando actualiza las referencias.
$ sudo easy_install -U distribute 
$ sudo apt-get install libmysql++-dev
# Ese comando evita los errores relacionados a - gcc -
$ sudo apt-get install python-dev   
$ sudo apt-get install python-mysqldb


PASO 6

Copiamos o creamos nuestro proyecto:
$ django-admin.py startproyect mi_proyecto

NOTA: Esta guía es solo es para la implementación por lo que supongo que ya tienen algo desarrollado o bien pueden colocar dentro de alguna vista un Hola Mundo para realizar pruebas.


PASO 7

Empezamos ahora con la parte interesante, para instalar nginx seguimos con lo genial de ubuntu usando la línea de comandos:
$ sudo apt-get install nginx
$ sudo apt-get install build-essential python
# Este comando actualiza las referencias de pip.
$ sudo easy_install -U pip
# Este comando actualiza las referencias de uwsgi.
$ sudo easy_install -U uwsgi      
$ sudo pip install uwsgi

NOTA: La segunda herramienta se utiliza para el control de uwsgi, que es la que posibilita a django enlazar con nginx previamente había un fastcgi pero al parecer django esta por darlo de baja en la versión Django 1.7.


PASO 8

Necesitaremos crear el archivo ini que utilizará uwsgi para manejar nuestra aplicación, la ubicación del archivo puede ser dentro del directorio del proyecto, en mi caso generalmente lo pongo dentro de una carpeta que se llama deploy, y el nombre puede ser: mi_proyecto_uwsgi.ini y le añadimos el siguiente contenido:

[uwsgi]
     chdir = /ruta/a/tu/proyecto/ 
     module = mi_proyecto.wsgi
     master = true
     processes = 10
     socket  = /ruta/a/tu/proyecto/mi_proyecto.sock 
     chmod-socket  = 666
     vacuum  = true


PASO 9

Ahora necesitaremos indicarle a nginx donde buscar los datos del uwsgi para esto dentro del mismo directorio de deploy que tenemos dentro de nuestro proyecto creamos un archivo con nombre mi_proyecto_nginx.conf con el siguiente contenido:


upstream django{
        server unix:///ruta/a/tu/proyecto/mi_proyecto.sock;
}

server {
        listen   80;
     
        server_name mi_server;
        charset utf-8;

        # Max upload size
        client_max_body_size 10M;

        access_log /ruta/a/tu/proyecto/mi_proyecto.access.log;
        error_log /ruta/a/tu/proyecto/mi_proyecto.error.log;

        location /static {
                gzip_static on;
                alias /ruta/a/tu/proyecto/static/;
        }

        location / {
                include /etc/nginx/uwsgi_params;   # verificar la ruta en tu implementación
                uwsgi_pass django;
        }
}

NOTA IMPORTANTE:
Como lo hicimos con la configuración de uwsgi también es necesario indicarle esta configuración a nginx y de igual forma lo mejor es crear un enlace símbolico:

$ sudo ln -s  /ruta/a/tu/proyecto/deploy/mi_proyecto_nginx.conf   /etc/nginx/sites-enabled/ 


PASO 10

Hasta el paso anterior ya podriamos hacer algunas pruebas reiniciando el nginx ...
$ sudo /etc/init.d/nginx restart

... y corriendo el comando:
$ uwsgi --ini mi_proyecto.ini

Sin embargo lo que seguro vamos a necesitar, es que el servidor, cargue automáticamente el proyecto al iniciar el equipo, para esto necesitaremos los siguientes comandos:

# Creando el servicio
$ sudo vi /etc/rc.local

# Agregar la siguiente línea al archivo antes del exit 0 
/usr/bin/uwsgi --emperor /ruta/a/tu/proyecto/deploy/mi_proyecto_uwsgi.ini --uid mi_usuario --gid www-data --daemonize /ruta/a/tu/proyecto/mi_proyecto.uwsgi.log

NOTA: Se debe verificar la ubicación del archivo uwsgi.


Realizado lo anterior al reiniciar la maquina virtual o el servidor debería de cargarlo correctamente.

Espero te sea de utilidad !


Referencias y links consultados:
https://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html?highlight=django
http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#deploying-django
http://eth0.pro/post/1
http://www.ubuntu-es.org/node/172656#.UcDqY5WWRhY
https://www.digitalocean.com/community/articles/how-to-install-nginx-on-ubuntu-12-04-lts-precise-pangolin
http://www.howtogeek.com/howto/ubuntu/install-mysql-server-5-on-ubuntu/
https://gist.github.com/panuta/3075882
http://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-installing-eventlet
http://askubuntu.com/questions/157840/why-does-apt-get-fail-to-resolve-the-mirror
http://skuarch.blogspot.mx/2010/02/crear-un-servicio-en-ubuntu.html
http://stackoverflow.com/questions/11425106/python-pip-install-fails-invalid-command-egg-info

martes, 10 de septiembre de 2013

Guía rápida para los comandos de Git

Implementando Git en la empresa donde trabajo hicimos un resumen de los comandos que más utilizamos ...

Bajar repositorio ...
$ git clone https://github.com/usuario/repo.git

Entrar al repositorio ...
$ cd mlog

Ver los branch ocultos ...
$ git branch -a

Trabajar con los branches de manera local ...
$ git checkout -b stage origin/pruebas
$ git checkout -b master origin/produccion


Para cambiar de branch ...
$git checkout pruebas

Revisar cambios de los archivos ...
$ git status

Actualizar archivos nuevos y eliminados ...
$ git add -u

Realizar el commit en el equipo de forma local ...
$ git commit -m "Mensaje"

Bajar o actualizar el branch...
$ git pull https://github.com/usuario/repo.git pruebas

Subir información...
$ git push https://github.com/usuario/repo.git desarrollo

Combinar ramas ...
Rama Origen: desarrollo
Rama Destino: pruebas
(desarrollo) $ git checkout pruebas
(pruebas) $ git merge desarrollo


Actualización :: 24/Sep/2013

Ver el autor de cada una de las líneas de código de un archivo ...
$ git blame miarchivo.py

En caso de que tengas varios archivos que git marca como modificados y quieres deshacerte de todo utiliza:
$ git clean -df & git checkout .



Espero te sea de utilidad !

Créditos
Elaborada en equipo con - Carmen Gutierrez Perez - Miguel Velazco - Gonzalo Morales -

Referencias:
http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging


PHP Error Log desde el terminal (OSX)

Como fan de la terminal, me tope con la siguiente opción para ver los errores en tiempo real del php_error.log y es utilizando el siguiente comando:

$ tail -f /ruta/al/logs/php_error.log

En mi caso utilizo MAMP como herramienta de pruebas por lo que con la siguiente instrucción puedo estar viendo los errores que se generan desde el terminal:

$ tail -f /Applications/MAMP/logs/php_error.log

Si es muy largo el comando siempre podemos acudir al ~/.bash_profile para crear un alias por ejemplo:

-- Abrimos el archivo .bash_profile:
$ vi ~/.bash_profile

-- Añadimos la línea:
alias phplog="tail -f /Applications/MAMP/logs/php_error.log"

-- Guardamos el archivo y salimos
usando ESC + [Presionar :] + [Presionar w] + [Presionar q]

-- Debemos reiniciar el terminal para que los cambios tengan efecto, y posteriormente solo utilizamos:
$ phplog


Espero te sea de utilidad !


Referencias:
http://magp.ie/2011/03/10/debugging-php-by-monitoring-errors-in-terminal/

sábado, 31 de agosto de 2013

Agregar nombre de la rama (branch) de git al prompt de OSX o Linux

Este proceso en realidad es muy sencillo si se esta utilizando alguna interfaz gráfica pero en ocasiones puede ser útil para los que nos gusta mucho usar el terminal el poder ver en todo momento en cuál rama (branch) estamos actualmente o tenemos activa.

Para dicho fin debemos editar el archivo .bash_profile lo cuál podemos hacerlo desde el terminal usando vim o el editor de su preferencia:

$ vi ~/.bash_profile

Añadimos la siguientes líneas:

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}
export PS1="\W\[\033[34m\]\$(parse_git_branch)\[\033[00m\] $ "

La parte donde se agrega la rama es en $(parse_git_branch), la sección [\033[34m\]\ es para agregar color a esa sección, el color que tengo seleccionado actualmente es el azul, para modificar el color solo es modificando el 34m por alguno de los valores válidos:

30m # Regular
31m # Rojo
32m # Verde
33m # Amarillo
34m # Azul
35m # Purpura
36m # Cian
37m # Blanco

Espero te sea de utilidad !



Referencias:
https://github.com/mfitzp/golifescience/blob/master/content/computing/add-git-branch-name-to-terminal-prompt-mac.md
https://news.ycombinator.com/item?id=2089285

miércoles, 12 de junio de 2013

Enviar correo con stunnel y gmail para impresoras Dell

En este caso me toco realizar una tarea de configuración algo interesante con el programa stunnel, como de costumbre dejo aqui como me funciono. Creo que este proceso puede servir aunque no se trate de configurar un cliente de correo de una impresora.

El detalle es que el cliente de correo de una impresora que tenemos la Dell 2335 dn no tiene soporte para conexiones encriptadas (o al menos la versión de firmware que tenemos instalada), por lo anterior fue necesario instalar un servidor de stunnel.

Puedes descargar el stunnel desde aquí:
http://www.stunnel.org/

Una vez instalado si tienes el programa corriendo es recomendable que lo cierres o dando click sobre el icono que queda a lado del reloj hagas click en salir.


Posteriormente abriremos el archivo stunnel.conf en mi caso como quedo instalado lo puedes abrir desde la misma carpeta del programa.


Dentro de ese archivo deberá tener lo siguiente (Ojo las líneas con - ; - son comentarios):
cert = stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7
client=yes
[gmail]
accept=5000
connect=smtp.gmail.com:465

Guardamos posteriormente y luego volvemos abrir el stunnel utilizando la opción -Run stunnel- que se encuentra dentro de las opciones de Todos los programas/stunnel/Run stunnel

NOTA: Es mejor cerrar el programa y abrirlo ya que estaba utilizando antes la opción reload y no funcionaba.

A partir de ese momento ya debemos poder utilizar ese equipo como tunel esto es, para configurar el correo electrónico deberemos utilizar las siguientes opciones:
-------
servidor de correo: [IP del servidor que tiene instalado el stunnel]

puerto de conexión: [ En este caso siguiendo el ejemplo es 5000 ]

usuario: [ Nuestro correo de gmail ]

contraseña: [ La contraseña del correo ]
-------
Con lo anterior debería funcionar, en mi caso colocando esos parametros en la configuración de la impresora Dell 2335 dn ya logre que enviará correos desde una cuenta de gmail.


Saludos, Espero te sea de utilidad !


Referencias:
http://www.charmedquark.com/vb_forum/showthread.php?t=7943
http://www.projectpier.org/manual/installation/gmail-for-smtp

viernes, 31 de mayo de 2013

Firebird isql terminal

Como ven me he hecho muy aficionado a la terminal, esta vez le toca el turno a una base de datos que utilizó mucho en mi trabajo Firebird.

Para hacer una conexión se debe utilizar:

$ isql
SQL> connect "192.168.1.2:c:\bases\mibase.gdb" user "miUsuario" password "laClave";
Database:  "192.168.1.2:c:\bases\mibase.gdb", User: miUsuario

Con la instrucción anterior se hace la conexión al servidor remoto 192.168.1.2 utilizando miUsuario y laClave. Hasta aqui todo facil.

Para ver un listado de las tablas podemos utilizar el siguiente comando:

SQL> show tables;

Por otro lado si deseamos ver los campos de una tabla utilizamos:

SQL> show table miTabla;

Para salir de isql sin realizar un commit de las transacciones se debe utilizar:

SQL> quit;

En caso contrario para salir y aplicar todos los cambios utilizar:

SQL> exit;

De aquí podemos utilizar las instrucciones de SQL que ya conocemos. En particular empece a revisar como conectarme por que estaba interesado en algo en particular exportar información.

Para exportar información utilizamos:

SQL> output "miarchivo.txt"
SQL> select * from miTabla;
SQL> output;

Con lo anterior en miarchivo.txt quedará almacenado el resultado de la consulta de miTabla.


Más información:
http://www.firebirdsql.org/pdfmanual/Firebird-isql.pdf


Espero te sea de utilidad !

lunes, 20 de mayo de 2013

Conectar la terminal con los recordatorios (OSX terminal or applescript and reminders)

Como de costumbre ahora otro pendiente conectar la terminal de OSX con la aplicación de Recordatorios de Mountain Lion, he iniciado un proyecto en github que se llama task (https://github.com/omaryahir/task), ya puedes marcar como concluida alguna tarea, crearla o eliminarla, incluso puede conectarse a la aplicación de Calendario también.


Referencias


viernes, 8 de marzo de 2013

Emulador Android: Bluestacks instalar .apk de manera manual

Con la necesidad de utilizar algunas aplicaciones Android desde mi Mac me dia a la tarea de buscar emuladores, y me encontre con que BlueStacks ahora tiene soporte para Mac e incluye ya algunas aplicaciones.

Sin embargo no incluye todas por lo que me di a la tarea de como cargar directamente un .apk (o archivo ejecutable para Android en el sistema).

La forma que encontre es unicamente con la terminal así que debemos correr este comando:

$ cd /Applications/BlueStacks.app/Contents/Runtime

Dentro de ese directorio existe un comando llamado uHD-Adb para ejecutarlo debemos usar un comando como el siguiente:

$ ./uHD-Adb install /mis_apks/mi_aplicacion.apk

Con lo anterior se ejecuta una serie de mensajes y termina indicando -Success- si la instalación concluyo con éxito, con eso me funciono...

Espero también te sea de utilidad !



Referencias:
https://getsatisfaction.com/macbstk/topics/how_to_install_apk_on_bluestacks_for_mac_os_x_alpha_2
http://www.bluestacks.com/

viernes, 1 de marzo de 2013

Convertir un .py a .app con py2app

Me vi en la necesidad de convertir un script de python de .py a .app y lo hice con py2app, describo como lo hice.

Instale el py2app, utilizando la instrucción con easy_install, lo que implica que debe estar instalado.

$ sudo easy_install -U py2app

Una vez concluida la instalación, fue necesario crear un archivo setup.py para esto utilice el comando py2applet de la siguiente forma:

$ py2applet --make-setup notifyhour.py --iconfile="/icon.icns"

Posteriormente solo edite el archivo resultante de setup.py la sección de OPTIONS, ya que la sección de iconfile pone la ruta completa al archivo pero puede funcionar indicando solo la ubicación del archivo si esta en raíz o su ruta relativa:

OPTIONS = {'argv_emulation': True,
 'iconfile': 'icon.icns'}

Una vez realizado el cambio anterior ejecute la instrucción:

$ python setup.py py2app

Con lo anterior me creo la aplicación si necesitas hacer alguna modificación recomiendan limpiar los directorios build y dist, se puede hacer de la siguiente forma:

$ rm -rf build dist

Ojo hay que estar en el directorio del proyecto.


Espero te sea de utilidad !


Más información:
http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html#installing-with-easy-install

martes, 26 de febrero de 2013

Utilizando el Centro de Notificación de Mac desde Python (Mac Notification Center)

Es realmente muy sencillo utilizarlo, si usamos la siguiente herramienta:

Básicamente después de instalarlo solo se deben usar las siguientes instrucciones:
-------
from pync import Notifier
Notifier.notify("Hola Mundo !")
-------

Y con eso es todo realice un script que envía un mensaje cada hora pueden echarle un vistazo en el repositorio de github:

Saludos espero te sea de utilidad !

miércoles, 13 de febrero de 2013

Django Deployment mod wsgi Windows Apache y MySQL


Nota: Por el momento mi proceso lo realice utilizando las versiones de 32 bits, indicare datos adicionales de versiones en cada paso que haya utilizado.

PASO 1: Instalar MySQL (versión 5 de 32 bits)

Descargando el instalador desde el sitio de Oracle, es probable que sea necesario que se registren.

PASO 2: Instalar Python (versión 2.7 de 32 bits)

Es importante configurar las variables de entorno para que desde la consola en cualquier lugar podamos utilizar solo la palabra python para ejecutar.


PASO 3: Instalar Python-MySQLdb (32 bits)

Se puede probar si quedo instalado entrando en python y utilizando:
 >>> import MySQLdb
Si no hay errores quiere decir que vamos bien, en caso de que tengan problemas con la instalación de este módulo pueden seguir este post:
http://omaryahir.blogspot.mx/2012/10/python-y-mysql-en-os-x-mountain-lion.HTML


PASO 4: Instalar Django (versión 1.4.3 )

Se puede probar que funciona django entrando a Python y usando:
>>> import Django
Si no hay errores vamos bien :)


PASO 5: Instalar Apache (httpd-2.2.22-win32-x86-openssl-0.9.8t.msi)

Lo descargue de esta dirección:
http://apache.webxcreen.org//httpd/binaries/win32/
Una forma rápida de verificar que funciono es abrir en el navegador el sitio http://localhost, en mi caso lo instale en el puerto 80.


PASO 6: Descargar mod_wsgi (versión 3.3)

Se debe descargar del sitio http://code.google.com/p/modwsgi/

Obtendremos un archivo de extensión .so este archivo debemos copiarlo al directorio modules de nuestra instalación de Apache (En mi caso C:\Program Files (x86)\Apache Software Foundation\Apache2.2\modules).

Para mayor comodidad renombramos el archivo que probablemente se encuentre con este nombre: mod_wsgi-win32-ap22py27-3.3.so, lo cambiamos por mod_wsgi.so nada mas.
Ahora bien es importante elegir un directorio para nuestras aplicaciones mod_wsgi, en mi caso yo hice uno en C:\wsgi_app\


PASO 7: Cargar el modulo mod_wsgi

Para este proceso es necesario localizar el arhivo - httpd.conf - usualmente se encuentra dentro del directorio /conf/ de la instalación de Apache (En mi caso lo encontre en: C:\Program Files (x86)\Apache Group\Apache2\conf).

Una vez abierto con cualquier editor de textos en mi caso uso Sublime, localizar "LoadModule" al encontrar dicho texto nos daremos cuenta que es la instrucción que utiliza Apache para cargar sus módulos; agregaremos una instrucción similar al final de estas sentencias de LoadModule quedando de la siguiente forma:

----
LoadModule wsgi_module modules/mod_wsgi.so
----

NOTA: Es probable que necesites editar el archivo en otro lugar y luego copiarlo al directorio en caso de que tengas restringido la modificación de archivos en el directorio donde se instaló el Apache.


PASO 8: Agregando en el archivo httpd.conf el WSGIScriptAlias

Dentro del archivo que abrimos en el paso anterior - httpd.conf - localizaremos la palabra Directory después del bloque < Directory / >  agregaremos lo siguiente:

----
# Config mod_wsgi
WSGIScriptAlias /wsgi "C:/wsgi_app/wsgi_handler.py"
< Directory "C:/wsgi_app"  >
    AllowOverride None
    Options None
    Order deny,allow
    Allow from all

< / Directory >
----

Lo anterior quiere decir que accederemos a los sitios que coloquemos en el directorio que creamos utilizando por ejemplo: http://localhost/wsgi

Ahora probaremos si quedo instalado correctamente el wsgi, creamos el archivo: wsgi_handler.py con el siguiente contenido:

def application(environ, start_response):
    status = "200 OK"
    output = "Funciono !!!"
    response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

Una vez realizado lo anterior debemos reiniciar nuestro servidor Apache, lo cual podemos realizarlo desde el Apache Monitor, Si al reiniciar no hubo errores estamos del otro lado... :D

Algunos errores que me pasaron a mi:
- Use la versión 2.0 de Apache en un principio y no quizó cargar el archivo: mod_wsgi.so
- Otro error que tuve es que no le cambie el nombre al archivo por lo que no lo encontraba.

Bien, si no hubo errores vamos al navegador y colocamos:
http://localhost/wsgi/
Si ves el mensaje que dice Funciono !!!, entonces que crees... Funciono :)


PASO 9: Ahora si poniendo nuestro proyecto de Django

Hasta el paso anterior tenemos un servidor que tiene activado mod_wsgi y puede ejecutar archivos de python. Entonces ahora para colocar nuestros proyectos de Django regresaremos al archivo httpd.conf y vamos agregar otro directorio:
----
# MiProyecto
WSGIScriptAlias / "c:/wsgi_app/miproyecto/miproyecto/wsgi.py"
WSGIPythonPath "c:/wsgi_app/miproyecto"
< Directory "c:/wsgi_app/miproyecto"   >
   < Files wsgi.py >

      Order deny,allow
      Allow from all
   </Files >

< /Directory  >
----

Hasta aquí es probable que el proyecto funcione correctamente pero tendremos el detalle con los archivos estáticos por lo que agregamos lo siguiente:

----
Alias /static/ "c:/wsgi_app/miproyecto/static/"
----

#### ACTUALIZACION 15 FEB 2013
Me di cuenta de que si no se tienen los permisos correctos no se cargaran los archivos estáticos, por lo que se deben tener los permisos necesarios y además modificar el archivo httpd.conf quedando de la siguiente forma:

----
Alias /static/ "c:/wsgi_app/miproyecto/static/"
< Directory "C:/wsgi_app/miproyecto/static/"   >
      SetHandler None
      Order allow,deny
      Allow from all

< /Directory  >
----




Guardamos y reiniciamos.

Con lo anterior todo debe funcionar ya nadamas recuerda cambiar la variable DEBUG = False en el archivo settings.py


Casi lo olvido:El Administrador de Django tiene sus propios archivos estaticos y los busca en "/static/admin/" por lo que de acuerdo a lo que nos recomiendan en el sitio de Django:

"We strongly recommend using django.contrib.staticfiles to handle the admin files"

Una de las sugerencias es copiar los archivos a nuestro directorio por lo que en mi caso lo que hice fue copiar de:

"C:/Python27/Lib/site-packages/django/contrib/admin/static/admin/"

Al directorio donde tengo mis archivos estaticos:

"c:/wsgi_app/miproyecto/static/"

Con lo anterior el sitio de administración debe tomar los archivos estaticos.




Espero te sea de utilidad !




Referencias:
http://stackoverflow.com/questions/3777678/apache-mod-wsgi-django-setup-forbidden-you-dont-have-permission-to-access-my
http://pradyumnajoshi.wordpress.com/2009/06/09/setting-up-mod_wsgi-for-apache-and-django-on-windows/
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/

jueves, 7 de febrero de 2013

Django : Problema Fechas Diferentes en Modelos o Base de Datos

Esto es muy sencillo pero me ha llevado mucho tiempo darme cuenta en donde estaba el problema.

Cuando almacenaba Django alguna fecha en alguna tabla por alguna razón la fecha-hora que quedaba almacenado físicamente en la base de datos era diferente a la que podía obtener desde Django.

Ojo, Django me mostraba la fecha-hora tal como la necesitaba pero fisicamente en la base de datos quedaba otra. Quizá esto no sea un problema en algunos proyectos, pero como el proyecto que estoy desarrollando en este momento no solo esta en Django es decir existe más software que se conecta a la misma base de datos y obtiene información por lo que esto es un verdadero problema en mi caso claro.

La forma de solucionarlo es realmente simple en el archivo settings.py se debe poner el valor:

 USE_TZ=False      # Por omisión se encuentre en True

Una vez cambiado este parametro las fechas que se almacenan en Django y las que se encuentran fisicamente en la base de datos son las mismas.

Espero te sea de utilidad !


Más información:
https://docs.djangoproject.com/en/dev/topics/i18n/timezones/

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 !