Datasources XA e suas peculiaridades
Pessoal,

como eu comprei um domínio "com.br" e estou planejando criar um site pessoal em breve, estou migrando o blog para o meu domínio como primeira fase dessas mudanças.

Este será o último post neste antigo blog: http://lavh.zip.net

Meu primeiro post no novo blog foi a respeito de um problema que tivemos em produção com datasources XA. O link é:

http://www.hespanha.com.br/blog/

Um abraço a todos que frequentam este blog! Espero que vocês possam continuar me acompanhando no meu novo endereço!
Competições de programação
Quem me conhece sabe que minha maior área de interesse na computação é algoritmos. Quando estava na graduação ainda,
tive a felicidade de representar por dois anos a minha faculdade na "Maratona de Programação", essa com certeza foi
uma das melhores experiências a nível de computação que eu já tive. Hoje, mesmo formado, continuo dedicando um tempo
em resolver problemas que envolvam principalmente teoria dos grafos, área na qual eu desenvolvi um grande interesse.
Existem muitos sites por aí com "juizes online", onde você submete o seu código e eles avaliam se ele está certo ou não,
dentro de um determinado contexto de um problema, obviamente. O que eu mais uso é o:



http://br.spoj.pl




Ele é em português, mantido por um também ex-maratonista e atualmente técnico dos times do IME-USP.

Pra quem ainda não conhece, e gosta de desafios, recomendo fortemente uma visita ao site e a tentativa de resolução de
algum problema. Existem desde os mais facéis até os quase impossível. :-P
Resolver estes problemas trazem uma série de melhorias no modo de programar, eu posso citar:

-Você passa a se preocupar mais com performance e a estudar o que é mais performático. Por exemplo, para um programador normal Java, a classe Scanner é bem melhor que a BufferedReader devido a facilidade de uso da mesma, mas um programador
de maratona sabe que a classe Scanner é beeeeeeeem mais custosa que a BufferedReader, e isso pode custar sua solução
está certa ou não. Sim, nestes "juizes online" e na maratona, além do código produzir uma saída certa, ele precisa ser rápido e não ultrapassar um determinado tempo.

-Seu raciocinio lógico melhora muito.

-Você passa a conhecer mais de estrutura de dados e onde e quando é melhor aplicar uma ou outra.

-Você passa a estudar coisas bem mais legais do que as que você precisa no seu dia a dia.

Podia citar muitos outros, mas esses são os principais adicionando mais um que é: Se você curtir resolver algoritmos, isso com certeza se tornará um hobbie muito agradável na sua vida que além de tudo te trará benefícios. Eu classifico isso como, do mesmo modo que tem gente que se diverte e passa o tempo fazendo desafios como Sudoku por exemplo, a resolução destes problemas está no mesmo nível para aqueles que sabem programar.

Um abraço e até a próxima.
Analise de um feliz usuário do Ubuntu 8.04
Confesso a vocês que sempre usei Linux mais por preconceito com o Windows, do que por mérito do próprio Linux.
Quando eu era mais novo, adorava ficar dias e dias se matando pra instalar o "Winmodem" no Linux, cheguei até
a programar um driver, e isso realmente foi muito desafiante e legal. Mas o tempo passa e com isso essas coisas
ficam extremamente chatas, hoje o que eu quero é instalar o sistema e que tudo funcione.

Nos últimos tempos estava tentando usar três versões do Linux:

-Fedora
-Ubuntu 7.10
-OpenSUSE

Nenhuma delas tinha me agradado. Em todas eu enfrentei problemas que me irritavam profundamente. E além disso,
todas eram mais lentas que o meu Windows que eu tinha em uma partição da mesma máquina. Mas finalmente, as coisas
mudaram.

Resumindo tudo em uma linha: O Ubuntu 8.04 é realmente animal e pela primeira vez na minha visão, é uma versão
de Linux que está melhor que o Windows, do ponto de vista de usabilidade e performance.


Estou usando e estou muito feliz com o Ubuntu 8.04. Faz quase uma semana que eu não entro mais no meu Windows. Eu nunca tinha conseguido esse feito com outros Linux antes.

Ontem teve a prova de fogo: eu precisava baixar algumas fotos da minha máquina digital e edita-las para me cadastrar em um site. Embora seja algo banal, sempre optava pelo Windows pra fazer essas tarefas devido a extrema facilidade. Ontem usando o Linux tive essa mesma facilidade. Reconheceu minha máquina direto, haviam bons programas de edição de fotos disponíveis, tudo foi rápido e simples, como a vida deve ser.

