Feeds:
Posts
Comments

Archive for the ‘Python’ Category

If you use Rythmbox and you hate the way some plugins for music lyrics works and  are broken briging just piece of the lyric and not the whole one. Well, I just suggest you to use my plugin that uses AZLyric instead terra.com. AZlyric web site is,  for me, the best source of indie lyrics/bands/musics you can find :).

If you want to try, feel free trying my beautiful plugin :3 https://github.com/kirotawa/pluginsinpython/tree/master/rhythmbox/patches_rhythm_git. If you find some bug, please report me :). I’m already using this patch on my rythmbox. Unfortunatelly no one in rythm devel list seemed be interested in such thing. But well, I’m using, I’m taking advantage on this, and I’m happy :P.

Read Full Post »

Sobrevivendo quase sem programar

Já dizia aquela frase: ” a vida não tá fácil pra ninguém”. Faz algum tempo fui mudado de função no meu emprego atual para uma em que programar é algo tão raro quanto um leão albino da malásia. Mas como bom sobrevivente, no tempo que arrumo sempre surgem ideias bestas, boas, ou  não, e lá estamos nós programando projetos próprios em prol da sempre boa sanidade mental. (alias essa talvez seja a parte boa, dar mais olhos e códigos para meus pequenos projetos até então adormecidos =P).

Então, nessas horas de terrível apatia, nada melhor que codar, alguma coisa, qualquer coisa, alguma ideia, e ideias não me faltam =], grato a vocês neurônios e imaginação infinita ao 42.

Hoje resolvi  criar um script bobinho para pegar as informações dos meus Visa Vale e me mostrar em linha de comando =D. Assim, eu preguiçoso que não sou, não preciso mais ir no browser ou abrir a app no meu Android. Tudo que eu preciso fazer agora é, na linha de comando digitar python vvale ref ou python vvlae ali, e voila, tenho a informação de quantos milhões de reais tenho em meu cartão.

Mais uma vez a palavra mágica é Web Crawler, acompanhada de BSoup e urllib. Para conferir este novo e útil (ao menos pra mim é) script clique aqui!

Até mais e obrigado pelas tapiocas!

Read Full Post »

Há alguns dias atrás eu postei sobre um plugin que vinha fazendo pro rhythmbox, inicialmente fiz ele apenas pra mim, mas agora to lançando a versão pra quem quiser usar. Lembrando que pra usar o plugin você tem que ter conta no lastfm.

Segue alguns passos para uso do plugin:

1) Após baixar o plugin copiar a pasta top10 para o seu $HOME/.local/share/rhythmbox/plugins;

2) Dentro da pasta top10 há um arquivo com  .xml cópia este arquivo como root dá seguinte forma: sudo cp usr/share/glib-2.0/schemas/;

3) Agora como root execute.: sudo glib-compile-schemas /usr/share/glib-2.0/schemas/;

4) Abra o seu rhythmbox, procure por plugins, procure por Top1o, habilite o plugin e deverá aparecer uma imagem no seu player como esta abaixo.

Se essa imagem apareceu, então tudo correu bem.

5) Em plugins no rhythmbox clique em preferências no Top10, digite o seu login do lastfm e escolha o período do qual você  quer o seu top10. Quando você fizer isso uma animação de loading vai aparecer embaixo, assim que ela sumir feche o dialogo de configuração, desabilite o plugin e habilite novamente, agora uma imagem com o seu ranking irá aparecer ao lado. Se não aparecer, se ainda persistir na mesma imagem você deve ter digitado o seu login errado.

6) Caso não queira ficar digitando o seu login/user do lastfm basta editar o arquivo .xml, procurar pelo campo lastfmuser e setar entra as tags <default> </default> o seu usuário. Lembrando que se fizer isso deverá executar o passo 3 novamente, ou o 2 e o 3 caso edite direto na pasta do top10.

