Mostrando postagens com marcador programação. Mostrar todas as postagens
Mostrando postagens com marcador programação. Mostrar todas as postagens

quinta-feira, 19 de setembro de 2013

Armadilhas no C++

Voltando a programar em C++, após uma temporada em Matlab e Java (e ambos), vendo que programa bom é programa compilado.

Na verdade passei por aqui só pra deixar o recado de duas armadilhas que vi:
A segunda armadilha resume o fato: "só use o que realmente você vai precisar." Não precisa usar TUDO que a linguagem permite.

Fora isso, considerando em se aventurar em Python...


segunda-feira, 12 de janeiro de 2009

Subverte seu repositório

Certos programadores, não cansados de sua vida pagã da informática, começam a delirar, e criam projetos insanos. Um destes projetos é o Code_swarm, que a partir de um repositório de Subversion cria uma animação "orgânica" do desenvolvimento do projeto. 

Na página eles pegam os repositórios do Eclipse e Apache, fazendo explodir um "universo" de programação...

quarta-feira, 17 de setembro de 2008

Programação jogada no ventilador

Imagine fazer com que um programa Java converse com uma rotina em Fortran. Parece a cena final do Star Trek I, com o computador da nave querendo "jogar uma idéia" na V'Ger...

Mas isso é possível, a princípio se voce chamar um intermediário, que nesse caso será o meu amigo C++... ou talvez o "primo-pobre" C, talvez cause menos problema com ambos os lados...

Então o programa Fortran será embalado pelo C/C++, fazendo o encapsulamento, podendo virar uma DLL. Daqui ele conversa com o Java, graças ao JNI, que é a possibilidade do Java ler código nativo.

Lembrando que o Java é uma linguagem interpretada e portável entre máquinas distintas, enquanto que o lado C /C++/ Fortran são compilados, não necessariamente funcionais em qualquer lugar.

Então você pergunta: "porque não faça o que você quer em um local só ?!?" porque quero aproveitar o melhor de cada um:
  • O Fortran é o cara para calcular (você pode dizer o mesmo do C++, mas quando você tem uma biblioteca pronta a sua disposição, ou simplesmente um código que levou anos para uma galera implementar, não é você que vai desenroscar)
  • O Java é o cara da apresentação: interface gráfica, web, XML... há bastante coisa pronta, e principalmente: a torcida é a das maiores.
Surgem outras dúvidas, para ambos os lados: tem gente com bibliotecas numéricas boas, e tem gente que é melhor em web... mas juntando todos os requisitos, qual é a melhor combinação? Se buscar pela melhor solução, não saio daqui hoje, então escolhi isto.

Agora o problema é implementar. o java chamará funções do fortran, vai passar estruturas de dados variadas, e hoje em dia tem que haver um tratamento de exceção, coisa que até hoje não tem no fortran (horror, horror), ou seja, quando trava, é rosca, sem aviso prévio.

Felizmente existem tutoriais, que abordam um pedaço de cada coisa. Um exemplo é o http://www.csharp.com/javacfort.html

quinta-feira, 4 de setembro de 2008

Faça o "J"

Em tempos de programação orientada a objetos, documentação no próprio código e outras boas práticas que nos evita o código-macarrão, eis que vejo um livro chamado "J para quem conhece C".

Até aí, para quem vê o C pela primeira vez o acha bizarro, quando se vê então um código propositalmente obscuro, nem se fala. Agora, este tal de J é sacanagem!

Vejamos o mesmo programa em duas versões. Em C:

// Program to calculate Chebyshev coefficients
// Code taken from Numerical Recipes in C 1/e
#include <math.h>
#define PI 3.141592653589793
void chebft(a,b,c,n,func)
float a,b,c[];
float (*func)();
int n;
{
int k,j;
float fac,bpa,bma,f[300];
bma = 0.5 * (b-a)
bpa = 0.5 * (b+a)
for(k = 0;k<n;k++) {
float y = cos(PI*(k+0.5)/n);
f[k] = (*func)(y*bma+bpa);
}
fac = 2.0/n;
for (j = 0;j<n;j++) {
double sum = 0.0;
for(k = 0;k<n;k++)
sum += f[k] * cos(PI*j*(k+0.5)/n);
c[j] = fac*sum;
}
}

Em J:

chebft =: adverb define
:
f =. u. 0.5 * (+/y.) - (-/y.) * 2 o. o. (0.5 + i. x.) % x.
(2 % x.) * +/ f * 2 o. o. (0.5 + i. x.) *"0 1 (i. x.) % x.
)

segunda-feira, 24 de março de 2008

Pelo contorno

Atualmente estudando método de elementos de contorno para a tese. Tinha começado a ver os elementos finitos, mas para o meu problema ficaria inviável. O BEM (boundary element method) necessita especificar somente o "contorno", sem se preocupar em discretizar o interior.

terça-feira, 11 de março de 2008

Testando...

Apanhando sobre a melhor forma de fazer teste de unidade em C++: CppUnit ou Boost::test?

Ambos possuem uma documentação árida, e o g++ não tava compilando. Mas parece que vai emplacar o do Boost: a porra não andava pois o #include tava errado. Em vez de
#include<boost/test/unit_test.hpp>


Deveria ser
#include<boost/test/included/unit_test.hpp>


A propósito, o Vim é siniiiiistro... mesmo quem já conhece, pode sempre descobrir alguma função macabra, como neste site, e ainda neste cheat sheet.

sexta-feira, 28 de dezembro de 2007

Falta do que fazer

quem programa a bastante tempo já deve ter manipulado uma tabela ASCII... saudades do tempo em que existiam somente 256 caracteres?

Este desocupado fez uma impressão de todo caracter Unicode que existe. Que tal imprimir em uma folha de... 2 x 4 m??

Para quem precisar de uma consulta mais prática, pode procurar no DecodeUnicode e no FileFormat.

sábado, 7 de julho de 2007

quinta-feira, 3 de maio de 2007