quinta-feira, 24 de abril de 2008

Troque as telhas da sua varanda.


Não sou muito de escrever sobre filosofia ou coisas do gênero. Como trabalho com informática acabo sempre escrevendo com um cunho mais técnico mas estou me sentindo a vontade para entrar nesse tema.

A algum tempo estava chovendo na minha varanda e eu não conseguia ficar com as portas abertas, desfrutar o visual de um belo dia de chuva ou mesmo deixar os chinelos de fora. Com a mudança para São Paulo percebi que as coisas simples da vida são o que fazem a verdadeira diferença. Uma pequena mudança e vuala, tudo vira novo de novo, você se dedica e acha satisfação.

Se estiver chovendo na sua varanda também não deixe isso atrapalhar o seu dia. Tome uma atitude e troque as suas telhas. E se no processo você achar um ninho de pássaros no meio do telhado antigo fique feliz porque é uma prova que a vida está em todos os lugares.

-----

Change the roof of your balcony

I'm not a kind of writing about philosophy or
things like this. I almost always write with a technical approach because my work with technology but now I'm felling nice to go into this field.

There is a while it is raining in my balcony and I couldn't stay with the doors open neither enjoys the beauty of a raining day nor let my footwear outside. The moving to São Paulo makes me realize that the simplest things are the true real difference. A little changing and vuala, everything became new again, you find dedication and satisfaction.

If it is raining in your balcony too don't let it interfere in your day. Take an action and change your roof. And if you find a bird's nest in the old roof stay happy it proves the life is everywhere.


quarta-feira, 9 de abril de 2008

Interfaces com Swing - Estilo MAC

A algum tempo comprei um Macbook e, acho que como a maioria dos Mac's users, a interface do sistema é simplesmente perfeita. Estou trabalhando em um projeto pequeno e estou brincando um pouco para conseguir algo parecido. A tela esta ficando assim:



Essa é a cara do iPhoto:



Você deve ter percebido que tirei esse screenshot no windows, ou seja, em qualquer plataforma ele vai parecer o mesmo. Tive que fazer alguns truques para conseguir essa cara, o principal dele foi a utilização de ButtonUI e PanelUI.

A arquitetura do Swing é algo muito interessante que pretendo falar mais no futuro. Basicamente o que temos que fazer para alterar a "cara" de um botão é desenvolvermos novos BottonUI ou implementar um novo JButton com a cara que você deseja.

O trecho de código abaixo é para a criação do botão metalizado.


public class BotaoAcaoTela extends JButton {

private static final long serialVersionUID = 1L;
private static final cor1 =
new Color(254, 254, 254);
private static final cor2 =
new Color(204, 204, 204);

public BotaoAcaoTela(Action acao) {
super(acao);
}

@Override
public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

g2.setColor(new Color(235, 235, 235));
g2.drawRoundRect(0, 0, getWidth() - 1,
getHeight() - 1, 5, 5);

Paint p = g2.getPaint();
GradientPaint rgPaint =
new GradientPaint(0, 0,
cor1, 0, getHeight(), cor1);
g2.setColor(Color.WHITE);
g2.setPaint(rgPaint);
g2.fillRoundRect(0, 0, getWidth() - 1,
getHeight() - 2, 5, 5);
g2.setPaint(p);

g2.setColor(new Color(115, 115, 115));
g2.drawRoundRect(0, 0, getWidth() - 1,
getHeight() - 2, 5, 5);

String nome = getText();
Rectangle2D rec = g2.getFontMetrics().
getStringBounds(nome, g2);
float x = (float)
(getWidth() - rec.getWidth()) / 2f;
float y = (float) (getHeight() /2) + 5 ;

g2.setColor(Color.BLACK);
g2.drawString(nome, x, y);

//Verificando se o botão esta pressionado para
if (getModel().isArmed()
&& getModel().isPressed()){
AlphaComposite alpha = AlphaComposite.
getInstance(AlphaComposite.SRC_OVER, 0.4f);
g2.setComposite(alpha);
g2.setColor(Color.BLACK);
g2.fillRoundRect(0, 0, getWidth() - 1,
getHeight() - 2, 5, 5);
}

}


}



Logo logo eu publico aqui o macete para o fundo da barra dos botões e o botão lateral.

sexta-feira, 4 de abril de 2008

Linguagem de Programação Scala

Todos que trabalham com informática devem ter ouvido pelo menos uma vez na vida coisas como programação estruturada ou programação orientada a objetos. Quem conhece java com certeza já ouviu falar também de programação orientada a aspectos. Algumas coisas, entretanto não são muito discutidas como programação funcional e pattern matiching.

Essa linguagem nova, Scala, é uma mistura de muitas coisas. Ela trabalha orientada a objetos, suportando programação funcional e com pattern matiching. Para quem tem medo dessas linguagens novas, se vão pegar, se tem bastante frameworks não precisam se preocupar, o código que ela gera são classes java. Isso mesmo, ela é feita como uma layer sobre o java com sua própria sintaxe que, quando você complila um código, ele gera classes java mas você vai precisar do ambiente do Scala instalado para poder rodar essas classes.

Umas das coisas que me chamou a atenção nessa linguagem foi o seguinte. Imagine o seguinte código em java:

Trecho 1

public class NumeoSimple {
protected int valor;
public NumeoSimple(int valor){
this.valor = valor;
}
public NumeoSimple soma(int valor){
this.valor += valor;
}
public int getValor(){
return valor;
}
}
public class NumeoComposto extends
NumeroSimples {
public NumeoComposto (int valor){
super(valor);
}
public NumeoSimple subtrai(int valor){
this.valor -= valor;
}
}
....
NumeoComposto numero = new NumeroComposto(10);
int i = numero.soma(10).subtrai(5).getValor();


Parece estar estar tudo certo, mas observe que o retorno do método soma é um NumeoSimple que não tem o método subtrai. A linha do Trecho 2 não poderá ser compilada, para corrigir isso podemos fazer com no Trecho 3 mas já estamos colocando mais código em uma coisa simples.

Trecho 2

int i = numero.soma(10)
.subtrai(5).getValor();


Trecho 3

int i = ( (NumeroComposto) numero.soma(10) )
.subtrai(5).getValor();


O mesmo código em Scala é possível com muito mais facilidade. O Trecho 4 apresenta o mesmo programa que o Trecho 1

Trecho 4

Class NumeroSimples( int : valor){
protected var _valor = valor;
def soma(int valor) : self.type = {
_valor += valor;
this;
}
def valor() = _valor;
}

Class NumeroComposto extends NumeroSimples {
def subtrai(int valor) : self.type = {
_valor -= valor;
this;
}
}

NumeroComposto n = new NumeroComposto(10);
n.soma(5).subtrai(2).valor();


Essa é apenas uma das caracteristicas dessa nova linguagem. Ainda não estou defendendo isso, mas parece bem promissor. Assim que der vou colocar mais algumas coisas por aqui sobre essa nova linguagem.

quinta-feira, 3 de abril de 2008

Virando Paulista


Algumas pessoas ja devem saber, mas para quem não sabe, estou em processo de mudança para São Paulo. Para os amigos que estão no Rio fica um abraço e quando estiver lá vou tentar sempre marcar uma cerveja.

Depois de vários anos trabalhando na Averone, em Petrópolis, estou agora no IBOPE, em São Paulo. As coisas não mudaram muito, estou como Analista Senior aqui trabalhando com projetos OLAP, Sistemas Distribuídos, DSP, Java, Delphi, C#, bancos de dados, analise, etc. Ou seja, não mudou nada.

Estou perto da Avenida Paulista e essa foto mostra um dos prédios no caminho para o trabalho, que, diga-se de passagem, vou a pé, uns 900 metros.

Vou tentar fazer aqui o que fazia no Rio, o meu melhor, difundindo tecnologia. Quem quiser entrar em contato basta mandar um email para mim diego [at] diegooliveira . com.