Pages

Sunday, May 31, 2009

O domínio desse blog

Problema resolvido... agora, outra mensagem dessa apenas em 2010.

Senhores, acabo de consultar o painel de controle da LocalWeb e eles ainda não contabilizaram o meu pagamento anual pelo domínio...

Não é algo completamente inexplicável, porque eu fiz o pagamento no dia 27 último por boleto bancário. A questão é que o prazo vence no dia primeiro (amanhã). Assim, se por qualquer motivo não houver acesso correto a esse blog, já sabem... o blog não morreu, está apenas descansando.

Problema resolvido... agora, outra mensagem dessa apenas em 2010.

Saturday, May 30, 2009

Filtrando o log do LaTeX

Quem está acompanhando, sabe que estou envolvido em simplificar minha vida para usar o vim como plataforma de desenvolvimento (parte 1 e parte 2).

Mais uma etapa do que diz respeito ao uso do LaTeX com o vim foi vencida com o script latexfilter.

Trata-se de um script MUITO simples que filtra os erros, alertas e informações de overfull e underfull box. É claro que o processo formata a saída de uma forma mais ou menos elegante.

Veja um exemplo, usando nomes fictícios:
./book.tex
Package pdftex.def Warning: Option `bb' does not make sense,
LaTeX Warning: Float too large for page by 120.685pt on input line 116.
Underfull \hbox (badness 10000) in paragraph at lines 142--145
./introducao.tex
Underfull \hbox (badness 10000) in paragraph at lines 211--213
Overfull \hbox (4.15698pt too wide) in paragraph at lines 214--227
./modelagem.tex
LaTeX Font Warning: Font shape `T1/aett/bx/n' undefined
LaTeX Warning: Reference `fig:experimentob' on page 2 undefined on input line 1
LaTeX Warning: Reference `fig:experimentob' on page 2 undefined on input line 1
! LaTeX Error: File `figuras/experimental/esquema_semnomesDDD' not
Underfull \hbox (badness 10000) in paragraph at lines 701--707
Overfull \hbox (21.79932pt too wide) in paragraph at lines 772--772
Esse exemplo, mostra o nome do arquivo, seguido das mensagens associadas a aquele arquivo, o nome do arquivo seguinte e suas mensagens, etc e etc. Observe que em alguns casos, uma certa mensagem está acompanhada da informação da linha (lines) no final da linha. Essa informação corresponde a linha dentro do arquivo cuja a relação de problema é feita.

Fica tudo muito simples. Ficará mais simples ainda quando eu mandar o vim aplicar o filtro e abrir o arquivo, reconhecendo palavras chaves e identificando-as com cores, com uma única tecla de atalho...

Makefile para LaTeX

Acabo de concluir um Makefile para LaTeX.

Ele identifica a existência ou não de bibliografia, índices, glossários e nomenclaturas e qual é o nome do arquivo principal da estrutura do documento. Também agiliza as coisas para quem usa o prosper (para fazer apresentações com o LaTeX). Pois, nesse caso, apenas o PDF interessa. Note que essa questão existe unicamente para meu próprio conforto.

Não se pode ter dois documentos principais (ou seja, com o \begin{document}) com a extensão .tex no mesmo diretório (bom, até pode, mas o resultado é imprevisível). Se a extensão desse segundo for .tex.old não tem problema algum. E se o \begin{document} estiver comentado, o Makefile o ingnora.

Esse Makefile não trata arquivos .ps. Eu não gosto desses arquivos e por isso ele não é tratado, embora, em alguns casos, ele seja criado como um arquivo intermediário.

Esse script suporta o comando latex e o comando pdflatex. O primeiro gera um .dvi, que nesse script deve ser convertido para .ps e depois para .pdf (existem outras formas, mas não estão implementadas). O segundo gera um pdf diretamente.

Alguns do programas internos podem ser configurados (com o valor da variável TEX, que pode ser latex ou pdflatex ou o nome dos visualizadores de arquivo). Além de opções internas de cada comando. Nota-se que alguns comandos não podem ser modificados facilmente. Isso foi feito para ser assim mesmo. O caso mais "polêmico" é que a única forma de converter o .ps para o .pdf implementada é com o ps2pdf.

Para ajuda, digite "make help" no terminal dentro do lugar onde está o Makefile (com esse nome) ou "make -f ArquivoMakefile help" caso tenha modificado o nome do arquivo.

Esse arquivo Makefile faz parte do esforço para transformar o vim em uma suíte completa para o LaTeX. Esforço esse quase concluído (eu ainda não divulguei outras melhorias já existentes), falta apenas melhorar a análise de "warnings" e "errors" do arquivo .log criado. A leitura direta do .log retarda muito a identificação dos erros. Portanto eu irei destacar as palavras chaves de alerta e erro para encontrar rapidamente a informação que interessa no log.

Thursday, May 28, 2009

Configurando o vim

Recentemente eu resolvi configurar definitivamente o meu .vimrc.

Isso é mais trabalhoso do que parece.

Antes de mais nada, qual é o meu perfil ou o que eu preciso do vim (ou de um editor)?
  • Eu escrevo, e muito, em LaTeX, quase tudo que escrevo é em LaTeX ou texto puro.
  • Eu programo em FORTRAN. E nem me diga que isso é coisa do passado (ainda que de fato seja).
  • Pretendo programar em C/C++. Ainda em que processo (lento) de estudo, um dia eu chego lá.
  • Eu uso muito shellscript (quase sempre em uma função muito pessoal para ser publicada).
  • Irei programar em Python (pena que não estou com tempo para estudá-lo).
  • Quero um corretor ortográfico (português e inglês).
  • Necessário um recurso de auto-completar códigos (especialmente para o LaTeX).
  • Gerenciamento de projetos, o que significa gerenciar tags e arquivos.
  • Programação para web básica, voltado ao mínimo necessário para escrever no blogger (as vezes eu escrevo antes no meu computador)
Definidos os meus objetivos, o como resolver isso é que era o problema. Contar a história na ordem cronológica dos eventos seria muito complicado. Então, vamos aos resultados.

Status atual do meu vim em relação aos meus objetivos :

Para LaTeX está quase completamente pronto (aprende-se coisas novas todos os dias, o que ontem era pronto, hoje ainda tem coisas para fazer). O FORTRAN está em versão minimalista. Para C/C++ eu ainda não fiz muito (algumas medidas para o LaTeX aplicam-se aqui diretamente). Quanto ao shellscript, não pesquisei nada além do mínimo.
Para o Python existem muitas dicas, ainda não tive tempo e/ou paciência para ler tudo, mas é impossível deixar de ler tópicos sobre o assunto.
O corretor ortográfico básico está implementado, mas ainda não é a melhor solução. O recurso de autocompletar foi aplicado para o LaTeX, é uma mistura de dicionário com o snipMate e de dicionário propriamente dito. O gerenciamento de projetos foi estabelecido com uma unificação da taglist (plugin que integra o ctags ao vim) e NERDTree (plugin que gerencia arquivos em disco). A programação para web eu já fiz alguma coisa, mas, no momento, não é nada que valha apena divulgar (além do meu .vimrc).

Em uma versão mais completa, segue minha lista de plugins atual.
  1. txt.vim - Estilo para escrever arquivos de texto
  2. fortran.vim - Melhorias para a sintaxe em FORTRAN
  3. taglist - Integra o ctags ao vim
  4. NERDTree - Gerenciador de arquivos via vim
  5. snipMate - Completa trechos pré-configurados (não sei como consegui sobreviver até hoje sem usar um plugin do tipo, e olha que eu conhecia o similar dele para o gedit)
  6. PotWiki - Wiki para gerenciar tarefas e pequenos textos
  7. Calendar - Calendário integrado ao vim.
Como eu mostrei acima, meus objetivos ainda não foram completamente alcançados. O motivo pelo qual eu estou escrevendo agora, é para não deixar o tópico seguinte ser muito longo.

Mas a configuração do LaTeX está bem desenvolvida. Então, vamos lá.

Primeiro instale os plugins, especialmente o taglist, o NERDTree e o snipMate.

Agora pegue meu arquivo "tex.snippets" e substitua o original (cuidado com os tabs, você não pode perder as tabulações no processo de cópia), ainda que você não tenha o meu estilo de escrever em LaTeX, certamente você não escreve como o snipMate acha que você escreve. Aliás, os snippets existentes valem mais como exemplos do que como função prática, parece até que é intencional.

Leia esse texto sobre como integrar o LaTeX com o taglist.
Basicamente consiste em criar (ou editar) um arquivo ~/.ctags e adicionar o conteúdo:
  --langdef=tex
--langmap=tex:.tex
--regex-tex=/\\subsubsection[ \t]*\*?\{[ \t]*([^}]*)\}/- \1/s,subsubsection/
--regex-tex=/\\subsection[ \t]*\*?\{[ \t]*([^}]*)\}/+\1/s,subsection/
--regex-tex=/\\section[ \t]*\*?\{[ \t]*([^}]*)\}/\1/s,section/
--regex-tex=/\\chapter[ \t]*\*?\{[ \t]*([^}]*)\}/\1/c,chapter/
--regex-tex=/\\label[ \t]*\*?\{[ \t]*([^}]*)\}/\1/l,label/
--regex-tex=/\\ref[ \t]*\*?\{[ \t]*([^}]*)\}/\1/r,ref/
Essas linhas são as definições de tags. As quatro primeiras são a estrutura de capítulos a "subsubseções". as duas últimas referem-se sobre labels e referências.

Agora instale meu .vimrc, ou melhor, instale o que te interessa, porque o meu vimrc não vai funcionar assim, a frio, na sua máquina. Quando a configuração estiver completa eu disponibilizarei o diretório .vim também (com todos os scripts adicionais).

Ele está muito bem dividido e comentado, quem quiser apenas a parte LaTeX não terá qualquer dificuldade em fazê-lo, mas observe que o meu resultado está vinculado a configuração do taglist e do NERDTree, assim como configurações escolhidas para mapeamentos e abreviações. Portanto, ler a coisa de uma forma geral pode ser muito interessante.

Aqui eu quero destacar uma certa solução. A de complementação de palavras.
Será visto no .vimrc:
  au BufNewFile,BufRead *.tex set dictionary=~/.vim/dict/latex.dic
O dicionário não está acumulativo, ou seja, que abre o arquivo tex não terá acesso a dicionários gerais, assim foi feito intencionalmente para
evitar sobreposição desenecessária de dicionários. Caso também queira outro dicionário (de palavras, por exemplo) adicione
  au BufNewFile,BufRead *.tex set dictionary+=/CAMINHO/SEU/DICIONARIO.dic
após a linha mostrada anteriormente, isso fará com que o dicionário latex.dic seja o primeiro listado e em seguida o seu dicionário.

Nesse dicionário latex.dic está o pulo do gato. Ali eu escrevi as palavras chaves do snippets (portanto, eu não preciso publicar isso). Porque eu tenho muitos snippets e no futuro terei ainda mais (com pedaços de esquações, por exemplo) e eu não memorizarei tudo assim, como se eu fosse um HD.

A configuração do dicionário está relacionada as teclas <F7>, <F8> e <C-D>

A outra linha de configuração eu devo agradecer ao Kile. Eu peguei os dicionários do Kile e coloquei usei...

Como havia alguns probleminhas, eu editei o conteúdo dos dicionários para que eles apareçam corretamente com as teclas de mapeamento.

Assim, todo espaço foi eliminado, o traço e a vírgula, viraram ponto. No primeiro momento parece que é um erro grave, mas o espaço e o traço não são comandos/opções LaTeX. A vírgula, por outro lado, é um opção LaTeX. Mas fica muito fácil saber onde tem vírgula e onde não tem, porque, vírgula surge apenas em dois lugares, nas opções e em coordenadas. As coordenadas são fáceis de identificar, porque estão entre (X,Y), por exemplo. As opções não. Porém, a questão é que não há a menor chance de uma pessoa se confundir aqui porque ou isso aparece em opções que você sabe usar (logo não há problemas) ou aparece em opções que você não sabe usar, logo, terá de consultar o manual e não terá qualquer problemas então. O objetivo é oferecer dicas, não ensinar LaTeX.
  au BufNewFile,BufRead *.tex set dictionary+=~/.vim/dict/tex/*.cwl
\ iskeyword+=\\,.,{,},[,],*,=,/,(,),>,<
O diretório "tex" do caminho acima, você pode pegar aqui. Dentro dele verá um diretório chamado "notinuse", são onde estão os comandos de pacotes que eu não uso (ou não estou interessado em ajuda). Para se ter uma idéia, no Kile padrão, apenas o latex-document.cwl e o tex.cwl são usados (e eu estou usando muito mais que isso). Os demais são desabilitados (recomendaria habilitar, no mínimo, o latex-mathsymbols.cwl, mas esse é um pensamento matemático). Dá para notar que quanto mais verbetes no dicionário, mais lento fica. Então, o ideal é criar o templates para o snipMate assim que perceber que algum comando está sendo mais usado do que imaginado inicialmente e com o tempo descobrir quais os pacotes você não quer habilitado nesse recurso.

Ainda não é a perfeição, mas agora o que o LaTeX está funcionando a pleno vapor, eu preciso trabalhar... então, eu devo ser mais lento nas implementações das minhas configurações para o vim.

Referências:
  • vimbook - tirei muitas dicas dali, mais do que isso, aprendi coisas para adaptar e escrever outras. Aliás, essa foi a força motriz para a iniciativa dessa configuração.
  • aurelio.net - referência clássica, mesmo que eu não tivesse visitado a página do camarada (e eu visitei), eu teria absorvido através de terceiros.
  • vivaotux - muitas dicas sobre vim (plugins e outras coisas).
  • Vim (Página oficial) - a documentação existente nesse site é fantástica.
Alguns arquivos vimrc:
A base inicial do meu trabalho foi o vimrc-ivan.txt completado pelos do voyeg3r (tanto o antigo quanto o novo), ou seja, eu juntei os três, tirei tudo que era duplicado ou que eu não queria e fiquei com o meu básico. Dos demais eu usei uma ou outra coisa apenas (o do aurélio é, como eu disse, pego pela onda das referências).

Por falar nisso, alguém conhece os scripts .vim que estão referênciados no arquivo vimrc do Ivan ? Porque parecem ser scripts fantásticos, mas não achei nenhum deles na net. Eu não sei se nunca foi publicado, por serem pessoais demais, ou se saiu do ar depois que a url que referência a página do Ivan deixou de ser correta... Se alguém tiver essa dica, comente, por favor...

Sunday, May 17, 2009

Como colaborar com o livro "Introdução ao GNU/Linux"

Para ajudar no desenvolvimento do livro, una-se a lista de discussão:

http://groups.google.com/group/introducaoaognulinux

Com isso você será adicionado como usuário do projeto do livro o que permitirá que faça as alterações via svn.

Você pode fazer as modificações e enviar para um dos autores (preferencialmente ao primeiro autor, que sou eu).

Uma forma simplesmente de colaborar é tendo idéias novas e boas para acrescentar. Deixe as idéias nos comentário na lista de coisas para fazer no wiki do projeto ou via e-mail para os autores.

Você também contará com o meu muito obrigado ao divulgar o material.

E por falar na lista de coisas para fazer, não custa lembrar que o livro é aberto, e que está em edição permanente (daqui por diante, em uma velocidade menor do que até aqui). Arquivos PDFs devem ser liberados com freqüência irregular, mas de tempos em tempos teremos uma nova versão estável do documento.

Quando digo estável, quero dizer que é uma versão acabada, onde uma certa idéia foi implementada como um todo no documento. Por exemplo, a versão 1.1 foi liberada hoje. Ela possui melhorias para quem utilizará o documento apenas em formato digital (inclusão do links clicáveis no documento) e algumas correções no português (na verdade, inglês. É "drivers" e não "drives"). Essa versão também inclui pequenas adições ao FAQ.

A primeira versão teve quase 1000 downloads. Espero que a versão 1.1 tenha tantos downloads quanto a 1.0 (afinal, "drives" é de matar).

Monday, May 11, 2009

Introdução ao GNU/Linux

Em abril desse ano, eu apresentei o curso de extensão `Introdução ao GNU/Linux'' no Programa de Engenharia Química (COPPE/UFRJ).

