Arquivos

Arquivo para a categoria ‘Computers’

Extendendo Python com C/C++ via PyBindGen e CTypes

sábado, 5 nov 2011; \44\UTC\UTC\k 44 6 comentários

Depois de um tempo sem postar no Ars Physica vim postar sobre algo totalmente diferente do que eu costumo escrever por aqui: programação. Como grande parte dos físicos hoje em dia, meu dia-a-dia consiste em grande parte em escrever programas de computador para resolver problemas e fazer cálculos. Todo começo de projeto de programação impõe um dilema para quem vai dedicar as próximas semanas (ou meses, anos…) escrevendo uma nova ferramenta: que linguagem de programação usar? Eu escolhi a combinação de C/C++ e Python.

As razões para essa escolha são muitas: Python é uma linguagem bastante simples, que permite prototipagem rápida e desenvolvimento de soluções com pouca dor de cabeça, e com uma ampla gama de módulos e bibliotecas prontas para os mais diversos fins (numpy, scipy, matplotlib, entre centenas de outras…). Entretanto código escrito puramente em Python é extremamente lento, por diversas razões. Isso faz com que não seja possível escrever uma simulação em python puro se pretende-se ter resultado em um tempo razoável. O ideal portanto é usar como cavalo de carga uma outra linguagem, que seja capaz de produzir binários eficientes, que rodem rápido no seu computador. Essa linguagem deve ser usada nas partes onde eficiência e tempo de execução são críticos, enquanto o Python pode ser usado para lidar com partes que geralmente são chatas de se fazer nessas linguagens de mais baixo nível: lidar com strings, arquivos, operações de sistema, geração de código, parsing,…

Como exemplo, no meu atual projeto no doutorado eu uso C/C++ para fazer uma simulação de Monte Carlo, e o Python para organizar as simulações, rodar a simulação para diversos valores de parâmetros diferentes, salvar os resultados em arquivos organizadinhos, enviar os processos para rodar nos diversos nós do cluster do departamento, etc.

Existem dezenas de formas de integrar Python com outras linguagens, de C/C++ e Fortran até Haskell e Emacs Lisp. Entretanto até hoje eu usava a mais boba: compilava um programa em C ou C++ que aceitava parâmetros de linha de comando, e de dentro do código do python abria um pipe para chamar o executável C com os parâmetros adequados com uma chamada de sistema. É uma gambiarra que funciona, mas não deixa de ser uma gambiarra. O ideal é compilar o seu código como uma biblioteca compartilhada que exporta objetos que o interpretador do Python consegue ler. A forma padrão de fazer isso é importar o cabeçalho ‘Python.h’ e usar o API contido lá para criar esses objetos. Isso não é exatamente difícil de fazer, mas é um trabalho sacal e bem repetitivo. É bom ter formas de automatizar esse trabalho e apenas se preocupar em escrever bem seu código em C, sem se preocupar se ele vai ser ou não carregado no python depois.

CTypes

Se o seu código é em C (e não C++) a maneira mais fácil de fazer isso é usando o CTypes – um módulo presente na biblioteca padrão do Python capaz de carregar bibliotecas compartilhadas feitas em C. Por exemplo, suponha que você deseja criar uma função que some dois inteiros e retorne o resultado. O código fonte está nos arquivos teste.h e teste.c:

//arquivo: teste.h
int add(int x, int y);

//arquivo: teste.c
#include "teste.h"
int add(int x, int y){
  return (x + y);
}

Note que esse é um código em C “vanilla”, sem nenhuma referência ao fato de que ele será depois usado no Python. Tudo o que é preciso para disponibilizar a função ‘add’ no python é compilar esse código como uma biblioteca compartilhada:

gcc -fPIC -o libteste.o -c teste.c
gcc -shared -o libteste.so libteste.o

Isso deve gerar um arquivo ‘libteste.so’, que é um binário que possui as instruções da função ‘int add(int, int)’ de forma que pode ser acessado por outros binários em C. Para chamar esse binário dentro do Python com o CTypes é muito fácil:

from ctypes import cdll

libteste = cdll.LoadLibrary("./libteste.so")
# eh necessario passar o caminho completo para o binario pois ele nao esta no PYTHONPATH
x = libteste.add(5, 2)
print x

Esse script deve retornar o valor ’7′, conforme esperado. Difícil, né?

Quando sua função retorna um tipo que não seja ‘int’, é necessário ainda informar ao Python qual é o tipo adequado para converter os objetos do python antes de passá-los para a função em C. O CTypes oferece uma gama de tipos correspondentes a todos os tipos que podem ser criados em C padrão:

Tipo no CType Tipo no C Tipo no Python
c_bool _Bool bool (1)
c_char char 1-character string
c_uint unsigned int int/long
c_long long int/long
c_float float float
c_double double float
c_char_p char * (NUL terminated) string or None

Por exemplo, considere a seguinte função:

//arquivo: teste.h
double c_raizq(double x);

//arquivo: teste.c
#include <math.h>
#include "teste.h"

double c_raizq(double x){
  return sqrt(x);
}

Nesse caso, ao abrir a biblioteca (compilada exatamente como antes) será necessário dar mais informação a respeito dos tipos dessa função:

from ctypes import cdll
from ctypes import *

libtest = cdll.LoadLibrary("./libtest.so")
raiz = libtest.c_raizq
raiz.restype  = c_double
raiz.argtypes = [c_double]

x = raiz(2)

print x

Toda função importada do C tem as duas propriedades ‘restype’ – que é o tipo que a função deve retornar – e ‘argtypes’ – que é uma lista dos tipos que essa função recebe como parâmetros, na ordem em que eles aparecem no código em C.

