Editando Textile no Geany

Introdução

O Textile é uma linguagem de marcação própria para hypertexto do tipo Wiki. É simples e fácil de usar, sendo muito mais prática do que o HTML. Assim como no Markdown (uma outra linguagem de marcação – veja um post sobre o Markdown aqui), o Textile permite que você se concentre no conteúdo que está escrevendo, e não na linguagem em si. Linguagens como o HTML, requerem que você saiba exatamente quais são as tags que devem ser utilizadas, obrigando o programador a se concentrar muito mais nas estruturas da linguagem do que no conteúdo em sí. É claro que ninguém escreve textos utilizando as tags do HTML, e é por isso que as linguagem de marcação, como o Textile, existem.

Continue Lendo “Editando Textile no Geany”

Anúncios

Comando weather no OS X (condições do tempo)

Você sabia que é possível verificar as condições observadas de tempo a partir de estações meteorológicas pela linha de comando? No Linux é simples: basta instalar o programa “weather”.

Continue Lendo “Comando weather no OS X (condições do tempo)”

Compilando LAPACK e BLAS com ifort

Este tutorial é muito simples e mostra como compilar as bibliotecas de Álgebra Linear BLAS e LAPACK do netlib (http://www.netlib.org) utilizando os compiladores C e fortran da Intel (icc e ifort).

Tanto para Linux (Ubuntu 11.04) quanto no OS X (Mountain Lion), os procedimentos são os mesmos:

$ wget -c http://www.netlib.org/lapack/lapack-3.4.2.tgz
$ tar -zxvf lapack-3.4.2.tgz
$ cd lapack-3.4.2
$ cp INSTALL/make.inc.ifort ./make.inc
$ make lapacklib
$ make blaslib

Como resultado da compilação, duas bibliotecas (libs) deverão ser criadas:

  • liblapack.a
  • librefblas.a

Dependendo da sua aplicação, pode ser necessário atribuir algum valor para a variável “LAPACK_PATH” indicando o caminho das libs que foram geradas. Se a compilação das libs foi feita em /home/user/lapack-3.4.2, então, pode-se fazer:

$ export LAPACK_PATH=/home/user/lapack-3.4.2

Este comando pode ser incluído no seu ~/.bashrc ou mesmo em /etc/bash.bashrc.

Referência:

Sobrevivendo com um Ubuntu antigo

Este mini-artigo fornece algumas dicas úteis para quem vive degladiando com uma distribuição linux antiga instalada no seu computador de trabalho. No meu caso, trabalho em uma máquina com o Ubuntu 11.04 64 bits instalado e não faço um upgrade nela porque algumas pessoas utilizam a máquina remotamente além do que uma série de programas compilados a partir do código-fonte estão instalados nela. Acho que estes são motivos suficientes para que eu não me atreva a parar a máquina para fazer um upgrade de software e invertir um bom tempo compilando tudo novamente. Uma opção mais honesta, seria partir para uma distribuição rolling-release, como o Gentoo ou o ArchLinux, mas por enquanto, está fora de cogitação, principalmente quando tudo está funcionando como deve. Ou não.

O Ubuntu 11.04 já encerrou seu ciclo de atualizações e suporte. Estamos em junho de 2013, e estamos falando de uma distribuição de abril de 2011. O Ubuntu é uma distribuição que lança suas versões a cada 6 meses. Então, a versão mais atual do Ubuntu, é a 13.04, ou seja, estou utilizando uma distribuição que já foi atualizada 5 vezes! Quanto software já não foi atualizado, quantas melhorias já não foram aplicadas e quantos bugs já não foram sanados? Muitos, com toda certeza. Mas o fato é que com uma distribuição mais antiga sendo executada a todo vapor em uma máquina estável, garante menos dor de cabeça, porque já não há mais atualizações a se fazer, e o sistema como um todo mostra-se bastante estável. O fato é que vez ou outra, é necessário atualizar alguma biblioteca, instalar algum software marciano e é aí quando que a situação começa a complicar um pouco.

O ciclo de vida de uma distribuição linux instalado em um computador passa por uma série de transformações. E é nesse ponto que eu acho o linux extremamente saudável: é um sistema robusto suficiente para aguentar este “tranco” (instalar software, desinstalar software, uptime etc) e simples o suficiente para permitir que simples ações resolvam os seus problemas. Depois de 3 anos utilizando a mesma distribuição no mesmo computador (na verdade esse tempo é muito pequeno), ocorre de você querer instalar outros ambientes gráficos (como o XFCE, KDE3/4 etc) para dar uma variada no visual. Obviamente, esta é uma ação que requer a instalação de muitos pacotes, coisa que o apt faz brilhantemente bem. Além do mais, esta é uma ação que, de certa forma, vai contra o princípio de se manter a máquina em ordem. Pode acreditar, a confusão de pacotes e dependência que é gerada no seu cache não é pequena. E depois de um bom tempo, é certo que surgirá a necessidade de se organizar a casa.

Esses dias, descobri a página EOL Ubuntu – “End Of Life Ubuntu” (https://help.ubuntu.com/community/EOLUpgrades), que traz algumas dicas para se manter as diversas versões mais antigas do Ubuntu em dia a acabar de vez com os erros de atualização dos repositórios da versão que você está usando. É bastante frequente acontecer dos repositórios estarem offline porque novas versões foram lançadas, e isso acontece mais com os repositórios de terceiros. Logo, a solução é bastante simples e envolve manter apenas os repositórios principais (main, retricted, backport, extras etc) em dia.

Com as instruções mostradas nesta página, consegui resolver alguns problemas que eu estava enfrentando com alguns pacotes do Ubuntu (na verdade pacotes de terceiros também) que teimavam em me mostrar uma atualização, mesmo quando eu não queria (eu sabia que alguma coisa iria “quebrar” em decorrência destas atualizações).

A solução foi a seguinte:

1) Fechar todas as janelas do synaptic, software center, atualização etc;
2) Fazer um backup do sources.list:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

3) Criar um novo sources.list com o seguinte conteúdo:

## EOL upgrade sources.list
# Required
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-security main restricted universe multiverse
# Optional
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-backports main restricted universe multiverse

No meu caso, como estou utilizando o Ubuntu 11.04, cujo codinome é Natty-Narwhal, eu substituí a palavra “CODENAME” por “natty” (sem as aspas), e ficou assim:

## EOL upgrade sources.list
# Required
deb http://old-releases.ubuntu.com/ubuntu/ natty main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ natty-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ natty-security main restricted universe multiverse
# Optional
deb http://old-releases.ubuntu.com/ubuntu/ natty-backports main restricted universe multiverse

4) Depois de salvar o arquivo, atualize e caso seja necessário, instale novamente o meta-package principal do seu ambiente gráfico (o que pode trazer de volta algumas dependências fundamentais da sua distribuição):

$ sudo apt-get update
$ sudo aptitude install update-manager-core update-manager
$ sudo apt-get install ubuntu-desktop

É isso!

Trocando Windows pelo Linux (lol)

Um usuário de longa data do Linux resolveu trocar o Linux pelo Windows porque já estava achando o Linux um pouco monótono.

Certamente isso já deve ter acontecido ou com algumas pessoas por aí. Isso já aconteceu com o usuário algumas vezes, mesmo utilizando o Linux diariamente (em casa e no trabalho) há muitos anos, e confessa que, de vez em quanto, bate uma vontade de instalar o Windows de volta na máquina. Por que? Talvez porque acha legal instalar o linux do zero e configurar tudo de novo… Não faz sentido, mas é certeza que esta pode ser a resposta dele e da maioria.

Sobre a experiência, do usuário (um exemplo em http://migre.me/cOv9p), depois de instalado e ao usar o Windows logo surge uma necessidade: o gerenciador de pacotes! Quando o gerenciador de pacotes entra em sua vida, tudo se transforma! É tão rápido e simples instalar um programa utilizando o apt-get que se torna banal a tarefa de configurar o computador e ter tudo funcionando, aí incluindo-se os pacotes multimídias, os pacotes de desenvolvimento, desenho etc. No Windows, as coisas são um tanto quanto demoradas, principalmente quando se trata de atualizações.

As atualização são um verdadeiro pesadelo. No Linux, é rápido é fácil. No Windows é fácil, mas é demorado, isso sem mencionar quando o usuário esquece de configurar o Windows Update para apenas avisar quando as atualizações estão prontas para serem baixadas e instaladas. Vá desligar ou reiniciar a máquina… No linux não é necessário reiniciar! No máximo é necessário um init 5 ou um pkill X, como root, é claro.

Por falar em X, isso parece coisa do chifrudinho. Um usuário de posse de um notebook STI equipado com uma placa de vídeo Via Chrome9, tem em suas mãos, um espécime raro. Este chip é e será a pior experiência para o usuário de um computador. O usuário poderá levar meses para fazê-lo funcionar e até decidir, por livre e espontânea vontade, criar um site dedicado a ele, como este http://migre.me/cOvwL e aproveitar para ganhar algum dinheiro com monetização. Esse tipo de coisa você não passa no Windows, mas também não aprende nada. No máximo, vai aprender a descompactar um arquico .exe utilizando o 7-zip. Ou vai se tornar um MVP da Microsoft, ou não.

Nesse momento é que geralmente, volta-se para o linux. E aí o usuário pega sua caixa de DVDs e começa a olhar para as distribuições que tem e pensa: “… essa foi a primeira que usei – Mandrake Linux 8.0, comprei na banca de jornal!; … putz, meu primeiro Slackware, 9.2, comprei no GuiaDoHardware!; … meu primeiro Gentoo, pena que nunca consegui usar…” e por aí vai. Como o usuário já está mais maduro, ou melhor, mais velho (e sem paciência, sem saco, sem tempo), então resolve encurtar a url da história e resolve baixar o Ubuntu. É bem fácil: forno microondas, 30 minutos e está tudo pronto.

Quando será a próxima vez em que o usuário irá instalar o Windows novamente?

E você, tem alguma história pra contar, ou será esta a sua experiência também?

Instalando GCC, GFORTRAN, ZLIB, HDF5, NETCDF4 e OpenMPI no Mac OS X

Quem trabalha com programas compilados a partir do código fonte sem ter a disposição um gerenciador de pacotes tal como o apt-get ou o port sabe o trabalho que dá instalar os pré-requisitos e dependências para preparar o ambiente de execução do programa principal. Muitas vezes, os gerenciadores de pacotes facilitam, automatizando as tarefas e principalmente, tratando automaticamente as dependências dos pacotes. Mas nem tudo são vantagens: muitas vezes, há a necessidade de se instalar um novo compilador e nem sempre será possível fazer com que todos os outros pacotes instalados sejam recompilados utilizando as bibliotecas e utilitários do novo compilador; ou ainda, pode ser que seja mais complicado fazer com que o gerenciador de pacotes utilize o novo compilador para recriar os novos executáveis etc (para ver como fazer com que o HomeBrew do Mac OS X trabalhe com um compilador diferente do gfortran clique aqui).

O objetivo deste post é tentar mostrar uma forma objetiva de se utilizar o MacPorts para a instalação de alguns programas, mantendo-se mais de um compilador fortran instalado na máquina. Com isso, pode-se pensar na vantagem de se instalar um programa pelo MacPorts ou manualmente. Em ambos os casos a instalação é feita a partir do código fonte, mas com a diferença de que pode-se especificar o local, o compilador e as bibliotecas (versões) a serem utilizadas.

Para exemplificar, serão instalados os pacotes gcc, gfortran, zlib, hdf5, netcdf4 e openmpi no Mac OS X. É possível pensar da mesma forma em qualquer sistema tipo UNIX em que se tem (ou não) um gerenciador de pacotes. Salienta-se, no entanto, que a instalação de alguns pacotes pode levar algumas horas, como é o caso da compilação do pacote gcc.

O gcc é um conjunto de programas essenciais para um sistema em que serão compilados quaisquer tipos de programas a partir do código fonte. Este pacote possui compiladores para as linguagens C, C++ e fortran. Há diversas versões disponíveis do gcc e a que será utilizada será a versão 4.4, sendo que a última versão mais recente (até outubro de 2012, pelo menos) é a versão 4.8. Sua compilação não é muito complicada, sendo feita com a utilização típica dos comandos configure, make e make install. Mas como o gcc é o pacote base para a instalação dos demais, ele será instalado primeiro e isso será feito a partir do MacPorts (se você não tem o MacPorts instalado, baixe o instalador correto para o seu Mac OS X aqui), que já ajusta todas as flags de compilação e otimização automaticamente.

Para instalar o gcc4.4 no Mac OS X utilizando o MacPorts, basta fazer:

$ sudo port install gcc44

Como mencionado acima, o gcc é um pacote que traz os compiladores das linguagens C, C++ e fortran. Este comando poderá demorar várias horas para terminar de ser executado, portanto é uma boa idéia deixar esta tarefa para ser feita durante a noite. A compilação do gcc4.4 é feita através do compilador nativo do Mac OS X, uma versão do gcc (versão 4.2.1 no OS X Mountain Lion) fornecida pela Apple, que vem junto com o Xcode4.X.

Depois da instalação do gcc4.4, é necessário fazer com que toda a suíte trazida pelo gcc4.4 esteja disponível no shell do Mac OS X por padrão. Para isso, basta fazer:

$ sudo port select gcc mp-gcc44

Este comando fará com que as versões dos compiladores do gcc não conflitem (eg, gcc4.2 nativo com o gfortran4.4 instalado pelo port) e que tudo passe a ser compilado com a mesma versão dos programas da suíte do gcc. Para testar os comandos, basta abrir uma nova aba ou um novo terminal e digitar os comandos:

$ gcc -v
$ g++ -v
$ gfortran -v

Em todos os casos, as versões devem ser identificadas como “gcc version 4.4.7 (MacPorts gcc44 4.4.7_6)”. É possível que algum número de versão se altere caso alguma atualização do port seja feita.

Com o gcc4.4 instalado e configurado, é possível começar a instalação dos programas zlib, hdf5, netcdf4 e openmpi. O programa zlib é um software de compressão, uma espécie de “zip”, que pode ser utilizado por qualquer outro programa que trabalhe com algum formato padronizado que utilize compressão; o hdf e o netcdf são bibliotecas utilizadas para armazenamento de dados geofísicos. Eles serão instalados por uma necessidade específica, e este pode não ser o seu caso. O openmpi é uma implementação aberta do mpi (Message Passing Interface) e é utilizado para executar programas em paralelo. Entre estes quatro programas, o openmpi é o único que tem dependência apenas do compilador C, C++ e fortran instalados na máquina; os demais possuem uma ordem específica de compilação, a qual será abordada mais adiante. É importante ressaltar que todos estes programas estão disponíveis na árvore de programas do MacPorts. No entanto, eles serão compilados manualmente com o gcc4.4 para permitir, porteriormente, que sejam também compilados com outros compiladores (eg., pgi, intel), caso haja necessidade.

Para a instalação do openmpi, é necessário obter o pacote da última versão do openmpi (atualmente na versão 1.6.2), descompactar e executar o comando:

$ wget -c http://repository.timesys.com/buildsources/o/openmpi/openmpi-1.6.2/openmpi-1.6.2.tar.bz2
$ tar -xvf openmpi-1.6.2.tar.bz2
$ cd openmpi-1.6.2
$ ./configure CC=gcc CXX=g++ F77=gfortran FC=gfortran \ 
--prefix=/opt/openmpi-gcc_gfortran4.4

O último comando irá compilar o openmpi com as flags CC, CXX, F77 e FC que indicam, respectivamente, os compiladores que serão utilizados no processo (gcc, g++ e gfortran). Observe que não foi necessário especificar a versão do gcc, pois isso já foi feito anteriormente com um comando interno do MacPorts (port select). O argumento “–prefix” permite especificar o local em que serão instalados os executáveis e demais arquivos criados na compilação do openmpi. É importante escolher um nome que reflita a configuração escolhida para a compilação do pacote, por exemplo, “openmpi-gcc_gfortran4.4”. Caso seja necessário instalar uma nova versão do gcc, uma nova compilação do openmpi será necessária para que se possa utilizar os comando mpif90, mpicc, mpicpp etc com a versão correta dos compiladores C, C++ e fortran. Isso é necessário porque nem sempre os módulos e bibliotecas são compatíveis entre as diferentes versões dos compiladores.

Depois de configurar o openmpi, basta executar os dois comandos abaixo para iniciar a compilação do pacote e finalizar a instalação, respectivamente:

$ make all
$ sudo make install

Com isso, o programa openmpi estará instalado. Os executáveis estarão em /opt/openmpi-gcc_gfortran4.4/bin. Para fazer com que esta versão seja a versão padrão disponível no seu Mac OS X, basta exportar as variáveis de ambiente necessárias, conforme este post. Caso você tenha outras versões do openmpi instalada, basta ajustar as variáveis de ambiente (PATH, MANPATH, C_INCLUDE_PATH e LIBRARY_PATH) para refletir os caminhos da instalação desejada.

Para a instalação do netcdf4, é necessário instalar o hdf5. Mas para instalar o hdf5, é necessário instalar primeiro a zlib.

A instalação da zlib é bastante simples e rápida também. Para baixar, configurar e instalar, execute:

$ wget -c http://zlib.net/zlib-1.2.7.tar.gz
$ tar -zxvf zlib-1.2.7.tar.gz
$ cd zlib-1.2.7
$ ./configure --prefix=/opt/zlib-gcc_gfortran-4.4 
$ sudo make check install

Com a zlib instalada, o próximo passo é a compilação do hdf5. Para baixar, configurar e instalar, basta fazer:

$ wget -c http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.9/src/hdf5-1.8.9.tar.gz
$ tar -zxvf hdf5-1.8.9.tar.gz
$ cd hdf5-1.8.9
$ ./configure --with-zlib=/opt/zlib-gcc_gfortran-4.4 \ 
--prefix=/opt/hdf5-1.8.9-gcc_gfortran-4.4
$ sudo make check install

Com o hdf5 instalado, finalmente pode-se instalar o netcdf4. Para baixar, configurar e instalar, basta fazer:

$ wget -c http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.0.1.tar.gz
$ tar -zxvf netcdf-4.0.1.tar.gz
$ cd netcdf-4.0.1
$ ./configure CPPFLAGS="-I/opt/zlib-gcc_gfortran-4.4/include \
-I/opt/hdf5-1.8.9-gcc_gfortran-4.4/include" \ 
LDFLAGS="-L/opt/zlib-gcc_gfortran-4.4/lib \ 
-L/opt/hdf5-1.8.9-gcc_gfortran-4.4/lib" \ 
--prefix=/opt/netcdf-4.0.1-gcc_gfortran-4.4
$ sudo make check install

Observe que na instalação do netcdf4, foram especificadas as flags CPPFLAGS e LDFLAGS que representam, respectivamente, as pastas include e lib das instalações da zlib e do hdf5.

Feito isto, seu sistema estará pronto para utilizar o netcdf4, hdf5, zlib e openmpi. Estas mesmas instruções podem ser aplicadas em um sistema Linux ou BSD.

Referências

Zerando a MBR

Sempre fui usuário de Linux, e uma vez quiz restaurar o Windows original que veio com o meu notebook HP G42. Simplesmente, coloquei o disco de recuperação que havia criado e deixei ele restaurar o Windows. Ao final, quando reiniciei o notebook, eis que me deparo com o GRUB e sem possibilidade de carregar o Windows. Isso aconteceu porque o disco de recuperação do Windows não foi capaz de reescrever a MBR com o carregador do Windows!

Então, para resolver este problema, antes de iniciar a instalação do Windows e caso você tenha o Linux instalado, apague a MBR com o seguinte comando:

# dd if=/dev/zero of=/dev/sda bs=512 count=1

Observe que o meu disco é /dev/sda e que serão “zerados” apenas os primeiros 512 bytes do disco, onde é gravada a MBR.

Tome muito cuidado com este comando, utilize-o apenas se for reformatar todo o seu computador. Ao executar esse comando, não será possível voltar atrás e nem rebootar o Linux.

Minha lista de comandos úteis no shell do linux

Depois de algum tempo fazendo scripts e tentando lançar uma solução aqui e ali, montei uma lista de alguns comando do shell do linux que me quebram uma galhão. Espero que lhe ajude também! Só para melhorar a diagramação dos comando, coloquei alguns “\n” para quebrar a linha, mas você suprimir esta parte e colocar tudo em uma linha só:

1. Operações de busca com o comando find

$ find <diretorio> -name ""

Exemplos:

1.1 Procurar arquivos com o nome “run” na pasta atual em diante

 $ find . -name "run" 

1.2 Procurar arquivo com a extensão “.ksh” na pasta /etc

 $ find /etc -name "*.ksh" 

1.3 Procurar por links simbólicos na pasta atual em diante

 $ find . type -l 

1.4 Procurar por links simbólicos na pasta atual em diante, com saída formatada (indicando a origem e o destino do link)

 $ find . -type l -printf "%p -> %l\n" 

1.5 Apagar todos os links simbólicos encontrados utilizando o comando xargs

 $ find . -type l | xargs rm -rf 

1.6 Procurar todos os arquivos de nome “monitor.t” em pastas com nome sequencial formatado de “001” a “040”, na pasta atual

 $ for pasta in $(seq -f "%03g" 1 40); do echo $pasta; cd $pasta; \n 
 if test ! -e monitor.t; then echo ">>> $pasta falhou"; fi; cd -; done 

2. Operações de pesquisa em arquivos com o comando grep

$ grep <opcoes> <expressao> <arquivo(s)>

Exemplos:

2.1 Pesquisa recursiva pela expressão “letkf” em todos os scripts ksh na pasta atual em diante

 $ grep -R "letkf" *.ksh 

2.2 Pesquisa recursiva pela exporessão “letkf” ou “LETKF” (ou uma mistura de maiúsculas/minúsculas) em todos os scripts ksh na pasta atual em diante

 $ grep -iR "letkf" *.ksh 

3. Operações com arquivos utilizando o comando awk

 $ awk <opcoes> <comandos> <arquivo>

ou

 $ cat <arquivo> | awk <opcoes> <comandos>

Exemplos:

3.1 Filtrando um arquivo com colunas separadas por espaços, mostrando apenas a coluna “n”

 $ cat <arquivo> | awk -F " " '{print $n}'

4. Operações com arquivos utilizando o comando sed

 $ sed <opcoes> <comandos> <arquivo(s)>

ou

 $ cat <arqvuivo> | sed <opcoes> <comandos>

Exemplos:

4.1 Substituindo todas as ocorrências da string “A” pela string “B” em todos os scripts .ksh (apenas na pasta atual)

 $ sed -i "s,A,B,g" *.ksh 

4.2 Comentando a linha “n” em um arquivo (comentário é dados por #)

 $ sed -i 'ns/^/#/' 

4.3 Inserindo um comentário na primeira linha de um arquivo

 $ sed -i "1s/^/# Comentario/" > 

5. Criando uma sequência de números no shell com o comando seq

 $(seq <inicio> <fim>)

Exemplos:

5.1 Imprimir no shell a sequencia de 1 a 20

 $ echo $(seq 1 20) 

6. Operações com loops no shell:

Comando for; do; done

Exemplos:

6.1 Imprimir a sequência de 1 a 30 utilizando o comando de laço for

 $ for i in $(seq 1 30); do echo $i; done 

6.2 Renomear todos os arquivos com extensão .txt adicionando uma nova extensão .dat

 $ for i in `find . -name *.txt`; do mv ${i} ${i}.dat; done 

6.3 Alterar todos os arquivos com a extensão .TQ0213L042 para .T213L42, utilizando o for e o sed

 $ for arq1 in `ls *.TQ0213L042`; do arq2=`echo ${arq1} | sed "s,TQ0213L042,T213L42,g"`; \n 
 cp ${arq1} ${arq2}; done 

Comando until; do; done

Exemplos:

6.4 Aguardar até que um arquivo esteja disponível

 $ until [ -e <arquivo> ]; do sleep .1s; done

Comando if; then; fi

Exemplos:

6.5 Verifica se uma pasta existe; se não existir, cria, se existir sai do teste

 $ if test ! -s <pasta>; then mkdir -p <pasta>; fi

6.6 Lê um lista chamada “lista” com os nomes das pastas que contém um script de submissão, dá permissão de execução e executa

 $ for i in `cat lista`; do cd $i; chmod +x qsub_interface.g2s.$i; \n 
 ./qsub_interface.g2s.$i; cd -; done

Comando while; do; done

6.6 Faz um loop em cima de datas; verifica se a primeira data é menor ou igual do que a segunda. Quando esta condição é alcançada, sai do loop

 $ while [ <data_inicio> -le <data_fim> ]; do <operacoes>; done

Referências Úteis:

Consumo excessivo de memória RAM no Linux

Minha máquina de trabalho possui 16GB de memória RAM. Tenho nela o Ubuntu 11.04, o qual consegue consumir – sem a menor cerimônia, 6GB de memória depois de alguns dias ligada. Isso ocorre porque qualquer sistema operacional (principalmente o Linux) faz o cache dos programas que você mais usa. Essa atividade do sistema operacional, permite que você possa acessar mais rápidos os seus programas.

A partir do kernel 2.6.16, foi adicionada uma função que permite limitar o consumo de memória para esse tipo de cache. Para limitar o consumo de memória para cache no sistema, basta usar o comando

# sysctl -w vm.drop_caches=3

Esse comando irá alterar o valor (conteúdo) do arquivo /proc/sys/vm/drop_caches de “0” para “3”.

O comando acima limpa o arquivo de paginação (caso exista uma partição swap), arquivos, pastas e “ponteiros” armazenado naquele local.

Para limpar apenas o arquivo de paginação, execute o comando:

# sysctl -w vm.drop_caches=1

Para limpar apenas os arquivos, pastas e “ponteiros”, execute o comando:

# sysctl -w vm.drop_caches=2

Veja o resultado, antes e depois, com o comando “free -m”:

Antes:

carlos ~ $ free -m
             total       used       free     shared    buffers     cached
Mem:         16064      15840        223          0       1093       8369
-/+ buffers/cache:       6377       9687
Swap:            0          0          0

Depois:

root /home/carlos # free -m
             total       used       free     shared    buffers     cached
Mem:         16064       5843      10220          0         18        193
-/+ buffers/cache:       5632      10431
Swap:            0          0          0

Se você tem pouca memória RAM e quer destruir tudo o que está em cache (swap!), basta “desligar/ligar” sua aprtição swap:

$ swapoff -a
$ swapon -a

Referências:

Como e quando mudar de distribuição?

Antes de se autoproclamar “linuxuser”, todo linuxista já passou por pelo menos 3 distribuições diferentes: ou uma baseada no Slackware, ou uma baseada no Debian … ou uma baseada no SuSe ou RedHat. Certamente, estas são as três grandes distribuições que deram origem a todo o ecosistema de distribuições que temos hoje em dia. Nesse processo, toda mudança é uma verdadeira aventura no começo e à medida em que os conhecimentos vão sendo agragados, a brincadeira fica cada vez mais divertida. A minha primeira distribuição linux foi a saudosa Mandrake 8.2 Freq. que comprei na banca de jornal.

Naquela época, de internet discada, era quase que impossível baixar uma distribuição desse porte, a menos que fosse o Kurumin (mas ainda sim esperando algumas semanas para o download terminar!). Lembro-me que demorei algumas semanas tentando juntar um pouco de coragem para instalar no meu primeiro e novo computador. Que tempo aquele! Tudo era novo, nunca havia aberto o meu computador, o que também foi uma grande aventura… Depois de algum tempo pensando e depois de ter feito um belo backup em disquetes, estava pronto para a minha primeira experiência com o linux! As primeiras tentativas foram um tanto quanto emocionantes, com o medo cercando todo o momento de estragar o computador e acabar com a máquina dos sonhos de minha irmã e eu. Meu pai foi um grande incentivo, porque ele nunca reclamou dos meus experimentos. Depois de instalado o sistema, os primeiros desafios foram a placa de vídeo (uma nVidia GeForce MX 400 de 64 MB) e o modem (um LG com chipset Netodragon). A placa de vídeo foi barbada, mas apanhei para entender o que faziam os comandos no terminal. Essa segunda etapa foi um grande aprendizado, aprendi muito (para quem não sabia nada!). Depois de alguns meses de intensa pesquisa e muita persistência, finalmente consegui instalar o modem e assim inaugurei a minha era do linux com internet. Tudo foi muito fantástico! Depois do Mandrake, que eu acompanhei até a versão 10.0 (que eu comprei no GuiadoHardware!), vieram o Kurimun (diversas versões), o Slackware (desde a versão 8.0 até as mais atuais), o Debian (que sempre tentei, mas nunca conseguia instalar com sucesso – faltavam mais conhecimentos!), o Gentoo (que nunca consegui instalar devido à minha conexão discada…) e finalmente o Ubuntu (que uso até hoje, desde a versão 5.04) entre muitas outras distros menores e selvagens. Cheguei num ponto de pensar na minha própria distribuição, começando do zero mesmo (linux from scratch!) chamada Aetos Linux (Aetos é um nome legal, que significa pipa em grego (:D).

Depois dessa salada toda, a pergunta que fica é: quando e como mudar, experimentar, testar uma nova distribuição?

Há diversas maneiras de se fazer isso. Mas com o passar dos anos, aprendi que é sempre melhor fazer as coisas do jeito mais simples, sem pressa, pensando na produtividade, estabilidade e benefício. Certamente, os mais apressados instalam uma distribuição por cima da outra. Simples assim. Os mais apressados e também cautelosos, sempre mantém uma partição /home separada, assim os riscos são minimizados, mas não totalmente eliminados, pois ainda sim corre-se o risco de se cometer um erro crasso e formatar a partição errada… Há também a opção de se fazer dual boot (ou multiboot) e ter várias distribuições instaladas ao mesmo tempo, lado a lado. Eu mesmo já fiz isso e o meu recorde foi 4 distribuições, todas compartilhando o mesmo /home. Nisso, perde-se em espaço, mas hoje em dia com HD’s enormes, dá tranquilo para manter várias distribuições no mesmo HD sem ter que expremer os dados pessoais. Mesmo assim, o método mais seguro de se testar uma nova versão de uma determinada distribuição ou uma completa e nova distribuição, é utilizando uma máquina virtual.

A praticidade desta alternativa é bastante atrativa, visto que não se corre o risco de perder dados pessoais e pode-se tentar o quanto for necessário. Em contra-partida, a máquina hospedeira (host) tem que dividir os recursos (processador, memória, espaço em disco etc) com a máquina convidade (guest). Em máquinas mais antigas, a menos que se tenha pelo menos 1 GB de ram e um processador com pelo menos 1 GHz de frequência, não é uma boa idéia utilizar uma máquina virtual. Bons softwares (tanto para linux quanto para Windows) de virtualização, são o VirtualBox (meu preferido) e o VMware.

Ambos tem suas vantagens e desvantagens, o que acaba fazendo com que os usuários prefiram uma à outra. Em minha opinião, acho que o VirtualBox é mais flexível para os hosts linux do que o VMware. Mas esse papo é outra história…

Finalmente, resta-nos pensar quando mudar de distrubuição. Esta pergunta acaba sendo muito pessoal, e cada um sente uma necessidade diferente. No meu caso, por exemplo, sinto que as últimas versões do Ubuntu tem se distanciado bastante do projeto Gnome (meu gerenciador de janelas predileto). Isto me incomoda um pouco, apesar de que esta direção irá revelar mais um opção em termos de gerenciador de janelas, com seus atrativos etc. Imagine, então, que os usuários mais acostumados a anos de uso do Gnome, com todas as suas facilidades, vantagens e desvantagens, se encontrem perdidos em relação à distribuição que mais utilizam no trabalho, na escola ou no computador pessoal. Essa situação, para quem sempre tem as últimas atualizações (como eu), pode ser ruim porque os seus recursos computacionais pouco-a-pouco deixaram de ter o suporte que sempre tiveram. O que fazer então? Mudar de distribuição pode ser uma alternativa. Como o Ubuntu é baseado no Debian e este mantém firme e forte o Gnome, pode ser uma alternativa. Por outro lado, os pacotes disponíveis na versão estável do Debian são mais antigos e pode acontecer de alguns recursos que mais utilizava nas últimas versões do Gnome disponível no Ubuntu, ainda não estajam disponíveis na última versão do Debian… e por aí vai. Uma mudança mais drástica seria mudar completamente de distribuição, indo, por exemplo, para um Gentoo, ou um ArchLinux que são distribuições do tipo rolling release, ou seja, são frequentemente atualizadas. De novo, caímos na balança dos prós e contras. Isso sempre irá acontecer quando o assunto for “que distribuição utilizar” ou “quando mudar de distribuição”. Há alguns anos que uso linux no meu trabalho e há vários anos antes já utilizava em casa. Acabei me acostumando com o estilo Debian pela praticidade de instalação dos pacotes e resolução de dependências. Acabei me acostumando com o Gnome, pela levaza, simplicidade e o visual da biblioteca GTK, além dos aplicativos padrão. O que resta, então, é escolher uma nova distribuição que leve em conta estes fatores e torcer para que mais anos de uso contínuo venham pela frente!