segunda-feira, 30 de agosto de 2010

Inception - O filme

Tirando a péssima tradução do nome ("A origem"? Nada a ver..), o filme é muito bom! É uma VM, rodando dentro de outra VM, rodando dentro de outra VM, rodando dentro... :-)

quinta-feira, 4 de março de 2010

Groovy & Grails – Tutorial – Parte 5

Ontem falei de Strings. Hoje falarei sobre números. O GDK (Groovy Developers Kit – O equivalente ao JDK) fornece alguns métodos bem legais nos objetos que representam números. Como por exemplo os operadores plus, minus, abs, round… E mais alguns métodos bem mais interessantes:

  • times: para repetições
  • upTo: para uma sequência crescente de valores
  • downTo: para uma sequência decrescente de valores
  • step: para uma sequência crescente ou decrescente de valores.

Exemplo:

times:

def sequencia = ''

5.times{ //vai repetir o código abaixo 5 vezes

sequencia += 'x'

}

assert sequencia = 'xxxxx'

upTo:

def sequencia = ''

1.upTo(5) { numero –> //passa o valor como parâmetro

sequencia += numero

}

assert sequencia == '12345'

downTo:

def sequencia = ''

5.downTo(-2) { numero –> //passa o valor como parâmetro

sequencia += numero + ', '

}

assert sequencia == '5, 4, 3, 2, 1, 0, -1, -2, '

step:

def sequencia = ''

2.step(4, 0.5) { numero –> //passa o valor como parâmetro

sequencia += numero + ', '

}

assert sequencia == '2, 2.5, 3, 3.5, '

É… a princípio, é estranho você colocar uma chamada de método a partir de um número, como 2.upTo… Mas lembre-se que em Groovy todos elementos são objetos..

quarta-feira, 3 de março de 2010

Groovy & Grails – Tutorial – Parte 4

1) Mais exemplos. Seguem abaixo alguns exemplos de manipulação de Strings em Groovy. Todos são verdadeiros (os asserts retornam true) e auto-explicativos:

saudacao = "Alo Groovy"

assert saudacao.startsWith('Alo')

assert saudacao.getAt(0) == 'A'

assert saudacao[0] == 'A'

assert saudacao.indexOf('Groovy') > 0

assert saudacao.contains('Groovy')

assert saudacao[4..9] == 'Groovy'

assert 'E ai? ' + saudacao – 'Alo ' == 'E ai? Groovy' //Este aqui é muito legal!!!

assert saudacao.count('o') == 3

Reparou que algumas Strings estão entre aspas simples, ao invés de aspas duplas, como estamos normalmente acostumados? As Strings com aspas simples não recebem tratamento de conteúdo por parte do Groovy. Explicando melhor (através de exemplo, de novo):

def nome = 'Groovy'

String oie = "Tutorial ${nome}" // resultado = "Tutorial Groovy”

String oie = 'Tutorial ${nome}' // resultado = "Tutorial ${nome}"

Entendeu? :-)

segunda-feira, 1 de março de 2010

Groovy & Grails – Tutorial – parte 3.5

Mais Groovy:

1) Objetos, objetos, objetos...
Em Groovy, todas as variáveis são instâncias de java.lang.Object. Ou seja: mesmo os tipos primitivos são representados pelos seus Objects equivalentes (int -> Integer, etc...).

Em Java, se você tiver uma variável int x, você não pode fazer algo como x.toString();, pois o x não é um objeto. Em contrapartida, você não pode pegar a variável Integer y e utilizar um operador numérico sobre ela, como por exemplo y * 2. Em Groovy você pode fazer as duas coisas.

Isto traz alguns comportamentos bem interessantes. Por exemplo:

def x = 1
def y = 2
assert x + y == 3
assert x.plus(y) == 3
assert x instanceof Integer

As variáveis x e y são instâncias da classe Integer, mas em Groovy eu posso utilizá-las como se fossem do tipo int diretamente, sem precisar nenhum cast (ou unboxing). Todos os asserts acima são verdadeiros.

Hoje estou sem tempo, não deu para fazer um post maior... Fica para amanhã. :-)

domingo, 28 de fevereiro de 2010

Groovy & Grails – tutorial – parte 3

Vamos continuar vendo as principais características do Groovy:

1) Tratamento de Strings:

As strings do Groovy se comportam como as strings do Java, podendo ser utilizadas da mesma forma se você quiser. Mas elas têm algumas facilidades, que auxiliam a vida do desenvolvedor. As concatenações, por exemplo:

Em Java:

String anoModelo = carro.getAno() + “ modelo “ + carro.getModelo();

Em Groovy:

String anoModelo = “${carro.ano} modelo ${carro.modelo}”

Repare que aqui já se começa a fazer uso dos getters dinâmicos, que falei na parte 2 do tutorial. O Groovy interpreta o conteúdo entre ${ e } e obtém o valor da variável ali explícita. Se ela não for do tipo String, o Groovy vai chamar o método toString() da variável.

Outra funcionalidade das Strings em Groovy é o suporte a múltiplas linhas, como no Java, mas de uma forma mais facilmente visível para o desenvolvedor. Por exemplo:

Em Java:

String mensagem = “Tipo de dado inválido.\nO valor deve ser númerico.\nVocê deve preencher novamente o campo Ano de Fabricação.\n”;

Em Groovy:

String mensagem = """Tipo de dado inválido.

O valor deve ser numérico.

Você deve preencher novamente o campo Ano de Fabricação."""

Ou seja: Utilizando aspas triplas, o Groovy obedece a formatação que você faz no texto.

2) Construtores dinâmicos:

Volte lá na parte 2 do tutorial e veja a classe Veiculo que está lá definida. Ela não tem nenhum constructor declarado, apenas o padrão, sem parâmetros.

Mas a classe Veiculo pode ser chamada desta forma:

Veiculo veiculo = new Veiculo(fabricante:"Ferrari", anoFabricacao:2010)

O Groovy vai chamar automaticamente os setters dos atributos passados como parâmetro.

Esta funcionalidade é muito utilizada no Grails.

Bacana, não?

segunda-feira, 22 de fevereiro de 2010

Groovy & Grails – Tutorial – parte 2

Antes de falar no Grails, vamos primeiro ver como funciona a linguagem Groovy, na qual o Grails foi escrito.

As principais diferenças do Groovy em relação ao Java são:

1) Ponto e vírgula opcional:

Não é mais obrigatório colocar um ponto-e-vírgula no final de cada comando do Groovy. As duas linhas a seguir são válidas:

String nome = "Groovy";

String nome = "Groovy"

2) Palavra-chave "return" opcional:

O Groovy assume o valor do último comando de uma função como sendo o valor a ser retornado, quando não é utilizada palavra-chave return. Por exemplo, a seguinte função em Java:

String getNomeCompleto() {

return nome + " " + sobrenome;

}

Em Groovy fica:

String getNomeCompleto() {

nome + " " + sobrenome

}

3) Valor booleano True:

Além das expressões booleanas que o Java já tem, o Groovy assume qualquer valor diferente de null como sendo verdadeiro. Por exemplo:

Em Java:

if (valor != null) {

}

Em Groovy:

if (valor) {

}

4) Java Beans/Groovy Beans:

O Groovy possui uma forma simplificada de representação de Beans. Não é necessário criar os getters e setters para cada atributo do Bean. Por exemplo:

Em Java:

public class Veículo {

String fabricante;

Integer anoFabricacao;

public void setFabricante(String fabricante) {

this.fabricante = fabricante;

}

public String geFabricante() {

return this.fabricante;

}

public void setAnoFabricacao(Integer anoFabricacao) {

this.anoFabricacao = anoFabricacao;

}

public Integer getAnoFabricacao() {

return this.anoFabricacao;

}

Em Groovy:

public class Veiculo {

String fabricante

Integer anoFabricacao

}

Os getters e setters são dinamicamente gerados pelo Groovy, em tempo de execução. Se você quiser um comportamento específico para algum destes métodos que não seja o padrão (apenas setar ou retornar valores), pode escrever o método normalmente:

public class Veiculo {

String fabricante

Integer anoFabricacao

public void setFabricante(String fabricante) {

fabricante = "Fabricado por: " + fabricante

}

}

Na próxima parte veremos as demais características do Groovy. Até lá!

domingo, 21 de fevereiro de 2010

Groovy & Grails - Tutorial

Lá vou eu de novo… depois daquele tutorial de BPMN que postei aqui, resolvi fazer mais um. Estou aprendendo Groovy & Grails e, enquanto for aprendendo, vou repassando para vocês ao mesmo tempo. Então, é bem provável que eu acabe escrevendo algumas besteiras, mas fiquem à vontade para me corrigir sempre que necessário, ok?

A linguagem Groovy é uma linguagem script para a JVM, desenvolvida e patrocinada pela codehaus. “Linguagem script para JVM” quer dizer que ela gera arquivos .class como os arquivos Java geram e estes arquivos são executados diretamente pela JVM padrão da Sun (ou seria Oracle agora?).

O Grails é um framework para desenvolvimento web que segue a mesma filosofia do Ruby on Rails, mas ao invés de utilizar a linguagem Ruby, utiliza Groovy. Como já estou acostumado com o Java, achei o Grails muito mais fácil de ser utilizado, já que não preciso aprender mais uma linguagem, apenas me adaptar ao Groovy.

Recentemente o Grails foi assumido pela SpringSource, responsável pelo framework Spring, entre outros.

O Grails é um framework que utiliza vários componentes que são padrões de mercado, como:

  • Hibernate para acesso às bases de dados;
  • Log4j para tratamento de logs;
  • Spring container para injeção de dependências e gerenciamento dos controllers;
  • Tomcat como servlet container;

Além deste citados, utiliza o Groovy Server Pages (GSP) como visualização padrão (outros podem ser utilizados).

Através da utilização de plugins, ele é muito extensível. Já são mais de 350 plugins existentes para as mais diversas funcionalidades (segurança, ajax, JSF, Workflow, etc..). A lista completa pode ser vista aqui.

Na próxima parte, vou começar com as funcionalidades básicas do Groovy, para depois falar do Grails.

quinta-feira, 28 de janeiro de 2010

IPad

Ok, ok, você já deve ter visto e/ou lido sobre o novo lançamento da Apple em algum lugar. Todos os sites sobre tecnologia estão falando sobre isto. E alguns sites de notícias em geral também. Não vou ficar aqui dando detalhes sobre ele, especificações, etc.. Só vou passar minhas impressões.

Tenho um iPod Touch e acho ele fantástico. A tela de toque é imbatível. É pequeno, bonito, etc… O iPad me pareceu um iPod touch grandão. Mas aí começam os problemas ou questionamentos, justamente por ser tão parecido com o iPod touch…

  • Não suporta multi-tarefa. Ok, em um aparelho pequeno como o iPod faz falta, mas dá para passar sem. Mas em um aparelho que tenta substituir em parte um netbook, faz muita falta!!! Quer dizer que não dá para escutar música enquanto digita um texto no editor de textos novo dele? Não dá para deixar um IM executando ali no canto, enquanto vejo um vídeo? Xiiii
  • Uma câmera vinha bem, né?
  • Já vi gente reclamando do teclado virtual. Ah, coloca ele em modo paisagem que daí fica um teclado grande.. fica. Mas a parte de trás dele não é lisa, é meio arrendondada. Daí ele fica balançando enquanto você digita. A não ser que você faça isto no colo…
  • Achei meio caro. No final do ano passado, lembro que vi uns macbooks brancos (aqueles com tela de 13”) para vender por R$ 2.400,00. Este iPad aqui no Brasil acho que não vai ficar por menos de R$ 1.700,00. Poxa.. por esta diferença eu compro uma máquina com tela maior, teclado de verdade, multitarefa, que faz muito mais coisas que o iPad. E ainda é um Mac. Se comparar com netbooks/notebooks não-Macs, daí a diferença de preço praticamente inexiste.

Não sei o que vai acontecer. A Apple é historicamente competente em pegar alguma coisa e transformar em sucesso. Já existiam MP3 players quando saiu o 1o. iPod, mas ele revolucionou. Já existiam smartphones melhores que o iPhone quando ele saiu, mas até hoje é objeto de desejo de muita gente, mesmo existindo aparelhos muito melhores do que ele.

É esperar para ver…

domingo, 3 de janeiro de 2010

Antes tarde…

…do que muito tarde: Sendo bem direto, mas sincero, um feliz 2010 a todos! Saúde, felicidades e sucesso. :-)