Algumas coisas que tem me agradado muito:

-Até agora, TODOS os programas que eu tentei instalar funcionaram de primeira. Quem usa Linux sabe que isso é coisa raríssima. Quando você precisa instalar um programa que sai da lista de suportados é um drama. Mas com o Ubuntu todos foram sucesso total.

-Ele é rápido. Realmente rápido. Mais rápido que o Windows

-Ele é simples. Com muita facilidade você configura tudo nele. Até sua placa de vídeo que não possui um driver livre é fácil fácil de sair usando.

Enfim, pra quem ainda não migrou pra Linux pois vivia bem com o Windows e achava que não tinha razão pra mudar, agora finalmente acho que existe uma versão de Linux que realmente vale a pena ser ao menos testada.

Parabéns aos criadores do Ubuntu 8.04 e a todos que colaboram com essa distribuição.
Java e suas armadilhas
Recentemente comecei a ler o livro Java Puzzlers.
É um livro bem interessante que foca em armadilhas da linguagem. O livro é formatado da seguinte forma:

1) Separado por problemas
2) Primeiro é apresentado uma breve descrição de um problema e um código para o leitor analisar e dizer se está correto.
3) Após a analise e o veredicto, o leitor é convidado a ler a próxima página que diz se o código estava correto ou não, propõe
soluções e melhorias e o mais legal, caso seja algo meio bizarro do Java, como a conta "2.00 - 1.20" não retornar 0.80, o autor
propõe soluções alternativas para os desenvolvedores de linguagem.

É um livro muito gostoso de se ler, não maçante e que te deixa mais esperto para as armadilhas! :-)

Bom, pretendo aqui no blog postar alguns problemas que realmente achei interessante, pra começar apresento um programinha simplezinho
pra dizer se um número ehImpar ou não. Vamos ao código

public static boolean ehImpar(int n) {
return (n % 2) == 1;
}

E aí, o que me diz deste código? Correto não? O resto de um número impar numa divisão por 2 é sempre 1 certo?

ERRADO!

Quando eu vi o código também achei que ele estava correto, mas não está. Quer saber o motivo?

Passe como argumento um número 5, porém com um sinal de subtração na frente! Qual o resultado??? False!!

É retornado o resto 1, porém o sinal negativo do argumento da esquerda prevalece, então fica -1 que obviamente é diferente de 1,
logo o código falha.

para resolver isso é bem simples:

public static boolean ehImpar(int n) {
return (n % 2) != 0;
}

ou, uma solução de processamento mais rápida, porem menos trivial para ser entendida é:

public static boolean ehImpar(int n) {
return (n & 1) != 0;
}

E aí, o que acharam? É este o modelo do livro. Eu ainda estou na parte das armadilhas mais simples, o livro tem armadilhas bem mais complexas
do que essa. Pra quem gosta de programação, vale a pena ler este livro!

[]'s


"Se, porém, algum de vós necessita de sabedoria, peça-a a Deus, que a todos dá liberalmente e nada lhes impropera; e ser-lhe-á concedida." Tiago 1:5
Vendendo livros
Caros,

estou vendendo três livros. Todos estão em excelente estado de conservação, eu diria que
praticamente novos. Eu os disponibilizei a venda no TodaOferta,
e por lá será a única forma de negociação. Os preços estão excelentes se levarmos em conta o estado dos livros.

Os livros a venda são:

Java Como Programar (Sexta Edição)
http://comprar.todaoferta.uol.com.br/java-como-programar-sexta-edicao-0R7FIZCAUH

Compiladores
http://comprar.todaoferta.uol.com.br/compiladores-principios-tecnicas-e-ferramentas-YFWPQCJALD

Engenharia de Software (Sexta Edição)
http://comprar.todaoferta.uol.com.br/engenharia-de-software-6-sexta-edicao-WZB0ZDQGKG

Valeu!

