WordPress 3.0 é lançado!

Foi lançado ontem, 17/06 a versão 3.0 do WordPress. O CMS que gerencia esse blog.

A grande novidade dessa versão é a fusão com o WordPress MU, possibilitando o uso e vários blogs numa única instalação. Além disso foi adicionado um novo tema padrão chamado Twenty Ten.

Já fiz a atualização desse blog para a versão 3.0 e estou usando o tema novo, ficou bem mais simples o blog não acham?

Publicado em blog | Com a tag , | 1 comentário

Postando pelo Iphone

Bom estou postando no blog pelo iphone!!

Baixei a app do wordpress e configurei para usar no meu blog… Tudo bem simples e fácil.

Viva a modernidade !!!

Publicado em blog | Com a tag , | Deixar um comentário

Adium em português do Brasil (Snow Leopard)

Para quem o prazer de possuir um MAC conhece o cliente IM Adium. Uma coisa que sempre me iritava era que o Adium só abria em Português de Portugal (pt_PT) e não havia nenhuma opção para mudar isso.

Procurando na internet vários sites me apontaram para mudar o idioma da aplicação usando o “Get Info” ou Obter Informações. O detalhe ai é que no Snow Leopard não possui mais a opção de idioma no “Get Info”.

Para solucionar isso existe uma aplicação chamada Language Switcher que possibilita abrir as apps em qualquer idioma disponível. É uma aplicação grátis e ocupa somente 1.2MB de espaço. Agora consigo usar o Adium totalmente em português do Brasil.

Publicado em mac | Com a tag , , | 1 comentário

Criando novas views para o admin

Um bom tempo sem postar nada novo… porém estou de volta com uma dica simples que já usei bastante.

Quem utiliza o Django com certeza adora a app admin que o acompanha, nós desenvolvedores ganhamos de presente uma administração de sites útil para praticamente qualquer site, e diga-se de passagem as administrações são sempre as partes mais chatas quando se produz um site.

Como nem tudo é perfeito, quando é necessário customizar o admin temos diversas opções, porém essa não é a intenção desse post. Quem quiser saber mais detalhes sobre customização do admin pode acessar a documentação do django e essa página da IBM.

O nosso caso é diferente, existem situações em que precisamos criar novas funcionalidades específicas para a administracao (não estão relacionadas a nenhum model), mantendo o layout e as restrições de acesso.

O primeiro passo é criar a view:

from django.shortcuts import render_to_response
from django.template import RequestContext

def minha_view(request):
    #executa alguma funcionalidade
    return render_to_response('app/minha_view.html',locals(),request_instance=RequestContext(request))

Note que a view acima é igual a qualquer outra que se faz normalmente.
Em seguida definimos uma url para nossa view:

urlpatterns = patterns('',
    (r'^admin/admin_view','app.views.minha_view'),
    (r'^admin/', include(admin.site.urls)),
)

Eu preciso definir a minha url antes da url do admin, se ela for colocada após o admin a view não é encontrada. Cuidado para não sobrepor nenhuma view já existente do admin.

Agora criamos o template minha_view.html:

{% extends 'admin/base_site.html' %}
{% block content %}
Aqui ficarão os dados da sua view
{% endblock %}

O template acima é muito simples, caso queira fazer algo mais sofisticado (como css, breadcrumbs e forms) sugiro olhar os templates padrões do admin. Eles podem ser encontrados em: %DJANGO_DIR%/contrib/admin/templates/admin.

Pronto, sua view já possui a ‘cara’ do admin. Porém ela pode ser acessada por qualquer usuário, até mesmo os logados.

O passo natural seria usar o decorator login_required para exigir o login, so que por algum motivo desconhecido os redirecionamentos do admin não combinam muito bem com views externas. Nesso caso a solução é transformar a nossa view numa view do admin, para isso editamos o urls.py:

from django.contrib import admin
from app.views import minha_view

urlpatterns = patterns('',
    (r'^admin/admin_view',admin.site.admin_view(minha_view),
    (r'^admin/', include(admin.site.urls)),
)

Pronto sua view está protegida de acessos anônimos e todos os redirecionamentos funcionam corretamente.
Agora é só criar suas novas funcionalidades embutidas diretamente no admin.

Espero ter ajudado. Até a próxima.

Publicado em django, python | Com a tag , , | Deixar um comentário

Um pouco de metaprogramação

Quem assina a lista django-brasil recebeu essa mensagem do Luciano Ramalho sobre metaprogramação. Achei muito interressante e demonstra perfeitamente o quão poderosa é a linguagem Python.

Estou reproduzindo o texto sem alterações:

Em geral não é tedioso programar com o Django, mas às vezes é, veja só quanta repetição:

# http://pastebin.com/f2fc7b238

class DescriptorInline(admin.TabularInline):
   model = Descriptor

class RecruitmentCountryInline(admin.TabularInline):
   model = RecruitmentCountry

class OutcomeInline(admin.StackedInline):

   model = Outcome

class TrialInterventionCodeInline(admin.TabularInline):

   model = TrialInterventionCode

class SecondaryNumberInline(admin.TabularInline):

   model = TrialNumber

class TrialContactInline(admin.TabularInline):

   model = TrialContact

class TrialInstitutionInline(admin.TabularInline):

   model = TrialInstitution

class ClinicalTrialAdmin(admin.ModelAdmin):

   inlines = [SecondaryNumberInline, RecruitmentCountryInline,

              OutcomeInline, TrialContactInline, TrialInstitutionInline,

              DescriptorInline, TrialInterventionCodeInline]

No código acima, cada nome de modelo aparece três vezes… (uma vez ao
declarar a classe XXXInline, no atributo model do inline, e mais uma
vez no atributo inlines).

Além disso, quase todas as declarações de inlines são idênticas… E o
princípio DRY, como fica?

Felizmente Django é Python. Então aquilo pode ser reescrito de uma
maneira mais legal assim:

# http://pastebin.com/f5af2bd28

tabular_inline_models = [Descriptor, RecruitmentCountry, TrialInterventionCode,

                        TrialNumber, TrialContact, TrialInstitution]

tabular_inlines = []

for model in tabular_inline_models:

   cls_name = model.__name__+'Inline'

   cls = type(cls_name, (admin.TabularInline,), {'model':model})

   tabular_inlines.append(cls)

class OutcomeInline(admin.StackedInline):

   model = Outcome

class ClinicalTrialAdmin(admin.ModelAdmin):

   inlines = tabular_inlines + [OutcomeInline]

O truque aqui foi usar a função type(), que pode ser usada para criar
classes dinamicamente. Para isso a gente passa três argumentos para a
função type():

- uma string que será o __name__ da classe
- uma tupla de super-classes (importante: a vírgula dentro do
parêntesis indica que é uma tupla de um elemento)
- um dicionário com os atributos da classe (métodos e variáveis)

Não tente fazer isso em Java ;-) .

[ ]s
Luciano

Publicado em django, python | Com a tag , , , , , | Deixar um comentário

IV Encontro do GruPy-AL

Para quem não sabe faço parte do GruPy-Al. Um grupo de desenvolvedores python do estado de Alagoas. Tudo bem que ainda não é uma participação muito ativa, mas pretendo mudar isso ai.

Quinta-feira aconteceu o IV Encontro, no auditório da IFAL (antigo CEFET), com a presença de 84 participantes, até agora o encontro com o maior número de participantes. Tudo bem que boa parte do pessoal eram alunos do IFAL, mas isso não vem ao caso.

Foram 3 palestras, uma sobre o wiki Moin Moin, uma sobre BRisa e outra sobre BRiGas.

Quem quiser saber mais detalhes sobre o grupo pode acessar a lista de discussão:

http://groups.google.com/group/grupy-al

Ou então acessar o blog:

http://grupyal.blogspot.com/

Publicado em eventos, python | Com a tag , | Deixar um comentário

Templates em PHP, só se for com PHPTAL

Para os desenvolvedores PHP segue uma dica de uma ferramenta de templates muito legal!

O PHPTAL é um motor de geração de templates para PHP5 que implementa a sintaxe ZPT (Zope Page Templates) ex.:

<div class="item" tal:repeat="item itemsArray">
    <span tal:condition="item/hasDate" tal:replace="item/getDate"/>
    <a href="${item/getUrl}" tal:content="item/getTitle"/>
  <p tal:content="value/getContent"/>
</div>

Enquanto a maioria dos desenvolvedores continua a usar tags ASP/JSP/PHP como principal linguagem para seus templates, a comunidade Zope teve a ótima idéia chamada TAL. A idéia era mover a ações para dentro de atributos XHML ao invés de usar outras tags e elementos.

Essa é grande vantagem da sintaxe do ZPT, sua simplicidade, não existem novas tags para aprender, e sim novos atributos que podem ser adicionados a qualquer tag XHTML e que atribuem comportamentos específicos. Esses novos atributos possibilitam ações como: condição, definição, repetição, inclusão de attributos, substituição de conteúdo, entre outros.

No exemplo disponível no site do projeto podemos ver o equivalente ao código acima:

<?php foreach ($values as $value): ?>
<div class="item">
  <div class="title">
    <?php if ($value->hasDate()): ?><?=$value->getDate()?><?php endif; ?>
    <a href="<?= $value->getUrl() ?>"><?=
		htmlentities($value->getTitle())
	?></a>
  </div>
  <div class="content">
    <?= htmlentities($value->getContent()) ?>
  </div>
</div>
<?php endforeach; ?>

Nota-se a economia de código fonte que o PHPTAL oferece.

Outra grande vantagem so PHPTAL é que, o tamplates são compilados para código fonte PHP5. Funcionando semelhante a idéia de bytecode em python, onde o código fonte em PHPTAL é compilado para PHP na primeira vez em que for executado, sendo o mesmo somente gerado novamente se o código fonte for alterado.

Abaixo a lista funcionalidades do PHPTAL

  • separação da lógica e apresentação,
  • avisa se você esquecer de fechar uma tag ou se tem erros no template
  • templates limpos e legíveis,
  • fácil integração com editores HTML WYSIWYG,
  • abstração de dados usando um sistema similar a XPath,
  • interessante sistema de macros HTML,
  • sistema de internacionalização integrado (usando gettext),
  • habilidade de substituir expressões XPath por expressões PHP,
  • quase nenhuma perda de velocidade (templates são compilados, grandes expressões podem ser substituídas por código PHP,
  • compatível com aceleradores PHP,
  • mais de quatro anos de suporte da comunidade ZPT,
  • código extensível.

Bom, segue ai a dica para quem quiser um motor de templates interessante e fácil de aprender.
Mais detalhes no site do projeto: http://phptal.org

Até a próxima.

Publicado em php | Com a tag , , , , | 4 comentários

FISL 10 foi mara!

Bom, já passou uma semana do FISL10, foi uma semana muito corrida em POA, entre palestras, feira de tecnologia, saídas a noite, ida ao Beira Rio, etc….. Com tudo isso não deu para atualizar o blog. Mas agora estou de volta ao calor de Maceió e aqui estão minhas impressões da décima edição do Fórum Internacional de Software Livre.

FISL 10

FISL 10 - Multidão

Pra comecar vale dizer que tinha MUITA gente no evento, 7 mil pessoas num so lugar é um pouco claustrofóbico, porém não faltaram atividades para todos durante os 4 dias de evento.

Tinhamos representantes de várias áreas no suporte a causa do Software Livre, como: Free Software Foundation, Mozilla, Ubuntu-br, Fedora, Sun, Oracle, Associação Python Brasil, Globo.com e vários outros.

Muitos brindes! Vai a dica a que se aventurar nas próximas edições do FISL, gaste as primeiras horas do dia inicial para “caçar” os brindes. Eles têm de tudo, camisas, adesivos, cds. Nem sempre é de graça, a Mozilla, por exemplo, estava distribuindo camisetas a quem achasse pistas escondidas no galpão da PUC. No último caso pode-se comprar algumas lembraças, mas é bom correr também pois acabam rápido.

As palestras estavam pouas, porém é tanta coisa acontecendo ao mesmo tempo que fica dicifil acompanhar as quem você quer assistir, precisa-se de um pouco de prática. Da proxima vez estarei mais esperto.

Ainda teve a visita do lula, que eu não vi…. mas foi muito importante para a causa Software Livre o apoio do Goveno Federal.

No final das contas o FISL vale muito a pena, quem tiver a oportunidade de ir não vai se arrepender. Abaixo tem algumas fotos que tirei no evento.

Jogo da Mente

Jogo da Mente

Não entendi muito, mas achei legal!

PLACAS

Richard Stallman

Richard Stallman

CAIXA

CAIXA

Credenciamento

Credenciamento

SERPRO

SERPRO

Bolinhas da SUN

Bolinhas da SUN

Publicado em eventos | Com a tag , , , , , | Deixar um comentário

Chegamos em POA

Depois de um vôo meio turbulento pousamos em POA agora a noite. Muita chuva e frio nessa noite de terça feira. Amanhã começa o FISL.

Em breve as fotos!!

Publicado em eventos | Com a tag , | Deixar um comentário

Guia de Sobrevivência Urbana: Fórum Internacional de Software Livre

Vi esse post e achei muito interressante para quem vai para o FISL!

“Na próxima Quarta-Feira inicia a 10a. edição do Fórum Internacional de Software Livre (FISL), o maior evento de software livre do Brasil. Pensando nos milhares de brasileiros que virão para a capital gaúcha, muitos pela primeira vez, criei este ‚Äúguia‚Äù que com bom humor da várias dicas para o evento e estadia em Porto Alegre.” [referência: incerteza.org]

Publicado em Sem categoria | Deixar um comentário