sexta-feira, março 30, 2007

calcfx: A Python Command Line Calculator

Esta é uma calculadora simples para linha de comando que fiz em python, a 'calcfx'.

Ela utiliza a biblioteca numpy e portanto tem funcionalidades bem interessantes. O único probleminha dela é o compilador do python que exige que você utilize sempre o ponto decimal nos números pra evitar que o parser considere alguma operação como de inteiros, onde o resultado parcial sempre acaba arredondado.

Ela pode inclusive resolver uma equação polinomial com o comando roots(array()) da biblioteca numpy.

#!/usr/bin/env python
# oblogdefelix.blogspot.com

import sys,string
from numpy import *

list=sys.argv
if (size(list)>1):
del list[0]
expr=string.join(list,'')
print expr,'='
x=compile(expr,'','eval')
print eval(x)
else:
print 'Usage:'
print ''
print " calcfx 'expression'"
print ''
print 'Ex:'
print " calcfx '3.*sin(pi/4.)'"
print " calcfx 'roots(array([1. 0. -1.]))'"
print ''
print 'Note: always use decimal point or operations can be understood as integer operation:'
print ' 1/2 and 1./2. are 0 and 0.5 respectively.'

Criando arquivos .deb

O formato .deb é considerado um dos melhores e mais importantes padrões para a distribuição de pacotes binários ou de código fonte pra Linux. Ele é adotado pelo Ubuntu e pelo Debian que são talvez os mais importantes projetos abertos de distribuições Desktop e Server de Linux atualmente, respectivamente.

Para fazer um arquivo deb básico, sem scripts de instalação ou desinstalação, que apenas vai guardar seus arquivos em um diretório especifico no sistema é bem simples.

Por exemplo:

Digamos que queremos fazer um arquivo debian para o meu script calcfx que simplesmente vai instalá-lo no diretório /usr/local/bin do sistema Debian destino (e desinstalar quando solicitado).


1. Em seu diretório atual ou de trabalho, crie um subdiretório "debian", "debian/DEBIAN" e defina as permissões 755:

$ mkdir debian
$ mkdir debian/DEBIAN
$ find ./debian -type d | xargs chmod 755

2. Criação do arquivo de controle "control":

Crie o arquivo de controle "debian/DEBIAN/control" e defina o valor dos campos: Package (nome do pacote), Versão (no formato (X.X-X), Section (Categoria), Priority, Architeture, Depends (Lista de pacotes dos quais este pacote depende), Maintainer (Responsável pelo pacote), Description (uma descrição do conteúdo do pacote). Por exemplo, do arquivo "control" da calcfx:

Package: calcfx
Version: 0.1-1
Section: science
Priority: optional
Architecture: all
Depends: python-numpy
Maintainer: Felix Farias

Description: A simple but powerful command line calculator in Python.


4. Criar arvore de diretorios dentro de "debian":

Agora, dentro do diretório "debian" você copia os arquivos e diretórios do seu pacote como se ele fosse a raiz "/" do sistema. Por exemplo, se quero que o script calcfx seja instalado no diretório "/usr/local/bin" no sistema destino:

Supondo que o arquivo calcfx está no seu diretório de trabalho.

mkdir -p debian/usr/local/bin
cp calcfx debian/usr/local/bin

5. Crie o seu pacote debian (debian.deb) com o dpkg-deb e renomei-o como quiser:

$ dpkg-deb --build debian
$ mv debian.deb calcfx_0.1-1_all.deb



Pronto. Agora você fez o seu arquivo .deb e pode instalar e remover facilmente utilizando o comando "dpkg":

$ dpkg -i calcfx_0.1-1_all.deb
$ dpkg -r calcfx


Agora você ja pode ser um maintainer :)

Referências:
Debian-Binary-Package-Building-HOWTO (em inglês)

quinta-feira, março 29, 2007

Contador de letras e palavras

No link abaixo tem um contador de número de caracteres e palavras pra você colar e verificar um resumo para congresso, por exemplo. Ele funciona com javascript e apenas localmente.

Contador de Letras e Palavras


Só tem um probleminha... O algorítmo do javascript dele só considera a ultima palavra se você colocar um espaço depois :/

Olhando o javascript utilizado da pra ver onde está o erro dos caras heehehhee

Mas com essas linhas aqui você pode consertar :)

bonus=0;
...
for(...){
...
if(texto.charAt(x) == " ") {bonus=0}
else {bonus=1}
document.frmCounter.WordCount.value=wordcounter+bonus;
}


terça-feira, março 27, 2007

Problema Matlab 7 em máquinas AMD 64 (Windows)

Existe um problema que acontece com o Matlab 7 (Windows) quando ele é instalado em máquinas AMD 64 bits. Você instala normalmente e quando executa o Matlab ele abre e fecha depois repentinamente. Já havia ouvido relatos deste problema antes, mas como trabalho com Linux nunca me preocupei com isto.

Hoje precisei resolver este problema numa maquina aqui do laboratório e encontrei esse link aqui que descreve a solução do problema (em inglês).

Como este é um problema que muita gente desconhece e acaba não encontrando nada na web sobre isto vou fazer um pequeno resumo, em português, dos passos descritos no link que passei:

1 - Abra o explorer e entre na pasta onde está instalado o Matlab ("C:\Matlab7" por exemplo). Entre no subdiretório 'bin' e depois abra ainda o subdiretório 'win32'.

%MATLAB7%\bin\win32

2 - Neste diretório agora procure o arquivo 'blas.spec' e abra o mesmo com o Wordpad. Ele é um arquivo texto com linhas mais ou menos como as que tão abaixo:

GenuineIntel Family 5 Model * atlas_PPro.dll # Pentium
GenuineIntel Family 6 Model 1 atlas_PPro.dll # Pentium Pro
GenuineIntel Family 6 Model 3 atlas_PII.dll # Pentium II (Klamath)
GenuineIntel Family 6 Model 5 atlas_PII.dll # Pentium II (Deschutes)
GenuineIntel Family 6 Model 6 atlas_PII.dll # Celeron
GenuineIntel Family 6 Model 7 atlas_PIII.dll # Pentium III (Katmai)
GenuineIntel Family 6 Model 8 atlas_PIII.dll # Pentium III (Coppermine)
GenuineIntel Family 6 Model 9 atlas_PIII.dll # Pentium M
GenuineIntel Family 6 Model 10 atlas_PIII.dll # Pentium III (Cascades)
GenuineIntel Family 6 Model 11 atlas_PIII.dll # Pentium III (Mobile)
GenuineIntel Family 6 Model * atlas_PIII.dll # Pentium III
GenuineIntel Family 15 Model * atlas_P4.dll # Pentium 4
AuthenticAMD Family 5 Model * atlas_PII.dll # AMD-K6
AuthenticAMD Family 6 Model * atlas_Athlon.dll # Athlon/Duron
AuthenticAMD Family 15 Model 4 atlas_Athlon.dll # Athlon 64
AuthenticAMD Family 15 Model 5 atlas_Athlon.dll # Opteron


3 - Pra resolver o problema do Matlab vamos adicionar essas duas linhas no final do arquivo aberto:

AuthenticAMD Family 15 Model 12 atlas_Athlon.dll # Athlon 64 (Newcastle)
AuthenticAMD Family 15 Model * atlas_Athlon.dll # AMD64


4 -Depois é só salvar (Ctrl+S).

5 - E iniciar o Matlab.


Boa sorte

segunda-feira, março 26, 2007

Editor de Equações Online

Encontrei essa página aqui com a qual você pode escrever um equação e obter um arquivo de imagem correspondente para inserir em documentos ou páginas da web. A imagem da equação obtida é de alta qualidade e é perfeita pra inserir em uma apresentação ou poster sem aqueles problemas de fonte que costumam acontecer por aí. Pra usar o site você vai apenas precisar dar uma olhada na notação do Latex pra escrever fórmulas.

Vejamos alguns exemplos:

digitando:

y = a x^2 + 2x

você obtem a equação (figura):



Um somatório:

\sum F_y = F_{y_1} + F_{y_2} = 0

obtemos:




E com algumas derivadas e integrais:

\frac{dC_A}{dt} = -k_0 e^{-\frac{E}{RT}} C_a C_b





v_m = \frac{1}{\pi R^2} \int_{0}^{2\pi} \int_{0}^{R} {v_{max} [1-(r/R)^2] r dr d\theta}





Resumindo um pouco da notação Latex para escrever equações:

Subscrito: x_y
(ou {xxx}_y ou x_{yyy} ou {xxx}_{yyy})

Superescrito ou potência: x^y

Fração: \frac{x}{y}

Letras gregas = \theta \beta \alpha
(em inglês)

Somatórios: \sum F = \sum_{i=1}^{n} F_i = 0

Derivadas (um "d" mesmo): \frac{dx}{dy}

Derivadas Parciais: \frac{\partial x}{\partial y}

Integrais indefinidas: \int {f(x) dx}

Integrais definidas: \int_{0}^{1}{f(x) dx}
(como nos somatórios)

Nota: Para aplicar em uma sequencia de mais de um caracter utilize {} para agrupar.