martes, 25 de diciembre de 2012

Actualizando el Samsung Galaxy Nexus a Jelly Bean 4.2.1 desde Linux

Hola, aquí estoy con un nuevo tema, el cual surgió de la necesidad de actualizar mi teléfono Samsung Galaxy Nexus GT-i9250, cansado de esperar la actualización automatica por parte de Google, así que me puse a curiosear un poco por la red y conseguí que se podía hacer, pero mis exigencias eran un poco mas allá de lo que normalmente conseguía, aplicaciones hechas solo en Windows. Quería que funcionaran en linux y logre conseguir a Universal Nexus Linux Toolkit v2.0, que es un programa basado en script bash que ofrece una manera fácil de hacer todo lo que necesita hacer antes de flashear una ROM personalizada en el dispositivo Nexus.

Eso es lo que yo necesitaba y me arriesgue a usarlo, aquí les voy a contar lo sencillo que es, sin complicaciones. Eso si, te recomiendo que hagas tu respaldo, ya que este procedimiento te deja el teléfono como viene de fabrica.

Este programa sirve para los siguientes equipos:
  1. Nexus 4 [mako]
  2. Nexus 10 [manta]
  3. Nexus 7 (WiFi) [grouper]
  4. Galaxy Nexus (GSM) [maguro]
  5. Galaxy Nexus (Verizon) [toro]
  6. Galaxy Nexus (Sprint) [toroplus]
  7. Nexus S (worldwide version, i9020t and i9023) [crespo]
  8. Nexus S (850MHz version, i9020a) [crespo]
  9. Nexus S (Korea version, m200) [crespo]
  10. Nexus S 4G (d720) [crespo4g]

En mi caso, por mi modelo voy a usar la numero 4, Galaxy Nexus (GSM) [maguro]
Con esta herramienta usted será capaz de:
  • Unlock the bootloader. (Desbloquear el gestor de arranque)
  • Flash CWM recovery (Standard or Touch).
  • Root the phone. (poner en root el telefono)
  • Lock the bootloader. (Bloquear el gestor de arranque)
  • Flash Google Factory Image. (Instalar Imagen de Fabrica de Google)

Empecemos:

Como les dije lo primero es estar seguro que tienes tu respaldo al día de tu teléfono asociado con tu cuenta de gmail, es muy sencillo solo entra en la configuración de tu teléfono en la opción copia de seguridad y restablecer y asegura que tengas tildado la opción de "Hacer una copia de seguridad", que tu cuenta de gmail sea la correcta y la opción de "Restaurar automáticamente". Esto te asegura que al asociar tu teléfono a tu cuenta de gmail, el bajara todas tus aplicaciones y contactos que tenias en la versión anterior. esto también es útil cuando cambias de teléfono, por supuesto debe ser otro android.


¿Que necesitamos?

Bien, primero quiero aclarar que yo uso Ubuntu, por lo tanto no lo he probado en otra distribución, pero al ser un shell script no creo que tengan problemas, cualquier cosa revisen la pagina del desarrollador.

Nota:  Si estas corriendo linux en 64 bits, debes instalar las librerías de 32 bits 

1.- bajar el shell script desde aqui
2.- Extrae el archivo .tgz donde tu quieras, te recomiendo que sea dentro de tu carpeta home, en mi caso     
            /home/fquivera
3.- Abre un terminal y escribe lo siguiente:
Primero nos dirigimos a la carpeta donde esta el shell script, en mi caso:
            cd /home/fquivera/unlt
Hay que hacer una corrección en los enlaces dentro del shell script, ya que Google, borro las imágenes anteriores de la versión 4.2 por errores,  para esto editamos el archivo unlt.sh.
Podemos utilizar cualquier editor, en la linea numero 156 y 157, cambiar estas lineas por:
FACTORY_MAGURO="https://dl.google.com/dl/android/aosp/takju-jop40d-factory-e4d13f14.tgz"
MD5_MAGURO="351926836d314848ed4292bbc499ff36"
Cualquier cosa puedes revisar estos enlaces en la pagina de desarrolladores de Google aqui.
4.- En cuanto tu teléfono debes colocarlo en modo USB Depuración, Para activar la depuración USB en el teléfono: desde configuración -> opciones de desarrollo, marcamos la casilla depuración USB. Aqui te doy un enlace de un video de como hacerlo.
5.- Conectamos el teléfono via USB. 
6.- Ahora ejecutamos el shell script
      sudo bash ./unlt.sh 
      se utiliza sudo, porque debe ser utilizado con privilegios de administrador


