Pages

Tuesday, May 30, 2006

Utilizando hifenização no teTeX

Por algum motivo a hifenização da Dapper não está ativada para o Português (esse é o default de muitos sistemas, mas não era na Breezy).

Para ativar esse recurso, execute o comando sudo texconfig. Escolha então a opção HYPHEN e então latex. Isso vai abrir um arquivo de configuração no seu editor de texto padrão (tipo, vim).

Acrescente ou descomente as seguintes linhas nesse arquivo:
portuges pt8hyph.tex
=brazil
Salve as modificações, saia do editor e do configurador. Pronto, seu teTeX está configurado para hifenizar corretamente palavras em português.

Nota: tem que existir um arquivo pt8hyph.tex no diretório, que no caso do Ubuntu Dapper, é
/usr/share/texmf-tetex/tex/generic/hyphen/, caso este arquivo não exista, localize uma cópia dele na internet (não é difícil achar, aqui tem uma). Em outras distribuições, procure por arquivos *hyph*.tex, certamente encontrará alguma versão de hifenização de alguma língua, a versão em português deve ficar no mesmo diretório.

Caso não tenha familiaridade com editores de terminal, logue-se como root e depois modifique o seu editor padrão digitando:

export EDITOR=/usr/bin/gedit

ou outro editor de sua preferência.

Fonte original da solução (com outras boas dicas!) http://www.ime.usp.br/~feferraz/br/texhif.html

Technorati Tags:

Download das atualizações do Ubuntu em outra máquina

Para fazer o download das atualizações do Ubuntu ou qualquer outro sistema baseado em apt-get em uma outra máquina, mesmo que essa máquina use outro sistema operacional.
O "segredo" é gerar uma lista da url de todos os pacotes com o comando:

apt-get -qq --print-uris dist-upgrade|sed "s/'\(.*\)'.*/\1/" >urls.txt

Nota: Esse comando tem uma linha apenas. Isso é muito importante, do contrário não funcionará. Como você vê essa página depende da resolução que você usa.

Nesse exemplo, eu usei o dist-upgrade, mas poderia ser apenas upgrade, dependendo dos objetivos e do sistema (não gosto da idéia de usar dist-upgrade em Debian Unstable). Outra variável é o nome do arquivo .txt gerado, mas o resto tem que ser exatamente como está aqui.

Se der um cat no arquivo final verá uma lista de todas as urls dos pacotes .deb que você precisa baixar e ainda não baixou para efetuar a atualização pedida (seja o upgrade ou o dist-upgrade).

Agora basta usar a lista.

Em um outro sistema linux podemos usar: wget -c -i urls.txt

Em todos os sistemas operacionais, podemos usar o programa gráfico de gerenciador de downloads de sua preferência e usar a importação de arquivos de url. Todos os gerenciadores de download (mesmo no linux) possuem esse recurso, mas com nomes diferentes.

Por fim, pegue os arquivos .deb baixados e copie (CD, Pendrive, HD externo, etc.) para o diretório /var/cache/apt/archives/ do sistema que você irá atualizar e digite, normalmente:

apt-get dist-upgrade ou o apt-get upgrade

Duas coisas são importantes de serem lembradas:
  1. Faça um apt-get update antes de qualquer coisa.
  2. NÃO faça outro apt-get update enquanto não atualizar o sistema, isso assegurará que os pacotes baixados ainda são os pacotes exigidos pelo seu sistema.
Agora que estamos perto da atualização do Ubuntu essa dica pode ajudar muita gente a economizar muito tempo de download com conexão discada com o download dos arquivos na Universidade/Colégio/Trabalho/Vizinho(a) onde a conexão seja mais rápida.

Comentário Adicional: Essa forma de criar a lista de arquivos para download funciona também para a instalação com o apt-get install nome(s)do(s)pacote(s), basta fazer "apt-get -qq --print-uris install nome(s)do(s)pacote(s)" no lugar de "apt-get -qq --print-uris dist-upgrade" do comando acima. As dependências também serão incluídas na lista de urls.