Quando for necessário usar ponteiros, arrays, structs ou enums, a coisa pode ficar um pouquinho mais complicada, mas nada que faça o código crescer muito mais do que isso. Por exemplo, suponha que queremos exportar o seguinte código para o Python:

//arquivo: teste.h

struct cvec{
  double x;
  double y;
};

typedef struct cvec vector;
double norm(vector * point);  

//arquivo: teste.c

#include "teste.h"
#include <math.h>

double norm(vector * point){
  return sqrt(point->x * point->x + point->y * point->y);
}

Precisamos de uma estrutura similar ao struct ‘vector’ e de portar a função ‘norm’. Note que o argumento dessa função é um ponteiro para a struct vector. O código Python para fazer isso segue abaixo:

from ctypes import cdll
from ctypes import *

#imitando a struct vector 
class vector(Structure):
    _fields_ = [("x", c_double) ,
                ("y", c_double)]

libtest = cdll.LoadLibrary("./libtest.so")
norm = libtest.norm
norm.restype  = c_double
norm.argtypes = [POINTER(vector)]

vecc = vector(5,2)
print norm(pointer(vecc))

A classe vector imita a estrutura do struct vector, e as funções POINTER e pointer são usadas respectivamente para informar que o tipo do argumento é um ponteiro e obter um ponteiro para o objeto ‘vecc’. Structs e unions deve ser replicadas no Python por classes que herdam das superclasses Structure e Union, respectivamente.

Enfim, o CTypes fornece um API completo para usar qualquer código C padrão dentro do Python com um mínimo de boilerplate e nenhuma interferência no código original. Não é preciso reescrever suas funções nem entender a estrutura do API do Python. Apenas compilar seu código como uma biblioteca compartilhada.

PyBindGen

Infelizmente o CTypes não é capaz de ler binários de C++. A razão é simples: não existe um padrão para os binários de C++ e cada compilador implementa interfaces diferentes para seus binários. A esperança é que com o estabelecimento do padrão C++11 isso possa ser resolvido, mas isso é uma questão para o futuro. No entanto existe uma biblioteca feita em Python capaz de gerar bindings de códigos em C++ sem interferir no código e com o mínimo de esforço. Por exemplo, suponha que temos uma classe feita em C++ que representa pontos em 2 dimensões, com alguns métodos úteis:

//arquivo Vector.hpp
#include <cmath>
class Vector {
private:
  double x;
  double y;
public:
  Vector(double _x, double _y) : x(_x), y(_y) {}; //construtor

  double norm();               // retorna tamanho do vector
  void reflectO();           // reflete o vetor através da origem
  void rotate(double theta); // roda o vetor em torno da origem por um angulo theta
};

//arquivo Vector.cpp
#include "Vector.hpp"

double Vector::norm() {
  return x*x + y*y;
}

void Vector::reflectO(){
  x = -x;
  y = -y;x
}

void Vector::rotate(double theta){
  double xx = cos(theta) * x - sin(theta) * y;
  double yy = sin(theta) * x + cos(theta) * y;
  x = xx;
  y = yy;
}

Essa classe cria um vetor com duas componentes, com métodos que calculam a norma, refletem o vetor através da origem e rodam por um certo angulo. Para tornar essa classe disponível para o Python é preciso criar um script que gera automaticamente os bindings que devem ser então compilados em um módulo. A estrutura do script é bem simples – primeiro você deve criar um módulo e adicionar ao módulo a classe que deseja exportar, e em seguida adicionar os métodos à classe:

#arquivo: setupBinding.py
#! /usr/bin/env python

import sys
import pybindgen
from pybindgen import param, retval

#Modulo Vector
mod = pybindgen.Module("Vector")

#o modulo inclui o header Vector.hpp
mod.add_include('"Vector.hpp"')

#Adicionando a classe:
klass = mod.add_class('Vector')

#Adicionando o construtor:
klass.add_constructor([param('double', '_x'), param('double', '_y')])

#Adicionando os metodos:
klass.add_method('norm', retval('double'), [])
klass.add_method('reflectO', None, [])
klass.add_method('rotate'  , None, [param('double', 'theta')])

#imprime o binding na tela
mod.generate(sys.stdout)

Note a sintaxe dos comandos:

  • add_constructor([param('tipo', 'nome'),…]) – essa função recebe uma lista com os parametros que o construtor recebe. Se houver mais de um construtor, eles devem ser todos adicionados em sequencia.
  • add_method(‘nome’, retval(‘tipo de retorno’), [param('tipo_do_parametro1', 'nome1'), …]) – essa função recebe o nome do método, o tipo do valor que o método retorna e uma lista com os tipos dos parametros de entrada.

Ao rodar esse script com ‘python setupBinding.py’, ele imprime na tela um código em C que é um binding para o código contido em ‘Vector.cpp’ e ‘Vector.hpp’. Ao compilar esses bindings, teremos um módulo Vector que pode ser importado dentro do python como qualquer outro módulo:

import Vector

foo = Vector.Vector(1,2)
print foo.norm()
foo.rotate(0.2)

Compilar esse módulo é só um pouquinho mais complicado do que no caso do CTypes. Em primeiro lugar é preciso compilar uma biblioteca compartilhada como anteriormente:

g++ -fPIC -c -o libvector.o  Vector.cpp
g++ -shared  -o libvector.so libvector.o

sh Isso cria os arquivos ‘libvector.o’ e ‘libvector.so’. E então devemos gerar os bindings:

python setupBinding.py > bindVector.c

