Arquivo de Julho
Lista de discussão Django Apps
O Michael Elsdörfer criou a lista de discussão Django Apps. A idéia é utilizar a lista para suas próprias aplicações Django e isso possui, no mínimo, duas grandes vantagens:
- Se faz desnecessário a criação de uma lista de discussão para cada nova aplicação;
- Existe uma potencial possibilidade de outras pessoas, não necessariamente usuárias de suas aplicações, participarem das discussões com ótimas opiniões.
Eu não iria criar listas de discussões para minhas aplicações, uma vez que o número de discussões tenderia à zero e seria uma tarefa chata, mas, com isso, as aplicações Diário, Fleshin e Tube ganharam um local para discussão!
Então, quando precisar, já sabe onde pode discutir algo a respeito das aplicações citadas acima. Já adicionei o grupo de discussão nas páginas dos meus projetos no Google Code. Utilize o prefixo [diario], [fleshin] e [tube] no assunto das mensagens, como descrito na página inicial do grupo:
All messages should be prefixed with the application name in brackets. If the application name itself has the popular django prefix, it should be left off. E.g. use [tables] for django-tables.
Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!
Legibilidade e reaproveitamento de código na "URLConf"
É comum nas configurações de URL (URLconf) [1] do Django, patterns como este abaixo:
urlpatterns = patterns(
'django.views.generic.date_based',
(r'^(?P<year>\d{4})/(?P<month>[0-9]{2})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$',
'object_detail', dict(info_dict, slug_field='slug', month_format='%m')),
(r'^(?P<year>\d{4})/(?P<month>[0-9]{2})/(?P<day>\d{1,2})/$',
'archive_day', dict(info_dict, month_format='%m')),
(r'^(?P<year>\d{4})/(?P<month>[0-9]{2})/$',
'archive_month', dict(info_dict, month_format='%m')),
(r'^(?P<year>\d{4})/$', 'archive_year', info_dict),
(r'^/?$', 'archive_index', dict(info_dict, num_latest=5)),
)
Apesar da modificação nas URLs serem raras, a legibilidade da forma acima, queira ou não, prejudica numa eventual manutenção e a probabilidade de ocorrer um erro aumenta.
Uma solução que ao meu ver facilita muito a leitura seria utilizando a função url(), como no código abaixo, retirado do django-fleshin:
photo_detail = url(
regex = '^(?P<album>[-\w]+)/(?P<slug>[-\w]+)/$',
view = 'fleshin.views.photo_detail',
kwargs = dict(photo_info_dict, slug_field='slug'),
name = 'fleshin-photo'
)
photo_list = url( # all photos + album list
regex = '^$',
view = 'django.views.generic.list_detail.object_list',
kwargs = dict(photo_info_dict, paginate_by=FLESHIN_NUM_LATEST,
extra_context={'album_list': Album.objects.all}),
name = 'fleshin-photo-list'
)
photo_album_list = url( # only photos in ``album``
regex = '^(?P<album>[-\w]+)/$',
view = 'fleshin.views.photo_list',
kwargs = dict(photo_info_dict, paginate_by=FLESHIN_NUM_LATEST),
name = 'fleshin-photo-album-list'
)
urlpatterns = patterns('', photo_detail, photo_list, photo_album_list)
Perceba também que a forma acima facilita a reutilização dos patterns pelo seu projeto, não ficando preso ao que foi definido no django-fleshin, reaproveitando, por exemplo, o mesmo padrão de URL para o detalhamento de uma Photo (photo_detail) e alterando o padrão para a listagem das mesmas (photo_list e photo_album_list).
| [1] | Geralmente encontrado em um arquivo de nome urls.py. |
Sergio Amadeu no FISL e a Internet sob Ataque
Nas palavras de Jean Ferri:
No último FISL eu assisti a uma palestra do Sérgio Amadeu, entitulada "Internet sob ataque: as tentativas de controle da rede e o combate a cultura hacker", que foi, como já era esperado, excelente e perturbadora. Procurando ontem, encontrei o podcast desta palestra no Portal do Software Público:
http://www.softwarepublico.gov.br/fisl9/file/Palestra_Sergio_Amadeu?m=download
Ahh, cuidado com os "downloads de segurança" do Windows... ;-)
http://www.softwarepublico.gov.br/fisl9/file/Sergio_Amadeu?m=download
A palestra, disponível acima no primeiro link, tem duração de 34 minutos. Recomendo àqueles que, como eu, não tiveram a oportunidade de ir ao FISL, à escutarem.
O segundo link é apenas um trecho de um assunto sério que atinge bastante gente, e, diga-se de passagem, bom para dar umas risadas.
Embutindo trechos não interpretados em reStructuredText
No artigo anterior precisei inserir um vídeo do YouTube e, como utilizo a linguagem de marcação reStructuredText, é necessário que o código em HTML para o vídeo não seja interpretado pelo reST.
Se você, como eu, precisa passar um código não-interpretado pelo reST, é necessário o uso da diretiva raw, como no exemplo abaixo:
.. raw:: html
<object>
<param name="movie"
value="http://www.youtube.com/v/1IfGjXibDQs&hl=en&rel=0"></param>
<embed src="http://www.youtube.com/v/1IfGjXibDQs&hl=en&rel=0"
type="application/x-shockwave-flash"></embed>
</object>
Fica a dica! Na documentação possui outros exemplos de uso.