Servidor De Email Local No Ubuntu Com Exim

Vimos em um post anterior como criar testes para código Java que envia e-mails. Agora o assunto é outro.

Exim é um MTA open source que pode ser usado como alternativa ao Sendmail em sistemas operacionais Unix. Eu não tenho idéia de qual é a melhor alternativa disponível, mas se você procura por um servidor de relay para instalar na sua configuração de desenvolvimento, Exim é provavelmente a opção mais simples para começar.

Neste artigo, veremos como configurar o Exim para enviar mensagens através do Gmail.

Continue lendo

Publicado em Português, Tutoriais | Com a tag , , , , , , , , , , , | 1 comentário

Setting Up A Local Mail Server With Exim And Ubuntu

Exim is an open source MTA that can be used as a drop-in replacement for Sendmail on Unix-like operating systems. I have no idea what’s the best mail server out there, but if you are looking for a relay-only server to install on your development setup, Exim is probably the easiest to get started with.

In this article I’ll show you how to configure Exim to send messages through Gmail.

Continue lendo

Publicado em English, Tutorials | Com a tag , , , , , , , , , , , | 1 comentário

At World Cup Season…

Some people think — and I agree — that the UEFA Champions League is a more relevant tournament than the World Cup itself, but we cannot deny that an event of this magnitude is really awesome to keep an eye on. Even those who doesn’t love the sport tend to follow the teams, the matches, the celebration.

And with the World Cup comes the sweepstakes. Lots of.

Although the rules might change from one place to another, these are the ones we use the most here in Brazil:

  1. Everyone try to predict the score of a particular match, paying a fixed amount for each guess (eg $1.00).
  2. At the end, the ammount collected is divided equally among the winners. If there are no winners: (a) the sweepstake “accumulates”1, or (b) everyone get their money back, or (c) you-crazy-rule-here.

I like this kind of sweepstake, but it could be better in some respects.

First, not everybody has the habit of carrying small bills around, so the sweepstakes manager (a.k.a. YOU) loses a lot of time chasing change. Besides, I think the fixed-valued bet is kind of boring since the amount collected is divided equally among the winners. I think things get more exciting when people can choose how much to pay for each guess, so the amount collected is divided proportionally among the winners. In this case, when several people win, earns more who bets more.

Since I don’t like to do the math myself, here’s the challenge: create a program that receives a list with all guesses and returns the list of winners along with the proportional amount to be paid to each one of them.

So, shall we?

Continue lendo

  1. The amount collected remains available for the next match’s sweepstakes, but everyone must pay again for a new guess.
Publicado em English, Off Topic, Programming | Com a tag , , , , , , , , , | Deixar um comentário

Em Tempos de Copa do Mundo…

Há quem ache — e eu concordo — que a UEFA Champions League é um torneio mais relevante do que a Copa do Mundo, mas não podemos negar que o Mundial mexe com a nossa rotina. Mesmo quem não é apaixonado pelo esporte passa a prestar atenção nas seleções, nas partidas, na festa.

E com a Copa do Mundo vem os bolões. Muitos bolões.

Todo mundo já sabe como funciona um bolão, embora a mecânica possa mudar de um lugar para outro:

  1. Cada palpite tem um valor fixo (ex: R$2,00).
  2. Cada um pode dar quantos palpites quiser.
  3. No final, o montante arrecadado é dividido igualmente entre os vencedores. Se não houverem vencedores: (a) o bolão “acumula”1, ou (b) todo mundo recebe seu dinheiro de volta, ou (c) sua-regra-maluca-aqui.

Esse tipo de bolão é interessante, mas ele podia ser melhor em alguns aspectos.

Primeiro, o organizador acaba perdendo muito tempo correndo atrás de troco, afinal não é todo mundo que anda com dinheiro trocado na carteira. Além disso, valor fixo de palpite é muito chato, pois o valor arrecadado é dividido por igual entre os ganhadores. O bolão fica muito mais interessante quando o valor do palpite é variável e o valor arrecadado é dividido proporcionalmente entre os ganhadores. Assim, no caso de vários ganhadores, ganha mais quem apostar mais.

O problema de se fazer bolões com palpite variável é ter que ficar calculando o valor proporcional a ser dado a cada ganhador. Portanto eis o desafio: criar um programa que receba uma lista com todos os palpites e retorne uma lista com os palpites vencedores juntamente com o valor proporcional a ser pago a cada ganhador.

E aí, topa?

Continue lendo

  1. Todo o montante recebido continua disponível no próximo bolão, mas os participantes devem pagar um novo palpite.
Publicado em Português, Programação | Com a tag , , , , , , , , | Deixar um comentário

Django-Flash e o Novo Framework de Mensagens

No começo da semana, depois de vários meses de trabalho duro e algum atraso, a versão 1.2 do Django foi finalmente lançada. Este talvez seja o lançamento mais aguardado do framework desde seu surgimento, e inclui recursos há muito aguardados, como suporte a múltiplos bancos de dados e um framework de “mensagens”.

Sim, eu disse que o Django 1.2 traz incluso um framework de “mensagens”. Bom, né? Django realmente precisava vir acompanhado de uma app para resolver essa questão. Isso não significa, no entanto, que Django-Flash será descontinuado ou abandonado.

Então, se você usa Django-Flash em seus projetos, não se preocupe! Nada mudará. Django-Flash já é compatível com Django 1.2, e nós ocontinuaremos a mantê-lo por algumas razões.

A primeira delas é que nos importamos com quem usa nosso software. Nós não quebraremos seus projetos se você decidir fazer o upgrade para uma versão mais recente do Django – ou se decidir continuar usando uma versão anterior.

