artigo

Astrologia e Mapas Astrais

Astrologia é uma área do conhecimento humano que tenta entender o indivíduo com base em informações externas, partindo do princípio de que há uma mensagem, uma dica que ajude as pessoas a compreenderem quem elas são e quais seus propósitos na vida.

A ferramenta utilizada para isso na Astrologia é a posição dos planetas no céu. Diferente da crença comum, a base não é a Astrologia. A posição exata dos astros hoje não é o que é utilizado, tampouco vai importar o que a Astronomia considera ou não como um planeta. A posição dos astros, para a Astrologia, não é a causa de quem somos: a posição dos astros é uma linguagem. É um recado dado a nós. Como linguagem, ela usa como base o céu de muito tempo atrás. É muito parecido com o céu de hoje, mas não é o mesmo. Portanto, aquele papo de que os signos mudaram não procede.

Muito antigamente eu torcia o nariz para a Astrologia. Pensava eu: dividir o mundo em 12 grupos e dizer que com 1/12 do mundo vai acontecer uma mesma coisa é forçar a barra. Creio que muitos pensem assim também. O erro em pensar assim é que estamos confundindo Astrologia com Horóscopo. Horóscopo é uma "Astrologia Fast-Food" que se propõe a aconselher as pessoas em relação ao seu dia, geralmente reduzindo o mundo a 12 grupos. A Astrologia, por outro lado, não é principalmente divinatória. Como disse no início, ela objetiva dar autoconhecimento às pessoas.

Enquanto o Horóscopo do jornal divide o mundo em 12 grupos, a Astrologia trabalha com influência dos mesmos 12 signos, mas em vários planetas do nosso mapa astral natal. Uma pessoa "ser de Sagitário", por exemplo, faz referência à posição do Sol em seu mapa astral. O Sol é o "planeta" que mais influencia o indivíduo mas, segundo a Astrologia, a posição dos outros planetas também tem grande importância em quem nós somos. Além do signo solar, há o signo lunar e signos para Mercúvio, Vênus, Marte, etc.

Daí você já tira que o mundo não se divide em grupos. Ok, e se eu disser que além dos planetas terem signos eles também se relacionam uns com os outros? É o que na Astrologia chamamos de aspectos. Há aspectos harmoniosos e de conflito que podem surgir. Se muitos planetas estiverem em um lado do mapa astral, isso também influencia. Como se não bastasse, há ainda a divião do mapa astral com base na ascendência, dividindo o mapa em 12 posições. Assim, além do signo, a posição onde o planeta se encontra no mapa trará um significado adicional.

Daí pra frente, a Astrologia se torna bastante complexa. Envolve compreensão do significado de cada símbolo inicial (planeta, signo, casa, aspecto) e da multiplicação desses significados (Marte em Áries na segunda casa em conjunção com Sol em Capricórnio...); por fim da distribuição disso tudo no mapa. Tudo isso com o propósito de que possamos entender melhor a nós mesmos. Uma forma de autoconhecimento.

Embora a ciência chame a Astrologia de "pseudo-ciência", ela é uma área de conhecimento vasta e "amarrada". Embora haja charlatanismo, como em tudo pode haver, a Astrologia não é achismo. Apesar da leitura de um mapa ser subjetiva, ela tem bases firmes que seus estudiosos devem respeitar. Creio que o que difere a Astrologia de Ciência é apenas a premissa de que os astros influenciam em nós.

Se você quiser aprender mais sobre astrologia ou mesmo criar seu mapa astral gratuitamente (podendo solicitar uma análise paga), recomendo para isso o site astro.com.

Special: 

O Revolucionário Wii U

Desde que a Nintendo entrou no universo dos jogos eletrônicos, tornou-se um sucesso. Ultimamente, mesmo tendo perdido muito espaço para concorrentes, continua sendo referência.

A Nintendo que instituiu o padrão de joystick com botões de ação como hoje conhecemos:

  • quatro do lado direito (Y, X, B, A); que no Playstation viraram (quadrado, triângulo, X, círculo) e que a Microsoft simplesmente mudou a ordem pra confundir todo mundo (X, Y, A, B).
  • botões de gatilho. Inicialmente o L e R. Depois foi acrescido o Z. A Sony adotou os mesmos L e R e depois expandiu para L1, L2, R1 e R2. A Microsoft também tem os seus, mas não faço ideia de como os chama.

A Nintendo introduziu o efeito "Rumble" no Nintendo 64. Aquele efeito de fazer o controle vibrar, que hoje é padrão de indústria.

Quando o Wii apareceu com seu controle baseado em movimentos, muitos podem ter torcido o nariz, mas logo a Sony apareceu com uma "alternativa" (o pirulito azul que atende pelo nome de Move Motion) e provavelmente foi o estímulo para a Microsoft lançar o seu Kinect.

A Nintendo foi a primeira a se importar com visual tridimensional de fato. O seu Virtual Boy foi a primeira tentativa. Lançado em 1995, foi um fracasso. Ano passado, porém, veio o 3DS, que além de exibir gráficos em 3D real dispensa o uso de óculos especiais, conseguindo mandar imagens diferentes para os dois olhos, de modo a se construir a visão 3D. Isso, somando-se às características do portátil anterior (o Nintendo DS), como o uso de duas telas, sendo uma sensível ao toque; e somando-se novos recursos, como o acelerômetro e sensor de gravidade, bem como o excelente poder de processamento, capaz de colocar o 3DS no páreo, para algumas aplicações, até mesmo dos consoles de mesa da geração atual.

A Nintendo foi quem começou a investir em jogos tridimensionais, ainda no Nintendo 64. Quando todos estavam no mundo tridimensional e ninguém acreditava mais no mundo 2D, foi a Nintendo que trouxe o Mario de volta às duas dimensões, desencadeando uma onda de novos jogos 2D.

Entre as franquias de videogame mais vendidas do mundo, o destaque da Nintendo é inquestionável, bem como o carisma de seus personagens. Quem nunca ouviu falar de Mario, Zelda e Pikachu?

Entre os jogos que conseguiram nota máxima na Famitsu, quase metade são da Nintendo.

Dito tudo isto, vamos falar do console que a Nintendo lança este ano e que apresentou esta semana no E3: o Wii U.

Primeiro, alegaram que ele teria baixo poder de processamento. Isso é falso. Não sei como será em comparação ao Playstation 4 e ao XBox 720, já que os dois estão ainda longe de serem lançados, mas com certeza é mais poderoso que os atuais, iniciando mesmo a nova geração de consoles. Mas, como é comum em se tratando da Nintendo, isso nem é o que chama mais atenção.

Revolucionando mais uma vez o mercado, ela apresenta um console que traz como principal forma de interação uma fusão de joystick e tablet: o Wii U Gamepad. Ele traz uma tela sensível ao toque, além de acelerômetro, giroscópio, rumble, câmera, autofalantes, microfone... Além de dois direcionais analógicos e um digital, os clássicos botões Y, X, B e A; e os botões L e R acompanhado de ZL e ZR.

Com tantos recursos, cabe apenas aos fabricantes de jogos usarem sua criatividade para explorarem isso bem. Os portáteis da Nintendo e o próprio anterior - Wii - já demonstraram que dá pra fazer muitas formas bacanas de interação, basta ser criativo. A propósito, os wii motions (controles do Wii) são perfeitamente compatíveis com o novo console, funcionando inclusive em conjunto com o novo gamepad. Além disso a Nintendo oferecer um joystick opcional para jogos no estilo tradicional.

O Wii U Gamepad pode ser utilizado para mostrar o mapa enquanto vemos a ação acontecendo na TV; pode mostrar os itens que encontramos no caminho, nos permitindo ativá-los de forma simples e intuitiva... São muitos usos, inspirados nos usos que já fizeram das duas telas do DS e do 3DS. Mas essas telas agora não estão fisicamente acopladas! O gamepad pode ser usado para mostrar mais do cenário, como uma janela para o mundo do jogo, uma janela que podemos posicionar onde quisermos. E muitos outros usos, alguns ainda nem descobertos. Quem sabe até incluindo Realidade Aumentada?

Por exemplo, não sei o quanto isso me interessaria diretamente (provavelmente muito pouco), mas achei genial a ideia de um karaoke onde a letra aparece na tela do gamepad, permitindo que a turma fique mais junto, que a pessoa que está cantando fique de frente pros amigos. Esse jogo foi demonstrado também e será lançado.

Por falar nesse tipo de proximidade, a proposta da Nintendo com o Wii U é justamente esta: tornar as pessoas mais próximas. E se analisarmos bem, parece mesmo que a Nintendo sempre se importou com a socialização do gamer. Vejam a época dos 8 e 16 bits: era bem mais comum encontrarmos jogos para dois jogadores do que nos concorrentes. O Nintendo 64 trazia quatro saídas para joystick! E o Mario Party, que já vai na nona edição?

A Nintendo quer juntar todos os consoles daqui por diante (3DS, Wii U e posteriores) em uma única rede. Nela poderemos nos comunicar com outros jogadores em salas de chat, em video-conferência... Diretamente como contatos ou em salas por jogo, filtradas por idioma. Isso tudo de maneira simples e intuitiva. Imagine poder conversar a respeito de uma fase difícil de um jogo simplesmente pausando e acessando o chat pelo próprio controle, caindo já na sala apropriada, onde pode tirar dúivdas e fazer novas amizades!