"A isto, respondeu Jesus: Em verdade, em verdade te digo que, se alguém não nascer de novo, não pode ver o reino de Deus" (Jo 3:3)
10 livros recomendados para programadores
Seguindo o post do Guilherme (http://gc.blog.br/2008/03/27/10-livros-recomendados-para-desenvolvedores/) resolvi
compartilhar minha lista de 10 livros que eu recomendo fortemente.
Como eu tenho um perfil bem técnico, e me interesso bastante por temas científicos da computação, minha lista de livros é mais voltado para livros que são vistos em cursos decentes de "Ciências da Computação". Meu desejo era que todo programador conhecesse esses livros, mas infelizmente nos dias de hoje os programadores estão mais preocupados em se aprofundar em negócios do que em assuntos técnicos.

Segue a lista:


Algoritmos
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=166575&ST=SE
Este é um clássico. Todo programador deveria implementar alguma vez na vida ao menos 60% dos algoritmos
que estão nesse livro. Hoje as linguagens modernas já contêm grande parte dos algoritmos já implementados
no core, e com isso os desenvolvedores não são mais obrigados a conhecer algoritmos para ordenação por exemplo,
mas um desenvolvedor que conhece os algoritmos deste livro com certeza é diferenciado.

Sistemas operacionais
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=132166&ST=SE
Este definitivamente não é um livro que você pegue e leia de ponta a ponta, a menos que você seja como o Linus
Torvalds e more onde o sol não nasce durante meses. Mas com certeza este é um livro que todo desenvolvedor deve ter na biblioteca como referência e conhecer algumas partes, como o capítulo de processos e threads.

Inteligência artificial
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=223050&ST=SE
Este é um outro livro clássico. Com ele é possível entender aonde a Inteligência Artificial já conseguiu chegar e vislumbrar o futuro. Possui algoritmos extremamente interessantes que valem muito a pena conhecer.

Compiladores
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=21324324&ST=SE
Sem palavras! Esse livro chegou até a ser citado no filme "Hackers, Piratas de Computador". É pra quem quer ir um passo além e entender como as coisas funcionam.

Effective Java
http://www.amazon.com/Effective-Java-Second-2nd/dp/0321356683/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1207001318&sr=8-1
Mais do que um livro de Java, esse livro é uma aula de programação para linguagens orientadas a objetos. É leitura obrigatória para todo programador Java.

The Art of Computer Programming
http://www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1207001435&sr=1-1
É um livro de programação extremamente matemático, mas parece um livro de matemática, mas é show! Lendo ele você entende melhor como os algoritmos funcionam, você conhece realmente a "essência" da coisa.

Expressões regulares
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=1782754&ST=SE
Expressões regulares são fera! É um assunto que todo programador deve conhecer também. Não sei se o livro do Aurélio é o mais famoso do assunto mas com certeza é o mais legal!! Recomendo fortemente!

Fundamentos Matemáticos para a Ciência da Computação
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=269879&ST=SR
Matemática na veia! :-)

Refatoração
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=242126&ST=SE
Te faz um programador melhor! :-)

Design-Patterns
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=93924&ST=SE#javascript;
Te faz um programador melhor! :-)

É isso aí!! Não tenho muitos leitores mas recomendo aos leitores que possuam um blog, a fazer a sua lista de 10 livros assim como o gc recomendou no seu post. Assim teremos uma rede interessante de recomendações a disposição de novos programadores.

Convido meu amigo Rafael (http://mobicross.blogspot.com/) a ser o próximo a postar os seus 10 livros favoritos!

[]'s

"Tais fostes alguns de vós; mas vós vos lavastes, mas fostes santificados, mas fostes justificados em o nome do Senhor Jesus Cristo e no Espírito do nosso Deus" (1 Co 6:11)

Novo site de vendas de camiseta pela internet
Pessoal,

queria apresentar para vocês um novo site de vendas de camiseta pela internet criado
por alguns amigos meus em conjunto com a empresa da minha esposa.

O link para o site é http://www.linhofinissimo.com.br

As camisetas são voltadas para o público cristão, cujo únicos dois pré-requisitos é crer
em Deus e crer na bíblia.

Como esse blog é voltado para o público técnico, vou fazer alguns comentários a respeito para
esse post não ficar totalmente desvirtuado:

1) O site em seu aspecto visual é muito bem feito, quem entrar poderá conferir. Ele ganhou vários
prêmios de design.