Technorati Tags:

Sunday, May 28, 2006

ImageMagick - convert

O ImageMagick é uma coleção de ferramentas para manipulação de imagens. São elas: convert, identify, mogrify, composite, montage, compare, display, animate, import, conjure

O convert é um pequeno utilitário que permite converter o formato de da imagem de forma bem simples, além de umas 200 outras tarefas. É, possivelmente, dos utilitários do ImageMagick o mais útil (sem diminuir a importância e a utilidade dos utilitários).

Para uma simples conversão de formatos, experimente:
convert img_original.jpg img_novoformato.png

Ele permite modificar o tamanho do arquivo.
Para dimuir a imagem a 60% do tamanho original, utilizamos:
convert img_original.jpg -resize 60% img_reduzida.png

Também é possível aumentar o tamanho da imagem.
Para aumentar a imagem original em 20% do seu tamanho, temos:
convert img_original.jpg -resize 120% img_ampliada.png

Assim como também é possível especificar um tamanho absoluto para a figura:
convert img_original.jpg -resize 640x480 img_novotamanho.png

O convert também permite criar imagens com base em contextos, tipo frases e/ou palavras, um exemplo vindo do próprio manual do convert é:

convert -size 320x85 xc:transparent -font Bookman-DemiItalic -pointsize 72 -draw "text 25,60 'Magick'" -channel RGBA \
-gaussian 0x6 -fill darkred -stroke magenta -draw "text 20,55 'Magick'" fuzzy-magick.png


O comando acima cria uma imagem chamada "fuzzy-magick.png" com o canal de cores RGBA (opção -channel), com o texto 'Magick' (opção -draw), escrito com a fonte 'Bookman-DemiItalic'.

Observe que o comando possui duas chamadas de -draw figuras, uma dentro da outra escrito o mesmo texto, mas as opções do -draw para o texto diferenciam o tamanho e posição do texto. O primeiro -draw produz o efeito "sombra" e o segundo -draw é preenchido com a cor 'darkred' e com o contorno na cor 'magenta'. A figura é transparente (xc:transparent) e possui o tamanho 320x85 (-size)

Outras utilidades do convert:

  • Para equalizar ou normalizar as imagens:
    convert -equalize img_orig.jpg img_equal.jpg
    convert -normalize img_orig.jpg img_equal.jpg
  • Para modificar o padrão de compressão (o default é 75%):
    convert -quality 90 img.png img-90.jpg
  • Para especificar o tipo de conversão:
    convert -compress JPEG img.png img.new

    Note nesse último exemplo que .new não é uma extensão conhecida, logo, para realizar a conversão é preciso especificar corretamente qual é o tipo do arquivo de saída. A opção -compress tem prioridade sobre a extensão do arquivo de saída, exemplo: convert -compress JPEG img.png img.bmp, gera um arquivo chamado img.bmp que na verdade é um jpeg de extensão trocada.
  • Para criar um PDF com base em diversas imagens:
    convert img_01.jpg img_02.jpg ... img_N.jpg arquivo.pdf
  • Convertendo todas as imagens em lote (exemplo> png -> jgp) :
    find ./ -name '*.png' -exec convert -quality 90 '{}' '{}'.jpg \;

O comando converte possuí exatamente 180 opções, logo é de se imaginar o poder desse pequeno utilitário.

Ainda assim, o uso mais comum desse utilitário é sua capacidade de converter o formato das figuras e de redimensioná-las.

Além disso, eu considero a forma mais fácil de criar uma figura com texto apenas. Experimente, por exemplo, substituir o 'Magick' do exemplo anterior por 'Ubuntu' e você acaba de criar um logo do Ubuntu. Ao mudar a fonte e acertar as cores é possível recriar o banner oficial do ubuntu (sem o logo, claro) com grande facilidade.


Technorati Tags:

Saturday, May 27, 2006

Configuração Básica do Squid