sh E compilar uma biblioteca compartilhada com os bindings:

g++ -fPIC -I/usr/include/python2.7 -c -o bindVector.o bindVector.c
g++ -shared -o Vector.so -L. -lvector bindVector.o

Note que é preciso passar para o compilador o caminho para os headers do python no seu sistema – no meu caso a versão 2.7 do python no linux está em ‘usr/include/python2.7‘. Também é preciso passar para o linker o caminho atual, onde está os arquivos ‘libvector.so’ e ‘libvector.o’ – que é a pasta atual onde a compilação está sendo feita. Isso é feito com as flag “-L. -lvector”. Isso cria o arquivo Vector.so, que contém o módulo Python que pode ser carregado através do comando “import”. Note que o nome do arquivo deve ser o mesmo nome do módulo conforme adicionado no script que gerou os bindings.

Antes de tentar importar o arquivo no python, é preciso adicionar o caminho onde o arquivo ‘Vector.so’ se encontra nas variáveis de ambiente PYTHONPATH e LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
export PYTHONPATH=$PYTHONPATH:.

Agora o módulo Vector pode ser usado normalmente:

import Vector

foo = Vector.Vector(1,2)
print foo.norm()
foo.rotate(0.2)

Enfim. Espero que isso ajude quem, como eu, vem quebrando a cabeça com isso a muito tempo e já testou diversas ferramentas (SWIG, SIP, Cython/Pyrex, Boost::Python, etc, etc, etc… ). As documentações oficiais das ferramentas usadas nesse post podem ser encontradas aqui:

Conferência da Divisão de Partículas e Campos de APS…

segunda-feira, 8 ago 2011; \32\UTC\UTC\k 32 Deixe um comentário

Hoje (segunda-feira, 08-Ago-2011) começa a edição de 2011 da Conferência da Divisão de Partículas e Campos da American Physical Society.

O programa da Conferência pode ser encontrado no link de ‘Schedule’ da mesma.

Mais ainda, os “proceedings” da Conferência serão publicados através do eConf.

Há também uma página para a Conferência no Indico do CERN, DPF2011 @ Indico/CERN. (A razão pra essa duplicação de esforços está fora da minha alçada (coisas da dicotomia de se passar o tempo dividido entre duas insituições) — quando me chamaram pra ajudar na organização da DPF2011 esse tipo de decisão já havia sido tomada. :razz:)

De qualquer maneira, essa página no Indico contém links para os Resumos das palestras e posteres, índice dos autores e palestrantes. Em particular, nestas listagens e índices é possível se encontrar os PDF que já foram carregados para o servidor.

Eu e o Rafael estamos atendendo a DPF2011. Então, vcs podem esperar por twittadas, fotos, posts, etc, etc, etc… provavelmente não no estilo “cobertura ao vivo”, uma vez que tudo vai ser meio corrido, mas fica aí aberto o canal pra quem quiser fazer perguntas ou participar de alguma outra maneira. :wink:

As cidades mais científicas do mundo…

sábado, 19 mar 2011; \11\UTC\UTC\k 11 Deixe um comentário

O Physics arXiv blog publicou uma matéria interessante. Mas, antes de falar da notícia, eu tenho que avisar que não estou entre os maiores fãs desse blog — na verdade, minha opinião flutua bastante: alguns artigos são bons, outros ficam bem longe disso… mas, em todos os casos, o Physics arXiv blog é bem enviesado (a seleção dos tópicos que aparecem por lá deixa isso claro além de qualquer dúvida, isso pra não falar sobre o nível das discussões, sempre bem ‘passageiro’) — e isso sempre me incomoda muito.

De qualquer forma, e sem mais delongas… eis o artigo: Mashups Reveal World’s Top Scientific Cities. O original pode ser lido diretamente nos arXivs: Which cities produce worldwide more excellent papers than can be expected? A new mapping approach—using Google Maps—based on statistical significance testing.

A discussão no ‘Physics arXiv blog’ não passa de “mais do mesmo”: ciênci-o-metria. Infelizmente, perde-se a chance de se avaliar o artigo propriamente dito, escolhendo-se apenas notificar a “mensagem” contida no mesmo. Parece até mesmo um órgão de Relações Públicas, apenas alardeando e propagandeando.

O artigo propriamente dito é de tão baixa qualidade que a vontade que se tem é de apenas se repetir o adágio invisível, que diz que os artigos dos arXivs não escritos em [La]TeX são sempre de qualidade duvidosa — pior ainda quando são escritos em Word, ou algum editor de pior qualidade ainda; sem identação apropriada (quem ainda usa ‘identação à esquerda’, ao invés de ‘justificado’? :razz:): via de regra, a falta de atenção a esse tipo de detalhe num artigo costuma refletir a baixa qualidade do material escrito. Mas, como eu disse, esse é apenas um “adágio invisível”, uma unspoken rule, que não se vê, não se ouve, e cujo perfume não se sente. :oops: :roll:

De qualquer forma, a máquina de salsicha continua na ativa: como se mensurar o imensurável: quais trabalhos científicos têm mais qualidade, quais são mais dignos de fomento, quais têm mais impacto na comunidade?

Todas essas são questões relevantes, claro, mas uma lição que a Ciência tem que aprender com a Arte é que a medição da criatividade é algo estupidamente difícil. Aliás, nem é preciso se apelar para o lado mais humanista desta questão: basta apenas se aprender Sistemas Dinâmicos corretamente (o que, de fato, parece ser algo tão complicado quanto nos dias de hoje). A razão deste meu argumento é bem simples: como se pode avaliar algo que possui resultados de médio a longo prazo (sem esperarmos por tal prazo)?