A outra é a liberdade de escolha. Você sabe, não existe uma única forma de se resolver todos os problemas. As pessoas devem ser livres para escolher a ferramenta apropriada a uma determinada situação.

Por exemplo, baseado nas minhas primeiras impressões, existem algumas coisas que eu realmente não gostei no novo framework de “mensagens”:

  1. Ele é verboso mesmo nos casos de uso mais simples
  2. Ele associa mensagens a números de prioridade, encorajando os usuários a usá-lo como um framework de logging/debugging. Quero dizer, um framework de “mensagens” não é um framework de logging/debugging, certo?

Mas essa é apenas a minha opinião. Talvez seja isso que faz do open source algo tão formidável!

Publicado em Português, Programação | Com a tag , , , , | Deixar um comentário

Django-Flash and Django’s New Messages Framework

Earlier this week, after several months of hard work and some delay, Django 1.2 was finally released. This is probably the most exciting release since Django’s debut, and brings long waited features, like multi-db support and a user “messages” framework.

Yes, I said Django 1.2 comes with built-in user “messages” framework. Great, isn’t it? Django really needed a built-in contrib app to solve this problem. This doesn’t mean, however, that Django-Flash will be discontinued or abandoned.

So, if you use Django-Flash in your projects, don’t worry! Nothing will change. Django-Flash is already compatible with Django 1.2, and we’ll keep improving Django-Flash for a number of reasons.

First of all, we care about the people who use our software. We won’t break your stuff if you decide to upgrade to a newer version of Django – or if you decide to keep using the previous version.

Also, freedom of choice is a good thing. You know, there’s not only one true way to solve every problem. People should be free to choose whatever tool they think is right in a given situation.

For example, based on my first impressions, there are a couple of things I didn’t like at all about the new user “messages” framework:

  1. It’s verbose even for the simple cases
  2. It ties messages to priority numbers, encouraging you to use it like a logging/debugging framework. I mean, a user “messages” framework is not a logging/debugging framework, right?

But that’s just my opinion. I guess this is what makes open source so great!

Publicado em English, Programming | Com a tag , , , , | Deixar um comentário

Python para S60: Trabalho em Andamento?

Eu fui um dos sortudos que perderam o celular a alguns meses atrás, durante aquele show maluco do AC/DC. Surpreendentemente, isso não me deixou aborrecido; apesar de não ser um heavy user, essa foi a oportunidade perfeita para eu comprar meu primeiro smartphone.

No fim das contas eu acabei com um Nokia 5800 XpressMusic, um smartphone relativamente barato e com features interessantes. Especificamente, o fato de poder rodar aplicações Python nesse aparelho foi um fator decisivo!

Mas, o que exatamente podemos fazer com Python para S60? Eu decidi implementar uma aplicação não trivial para ver exatamente o que pode ser feito com ele. A aplicação em questão é um controle remoto Bluetooth chamado Pytriloquist. (veja também screenshots e vídeo de demonstração.)

Continue lendo

Publicado em Português, Programação | Com a tag , , , , , , , | 1 comentário

Python for S60: A Work in Progress?

I was one of the lucky ones who lost their cellphones a few months ago, during that crazy AC/DC concert. Surprisingly, that didn’t upset me at all; although I’m not a heavy user, that was the perfect opportunity for me to get my first smartphone.

I ended up with a Nokia 5800 XpressMusic, a relatively cheap smartphone with a nice feature set. Specifically, what took me for granted was the ability to run Python applications in it!

But what exactly can we do with Python for S60? Well, to answer that question, I decided to implement a non-trivial app to see exactly what it has to offer. The app in question is a Bluetooth remote control called Pytriloquist. (see also screenshots and a video demonstration.)

Continue lendo

Publicado em English, Programming | Com a tag , , , , , , | Deixar um comentário

JSP e tag files: criando templates em 10 minutos

Este mês têm sido bastante curioso pelo fato de três pessoas terem me feito a mesma pergunta: “- Você largou o Java de vez?”. A resposta é não, mas, para não deixar dúvidas, eu resolvi voltar a escrever sobre Java. O assunto foge um pouco do que costumo escrever, mas é algo que considero importante.

Ultimamente, tenho visto a forma como certos desenvolvedores escrevem seus JSPs, e o que me preocupou foi ver o quanto eles desconhecem a tecnologia. Não é raro achar páginas cheias de scriptlets, includes malucos, código du-tri-quadri-plicado e nenhuma taglib além da fornecida pelo framework web em uso.

É muito fácil escrever JSPs da forma errada, mas fazer as coisas de um jeito melhor é mais fácil ainda. Ao contrário do que muitos pensam, é possível sim criar JSPs limpos sem o uso de qualquer framework de layout (como Sitemesh) ou biblioteca (com exceção da JSTL, é claro).

Continue lendo

Publicado em Português, Programação, Tutoriais | Com a tag , , , , , , , , | 3 comentários

Templates in 10 minutes with JSP and tag files

Have you ever seen JSPs full of Aramaic-like scriptlets, crazy includes, duplicated code and no taglibs beyond that provided by the web framework in use? Are you staring at one right now?

This is a fairly common thing, at least for the companies I worked for so far, and that’s what scares me the most. Hopefully, you can easily make things better if you want to.

In this post, I’ll show you a few techniques that can be used to write clean JSPs without resorting to any kind of templating system whatsoever.

Continue lendo

Publicado em English, Programming, Tutorials | Com a tag , , , , , , , , | 2 comentários