Implementei um servidor proxy com o squid no meu computador.
Com o objetivo obter um melhor desempenho em algumas páginas e apreender a criar um filtro de conteúdo, para por exemplo, impedir o download de arquivos tipo .src.
Essa configuração foi feita apenas para um computador, ou seja, apenas o computador onde o squid está configurado precisa ter acesso ao proxy.
O arquivo é fruto de uma pequena pesquisa na internet e do livro "Redes e Servidores Linux, Guia Prático" de Carlos Morimoto. Além de uma pequena ajuda da Revista Linux Magazine número 16.

Segue abaixo o arquivo configurado.

# Arquivo de configuração do Squid /etc/squid/squid.conf
# 22 de maio de 2006
# J. F. Mitre
# -----------------------------------
# Define a porta do squid
http_port 3128

# Hostname da máquina.
# RECOMENDAÇÃO DO SQUID:
# Não especificar se não obtiver mensagens de erro
# visible_hostname $HOSTNAME

# Opções recomendadas pelos Squid

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache QUERY

# Especifica o tamanho da memória RAM reservada ao squid
cache_mem 32 MB
# Especifica o tamanho máximo do objeto residente na
# memória RAM reservada ao squid
maximum_object_size_in_memory 64 KB
# Especifica o tamanho máximo do objeto residente no HD
maximum_object_size 10 MB
# Especifica o tamanho mínimo do objeto residente no HD
minimum_object_size 0 MB
# A percentagem na qual começa a o esvaziamento do cache
cache_swap_low 90
# A limite do consumo do cache
cache_swap_high 95
# Especificações do cache em disco
# cache_dir tipo diretorio tamanho__MB num_de_dir num_de_subdir
cache_dir ufs /var/spool/squid 128 16 256
# Especifica o log do sistema
# É conveniente não modificar o path
cache_access_log /var/log/squid/access.log

# Padrão de atualização do cache
# Define que o arquivo será verificado sempre que tiver
# mais de 5 minutos de criado; e será modificado se tiver
# mais de 2 dias (2280) no HD.
# As três linhas precisam ser escritas em conjunto.
refresh_pattern ^ftp: 5 20% 2280
refresh_pattern ^gopher: 5 0% 2280
refresh_pattern . 5 20% 2280

# -----------------------------------------
# Regras ACL
# -----------------------------------------

# Libera o squid para ser utilizado por todos os ips
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object

# Regra localhost
# especifica que o localhost tem acesso ao proxy
acl localhost src 127.0.0.1/255.255.255.255

# Regra para a rede
# especifica quais ips da rede possuiram acesso ao proxy
# acl redelocal src 172.0.0.0/255.255.0.0


# Especificação das portas seguras
acl SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

# Configuração de permissão de acesso
# Especificando o acesso a urls com certas palavras no dominio
acl palavraschave dstdom_regex -i /etc/squid/palavras.squid"
# Especificando o acesso a certos dominios
acl dominios dstdomain -i "/etc/squid/dominios.squid"
# Especificando o acesso a certos tipos de arquivo
acl arquivos url_regex -i "/etc/squid/arquivos.squid"

# -----------------------------------------
# Regras http_access
# -----------------------------------------


# Configuração da permissão de acesso
http_access deny dominios
http_access deny palavraschave
http_access deny arquivos

# regras básicas para o gerenciamento do proxy
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
# Proibe o acesso fora das portas listadas
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Permite o acesso do localhost ao proxy
http_access allow localhost
# http_access allow redelocal

# Nega o acesso a qualquer ip que não tenha
# sido listado como permitido pelas regras
# anteriores

http_access deny all

# Proxy transparente
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Notem que algumas configurações precisam ser modificadas conforme o objetivo da máquina, como o fato da rede local ter ou não acesso ao proxy. Outro tipo de modificação são os caminhos dados aos arquivos que contém as palavras, domínios e extensões proibidas.
É evidente que cada usuário/rede terá objetivos distintos. O meu era desempenho de conexão, não tenho uma rede, e portanto, não preciso me dedicar a cuidar da hora de acesso de cada usuário nem restringir o volume que cada máquina pode "sugar" da banda de rede, por exemplo.

