goncin@wordpress.com:~$ _

Linux, programação e toda sorte de nerdices

Arquivos da Categoria: python

E se as linguagens de programação fossem jogadores de futebol?

Java

Zagueiro das antigas, pesadão. Chegou a ser cogitado para ser o capitão do time, mas só para dirigir uma palavrinha ao juiz ele precisava declarar uma classe pública, um método estático main() para só então dizer alguma coisa via System.out.println(). Nenhum árbitro teria a paciência de esperar tanto.

Pascal

Bom jogador, disciplinado taticamente, desde que expliquem para ele em detalhes, durante a preleção (interface), o que deve fazer durante o jogo (implementation). Como podem deduzir, improviso não é com ele.

Delphi

Irmão mais novo do Pascal, mais bonitinho (segundo as marias-chuteiras), só que, por outro lado, bem mais pesado.

C

Rápido e pequeno (baixinho), mas com um grande defeito de caráter: colocar toda a responsabilidade pelos seus erros nas mãos do técnico.

C++

Irmão do meio do C. Vive se gabando de ter herdado suas características de jogo de duas escolas ao mesmo tempo. (Update) Vive atazanando o mano mais velho chamando-o de “sem-classe”.

C#

Irmão mais novo do C e do C++, o mais educado da família. Mas só joga na presença do seu empresário, um tal de Dotinéti.

PHP

Jogador versátil, atua tanto na linha (de comando) quanto nas redes. É o garoto de recados do técnico (apesar de sua cara de interrogação), echoando as instruções dos técnicos para os colegas. Alguns o consideram um mercenário, por ostentar inúmeros $.

Ruby

Atleta surpreendente, tem sempre uma jogada nova. Pena que muitos técnicos não lhe dão o devido valor, talvez porque não consigam compreendê-lo muito bem. Rende melhor calçando as chuteiras OnRailsTM.

Python

Elegante, joga pelas laterais, mas costuma deixar muito espaço à esquerda, o que faz a alegria do ataque adversário.

Perl

Jogador estrangeiro e um tanto quanto mercenário ($), tem a fama de jogar bem. O difícil é falar a língua dele…

ASP/VBScript

Limitado tecnicamente e já em fim de carreira. Fez muito sucesso no passado, só continua jogando porque alguns treinadores o consideram “insubstituível”. Vive brigando pela posição com o PHP. Também faz parte da turma dos mercenários, preocupado com a percentagem (%) do bicho em caso de vitória da equipe.

Flex/ActionScript

Bom jogador, é bonitão (não vive sem um Flash), mas também polêmico. É um dos poucos atletas a ter um hate club, liderado pela Maçãzinha (da turma da Moranguinho).

Aventuras em Python (parte 1)

Estou há cinco meses usando quase que exclusivamente o Ubuntu tanto em casa quanto no trabalho. Acho que já está na hora de tomar vergonha na cara 😛 e aprender a programar para Linux.

Tenho percebido que muitos dos programas disponíveis no Ubuntu foram escritos em Python. Não acredita? Experimente digitar isso no seu terminal:

locate *.py

Por ora, meu conhecimento sobre esta linguagem limita-se a saber que ela é interpretada, de alto nível, e com a curiosa característica de ter seus blocos de código definidos pela indentação.

Malgrado já haver tantos programas em Python numa instalação padrão do Ubuntu, preferi descarregar um novo aplicativo para dar uma olhada nos fontes, para ver se entendo alguma coisa. Pode parecer uma técnica esquisita para se aprender uma nova linguagem de programação, mas acredite, comigo funciona. O aplicativo em questão é o Turpial, um promissor cliente para o Twitter. Sua aparência lembra um pouco o TweetDeck, com a vantagem de rodar nativamente em Linux, apesar de (ainda) não ter tantas funcionalidades quanto aquele.

Para instalar o programa no Ubuntu (de modo a utilizá-lo), bastam as seguintes linhas de comando:

sudo add-apt-repository ppa:effie-jayx/turpial
sudo aptitude update
sudo aptitude install turpial

Para estudar o código fonte, porém, o melhor é baixar os fontes do Turpial a partir do GitHub, com o seguinte comando no terminal:

git clone git://github.com/satanas/Turpial.git turpial

Caso você queira me acompanhar, e ainda não tenha o cliente git instalado, execute isso antes:

