abr 252011
 

Deparei-me aqui com um problema aparentemente simples, mas que me deu trabalho pra resolver. Estava precisando imprimir um documento muito grande no BrOffice Writer, em uma máquina com a Debian Squeeze. Para economizar papel, resolvi imprimir duas páginas do documento por cada face da folha.

Acostumado a fazer isso sempre com documentos PDF, achei que seria o mesmo caminho no Writer. Mas foi aí que me dei conta que a janela de impressão do BrOffice é diferente das outras aplicações do sistema (mesmo quando estão instalados os pacotes de integração com o KDE e com o GNOME) e ela não tinha a opção de múltiplas páginas por face.

Depois de alguma pesquisa, descobri que tem jeito de fazer isso e nem é muito complicado, mas não é nada intuitivo.

Para ativar essa opção, vá até o menu Arquivo e selecione a opção Visualizar página (ou clique no ícone correspondente, que fica na barra de ferramentas). A tela mudará para o modo de visualização de páginas, bem como os ícones da segunda fileira, que se tornam as ferramentas de manipulação da visualização. Clique agora no segundo ícone da direita para a esquerda (é o ícone ao lado do escrito Fechar visualização). Verifique na imagem abaixo. É o ícone marcado com um quadrado vermelho.

Barra de ferramentas do BrOffice, indicando qual é o ícone correto

Para se certificar que é o botão correto (pois ele pode estar diferente, dependendo do tema utilizado), pare o cursor do mouse sobre ele e veja se aparece a explicação Opções de impressão da exibição de páginas. Clique nesse ícone e, na janela que se abre, selecione em quantas linhas e quantas quantas colunas o texto deverá ser distribuído. O resultado de como será a impressão é exibido do lado direito da janela. Dependendo de efeito esperado, será necessário deixar a página como "retrato" ou "paisagem", o que pode ser alterado nessa mesma janela, na sua parte inferior. É importante destacar que todas essas configurações referem-se somente à visualização (e, consequentemente, à impressão) do texto. Ou seja, o seu documento irá preservar as configurações originais de orientação e layout definidas previamente, independente do que você configurar aqui.

Feitas as definições desejadas, é hora de mandar imprimir. E aqui tem uma pegadinha. Você não pode usar a opção Imprimir que fica no menu Arquivo, nem o atalho Ctrl+t, pois dessa forma você irá imprimir o texto original. Para usar as configurações definidas aqui, é nessário usar o botão que fica ao lado do que você clicou anteriormente. Ele está indicado na imagem abaixo, também marcado em vermelho, e a dica que aparece quando se coloca o cursor sobre ele é Imprimir exibição de página.

Barra de ferramentas do BrOffice, indicando qual é o ícone correto

Ao clicar nesse botão aparecerá uma janela idêntica à janela normal de impressão. Entretanto ela irá imprimir o texto usando as definições de layout de páginas que você efetuou. Configure a impressora com as opções desejadas, clique no botão Ok e pronto. Você estará imprimindo mais de uma página por face do papel.

dez 012010
 

Passei por um problema aqui em que eu precisava criar uma série de usuários que deveriam pertencer a determinados grupos. Isso porque, quando se cria um usuário novo na Debian (não sei se é assim nas outras distros), ele é incluído somente no seu próprio grupo. E isso é um problema, por exemplo, quando se quer ouvir música, pois o usuário, por padrão, não faz parte do grupo audio. Eu poderia fazer essa inclusão nos grupos individualmente (ou usando um script), mas estava considerando essa solução muito pouco funcional. Resolvi dar uma pesquisada e acabei descobrindo um recurso do próprio comando que resolveu o meu problema.

O pulo do gato está em um parâmetro e no arquivo de configurações do comando adduser. O nome do arquivo é adduser.conf e ele está localizado dentro do diretório /etc. Esse arquivo define todas as configurações padrão do adduser e apresenta vários parâmetros interessantes, como o shell padrão e o diretório dentro do qual deverão ser criados os diretórios dos usuários, entre (várias) outras coisas. Mas as configurações que interessam para este artigo está lá no finalzinho do arquivo. São elas EXTRA_GROUPS e ADD_EXTRA_GROUPS. É sempre bom lembrar que, por ser um arquivo do sistema, o adduser.conf só pode ser alterado com privilégios de superusuário, usando a conta root ou o comando sudo.