2) Para a cobrança, é utilizado o sistema PagSeguro do UOL (http://www.pagseguro.com.br). Este sistema
é muito útil e facilita muito a vida de quem quer abrir um e-commerce. Quem já teve que alguma vez
conseguir uma maquineta Visa pra vender via internet sabe do que eu to falando, é uma burocracia imensa
conseguir, além de te obrigar a ter uma empresa aberta. O PagSeguro não te obriga isso e contempla quase
todas as formas de pagamento disponíveis hoje. Além de tudo, ainda conta com o nome UOL, o que garante
uma maior confiabilidade. Enfim, recomendo fortemente quem tiver pensando em iniciar um e-commerce analisar
a solução proposta pelo PagSeguro.

3) Foi usado PHP 5 para a programação do site. o PHP vêm melhorado ao longo das novas versões e esta nova versão
oferece um suporte real a orientação a objetos, o que contribuiu para a escolha, pois os desenvolvedores já tinham
um conhecimento prévio de PHP e puderam aproveitar todo esse conhecimento e ainda contar com OOP.

É isso aí! Não deixem de visitar o site! Com certeza vale uma olhada!

[]'s
JMS: Tópico X Fila
JMS: Tópico X Fila

JMS(Java Message Service) é uma API utilizada para acessar sistemas de mensagens corporativas. É uma tecnologia muito interessante para comunicação entre sistemas independentes. A comunicação entre os sistemas é realizada
via mensagens, como se fosse um sistema de e-mails.

Uma mensagem JMS é composta de um cabeçalho e do conteúdo. O conteúdo pode ser:
-Mensagem de texto
-Um map com diversos valores
-Um objeto Java

Segue algumas definições:

clientes JMS = aplicativos que usam JMS
----------Consumidor = Recebe a mensagem.
----------Produtor = cria a mensagem.
provedor JMS = sistema de roteamento e entrega de mensagens

Integrando dois sistemas usando JMS, você evita que um sistema conheça o outro, e com isso você obtêm o desejado "baixo-acoplamento" entre os sistemas.

Um sistema de mensagens pode funcionar de duas formas:

Tópico = Funcionamento semelhante a um newsletter. A mensagem é criada por um produtor, e todos os clientes que "assinarem" este tópico recebem a mesma mensagem.

Fila = Como o próprio nome já diz, é semelhante a uma fila. Um produtor envia a mensagem, e apenas um cliente consumidor recebe esta mensagem.

Na maioria dos casos, o que você consegue fazer com "Tópico" você faz com "Fila" e vice-versa. Isso gera algumas dúvidas e as vezes é feita a escolha errada sobre qual usar, então, eu vou tentar explicar quando usar um ou outro baseado na minha visão.

Quando usar tópico:
Um típico sistema que usaria tópico seria um sistema que envia o preço das ações da bolsa de valores. Um produtor envia uma mensagem informando o preço de uma ação, e TODOS os sistemas interessados devem receber essa informação. Ou seja, todos os sistemas que estão inscritos para receberem essa informação devem a receber. Neste caso, a melhor escolha é tópico!

Quando usar fila:
Um exemplo de sistema de fila seria um sistema de envio de cobrança de cartão de crédito para a operadora. Um sistema desses deve ser capaz de processar milhares de transações. Sendo assim, você poderia implementar um sistema de filas onde você inscreve na fila diversas instâncias de aplicações de envio de cobrança, e assim, cada instância entra nesta fila, pega uma transação, sai da fila, processa e depois retorna para a fila para obter a próxima transação a ser processada. Neste sistema ficticio, apenas um consumidor precisa receber uma mensagem, então, neste caso, não faz sentido usarmos tópico.

Um container EJB deve dar suporte ao uso de JMS, mas é possível usar JMS também sem o uso de EJB. JMS é uma tecnologia de integração muito interessante e com certeza irá crescer muito ainda. Vale a pena aprender sobre
JMS! Aqui na empresa por exemplo estamos utilizando mensagens JMS para fazer a contenção dos serviços, mas este
é um assunto que irei abordar em um próximo post!

O intuito deste post foi explicar o que é um JMS de modo sucinto, definir os principais conceitos e dar uma explicação básica sobre "Fila" e "Tópico".

Qualquer dúvida, sugestão, erro meu ou comentário são bem-vindos.

Até a próxima!!

[]'s




JMX no EJB3
JMX é uma tecnologia que prove ferramentas para monitorar uma aplicação. (Site da Sun :-P)
Além disso, você pode criar uma interface para expor métodos seus para acessa-los via console web. Isso é muito legal!!
E o melhor é que você não precisa se preoucpar com nada visual, quem cria toda a interface web é o próprio container,
e se o seu método recebe parâmetros, é disponibilizada uma inputbox para você preencher com os valores de entrada.
Para acessar a tela de JMXs do JBoss a url normalmente é: http://seu_host_aqui:8080/jmx-console

Um JMX pode ter várias utilidades dentro de um sistema. Aonde eu trabalho usamos para os seguintes propósitos:

-Monitoração de sistemas

-Execução de testes

-Executar processos que são normalmente startados por schedulers.

Esse último é muito útil, pois as vezes são executadas manutenções na base de dados, e um processo que rodaria durante o horário
da manutenção não é executado. Então, via JMX startamos ele após a manutenção de um modo bem simples, sem precisarmos alterar
nenhuma configuração da aplicação.

Bom, mas o que eu quero mostrar neste post é como é fácil criar um JMX com EJB3. E como programador gosta é de códigos, vamos direto
ao assunto.

Primeiro cria-se uma interface simples com os métodos que você quer disponibilizar via JMX,e anota ela com @Management.

@Management
public interface CafeManagement {

public void fazerCafe(String tipo);

}

Depois cria-se uma classe concreta implementando essa interface e anotada com @Service:

@Service (objectName="Cafe:service=CafeJMX")
public class CafeJMX implements CafeManagement {

@EJB
private Cafeteria starbucks;

@Override
public void fazerCafe(String tipo) {

starbucks.cafe(tipo)

}

}

Repare no objectName da anotação, ele deve obedecer o padrão descrito x:service=y.

Repare também que você pode facilmente injetar seus EJBs no JMX usando a anotação @EJB.

Feito isso, faça o deploy, starte o servidor e entre no jmx-console para testar.

Procure o seu JMX criado pelo nome, entre nele e clique no botão para executar.

Feito!

Simples como a vida deve ser! :-)
TransactionTimeout no Jboss
Por default, uma transação EJB no Jboss expira depois de 5 minutos. Após esse tempo, se você
tentar realizar qualquer operação que necessite de controle de transação, como obter uma
conexão no datasource por exemplo, o Jboss sobe uma exceção.

Pois bem, tinhamos um método que era responsável por processar 50 mil registros. Este método,
como vocês podem imaginar, não levava apenas 5 minutos, então estava estourando a exceção de
TimeOut.

Pesquisei um pouco na internet, e descobri a anotação:

@TransactionTimeout(seconds)

Esta anotação é usada em métodos, e se você colocar ela sobre um método do seu Bean EJB, você
pode mudar o tempo de duração da transação.

Li em alguns lugares que não é recomendável mudar este parâmetro em um contexto global, ou seja,
para todos os métodos. Você só deve mexer no que realmente você ve que pode levar mais do que
5 minutos.

No meu caso, coloquei um timeout de uma hora para este método, pois é um tempo razoável para processar
50 mil registros.

O tempo da transação começa a contar quando você chama o método do seu Bean, e se encerra quando
o método termina. Tudo que tiver dentro deste método(chamadas para Business, DAO etc) terão o tempo
de transação do Bean para executarem. É óbvio que se você não vai executar nenhuma tarefa transacional
no seu método, não precisa se preocupar com isso de timeout.

Agora uma dica interessante.

Mudei o timeout do método do meu Bean e achei que meus problemas estavam resolvidos. Este método era
chamado por um Scheduler e sucesso.

Porém, este método também podia ser chamado via um JMX que eu criei para casos em que o Scheduler falhasse,
eu pudesse chama-lo na mão via console web.

Acontece que na chamado do método do JMX eu não defini timeout nenhum. E não é que neste caso, independente
de eu ter setado no método do bean que era chamado um timeout maior, o timeout que valia era o do método JMX,
ou seja, o default do Jboss. Tive que alterar o timeout do método JMX tbm, para aí funcionar.

Vivendo e aprendendo.

Pelo que pude entender disso, o tempo de timeout do primeiro método chamado que é gerenciado pelo container
é o que vale. Ou seja, se você tem:

método JMX (5 minutos) -> chama bean.fazAlgo(1 hora) -> chama bean2.fazMaisAlgo(2 horas)

O tempo que vai valer é o de 5 minutos. Se você tirar o JMX do caminho é chamar diretamente o bean, dai sim
sua transação vai durar 1 hora. Mas mesmo assim, o bean2 ainda vai dar timeout depois de 1 hora, e não de 2,
como ele foi previamente configurado.