sudo aptitude install git-core

Os fontes estarão na pasta turpial (cd turpial), com a seguinte estrutura:

Estrutura dos arquivos do código fonte do Turpial

Estrutura dos arquivos do código fonte do Turpial

Para ser direto, meu interesse é sobre como são construídas as interfaces gráficas no ambiente Linux. Seguindo meus instintos, fui procurar alguma coisa sob a pasta gtk (pra quem não sabe, GTK+ é o nome da biblioteca de interface gráfica utilizado pelo ambiente GNOME e pelos respectivos programas). Dentre os arquivos que lá estavam, abri o denominado about.py para dar uma olhada.

Interface do Turpial exibindo o <em>About Box</em>

Interface do Turpial exibindo o About Box

# -*- coding: utf-8 -*-

# Ventana para subir el ego de los desarrolladores de Turpial xD
#
# Author: Wil Alvarez (aka Satanas)
# Dic 21, 2009

import os
import gtk

class About:
    def __init__(self, parent=None):
        about = gtk.AboutDialog()
        about.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
        about.set_logo(parent.load_image('turpial_icon.png', True))
        about.set_name('Turpial')
        about.set_version(parent.version)
        about.set_copyright('Copyright (C) 2009 - 2010 Wil Alvarez')
        about.set_comments(_('Twitter client multi-interface written in Python'))
        about.set_transient_for(parent)
        about.set_position(gtk.WIN_POS_CENTER_ON_PARENT)

        try:
            path = os.path.realpath(os.path.join(os.path.dirname(__file__),
                '..', '..', '..', 'COPYING'))
            lic = file(path, 'r')
            license = lic.read()
            lic.close()
        except Exception, msg:
            license = 'This script is free software; you can redistribute it'
            'and\/or modify it under the\n\terms of the GNU General Public '
            'License as published by the Free Software\n\Foundation; either '
            'version 3 of the License, or (at your option) any later version.'
            '\n\n\You should have received a copy of the GNU General Public '
            'License along with\n\this script (see license); if not, write to '
            'the Free Software\n\Foundation, Inc., 59 Temple Place, Suite 330, '
            'Boston, MA  02111-1307  USA'
        about.set_license(license)
        authors = []
        try:
            path = os.path.realpath(os.path.join(os.path.dirname(__file__),
                '..', '..', '..', 'AUTHORS'))
            f = file(path, 'r')
            for line in f:
                authors.append(line.strip('\n'))
            f.close()
        except Exception, msg:
            pass

        about.set_authors(authors)

        about.connect("response", self.__response)
        about.connect("close", self.__close)
        about.connect("delete_event", self.__close)

        about.run()

    def __response(self, dialog, response, *args):
        if response < 0:
            dialog.destroy()
            dialog.emit_stop_by_name('response')

    def __close(self, widget, event=None):
        widget.destroy()
        return True

Consegui entender bem o que o código faz, mesmo porque é apenas um about box. Começa importando bibliotecas (linhas 8 e 9), antes de começar a definir a classe. Nesta, há um método construtor (__init__), no qual são definidos, primeiramente, o tipo e as propriedades da janela (linhas 13 a 21).

Entre as linhas 23 e 37, o código procura por um arquivo chamado COPYING, para dele extrair as informações de licença a serem exibidas na caixa de diálogo. Faz isso dentro de um bloco try...except, provendo uma saída sem erros para o caso de o arquivo não ser encontrado ou ocorrerem erros de leitura. Procedimento semelhante é feito entre as linhas 40 e 48, desta feita para ler o arquivo que contém a lista de autores.

Parece-me que a funcionalidade dos botões Créditos e Licença são providos pela classe AboutDialog do GTK+, tendo bastado ao autor apenas prover o conteúdo dos diálogos que abrem. A conexão é feita nas linhas 38 e 50, respectivamente.

Há um manipulador de respostas (__response), certamente para lidar com coisas do tipo “Sim/Não/Cancelar” ou “OK/Cancelar”, mas que, no contexto, serve apenas para fechar a janela, o que pode ser feito também pelo botão do decorador de janelas (__close).

Agora sinto-me um pouco menos analfabeto em Python. Acho que já aprendi as vogais. 😉

%d blogueiros gostam disto: