quarta-feira, 12 de agosto de 2009

Juntando arquivos linha a linha no Linux

Digamos que você tenha um arquivo (ex. letras.txt) que contenha:

a
b
c

E outro arquivo (ex. numeros.txt) que contenha:

1
2
3

E você quer unir estes arquivos para que o resultado fique:

a 1
b 2
c 3

Para isso existe um programa de linha de comando no Linux que é o paste, do pacote coreutils. O paste é capaz de unir linhas de arquivos. Por exemplo:

paste letras.txt numeros.txt > unidos.txt

Por padrão o paste separa os campos por tabulações mas você pode facilmente mudar isto adicionando o argumento -d. Por exemplo:

paste letras.txt numeros.txt -d , > unidos.txt

Resulta em um arquivo delimitado por vírgulas, ou seja, CSV (comma separated value):

a,1
b,2
c,3

terça-feira, 11 de agosto de 2009

Softwares matemáticos poderosos

Um sistema de álgebra computacional é um programa de computador que facilita o cálculo na matemática simbólica, incluindo deste as mais simples operações aritméticas até os mais avançados cálculos numéricos.

Os sistemas de álgebra computacional começaram a aparecer no início da década de 1960 e atualmente os líderes de mercado são o Maple e o Mathematica, sendo ambos freqüentemente usados por matemáticos, pesquisadores, cientistas e engenheiros.

Abaixo segue uma apresentação dos principais softwares de álgebra computacional, alguns comerciais e outros gratuitos mas todos completos o suficiente para oferecer uma poderosa ferramenta nas diversas áreas da matemática:

MATLAB

O MATLAB é um software interativo de alto nível, desenvolvido pela MathWorks, voltado para desenvolvimento de algoritmo, análise de dados e computação numérica. Com o MATLAB é possível resolver problemas computacionais mais rápido do que com o uso das linguagens de programação tradicionais, como C, C++ e Fortran.

O MATLAB pode ser usado para uma grande variedade de aplicações dentre diversas áreas científicas. Dentre suas funcionalidades estão a linguagem de alto nível, gerenciamento de dados, funções matemáticas para álgebra linear, estatística, otimização e integração numérica, e ferramentas para a construção de gráficos 2D e 3D.

O MATLAB é um software comercial e está disponível para Linux, Mac, Solaris e Windows.

http://www.mathworks.com/products/matlab/

Maple

O Maple é um sistema de álgebra computacional desenvolvido pela Maplesoft. Constitui um ambiente para a computação de expressões algébricas, simbólicas, permitindo o desenho de gráficos 2D ou 3D.

Possui uma interface na qual os usuários podem digitar seus cálculos em notação tradicional da matemática, da maneira como seria no papel. Possui um extenso suporte para computação numérica e computação simbólica. Possui também interface para outras linguagens como C, Fortran, Java, MATLAB e Visual Basic.

O Maple é um software comercial e está disponível para Windows, Linux, Mac e Solaris.

http://www.maplesoft.com/products/Maple/index.aspx

Mathematica

O Mathematica é um software computacional para as áreas científicas, como engenharia, matemática e outras áreas de computação técnica. Foi originalmente desenvolvido por Stephen Wolfram e é mantido pela Wolfram Research.

Dentre suas funcionalidades estão funções de matemática elementar, gráficos 2D e 3D, manipulação de dados e matrizes, resolução de sistemas de equações, cálculo, ferramentas numéricas e simbólicas, estatística, ferramentas para processamento de imagem e som, e muito mais.

Possui uma interface de entrada de expressões semelhante à notação humana, além de uma linguagem de programação própria e também ferramentas para conectar com SQL, Java, .NET, C++, FORTRAN e sistemas baseados em HTTP.

O Mathematica é um software comercial e está disponível para Windows, Mac, Linux e Solaris.

http://www.wolfram.com/products/mathematica/index.html

Scilab

O Scilab é um software para computação numérica desenvolvido pelos pesquisadores do INRIA (Institut National de Recherche en Informatique et en Automatique) e do ENPC (École Nationale des Ponts et Chaussées), e atualmente é mantido e desenvolvido pelo Consorcio Scilab.