Com o objetivo de prover uma referência por escrito e atualizada sobre o GNU/Linux, eu comecei a escrever um documento que ganhei volume e corpo de um livro. Livro esse que eu tenho o prazer de anunciar como um projeto livre.

O livro Introdução ao GNU/Linux está disponível para download em PDF, e código fonte

Ele foi escrito para um público que nunca teve contato com o sistema operacional GNU/Linux, mas não para quem nunca teve contato com computadores.

Sobre o Livro "Introdução ao GNU/Linux"

O GNU/Linux é um sistema operacional, que por definição é um programa responsável por conectar o usuário ao hardware, capaz de unificar o núcleo criado por Linus Torvalds em 1991 e diversas ferramentas criadas por terceiros.

Esse livro introduz ao leitor detalhes sobre (i) a arquitetura do GNU/Linux, partindo de um breve histórico até sua estrutura atual, (ii) os principais softwares para uso em computadores pessoais, como gerenciadores de arquivos, editores de texto, navegadores de internet, entre outros, (iii) os principais utilitários para uso de terminal, como man, ls, rm, cat, ssh, scp, entre outros e (iv) completando com um guia de sobrevivência na administração de um sistema GNU/Linux, apresentando os utilitários de configuração de rede, impressora, instalação de programas, além de outros pontos associados a utilização do GNU/Linux em computadores pessoais.

