Categorias
Conversão manutenção Programação

encapsulando Fortran em Python

“Estamos tendo dificuldades em encontrar pessoal para dar manutenção e evoluir o nosso programa de calculo de estruturas escrito em Fortran” (CRC).

Bom! Devemos considerar que a linguagem continua sendo usada nas áreas de engenharia e processamento cientifico. Encontrar pessoal qualificado e interessado no desenvolvimento e manutenção de acervo Fortran, realmente pode ser um desafio.

Se a “dor” está na inteface (entrada de dados e apresentação dos resultados), uma primeira possibilidade é o interfaceamento com o Python através da biblioteca F2PY que agora é parte do NumPy.  Scripts Python podem preparar arquivos de entrada para o programa Fortran, que chamado automaticamente, processa e grava arquivos de saida, em formato “combinado” com a continuação do script Python para uma apresentação conveniente.

As limitações desta solução pode estar bem próximas:

  • disponibilidade de mão de obra, agora para manter acervo nas linguagens Fortran e Python. Aqui a obsolecencia não foi programada e a diversidade causa problemas.
  • evolução dos ambientes computacionais (sistemas operacionais, hw, compiladores, etc), provocando a obsolecencia da configuração.
  • novos requisitos para a configuração, demandando evolução da implementação.

O artigo Experience converting a large Fortran-77 program to C++, (de Ralf W. Grosse-Kunstleve, Thomas C. Terwilliger, Paul D. Adams Lawrence Berkeley National Laboratory, One Cyclotron Road, BLDG 64R0121, Berkeley, California, 94720-8118, USA.) dá uma idéia do empreendimento no caso extremo de se querer converter codigo Fortan para C++!

Referrencias:

Categorias
Programação

OpenBiblio – +1 Relatório

OpenBiblio - a library system that's free
um sistema de biblioteca que é livre

Vou anotar aqui as minhas observações sobre a criação de um relatório adicional para a nossa instalação do OpenBiblio (http://cedom.net/biblioteca/).

Sentimos a falta do histórico de um exemplar, para saber por onde ele andou, quem o retirou. Estas são as notas sobre o processo de criação de um tal relatório para a nossa biblioteca. O detalhamento destas notas é condicionado ao processo criativo.

Nada se cria, tudo se copia….

Meu modo básico de criar um novo relatório, eu copio um relatório existente (~/reports/defs/*.rpt) com um novo nome. Se possível, escolho um relatório parecido com o que quero criar….

Identificação

Cada relatório deve ter o seu nome, e cada nome somente deve ser usado para um relatório…. assim,

.title HistoricoCirculacao

alterei a primeira linha do meu novo relatório para ter uma palavra chave para o nome do meu relatório. Sim, esta deve ser somente uma palavra chave, que será o nome do relatório, se quiser que ele seja decodificada em sua lingua local, inclua uma linha de decodificação no arquivo ~/locale/pt/reports.php com o formato

$trans["HistoricoCirculacao"]  = "\$text = 'Histórico de Circulação';";

ainda no tema Identificação cabe definir a linha

.category Circulation

para indicar em que bloco de relatórios, este novo item deve entrar.

… encontrei um relatório muito parecido

Encontrei um relatório muito parecido com o que eu precisava em Reports, assim esta saga de escrever relatórios para a nossa biblioteca ficou para uma próxima oportunidade.

… Relatórios.

  • Acompanhamento de Catalogação ganhou uma nova versão agora com a possibilidade de demarcar a data de inicio e data de fim do periodo de analise. Status : Instalado em testes.
  • Titulos – uma lista de titulos, com a contagem de exemplares. Status: Instalado em testes.
  • Leitores – especialmente preparado para crítica do cadastro de leitores com data de atualização, nome e sobrenome, endereço, telefones, grupo, e contagens. Status: A Desenvolver.

Perguntas

  • Comentários – como eu incluo comentários em meu relatório? afinal quero deixar claro o que estou fazendo para quem for ler este programa.

Referências

  • Reports – uma lista de relatórios prontos que podem ser úteis.
  • WritingReports – a documentação sobre o módulo de relatórios do OpenBiblio na sua versão 0.6x.
  • RPTSyntax – a Sintaxe dos arquivos de configuração de relatórios. Pode não ser realmente completo, mas dá uma boa idéia do que pode ser feito e como fazê-lo.
  • OpenBiblio Customization – encontrei aqui bons recursos adicionais para a nossa instalação do OpenBiblio. Relatórios adicionais com contagem foi bem proveitoso.
  • MySQL Outer Join Tips – algumas dicas de outer join do mysql que ajudam na construação de relatorios.
  • Sintaxe Join – em último caso, sempre recorrer ao manual do MySQL.
Categorias
Programação

Expressões Regulares… RegEx

regex
regex

Isso sempre parece mesmo obra do demonio!!! Mas, o fato é que sempre podemos aprender um pouco mais sobre as expressões regulares e conseguir bons resultados com eles.
Referências:

Categorias
Programação

Python 3.2….

Python3.2
Python3.2

Isso pode ser “colocar o carro á frente dos bois”, mas como cai neste problema, vou procurar registrar aqui as minhas notas para futuras referencias.

O Robot de catalogação de livros em nossa biblioteca foi desenvolvido pelo DN para python3, e funciona bem no Python3.1

$ python3.1

Python 3.1.3 (r313:86834, Mar 25 2011, 20:54:26)

[GCC 4.5.2] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>>

mas, para o Python 3.2 ele não funciona

$ python3.2

Python 3.2 (r32:88445, Mar 25 2011, 19:56:22)

[GCC 4.5.2] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>>

Dando um erro :

$ python3.2 form20d.pyw

Exception in Tkinter callback

Traceback (most recent call last):

File “/usr/lib/python3.2/tkinter/__init__.py”, line 1402, in __call__

return self.func(*args)

File “form20d.pyw”, line 420, in salvarEdicao

cedom.salvarEdicao(self)

File “/home/omy/cedom/robot/robot20d/cedom.py”, line 424, in salvarEdicao

bibid = re.findall(r’new_form.php\?bibid=(\d+)&reset=’, result)[0]

IndexError: list index out of range

A solução óbvia, continuar usando o Python 3.1, funciona! Mas… “no inferno, abrace o diabo!”
O problema está nas diferenciações do tipo str do tipo byte. Na versão 3.2, as funções da urllib passaram a exigir parametros byte, não aceitando mais o formato str.

Categorias
Programação

estudando JavaScript

Estas são as minhas notas dos meus estudos do JavaScript em andamento.