Arquivos Mensais: junho 2009

Imbutindo Common Lisp (ECL) em C

Hoje comecei a brincar com ECL (Embeddable Common Lisp). Como o nome diz, é possível embarcá-lo [1] em um programa escrito em C. Na verdade, ele é mais que isso; é possível também rodar o comando ecl para ter um interpretador de Common Lisp ou usá-lo como um compilador de Common Lisp para C/binário.

Esses dois últimos usos são relativamente simples e estão bem documentados. Meu interesse mesmo era como embarcar em um programa escrito em C e acessar funções definidas em C a partir do programa em Lisp e vice versa. Infelizmente, essa parte consta com um “TBD” no manual, que eu imagino que signifique To Be Done, a ser feito. Mesmo assim, consegui achar algumas informações na mailing list e em outros sites e fazer um programa básico.

Saiba mais

Publicidade

Ebooks sobre Matemática, Programação, Engenharias, Arte, etc

Esse site contém vários ebooks (em inglês) sobre os mais variados assuntos, desde Álgebra Elementar a conteúdos avançados de Cálculo, como links para os livros do Tim O’Rilley sobre informática/programação e outros tópicos mais avançados como Programação Genética. São todos livros disponíveis legalmente.

O link a baixo é para os livros de Matemática, mas procurando pelo site é fácil encontrar outras categorias.
E-books Directory

Configuração do Emacs (~/.emacs)

Esse é meu ~/.emacs. Estou colocando online para ter mais um backup dele, mas quem quiser usar fique a vontade. Talvez seja necessário instalar alguns pacotes adicionais para que todas as funcionalidades dele estejam presentes.

Fonte bacana para programação

Nas minhas andanças pela internet, encontrei uma fonte (TTF) chamada Envy Code R. Achei-a bem bacana, quem quiser baixar, tem um link no site, logo antes dos comentários.

Awesome: desisto

Ontem o X estava instável, do nada ele fechava e eu tinha de reiniciá-lo. Já estava até preocupado que fosse algo relacionado a hardware. Por fim, pesquisando no fórum do Arch Linux, vi que outros usuários tiveram um problema parecido, e, em pelo menos alguns dos casos, a culpa era do window manager.

Comecei a prestar mais atenção e… de fato, o X fechava logo depois de uma nova janela ser aberta. Resolvi reiniciar o X com outro window manager e tcharã! A instabilidade se foi.

Estou usando o wmii agora, mas estou com a sensação de estar usando uma solução provisória. Dei uma lida sobre o ratpoison, stumpwm e musca. Não gostei deles, aparentemente não me daria bem com um tiling manual.

Dos tilings dinâmicos, o awesome está segfaulting, o xmonad tem uma dependência enorme, o dwm não é tão customizável quanto eu gostaria e o wmii é estranho.

Gerenciadores non-tiling (ou stacking, como queira) estão fora de cogitação, não me acostumo mais a eles.

Alguma sugestão?

Depois de fuçar mais um pouco, vou ver como me dou com o pekwm. Ele não é tiling e lembra bastante os *box, mas é mais bonito que o fluxbox e é mais fácil de configurar que o openbox (morra XML).

Ubuntu: sem compilador, sem usuários

A princípio este artigo pode parecer pura picuinha com uma distro que eu não gosto, mas eu gostaria que fosse encarado como uma crítica construtiva (com um pouco de sarcasmo, é verdade, mas eu sou assim, fazer o que?)

A história começa quando uma amiga, cansada dos problemas do Windows, resolveu instalar o Ubuntu no notebook dela. Isso se deve em parte por brincadeiras da minha parte [1], por termos outros colegas de fóruns que também usam Linux e por curiosidade dela. Ela queria aprender a mexer no Linux e nada melhor que usando (embora eu tenha dúvidas do quanto o Ubuntu é educativo). Vale lembrar que ela ainda mantinha um computador com Windows.

Ela estava gostando, apesar de alguns contratempos. Acontece, porém, que ela resolveu trocar sua banda larga por uma a rádio, que depende de um modem USB. Não existia suporte a esse modem no Ubuntu 8.04, mas com um pouco de pesquisa descobri que existia um módulo, “é só baixar e compilar”, pensei.

Decepcionado, acabei desistindo de ajudá-la. Como ela não conhece muitos outros usuários (dispostos a ajudar), ela também desistiu e voltou ao Windows. Três semanas depois, ela está com vírus: uma colega da faculdade plugou um pendrive infectado no computador.

