Pognation

May the POG be with you!

Django Pagination - Paginação fácil no Django

Estava eu, rodando pela internet no site da comunidade oficial do django quando me deparei com dois novos screencasts nesse site, e como sou bem curioso fui olhar.

O primeiro nem me chamou muito a atenção, a não ser pelo nível de organização do cara que é bastante interessante, porém no segundo ele apresentou uma aplicação chamada django-pagination, que torna muito fácil fazer paginação utilizando o framework django.

A utilização da mesma se dá de maneira bem fácil e é sobre isso que vou discorrer neste artigo, de acordo com as alterações que o autor do artigo original citou no screencast.

01 - Instalando a django-pagination para ser usada em todos os projetos;

Como feito no primeiro screencast (que citei o site acima) eu instalei a django-pagination junto com o meu django e em seguida linkei para o site-packages para poder ser usada em qualquer projeto, vamos então aos passos:

a) Baixe o source do google-source pelo SVN:

# cd /var/www/apps/python/
svn checkout http://django-pagination.googlecode.com/svn/trunk/ django-pagination

Logo após terminar, registre no site-packages do seu sistema, como eu uso o Archlinux, e sendo ele um *nix que suporta bash… resolvi usar o script pylink citado pelo autor para fazê-lo de maneira mais prática:

b) Crie o script em um arquivo chamado pylink:

pylink
#!/bin/bash
ln -s `pwd`/$1 `python -c “from distutils.sysconfig import get_python_lib; print get_python_lib()”`/$1

c) Dê permissão para que os usuários possam utilizá-lo:

# chmod 755 pylink

Aqui no Archlinux eu também linkei ele para uma pasta de binários locais que eu utilizo:

# ln -s `pwd`/pylink /usr/local/bin/pylink

d) Agora é só utilizá-lo para adicionar o pagination no site-packages do seu sistema:

# cd django-pagination/
# pylink pagination

Com o django-pagination instalado podemos então modifcar o projeto:

02 - Alterando o arquivo settings.py do projeto;

Primeiramente é preciso adicionar os TEMPLATES_CONTEXT_PROCESSORS logo embaixo das MIDDLEWARE_CLASSES no arquivo settings.py do projeto no qual estaremos instalando a aplicação django-pagination:

settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
“django.core.context_processors.auth”,
“django.core.context_processors.debug”,
“django.core.context_processors.i18n”,
“django.core.context_processors.media”,
“django.core.context_processors.request”,
)

Logo após também é necessário adicionar a aplicação pagination no seu settings.py:

settings.py
INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘django.contrib.admin’,
‘twitter’,
‘pagination’,
)

E, em seguida adicionar o middleware da aplicação também no arquivo settings.py do projeto:

settings.py
MIDDLEWARE_CLASSES = (
‘django.middleware.common.CommonMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.middleware.doc.XViewMiddleware’,
‘pagination.middleware.PaginationMiddleware’,
)

Por incrível que pareça não é necessário alterar nada nos models nem nas views do projeto e simplesmente alterando o templete conseguimos implementar a paginação utilizando a django-pagination.

03 - Alterando o template:

As alterações no template consistem em:

a) Adicionar a tag {% load pagination_tags %} no topo do template:

public.html
{% load pagination_tags %}
<html>

b) Adicionar a tag {% autopaginate v n %} antes do loop que vai preencher a página. Onde v é a variável que contém os registros que vamos carregar no loop e n é o número de registros que queremos exibir por página, sendo o n padrão igual a 20. Segue um exemplo:

public.html
{% autopaginate tweets 10 %}
{% for tweet in tweets %}
<p><b>{{ tweet.user.username }}</b> said: {{ tweet.message }}</p>
{% endfor %}

c) Adicionar a tag {% paginate %} logo após o loop, para aparecer o rodapé de navegação na página:

public.html
{% autopaginate tweets 10 %}
{% for tweet in tweets %}
<p><b>{{ tweet.user.username }}</b> said: {{ tweet.message }}</p>
{% endfor %}
{% paginate %}

E vualá, você terá 10 registros sendo exibidos por página…

Você pode se perguntar: Eu estou carregando todos os registros para somente apresentar 10 por vez, e vou recarregar toda vez que eu mudar de página? Isso vai ficar muito lento!

Exatamente, se você adicionar a tag {% autopaginate v n %} antes do seu loop só serão carregados os registros dá página em que você estará navegando. Então segundo as palavras do próprio autor: Você não precisa nem hesitar em não usar a django-pagination em seus projetos.

Obrigado pela atenção e até a próxima.

Julho 18, 2008 Escrito por pognation | Django, Python, programação | , , , , , , , | 3 Comentários

Desligando o Linux com o botão Power do Computador

Essa já não é novidade nenhuma e eu tenho plena certeza de que há mais meios de configurar esta tarefa porém nenhuma mais POG do que esta.

