martes, 25 de agosto de 2015

Maricela Ocaña
Programación Paralela y Distribuida


Programación Google App Engine con Python

Google App Engine nos permite publicar aplicaciones web en línea sin necesidad de preocuparnos por la parte de la infraestructura y con un enfoque 100% en la construcción de nuestra aplicación y en la posibilidad de correrla directamente sobre la infraestructura de Google, es decir, la que Google usa para sus propios productos esto garantiza un mejor rendimiento de la aplicación.

Para el almacenamiento de datos tendremos dos posibilidades en casi cualquier lenguaje en el que estemos desarrollando: Cloud Datastore y Cloud SQL. 

Cloud Datastore es una base de datos NoSQL ideada como la opción de almacenamiento principal a la hora de que corremos aplicaciones en App Engine.

Cloud SQL es una base de datos MySQL que corre en la nube de Google y tiene todas las características de cualquier base MySQL, entre otras.

Características
GAE soporta de manera oficial los lenguajes de programación Python y Java de manera estable y en modo de beta testing en lenguaje de programación Go creado por ellos mismos. Al soportar Java, es posible además utilizar cualquier lenguaje JVM o lo que es lo mismo, cualquier lenguaje que pueda ejecutarse sobre una máquina virtual de Java, aunque eso sí, con serias limitaciones. Entre dichos lenguajes se encuentran:
  • Groovy
  • JRuby
  • Scala
  • 4PHP
  • Clojure
  • Perl

Pero sin duda Python es el lenguaje mejor soportado y con mayor robustez por parte del App Engine.
Para utilizar Google App Engine como tu propia  red de entrega de contenidos (CDN) personal necesitas instalar algunas cosas en tu computadora y editar unos archivos de configuración. Todo este trabajo se realiza una sola vez y luego lo que necesitas es correr un simple programa para subir los archivos a Google.
Los scripts que tienes que descargar solo están disponibles para Windows únicamente si cuentas con otro sistema operativo deberás crearlos para que realicen las mismas funciones, el scrip que tienes que descargar es el siguiente:
deploy_digitalistic_cdn.bat 
Si ya cuentas con lo anterior sigue los siguientes pasos.
  1. Necesitas descargar e instalar Python en tu computadora. Si estas corriendo Mac o Linux, es muy probable que ya cuentes con Python instalado, así que puedes saltar este paso. Es recomendable descargar la Python 2.5 en adelante debido a que con las versiones 3 presenta algunos problemas.
  2. Descarga el SDK del motor de Google APP desde http://code.google.com/appengine/downloads.html e instalo. Durante la instalación del SDK va a revisar que tengas instalado Python o no, así que si tienes algún problema con la instalación de Python lo sabrás en este paso. El Google App Engine SDK es necesario para escribir y subir aplicaciones a Google. Solo utiliza las opciones ya establecidas cuando instales el SDK.
  3. Regístrate para el Google App Engine en appengine.google.com. Para esto crear una cuenta de Google.
  4. Una vez que hayas ingresado al servicio, crear una aplicación, así que pulsa el botón de “Create an application” y dale a la aplicación un nombre .Este nombre tiene que ser único dentro de todas las aplicaciones de usuarios, así que puedes tardar un rato en encontrar un nombre único. Guarda la nueva aplicación. Luego de que hayas creado esta primera aplicación, necesitas especificar tu número de teléfono. Google te enviará un mensaje de texto SMS con un código para ingresar al sitio. Esto confirma que eres el dueño de la cuenta de Google App Engine.
  5. Descarga el archivo http://nombredeaplicacion.appspot.com/files/digitalisticcdn.zip  (alojado en mi CDN privado!) y descomprímelo en tu disco duro. Si quieres puedes cambiarle el nombre del directorio de “nombre de aplicación” al nombre que quieras, por ejemplo el de tu propia aplicación. No importa realmente y solo te facilita el mantener un registro para el futuro.
  6. Utiliza un editor de texto para editar el archivo app.yaml que se encuentra en el directorio de “nombre de aplicación”. Cambia “application: nombre de aplicación” a “application:el identificador de tu aplicación” y guarda el archivo. Esto le dirá a Google App Engine que aplicación debe utilizar para cargar archivos.
  7. Ahora es tiempo de agregar todas las imágenes, hojas de estilo, archivos, vídeos, etc. que quieras subir a Googleen los folders de “nombre de aplicación”. Incluye las imágenes en el folder /images, etc. Puedes crear cualquier número de subfolders dentro de imágenes, archivos, hojas de estilo, etc. Puedes agregar más archivos en cualquier momento, así que si sólo quieres configurar la aplicación para que funcione puedes saltar este pasó. Ya existe una imagen en el folder de /images para que puedas comprobar que está funcionando como debería.
  8. Descarga http:/nombredeaplicación.appspot.com/files/deploy_digitalistic_cdn.bat y edítalo con un editor de texto. Este archivo debe apuntar a tu instalación de Python, tu instalación de Google App Engine y tu directorio “nombre de aplicación”. Si has instalado Google App Engine SDK en el directorio original y Python en C:/Program Files/ entonces no tienes que preocuparte por esta configuración. Solo cambia la última parte del archivo para apuntarlo a tu directorio de “nombre de aplicación”. Ten en cuenta que todas las rutas que tienen espacios tienen que estar encerradas entre comillas.
  9. Doble click en el archivo recientemente actualizado deploy_digitalist_cdn.bat para subir todos los archivos dentro del directorio “nombre de aplicación” hacia Google. La primera vez que hagas esto deberás especificar tu usuario y password de Google.
  10. Ahora ya tienes tu propio CDN privado! Ve a (“nombre de aplicación”).appspot.com/images/ninja.gif para ver si funciona.

 

lunes, 24 de agosto de 2015

Maricela Ocaña
Programación Paralela y Distribuida


Programación Android con Python

    Aunque Java es el lenguaje estándar para el desarrollo de aplicaciones para Android, se han desarrollado interpretadores que  tengan lenguajes de secuencias de comandos para crear aplicaciones para Android. Tal es el caso de QPython que nos permite programar con Python.

    QPython es un motor de secuencias de comandos que se ejecutan en los dispositivos Android. Permite correr proyectos y scripts python en nuestros dispositivos Android. Contiene un intérprete Python, consola, un editor, y la librería SL4A para Android. Es Python corriendo en Android!
    Ofrece un kit de desarrollo que permite desarrollar fácilmente proyectos y scripts de Python en los dispositivos Android.
Características principales:
  1. Ejecutar Scripts de Python y Proyectos en dispositivos Android.
  2. Soporta programación Python en Android incluyendo aplicaciones web, juegos y programación SL4A.
  3. Se puede ejecutar código Python y archivos de QRCode.
  4. QEdit le permite crear/editar los scripts de Python y Proyectos fácilmente.
  5. Incluye muchas librerías útiles de Python.

Programación de Funciones:
  1. Compatible con la programación Web app, que nos permite desarrollar aplicaciones móviles con un framework de desarrollo web, esto acelera el desarrollo de aplicaciones móviles en gran medida.
  2. Soporta la programación de UI nativas, la cual permite desarrollar juegos con mayor facilidad mediante el uso de secuencias de comandos.
  3. Soporta la programación SL4A para acceder a las funciones de Android: Redes, Bluetooth, GPS y mucho más.

    La aplicación de QPython la puedes descargar gratuitamente desde la Play Store y está basada en Python 2.x, pero también existe la versión para Python 3.x.

Para la instalación de librerías externas consta de dos métodos:
  1. QPypi: librerías ya preparadas por la aplicación. Podemos encontrar androidhelper (acceso a sensores del móvil, cuadros de texto, etc), kivy (nos permite crear aplicaciones rápidas en nuestro android: botones, pantallas con mensajes, etc), numpysqlite3, etc.
  2. pypi: nos da acceso al directorio de librerías Python en la red, permitiendo la descarga de la librería que queramos tan solo introduciendo su nombre.
   Una vez instalada, podemos abrir la aplicación y acceder a un pequeño tutorial “Quick Start”. Aquí ya podemos checar  la apariencia que tiene el código en estas aplicaciones. En cualquiera de ellas podemos hacer click sobre “Copy to editor to run”, y una vez estamos en el editor hacemos click en el botón de “Play” para ejecutar el script. En el segundo podemos ver un ejemplo de una aplicación que cambia de color el fondo de pantalla al hacer click sobre la pantalla.
Si en vez de entrar en el tutorial, deslizamos la pantalla hacia la izquierda, aparecerán el resto de botones de la aplicación, entre los que podemos ver la consola para ejecutar código, el Editor y el Programa con nuestros scripts, el apartado de Librerias para la instalación de librerías externas y el de Community con acceso a la web de qpython.org
    QPytho cuenta lector QR en su web que carga directamente tu código en la app (actualmente no disponible por reforma de la web). Por ahora lo más factible sería cargar tu fichero en el móvil utilizando algún métodos de los comunes para envío de datos, ya sea usando la red o mediante cable de datos.
    Un ejemplo sencillo es el acceso al sensor gps, mostrando por consola sus coordenadas. Aquí faltaría ver con más calma el significado de los datos que nos da, creo que si le pedimos al sensor las coordenadas de tipo “network” son las relacionadas con tu red wifi  pero no están calculadas mediante gps, para ello son las de tipo “gps” que vemos en el script:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#-*-coding:utf8;-*-