A resposta é simples: não é possível se avaliar nada que dependa de médio a longo prazo sem esperarmos tal prazo passar e medirmos o resultado efetivo do que se deseja avaliar. Ou seja, precisamos esperar o tempo passar pra podermos sequer ter a chance de sermos justos nesta empreitada! Ou seja, falando um pouco mais rigorosamente, é preciso termos acesso a todos os dados para podermos conhecer o problema de modo completo.

Infelizmente, com a idéia de que as Universidades devem ser “profissionalizadas” (sabe-se lá o que isso significa :razz:) e, mais ainda, de que toda a empreitada científica deve ser “profissionalizada”, todo esse tipo de questão métrica se torna relevante: como se pode escolher aquilo que há de “melhor” para se fomentar? Assim como numa empresa, numa linha de montagem, é preciso haver alguma forma de “selo de garantia”, alguma forma de “controle de qualidade”. (Note que não estou falando do processo de ensino de estudantes, mas sim de pesquisa científica — falar de ensino por si só abriria outra Caixa de Pandora!)

Entretanto, ao contrário de empresas, fábricas e linhas de montagem, Universidades e Pesquisa Científica [fundamental] possuem planos de ação, missões, de longo prazo, de longuíssimo prazo: há universidades com cerca de 1000 anos de existência: quantas empresas, fábricas e linhas de montagem podem dizer o mesmo?! A própria Revolução Industrial tem apenas cerca de 250 anos!

Felizmente ou não, esta é a natureza da busca pelo conhecimento, e este é o papel da Ciência, principalmente daquela dita fundamental (que costuma dar frutos bem distante das aplicações do dia-a-dia). Por outro lado, hoje em dia, na nossa Era da Informação, é possível se converter algo tão abstrato quanto Teoria dos Grafos em compiladores e navegadores. Este é o caminho da Ciência e do Conhecimento: a menos que se tenha acesso a toda informação, só se pode ver aquilo que está no curto prazo… :wink:

Isso tudo só server pra fazer com qua a analogia posta acima — entre Sistemas Dinâmicos e Funções de Partição — fique ainda mais clara aos olhos: quando vc tem acesso à Função de Partição dum problema, vc tem em mãos toda a informação necessária pra resolver o problema completamente; no caso de Sistemas Dinâmicos, como o nome indica (dependência temporal), é muito difícil de se calcular o que vai acontecer no futuro (não-linearidades, caos, etc). E, no final das contas, tudo que se quer medir são os Fenômenos Críticos, as Transições de Fases, e as Propriedades de Escala do sistema em questão.

A mensagem é clara: sem uma visão mais global é impossível se poder qualificar e medir justamente um trabalho científico. Incontáveis exemplos, de Einstein à Wilson, todos nobelistas, jamais teriam os “índices” e os “fatores de impacto” necessários, hoje, para serem contratados em regime de ‘tenure track’ — isso é claro pra qualquer um que já tenha feito o exercício mental requerido por esta questão.

Algumas empresas e alguns nichos industriais já descobriram esse fato básico da natureza humana… aliás, no âmbito de Sistemas Dinâmicos tudo isso tem nome: Cisne Negro e Dragões Reis. :twisted:

Infelizmente, parece que esse aprendizado e essa mensagem ainda não chegaram na academia — um fato bem irônico, posto que a academia é o lugar onde tais idéias (transições de fase, cisne negros e dragões reis) nasceram! :oops: Então, por enquanto, nós ainda vamos nos debelando com índices e fatores de impacto e outras bobeiras afins. Eu gostaria que fosse feito um estudo com as revistas de maior impacto, procurando-se saber quantos dos artigos publicados nestas revistas deram origens a novos caminhos e novos ramos em seus respectivos campos da Ciência. Taí uma perguntinha bem capiciosa e que por motivos “mágicos” ainda ninguém teve a idéia de responder… :roll: (Diquinha: eu não me lembro de Einstein ter publicado na Nature nem na Science, então nem as Relatividades nem a Mecânica Quântica (ou Teoria Quântica de Campos) tiveram suas origens nas revistas ditas de alto impacto; o mesmo vale, por exemplo, para as chamadas Transições Quânticas de Fase: o Kosterlitz não publicou numa revista de alto impacto — aliás, porque ninguém pergunta pro Kosterlitz o que ele pensa disso tudo, afinal de contas ele deu origem a todo um ramo da Física, logo deve saber o que significa “alto impacto científico”, não?! :razz:)

Pra finalizar, vou apenas me resignar a dizer que a análise estatística feita no tal artigo é de baixa qualidade, não apenas porque não leva em conta os cisnes negros e os dragões reis, mas também porque não leva em conta tantos outros métodos que a tornariam bem mais robusta. É uma pena, porque os “efeitos visuais”, os “efeitos especiais”, do artigo são bem bonitinhos… [bonitinhos mas ordinários! :razz:]

[]‘s.

Atualizado (2011-Mar-19 @ 11:15h EDT): Ah… a ironia do destino. Assim que acabei de escrever o post acima, trombei no seguinte livro: Little Bets: How Breakthrough Ideas Emerge from Small Discoveries. O ponto do livro é clararamente exposto no título, mas também já foi feito por Asimov,

“The most exciting phrase to hear in science, the one that heralds new discoveries, is not ‘Eureka!’ (I’ve found it!), but ‘That’s funny…’”

Isaac Asimov.

Experimentação, passo-a-passo, erros e mais erros… é assim que se faz Ciência: a idéia de que pesquisa e progresso é feito através duma seqüência de ‘acertos’, de passos corretos, não poderia estar mais distante da realidade… c’est la vie

Testando o Prezi…

quinta-feira, 3 mar 2011; \09\UTC\UTC\k 09 1 comentário

Quem ainda não conhece, está marcando touca: o Prezi é uma ferramenta de apresentações bastante inovadora, chamada de zooming presentation, que tenta mudar radicalmente o fluxo duma apresentação arroz-com-feijão. :cool:

Pra quem tem emails acadêmicos (estudantes e professores), é possível se registrar no Prezi com algumas vantagens. Para maiores informações, dêm uma olhada em Contas Educacionais.

E, finalmente, quem quiser inserir uma apresentação do Prezi no WordPress… :twisted:

Diversão garantida!

Zipcast e TED Conversations…

quarta-feira, 16 fev 2011; \07\UTC\UTC\k 07 3 comentários

Dois lançamentos nesta semana estão marcando um passo interessante na Web2.0:

  • Zipcast: é um programa para ‘webconference’ que roda em HTML5, i.e., é um formato nativo em qualquer navegador moderno que suporte HTML5. O serviço é provido pelo SlideShare, que é um site que provê o serviço de compartilhação de palestras e apresentações (transparências, slides) — basta vc abrir a apresentação que deseja (sua mesmo, devidamente carregada no SlideShare; ou qualquer outra apresentação disponível no site) e clicar para inicializar uma seção de Zipcast. Aí basta vc convidar seus amigos e pronto: sua webconference está em ação. ;-)
  • TED | Conversations: Essencialmente, é um fórum de discussões promovido pelo TED, onde os usuários interagem através de debates, perguntas, ou propondo idéias. Quem quiser maiores informações pode dar uma olhada em Getting started. ;-)

Vale a pena conferir ambos… como o Zipcast roda em HTML5, é bem possível que ele se torne uma plataforma robusta de webconference (competindo com o EVO e até mesmo com as versões mais modernas do Skype, que permitem ‘conference calls’ com vídeo de mais de uma pessoa). O TED todo mundo já deve conhecer, então, quem sabe a qualidade do ‘Conversations’ não é mantida em pé-de-igualdade com a das palestras. ;-)

As usual, you can use Google Translate to convert this post from pt_BR to en_US.

Would the Bard Have Survived the Web?

terça-feira, 15 fev 2011; \07\UTC\UTC\k 07 3 comentários

O New York Times tem um artigo de opinião de hoje entitulado Would the Bard Have Survived the Web? (“Teriam os menestréis sobrevivido a Internet?”, tradução livre). Vcs podem ler o artigo em Inglês seguindo o link acima, ou, se preferirem, podem ler a tradução para pt_BR via Google Translate.

Aqui vão meus comentários sobre o assunto:

  • Poor understanding of the concept of “market”, as it was done in the past and as it is done today, in our “Information Era”;
  • Poor understanding of the concept of “intellectual property” and “copyright”;
  • Pathetically dismissive argument against “[a] handful of law professors and other experts”: a 6-line paragraph? Out of which, only a single phrase address the actual point?! Seriously, this is the best these 3 people could do to ground their defense in solid and robust arguments?! They couldn’t even come up with a typical list of pros and cons? Deconstructing this 1-paragraph argument is really a silly exercise: the misunderstanding of the differences between “Science” and “Technology” is enough to make this 1-paragraph self-destructive. This is pretty shameful… :-(
  • Here are a couple of question that i would like answer: if “Science” had patented some of its *basic* and *fundamental* research outcomes, like the following, what would these same folks be saying, what would their tune be: electromagnetism (TV, radio), quantum mechanics (modern electronics, semiconductor devices, X-rays, MRIs, etc), general relativity (GPS; fluid mechanics: think missiles and torpedos)? What would happen if all of these *fundamental research* discoveries had been patented, copyrighted and “intellectual property-ed”?! Science, Physics in fact, would definitely not need any government support today, nor run the risk to have DOE’s budget completely slashed (regarding research support).
  • And, the cherry on the top of this piece, is the constant comparison with the Dark Ages, with the Medieval Times… seriously: the world really did not change since then?! Over 300 years have passed and the best these 3 gentlemen can do is propose a “market” as it was done over 3 centuries ago? This is their *very best* solution to address their “problem”? Do they even understand that the very concept of “market” has changed in these 3 centuries? Do they understand that the very core of their issue is exactly the grasping to understand what the “Web” really means and how to best use it? Do they realize that people don’t quite know what to do with this deluge of information and possibilities coming from the Web? :sigh: :-(

O futuro da revisão-por-pares…

terça-feira, 8 fev 2011; \06\UTC\UTC\k 06 2 comentários

Depois da invenção dos arXivs, o problema de distribuição de publicações científicas foi efetivamente resolvido. Dessa forma, o papel dos jornais acadêmicos ficou essencialmente resumido à revisão-por-pares. Ou seja, no frigir dos ovos, o valor agregado que as jornais acadêmicos acrescentam aos artigos é apenas a revisão-por-pares, uma vez que a distribuição desses artigos não é mais problema na Era da Informação.

[N.B.: Pense em termos de uns 400 anos atrás, na época de Galileu: era preciso um manuscrito viajar de cavalo ou barco para que sua distribuição fosse efetivada. Claro que as coisas melhoraram com o correio moderno e com a invenção dos aviões... mas, no final das contas, o processo de distribuição continuava o mesmo em sua natureza: era preciso haver uma mudança física, mecânica, de um lugar para outro. Hoje em dia isso não é mais verdade: organizar, colecionar e distribuir artigos é uma tarefa essencialmente trivial: o exemplo dos arXivs sendo o mais gritante, e PLoS sendo um segundo exemplo. Infelizmente, eu não conheço nenhum esforço dessa natureza Free-Open Access nas Humanidades nem nas Ciências Sociais: seria muito interessante conhecer esforços nessas direções.]

Entretanto, atualmente há também um movimento para “aliviar” os jornais acadêmicos inclusive dessa atividade:

Felizmente (ou não :-P ), esta não é uma idéia nova: esforços nesta direção já têm sido promovidos há anos. Vejam os exemplos abaixo,

Esses esforços costumam vir sob o nome de Ciência 2.0 — apesar de que, atualmente, já está se falando em Ciência 3.0!

[N.B.: Resumidamente, o "2.0" significa a incorporação das ferramentas de Web 2.0, enquanto que o "3.0" significa que metadata é usada de modo "decente" (ie, como a coisa foi designed para funcionar ;-) ).]

Mais ainda, há movimentos em direções ainda mais ambiciosas, como os abaixo,

Tanto o MathJobs quanto o AcademicJobsOnline têm o intuito de organizar e facilitar a busca de empregos (postdocs, professores, etc) em Matemática e Ciências em geral, respectivamente. Isso tem melhorado o processo infinitamente: antigamente, era preciso se escrever cartas de aplicação para diversas (até centenas!) e instituições; hoje em dia basta vc carregar seu material nesses sites e selecionar os empregos que vc gostou — o resto acontece automaGicamante. 8-)