Nota.: Por algum motivo do além, ou algum bug safadjenho do ubuntu como rhythm quando abro aqui o meu via launch o plugin não funciona corretamente, mas se abro via terminal ele funfa de boa. Caso alguém venha a ter o mesmo problema, ou não, ou conseguir resolver antes de mim, avisa ae blz :D?!

Link para o plugin: Top10lastfm 

Read Full Post »

How many time mates?

Nesse post vou mostrar como criar o mais simples plugin no Rhythmbox. Vou narrar meu passo a passo nessa odisseia.

Tudo começa no lastfm, alguns de vocês  talvez saibam o que é isso. O Lastfm é um site, rede social para amantes de música. Nele você tem seus amigos, vizinhos que são listados com base no grau de afinidade musical e claro tem uma lista com as músicas e bandas que você mais ouve, está ouvindo ou já ouviu. O Rhythmbox atual já vem com um plugin do lastfm que quando você ativa pode marcar as suas músicas favoritas e ter uma lista de bandas similares, etc.  Todo esse plugin foi feito claro com a API do  last  que se encontra totalmente disponível para que você brinque. Mas o ponto não é usar a API do lastfm e sim usar alguém que já usa este recurso. “Como assim Kirotawa?”. Vou explicar, existem inúmeros recursos oferecidos por terceiros no last um deles é adicionar gráficos das bandas mais ouvidas por nomes ou gênero. Veja esse exemplo abaixo:

O que estes recursos fazem é calcular através do seu login do lastfm  os estilos musicais que mais gosta (a imagem acima) e criar um link para uma imagem com o gráfico. Feito isso tudo que você tem a fazer é copiar o link e adicionar no seu perfil e páh! Esta feito.

Agora vamos entender o que o meu simples plugin faz, quais os recursos que eu usei e como ele funciona. O site que gera a imagem que vai pro meu plugin é esse aqui sivy.net. Este site gera uma imagem, neste caso, com a capa dos cds dos artistas que mais escuto, o top 10. Gerando um link que se posto no lastfm mostra a imagem.  Até aqui tudo bem. O problema é que este site cobra para ficar atualizando, ou seja, se você quer que a imagem mude sempre você terá de pagar ou ficar atualizando na mão. Eu até sou a favor de pagar, mas sou liso e queria que a minha imagem se atualizasse sem eu ter que pagar. Como eu sabia exatamente como fazer isso, crawleando o site e pegando o link e depois só teria que injetar no lastfm, bem, não deu muito certo. Primeiro tentei fazer isso usando o GAE  (google app engine) como intermediário, mas graças ao tempo que o sky.net leva para gerar a imagem, mais de 5/10 segundos, o GAE me xinga e não resolve o meu problema, pois dá time expired.  Usei o urllib open, depois o urlfetch do próprio GAE e nadas! Foi então que desisti de fazer um webcrawler pra por a imagem atualizada no meu lastfm =/ e pensei – horas bolas porque não tacar isso no rhythmbox. Foi o que fiz. Mas antes vou descrever tudo que fiz, alguns passos devem ser inúteis, mas eu precisava testar cada um deles, eu simplesmente gosto de ver como as coisas funfam ;).

Passos.:
1) Usei uma bazuka para matar uma mosca. Como o sky.net faz post dos dados eu precisava saber o que tanto ele passava para poder preencher o form do jeito certo. Para descobrir isso eu apelei ao wireshark um sniffer que me mostra todos os dados que estão sendo passados por post. Bastou usar esse filtro: http.request.method == “POST”. Assim eu pude ver tudo que era necessário a ser passado no form e páh, só precisei nomear as variáveis e preencher elas em um dicionário.

values =
    {
     'nick':'kirotawa','type':2,'period':'3month','count':10, 'align':1,
     'font':20,'font_zoom':100,'generate':'Generate', 'colortext':'0;0;0',
     'colorbackground':'255;255;255'
    }

2) Criar o webcrawler usando o urlopen e o BeautifulSoup. Deem uma lida neste blog e vão saber do que estou falando.