É semelhante ao MATLAB e fornece um poderoso ambiente computacional aberto para aplicações científicas, incluindo centenas de funções matemáticas com a possibilidade de adicionar programas de várias linguagens, como Fortran, C, C++ ou Java.

Diversas ferramentas estão disponíveis no Scilab, para gráficos 2D e 3D, álgebra linear, matrizes, polinômios, sistemas lineares, funções, estatística e muito mais.

O Scilab é um software gratuito e está disponível para Linux, Windows e Mac.

http://www.scilab.org/

Maxima

O Maxima é um software livre para cálculos matemáticos semelhante ao MATLAB e ao Mathematica. É descendente do Macsyma, foi desenvolvido por William F. Schelter e agora mantido pela comunidade.

O Maxima é um sistema para computação de expressões algébricas e numéricas, incluindo integração e diferenciação, sistemas de equações lineares, polinômios, vetores e matrizes. O maxima produz resultados numéricos precisos e pode gerar gráficos de funções e dados em duas ou três dimensões. É baseado em um núcleo que utiliza a linguagem LISP.

O Maxima é um software gratuito e está disponível para Linux e Windows.

http://maxima.sourceforge.net/

Octave

O GNU Octave é um software livre para cálculos matemáticos escrito por John W. Eaton. O GNU Octave possui uma linguagem de programação de alto nível, programada inicialmente para cálculo numérico. Fornece uma linha de comando conveniente resolvendo problemas lineares e não-lineares numericamente, e executando outras tarefas numéricas usando uma linguagem que é bastante compatível com o MATLAB.

Possui ferramentas para a resolução de problemas lineares numéricos, cálculo de equações não-lineares, funções ordinárias, polinômios e integração numérica de equações diferenciais ordinárias e diferenciais-algébricas.

Pode ser expandido e adaptado através de funções definidas pelo utilizador, escritas na própria linguagem presente ou usando módulos dinamicamente carregados escritos em outras linguagens como C++, C ou Fortran.

O GNU Octave é um software gratuito e está disponível para Linux, Mac, Solaris e Windows.

http://www.gnu.org/software/octave/

segunda-feira, 10 de agosto de 2009

EXIF: Formato de Arquivo de Imagem Intercambiável

O EXIF, que é a sigla para "Exchangeable Image File Format", é um padrão para armazenar informações de intercâmbio em arquivos de imagens fotográficas, especialmente as imagens que usam a compressão JPEG ou TIFF. Este formato é parte do padrão DCF (Regra de Projeto para Sistema de Arquivo de Câmeras) desenvolvido pela JEITA (Associação Japonesa das Indústrias Eletrônicas e de Tecnologia da Informação) para encorajar a interoperabilidade entre dispositivos de imagens.

Provavelmente todas as câmeras fotográficas digitais utilizam este padrão no armazenamento de seus arquivos de fotos. Este padrão une as especificações para os arquivos JPEG ou TIFF, adicionando os caracteres de metadados em cada arquivo de foto.

Estes caracteres de metadados embutidos nos arquivos guardam informações como marca e modelo da câmera, data e hora, resolução, abertura, velocidade do obturador, exposição, velocidade ISO etc. Quase todas as configurações da câmera no momento em que a foto foi realizada são armazenadas por estes caracteres de metadados.

Estas informações são úteis no intercâmbio dos arquivos entre diversos equipamentos fotográficos, principalmente quando se realiza uma cópia impressa da fotografia por equipamentos que se conectam diretamente à câmera.

No computador estas informações podem ser vistas pelo gerenciador de arquivos, por exemplo quando clicamos para ver as propriedades do arquivo, ou através dos softwares de visualização e ou edição de imagens.

Não somente os equipamentos eletrônicos mas nós também podemos tirar proveito destas informações, como por exemplo renomear os arquivos acrescentando a data e a hora de quando as fotografias foram realizadas. Alguns softwares podem fazer isto em lote.

Se você não conhecia o EXIF, procure seus arquivos de fotos digitais e veja por si mesmo estas informações.

Estes sites abaixo fornecem as especificações para o EXIF:

http://www.exif.org/specifications.html
http://www.jeita.or.jp/cgi-bin/standard_e/list.cgi?cateid=1&subcateid=4

domingo, 9 de agosto de 2009

O centro da nossa galáxia

A Via Láctea é a galáxia onde está localizado o nosso sistema solar. É um grande aglomerado de bilhões de estrelas e outros objetos astronômicos unidos por forças gravitacionais e girando em torno de um centro de massa comum. É classificada como sendo uma galáxia espiral e o nosso sistema solar está a uma distância de aproximadamente 26 mil anos-luz do centro.

No centro da nossa galáxia existe um buraco negro supermassivo, em uma localização que é chamada de Sagittarius A*, na direção da constelação de Sagitário. Calcula-se que a massa deste imenso buraco negro central tenha aproximadamente 4,1 milhões de vezes a massa do Sol, em torno de 8,2 x 10^36 kg.

O centro da nossa galáxia é escondido da observação dos telescópios óticos por nuvens obscuras de poeira e gás. No entanto esta obscuridade torna-se transparente quando a observação é realizada pela captação de raios gama, raios X, raios infravermelhos ou ondas de rádio.

O telescópio espacial Spitzer, com câmeras de infravermelho, conseguiu uma impressionante vista que revelou as estrelas que amontoam a região do nosso centro galático, em uma amplitude de 900 anos-luz. Veja a foto abaixo:


A coordenada do nosso centro galático foi primeiramente descoberta por Harlow Shapley em 1918. Pelo sistema equatorial de coordenadas o centro está em: RA 17h45m40.04s e Dec -29°00'28.1" (J2000 epoch). Abaixo, uma imagem gerada pelo software XEphem em uma visão direcionada para o centro da nossa galáxia:


A imagem original do telescópio espacial Spitzer e seus créditos podem ser encontrados pelo endereço: http://www.nasa.gov/multimedia/imagegallery/image_feature_1439.html

sábado, 8 de agosto de 2009

Como executar programas em segundo plano

O Linux, como qualquer sistema UNIX, é um sistema operacional multitarefa, isto é, vários processamentos podem ser executados ao mesmo tempo.

Os processamentos que são controlados diretamente pela tela chamam-se processamentos em primeiro plano. Os outros processamentos que foram inicializados, mas que não se possui controle do usuário sobre eles, chamam-se processamentos em segundo plano. Podemos ter um processamento em primeiro plano, porém muitos processamentos em segundo plano podem ser executados simultaneamente.

Um processo é um programa de execução independente que tem seu próprio conjunto de recursos. No Linux, os recursos do sistema, como a memória e os discos, são gerenciados pelo kernel, que é o núcleo do sistema operacional. Tudo mais no sistema é um processo. Quando você se conecta, seu terminal é controlado pelo seu shell, que é um processo em execução. Então, o shell cria um novo processo sempre que você fornecer um comando para ser executado.

O ambiente gráfico X Window facilita a execução de diversos programas ao mesmo tempo, executando-os praticamente em primeiro plano, pois é fácil alternar entre eles com apenas um clique sobre as janelas abertas. Mas no console, o mesmo não dá para ser feito, então você terá que executar os programas em segundo plano, mantendo somente um em primeiro plano. Para isto coloca-se o símbolo & no final dos comandos, como mostrado no exemplo abaixo:

# gcc prog.c &

O prompt do shell retornará e você poderá continuar executando outros comandos enquanto o primeiro está sendo executado. Antes do prompt ser retornado, o shell informa o número do serviço que é atribuído ao comando e o PID do processo, veja um exemplo:

[1] 411

O [1] é o número do serviço e o 411 é o número de identificação do processo (PID).

Se o programa já estiver sendo executado você deverá usar o comando bg, que põe em segundo plano um processo em execução.