Na realidade não tão POG, pois o nosso amigo Gnome utiliza-se da mesma técnica que o Paulo Matias usou para realizar esta simples tarefa. Então vamos à grande explicação com um pouco de história.

Estava eu, sentado na frente do computador, quando tive a brilhante idéia de que meu Linux não tinha algum monitor do botão de power, e sempre conversando com o Paulo via Jabber ou IRC terminei falando pra ele, pois num teste recente pude conferir que o FreeBSD já vinha com essa opção ativada por padrão.

O que me assustou foi que ele já veio falando todos os métodos de como montar a tal e já tendo em mente todas as possíveis linguagens de programação (na mente dele Python e C) logo pensando no quesito de que o arquivo iria ficar aberto pelo tempo que o computador ficasse ligado, o Paulo levou em consideração criar o programa na linguagem C.

A técnica se baseia em ter um arquivo aberto sendo lido sempre para que quando você apertar o botão de liga/desliga do computador (não o do teclado) o mesmo acesse o arquivo e desligue o computador.

Eu realizei os testes no meu Archlinux, e como o Paulo também usa Archlinux, tudo ocorreu como esperado, vamos então a instalação e configuração de tal script.

A instalação dá-se de maneira bem simples, copie e cole o código abaixo em um arquivo com nome de acpi-power-button-monitor.c em qualquer lugar de seu computador (no meu caso eu copiei na ~/).

acpi-power-button-monitor.c