Como não achei muitas informações sobre isso na web, resolvi postar aqui, caso alguém um dia precise.

Tá ai a dica.

[]'s
Haskell no GUJ
Hoje de manhã tive uma agradável surpresa. Encontrei um post no GUJ falando sobre
Haskell, e com algumas informações muito interessantes.

O Link para o post é: http://www.guj.com.br/posts/list/82536.java

Por meio dele descobri que existe projeto de implementação do Haskell para rodar na JVM:

http://jaskell.codehaus.org/

De fato muito interessante, mas ainda não tive tempo de analisar.

Também descobri um breve tutorial sobre a linguagem cheio de exemplos, segue o link:

http://www.portugal-a-programar.org/forum/index.php?topic=4614.0

Pelo que pude ver nos comentários deste tutorial, mesmo de Haskell não sendo
uma linguagem muito utilizada, vale a pena aprende-la para abrir a mente. E realmente,
mesmo ainda tendo estudado pouco sobre Haskell, já pude sentir uma diferença na forma de
como eu penso nos problemas, principalmente nos ligados a recursão!

[]'s e até o próximo post!

"Porque Deus amou ao mundo de tal maneira que deu o seu Filho unigênito,
para que todo o que nele crê não pereça, mas tenha a vida eterna" João 3:16
Novos caminhos: Programação funcional
Uma frase celebre da área de informática, mais especificamente em desenvolvimento é:

"Uma linguagem que não afeta seu jeito de pensar sobre programação não vale a pena aprender." Alan Jay Perlis

É motivado por esta frase que eu resolvi aprender novas linguagens, mas linguagens que se vale a pena aprender!

Já li em diversos lugares que Java(linguagem com a qual eu trabalho hoje) está com seus dias contados. Já sei até
de projetos para migrar aplicações de Java para Ruby. Isso também me inspirou em busca de aprender outras linguagens.
Eu quero acompanhar de perto as mudanças, e não apenas ficar assistindo para depois, quando todo mundo tiver migrado,
correr atrás do prejuizo.

Mas, diferente de toda a onda, que agora parte para Ruby, como este sendo a última bolacha do pacote, eu resolvi partir
para algo um pouco diferente, não muito usado, nem muito comentado, tão pouco badalado, uma linguagem chamada Haskell.

Haskell é uma linguagem de programação funcional. O conceito é bem simples, até para um aluno do ensino fundamental. Ela
se baseia no conceito matématico de domínio e imagem.

- O domínio é a entrada para o seu programa

- Função é o seu código

- Imagem é o resultado da aplicação da função no seu domínio.

É claro que existem outros conceitos, mas de forma bem simplificada é isso. Simples não?

Para ajudar a explicar, vou demonstrar um pequeno programa em Haskell.

Um simples programa de calcular a média de dois números em Haskell ficaria assim:

media_2 x y = (x + y) / 2

Simples não?

Neste exemplo: x y são o meu domínio e minha função é f(x) = (x + y) / 2. A minha imagem
será o resultado retornado.

Para rodar, basta fazer a chamada em um interpretador Haskell:

Main> media_2 10 10
10

Conforme for me aprofundando nos meus estudos nesta linguagem, pretendo postar mais aqui falando sobre Haskell, já
que hoje são poucas as referências sobre esta linguagem que se encontram na web, principalmente em português.

Quem quiser saber mais sobre Haskell, a página oficial é: http://www.haskell.org , e no Google também é possível se
encontrar muita coisa boa!!

Até a próxima!

"Porque: Todo aquele que invocar o nome do Senhor será salvo" Rm 10:13

Primeiro post
Pessoal,

pretendo neste blog falar um pouco sobre o que tenho estudado na área de desenvolvimento de software. Quero compartilhar
as lições aprendidas nos projetos que tenho participado, e também compartilhar sobre coisas que leio e vejo por aí!

Espero que gostem do meu blog!

E também, como sou cristão, pretendo a cada post compartilhar um versículo que tenho desfrutado. Espero que mesmo os que não são
cristãos possam também desfrutar, pois toda escritura é inspirada por Deus!

Pra começar:

"pois fostes regenerados não de semente corruptível, mas de incorruptível, mediante a palavra de Deus, a qual vive e é permanente" 1Pe 1:23
[ página principal ] [ ver mensagens anteriores ]