De fato, nossa Era Digital trouxe ferramentas absolutamente fantásticas, que conectam o mundo da pesquisa de modo nunca d’antes navegado… Claro, como toda espada, esta também tem dois gumes: o ‘lado negro’ de toda essa facilidade e conectividade é o atual campo da cienciometria, onde se acredita que é possível se mensurar “criatividade científica” através de índices que, na melhor das hipóteses, são apenas parciais (ie, são índices cujo significado estatístico é questionável).

Enfim, este é um momento bastante conturbado… mas que certamente não deixará “pedra sobre pedra”. ;-)

This post translated to English (en_US) (courtesy of Google Translate).

Café científicos levando ciência para o público leigo…

terça-feira, 8 fev 2011; \06\UTC\UTC\k 06 3 comentários

Está aí uma iniciativa excelente que está demorando para go viral:

Os Cafés Científicos são uma idéia que, pessoalmente, eu considero brilhante: um cenário informal, relaxado, onde as pessoas podem ouvir algum palestrante falar sobre Ciência — e, melhor ainda, depois da palestra, debater sobre o que foi dito. Aliás, de fato, o foco é maior no debate do que na palestra propriamente dita: a idéia é passar a informação de modo bem objetivo e, depois, deixar a platéia guiar a discussão.

Quem faz Ciência sabe: deixar a curiosidade ( :!: ) guiar o debate científico é uma das formas mais entusiasmantes de se fomentar a criatividade. Essas digressões tangenciais que aparecem a todo momento nesse tipo de discussão são fundamentais pra se ‘mapear’ o ‘espaço’ do assunto sendo atacado. Quem não conhece, pode achar esse approach meio caótico… mas, é um método excelente pra se obter uma ‘imagem’ do objeto em questão.

O realejo do dia…

quinta-feira, 27 jan 2011; \04\UTC\UTC\k 04 5 comentários

Será que é preciso mudar alguns paradigmas de Educação?

Algumas perguntas:

  • “O que o vídeo acima implica sobre a ‘logística escolar’ (como comparar a ‘linha de montagem escolar’ com a ‘linha de montagem da Toyota’)?”
  • “O que o vídeo implica para esforços de Open- e Free-Access?”
  • “O que o vídeo implica para estudos multi- e inter-disciplinares?”
  • “O que o vídeo implica sobre Science2.0 e 3.0?”
  • “O que o vídeo implica sobre as ‘propriedades de escala’ dos nossos sistemas de administração (educação, saúde, segurança, etc)?”

Muitos (senão todos) dos métodos que temos hoje sobre governança e administração evoluíram dos originais criados para administrar nações de cerca de alguns [poucos] milhões de pessoas — o que fazer, então, quando as nossas nações têm centenas de milhões de pessoas?! Será que esses mecanismos escalam de modo apropriado?

P.S.: Só pra apimentar: Why Our Best Officers Are Leaving — Será que estamos escolhendo e mantendo nossos melhores cientistas? Será que há problemas em comum com os relacionados neste artigo? Como este artigo se relaciona com o vídeo acima?

Robust Discretization Schemes…

quarta-feira, 26 jan 2011; \04\UTC\UTC\k 04 3 comentários

ResearchBlogging.org

Today, the following article came up on the arXivs:

This is all fine and dandy… but my question is: “How does this paper (above) compare to the following”:

That is, GR is naturally written in terms of [pseudo-]differential forms (aka tensor densities), so the methods described above should be very appropriate to attack the problem of discretizing the path integral in such a way as to retain its symmetries.

» Robert Oeckl (2005). DISCRETE GAUGE THEORY: From Lattices to TQFT World Scientific eBooks, 1-216 DOI: 10.1142/9781860947377

História do Mundo, em menos de 5 minutos…

quarta-feira, 1 dez 2010; \48\UTC\UTC\k 48 1 comentário

Hans Rosling ataca mais uma vez! :twisted:

Reconstrução 3D via fotos…

sábado, 27 nov 2010; \47\UTC\UTC\k 47 Deixe um comentário

Só pra animar um pouco esse sábado cinzento daqui, aqui vai uma notícia bem legal: 3-D mashup of Rome from Flickr pics.

Ou seja, fizeram uma reconstrução 3D — de monumentos em cidades como Roma e Berlim — a partir de fotos disponíveis publicamente (e.g., Flickr e Google Images). Tecnologia sensacional! :twisted:

[N.B.: Versão no Twitter.]

Comunidades e Grupos Criativos dentro da Ciência 2.0…

sexta-feira, 30 jul 2010; \30\UTC\UTC\k 30 Deixe um comentário

Eu pretendo expandir esse post com comentários e observações pertinentes. Mas, por enquanto, vou usá-lo como um ‘cabide’ para os links abaixo, que são muito interessantes e já vêm me atiçando há tempos pra escrever esse post (eu ando sem tempo :razz: )

No intuito de tornar essa experiência criativa ainda mais interativa, não posso esquecer de mencionar o TwitCam e o TwitVid: enquanto o TwitCam é um serviço em tempo real (incluindo um campo para interação com a audiência via Twitter), o TwitVid é um serviço nos moldes do YouTube (mas com um limite maior para o tamanho do vídeo :wink: ).

Uma outra plataforma para interação em tempo real, com um bom grupo de funcionalidades, é o EVO. Aliás, aqui no AP, nós já tentamos usar o EVO para os Encontros do Ars Physica.

Bom, esse é o amontoado de idéias desconexas que eu tinha pra deixar por aqui… por enquanto… :twisted:

Atualizado (2010-Jul-31 @ 2240h EDT): O Carlos Hota escreveu um post interessante no blog dele, e eu deixei um comentário bem grande… nos moldes do que eu queria ter escrito aqui: não coloquei aqui, mas pus lá. :cool:

Relendo o texto, agora, acho que poderia tê-lo escrito melhor… mas, c’est la vie… Aí vai o link: Comentário sobre “aprendendo a voar”.

Semantic Web: Web 3.0…

domingo, 16 mai 2010; \19\UTC\UTC\k 19 Deixe um comentário

Quem quiser ver um pouco mais sobre o assunto,

O mais incrível disso tudo é que a idéia original do TBL sempre foi essa: usar metadata pra “organizar” e “concatenar” a informação. Entretanto, infelizmente, apenas agora (quantas décadas depois da “invenção” da web? :razz: ) a idéia original está sendo apreciada como se deve.

Cálculo Exterior para Elementos Finitos…

sábado, 6 mar 2010; \09\UTC\UTC\k 09 Deixe um comentário

ResearchBlogging.org

O artigo Finite element exterior calculus: from Hodge theory to numerical stability trata dum tópico que eu gosto muito: análise numérica feita com ferramentas modernas (e.g., Cohomologia de de Rham e Teoria de Hodge).

Meu interesse sobre esse tipo de tópico começou cedo, quando na graduação eu comecei a lidar com problemas numéricos. A noção de que a estabilidade e convergência do método numérico deveria variar com a particular discretização (“mesh”) escolhida sempre ficou atrás da minha orelha. Mas, naquelas épocas, ainda estando na graduação, pouco era possível se fazer. Mas a vontade de aplicar essas idéias em Lattice Gauge Theory sempre me provocou. :wink:

Um pouco mais tarde, já na pós (mestrado), eu trombei com alguns artigos interessantes que, novamente, morderam essa mesma pulguinha,

Meu interesse por esses artigos era claro: o esquema de discretização deles tenta preservar as simetrias de Lie do problema original. Isso é particularmente importante se o objetivo é simular problemas que envolvem Quebra de Simetria! :idea: :cool:

Um pouco de tempo depois… me aparece o seguinte artigo, A Discrete Exterior Calculus and Electromagnetic Theory on a Lattice; que, mais tarde, seria seguido pelos seguintes artigos: Discrete Differential Geometry on Causal Graphs e Differential Geometry in Computational Electromagnetics.

A idéia, então, era novamente clara: aplicar esse mecanismo de Cálculo Exterior Discreto em Teorias de Gauge! :idea: :cool:

Afinal de contas, quem sabe, não daria pra juntar ambas as idéias: usar Cálculo Exterior Discreto de forma a preservar as simetrias [de Lie] do problema no contínuo :!: O que será que poderia sair daí?! (De fato, não tenho a menor noção, infelizmente nunca tive tempo de voltar e morder essa questão. Mas, taí um problema prum doutorado… :wink: )

Bom, depois de tudo isso, aparece o artigo que motivou esse post — eu tinha que falar alguma coisa a respeito dele.

Na verdade, esse artigo vai mais longe, extendendo o trabalho feito anteriormente, definindo apropriadamente uma Teoria de Hodge para Elementos Finitos, e avaliando as conseqüências para a consistência (“well-posedness of the Cauchy problem”; algo que varia muito com as particularidades da questão em mãos) e estabilidade numérica do problema. Portanto, as técnicas disponíveis agora são muito mais robustas! (O que só me deixa cada vez mais curioso pra saber a resposta das questões acima… :wink: )

É isso aí: a leitura é excelente, a diversão é garantida… e eu não me responsabilizo por noites de sono perdidas (por causa das questões acima)! :twisted:

Referências

  • Arnold, D., Falk, R., & Winther, R. (2010). Finite element exterior calculus: from Hodge theory to numerical stability Bulletin of the American Mathematical Society, 47 (2), 281-354 DOI: 10.1090/S0273-0979-10-01278-4

As melhores ferramentas de colaboração online…

quarta-feira, 17 fev 2010; \07\UTC\UTC\k 07 Deixe um comentário