3) Com o link para a imagem eu só precisei salvá-la ou usar o link e carregar ela no pixbuf do gdk (como eu já testei e deu paw quando tento carregar ela via url no pixbuf eu preferi salvá-la).  A mágica para fazer ela, a imagem, ser sempre atualizada com minha lista, é gerar  uma nova imagem sempre que entro no rhythmbox pela primeira vez. “Como você fez isso?”. Usei a força, joguei a imagem salva na pasta /tmp e pronto :P. Ele só gera uma vez a cada entrada no rhythmbox pela primeira vez após login. Porém isso tem um custo, um preço caro. Como disse antes o sivy.net é lento, logo a resposta pro urllib é lenta, logo o rhythmbox fica ? LENTO, isso se não trava. Pesquisando achei algo falando de um tal de rb.get_url, mas a documentação do rhythmbox é pobre e não me ajudou muito, por isso o plugin vai ficar lento por enquanto até que eu descubra como esse trem (get_url) funciona. Afinal eu preciso passar tudo via post, recuperar o html todo e filtrar só minha IMAGE_URL.

Finalizando, o plugin não é lá essas coisas, é o mais simples e burro, mas tive de revisar tanta coisa e estudar outras (GAE, urllib, BeautifulSoup, gtk, gdk ) que valeu muito a pena. Segue abaixo o código do meu plugin :P.


import os
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup
from gi.repository import GdkPixbuf, GObject, RB, Peas, Gtk, Gdk

IMAGE_PATH = "/tmp/top10.jpeg"

class Load(object):
    ''' Class load and make the low level that is necessary '''

    url = "http://lastfm.sivy.net/?do=albumForm-submit"

    values = {
        'nick':'login_here','type':2,'period':'3month','count':10, 'align':1,
        'font':20,'font_zoom':100,'generate':'Generate', 'colortext':'0;0;0',
        'colorbackground':'255;255;255'
    }

    def __init__(self):

        data = urllib.urlencode(self.values)
        request = urllib2.Request(self.url, data)

        response = urllib2.urlopen(request)
        document = response.read()
        soup = BeautifulSoup(document)

        image = soup.find('textarea').contents[0]
        image = image.split('[img]')[1].split('[/img]')[0]

        file_image = open(IMAGE_PATH,'wb')
        file_image.write(urllib.urlopen(image).read())
        file_image.close()

class Top10Plugin(GObject.Object, Peas.Activatable):
    object = GObject.property(type=GObject.GObject)

    def __init__(self):
        super(Top10Plugin, self).__init__()

        if not os.path.exists(IMAGE_PATH):
            Load()

    def do_activate(self):
        shell = self.object
        self.image = Gtk.Image()
        self.pixbuf = GdkPixbuf.Pixbuf.new_from_file (IMAGE_PATH)
        self.image.set_from_pixbuf(self.pixbuf) # , 175, 328)

        self.container = Gtk.VBox ()
        self.container.pack_start (self.image, True, True, 6)

        shell.add_widget(self.container, RB.ShellUILocation.RIGHT_SIDEBAR, False, True)
        self.container.show_all()

    def do_deactivate(self):
        shell = self.object
        shell.remove_widget(self.container, RB.ShellUILocation.RIGHT_SIDEBAR)
        self.image = None
        self.pixbuf = None
        self.container = None

O que faz o plugin…

Read Full Post »

Python e o ConfigParser

  • Quando eu digo por onde vou que em Python você pode voar, para isso basta usar o import fly.antigravity, eu não estou brincando :P. Esses dias pesquisando sobre aplicação de tiles em PyGame encontrei um tutorial bacanudo que me apresentou um modulo muito útil, o  ConfigParser. Este modulo ler um arquivo (txt) digamos assim, e faz o parser através de seções definidas no arquivo e dos seus valores. Mas como é isso Kirotawa? Veja o exemplo abaixo.