7.- Escojamos la opción de nuestro teléfono (En mi caso la opción 4):


8.- Ahora nos pedirá si queremos hacerlo en Automático (Recomendado) o Manual.


9.- Ahora nos muestra la pantalla de las acciones que podemos hacer en nuestro dispositivo, en nuestro caso vamos ir por la opción 5  Flash Google Factory Image


10.- Ahora nos pide que tengamos nuestro teléfono encendido y conectado en modo USB Depuración y se procede a empezar el proceso


11.-  Aquí ira a Google developers a descargar la imagen, un error que puede ocurrir es que no tengan instalado en su linux el wget, que es el comando que utiliza para ello. en Ubuntu, lo instalas con:
    sudo apt-get install wget

Luego de descargar la imagen, comienza a cargar la imagen al Nexus, va parpadear varias veces su teléfono y ustedes podrán ver por el terminal del PC, lo que esta pasando. Al terminar reiniciara el teléfono y lo dejara tal como viene de fabrica, para que comiences a configurar con tu cuenta y baje automáticamente tus aplicaciones y contactos.

Como conclusión les comento que mi teléfono funciona excelente con Jelly Bean 4.2.1 y actualizo todas mis aplicaciones.



Esta no es la única forma de actualizar tu Galaxy Nexus  hay varias que puedes ver en Youtube o en Google, espero que este post les ayude y no olviden dejar sus comentarios al respecto. Saludos

Referencias:

miércoles, 10 de octubre de 2012

Creando Aplicaciones Web con Django 1.4 (2da Parte)

En el articulo anterior hablamos de como arrancar un proyecto en Django, en esta oportunidad aprenderemos un tema importante como es la configuración del proyecto. podemos decir primeramente que no hay una manera definitiva de hacerla, ya que la flexibilidad de Django nos permite que cada quien la realice a sus gusto.

Django por ser un framework de Python, utiliza este lenguaje para guardar sus configuraciones y aprovecha la manera de trabajar del lenguaje para hacer archivos de configuración fáciles de leer, extender y utilizar dentro de nuestros proyectos. Por eso es que quizás veremos en algunos proyectos que la configuración esta en varios archivos Python. En nuestro caso solo hablaremos y trabajaremos con el archivo settings.py.

Empecemos:

Editamos nuestro archivo settings.py con nuestro editor preferido, en mi caso yo uso vim, pero también lo puedes hacerlo con gedit, geany o nano (que es un clon del antiguo Wordstar, para algunos nostálgicos).

Primeramente importamos os, este módulo provee docenas de funciones para interactuar con el sistema operativo, en nuestro caso lo usaremos para conocer la ruta de nuestro proyecto.

# -*- coding: UTF-8 -*-
# Django settings for recetas project.

import os

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

También le damos la codificación UTF-8 a nuestro archivo de configuración para evitar los errores de caracteres en nuestro idioma.

Django por defecto trae la opción DEBUG=True, para que mientras estemos en desarrollo, podamos ver en detalle los errores de la aplicación, en le caso que tengamos la opción de DEBUG=False, normalmente en producción, las notificaciones de error de código son enviadas vía correo electrónico a los administradores, junto con los detalles completos del error. Para poner los datos de los administradores, debemos agregar en forma de tupla, en mi caso lo dejaré así:

 ADMINS = (
     ('Francisco Quivera', 'fquivera@gmail.com'),
)

Una vez hecho esto vamos a definir con que manejador de base de datos trabajara nuestro proyecto. Quiero aclarar que aunque es posible usar Django sin una base de datos, Django incluye un mapeador objeto-relacional (ORM), en el que es posible describir la estructura de la base de datos usando Python. Esto lo veremos en mas detalle cuando veamos los modelos, aquí solo le diremos a Django con que manejador de base de datos vamos a trabajar. Django soporta de manera predeterminada la conexión con Postgresql, MySql, Sqlite3 y Oracle. En nuestro proyecto usaremos Sqlite3, por su facilidad de uso, ya que viene con Python desde la versión 2.5.

Busquemos la siguiente sección del archivo y modificamos:

DATABASES = {
    'default': {
      'ENGINE': 'django.db.backends.sqlite3', #Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': os.path.join(RUTA_PROYECTO,'db/recetas.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.
    }
}

Estoy resaltando lo que vamos a agregar, en el caso de utilizar MySql o Postgres, deben instalar previamente los módulos Python para la conexión con estas bases de datos, en Ubuntu se hace con:

MySql:
 
sudo install python-mysqldb

Postgres:

sudo apt-get install python-psycopg2

Configurar la zona horaria, Django permite configurar la zona horaria del proyecto, esto lo hacemos en la siguiente sección, en mi caso agregue la que me corresponde, pueden buscar en la red cual es la que aplica para su caso:

TIME_ZONE = 'America/Caracas'

Django también permite configurar el idioma que usará de manera predeterminada para su funcionamiento, esto es muy útil ya que el administrador de Django, utilizara el idioma definido aquí, para configurar esto debemos cambiar lo siguiente:

LANGUAGE_CODE = 'es-VE'

Django requiere rutas de archivos para cargar archivos estáticos y definir donde estarán nuestras Plantillas o Templates, para hacer esto de manera dinámica, usamos las bondades que nos ofrece Python. Como ya definimos la variable RUTA_PROYECTO, que no es mas que la ruta del directorio donde se encuentra dicho archivo, a partir de éste armaremos la ruta de los archivos estáticos.

Para esto primero debemos crear las carpetas donde vamos a tener dichos archivos, como ya estamos ubicados en home/fquivera/recetas/recetas, hacemos lo siguiente:

mkdir static media plantillas db

luego nos cambiamos a static para crear otras carpetas

cd static
mkdir js img css fonts

Nos deba quedar nuestro árbol de directorio de la siguiente manera:

└── recetas
    ├── manage.py
    └── recetas
        ├── __init__.py
        ├── db
        ├── media       
        ├── plantillas
        ├── settings.py
        ├── static
        │   ├── css
        │   ├── fonts
        │   ├── img
        │   └── js
        ├── urls.py
        └── wsgi.py

¿Para que son esas carpetas que acabamos de crear?

Bien, la carpeta static la utilizamos para ubicar los archivos de estilos css, dentro de la carpeta css, los javascript que podamos utilizar dentro de la carpeta js, las imágenes de nuestro proyecto, como logos, backgrounds, entre otros en la carpeta img y por ultimo si requerimos alguna fuente de letra, la ubicamos en la carpeta fonts
Por otro lado esta la carpeta media, esta carpeta la usamos para almacenar las imágenes, videos, sonidos que utilizamos en nuestros datos, osea, multimedia asociada en nuestra base de datos.
Y por ultimo la carpeta plantillas que allí estarán nuestras plantillas html de nuestro proyecto. La carpeta db es para el archivo de base de datos Sqlite3.

Ahora nos toca decirle a Django a través del archivo settings.py donde están ubicados esos archivos, para ello volvemos a editarlo, buscamos y cambiamos lo siguiente:

Esta variable le dirá a Django donde esta ubicada la carpeta media

MEDIA_ROOT = os.path.join(RUTA_PROYECTO,'media')

La siguiente es la ubicación vía URL, nos permitirá ubicarla mediante http://miproyecto/media

MEDIA_URL = '/media/'

Igualmente la URL para los archivos estáticos

STATIC_URL = '/static/'

La ubicación de los archivos estáticos:

STATICFILES_DIRS = (
    os.path.join(RUTA_PROYECTO,'static'),
)

Por ultimo, la ubicación de mis plantillas

TEMPLATE_DIRS = (
    os.path.join(RUTA_PROYECTO,'plantillas'),
)

Los proyectos en Django trabajan con aplicaciones, algunas ya vienen configuradas de manera predeterminada. Primeramente vamos a utilizar la aplicación de administración y su documentación, estas ya vienen construidas. Para habilitar estas aplicaciones debemos buscar la sección de INSTALLED_APPS que se encuentra casi al final del archivo settings.py y quitarle la marca de comentarios a 'django.contrib.admin' y 'django.contrib.admindocs'. Nos debe quedar 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.flatpages',
    'django.contrib.admin',
    'django.contrib.admindocs',
)

Ahora salvamos nuestro archivo settings.py, regresamos a la carpeta principal y ejecutamos el siguiente comando:

python manage.py syncdb

Este comando nos crea la base de datos del proyecto, hasta ahora solo va generar las tablas necesarias por el administrador de Django.

Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no):
 
Aquí nos pide si queremos crear el superusuario para el administrador, le decimos que si, y nos pide los datos del usuario que sera el administrador

Would you like to create one now? (yes/no): yes
Username (leave blank to use 'fquivera'):
E-mail address: fquivera@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

Ahora para poder ver los cambios que hicimos y navegar por la interfaz administrativa de Django, aún falta modificar un archivo llamado urls.py. Este archivo esta en la misma carpeta donde esta el archivo settings.py. Modifiquemos este archivo:

vim urls.py 

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

Quitemos el comentario a algunas cosas y nos queda el archivo de la siguiente manera:

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

admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'recetas.views.home', name='home'),
    # url(r'^recetas/', include('recetas.foo.urls')),


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

    url(r'^admin/', include(admin.site.urls)),
)

he resaltado lo que he cambiado, además se han borrado las lineas de comentario, bien ahora si probamos lo que hemos hecho hasta ahora

$ python manage.py runserver
Validating models...

0 errors found
Django version 1.4.1, using settings 'recetas.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Y probamos en nuestro navegador http://127.0.0.1:8000

veremos lo siguiente:


Upssss, que paso aquí, como ya modificamos el archivo urls.py, Django, ve cuales son las URLs validas para el proyecto y estas son /admin y /admin/doc, ya que no hemos colocado la url raíz. corregimos la url en nuestro navegador de la siguiente manera:

http://127.0.0.1:8000/admin


Ahora Django nos pide el usuario y contraseña, para ingresar al administrador, lo hacemos y tenemos la siguiente pantalla:


Hasta aquí esta segunda parte, cualquier duda, escriba en los comentarios y así lo compartimos con todos. Hasta la próxima

domingo, 23 de septiembre de 2012

Creando Aplicaciones Web con Django 1.4


Después de mucho tiempo de estar viendo tutoriales en internet, logré hacer una aplicación completamente funcional con el framework de python Django.  Es importante aclarar  que es indispensable que usted tenga conocimientos básicos de python; para continuar, les recomiendo el libro llamado inmersión en python. el cual puedes descargar de la red.

En este tutorial voy a crear una aplicación que tenga integración con base de datos, autenticación, reportes, JQuery, Css y alguna otra cosa que se nos ocurra.

En esta oportunidad voy a realizar una aplicación que mi esposa me había pedido hace mucho tiempo, para guardar sus recetas de cocina, hay varias como estas en la red, solo que aquí nos iremos un poco mas alla de Django y le colocaremos los juguetes adicionales como JQuery y CSS.

Empecemos:

Este tutorial esta basado en la plataforma Linux, en la distribución que mas le guste, yo utilizo normalmente Ubuntu, actualmente en la versión 12.04. En el caso de las personas que usan Windows, hay muchos manuales en la red de como hacerlo, para ello les invito a ver un excelente vídeo tutorial de Alex Dzul en este enlace.

En Ubuntu como en todas las distribuciones linux, ya viene instalado el python, por lo que no necesita instalarlo, entonces procedemos a instalar Django, el cual esta disponible en código abierto bajo la licencia BSD. Se requiere la versión de Python 2.5 o superior, es importante saber que no depende de otras bibliotecas de Python. Y hay varias maneras de conseguirlo e instalarlo:

1. con los repositorios que trae sus sistema operativo:

$ sudo apt-get install python-django

2. Con  easy_install o pip, estos son instaladores de paquetes python, en cualquier sistema operativo, solo hay que tener previamente instalado alguno de los dos paquetes y proceder:

Para utizar easy_install, este debe instalarse previamente en Ubuntu con:

$ sudo apt-get install python-setuptools

Luego procedemos a instalar Django

$ sudo easy_install django

pip es una herramienta para instalar y administrar paquetes de Python, como las que se encuentran en el índice de paquetes de Python. Es un reemplazo para easy_install.

$ sudo apt-get install python-pip

Para instalar django con pip solo hay que tipear:

$ sudo pip install Django 

3. Bajarlo directamente de la página de django http://www.djangoproject.com, esta es una de las mejores opciones porque estarás bajando la última versión o release de django. Descargamos este comprimido, normalmente se hace en Descargas y luego lo descomprimimos en nuestra carpeta personal

$ tar xzvf Django-1.4.1.tar.gz
$ cd Django-1.4.1

Luego dentro de la carpeta ejecutamos el setup.py para instalarlo en nuestro sistema operativo.

$ sudo python setup.py install

Una vez que termine probamos la instalación en python

fquivera@fquivera-VGN-CR490E:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

Si no produce ningún error esta correctamente instalado, esta prueba es efectiva para cualquiera de las formas que escogió para instalar.

Muy bien, ya que tenemos instalado Django, vamos a proceder a crear nuestro primer proyecto, para ello nos ubicamos en nuestra carpeta personal y creamos la carpeta donde vamos a realizar nuestro proyecto.

$ cd
$ mkdir django
$ cd django

Ahora vamos a crear nuestro primer proyecto que llamaremos recetas con el siguiente comando:

$ django-admin.py startproject recetas

Este nos creará una carpeta llamada recetas, entramos en ella y tenemos un archivo y una carpeta

$ cd recetas

recetas
├── manage.py
└── recetas
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

Expliquemos cada uno de estos archivos:

La carpeta superior recetas es sólo un contenedor para su proyecto. Su nombre no le importa a Django, usted le puede cambiar el nombre a cualquier otro que le guste.

manage.py: Una utilidad de línea de comandos que te permite interactuar de distintas formas con este proyecto Django. Utilizaremos muchas veces este programa utilitario a medida que avancemos en nuestro proyecto.

La carpeta interna recetas es un paquete real Python para el proyecto. Su nombre es el nombre del paquete Python que tendrá que utilizar para importar cualquier cosa en su interior (por ejemplo, la importación recetas.settings).

recetas / __init__.py: Un archivo vacío que le dice a Python que esta carpeta debe considerarse como un paquete Python. (Más información acerca de los paquetes en la documentación oficial de Python si usted es un principiante de Python.)

recetas / settings.py: Ajustes  y configuración para este proyecto Django. Aqui haremos todas las configuración del proyecto Django y  todo acerca de las opciones de trabajo.

recetas / urls.py: Las declaraciones URL para el proyecto Django, es una "tabla de contenidos" de tu sitio Django. Puedes conocer más acerca de las URL en el despachador de URL.

recetas / wsgi.py: Un punto de entrada para WSGI compatibles con servidores web para hospedar su proyecto. Veremos la manera de publicar su proyecto en un servidor mas adelante.

El servidor de desarrollo

Vamos a verificar que todo va bien. Revise que este en directorio superior de recetas, y ejecute el comando

$ python manage.py runserver

Verá la siguiente salida en su terminal:

Validating models...

0 errors found
Django version 1.4.1, using settings 'recetas.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Ahora vaya a su navegador favorito y escriba la dirección http://127.0.0.1:8000 y le aparcera esta pagina:

Hasta aquí esta primera parte, cualquier duda, escriba en los comentarios y así lo compartimos con todos. Hasta la proxima

Segunda Parte