Independente de existirem soluções para o problema [2], acho que isso deixa claro o quanto o Linux é dependente de um compilador para C. Não vejo isso como um problema, é apenas uma característica do SO, mas se torna um problema quando essa necessidade é desrespeitada. Acho estranho que o Ubuntu venha com Python por padrão, mas não com o GCC. [3]

[1] Quando ela reclamava do Windows, eu costumava responder ‘www.ubuntu.com’. Não sei como é a situação com as outras distribuições, talvez com OpenSuse, Fedora ou Mandriva, ela não teria esse problema.
[2] Procurei um .deb do driver pré-compilado, mas não funcionou.
[3] Nada contra o Python, é uma das minhas três linguagens favoritas.

Da série “coisas que não entendo”: ABNT e ISO

Alguém pode me explicar qual é a lógica de se cobrar por normas técnicas? “Eu acabei de fazer uma norma para segurança de instalações elétricas. Como eu quero que todo mundo siga, vou cobrar por ela”. Claro! Faz todo sentido!

Primeiro eu pensei que eles cobrassem pelo material/impressão, o que acho justo, mas os PDFs são pagos também (pelo menos são PDFs e não .docs). Qual é o sentido de padrões serem propriedade intelectual de alguém? “Mwahahaha! Vejam como eu sou mal! Eu copiei os padrões de parafusos da ABNT, mwahahaha!”?

Awesome: adivinhe!

Fui atualizar o Awesome de um pre-release da versão 3.3 para a versão final e adivinhe? Sim! O arquivo de configuração não funciona mais. Agora eles resolveram mudar a sintaxe do arquivo de configuração de temas: agora ele é em Lua.

Foi só pegar o tema em /usr/share/awesome/themes/default/theme.lua, copiar para ~/.config/awesome e mudar o arquivo rc.lua para usar esse tema agora. O estrago foi pequeno, mas toda versão nova é isso… Ainda estou em busca de um tiling window manager decente.

Emacs vs. Vim

Antes de começar o artigo em si, eu estive pensando e… o que há de errado conosco? Digo, são só dois editores. Por que damos tanta importância a eles a ponto de avisarmos a nossos colegas que estamos trocando de editor, e pior! Ainda defendemos o porquê de fazermos a troca!

As motivações

Tudo começou com um comentário aleatório no fórum do Arch Linux. Um participante disse que usava tanto o Vim quanto o Emacs, mas que usava o Emacs no modo viper. Esse modo permite a utilização das keybindings do Vim no Emacs, eu já o conhecia de nome, mas nunca fui atrás de como usá-lo. [1] O usuário em questão disse que o viper não é completamente compatível com o Vim, mas que no geral já ajudava. Como não sou nenhum mago do Vim, sei apenas alguns comandos básicos, pensei que mesmo os poucos comandos compatíveis já seriam o suficiente.

Então o Liquuid fez um artigo mais ou menos no mesmo molde deste que escrevo, e estava lá, pronto para ser consumido, como usar o modo viper: um simples M-x viper [2]. Fique surpreso ao ver que não existe um modo viper, mas sim cinco, variando desde o nível 1 – mais próximo do Vi – até o nível 5 – um filho bastardo entre Emacs e Vi.

Para ajudar, mais tarde, procurando por “Emacs for vim users”, me deparei com um par de artigos escritos pelo Stefano Zacchiroli [3,4]. Quem é esse cara? O mantedor do pacote Vim do Debian [5]. Acreditem ou não, ele é um usuário (feliz) do Emacs. Juntando tudo isso e mais alguns outros artigos do tipo “porque resolvi largar o Vim”, vi que não custava nada dar uma experimentada no Emacs.

Saiba mais

Awesome: barra de título, mas só quando floating

Pediram em um tópico do fórum do Arch Linux como fazer a barra de título aparecer em janelas que estivessem “flutuando” no awesome. A idéia é boa e permite que tenhamos o melhor dos dois mundos: de um lado, o tiling continua funcionando normalmente; do outro, nós temos controle sobre programas que estejam “flutuando” de forma bastante similar ao que teríamos em gerenciadores de janela comuns, tais como o Openbox, o do GNOME e o do KDE.

A implementação disso é bastante simples, basta adicionar ao fim de seu rc.lua:

awful.hooks.property.register(function (c, prop)
  -- Remove the titlebar if fullscreen
  if c.fullscreen then
     awful.titlebar.remove(c)
  elseif not c.fullscreen then
    -- Add title bar for floating apps
    if c.titlebar == nil and awful.client.floating.get(c) then
       awful.titlebar.add(c, { modkey = modkey })
    -- Remove title bar, if it's not floating
    elseif c.titlebar and not awful.client.floating.get(c) then
       awful.titlebar.remove(c)
    end
  end
end)