[level1]
map = @@@@
      ####
      ####
      @@@@
name = Fublasterdanger

[level2]
map =@@@@
     ####
     @@@@
     @@@@
name = Easy for girls

Esse é o arquivo de configuração, ou o seu load para jogos. O arquivo possui as seguintes características.

  • Seções ou ‘section’: define, como o nome já diz, uma seção e é representada por [nome_seção].
  • Opções ou ‘option’ ou itens: define os itens de uma dada seção. No nosso exemplo os itens são ‘nome’ e ‘map’.
Pronto, é só isso, nada mais. E com esses dados definidos para manusear é mais fácil ainda, veja o exemplo abaixo.
# -*- coding: utf-8 -*-

import ConfigParser

parser = ConfigParser.ConfigParser()

# Lê o seu arquivo com as definições de seções e itens.
parser.read("my_file_config")

# Retorna uma lista de seções
parser.sections()

# Retorna uma lista de tuplas dos itens da seção e o seus valores -> (item, valor)
parser.items('nivel')

# ... etc

Para ver o restante dos métodos basta usas as facilidades do python, nesse caso o help(ConfigParser).

E agora você me perguntar, “mas Kiro, o que eu vou fazer com isso?”. Como disse em Python a gente pode fazer tudo, eu vou usar para carregar configurações prévias de joguinhos ou aplicações GUI. Atrelado ao fato que posso criar o arquivo de config em tempo de execução e/ou alterar isso é uma boa, para o que quero fazer. Agora o que você vai fazer…Use sua imaginação =], ela será sempre o limite quando nos referimos a programar em Python. Então é isso, see ya later!

Referencias:

[1] http://wiki.sheep.art.pl/Tiled%20Map%20in%20PyGame

Read Full Post »

E aê, quem já andou brincando com o QML por aqui? Eu lembro que quando fui o forum do KDE no último EPSL/ENSL eu olhei para o QML sem entender nada tão pouco sem entender porque os caras do KDE falavam como drogados ecstasy. Eles diziam que o KDE novo vinha por ai e vinha com novidades que estavam revolucionando tudo, que o uso do QML (linguagem declarativa do Qt) iria mudar os paradigmas, que não existiria mais programação para desktop como antes. E eu ouvia tudo isso perplexo, com medo dos caras também, e com preconceito, afinal gosto do Gnome e os caras tiraram moh sarro com o bichinho.   Mas então, o tempo vai e o tempo volta, eis que resolvo brincar com esse novo brinquedo que o pessoal do KDE falou tanto. Olhei, olhei e olhei, vi que era possível escrever coisas com python usando o qt e qml , vi que era possível usar C++, por fim, vi o que eu talvez quisesse e não sábia que queria, que era possível usar apenas QML + JavaScript.

Se você olhar para um código QML a primeira vista você vai, talvez, achar estranho, ou dizer, ué isso é JSON? É JavaScript? Que bicho é esse? Depois de um tempo você vai entender tudo, vai entender que o QML é fortemente baseado em JavaScript e para quem gosta de JavaScript isso é magavilhoso (como diria o cara dos melhores do mundo).

Deixando de enrolar vamos ao assunto tema do post. Brincando pra lá e para cá com o QML resolvi criar um joguinho da memória bem simples. Eu não vou descrever o jogo aqui no post nem mostrar códigos porque já tem tudo isso no meu github =]. Vou só postar aqui a imagem desse joguinho bobo, mas que me deu muito prazer de fazer, pois foi leve e fácil. Como se não bastasse ainda uso o python para servir de lançador ou de ponte pra lançar o jogo. Vejam com os seus olhos e se a curiosidade for atiçada dêem um olhada no github .

Kanji Memo Game - QML + JavaScript

Read Full Post »

Hi there, no doubts is the most cool news the last times. Now you mobile programmer can  work on Android with Pygame. Yes, the new release is  warm and ready to try. Below I pasted the news ( from pygame-users@seul.org byTom Rothamel)

e-mail content:

“After spending the long weekend on the project, I’m pleased to announce the release of version 0.9.2 of the Pygame Subset for Android, which allows one to use a large subset of Pygame to develop Android applications. The new release is available from the Android Market, or at least will be in a few hours. Documentation is available from the new website:

This release features a new packaging tool, which generates stand-alone packages. It also adds support for developing on Windows, and for the icon, splashscreen, and permissions to be specified on a per-application basis. Hardware support is improved, with it now being possible to control vibration, and to read the accelerometer. Finally, this release fixes some bugs.
Behind the scenes, there were several changes to how PGS4A is developed. The same source code is used for the launcher package, the packaging tool, and the Ren’Py equivalents of the same. This should make it easier to release new version in the future. I’ve also moved the project to a model where PGS4A is included with applications that use it. This means that I can release new versions of PGS4A without having to worry about breaking old applications.
While applications written using 0.9.1 are still supported (and will be indefinitely), I recommend updating them to use 0.9.2. Note that the arguments to build.py have changed.
Finally, there is a new PGS4A forum, which is probably the best place to ask questions:
Thanks to everyone who gave feedback about version 0.9.1. I’ve integrated most of the feedback from the older versions, but if you didn’t have your issue addressed, please email me or post on the forum. (Chances are I misplaced it.) Since releasing is now easier, I can act more quickly to get releases out, if need be.”
So, what you waiting for?
To be Free use Linux!

Read Full Post »

Sabe aquele download que você quer fazer, mas o site de onde você está tentando te manda para uma página e pede para você cadastrar o celular para poder seguir e baixar o arquivo?  Muitos desses sites colocam o link para download na url, só que invertida. Mas agora seus problemas acabaram-se. =] Chegou o desinvertation TabajarisPy que põe  a url normal. E quantas milhares de linhas são necessárias em python para fazer isso? – Uma.

>>>url=4xvexljumitwixl?/moc.erifaidem.www//:ptth

>>>url[::-1] # uma linha

http://www.mediafire.com/?lxiwtimujlxevx4&#8217;

 

Read Full Post »

É pessoal, demorou mas finalmente teremos um evento PythonOnCampus aqui em Natal. Eu particularmente fico muito animado e feliz, pois finalmente conseguimos com que haja um evento assim por aqui. Mais do que tudo esse evento visa sacudir, no bom sentido, nossa comunidade local de usuários Python, e não  só isso, mas também, atrair mais usuários para a linguagem mostrando o por quê de usar Python. A exemplo do que já acontece com os nossos amigos vizinhos de PE com o PUG-PE, queremos tornar os eventos por aqui e a comunidade o mais que possível ativa.

Parabéns aos organizadores, e que venha o primeiro, segundo, terceiro … while True: PythonOnCampus.event()

Site: http://rn.softwarelivre.org/pythoncampus/

Read Full Post »

O emesene é um IM implementado em python e tem se mostrado como uma das melhores alternativas ao amsn, aquele feito em tcl/tk. Recentemente no site do projeto [1]  há um apelo, aviso, aos navegantes, apelo esse que reproduzo aqui.

 

emesene 2 needs YOU!

The emesene team is trying to bring the awesomeness to a new level but we’re short on manpower so we need your help to deliver a new version of your favourite im-application! (which is now not limited only to msn but also supports GTalk, Facebook and any other service you may want to implement through our nice extensions system!)

Want to help? Here’s a couple of things we currently need:

  • Developers, developers, developers!
  • Testers, see here
  • Packagers! (GNU/Linux, Windows, OSX)

If you have any question, get in touch with forums, mailing lists or GitHub issues! (click the BETA button on top-right of this page)

 

É isso, quer uma oportunidade para trabalhar em algum projeto de software livre em python, que tal o Emesene 2.

[1] http://emesene.org/

Read Full Post »

Older Posts »