/* ACPI power button monitor.
* Copyright (c) 2008 Paulo Matias
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
*   1. Redistributions of source code must retain the above copyright
*      notice, this list of conditions and the following disclaimer.
*   2. Redistributions in binary form must reproduce the above copyright
*      notice, this list of conditions and the following disclaimer in the
*      documentation and/or other materials provided with the distribution.
*   3. The name of the author may not be used to endorse or promote
*      products derived from this software without specific prior written
*      permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main() {
        static char buf[128];
        FILE *fp;

        assert((fp = fopen("/proc/acpi/event", "r")));

        while(1) {
                fgets(buf, sizeof(buf), fp);
                if(!strcmp(strtok(buf, " "), "button/power")) {
                        system("halt");
                        break;
                }
        }

        fclose(fp);

        return 0;
}

Depois só precisamos compilar o código com o seguinte comando:

$ gcc -Os acpi-power-button-monitor.c -o acpi-power-button-monitor

E então copiar o arquivo compilado (programa já pronto para execução) para a pasta padrão dos programas da sua distribuição Linux. No caso do Archlinux esta pasta fica em /usr/bin:

# mv acpi-power-button-monitor /usr/bin
# chmod 755 /usr/bin/acpi-power-button-monitor

E depois também precisamos chamar este programa na inicialização do Linux, modificando no arquivo /etc/rc.local no caso do Archlinux:

# vi /etc/rc.local

#!/bin/bash
#
# /etc/rc.local: Local multi-user startup script.
#
/usr/bin/acpi-power-button-monitor &

Com o programa sendo inicializado juntamente com o Linux, podemos então simplesmente testá-lo a partir da próxima vez que ligarmos o computador.

Lembrando que o mesmo consome 380Bytes de memória ram, irrisório para os computadores de hoje.

Obrigado e até a próxima.

Julho 2, 2008 Escrito por pognation | Archlinux, Linux | , , , , , , | 2 Comentários

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

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!

Junho 24, 2008 Escrito por pognation | Off Topic | | Não Há Comentários

AutoFS: Montando seus drivers automaticamente no Archlinux

Assim como eu traduzi o artigo da wiki (http://wiki.archlinux.org/index.php/AutoFS_HowTo) para o português em (http://wiki.archlinux-br.org/Autofs) também vou adicionar um post aqui (para me lembrar em um futuro distante claramente) sobre o AutoFS.

O que é o AutoFS?
AutoFS é um pacote que suporta a montagem/desmontagem de drivers automaticamente, ou seja, ele monta e desmonta os devices automaticamente quando você tenta acessá-los. Com ele é possível montar CDs, DVDs, disquetes, Pendrivers e mais alguns.

Instalação e configuração:
Assim como a grande maioria dos pacotes do Archlinux, vamos utilizar o pacman para instalação:

# pacman -Sy autofs

01 - Edite o arquivo:

/etc/autofs/auto.master

Apague todo o conteúdo do arquivo e adicione a seguinte linha:

/media /etc/autofs/auto.media

Obs: Não esqueça de criar uma linha extra no arquivo (aperte ENTER depois da útlima palavra (media)). Se você não adicionar uma linha em branco depois da linha acima, a daemon do AutoFS não vai funcionar corretamente.

Se, no final deste artigo, o AutoFS não desmontar corretamente seus drivers, substitua a linha acima por esta:

/media /etc/autofs/auto.media –timeout=3

02 - Crie o arquivo /etc/autofs/auto.media com o seguinte conteúdo:

cdrom -fstype=iso9660,ro,nodev,nosuid :/dev/cdrom
floppy -fstype=auto,async,nodev,nosuid,umask=000 :/dev/fl
usbstick -fstype=auto,async,nodev,nosuid,umask=000 :/dev/sda1

Talvez você precise alterar os devices (isso varia de acordo com cada sistema). Se você está usando um driver de DVD-ROM, provavelmente vai precisar de suporte para UDF, sendo assim mude a linha do cd escrita acima para:

cdrom -fstype=auto,ro,nodev,nosuid :/dev/cdrom

03 - Crie o arquivo:

/etc/default/autofs

e adicione a linha abaixo:

TIMEOUT=1

04 - Abra o arquivo:

/etc/conf.d/autofs

e edite a linha daemonoptions:

daemonoptions=”-g”

05 - Crie a pasta /media:

# mkdir /media

06 - Carregue o módulo autofs4:

# modprobe autofs4

07 - Suba a daemon do autofs:

# /etc/rc.d/autofs start

Para inicializar normalmente a daemon em todo boot, adicione a mesma e o módulo nas suas respectivas arrays no arquivo /etc/rc.conf.
Para mais dúvidas ou possíveis problemas, visite a wiki oficial do archlinux-br http://wiki.archlinux-br.org/Autofs.

Até mais.

Junho 4, 2008 Escrito por pognation | Archlinux, Linux | , , , , , , | Não Há Comentários

Configurando o MPD no Archlinux com Sonata

Eu acredito que assim como uma grande maioria das pessoas que gostam de ouvir músicas no computador eu também sofro sofria em manter um player aberto ali na tray pedindo para ser clicado e ficava me perguntando qual a próxima vez que eu iria apertar next pra ele tocar.

Procurando um pouco (não tanto quanto eu pensava porque eu já tinha uma “idéia” de qual programa usar, porém ainda não tinha “tomado coragem” para procourar como configurar o mesmo) terminei achando um jeito fácil de manipular as músicas e deixá-las tocando em background sem influênciar nada. Nem mesmo se o X estivesse ou não ligado. E de quebra ainda ganhei um servidor para ouvir música de onde eu estiver no planeta (mas não vou extender esse artigo à essas configurações).

O milagroso programa se chama MPD (Music Player Daemon) isso mesmo, uma daemon para tocar as músicas de acordo com sua playlist criada antecipadamente. O melhor de toda a história é que, assim como a grande maioria das daemons criadas para o Linux o MPD também tem vários clientes gráficos pra manipulá-lo.

Vou escrever aqui os passos que segui para instalação e configuração do MPD com o cliente Sonata que escolhi porque é feito em gtk (só uso o mesmo pra manipulação de playlists e por músicas para tocar).

01 - Instalando os pacotes nescessários:

# pacman -S mpd sonata

02 - Criando os arquivos de configuração:

O arquivo principal para configuração do mpd é o /etc/mpd.conf e, quando instalamos o MDP, já vem um arquivo de configuração exemplo (/etc/mpd.conf.example), então podemos usar o mesmo de base:

# cp /etc/mpd.conf.example /etc/mpd.conf
# vi /etc/mpd.conf

Agora com nosso arquivo de configuração já quase pronto podemos fazer as edições finais:

Descomente a linha:

#music_directory “path_to_yoru_music_collection”

E a edit por exemplo para:

music_directory “~/.mpd”

Nessa pasta é onde colocaremos todos os links simbólicos para as pastas onde realmente estão nosssas músicas. Ficando por exemplo assim:

$ cd ~/.mpd
$ ln -s ~/mp3 mp3

Depois de adicionar todas as patas (somente as raízes) como links simbólicos dentro da pasta ~/.mpd, então podemos criar nosso banco de dados:

# mpd –create-db

O script de criação irá adicionar todas as músicas que estão linkadas simbolicamente dentro da pasta ~/.mpd.

03 - Subindo a daemon e chamando o Sonata:

# /etc/rc.d/mpd start
$ sonata &

Após o Sonata estar aberto, ele se conectará automaticamente ao MPD, vá na aba Library, escolha quais arquivos (serão listados os links simbólicos como pastas) quer adiconar à playlist, botão direito com eles selecionados e ADD, logo após, vá na aba current (playlist das músicas que estão/irão tocando/tocar) e clique duas vezes em qualquer arquivo para começar.

Você também pode apertar com o botão direito na playlist e escolher as opções Repeat e Random para ele ficar tocando aleatóriamente(Random) todas as músicas da sua playlist repetidamente(Repeat).

Depois de começar a tocar você pode escolher se fica ou não com o Sonata aberto na tray, eu preferi fechar o meu e, independente disso, o MPD fica tocando as músicas em background, mesmo eu desligando o X. Perfeito não?

Até a próxima.

Maio 31, 2008 Escrito por pognation | Archlinux, Linux | , , , , , | Não Há Comentários