#qpy:2
#qpy:console

print "This is console module"

import androidhelper, time
droid = androidhelper.Android()
droid.startLocating()
time.sleep(10)
c = 0
while c<50:

  l = droid.readLocation()
  R =l.result
  try:
    R =R["gps"]
    Lat= R["latitude"]
    Lon=R["longitude"]
    #R1 =R["network"]
    #Lat1=R1["latitude"]
    #Lon1=R1["longitude"]
    outstr = str(Lat) +","+ str(Lon)
    droidfile = '/sdcard/droidtrack_bus1.txt'
    print outstr#, str(Lat1) , str(Lon1)
    fh = open(droidfile,'a')
    res= fh.write(outstr +'\n' )
    res = fh.close()
    time.sleep(30)
    c+=1
    print c
  except:
    time.sleep(10)
    print c
    print R
    c+=1



    Como nos podemos dar cuenta desarrollar nuestras propias aplicaciones en Android resulta sencillo y sin tener que utilizar Java y nos muestra un entorno de desarrollo más sencillo con Python.


miércoles, 19 de agosto de 2015

Practica #2
Programación Paralela y Distribuida
Maricela Ocaña

PROGRAMACIÓN WEB CON PYTHON


Para la programación Web con Python es necesario conocer antes que Python es un lenguaje de programación de alto nivel que puede ser utilizado en un gran número de áreas, entre ellas las aplicaciones de escritorio, aplicaciones web, scripts de configuración e incluso videojuegos.
Para la programación web con Python utilizaremos Django  que es un framework de desarrollo web de código abierto, escrito en Python, que respeta el patrón de diseño conocido como Modelo–vista–controlador.

Requerimientos
Django requiere Python 2.7. o superior (Con phyton 3 presenta problemas). No se necesitan otras bibliotecas de Python para poder obtener una funcionalidad básica. En un entorno de desarrollo  especialmente si queremos experimentar con Django no necesitamos un web server instalado, ya que Django trae su propio servidor liviano para éste propósito, con la restricción de solo permitir un usuario a la vez.

Obtener Django
Para obtener Django se puede:
  • Descargar la versión estable oficial más reciente, desde el sitio oficial http://django.es/descarga/ descomprimir el archivo, debe aparecer una carpeta con el nombre de Django seguido del número de la versión bajada.
Una vez que se ha obtenido Django, es momento de instalarlo.

Python y las variables de entorno en Windows

Debemos  asegurarnos  de tener Python dentro de las variables de entorno, esto servirá para poder instalar Django y usarlo fácilmente.
Para poder editar las variables de entorno deberás hacer lo siguiente:


Una vez que ya has seleccionado la variable del sistema patch deberás editar y agregar lo siguiente:
C:\Python27;C:\Python27\Scripts

Instalar Django
Una vez que se descomprime el archivo descargado, debemos  descomprimirlo en el Disco C después de eso tenemos que  acceder a la carpeta desde una terminal o ventana de comandos (cmd). 



Ya en la carpeta de instalación de Django, se debe digitar la siguiente instrucción (Debes de tener permisos de administrador).



Este proceso tarda unos minutos.

Una vez terminado el proceso ya tienes Django instalado.

Primer proyecto

Para crear nuestro primer proyecto, abrimos una terminal (cmd), nos ubicamos en la carpeta en donde queremos crear nuestro proyecto y digitamos:
django-admin.py startproject recetario

Esta instrucción creará dos directorios con el nombre del proyecto (en este caso: recetario) y 5 archivos distribuidos de la siguiente manera:
  • manage.py
  • recetario
    • __init__.py
    • settings.py
    • urls.py
    • wsgi.py
Para ver que el proyecto está funcionando en la terminal debemos escribir:
python manage.py runserver

Al ejecutar esa instrucción debemos visualizar un resultado como el siguiente:


python manage.py runserver

Abrimos el navegador web la dirección http://127.0.0.1:8000/ y debemos ver lo siguiente:


Si visualizamos esto ya tenemos nuestro proyecto creado. 

Primera aplicación

Para crear nuestra primera aplicación, desde la terminal (cmd) y en la carpeta del proyecto, debemos digitar: python manage.py startapp principal
Esto creará un directorio y cuatro archivos más, lo que nos dejarían con una estructura de archivos como esta:
  • manage.py
  • recetario
    • __init__.py
    • settings.py
    • urls.py
    • wsgi.py
  • principal
    • __init__.py
    • models.py
    • test.py
    • views.py
El poderoso settings.py