Eu trombei no Mind Map abaixo, que faz uma lista (com recomendações quando necessário) das melhores ferramentas de colaboração online de 2009, e achei que vcs pudessem gostar e aproveitar também. :wink:

Best Online Collaboration Tools 2009; by Robin Good

Best Online Collaboration Tools 2009

(Versão PDF da imagem acima: Best Online Collaboration Tools 2009, by Robin Good (PDF, 220Kb).)

Quem tiver mais dicas, ou achar que faltou alguma coisa no MindMap acima… é só mandar pau nos comentários! :twisted:

Google Public DNS…

quinta-feira, 3 dez 2009; \49\UTC\UTC\k 49 Deixe um comentário

Hoje o Google pôs no ar um serviço de DNS,

A TechCrunch tem alguns comentários em Google Gets Into The DNS Business. Here’s What That Means; e o LifeHacker também tem alguns comentários, Google Public DNS Aims to Speed Up Your Browsing [DNS].

Vale a pena dar uma testada: os benchmarks que eu fiz por aqui foram bastante positivos. (E, claro, eu me empolguei um pouco… :wink: )

Fora isso, uma notícia um tanto inusitada, também vindo do Google,

Ou seja, os caras preferem evitar contratações “em massa”, pra garantir o bom equilíbrio do “ecossistema” chamado “mercado”. :cool:

Atualizado (2009-Dec-03 @ 14:26h): Agora o Slashdot está dando a notícia também, Google Launches Public DNS Resolver. (Sim, estou repassando esta notícia em tempo real! :twisted: )

E pra quem estiver interessado em dar uma “tunada” no próprio site, eis outra diquinha,

Diversão garantida… :cool:

Colaboração e Ciência: tudo a ver…

segunda-feira, 19 out 2009; \43\UTC\UTC\k 43 1 comentário

Semana passada saíram algumas notícias que são, IMHO, extraordinárias no sentido de mostrar o quão valiosa é a cooperação e a colaboração num ambiente criativo.

A Nature fez duas reportagens, uma sobre o Google Wave e outra sobre o Polymath Project,

Por outro lado, um pessoal do Secret Blogging Seminar lançou um site muito interessante, chamado MathOverflow,

Semana passada, eu entrei em contato com o Anton Geraschenko perguntando mais detalhes sobre o projeto do MathOverflow e tudo mais. E o primeiro link acima é, essencialmente, uma resposta às minhas perguntas.

No final das contas, eles estão sendo patrocinados por um professor em Stanford que está arcando com os custos duma solução ‘hosted’ de StackExchange — que é o software por detrás do StackOverflow, ServerFault, SuperUser, DocType, e HowTo Geek.

Então, eu acho que seria uma idéia genial a de se mandar uma proposta de divulgação científica pro CNPq. Quem sabe não sai, assim, um PhysicsOverflow?! :idea: :twisted:

Esse é você + Ciência

Esse é você + Ciência

O realejo do dia…

domingo, 18 out 2009; \42\UTC\UTC\k 42 Deixe um comentário

Acesso aberto:

James Randi:

Sonhos de outono…

sexta-feira, 9 out 2009; \41\UTC\UTC\k 41 1 comentário

Pois é… estamos longe de “noites de verão” pelas bandas de cá… aliás, pior ainda, hoje o dia está chuvoso, cinzento e frio! :evil:

Então, depois de passar uns 10 dias testando o Google Wave… eu tô é doido de vontade de ver a combinação de GWave com TinyChat — e usar ambos aqui no AP! :twisted:

Agora eu já posso adicionar mais essas duas funcionalidades ao servidor dos meus sonhos. :idea:

Quem quiser colaborar e opinar sobre um “GWave do AP” e um “TinyChat do AP”… favor por a boca no trombone nos :arrow: comentários! :cool:

P.S.: Eu já dei essa diquinha antes… mas, acho que vale a pena dizer de novo: Google Wave 101.

E, de saidêra, eu deixo a seguinte diquinha: CeeVee. É uma plataforma online (leia-se Web2.0) para criação e manutenção dum CV ou Resumé. No Brasil a gente tem a Plataforma Lattes, mas não é sempre que ela é a melhor solução (principalmente na hora de gerar uma versão impressa, ou PDF, do CV). Vale a pena manter ambos sincronizados — o CeeVee é realmente o melhorzinho entre plataformas análogas. :cool:

O realejo do dia…

quinta-feira, 8 out 2009; \41\UTC\UTC\k 41 Deixe um comentário

Pra quem ainda não conhece, o Google Flu trends (“Google Gripe”) acabou de ser expandido de 4 para 22 países. Nos EUA, os dados do Google Flu têm 92% de correlação com os dados do Governo (estes últimos podem demorar até 2 semanas pra serem disponibilizados ao público; ao passo que o GFlu é mais “tempo real”).

Aí vai um videozinho explicando como o GFlu funciona,

Pronto… agora todo mundo pode relaxar e comprar seu terno anti-gripe suína (H1N1) predileto! :roll: :razz:

Enquanto isso, há “boatos” (i.e., artigos ainda não publicados) se propagando dizendo que a vacina contra a gripe “normal” pode aumentar os riscos de se contrair a gripe suína — dêm uma olhada em Flu Roundup.

Flame war garantidíssimo! :twisted:

A semana nos arXivs…

quinta-feira, 1 out 2009; \40\UTC\UTC\k 40 Deixe um comentário

A semana nos arXivs…

sexta-feira, 25 set 2009; \39\UTC\UTC\k 39 Deixe um comentário


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 67 outros seguidores

%d blogueiros gostam disto: