IMPORTANT!

Snipt is going open source. We've toyed with this idea for quite a while, and have finally decided it's the right way to move forward.

A few things:
  • The entire Snipt source code will be released on GitHub under the 3-clause BSD License on Friday, September 10th.
  • While we'd like to think we're perfect, we realize we're only human. By open sourcing the software that runs this website, certain bugs or security flaws may be discovered that could compromise the privacy of your snipts.
  • Only the Lion Burger team will be able to push commits to the Snipt.net site. Contributors should send a pull request to add new features or submit patches.
  • By using this site, you agree not to be too angry or take any legal action against Lion Burger should this whole thing go up in flames some day.
  • Follow us on Twitter for updates.
I agree, close this message
Sign up to create your own snipts, or login.

Latest 100 public snipts » italomaia's snipts The latest snipts from italomaia.

showing 1-19 of 19 snipts
  • função objetivo p/ jobshop [python]
    def makespan(v, A, m, n):
        "v - solução, A - matriz, m - n. máquinas, n - n. tarefas"
    	T = [0 for i in range(m)] # tempo de cada máquina
    	maq, pmaq = None, None
    	for k in range(n):
    		j=v[k]
    		maq=A[j][0]
    		T[maq]=T[maq]+A[j][1]
    		for i in range(1, m): # percorre a matriz em largura
    			maq = A[j][i*2]
    			pmaq = A[j][(i-1)*2]
    			if T[maq]>T[pmaq]:
    				T[maq]=T[maq]+A[j][(i*2)+1]
    			else:
    				T[maq]=T[pmaq]+A[j][(i*2)+1]
    	return T[maq]
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Jul 07, 2010 at 1:18 p.m. EDT
  • função objetivo para jobshop
    function makespan(v, A, m, n)
        -- v - solução atual
        -- A - matriz 
        -- m - número de máquinas
        -- n - número de tarefas
        ---
        -- para cada linha da solução, 
        -- cria um vetor com o tempo de 
        -- processamento de cada máquina
        local T = {}
        for i=1, m do T[i]=0 end
        
        local maq = nil
        local pmaq = nil -- máquina anterior    
        for k=1, n do
            local j=v[k] -- representa uma tarefa       
            maq = A[j][1]
            T[maq]=T[maq]+A[j][2]
            for i=2,m do
                maq = A[j][1+(i-1)*2]
                pmaq = A[j][1+(i-2)*2]
    			
                if T[maq]>T[pmaq] then
                    T[maq]=T[maq]+A[j][i*2]
                else
                    T[maq]=T[pmaq]+A[j][i*2]
                end			
            end
        end
        return T[maq]
    end
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Jul 07, 2010 at 9:49 a.m. EDT
  • nice settings for mplayer. I call it turtle-player
    # dev: Italo Maia
    # description: nice settings for mplayer. Those nasty hard-to-play videos will run better with
    # this.
    # date: 06/06/2010
    # ----
    # save to a file called turtle-player.sh and link it in /usr/bin/ as 
    # turtle-player
    mplayer -cache 8912 -cache-min 20 -af volnorm -vo xv x11 -ao alsa oss -framedrop "$1"
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Jun 07, 2010 at 11:44 p.m. EDT
  • servindo favicon pelo apache. Config do htaccess
    RewriteRule ^favicon\.ico$ /media/images/favicon.ico [L]
    

    copy | embed

    0 comments - tagged in  posted by italomaia on May 12, 2010 at 10:38 a.m. EDT
  • como comparar date e datetime
    #---------------------------------------
    #
    # italo mc maia
    # data: 26/04/2010
    # website: http://italomaia.com
    # twitter: http://twitter.com/italomaia
    # 
    #---------------------------------------
    
    from datetime import date, datetime
    
    # o truque esta no formato da string
    today = date.today().strftime("%Y%m%d")
    now = datetime.now().strftime("%Y%m%d")
    
    # OU - agradecimentos ao Alisson Sales
    # today = date.today().toordinal()
    # now = datetime.now().toordinal()
    
    today == now # dá o resultado esperado
    today != now # dá o resultado esperado
    today < now # dá o resultado esperado
    today > now  # dá o resultado esperado
    today <= now # dá o resultado esperado
    today >= now # dá o resultado esperado
    
     
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Apr 26, 2010 at 10:52 p.m. EDT
  • exemplo de uso do modeladmin do django com jquery
    from django.contrib import admin
    
    class ModeloAdmin(admin.ModelAdmin):
        class Media:
            js = ("js/jquery.js", "js/my_code.js",)
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Apr 21, 2010 at 7:54 p.m. EDT
  • Script que remove pastas .svn de uma árvore de diretórios
    #!/bin/bash
    echo "Este script remove todos os .svn da pasta atual e subpastas."
    echo "Deseja continuar? (s/n)"
    read opt
    
    if [ $opt = "s" ];
    then
        find . -name ".svn" -type d -exec rm -rf {} \;
    else
        echo "nada a fazer"
    fi
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Apr 08, 2010 at 7:18 a.m. EDT
  • script exemplo de utilização do clevercss
    # retirado de http://sandbox.pocoo.org/clevercss/
    import clevercss
    print clevercss.convert('''
    body:
      background-color: $background_color
    ''', {'background_color: 'red.darken(10)'})
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Feb 17, 2010 at 1:52 p.m. EST
  • amr2ogg script
    #!/bin/bash
    # The following packages are needed for this to work:
    # alsa-utils amrnb amrwb libamrnb3 libamrwb3 vorbis-tools
    
    ############################################################################
    #
    # date: 16/12/2009
    # author: italo maia
    # website: http://italomaia.com
    # script heavily based on http://snipt.net/d1s4st3r/tag/amrnb-decoder
    # special thanks to fernando: http://www.forumdebian.com.br/viewtopic.php?f=13&t=7125
    #
    ############################################################################
    
    if [ -e /usr/bin/amrnb-decoder ]
    then
        if [ -e /usr/bin/oggenc ]
        then
            if [ -f $1 ]
            then
                fname="${1%.*}"
                fext="${1##*.}"
                
                amrnb-decoder $1 $fname.raw
                oggenc -r -B 16 -C 1 -R 8000 -o $fname.ogg $fname.raw
                echo "cleaning up"
                rm $fname.raw
            else
                echo "file '$1' not found."
            fi;
        else
            echo "please, install oggenc"
        fi;
    else
        echo "please, install amrnb-decoder"
    fi;
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Dec 16, 2009 at 5:04 a.m. EST
  • css2clever translator. Simple and functional.
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    #--------------------------------------
    #
    # data: 30/11/2009
    # author: italo moreira campelo maia
    # http://italomaia.com
    # http://eusouolobomau.blogspot.com/
    #
    #--------------------------------------
    
    import os, sys, time
    import clevercss as clever
    
    def parse(filepath):
        if filepath.endswith(".clever"):
            with open(filepath) as file:
                data = file.read()
                return clever.convert(data)        
    
    def write(filename, data):
        with open(filename, 'w') as file:
            file.write(data)
    
    def write_clever(cfile, verb=False):
        data = parse(cfile)
        if verb:
            print "CLEVER FILE: ", cfile
            print "------------------------------------------"
            print ""
            print data
            print ""
        write("%s.css" % cfile[:-7], data)
        print ("%s.css criado." % cfile[:-7])
    
    def print_help():
        print "USAGE:"
        print "clever2css -c *.clever - cria"
        print "clever2css -c arquivo.clever - cria"
        print "clever2css -w *.clever - cria e observa por atualizações"
        print "clever2css -w arquivo.clever - cria e observa por atualizações"
        print "clever2css -q *.clever - modo simples"
        print "clever2css -q arquivo.clever - modo simples"
        print "clever2css -p *.clever - modo verborrágico"
        print "clever2css -p arquivo.clever - modo verborrágico"
        print "clever2css -q -p -c *.clever"
        print "clever2css -q -p -c arquivo.clever"
        
    
    def main(args):
        LIST=True
        WATCH=False
        CREATE=False
        PRINT=False
    
        if "-h" in args:
            print_help()
            exit(0)
    
        # quiet
        if "-q" in args:
            args.pop(args.index("-q"))
            LIST=False
    
        # create
        if "-c" in args:
            args.pop(args.index("-c"))
            CREATE=True
        
        if "-w" in args:
            args.pop(args.index("-w"))
            WATCH=True
    
        # print
        if "-p" in args:
            args.pop(args.index("-p"))
            PRINT=True
        
        if args:
            if LIST:
                print ""
                print "PROCESSANDO:"
                for arg in args: print "- %s" % arg
                print ""        
            
            if any([WATCH, CREATE]):
                if WATCH:
                    tdict = {}
                    while True:
                        for arg in args:
                            ftime = os.path.getmtime(arg)
                            
                            if tdict.get(arg, False)!=ftime:
                                tdict[arg]=ftime
                                write_clever(arg, PRINT)
                            time.sleep(0.5)
                elif CREATE:
                    for arg in args:
                        write_clever(arg, PRINT)
        else: print "Nada a fazer."
    
    if __name__=="__main__":
        main(sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Dec 11, 2009 at 11:39 a.m. EST
  • comparativo mootools vs jquery
    // mootools Vs jquery
    // por: italo maia
    // data: 30/11/2009
    // http://italomaia.com/
    // http://eusouolobomau.blogspot.com/
    
    // pega o elemento com id=id
    $("#id"); // jquery - perl?
    $("id"); // mootools - codigo menor
    
    
    // jquery
    // duas formas de se adicionar eventos. Confuso!
    $("#id").bind("click", function(){alert("oi")});
    $("#id").click(function(){alert("oi")});
    
    // eventos tratados de formas diferentes
    document.ready(function(){alert("oi")}) ;
    
    
    // mootools
    // apenas uma forma de se adicionar eventos. Pythonico!
    $("id").addEvent("click", function(){alert("oi")});
    // eventos sao tradados de forma semelhante
    document.addEvent("domready", function(){alert("oi")});
    
    // pega todos os elementos de tagname=a
    // jquery - codigo menor
    $("a"); 
    // mootools - criterio de selecao definido pelo metodo e nao por marcacao
    $$("a");
    
    // conta ocorrencias
    
    // jquery - semelhante 
    $("a").size()
    
    // mootools - semelhante
    $$("a").size() 
    
    // jquery - nomeclatura de metodo confusa. style acessa ou define?
    $("#id").style('atrib', 'valor');
    
    // mootools - explicito > implicito
    $("id").setStyle('atrib', 'valor');
    
    // jquery - feio e maior. "javeiro"?
    $.each([1,2,3], function(index, el){alert(i);alert(el);});
    
    // mootools - sintaxe menor e mais bonita. each é método da lista
    [1,2,3].each(function(el, index){alert(i);alert(el);});
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Nov 29, 2009 at 9:59 p.m. EST
  • Converts ogg files to mp3 / Converte arquivos ogg para mp3
    #!/usr/bin/python
    #-*- coding: utf-8 -*-
    
    import os
    import sys
    import glob
    
    from subprocess import Popen, PIPE
    from optparse import OptionParser
    
    def process(folder, bitrate, keep_wav):
        # pega os arquivos do local especificado
        arqs = [ os.path.splitext(arq)[0] for arq in glob.glob( os.path.join(folder,"*.ogg") )]
        # ordena os bixin
        arqs.sort() 
        
        for arq in arqs:
            # transforma o arquivo para wav
            Popen( ("oggdec", "%s.ogg" % arq,), ).wait()
            
            # transforma o arquivo para mp3
            print "Convertendo `%s` para mp3" % arq
            p = Popen( ("lame", "-b 128", "%s.wav" % arq, "%s.mp3" % arq,), stdout=PIPE,stderr=PIPE )
        print "Terminando ultimo processo..."
        stdout, stderr = p.communicate()
        
        if not keep_wav:    
            print "Removendo arquivos .wav"
            for arq in arqs:
                os.remove("%s.wav" % arq)
        print "Fim..."
    
    if __name__=="__main__":
        print "---------------------------------------------------------------"
        print "* Programa desenvolvido por Italo Moreira Campelo Maia - UECE *"
        print "* www.italomaia.com.br                                        *"
        print "*                                                  25/02/2008 *"
        print "---------------------------------------------------------------"
        
        uso = """: python %prog [options]
        Requesitos: os programas oggdec e lame devem estar instalados"""
        
        parser = OptionParser(usage=uso, version="%prog 1.0")
        parser.add_option("-s", "--source", default="", help=u"Diretório onde estão seus arquivos .ogg")
        parser.add_option("-b", "--bitrate", default=128, type="int", help=u"Bitrate das mp3 geradas (ex:-b 128, --bitrate=160)")
        parser.add_option("-k", "--keep-wav", default=False, action="store_true", \
            help=u"""Caso a opção -k seja fornecida, os arquivos wav não serão apagados ao fim do processo""")
        try:
            # pega as opções do programa
            (options, args) = parser.parse_args()
        except:
            print "ocorreu um erro"
            exit()
        
        if options.keep_wav:
            print "Os arquivos .wav serão mantidos"
        else:
            print "Os arquivos .wav serão apagados ao fim do processo"
        if options.source:
            print "Os arquivos da pasta atual serão usados"
        else:
            print "Serão usados os arquivos do diretório %s" % options.source
        print "Será utilizado o bitrate %d para converter as mp3" % options.bitrate
        # executa o programa    
        process(options.source, options.bitrate, options.keep_wav)
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Oct 29, 2009 at 7:22 p.m. EDT
  • permite acessar a base do onemanga.com
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #------------------------------------
    #
    # autor: italo moreira campelo maia
    # website: http://italomaia.com/
    # data: 07/10/2009
    # last update: 13/02/2010
    # last update: 31/03/2010
    # inspirado no script de Will Larson
    #
    #------------------------------------
    
    import os
    import re
    import sys
    import copy
    import time
    import shutil
    import socket
    
    try:
        import Tkinter as tk
        import tkMessageBox as MessageBox
        import tkFileDialog as FileDialog
    except:
        tk = None
        print "Tkinter not installed. UI not avaiable."
    
    from os import path
    from socket import timeout
    from urlparse import urljoin
    from datetime import datetime
    from urllib2 import urlopen, URLError
    
    try:
        # download here: http://www.crummy.com/software/BeautifulSoup/
        from BeautifulSoup import BeautifulSoup 
    except:
        print "BeautifulSoup is required."
        print "You can install it from here: %s" % "http://www.crummy.com/software/BeautifulSoup/"
        sys.exit(1)
        
    TIMEOUT = 2
    WAIT_BETWEEN_REQUESTS = 2
    HOME_DIR = os.getenv("HOME")
    MAIN_PAGE = "http://www.onemanga.com/"
    RECENT_PAGE = "http://www.onemanga.com/recent/"
    DIRECTORY_PAGE = "http://www.onemanga.com/directory/"
    
    BASE_CACHE_PATH = path.exists('/tmp/') and "/tmp/omreader/" \
        or path.join(HOME_DIR, '/tmp/omreader/')
    
    CACHE_PATH = lambda arg : "%s%s:%s.json" % (BASE_CACHE_PATH, arg, datetime.today().strftime("%d-%m-%Y"))
    
    if not path.exists(BASE_CACHE_PATH):
        os.mkdir(BASE_CACHE_PATH)
    
    class OMReader(object):
        
        def __init__(self):
            self.series = get_series()
    
        def find(self, name):
            for i, v in enumerate(self.series):
                if name in v["name"].lower():
                    print "code:", i, "-", v["name"]
        
        def download(self, serie, chapter=None, page_id=None, basepath=None):
            log("downloading...please, wait")
            download_list = []
    
            if all([chapter, page_id]): # marca pagina para download
                page = chapter["pages"][page_id]
                load_image_source(page)
                filename = page["name"]
                download_list.append((filename, page))
                
            elif chapter is not None: # marca capitulo para download
                for page in chapter["pages"]:
                    load_image_source(page)
                    
                    filename = path.join(chapter["name"], page["name"])
                    download_list.append((filename, page))
            
            else: # marca o quadrinho todo para download
                for chapter in serie["chapters"]:
                    load_pages(chapter)
                    for page in chapter["pages"]:
                        load_image_source(page)
                        
                        filename = path.join(chapter["name"], page["name"])
                        download_list.append((filename, page))
            # baixa os quadrinhos da lista
            for filename, page in download_list:
                if basepath is not None:
                    filename = path.join(basepath, filename)
                
                folder = path.dirname(filename)
                
                if path.exists(filename):
                    print "'%s' exists. Moving on." % filename
                    continue
    
                if not path.exists(folder):
                    print "creating '%s'" % folder
                    os.mkdir(folder)
    
                image = get_manga_image(page)
                with open(filename, 'w') as file:
                    file.write(image)
                    print "'%s' saved." % filename
        
        def put_cache(self):
            'Records the loaded series in a json cache'
            import json
            cache_path = CACHE_PATH("series")
            with open(cache_path, 'w') as file:
                json.dump(self.series, file)
    
    def log(msg):
        if VERBOSE: print msg
    
    def purlopen(source, timeout=TIMEOUT):
        'Tries to fetch a url, if it fails, tries again'
        try: return urlopen(source, timeout=timeout)
        except KeyboardInterrupt, e: raise e
        except Exception, e:
            log("timeout for source: %s" % source)
            time.sleep(WAIT_BETWEEN_REQUESTS)
            return purlopen(source, timeout=timeout*2)    
    
    def clear_cache():
        shutil.rmtree(BASE_CACHE_PATH)
        print "cache cleared."
    
    def get_series():
        cache_path = CACHE_PATH("series")
        if path.exists(cache_path):
            import json
            with open(cache_path) as file:
                temp = json.load(file)
            return temp
        else:
            print "connecting to:", DIRECTORY_PAGE
            try:
                handle = purlopen(DIRECTORY_PAGE)
                data = handle.read()
            except socket.timeout, e:
                print e
                sys.exit(1)
            finally: handle.close()
    
            temp = []
            soup = BeautifulSoup(data)
            for match in soup.findAll('tr')[2:]:
                td_list = match.findAll('td')
                if len(td_list) is 3:
                    el_subject, el_chapter, el_status = td_list        
                    el_link = el_subject.find('a')
    
                    ctx = {}
                    ctx["name"] = el_link.string
                    ctx["url"] = urljoin(MAIN_PAGE, el_link['href'])
                    ctx["status"] = el_status.string and el_status.string or "unknown"
                    aka = el_subject.find('span', {'class':'aka'})
                    ctx["aka"] = aka and aka.string or ''
                    temp.append(ctx)
            return temp
    
    def load_chapters(serie):
        if not "chapters" in serie.keys():
            handle = purlopen(serie["url"])
            data = handle.read()
            handle.close()
            
            temp = []
            soup = BeautifulSoup(data)
            for match in soup.findAll('tr')[1:]:
                el_subject, el_scans, el_date = match.findAll('td')
                el_link = el_subject.find('a')
    
                data = []
                ctx = {}
                ctx["name"] = el_link.string
                ctx["url"] = urljoin(MAIN_PAGE, el_link['href'])
                ctx["scans"] = el_scans.string
                ctx["date"] = el_date.string
                temp.append(ctx)
            temp.reverse()
            serie["chapters"] = temp
    
    def load_pages(chapter):
        if not "pages" in chapter.keys():
            handle = purlopen(chapter["url"])
            data = handle.read()
            handle.close()
            
            soup = BeautifulSoup(data)
            el_cover = soup.find('div', {'id':'chapter-cover'})
            ul_el = el_cover.find('ul')
            pages_url = ul_el.find('a')['href']
            
            handle = purlopen(urljoin(MAIN_PAGE, pages_url))
            data = handle.read()
            handle.close()
            
            temp = []
            soup = BeautifulSoup(data)
            el_select = soup.find('select', {'id':'id_page_select'})            
            el_option_list = el_select.findAll('option')
            
            for opt in el_option_list:
                ctx = {}
                ctx["url"] = urljoin(chapter["url"], opt.string)
                ctx["ident"] = path.basename(ctx["url"])
                temp.append(ctx)
            chapter["pages"] = temp
    
    def load_image_source(page):
        if not "img_src" in page.keys():
            handle = purlopen(page["url"])
            data = handle.read()
            handle.close()
        
            soup = BeautifulSoup(data)
            page["img_src"] = soup.find('img', {'class':'manga-page'})['src']
            page["name"] = path.basename(page["img_src"])
    
    def get_manga_image(page):
        'Loads the image file for a page'
        log("retrieving: %s" % page["img_src"])
        handle = purlopen(page["img_src"])
        image = handle.read()
        handle.close()
        return image
    
    def print_help():
        print '''Usage: python onemanga.py option manga_number<:manga_chapter-1>
        Options:
            help:      shows the help message
            find:      findout the number of a particular manga
            download:  download a complete manga or chapter
            show:      get info about a certain manga
        
        Usage:
            omreader ui # shows user interface (alpha)
            omreader find wantedManga # don't use spaces!
            omreader download mangaId # downloads manga with ID mangaId
            omreader download mangaId:chapterNumber # downloads chapter Number from manga with ID mangaId
            omreader download mangaId:chapterNumber:pageNumber
            omreader show mangaId # shows manga with mangaId
            omreader show mangaId:chapterId # shows chapter Number from manga with ID mangaId
            omreader clear_cache # clear omreader cache
            omreader help # shows help message        
        '''
    
    def serie_to_str(serie):
        serie_info = """\n ========== Manga ==========
             name : %(name)s
              url : %(url)s"
         chapters : %(released)d released
      last update : %(status)s
     ========== ***** ==========
    """
        load_chapters(serie)
        chapter_count = len(serie["chapters"])
        items = serie.items()+{"released" : chapter_count}.items()
        return serie_info % dict( items )
    
    def chapter_to_str(chapter):
        chapter_info = """\n ========= Chapter =========
             name : %(name)s
              url : %(url)s
             scan : %(scans)s
         released : %(date)s
     ========= ******* =========
    """
        return chapter_info % chapter
    
    def show(reader, serie_ident, chapter_ident=None):
        serie = reader.series[int(serie_ident)]
        load_chapters(serie)
        
        if chapter_ident is not None:
            chapter = serie["chapters"][int(chapter_ident)]
            print serie_to_str(serie) + chapter_to_str(chapter)
        else: print serie_to_str(serie)
    
    def download(reader, serie_ident, chapter_ident=None, page_ident=None):
        global FORCE
        serie, chapter, page = None, None, None
        serie = reader.series[int(serie_ident)]
        load_chapters(serie)
        
        if chapter_ident is not None:
            chapter = serie["chapters"][int(chapter_ident)-1]
            load_pages(chapter)
            if page_ident is not None:
                page = int(page_ident)
        
        if FORCE: reader.download(serie, chapter, page)
        else:
            if page is not None:
                if raw_input("Confirm download of page %s from chapter '%s', serie '%s'? (y/n)\n> " % (page_ident, chapter["name"], serie["name"])) in ("y", "s"):
                    FORCE = True
                    reader.download(serie, chapter, page)
            elif chapter is not None:
                if raw_input("Confirm download of chapter '%s', serie '%s'? (y/n)\n> " % (chapter["name"], serie["name"])) in ("y", "s"):
                    FORCE = True
                    reader.download(serie, chapter, page)
            elif raw_input("Confirm download of complete serie '%s'? (y/n)\n> " % serie["name"]) in ("y", "s"):
                    FORCE = True
                    reader.download(serie, chapter, page)
    
    def download_bash(reader, args):
        if len(args) == 2: # baixar quadrinhos inteiros
            init, end = int(args[0]), int(args[1])+1
            
            print "\nThe following series were found:"
            print "********************************"
            for s in reader.series[init:end]: print "|", s["name"]
            print "********************************\n"
            
            if FORCE or raw_input("Do you wish to download all series above? (y/n)\n> ") in ("y", "s"):
                for serie in reader.series[init:end]:
                    load_chapters(serie)
                    reader.download(serie)
        
        elif len(args) == 3: # baixar capitulos
            serie_ident = int(args[0])
            init, end = int(args[1])-1, int(args[2])
            serie = reader.series[serie_ident]
            load_chapters(serie)
            
            print "\nThe following chapters were found:"
            print "********************************"
            for chapter in serie["chapters"][init:end]: print "|", chapter["name"]
            print "********************************\n"
            
            if FORCE or raw_input("Do you wish to download all chapters above? (y/n)\n> ") in ("y", "s"):
                for chapter in serie["chapters"][init:end]:
                    load_pages(chapter)
                    reader.download(serie, chapter)
        else: print "nada a fazer."
    
    class InfoWindow(object):
        def __init__(self, *args, **kwargs):
            self.toplevel = tk.Toplevel(*args, **kwargs)
            self.initialize()
    
        def initialize(self):
            self.frame = tk.Frame(self.toplevel)
            self.message = tk.Message(self.frame, justify=tk.CENTER, aspect=200, padx=2, pady=1)
            self.str_var = tk.StringVar()
            self.message.config(textvariable=self.str_var)
            self.ok_button = tk.Button(self.toplevel, text="Ok", command=self.toplevel.destroy)
            
            self.message.pack(expand=1, fill=tk.BOTH)
            self.frame.pack(expand=1, fill=tk.BOTH)
            self.ok_button.pack()
    
        def set_text(self, msg):
            self.str_var.set(msg)
    
    class DownloadDialog(object):
        def __init__(self, *args, **kwargs):
            self.toplevel = tk.Toplevel(*args, **kwargs)
            self.dpath, self.response = None, False
            self.initialize()
    
        def initialize(self):
            self.toplevel.title('Download folder')
            self.frame = tk.Frame(self.toplevel)
            self.label = tk.Label(self.frame)
            self.entry = tk.Entry(self.frame)
            self.ok_button = tk.Button(self.toplevel, text="Ok", command=self.ok)
            self.cancel_button = tk.Button(self.toplevel, text="Cancel", command=self.cancel)
            self.str_var = tk.StringVar()
            
            self.str_var.set('Download path')
            self.entry.insert(0, path.abspath("."))
            self.label.config(textvariable=self.str_var)
            self.frame.pack(fill=tk.BOTH, expand=True)
            self.label.pack(side=tk.LEFT)
            self.entry.pack(side=tk.LEFT)
            self.ok_button.pack(side=tk.RIGHT)
            self.cancel_button.pack(side=tk.RIGHT)
            self.toplevel.resizable(False, False)
        
        def ok(self):
            self.response = True
            self.toplevel.destroy()
    
        def cancel(self):
            self.response = False
            self.toplevel.destroy()
    
    class SerieWindow(object):
        def __init__(self, serie, *args, **kwargs):
            self.toplevel = tk.Toplevel(*args, **kwargs)
            load_chapters(serie)
            self.serie = serie
    
        def initialize(self):
            self.ch_frame = tk.Frame(self.toplevel)
            self.listbox = tk.Listbox(self.ch_frame)
            self.listbox_scroll = tk.Scrollbar(self.ch_frame, orient=tk.VERTICAL)
            
            for chapter in self.serie["chapters"]:
                self.listbox.insert(tk.END, chapter["name"])
            self.listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
            self.listbox_scroll.pack(side=tk.RIGHT, fill=tk.Y)
            self.listbox_scroll.config(command=self.listbox.yview)
            self.listbox.config(yscrollcommand=self.listbox_scroll.set)
            self.ch_frame.pack(expand=1, fill=tk.BOTH)
            
    
    class AppUI(object):
        def __init__(self, omreader, *args, **kwargs):
            self.wnd = tk.Tk(*args, **kwargs)
            self.omreader = omreader        
            self.initialize()
    
        def initialize(self):
            # configuring
            self.wnd.title("Onemanga UI")
            self.wnd.resizable(True, True)
            
            self.listframe = tk.Frame(self.wnd)
            
            # widgets
            self.listbox_scroll = tk.Scrollbar(self.listframe, orient=tk.VERTICAL)
            self.listbox = tk.Listbox(self.listframe)
            
            for serie in self.omreader.series:
                self.listbox.insert(tk.END, serie["name"])
            
            self.listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
            self.listbox_scroll.pack(side=tk.RIGHT, fill=tk.Y)
            self.listbox_scroll.config(command=self.listbox.yview)
            self.listbox.config(yscrollcommand=self.listbox_scroll.set)
            self.listframe.pack(expand=1, fill=tk.BOTH)
            
            self.dl_button = tk.Button(self.wnd, text="Download", command=self.download)
            self.info_button = tk.Button(self.wnd, text="Info", command=self.info)
            self.dl_button.pack(side=tk.RIGHT)
            self.info_button.pack(side=tk.RIGHT)
            
            self.listbox.bind('<Double-Button-1>', self.show_current_serie)
    
        def mainloop(self): self.wnd.mainloop()
    
        def listbox_selection(self):
            return [self.omreader.series[sel] for sel in  map(int, self.listbox.curselection())]
        
        def show_current_serie(self, event):
            for serie in self.listbox_selection():
                serie_window = SerieWindow(serie, master=self)
                serie_window.title(serie["name"])
                serie_window.initialize()
    
        def download(self):
            selection = self.listbox_selection()
            dialog = DownloadDialog()
            self.wnd.wait_window(dialog)
            resp = dialog.response
            
            if resp:
                destiny_path = dialog.dpath
                for serie in selection:
                    self.omreader.download(serie)
    
        def info(self):
            for serie in self.listbox_selection():
                window = InfoWindow()
                window.set_text(serie_to_str(serie))
    
    def show_ui(omreader):
        root = AppUI(omreader)
        root.mainloop()
    
    def main(argv, omreader):
        
        ui_re = re.compile("^ui$")
        help_re = re.compile("^help$")
        find_re = re.compile("^find\s+(\w+)$")
        clear_cache_re = re.compile("^clear_cache$")
        
        show_re = re.compile("^show\s+(\d+):?(\d+)?$")
        dl_manga_re = re.compile("^download\s+(\d+)$")
        dl_chapter_re = re.compile("^download\s+(\d+):(\d+)$")    
        dl_page_re = re.compile("^download\s+(\d+):(\d+):(\d+)$")
        
        # ex: download 10-20
        dl_bash_manga_re = re.compile("^download\s+(\d+)\-(\d+)$")
        # ex: download 10:20-30
        dl_bash_chapter_re = re.compile("^download\s+(\d+):(\d+)\-(\d+)$")
        
        argc = " ".join(argv)
        
        if clear_cache_re.match(argc):
            clear_cache()
    
        elif ui_re.match(argc):
            if tk is not None:
                show_ui(omreader)
            else:
                print "Please, install tkinter to use graphical interface."
                sys.exit(0)
        
        elif help_re.match(argc):
            print_help()
        
        # procurando uma serie
        elif find_re.match(argc):
            m = find_re.match(argc)
            omreader.find(*m.groups())
        
        # mostrar informacoes
        elif show_re.match(argc):
            m = show_re.match(argc)
            show(omreader, *m.groups())
        
        # baixar manga
        elif dl_manga_re.match(argc):
            m = dl_manga_re.match(argc)
            download(omreader, *m.groups())
        
        # baixar capitulo
        elif dl_chapter_re.match(argc):        
            m = dl_chapter_re.match(argc)
            download(omreader, *m.groups())
        
        # baixar pagina
        elif dl_page_re.match(argc):
            m = dl_page_re.match(argc)
            download(omreader, *m.groups())
        
        elif dl_bash_manga_re.match(argc):
            m = dl_bash_manga_re.match(argc)
            download_bash(omreader, m.groups())
        
        elif dl_bash_chapter_re.match(argc):
            m = dl_bash_chapter_re.match(argc)
            download_bash(omreader, m.groups())
    
    if __name__=="__main__":
        # executa o programa como standalone
        global FORCE, VERBOSE
        run, FORCE, VERBOSE = True, False, False
        argv = copy.copy(sys.argv[1:])
        omreader = OMReader()
        
        if "-y" in argv:
            argv.remove("-y")
            FORCE=True
        
        if "-v" in argv:
            argv.remove("-v")
            VERBOSE=True
        
        while run:
            try:
                main(argv, omreader)
                run = False
            except timeout, e:
                print "timeout"
            except KeyboardInterrupt, e:
                print "\n- forced exit -\n"
                run = False
            except Exception, e:
                print "exp:",e
                print "type:", type(e)
                print "restarting"
                run = False
        omreader.put_cache()
        print ".finished.\n"
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Oct 07, 2009 at 11:01 a.m. EDT
  • baixa os quadrinhos do angeli
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #
    # author: italo mc maia
    # email: italo ponto maia arroba gimail ponto com
    # website: http://italomaia.com & http://eusouolobomau.blogspot.com/
    #
    
    "Baixa os quadrinhos do angeli"
    
    import sys, os
    from BeautifulSoup import BeautifulSoup
    from urllib import urlopen
    
    WEBSITE="http://camaracom.com.br/portal3/mundo-camara-2/quadrinhos-do-angeli/"
    
    def main(args):
        handle = urlopen(WEBSITE)
        data = handle.read()
        handle.close()
        soup=BeautifulSoup(data)
        
        
        entry_el=x=soup.find("div", {"class":"entry"})
        for img in entry_el.findAll("img"):
            comic_src=img.get("src")
            basename=os.path.basename(comic_src)
            with open(basename, "w") as file:
                handle=urlopen(comic_src)
                src_data=handle.read()
                handle.close()
                file.write(src_data)
                print "%s escrito" % basename
    
    if __name__=="__main__":
        print "Iniciando aplicativo por linha de comando"
        main(sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Sep 24, 2009 at 7:13 p.m. EDT
  • imprime a lista de builtins do python em uma tabela
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #
    # data: 14/09/09
    # autor: italo maia <italo 'ponto' maia 'arroba' ´GIMAIL´ 'ponto' com>
    # website: http://italomaia.com/ | http://eusouolobomau.blogspot.com/
    #
    
    import sys
    
    str_size=0
    builtin_list = dir(__builtins__)
    for item in builtin_list:
        str_size=max(str_size, len(item))
    
    column_count = 3
    column_str = "%"+str(str_size)+"s|"
    columns_str = column_str * column_count
    line_str = "|%s"
    out = (str_size+1)*column_count*"-"+"-\n"
    
    temp=[]
    for i in range(len(builtin_list)):
        item = builtin_list.pop(0)
        temp.append(item)
        if len(temp) == column_count:        
            out+=line_str % columns_str % tuple(temp)
            temp=[]
            out+="\n"
    
    if len(temp) is 0:
        sys.exit(0)
    else:
        while len(temp) < column_count:
            temp.append("-")
        out+=line_str % columns_str % tuple(temp)
        out+="\n"
    
    out+= (str_size+1)*column_count*"-"+"-\n"
    print out
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Sep 14, 2009 at 6:24 p.m. EDT
  • reads nokia nbu contacts
    # -*- coding:utf-8 -*-
    
    #
    # data: 01/09/09
    # autor: italo moreira campelo maia
    # website: http://italomaia.com/ | http://eusouolobomau.blogspot.com/
    #
    
    "Lê os contatos de um arquivo de backup do symbian"
    # nao salva a imagem dos contatos
    
    import sys
    import os
    
    class Contact(object):
        att2field={
            'N:':'name',# nome
            'TEL;VOICE:':'tel',
            'TEL;VOICE;HOME:':'tel_res',# telefone de casa
            'TEL;VOICE;WORK':'tel_work',# telefone do trabalho
            'TEL;CELL:':'cell_tell',# celular
            'TEL;CELL;HOME:':'cell_home_tel',
            'TEL;CELL;WORK:':'cell_work_tel',
            'ADR;HOME:':'address_home',
            'ADR;WORK:':'address_work',
            'BDAY:':'birthday',
            'PHOTO;ENCODING=BASE64:':'photo'
        }
        def __iter__(self):
            for value in self.att2field.values():
                yield (value, getattr(self, value, ''))
    
        def __repr__(self):
            return str(self)
    
        def __str__(self):
            return str(dict(self))
    
        def format(self, fmt="%s:%s\n"):
            txt=''
            for key, value in self:
                if value:
                    txt+=fmt % (key,value)
            return txt
    
        def set_value(self, line):
            for key in self.att2field.keys():
                if line.startswith(key):
                    setattr(self, self.att2field[key], line[len(key):])
    
    def read_contacts(file):
        contact = None
        contacts = []
    
        for line in file.readlines():
            line = line.strip()
            if 'BEGIN:VCARD' in line:
                contact = Contact()
            elif line.startswith('END:VCARD'): # fim do contato
                contacts.append(contact)
                contact=None
            else:
                if contact is not None:
                    contact.set_value(line)
        return contacts
    
    def main(filename, output):
        if os.path.exists(filename):
            with open(filename, 'rb') as file:
                contacts = read_contacts(file)
            with open(output, 'w') as file:
                for i in range(len(contacts)):
                    c = contacts[i]
                    file.write(c.format())
                    file.write("\nContato %d:\n" % i)
            print "FINITO!"
        else: print "%s não existe" % filename
    
    def help():
        print """Este aplicativo lê contatos de um backup symbian
        Argumentos:
        <arquivo_nbu> <arquivo_saida>
        'arquivo_nbu' aponta para o arquivo de backup
        'arquivo_saida' informa onde deve ser gravado o arquivo de saída
    
        Exemplo:
        python read_nbu.py backup.nbu contatos_2009.txt"""
        sys.exit(0)
    
    if __name__=='__main__':
        if len(sys.argv[1:])!=2:
            help()
        else:
            main(*sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Sep 01, 2009 at 8:29 p.m. EDT
  • como scriptar em python
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #
    # autor: italo maia <italo 'ponto' maia 'arroba' ´GIMAIL´ 'ponto' com>
    # website: http://italomaia.com/ | http://eusouolobomau.blogspot.com/
    #
    
    import os.path as path
    import sys
    import zipfile
    import getopt
    
    def help():
        print """Utilização:
        python zip.py arq arq2...
        
    Argumentos:
        -h: mostra a ajuda"""
        sys.exit(0)
    
    def main(argv):
        "método que executa as funcionalidades do script"
        
        # -h -> não exige argumento
        opts, args = getopt.gnu_getopt(argv, "h")
        
        # garante que o arquivo de entrada é informado
        if len(args)==0: 
            print "Informe pelo menos um arquivo de entrada."
            sys.exit(0)
        
        # interpretando os parâmetros passados
        for opt, value in opts:
            if opt=="-h": help()
        
        for filename in args:
            
            if not path.isfile(filename): 
                print "'%s' não é um arquivo. Ignorado." % filename
                continue
            
            # um arquivo zipado não precisa ser zipado novamente
            if filename.endswith('.zip' ): 
                print "Nada a fazer com '%s'. Ignorado." % filename
                continue
        
            target = path.splitext(filename)[0]+".zip"
    
            # criando o arquivo zip
            fzip = zipfile.ZipFile(target, 'w', zipfile.ZIP_DEFLATED)
            fzip.write(filename)
            fzip.close()
            print "'%s' criado." % target
    
    if __name__=="__main__":
        # o primeiro argumento de argv e o nome do script sendo 
        # executado. Informação da qual não precisamos
        main(sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Aug 17, 2009 at 1:25 p.m. EDT
  • Exemplo com gtkbuilder
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    # por: italo mc maia
    # data: indefinido
    # http://italomaia.com/
    # http://eusouolobomau.blogspot.com/
    
    
    import gtk
    
    gtk.require('2.0')
    
    class Example(object):
        GLADE_FILE = "caminho/gui.glade"
        def __init__(self):
            # construindo nosso builder
            builder = gtk.Builder()
            # carregando o .glade no builder
            builder.add_from_file(self.__class__.GLADE_FILE)
            # conectando os sinais definidos durante a construção
            # da interface a métodos de mesmo nome no objeto atual
            builder.connect_signals(self)
            # carregando o widget criado no glade3 pelo nome
            self.window = self.buider.get_object("main_window")
        
        def on_window_destroy(self):
            # finaliza o loop do gtk
            # deve haver um signal de nome 'on_window_destroy'
            # definido na interface
            gtk.main_quit()
        
        def show(self):
            # mostra a janela
            self.window.show()
    
    if __name__=="__main__":
        e = Example()
        e.show()
        gtk.main()
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Aug 12, 2009 at 11:56 a.m. EDT
  • estendendo o chooserdialog do gtk com python
    import gtk
    gtk.require('2.0')
    
    class ZipFileChooserDialog(gtk.FileChooserDialog):
        "Utilizado para escolher um arquivo zip do computador"
        def __init__(self):
            super(SeqFileChooserDialog, self).__init__()
            # inicializando botoes e texto da janela
            self.set_title("Carregar arquivo...")
            self.set_action(gtk.FILE_CHOOSER_ACTION_OPEN)
            self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
            self.add_button(gtk.STOCK_OPEN, gtk.RESPONSE_OK)
                    
            # filtro padrao
            file_filter = gtk.FileFilter()
            file_filter.set_name("Somente arquivos zip")
            file_filter.add_pattern("*.zip")
            self.add_filter(file_filter)
            
            # filtro generico
            file_filter = gtk.FileFilter()
            file_filter.set_name("Todos os arquivos")
            file_filter.add_pattern("*")
            self.add_filter(file_filter)
            
        def get_response(self):
            """Retorna None caso a ação seja cancelada.
            Retorna o arquivo fasta selecionado, caso contrário."""
            response = self.run()
            if response == gtk.RESPONSE_OK:
                return self.get_filename()
            elif response == gtk.RESPONSE_CANCEL:
                return None
    
    if __name__=="__main__":
        chooser = ZipFileChooserDialog()
        r = chooser.get_response()
        print "resposta:", r
        chooser.destroy()
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Aug 11, 2009 at 10:40 p.m. EDT
Sign up to create your own snipts, or login.