posfixa.py usando PLY

2009 Abril 23
by eljunior

#!/usr/bin/python
# posfixa.py using PLY - http://www.dabeaz.com/ply
# Elias Junior <eliasdorneles (a) gmail com

tokens = ('NUMBER', 'OPERATOR')
PILHA = []

def calc_pos(b, a, op):
    if   op == '+': return a + b
    elif op == '-': return a - b
    elif op == '*': return a * b
    elif op == '/': return a / b
    elif op == '%': return a % b
    else: return 0

def t_NUMBER(t):
    r'\d+(\.\d+)?'
    PILHA.append(float(t.value))

def t_OPERATOR(t):
    r'[+-/*%]'
    try:
        PILHA.append(calc_pos(PILHA.pop(), PILHA.pop(), t.value))
    except IndexError:
        print 'Faltando operandos!'

t_ignore = ' \t'
def t_error(t):
    print "Caractere invalido: '%s'" % t.value[0]
    t.lexer.skip(1)

from ply import lex
lexer = lex.lex()
if __name__ == '__main__':
    for e in ['24 10 % 3 +', '12 23 + 4 5 * +']:
        lexer.input(e)
        lexer.token()
        print PILHA.pop()

BTW, non tá morto quem peleia… nem quem tá sem computador! :)

GNU readline: casos de uso para outros preguiçosos

2009 Janeiro 26
by eljunior

tó aí umas idéia de ataio do emacs pros vimmers véio usarem no bash:

<C-a> e <M-d> para editar a primeira string do último item do histórico:

$ pgrep meuprocesso
12345
$ <C-p><C-a><C-f><M-d>kill<C-j>
$

<C-p> pra acionar o último item do histórico, <C-a> pra levar o cursor ao início da linha, <C-f> para avançar o primeiro caracter (p em pgrep), <M-d> pra apagar o resto da palavra, “kill” pra completar o comando “pkill” e finalmente <C-j> pra executar (pode ser o véio ENTER, tomém, ma tamo inovando).

sim, o <C-f> está só por abobrice, digitar pkill é mais fácil que <C-f> e depois digitar “kill”. ma foi só pa enchê lingüiça mermo. :)

pgrep/pkill é só uma idéia, tem outras sequências como wget/mplayer pros caras multimídia, bzip2/tar pra quem non gosta da opção j do tar, e sei lá, fugiu as idéia agora. :D

<C-r> pra buscar pra trás:

$ wget -bc http://example.com/quarque_abobra.avi
# .... varios comandos depois
$ <C-r>abobra<C-a><A-d>mplayer<C-j>
$

se emocionô? man readline pra mais!

ah, usuários de gnome-terminal não podem esquecê de desativá as técra de acesso ao menu, como já expricado antes aqui neste post comprido.

bai, que post mai cheio de <>’s… sorte que o ubiquity tem a escape-html-entities! :)

ah, sim, o ubiquity… eu poderia falá sobre ele, ma vo deixá pra quem conhece o bicho meior que eu. ma isprimenta ae! vá que seja iluminado… :D

botemo!

mudando de abas no vim

2009 Janeiro 22
tags: ,
by eljunior

há um tempinho já, uso uns mapeamentos pra trocar de abas no Vim do mermo jeito que se faz no Fáirefóque:


map <A-1> 1gt
map <A-2> 2gt
map <A-3> 3gt
map <A-4> 4gt
map <A-5> 5gt
map <A-6> 6gt
map <A-7> 7gt
map <A-8> 8gt
map <A-9> 9gt
imap <A-1> <ESC>1gta
imap <A-2> <ESC>2gta
imap <A-3> <ESC>3gta
imap <A-4> <ESC>4gta
imap <A-5> <ESC>5gta
imap <A-6> <ESC>6gta
imap <A-7> <ESC>7gta
imap <A-8> <ESC>8gta
imap <A-9> <ESC>9gta

não funfa no vim dentro do gnome-terminal porque este usa os mesmos atalhos para as abas dele. funfa no Gvim, e no vim em xterm e console, though.

apita_daqui_a_pouco.sh

2009 Janeiro 6
tags:
by eljunior

#! /bin/bash
# um dia a gente cria vergonha na cara e cria algo util...

t=${1:-1}
sleep $(($t * 60));

# skrik!
while :; do
    echo -n $'\a'
    sleep 0.1
done