EXTRA_GROUPS define em quais grupos os usuários serão incluídos. Caso você queira usar os grupos padrão, que estão definidos na linha de configuração do parâmetro, você pode deixá-la exatamente como está. Agora, se você quiser alterar esses grupos, então é necessário descomentar a linha (eliminando o sinal #) e alterar o parâmetro para os grupos de seu interesse.

ADD_EXTRA_GROUPS define o comportamento padrão do comando adduser. Caso você queira que todos os usuários sejam incluídos nos grupos definidos em EXTRA_GROUPS, descomente a linha ADD_EXTRA_GROUPS e certifique-se de que o número ao final dela seja diferente de zero (por exemplo, ela deve ficar ADD_EXTRA_GROUPS=1). Caso você queira que somente alguns usuários entrem nos grupos definidos, deixe essa linha comentada (ou com o valor 0) e, quando for criar o usuário que deve pertencer aos grupos, acrescente o parâmetro –add_extra_groups ao comando adduser.

Exemplificando:

Situação 1: você quer que todos os usuários criados no seu sistema pertençam aos grupos audio, video, plugdev e users. Você deve então editar o arquivo adduser.conf e alterar a linha do parâmetro EXTRA_GROUPS para:

EXTRA_GROUPS="audio video plugdev users"

e a linha do ADD_EXTRA_GROUPS para:

ADD_EXTRA_GROUPS=1

(repare que, em ambas as linhas, não existe mais o sinal # no início delas) e, para criar novos usuários, execute o tradicional:

adduser nome_do_usuario

Todos os usuários criados dessa forma farão parte dos grupos audio, video, plugdev e users.

Situação 2: você quer que alguns os usuários pertençam aos grupos padrão do sistema (aqui na minha instalação eles são: dialout, cdrom, floppy, audio, video, plugdev e users). Nesse caso os parâmetros ficam com a configuração padrão do sistema, ou seja, as linhas permanecem como:

#EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"

e:

#ADD_EXTRA_GROUPS=1

(repare na marca de comentário no início de cada linha). Agora, toda vez que você quiser criar um usuário pertentecente aos grupos padrão, é necessário acrescentar o parâmetro –add_extra_groups ao comando, dessa forma:

adduser nome_do_usuario –add_extra_groups

Assim, somentes esses usuários farão parte desses grupos. Os outros, criados sem o parâmetro, continuarão somente com seus grupos pessoais.

ago 292010
 

Uma das coisas chatas do computador de mão da Palm (o famoso Palm Pilot ou handheld) era que pra poder ler arquivos PDF nele era necessário rodar uma versão especial do Adobe Acrobat para que o arquivo original fosse convertido para um formato reconhecido pelo dispositivo. Esse arquivo ganhava a extensão genérica de documentos do Palm (.pdb) e, aparentemente, não poderia ser "revertida" para o arquivo PDF original. Eu nunca consegui entender muito bem a necessidade dessa conversão, especialmente porque existe uma versão do Xpdf feita exatamente para abrir esse formato de arquivo no Palm (chamada de PDFmob), sem a necessidade de nenhuma conversão. Coisas da Palm e da Adobe

Pois eu me deparei justamente com o problema de ter que recuperar um arquivo PDF que estava encapsulado em um .pdb. Depois de alguma pesquisa, descobri que alguns programas poderiam fazer isso, mas nenhum deles era para GNU/Linux. Então eu encontrei, nesta publicação de fórum, uma forma simples e fácil de fazer o trabalho. Uma vez que o arquivo .pdb é o PDF encapsulado com algumas informações extras, basta abrir o arquivo em um editor hexadecimal e extrair somente a "parte PDF" dele, ignorando todo o resto.

Para fazer isso, você vai precisar de um editor hexadecimal (eu usei, no KDE, o Okteta). Abra o arquivo .pdb nesse editor e procure pela seguinte sequência (em hexadecimal): 25 50 44 46 2D. Essa é a sinalização de início do arquivo, que, traduzida para caracteres, significa "%PDF-" (no Okteta é possível procurar tanto pela sequência hexadecimal quanto pelo seu correspondente em caracteres). Feito isso, localize a sequência de finalização do arquivo: 25 25 45 4F 46 (que, traduzido, é "%%EOF"). Agora marque todo o conteúdo da sequência inicial à final (incluindo ambas), copie-o e cole-o em um novo documento. E, pra fechar, salve-o com a extensão .pdf. Pronto! O seu PDF acaba de ser recuperado.  🙂

Só tem um porém (claro, sempre tem um). Isso só funciona 100% com documentos que sejam somente texto ou tenham imagens pequenas. Isso porque, quando se tem documentos com formatação mais complexa ou imagens grandes, o conversor para Palm diminui a resolução das imagens para caber na tela do aparelho e pode, também, mudar alguns detalhes na diagramação do documento. Mas sempre vale a pena testar e ver se não atende ao que desejamos recuperar, ok?

jul 292009
 

Eu adoro emuladores de videogames. Especialmente o ZSNES, que, como o nome já indica, é um excelente emulador do SNES. Aí, por causa de uma "twitada" do Karlisson (o "pai" do genial Nerdson), bateu uma nostalgia de jogar Yoshi’s Island, um dos jogos mais legais desse console. Mas então eu me lembrei que esse jogo deixou de funcionar na versão mais recente do ZSNES. Resolvi deixar a preguiça de lado e ver se tinha alguma solução pro problema. E claro que tinha… 

Cheguei inicialmente nessa página do fórum do ZSNES, que me indicou essa outra. Juntas elas tinham toda a informação que eu precisava. Resumidamente, o problema é que essa ROM utiliza a tecnologia gráfica Super FX com intercalagem (interleave). E o desenvolvedor do ZSNES retirou o suporte à intercalagem do Super FX na última versão porque esse recurso era mal implementado e estava causando muitos problemas no código. As páginas do fórum, citadas acima, contam essa história com mais detalhes.

A solução do problema, é bem simples: basta remover a intercalagem da ROM. E, para isso, usa-se um software desenvolvido pelos mesmos criadores do ZSNES, chamado NSRT. Essa aplicação permite realizar uma série de alterações de compatibilidade nas ROMS. Uma delas é a "desintercalagem" (se é que essa palavra existe).   E o bom é que existem versões do software para GNU/Linux, DOS (que funciona no Windows), Solaris, FreeBSD e Mac OSX.

Feito o download do NSRT (que vem na forma de um arquivo compactado adequado a cada sistema operacional), basta descompactá-lo em um diretório qualquer e executar o comando:

nsrt -deint nome_da_rom

No meu caso, ficou:

nsrt -deint yoshisisland.zip

Aparecerá uma tela com detalhes da ROM e da execução. E o processo todo é tão rápido que até parece que não aconteceu nada. Feito isso, é só partir para o abraço. O jogo já está pronto para funcionar no ZSNES. A prova está abaixo:

Agora vem a parte difícil. Arrumar tempo para poder me dedicar ao bebê Mário e ao dinossauro Yoshi

fev 062009
 

Você achou que nunca ia passar por isso, mas aconteceu: esqueceu a senha de root do seu servidor de banco de dados MySQL. Após um leve momento de pânico, você se lembra que a Internet pode ter a solução pra isso (afinal, não tem tudo lá?).  😉  Bom, se você está lendo esse artigo então saiba que “seus problemas se acabaram”®.

Eu também passei por isso e descobri uma página em que o sujeito descreve de maneira tão didática que nem tive que pensar pra resolver o problema, foi só seguir a receita de bolo. A página maravilhosa é o artigo Recover MySQL root password (quer um título mais direto do que esse?) do sítio nixCraft. Abaixo segue a tradução (com algumas modificações) do que a página recomenda. Importante, todos os passos descritos devem ser realizados como superusuário (root) ou usando as permissões de superusuário (através do comando sudo). Além disso, os comandos apresentados funcionaram no MySQL versão 5.0.51a-21, na distribuição Debian Lenny. Eles podem funcionar do mesmo jeito em outras distribuições, ou precisar de pequenas alterações.

  1. Pare o servidor MySQL.
    Comando:
    /etc/init.d/mysql stop
    Resultado:
    Stopping MySQL database server: mysqld
  2. Reinicie o servidor MySQL usando o parâmetro –skip-grant-tables. Ao fazer isso, ele não irá pedir a senha de acesso ao servidor.
    Comando:
    mysqld_safe --skip-grant-tables &
    Resultado:
    Starting mysqld daemon with databases from /var/lib/mysql
    mysqld_safe[15118]: started
  3. Conecte-se ao MySQL como superusuário.
    Comando:
    mysql -u root
    Resultado:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 5.0.51a-21 (Debian)
    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

    mysql>

  4. Defina a nova senha de superusuário (digite as linhas abaixo, apertando Enter ao final de cada uma).
    Comandos:
    use mysql;
    update user set password=PASSWORD("nova-senha-de-root") where User='root';
    flush privileges;
    quit
  5. Pare novamente o servidor MySQL.
    Comando:
    /etc/init.d/mysql stop
    Resultado:
    Stopping MySQL database server: mysqldSTOPPING server from pid file /var/run/mysqld/mysqld.pid
    mysqld_safe[15198]: ended
    .
    [1]+  Done                    sudo mysqld_safe --skip-grant-tables
  6. Reinicie mais uma vez o servidor MySQL.
    Comando:
    /etc/init.d/mysql start
    Resultado:
    Starting MySQL database server: mysqld.

Pronto! Seu servidor de banco de dados já está com a nova senha de superusuário ativa. Faça o teste e não se esqueça dela novamente!!!  🙂

dez 242008
 

Uma coisa que eu costumo fazer no GNU/Linux é descompactar vários arquivos de uma vez, em um mesmo diretório. Um exemplo disso são arquivos de temas ou de módulos de determinado programa ou aplicação web. Como eu gosto de usar a linha de comando, eu preciso abrir arquivo por arquivo, pois os comandos de descompactação não aceitam curingas (por exemplo o *) no nome do arquivo. Quando a quantidade de arquivos compactados é muito grande, essa tarefa torna-se bem maçante.

Tentando resolver o meu problema, dei uma batida na Internet e achei essa dica no sítio do Viva o Linux. Fiz uma pequena alteração para que ele funcione em uma única linha de comando (ao invés de um arquivo de script) e apresento abaixo as três versões para os formatos mais populares de compactação. Obviamente, basta alterar o comando do descompactador para que ele funcione com outros formatos não citados aqui. Além disso, com pequenas modificações é possível gerar um script mais elaborado, onde é possível colocar os diretórios onde estão os arquivos e para onde eles devem ir. Entretanto, esse não é o propósito desse artigo. A idéia aqui é uma solução rápida para a descompactação de vários arquivos. É importante destacar que a descompactação será realizada no diretório onde você está executando a linha de comando. Tome cuidado com isso para evitar efeitos indesejáveis. Em caso de dúvidas, crie um diretório de testes e rode o comando lá.

Arquivos compactados como tar.gz

for x in `ls *.tar.gz`;do tar xzvf $x;done

Arquivos compactados como tar.bz

for x in `ls *.tar.bz`;do tar xzvf $x;done

Arquivos compactados como zip

for x in `ls *.zip`;do unzip $x;done

set 182008
 

Depois de uma atualização de várias extensões do meu Firefox, comecei a ter problemas com a minha autenticação no FriendFeed. Eu entrava com o meu usuário e senha e o sítio sempre voltava para a tela inicial, ao invés de me levar para a minha área.

Vasculhando as configurações, descobri que estavam faltando alguns cookies do FriendFeed. Como o erro começou depois da atualização das extensões imaginei que o problema fosse com uma delas. Considerando que eu tenho 17 extensões instaladas, vi que teria um bom trabalho pela frente.    Por isso resolvi começar daquelas que seriam mais óbvias. Dei sorte e descobri na minha segunda tentativa que a culpa era do NoScript, uma extensão que me permite controlar quais scripts serão executados em cada página.

Como essa é uma extensão que eu gosto muito, pois tenho um lado paranóico um tanto quanto acentuado aqui na rede, não queria abrir mão dela só pra poder me autenticar no FriendFeed. Por isso resolvi dar uma batida aqui na Internet pra ver se achava alguma coisa…

…e achei, depois de muita insistência…   Nessa publicação do dia 17 de setembro (ou seja, ontem), o Giuseppe Cunsolo, do blog cunsolo.it, dá a solução do problema. E o melhor de tudo, ela é muito simples…

Segundo o autor, a explicação está no FAQ no NoScript, que, traduzido, é mais ou menos assim:

P: Desde que eu habilitei o Gerenciamento Automático de Cookies Seguros [que no programa está ainda no original inglês Enable Automatic Secure Cookies Management] eu não consigo mais autenticar-me em alguns sítios. O que está acontecendo?
R: Alguns sítios dependem de interrelações de domínios bem complicadas e enquanto eles gerenciam o reconhecimento em certos domínios através de um canal seguro HTTPS, eles precisam propagar a autenticação por vários domínios que não suportam HTTPS. […]

Ainda segundo o Giuseppe, o FAQ descreve a solução de maneira detalhada. Mas como ele é um cara bacana e resumiu a "solução detalhada" em uma linha, resolvi valorizar o trabalho do sujeito e seguir a sua dica aqui. E funcionou lindamente! Basta abrir a janela de opções do NoScript, clicar na aba "Avançado", selecionar a aba interna "HTTPS" e depois a outra aba "Cookies" (céus, três níveis de abas! não é à toa que a primeira se chama "Avançado" ). Acrescente, no espaço abaixo de "Ignore unsafe cookies set over HTTPS by the following sites:", o endereço do FriendFeed (friendfeed.com), clique em OK e pronto! Autenticação reativada.

Ah, e depois de implementar isso, percebi que o Twitter também está com o mesmo problema. E a mesma solução… 😉

Portanto, fica aqui o meu agradecimento ao Giuseppe, ou melhor, já que ele é italiano, grazie Giuseppe

P.S.: Repararam na piada pronto aqui? O nome do blog (e sobrenome do autor) que resolveu a minha aflição é: cunsolo

set 152008
 

Quer melhorar a qualidade das fontes exibidas pelo GNU/Linux? Experimente essa dica publicada no blog Viablog. Após fazer as alterações e reiniciar o servidor X (não precisa reiniciar a máquina, somente o X), as fontes ganham um aspecto mais "nítido" e facilitam um pouco a leitura. Testei em duas máquinas e o resultado foi perceptível (apesar de ter gente que comentou no blog que não fez muita diferença).

A dica original foi para o Ubuntu, mas também funciona no Debian. Acredito que funcione também em qualquer outra distro, basta descobrir onde ficam os arquivos de configuração alterados pelo pacote citado na dica. Ah, e os resultados, segundo o blog, são melhores em monitores LCD do que CRT.

set 042008
 

Essa dica veio do sítio The Gay Bar (não se deixem enganar pelo título, lá tem ótimas dicas de tecnologia). Especificamente desse artigo.

Quem usa muito o console do GNU/Linux já conhece o aplicativo top. Esse pequeno programa mostra, em tempo real, a situação do consumo de CPU, memória e outros recursos do sistema. Eu particularmente prefiro a sua "versão anabolizada", o htop, que mostra as mesmas informações com alguns recursos extras.

Entretanto, algumas vezes a sua máquina pode estar lenta não pelo consumo de CPU ou memória, mas sim de IO, ou seja, as transferências de dados entre as aplicações e o disco (IO vem do inglês input/output). Na prática, esse problema ocorre quando existe uma grande transferência de dados entre um processo e o seu disco rígido. Se ele não for rápido o suficiente para processar a requisição, o sistema dá uma breve "congelada" enquanto ele termina sua tarefa.

Uma forma de verificar isso é através do programa iotop. Ele mostra a lista de processos em execução e como está a taxa de transferência deles para o HD. Junto com o htop, forma uma boa dupla para diagnóstico de "surtos de lentidão" no computador. Em tempo, o iotop faz parta da lista de pacotes de toda grande distribuição GNU/Linux.

dez 172007
 

Os usuários da Debian que, como eu, preferem o aptitude ao invés do apt-get costumam esbarrar em um problema: quando se instala um metapacote, a remoção de qualquer um dos seus componentes acaba removendo também todos os outros pertencentes a esse metapacote. Por exemplo, caso você instale o metapacote KDE, para ter o ambiente KDE completo, e queira remover um programa que não use, por exemplo, o educacional Kiten, ele irá remover TODOS os outros programas do pacote, ou seja, o seu KDE inteiro.

Isso acontece porque os programas pertencentes ao metapacote são marcado como se estivessem sido automaticamente instalados para satisfazer uma dependência. Assim, ao remover um deles, o aptitude entende que, uma vez que os outros pacotes foram instalados como dependências, eles não são mais necessários e os remove também

Uma forma de resolver esse problema é marcar os pacotes como se eles tivessem sido instalados manualmente. Para isso, pode-se usar o parâmetro unmarkauto na linha de comando do aptitude, seguido do nome do pacote. No nosso caso, em que queremos desmarcar o metapacote kde, a sintaxe ficaria da seguinte forma:

aptitude unmarkauto kde

Uma outra forma é entrar no modo interativo do aptitude (digitando o nome do comando sem nenhum parâmetro), marcar o pacote (ou metapacote) e pressionar a tecla m (minúscula). Isso terá o mesmo efeito.