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/