Sinceramente, eu gostei do que vi e espero ter meu próprio Wii U (provavelmente muito depois do lançamento). Eu falei do Wii aqui no blog em 2007 e só no ano passado adquiri um, e digo: não me decepcionou.

Alguns focos de imprensa por aí estão criticando a Nintendo e seu projeto. Claro, sempre fazem isso. Criticaram, por exemplo, o 3DS ano passado, e ele está aí, firme e forte.

Sabe o que é engraçado? Quando vi que a Nintendo pretendia colocar uma tela sensível no joystick, ha mais de ano, pensei comigo mesmo: a Sony usa plataforma Android no seu Xperia Play, e se eles criarem uma integração entre "androids" e o seu Playstation mais novo? Pois é, dito e feito. A Sony e a Microsoft já anunciaram que vão criar integração entre seus consoles futuros e tablets.

Então eu pergunto: se a Nintendo é tão ruim assim e se essa ideia é tão fraca, por que os concorrentes se apressaram em criar uma gambiarra (como aconteceu com o Wii) em resposta? Por que eles tem medo?

Special: 

Que bicho é virundum?

Emoticon cantorto

Virundum, em essência, é uma falha de letra ao cantar uma música. Seja por não conhecer a letra certa ou por "achar que conhece" a letra certa. Não é paródia, é trapalhada mesmo.

Não sei quem batizou de Virundum, mas quem fez isso o fez como uma homenagem à música que mais sofre com isso: o nosso lindo e complexo Hino Nacional Brasileiro.

Na minha opinião, um virundum tem que ter algumas regras: primeiro, tem que realmente parecer com o original (que é o que acontece com "gente que acha que está cantando certo). Segundo, não vejo muita graça em virundum de música em inglês. E, pra completar, se tiver algum sentido no contexto da música, melhor ainda!

Pois é, por aí existem alguns cantos que falam de virundum. Já foi moda em outros tempos, mas nunca mais ouvi falar a respeito. Um desses lugars é o site Virundum.com. Veja algumas pérolas tiradas de lá:

Como nossos pais (Belchior)

  • Mas é você
    Que é mal passado
    E que não vê
    Que o novo sempre vem
  • Hoje eu sei
    Que quem me deu a idéia
    De uma nova consciência
    E juventude
    Tá em casa
    Guardado por Deus
    Com tanto fio dental

.Faroeste Caboclo (Renato Russo)

  • E é melhor senhor sair da minha casa
    Vi um cabrito com um peixe já fiquei desconfiando.
    Mas antes de sair, com ódio no olhar, o velho disse:
    "Você perdeu sua vida, meu irmão"

A Estrada (Toni Garrido / Lazão / Da Gama / Bino)

  • Os mais belos monges
    Dizem amém

    Nas noites escuras
    De frio chorei, ei , ei

Se (Djavan)

  • Sei lá o que te dá que não quer meu calor
    São jorge por favor me empresta o dragão
    Mais fácil apedrejar pôneis em Bali
    Do que você decidir se dá ou não

Admirável Gado Novo (Zé Ramalho)

  • Ê, ô ô, briga de galo
    Porco, macaco, ê
    Porco e perdiz

Açaí (Djavan)

  • Ao sair do avião
    Vi um besouro, um limão
    Branca é a tez da manhã

Já na casa de um primo, ouvi da empregada a pérola (dentre outras pérolas): No meu quarto... tem gente até fazendo... coxinha. Não é difícil encontrar mais virunduns de bobeira pela Internet.

E você? Conhece algum virundum?

Special: 

Pai Rico, Pai Pobre, de Robert T. Kiyosaki e Sharon L. Lechter

Pai Rico, Pai Pobre - capa

Este é um daqueles livros que tentam nos ensinar através do exemplo. Narra-se uma história simpática de dois amigos que querem empreender quando ainda são crianças. O pai de um dos dois é um sucesso no universo acadêmico, enquanto o do outro é sucesso no mundo empresarial. Um trabalha muito para dar aulas e coordenar projetos, mantendo uma visão "robin-hoodiana" que o leva a não ter controle sobre suas finanças; enquanto o outro está bem longe das universidades e trabalha em construção civil, mas coordena várias empresas e está construindo seu próprio império. O livro tenta confrontar os ensinamentos dos "dois pais" como forma de "provar sua tese".

No fim das contas, trata-se de um livro muito interessante e de onde se pode tirar algumas valiosas lições. Como a de que "se você é dono de um negócio, mas tem que estar presente lá sempre, você não tem uma empresa, você tem uma profissão".

A forma como o livro é escrito, separando os momentos narrativo e explicativo sobre o "mundo dos ricos" é bem planejada e ajudam a tornar o assunto da preocupação com economia (que é por natureza chato para a maioria das pessoas) mais atrativo.

Enfim, recomendo que leiam aos que ainda não leram!

Special: 

OpenPandora: um videogame portátil livre

Pandora em ação

Imagine um videogame portátil parecido com o Nintendo DS, mas com uma tela apenas, com dois analógicos além do direcional e que roda GNU/Linux/XFCE. Não precisa imaginar, ele existe e se chama Pandora.

Um pouco maior que um Nintendo 3DS, o Pandora:

  • vem com um Sistema Operacional completo, sem travas (GNU/Linux baseado na distribuição Ångström)
  • tem processador ARM Cortex-A8 de 600 MHz
  • processador para video PowerVR SGX, com 3D GPU, operando a 800x480 em tela sensível ao toque
  • 512M de memória Flash, mas com suporte a cartão SD (inclusive pode dar boot de outro Sistema Operacional a partir de um cartão)
  • a propósito, possui 2 entradas para cartão SD, suportando cartões de até 32G
  • acessa redes sem fio - Wifi
  • se comunica por Bluetooth
  • tem porta USB 2.0 e uma mini-USB
  • tem saída para TV
  • além da tela sensível ao toque, oferece um direcional, dois direcionais analógicos, além de 6 botões de ação e 43 botões QWERTY (incluindo numéricos)
  • microfone interno
  • autofalantes stereo e saída para fone de ouvido
  • bateria que suporta mais de 10 horas de jogo!

Com ele você pode:

  • Jogar jogos livres como Armagetron, SuperTux e Battle for Wesnoth
  • Jogar jogos emulados nas diversas plataformas de até 64 bits
  • Navegar na Internet
  • Programar código-fonte
  • Enfim, qualquer coisa que possa ser feita em um computador (a tela é pequena demais? saída pra TV talvez ajude, até certo ponto; as teclas são muito emprensadas? plugue um teclado USB!)

Como nem tudo é perfeito, temos um problema: o preço. Um computador portátil desses custa 370 euros, sem levar em conta frete e imposto de importação. Difícil eu botar as mãos em um desses. Quem sabe um dia...

Special: 

wxPython: Tudo sobre menus

Se você não tem nada a ver com programação, nem tem interesse no assunto, simplesmente ignore este artigo.


Mike Driscoll tem um blog dedicado a Python chamado The Mouse vs. the Python e eventualmente há excelentes artigos por lá.

Esta é uma tradução livre do artigo wxPython: All about menus e modifiquei sutilmente algumas coisas, incluindo os exemplos. Agradeço ao Mike pelos excelentes artigos e me desculpo pelas liberdades que tomei na tradução (incluindo a mudança no nome do artigo). Vamos a ele!


Menus são onipresentes. Eles estão praticamente em quase os programas para desktop. Você os usa para editar preferências ou configurar seu programa. Em wxPython, há várias opções de menu para se escolher. A mais familiar é provavelmente wx.Menu. Mas há menus popup e uma implementação própria do Python conhecida como FlatMenu. Nós cobriremo aqui o wx.Menu e os menus popup porque ambos estão relacionados. FlatMenu inclui a API toolbar, assim você vai ter que esperar por um outro artigo que trate exclusivamente desses widgets. Então vamos começar a festa dos menus!

Um Exemplo Simples de Menu

Um exemplo simples de menu

Vamos começar com algo realmente simples. Um menu que só tem uma opção: Sair. Veja o código:

import wx
 
########################################################################
class MyForm(wx.Frame):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Tutorial wx.Menu")
 
        self.panel = wx.Panel(self, wx.ID_ANY)
 
        menuBar = wx.MenuBar()
        fileMenu = wx.Menu()
        exitMenuItem = fileMenu.Append(wx.NewId(), "Sair",
                                       "Sair do programa")
        menuBar.Append(fileMenu, "&Arquivo")
        self.Bind(wx.EVT_MENU, self.onExit, exitMenuItem)
        self.SetMenuBar(menuBar)
 
    #----------------------------------------------------------------------
    def onExit(self, event):
        """"""
        self.Close()
 
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()

Vamos detalhar melhor isso mais adiante. Para criarmos a barra de menu, instanciamos wx.MenuBar. Então criamos uma instância de wx.Menu, che chamamos de filemenu. Finalmente, adicionamos o item "Sair". Em essência, nós empilhamos wx.MenuItem, mas isso foi um tipo de atalho, já que não chegamos a instanciar um wx.MenuItem primeiro. Nós mostraremos como fazer isso no nosso próximo exemplo. Note que ao adicionarmos um item, temos que passar um id, uma string de etiqueta e uma string de estado. Esta última será mostrada quando você posicionar o mouse sobre o item de menu, desde que você tenha uma barra de estado. Not que para anexar um manipulador de eventos ao item de menu, você precisa usar o evento EVT_MENU e vinculá-lo ao frame. A seguir adicione o Menu propriamente ao objeto MenuBar e passe uma string também, que é neste caso "Arquivo". Finalmente, chamamos o método SetMenuBar do frame para anexar a barra de menu ao frame.

Adicionando uma imagem ao menu

Isso é tudo o que é preciso para criarmos um menu! Agora vamos mostrar um exemplo mais complex! Nota: para seguir o exemplo abaixo, você precisará usar seu próprio arquivo de imagem.

wx.Menu Imagem

# coding: utf-8
import wx
 
########################################################################
class MyForm(wx.Frame):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Tutorial wx.Menu")
 
        self.panel = wx.Panel(self, wx.ID_ANY)
 
        # create the menubar
        menuBar = wx.MenuBar()
 
        # create the first menu (starting on left)
        carMenu = wx.Menu()
        carMenu.Append(101, "&Ford", "Fabricante estadunidense")
        carMenu.Append(102, "&Nissan", "")
        carMenu.Append(103, "&Toyota", "Japoneses!")
        carMenu.Append(104, "&Sair", "Fechar a aplicação")
 
        # add a picture to a menu
        picMenu = wx.Menu()
        item = wx.MenuItem(picMenu, wx.ID_ANY, "Cobra", "Este menu tem uma imagem!")
        img = wx.Image('snake32.png', wx.BITMAP_TYPE_ANY)
        item.SetBitmap(wx.BitmapFromImage(img))
        picMenu.AppendItem(item)
 
        # add menus to menubar
        menuBar.Append(carMenu, "&Veículos")
        menuBar.Append(picMenu, "&Imagens")
        self.SetMenuBar(menuBar)
 
    #----------------------------------------------------------------------
    def onExit(self, event):
        """"""
        self.Close()
 
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()

Este exemplo é similar ao primeiro. A principal diferença é que nós adicionamos itens no lugar do menu File. Note que desta vez, especificamos nossos números ID explicitamente. Isso não é geralmente recomendado porque você pode terminar substituindo algum ID requerido pelo wx. Porém, você deve ter visto exemplos assim pela Internet. A próxima grande diferença não vem antes do picMenu. Aqui nós criamos um wx.MenuItem e adicionamos uma imagem a ele via wx.Image e o método SetBitmap do MenuItem. O resto é basicamente o mesmo.

Agora vamos investir algum tempo vendo como adicionar botões de marcar e selecionar (check e radio, respectivamente) ao nosso menu.

Adicionando Botões de Marcar e de Selecionar (Radio)

Tela demonstrando uso de radio e check boxes em menus com wxPython

Adicionar um botão de marcar ou selecionar ao seu menu é bastante simples. Vamos dar uma olhada em como isso é feito!

# coding: utf-8
# radiocheck.py
import wx
 
########################################################################
class MyForm(wx.Frame):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Tutorial wx.Menu")
 
        self.panel = wx.Panel(self, wx.ID_ANY)
 
        # Create menu bar
        menuBar = wx.MenuBar()
 
        # Create radio menu
        radioMenu = wx.Menu()
        idleItem = radioMenu.Append(wx.NewId(), "IDLE",
                                   "um shell para Python feito em Tcl/Tk",
                                   wx.ITEM_RADIO)
        pyCrustItem = radioMenu.Append(wx.NewId(),"PyCrust",
                                      "um shell para Python feito em wxPython",
                                      wx.ITEM_RADIO)
        psiItem = radioMenu.Append(wx.NewId(), "psi",
                                  "um shell simples para Python feito em wxPython",
                                  wx.ITEM_RADIO)
        menuBar.Append(radioMenu, "&Radio")
 
        # create check menu
        checkMenu = wx.Menu()
        wgItem = checkMenu.Append(wx.NewId(), "Wells Fargo", "", wx.ITEM_CHECK)
        citiItem = checkMenu.Append(wx.NewId(), "Citibank", "", wx.ITEM_CHECK)
        geItem = checkMenu.Append(wx.NewId(), "GE Money Bank", "", wx.ITEM_CHECK)
        menuBar.Append(checkMenu, "&Check")
 
        # Attach menu bar to frame
        self.SetMenuBar(menuBar)
 
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()

Sim, como você pode ver, tudo o que você precisa fazer é adicionar uma flag wx.ITEM_RADIO ou wx.ITEM_CHECK como um tipo de parâmetro, que é o quarto parâmetro. Por que é chamado de "tipo" ao invés de "estilo" como nos outros componentes visuais? Bem, enquanto discutia sobre isso no canal de IRC do wxPython, Robin Dunn (criador do wxPython) disse que provavelmente é assim por se tratarem de tipos de itens de menu diferentes.

Sub-Menus

Tela de exemplo do uso de submenus

A biblioteca wxPython suporta sub-menus. Aqui está um exemplo realmente simples que nos mostra como se faz iso.

# coding: utf-8
# submenu.py
import wx
 
########################################################################
class MyForm(wx.Frame):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Tutorial wx.Menu")
 
        self.panel = wx.Panel(self, wx.ID_ANY)
 
        menuBar = wx.MenuBar()
        fileMenu = wx.Menu()
        openMenuItem = fileMenu.Append(wx.NewId(), "Abrir")
 
        # create a submenu
        subMenu = wx.Menu()
        historyMenuItem = subMenu.Append(wx.NewId(), "Mostrar Histórico")
        fileMenu.AppendMenu(wx.NewId(), "Histórico", subMenu)
 
        exitMenuItem = fileMenu.Append(wx.NewId(), "Sair",
                                       "Deixar a aplicação")
        menuBar.Append(fileMenu, "&Arquivo")
        self.Bind(wx.EVT_MENU, self.onExit, exitMenuItem)
        self.SetMenuBar(menuBar)
 
    #----------------------------------------------------------------------
    def onExit(self, event):
        """"""
        self.Close()
 
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()

O segredo aqui é que ao invés de usarmos o método Append do filemenu, usamos o método AppendMenu. Como o novo sugere, ele permite ao programador acrescentar um menu ao invés de um item de menu. Yup, é isso aí!

Menus Flutuantes (ou Pop-up ou ContextMenus)

Tela de exemplo de uso dos menus flutuantes

Menus flutuantes são menus geralmente acessados através do botão direito do mouse em um navegador ou em um arquivo. Eles também são conhecidos como Menus de Contexto (ou menus pop-up). Aqui temos um exemplo bastante trivial para você estudar.

# coding: utf-8
# submenu.py
import wx
 
########################################################################
class MyForm(wx.Frame):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Tutorial de Menu Flutuante")
 
        panel = wx.Panel(self, wx.ID_ANY)
 
        lbl = wx.StaticText(panel, label="Clique com o botão direito em qualquer lugar por aqui!")
        self.Bind(wx.EVT_CONTEXT_MENU, self.onContext)
 
    #----------------------------------------------------------------------
    def onContext(self, event):
        """
        Create and show a Context Menu
        """
 
        # only do this part the first time so the events are only bound once 
        if not hasattr(self, "popupID1"):
            self.popupID1 = wx.NewId()
            self.itemTwoId = wx.NewId()
            self.itemThreeId = wx.NewId()
            self.Bind(wx.EVT_MENU, self.onPopup, id=self.popupID1)
            self.Bind(wx.EVT_MENU, self.onPopup, id=self.itemTwoId)
            self.Bind(wx.EVT_MENU, self.onExit, id=self.itemThreeId)
 
        # build the menu
        menu = wx.Menu()
        itemOne = menu.Append(self.popupID1, "ItemUm")
        itemTwo = menu.Append(self.itemTwoId, "ItemDois")
        itemThree = menu.Append(self.itemThreeId, "Sair")
 
        # show the popup menu
        self.PopupMenu(menu)
        menu.Destroy()
 
    #----------------------------------------------------------------------
    def onExit(self, event):
        """
        Exit program
        """
        self.Close()
 
    #----------------------------------------------------------------------
    def onPopup(self, event):
        """
        Print the label of the menu item selected
        """
        itemId = event.GetId()
        menu = event.GetEventObject()
        menuItem = menu.FindItemById(itemId)
        print menuItem.GetLabel()
 
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()

Para começar, ligamos wx.EVT_CONTEXT_MENU ao frame. Isso nos permite clicar com o botão direito em qualquer lugar e acionar o evento de menu de contexto, que criará e mostrará o menu flutuante. O código no método onContext é baseado no demo do wxPython para menus flutuantes. Como você pode ver, usamos uma checagem condicional, testando s o evento de menu já foi ativado. Se ele já foi ativado, não o será novamente. Em seguida, criamos nosso menu de um modo bem parecido com os anteriores. Finalmente, chamamos o método PopupMenu do frame e passamos para ele o nosso novo menu. Ele então mostra o menu ao usuário. Quando o usuário clica em um item do menu, o evento associado ao item será ativado e o menu será destruído.

Os primeiros dois itens do menu estão ligados ao método onPopup. Isso nos permite ver como podemos acessar o Menu e os atributos de um MenuItem. Você pode obter o id do menu com o evento e do Menu em si com o método GetEventObject do evento. Assim você pode usar o método FindItemById do menu para pegar um controlador para o item de menu propriamente. Finalmente, imprimimos a etiqueta do item de menu.

E pra terminar

Now you should know most of the menu methods and how to create them, bind events and make different kinds of menu items. You even know how to create popup menus! Now you can make your applications have fancy menus too.

Agora você já conhece grande parte dos métodos de menu e como criar menus, controlar eventos e fazer diferentes tipos de itens de menu. Você também sabe como criar menus flutuantes! Agora você pode fazer suas aplicações também terem menus originais.

Foto do post: Black Rat Snake, de cotinis.

O Silmarillion, de J. R. R. Tolkien

O Silmarillion - Capa do livro

Para quem gosta do gênero de ficção conhecido como Fantasia Medieval, O Senhor dos Anéis é uma obra indispensável.

Ao tomar como base elementos do folclore regional, detalhando povos e seres, criando todo um novo mundo, J. R. R. Tolkien terminou escreveu essa maravilhosa obra, que é inegável influência para diversas histórias de hoje em dia. Histórias de cavaleiros, dragões, magia, espadas, monstros, princesas... Apesar de a obra de Tolkien não trazer todos esses elementos, toda a essência da Fantasia Medieval vem de lá.

Quem gosta de RPGs como Dungeons & Dragons e Tormenta; jogos como The Legend of Zelda, Final Fantasy e The Elder Scrolls; e até mesmo de jogos de estratégia, muito deve, direta ou indiretamente, a esse grande autor.  Escarlate não estaria de fora.

A saga do Senhor dos Anéis já é conhecida, tendo inclusive ótimos filmes a seu respeito. O Hobbit - história que antecedeu a saga em torno do Um Anel - não é tão conhecido, mas logo mais terá seu filme lançado.

Acontece que todos esses livros foram escritos e organizados por Tolkien, narrando aventuras. Em Silmarillion a coisa muda bastante. Primeiro que não existia o livro "O Silmarillion". O que existia era um conjunto de diversas histórias relacionadas à Terra Média, agrupados pelo filho de Tolkien em uma obra que nos apresenta melhor esse mundo fantástico. Se a Terra Média existisse, o Silmarillion não seria um Romance ou Novela, mas um livro de História.

Nele podemos ver desde a criação do mundo por Ilúvatar até eventos mais recentes. Nele temos resposta para perguntas e curiosidades como: por que os reis da linhagem de Isildur vivem tanto mais do que outros humanos? Como surgiram os humanos? Quem exatamente é Sauron? Como foram criados os anéis? Quem são os magos, que são tratados como uma espécie à parte das existentes? (esta última era uma curiosidade antiga minha. O livro parece não trazer resposta, mas não desista: quando vai se aproximando do final isso também é revelado). E várias outras perguntas além destas são respondidas.

Claro, tem o lado ruim: se você acha monótona a narrativa de Tolkien, quando ele para a história para entrar na Geografia, talvez não deva ler O Silmarillion. Se, por outro lado, você não se incomoda com isso, é mestre RPG, autor de Fantasia Medieval ou simplesmente adorou a história toda do Senhor dos Anéis, nem pense duas vezes antes de descolar o seu exemplar!

Special: 

UFAL + Presídio #2

Se houvesse um Monopoly Arapiraca, com o vermelho sendo as instituições de ensino, a UFAL não ficaria só pertinho do presídio, mas com o presídio dentro.

Como já disse em outro post, a UFAL está paralisada em Arapiraca devido ao sério problema de segurança enfrentado há anos e que só se agrava.

Na última quarta-feira a fuga que levou a uma "basta" por parte da comunidade acadêmica fez aniversário de um mês. O que temos? Muitos obstáculos já foram superados e novos obstáculos apareceram.

O problema das fugas do presídio (que estranhamente fica dentro do terreno da UFAL) é recorrente, assim como as promessas governamentais de ao menos amenizar o problema. Em 2011 o Governador prometeu a construção de um muro que supostamente melhoraria a segurança. No final do ano, nada feito ainda, prometeu que o recurso que seria destinado ao muro seria realocado para a reforma de celas em Maceió que estavam sem uso, para que os reeducandos fossem transferidos provisoriamente para Maceió.

Pois bem, uma das notícias que temos é de que as 100 celas (que receberiam provisoriamente nossos cerca de 200 detentos) já estão reformadas, mas estão sendo ocupadas. Alega-se que houve aumento de 400 detentos na capital nos últimos meses. O prazo que o Governador deu em dezembro foi de 90 dias, o que já venceu faz tempo. E aí? Como fica?

Agora vamos ao novo presídio. Depois de receber uma cobrança da Prefeitura de Arapiraca em resposta ao seu pedido de terreno para a construção do presídio ("não temos terreno adequado. Vocês nos devem X milhões. O que podemos fazer é autorizar que esse recurso que vocês nos devem seja usado para a compra do terreno"), tem-se dito que a prefeitura de Craíbas, que fica perto de Arapiraca, cedeu o terreno. Ok!

Em reunião em Brasília para tratar do assunto, nosso Diretor Geral foi informado de que há uma verba de R$ 14,5 milhões pronta para a construção do novo presídio. Segudo disseram, basta o Governo Estadual apresentar que tem o terreno com o destino e o projeto de construção, que a verba estará à disposição no dia seguinte. Ok 2.

Assim temos duas pendências: a situação provisória, que é a transferência dos detentos para a capital esbarrou em um juiz de lá, que alega que a capital não pode receber esses presos. A construção do presídio (que leva 2 meses se for em pré-moldado ou de 8 a 12 se for uma construção convencional - há projetos do Governo Federal já prontos para as duas modalidades, à disposição do Estado; e que pode ser pedida em licitação emergencial) espera não se sabe o quê.

Enquanto o Governo não toma atitude (duas apenas: cumprir com a promessa da remoção e iniciar logo os trâmites para a construção do novo presídio), a UFAL continua parada por tempo indeterminado; estudantes estão sem aula e em breve correrão riscos de perderem o semestre.

Enquanto isso vamos às ruas, e para esta sexta-feira 4 está programado um seminário sobre a Universidade e o Sistema Prisional. O seminário ocorrerá a partir das 8 horas na Casa da Cultura, tomará toda a manhã e está aberto à toda a sociedade.

Para acompanhar melhor as ações de mobilização, sigam o blog UFAL Segura.

Special: 

As Bases de um Poeta Completo

Camões falava de Saber, Engenho e Arte em suas poesias. Considero, ao menos em minha interpretação, estas como as três características fundamentais para um poeta completo. Aqui, falo um pouco de cada uma delas na forma como vejo (não há garantia de que seja a forma como Camões pensava, embora ache até possível que de repente tenha sido).

Saber

Um poeta tem que ter o conhecimento do que vai falar. Para poesias filosóficas, conhecer filosofia; para narrar casos acontecidos, traçar bem o que houve. Enfim, tem que ter o tema. Um poeta de muito saber tem jogo de cintura e conhece vários temas. Se for um repentista, tem uma boa desenvoltura temática.

Engenho

Um poeta que não tem noção de ritmo e métrica não é um poeta completo. Essa é a parte que pode "obscurecer" o que o poeta quer dizer, mas é o caminho mais longo o que nos fortalece.

É difícil eu me afeiçoar com poesias modernas, que são poesias para serem declamadas teatralmente e não seguindo um ritmo.

Todas as regras são convenções e podem ser quebradas, mas quem planeja quebrar regras tem que saber o que está fazendo. Regras devem ser seguidas à risca enquanto não as entendemos. Só quando dominamos as regras é que podemos quebrá-las, se quisermos. Nesse ponto, teremos plena ciência de que estamos quebrando onde queremos um efeito diferente do convencional e, para quem também conhecer as regras, isso ficará muito claro.

Um exemplo mais claro dessa postura de conhecimento é a famosa licença poética, que dá liberdade ao poeta para burlar as regras do Português. Erros vindos do desconhecimento nunca foram nem serão licença poética, ela existe para mudanças conscientes nas regras do Português, mudanças que vêm para atender algum interesse do poeta.

Aplique-se o mesmo a métrica, rima, ritmo...

Arte

Esse é o fundamental de um poeta. Isso porque o Saber pode ser adquirido com leitura e o Engenho desenvolvido com o estudo e a prática. Se você tem Saber e Engenho, mas não Arte, produzirá poesias perfeitas estruturalmente, bem organizadas, mas sem vida, incapazes de despertar emoções no leitor.

Por outro lado, é até comum algumas pessoas que têm Arte, mas não Engenho ou Saber. Muitos desses nem tentam fazer poesias, limitando-se a escrever textos muito bem escritos e de agradabilíssima leitura.

Poetas Perfeitos

Um bom caminho para poetas perfeitos é dos violeiros, que desenvolvem a desenvoltura no Saber e aprimoram de maneira sublime o Engenho, quando atentos a ele (pois às vezes forçam métrica esticando sílabas cá e atropelando sílabas acolá). Se o cabra tiver Arte, não há quem segure.

Se quiser aprender mais sobre o Engenho, pesquise os estilos populares. São dos mais ricos e complexos que encontrei.

Para finalizar, uma estrofe de um galope à beira-mar, de Dimas Batista, que demonstra bem a superioridade do violeiro e repentista diante de muitos ditos poetas por aí...

"Eu acho engraçado um poeta de praça
Que passa dois meses fazendo um quarteto
Com um ano de luta, é que finda um soneto
Depois que termina, ainda sem graça
Com tinta e papel, o esboço ele traça
Contando nos dedos pra metrificar
Que noites de sono ele perde a pensar
A fim de mostrar tão minguado produto
Pois desses, eu faço, dois, três, num minuto
Cantando galope na beira do mar."

Special: 

Páginas

Subscribe to RSS - artigo

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo.so' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_odbc.dll' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_odbc.dll: cannot open shared object file: No such file or directory in Unknown on line 0