Como ajustar o chat do Gmail no tema Preview (Dense)

Olá pessoas, estou tentando tirar as moscas desse blog, a muito sem nenhuma atualização nova! Vamos lá!

Recentemente o Google realizou grandes mudanças visuais em seus principais serviços como a Agenda os deixando mais parecidos com o Google+. O Gmail introduziu dois novos temas baseados nessa nova interface gráfica, são o Preview e  Preview Dense. Como o nome já diz se tratam de temas ainda não terminados e possuem alguns bugs.

Se você é como eu e prefere o chat do Gmail do lado direito, esses novos temas deixam o chat bem espremido. Por sorte tem uma maneira bem simples de resolver isso.

Estou usando o Firefox, mas o mesmo efeito pode ser conseguido tambêm no Google Chrome de forma bem fácil.

Primeiro vamos precisar da extensão Stylish.
Depois de instalar é preciso criar um novo estilo específico para o gmail. Acesse seu gmail, clique no ícone do Stylish (na barra de extensões do firefox) e escolha “Escrever novo estilo” > “Para mail.google.com…”

Coloque o nome que você desejar e para o texto use:

@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("mail.google.com") {
    .T0{margin-left:0 !important}
    .q0CeU{margin-right:0 !important}
}

Clique em salvar e pronto, seu chat estará melhor posicionado.

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?

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.

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.

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

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/

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.

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