Para isso digite Ctrl-Z, assim o processo recebe um sinal SIGSTOP e o shell interrompe a execução do mesmo, e então use o bg para colocar o processo interrompido no modo de execução em segundo plano e o processo poderá continuar sua execução. Veja a sintaxe do comando:

bg [%id]

%id Número do serviço. É necessário ter o sinal de porcentagem antes.

Exemplo:

# bg %1

Imediatamente após o uso das teclas Ctrl-Z o shell exibe o número do serviço junto com outras informações.

Para retornar o processo ao primeiro plano, use o comando fg que transferirá o controle do terminal para o processo. Sua sintaxe é a mesma do comando bg.

Para descobrir o número do serviço atribuído ao processo use o comando jobs. O comando jobs lista os processos que estão parados ou executando em segundo plano pelo shell. Os processos são ordenados pelo número do serviço que é atribuído ao seu comando. Veja a sintaxe:

jobs [-l]

O parâmetro -l faz com que o comando jobs liste também o PID de cada processo.

Em sua saída o comando jobs retorna, além do número do serviço, o estado do processo, a linha digitada no comando e, opcionalmente, o PID.

Então, quando você for executar um comando que irá demorar para ser concluído e que não é necessário acompanhar as mensagens que possam correr pela tela, coloque a execução deste processo em segundo plano, assim você não precisa esperar o término para executar um novo comando. Isto deixará o seu terminal livre para outras tarefas.

segunda-feira, 3 de agosto de 2009

Problema de Lógica: Afirmação verdadeira ou falsa

Atenção, resposta após o problema, cuidado com os olhos!

Um homem estava em uma expedição e foi capturado por uma tribo indígena. Eles diziam saber tudo e diziam que iam matar o homem branco. No entanto lhe deram uma última chance. Ele teria que fazer uma afirmação qualquer! Se esta afirmação fosse verdadeira, ele seria enforcado. Se a afirmação fosse falsa, ele seria queimado. O que ele teria que dizer para que se livrasse da morte?





RESPOSTA





Como ele seria morto se dissesse qualquer coisa, ele teria que tentar dizer alguma coisa que não fosse nem verdadeira nem falsa. Para isto esta afirmação teria que se contradizer. O homem conseguiu isto utilizando uma afirmação que tivesse como conteúdo o seu fim se dissesse uma afirmação falsa. Neste problema ficaria o seguinte:
- Eu vou morrer queimado!
Considerando esta afirmação verdadeira, a tribo teria que matá-lo enforcado. No entanto, se ele fosse morto enforcado a afirmação seria falsa, tendo ele então que morrer queimado. Voltaria então ao ponto de partida que a afirmação se tornaria verdadeira novamente, tendo ele que morrer enforcado.

sexta-feira, 31 de julho de 2009

Como copiar um texto para a área de transferência do X pela linha de comando

O xclip é um utilitário de linha de comando que proporciona uma interface para a área de transferência do ambiente X Window. Pode ler dados de um arquivo ou da entrada padrão e copiar o conteúdo para a área de transferência do X, para então colar em outra aplicação do ambiente X. O xclip pode também imprimir o conteúdo da área de transferência para a saída padrão ou redirecionar para um arquivo ou outro programa.

Também tem o XSel, um utilitário de linha de comando, similar ao xclip, que pode copiar um conteúdo de e para um arquivo ou entrada e saída padrão, para a área de transferência do ambiente X. Pode inclusive adicionar ou apagar um conteúdo da área de transferência.

Para capturar o conteúdo de um arquivo texto use um dos comandos exemplificados abaixo:

$ xclip -selection clipboard arquivo.txt

$ xsel -b < arquivo.txt

Com estes comandos, o conteúdo do arquivo estará armazenado na área de transferência do ambiente X. Para o sentido inverso, copiar o conteúdo da área de transferência para um arquivo, use um dos comandos abaixo:

$ xclip -selection clipboard -o > arquivo.txt

$ xsel -b > arquivo.txt

Um detalhe, estes dois utilitários, obviamente por interagir com o X, são executados sobre o sistema operacional Linux.