Una parte muy importante del proyecto es el archivo settings.py, este archivo permite configurar la conexión a la base de datos, la zona horaria, el idioma, los directorios principales del proyecto, las aplicaciones del proyecto, entre otras cosas.

Aprender a configurar este archivo permite optimizar el funcionamiento del proyecto, veremos las instrucciones principales a configurar:

Codificación de caracteres

Nuestro idioma está lleno de caracteres especiales como las tildes y las eñes que son las más comunes, la primera sugerencia para manejar esto eficientemente en django debemos agregar la siguiente línea al archivo settings.py
#encoding:utf-8

Ruta del proyecto

Una configuración importante es configurar la ruta del proyecto, esto permitirá lanzar la aplicación desde cualquier directorio y mover el proyecto a cualquier computador con Django instalado. Para ello debemos escribir las siguientes líneas en el archivo settings.py:

# Identificando la ruta del proyecto
import os
RUTA_PROYECTO = os.path.dirname(os.path.realpath(__file__))

Ruta del proyecto

Si no se configura la ruta del proyecto, cada vez que se cambia de directorio o de PC, se tendrá que cambiar las rutas de las plantillas, archivos estáticos y directorio de subida de contenido de los usuarios.

Administradores

Cuando Django tiene la opción de DEBUG=False, las notificaciones de error de código deben ser enviadas vía correo electrónico a los administradores, junto con
los detalles completos del error. Para poner los datos de los administradores debemos buscar la siguiente porción:

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)
Y modificarla para que quede con los nombres de los administradores en forma de tupla, en mi caso lo dejaré así:
ADMINS = (
    ('Sergio Infante Montero', 'raulsergio9@gmail.com'),
)

Configuración de la base de datos

También podemos configurar la conexión a la base de datos según nuestras necesidades, Django soporta de manera predeterminada la conexión con postgresql, mysql, sqlite3 y oracle. En nuestro proyecto usaremos sqlite3.
Debemos buscar la siguiente sección del archivo:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

Y dejarla de la siguiente manera:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'recetario.db',          # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}



Zona Horaria

Django permite configurar la zona horaria del proyecto, para mayor facilidad lo puedes encontrar en wikipedia. Para configurar debemos buscar lo siguiente:
Yo lo configurare en la zona horaria de America/Mexico, así que lo modificare de la siguiente forma:
TIME_ZONE = 'America/Mexico'

Configuración del idioma

Django también permite configurar el idioma que usará de manera predeterminada para su funcionamiento, para configurar esto debemos buscar lo siguiente:
yo lo configurare como español de Mexico:
LANGUAGE_CODE = 'es-PE'

Aplicaciones instaladas

Un proyecto en Django necesita de aplicaciones, algunas ya vienen configuradas de manera predeterminada. En nuestro proyecto usaremos la aplicación de administración y su documentación, estas ya vienen construidas, y también nuestra primera aplicación creada líneas arriba, llamada principal. Para habilitar estas aplicaciones debemos buscar la siguiente sección que se encuentra casi al final del archivo settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

Y modificarlas de la siguiente manera:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'principal',
)

Creación de la base de datos

Hasta el momento no se ha creado la base de datos o las tablas predeterminadas del proyecto, solo se ha configurado los parámetros de conexión. Para crear la base de datos, debemos digitar desde la terminal o ventana de comandos (cmd), la siguiente instrucción:
python manage.py syncdb

Esta instrucción deberá mostrar el siguiente resultado:


Hay una pregunta que debemos responder, se refiere a la creación de un superusuario (un administrador del proyecto), para lo cual respondemos: yes (en caso de responder negativamente, no podremos usar inmediatamente el administrador predeterminado de Django). Luego de ello completamos la información que nos solicita.


Django creación del super usuario

Al finalizar ya estará creada la base de datos, como en este proyecto se usara sqlite3, deberá aparecer un archivo nuevo llamado recetario.db, este contiene las tablas y los datos iniciales del proyecto.
Las direcciones URL del proyecto
Para poder visualizar los cambios que hicimos y la interfaz administrativa de Django, aún falta modificar un archivo más, este es: urls.py

Este archivo contiene lo siguiente:

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('',
    # Examples:
    # url(r'^$', 'recetario.views.home', name='home'),
    # url(r'^recetario/', include('recetario.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

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

Debemos dejarlo de esta manera:

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

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

Ejecución del proyecto

Una vez que tenemos todo listo y configurado, debemos nuevamente iniciar el servidor de desarrollo que tiene el proyecto. Ya hicimos esto al principio, solo debemos digitar desde la terminal nuevamente:
python manage.py runserver
Lucirá de esta manera:


Django admin login

Si todo fue correcto debemos visualizar la interfaz administrativa: