quarta-feira, 29 de janeiro de 2014

Fedora 20 Release Party

No dia 18 de Janeiro, participei do Fedora 20 Release Party no escritório da Red Hat. O evento foi mais um motivo para encontrar bons e velhos amigos para conversar sobre Open Source e também poder compartilhar conhecimento. Graças ao meu amigo Leonardo Vaz (que apresentou o tema principal do encontro), tive a oportunidade  e apresentar sobre o OpenShift Origin 3 e OpenShift Enterprise 2.
Apresentando sobre o OpenShift
O pessoal em geral conhecia o OpenShift mas não o conhecia tão a fundo, e com isso o evento ficou ainda mais bacana já que eu não havia preparado uma apresentação mais formal sobre o assunto mas só a vontade de todos por querer conhecer mais sobre o assunto já me permitiu que eu falasse por mais ou menos 2 horas. =D
Pessoal super interessado sobre OpenShift
Há propostas de se fazer outros e provavelmente estarei por lá. Publicarei o próximo evento aqui assim que souber a data. Até a próxima!
Pessoal do evento

sábado, 11 de janeiro de 2014

Django nas nuvens: Python com OpenShift

Esse e alguns próximos posts serão a respeito de um projeto novo que pretendo finalmente botar em prática sobre um sistema que gostaria muito de desenvolver. Tenho algumas idéias com algumas features que virão no futuro no OpenShift e que virão também para complementar essa série. Iniciarei essa série falando sobre Python e de um framework muito utilizado pelos programadores Python: O Django.

Introdução

O Django é um framework MVC que auxilia na construção de aplicações Web com Python utilizando o bom e velho padrão MVC (Model-View-Controller). Nele, é possível criar aplicações de forma bem rápida e simples. Bastando criar algumas linhas de código e você já consegue ter CRUDs básicas funcionando.

Primeiros passos

Para iniciar o desenvolvimento, vamos criar uma aplicação utilizando a ferramenta RHC (em um post anterior eu expliquei como utilizar)
$ rhc create-app djangoapp python-2.7 --from-code git://github.com/openshift/django-example.git
Após a criação da aplicação,você poderá acessar através da URL http://djangoapp-<dominio>.rhcloud.com. A página inicial será assim:
Página inicial da aplicação Django
Falarei sobre esse link admin logo a seguir. A estrutura do projeto Django fica dessa forma:


CRUD sem esforço: A interface administrativa do Django

Uma das coisas que gostei do Django é justamente porque ele facilita muito a geração de telas de cadastro, mais conhecidas como CRUD (Create-Retrieve-Update-Delete), tornando assim mais rápido o desenvolvimento de telas que realmente importam para o sistema. Sem contar que ele já fornece autenticação de usuários na criação da aplicação.
Para isso o Django possui o Django Admin Site, que é uma série de pacotes que permite criar essas telas sem muito esforço de código. Basta algumas linhas e logo é possível fazer o CRUD das suas entidades. Como o Django Admin Site já está acessível assim que você cria a aplicação no OpenShift, já é possível acessá-la. 
Mas espera! Falta a senha do admin e sem ela não dá pra acessar. Para pegar a senha, é simples: basta acessar a aplicação via SSH e procurar pelo arquivo app-root/runtime/data/CREDENTIALS e lá estará os dados de usuário e senha para acessar o Django Admin Site:

Capturando a senha gerada pelo OpenShift
Para habilitar o Django Admin Site para procurar pela classe de modelo que iremos adicionar, abra o arqivo wsgi/openshift/settings.py e adicione na seção INSTALLED_APPS o conteúdo abaixo que está em negrito:
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',
    'openshift',)
Depois, abra (ou crie se não existir) o arquivo wsgi/openshift/models.py e adicione o seguinte conteúdo:
from django.db import models
class Pessoa(models.Model):
    nome = models.CharField(max_length=40)
    idade = models.IntegerField()
Por fim, abra (ou crie se não existir) o arquivo wsgi/openshift/admin.py e adicione o seguinte conteúdo:
from django.contrib import admin
from openshift.models import *
admin.site.register(Pessoa)
Depois disso, é só enviar o código para o OpenShift:
$ git add . --all
$ git commit -m "Adicionando o Django Admin Site"
$ git push
Com isso, eu habilitei o Django Admin Site e criei um primeiro cadastro de Pessoas (conforme código em models.py). Após isso, acesse o Django Admin Site e você verá que apareceu uma seção openshift e um link para o cadastro de Pessoas:

Django Admin Site com o cadastro de Pessoas
Agora é só fazer o cadastro de pessoas como preferir. =D

E se eu quiser expor minha aplicação com REST?

Como eu estou criando uma aplicação com diversas formas de acesso (Web, Mobile e Desktop), eu precisava expor meus modelos de forma que pudesse ser acessados para manipular meus cadastros. Procurei pela Internet (Google, pra ser mais específico) e encontrei um Framework muito bacana chamado Django REST Framework, que já faz o trabalho de capturar todos os modelos criados para o Django Admin Site e expor operações de CRUD via REST. Para adicionar em sua aplicação Django no OpenShift, basta executar os comandos abaixo:
$ rhc ssh djangoapp
> pip install djangorestframework
 Depois disso, iremos adicionar mais alguns códigos para expor nossa classe Pessoa para operações de CRUD. Abra o arquivo wsgi/openshift/settings.py e adicione o conteúdo em negrito:
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',
    'openshift',
    'rest_framework',
Depois, abra ou crie o arquivo wsgi/openshift/serializers.py e adicione o seguinte conteúdo:

from openshift import models
from rest_framework import serializers
class PessoaSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = models.Pessoa
            fields = ('nome', 'idade')
Esse código simplesmente define que a classe Pessoa será exposta via REST e quais são os campos que podem ser visualizados via REST. Abra o arquivo wsgi/openshift/views.py e adicione o seguinte conteúdo em negrito:

import os
from django.shortcuts import render_to_response
from openshift import modelsfrom rest_framework import viewsetsfrom openshift import serializers
def home(request):
    return render_to_response('home/home.html')
class PessoaViewSet(viewsets.ModelViewSet):        queryset = models.Pessoa.objects.all()        serializer_class = serializers.PessoaSerializer
Por fim, abra o arquivo wsgi/openshift/urls.py e adicione o conteúdo em negrito:
from django.conf.urls.defaults import patterns, include, url
from rest_framework import routersfrom openshift import views
router = routers.DefaultRouter()router.register(r'pessoa', views.PessoaViewSet)
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    url(r'^rest/', include(router.urls)),    url(r'^$', 'openshift.views.home', name='home'),
    # url(r'^openshift/', include('openshift.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)),
)
E depois é só enviar o código para o OpenShift:
$ git add . --all
$ git commit -m "Adicionando REST ao djangoapp"
$ git push
Pronto! Agora é só acessar a página http://djangoapp-rmartinelli.rhcloud.com/rest/pessoa/ e o Django REST Framework listará todas as pessoas cadastradas. Caso queira fazer um teste, experimente criar um código simples que acesse essa URL REST e veja se você recebe os dados. O formato da resposta é o JSON, então é possível facilmente fazer um parse e listar em uma página HTML.
Por ora, essa parte  é apenas para esquentar para que nos próximos posts eu possa falar de como criar aplicações Web, Mobile e Desktop para consumir essa API REST e assim poder demonstrar outras tecnologias/linguagens/plataformas que o OpenShift pode utilizar.