[update]
Na versão 2.6 do squid (que acompanha o Ubuntu Edgy) possuí linhas diferentes da apresentada aqui para definir um proxy transparente. O Júlio Santos Monteiro escreveu um simples e excelente post sobre essas modificações.

Basicamente consiste em remover as 4 últimas linhas do arquivo acima e no lugar escrever:

http_port 3128 transparent vhost
[/update]

Technorati Tags:

Krita : Um Gimp com a interface QT ?

Estive usando o Krita um "novo" (nem tão novo assim) editor de imagens e fiquei impressionado de como ele se parece com o Gimp em termos de recursos.
Certamente, ele não é o Gimp. O visual é completamente diferente, sem contar que ele é um software KDE.
Eu encontrei no Krita todos os recursos do Gimp, aliás, encontrei inclusive os mesmos pincéis e os mesmos templates de gradientes de cores. Tudo isso permite a aplicação quase direta de qualquer tutorial Gimp (dos que eu já tenha lido) no Krita.

Outra observação interessante é que o Krita é muito mais parecido com os programas gráficos do Windows (incluindo o Photoshop) que o Gimp. Pode ser muito mais simpático apresentar o Krita antes do Gimp para os usuários de softwares como o PaintShop/Photoshop, certamente o impacto visual do software é muito menor. Além disso, o Krita é carregado muito mais rápido do que o Gimp.

Bom, eu deixo a opinião de cada um decidir pela interface que utilizará.
Uma boa resenha sobre o Krita pode ser encontrada em: http://br-linux.org/linux/node/3264

Abaixo segue um screeshot do Krita.



Para os usuários Debian/Ubuntu/Kurumin a instalação do Krita está disponível via apt-get.


Technorati Tags:

Considerações sobre o find ./ -exec

Estava pensando no tempo que eu não escrevia alguma coisa, e aí, resolvi escrever algo.
Nesse meio tempo estive envolvido com diversos pequenos detalhes, como criar uma lista de gerenciamento de tarefas em modo texto, aprender a usar IRC (acreditem ou não eu não sabia), arrumar um jeito de modificar as permissões de execução de arquivos copiados de um CD que tenha compatibilidade com o Windows, entre outros.


Nesse último ponto foi realmente uma aventura. Isso por que eu desenvolvi um script, mas o script precisava de controles (quando começa e quando termina, se tem ou não espaço no nome, etc) que fizeram desse script algo muito grande e complicado.

Seguindo a filosofia de um antigo professor que dizia: "se estiver muito complicado, está errado ..."; eu busquei uma nova solução, que decididamente é muito mais simples.

A solução passa pela execução do comando find. Eu quase nunca uso o find, isso por que o slocate consegue fazer tudo que eu preciso, e quando não consegue eu uso o find na forma mais simples "find ./". Não é incomum, entretanto, encontrar tutoriais ensinando a utilizar a opção -exec, o detalhe é que normalmente utiliza-se essa opção com exemplos de "rm", ou seja, eliminar arquivos.

Nunca havia passado pela minha cabeça usar outro comando. Até agora.
Observe o comando:

find ./ -type f -exec chmod -x '{}' \;

com ele é possível modificar as opção de execução de arquivos sem alterar as opções de execução dos subdiretórios, coisa que acontece quando utilizamos o comando "chmod -R -x" e que inviabiliza a navegação pelos diretórios, enquanto os diretórios não possuirem permissão de execução.

Para facilitar a minha vida, inclui a seguinte linha,

alias fat2linux="find ./ -type f -exec chmod -x '{}' \;"

no meu .bashrc.

Isso permite arrumar as pemissões de execução dos arquivos de forma bem simples. Isso é muito para quem tem o hábito de copiar arquivos de CDs que foram gravados no Windows por outros ou que foram gravados no Linux com a compatibilidade com o Windows ativada. Também é muito útil para que usualmente transporta arquivos em Pendrives formatados em fat32 (aliás, é por isso que o comando que eu criei chama-se fat2linux).


Nota 1: A permissão de execução de um diretório siginifica que podemos executar comandos dentro dele, sem essa permissão, não é possível, por exemplo, digitar 'ls' dentro do diretório.

Nota 2: É possível fazer essa modificação proposta de n outras formas, incluindo utilizar o konqueror, por exemplo, minha proposta era utilizar apenas o terminal e com isso, nesse post, chamar a atenção para a opção -exec do find para uma aplicação diferente da eliminação de arquivos antigos ou backup incremental do sistema.


Technorati Tags:

Tuesday, May 09, 2006

Você sabe o que é RAID ?

Bem, eu não! Ou pelo menos não sabia !!!

Eu sabia conceitos básicos como: reze para o RAID 0 não perder um dos discos ou com o RAID "diferente de zero" o sistema fica mais lento, mas não sabia o porque de cada uma dessas coisas.

Até que hoje li um post no Tecnologias de Informação e Comunicações entitulado Níveis de RAID. Esse post é o mais informativo texto sobre RAID que eu já li. Nele fica claro o que é cada nível de RAID, com uma breve descrição e considerações sobre prós e contras, além de algumas recomendações.

Ah! O objetivo do post não é ensinar a fazer um RAID no seu sistema, mas conceituar cada nível de RAID pelas suas características principais.

Meus parabéns ao João Guedes pelo excelente texto.

Technorati Tags:

Tuesday, May 02, 2006

Convertendo arquivos UTF-8 em ISO-8859-1

[update]
Esse tópico recebeu uma versão atualizada. Embora esse aqui continue correto e completamente funcional. A versão atualizada contém mais informações e agrega o conteúdo gerado pelos comentários desse tópico até a data de publicação daquele tópico.
[/update]

Recentemente tive alguns problemas com codificação de alguns arquivos e do próprio sistema (algumas coisas ainda não resolvidas, mas isso é outro assunto!).

O fato é que tive que fazer uma pesquisa sobre como converter um tipo de arquivo em outro. O que me impressionou não foi a dificuldade de achar uma solução, mas a complexidade de algumas soluções que eu encontrei. Pensei que certamente tal complexidade não seria necessária e estava certo !

Encontrei uma dica no rodapé do site das FunçõesZZ ensinando justamente como converter o arquivo das FunçõesZZ, que é escrito em ISO-8859-1, em UTF-8.

O comando é muito simples: iconv
Faz parte da libc6, ou seja, todo mundo têm instalado, e possuí sintaxe simples.

iconv -f codificacao_de_origem -t codificacao_de_saida arquivo

Assim para converter UTF-8 para ISO-8859-1 temos:

iconv -f utf-8 -t iso-8859-1 arquivo

Para o contrário utilizamos:

iconv -f iso-8859-1 -t utf-8 arquivo

É necessário redirecionar a saida de arquivo para algum lugar, algo como:

iconv -f utf-8 -t iso-8859-1 arquivo > novo_arquivo

Sendo assim, eu acrescentei ao meu ~/.bashrc* as seguintes linhas

alias iso2utf='iconv -f iso-8859-1 -t utf-8'
alias utf2iso='iconv -f utf-8 -t iso-8859-1'

Agora quando eu quiser converter um tipo de arquivo em outro, eu só preciso usar o iso2utf ou o utf2iso

Agora, por que tanta desinformação sobre assunto ? É tão fácil converter um tipo em outro, é tão simples !

[update]
O Marcelo Oliveira escreveu um belo script para fazer a conversão em lote e o colocou aqui, nos comentários.
O script apresenta o cuidado de não modificar seus arquivos originais, produzindo uma cópia dos mesmos em outros diretórios. Modificar o comportamento do script para converter arquivo iso-8859 para utf-8 é trivial (pelo menos para quem leu o tópico até aqui). Um detalhe importante é que o script não suporta caminhos ou nomes que contenham espaços (Posso estar enganado, mas o Marcelo deve ter utilizado esse script em um diretório de dados para internet onde espaços não são comuns e arquivos de imagem são.).
Marcelo, eu e a galera agradecemos a iniciativa e a colaboração!
[/update]