Sobre a licença do livro

O uso deste documento é regido pela licença GNU Free Documentation License, Versão 1.3 ou qualquer outra publicada posteriormente, da Free Software Foundation. Uma cópia dessa licença pode ser lida no anexo D do livro ou na página http://www.gnu.org/copyleft/fdl.html.

Infelizmente o Google Codes não permite que seja selecionado a licença GNU Free Documentation License, Version 1.3 ou superior como licença padrão do projeto, por isso, na barra ao lateral do site do projeto está escrito "GNU General Public License v3" e isso não é verdade. Por serem licenças complementares e compatíveis, eu não me preocupei. Caso alguém saiba de algo que eu não saiba, favor, informar.

A GNU Free Documentation License permite que você copie, modifique e/ou redistribua o documento inteiro ou parte do documento sobre os seus termos e respeitando as seções invariantes (no caso desse documento, são apenas as licenças em si).

A única exigência da GNU FDL é que os autores originais devem ser referenciados (não abre-se mão do direito autoral, algo que eu não poderia fazer nunca no Brasil) e de que a parte do conteúdo utilizado em outros trabalhos proveniente desse projeto (uma figura ou capítulo, por exemplo) também deve ser distribuído pela GNU FDL.

Como colaborar com projeto ?


Para ajudar no desenvolvimento do livro, una-se a lista de discussão:http://groups.google.com/group/introducaoaognulinux
Com isso você será adicionado como usuário do projeto do livro o que permitirá que faça as alterações.


[update] Depois de 2 anos sem atividades, eu cancelei a lista. [/update]

Você pode fazer as modificações e enviar para um dos autores (preferencialmente a mim mesmo).

Outra forma simples de colaborar é divulgando o material.

O que ainda resta a ser feito ?

Há uma lista de coisas a fazer e uma lista dos erros esperados.

Também tenho o objetivo de manter o livro atualizado. Idéia simples, fazer não é tão simples.

Novas versão em PDF devem ser lançadas periodicamente, conforme a atualização do documento.

Novas idéias são bem vindas.