12 de dezembro de 2007

Quer ganhar U$ 275 mil ? Seja um Android !

Não é novidade para a maioria que a Google está investindo uma grana no projeto Open Handset Alliance. Este é um grupo formado por mais de 30 empresas na área de tecnologia e mobilidade, como Google, eBay, NVidia, Intel, LG, Motorola, Samsung. O objetivo do grupo é acelerar o desenvolvimento de tecnologia para dispositivos móveis e oferecer serviços melhores e mais baratos para os usuários destes dispositivos.

O primeiro resultado desta aliança é a plataforma Android, que é um conjunto de software open source para dispositivos móveis: sistema operacional, middleware, aplicações de base (e.g., discador, agenda de contato, calendário) e um kit de desenvolvimento (SDK). Ahaaaa, agora estamos falando a mesma língua, dê-me um SDK que te darei aplicações. Para a facilitar a vida magrão, o desenvolvimento para esta plataforma é feito em Java. Mas adivinha a sacada dos marmanjos para alanvancar o desenvolvimento de aplicações? Awards!

A Google lançou o Android Developer Challenge, que distribuirá mais de U$ 10 milhões em prêmios para os desenvolvedores de aplicações para esta plataforma. A primeira etapa vai de 02/jan até 03/mar, onde as 50 melhores aplicações enviadas receberão um subsídio de U$ 25 mil para continuar o desenvolvimento. Dentre as selecionadas as 10 melhores receberão cada uma U$ 275 mil e outras 10 mais U$ 100 mil cada.

Tá, o que vai acontecer com as aplicações enviadas que não foram selecionadas e subsidiadas? Heheheh, ponto pra Google! Esta aí uma forma barata de desenvolver uma penca de aplicação legal para a plataforma. Mas de qualquer forma ta esperando o que bexo? Seja um Android e ainda corra o risco de levar U$ 275 mil pela sua idéia e aplicação.

PS: Vale a dica de acompanhar o blog do caro Ranieri Fernandes, que tem publicado bastante sobre as novidades da plataforma Android.

30 de novembro de 2007

Empresas sem foco no cliente

Aproveitando o post do meu caro amigo Vicente Goetten.

O que acontece quando uma empresa perde o foco nos seus clientes?
Acredito que este vídeo, bando de japa jogando futebol de binóculo, ilustra bem a catástrofe que é uma empresa seguir este caminho.

Boas risadas e mantenha sempre o foco no seu cliente.


17 de outubro de 2007

Escravidão contemporânea.

[ligar modo vá pra PQP]

Eu, Giovane Roslindo Kuhn, acabo de virar gerente de tecnologia de uma das maiores empresas desenvolvedoras de software do mundo. Nossa sede é na "Perdiganha", frio pra caralho =( , mas temos contratos com as maiores montadoras de "tapetes voadores" da Zuropa =D. Sim, desenvolvemos grande parte dos sistemas que rodam nestas grandes montadoras, com isso, precisamos utilizar o que há de mais moderno em tecnologia para atender a demanda destes sistemas (Java, Ruby, Pyton, C#).

Ok, ok, não vou mentir. Existe o legado nestas empresas, e consequentemente nos nossos sistemas também. Tem muita fábrica de "tapetes voadores" que ainda utiliza os bons e velhos mainframes. Qual o problema? Bom, o cobolzão ainda tem que rolar solto em muito dos nossos sistemas. Eu como gerente me vi numa fria, achar mão de obra aonde? Qualquer dinossauro que saiba programar Cobol que se preze, custa o OLHO-DA-CARA aqui na "Perdiganha", afinal eles são uma raridade.

Já sei, eu sou um gênio! Vou abrir uma filial em algum país emergente, conseguir mão de obra em Cobol barata, e com isso deixar meus superiores bem felizes =D!
China? Hmmmm, eles não tem muita fama de falar alemão.
Índia? Eles programa bem, mas será que ainda Cobol?
Brasil? Boaaaaa, ótima idéia. Existem diversas colônias "perdigãs" por lá, além de ser um povo alegre, criativo, receptivo. Eu sou foda, achei a solução. Brasil aí vou eu!

[alguns meses]

Oi pessoal, aqui estou eu no Brasil. Escolhemos a cidade de Blumenau para a nossa filial =D, conseguimos bastante barganha fiscal, é uma região em que bastante gente fala "perdigão", além de ser considerada um celeiro em empresas de software. Mão de obra não vai faltar, estou certo disso =D!

[algumas semanas]

Pessoal, estou fudido! O povo daqui fala um "perdigão" de colônia, ninguém lá na matriz da "Perdiganha" está entendendo, muito menos os nossos clientes montadores de "tapetes voadores". Outro problema, a mão de obra em Cobol é MUITO-CARA! Eu achei que este povo ainda programasse em Cobol. Mas não se preocupem, já tenho uma grande solução, pois eu sou um gênio!

Vou sugerir as universidades ensinarem Cobol, claro! Em pouco tempo vou ter vários estagiários craques em Cobol, com custo zero para ensiná-los, além de pagar bem poquinho. Ok, ok, vou ter que dar um cursinho de "perdigão" pra essa galera! Hahahahaha, eu sou foda, meus custos são baixíssimos, meus superiores vão ficar felicíssimos comigo =D! Estarei ajudando a região, afinal coloquei uma nova cadeira na universidade local, COBOL! Ué, universidade não é pra ser um berço de tecnologia? Olha a tecnologia se disseminando por aí! Além do que, estarei dando oportunidade pra mulecada "trabalhar" em uma mega-power-ultra-amazing-crazy multi-nacional =D!

[desligar modo vá pra PQP]

Vá-cata-coquinho multi-nacional da p**** com essa sua escravidão contemporânea escancarada!

1 de outubro de 2007

Palestrando na XVI Seminco (Blumenau)

Parece que a 24º edição da Oktoberfest de Blumenau vai receber mais alguns participantes. No mesmo período de abertura da festa (3/out a 5/out) estará ocorrendo o 16º Seminário de Computação da Furb (Seminco). Para a minha felicidade, fui convidado a palestrar durante a Seminco (dia 4/out as 08:30), hálibi certo para umas "férias" por Santa Catarina e liberação do mestrado por parte da UFRGS ( =D ). A viagem será ótima para restabelecer os vínculos com a Furb, além de rever os amigos, e claro, tomar bastante chopp na tradicional festa.

Bom, sobre o tema da palestra. Recentemente a Furb adquiriu um laboratório com placas gráficas GeForce 6, equipamento que dá para fazer muita coisa legal em computação gráfica. Mas o poder destes equipamentos vai muito além, conseguindo speedups de 3-4x sobre um Intel Core Duo em processamento aritmético, e considerando as placas mais modernas (GeForce 8) este speedup poder chega a 20x mais. Como podem notar, estas "plaquinhas" podem fazer muito mais do que simplesmente gerar gráficos e imagens, com um custo bem menor que qualquer processador de ponta.

Então, este é o espírito da palestra no evento. (1) Inspirar os alunos a utilizarem este novo laboratório para fazerem coisas legais em computação gráfica. (2) Abrir os olhos do pessoal para o potencial destes equipamentos para processamento de propósito geral.
(3) Mostrar ao pessoal como mapear um problema de computação em geral para ser processado pela placa gráfica.

A minha palestra entitulada "Introdução as Unidades de Processamento Gráfico" ocorre no dia 4/out as 08:30 no Auditório da Biblioteca Central do Campus I. Também vale ressaltar outras palestras do evento que serão ministradas pelos meus comparsas aqui da UFRGS:
  • 3/out - 18:45 - Vitor Pamplona - Criando Projetos Open Source
  • 4/out - 08:30 - Giovane Kuhn - Introdução as Unidades de Processamento Gráfico
  • 4/out - 11:00 - Todos - Debate: Perspectivas do Mercado Regional de Trabalho em Computação
  • 4/out - 18:30 - Andréia Schneider - Animação de Humanos Virtuais Voltada para o Ensino de Libras
  • 4/out - 20:15 - Leandro Fernandes - Um Scanner Para Cálculo de Dimensões de Caixas em Tempo Real a Partir de Imagens
Isso aí, quem aparecer ganha um chopp na Oktoberfest de brinde hehehe !
Abraço

27 de maio de 2007

Linguagem de Programação JavaFX Script

Hahahahahahahaha... alguma das funcionalidades da linguagem de script JavaFX:

1) Queries

var titleTracks = select indexof track + 1 from album in albums,
track in album.tracks
where track == album.title;


2) For Each

var titleTracks = foreach (album in albums,
track in album.tracks
where track == album.title)
indexof track + 1;


Acho que já vi algo parecido "Queries Nativas em Java" =D

1 de maio de 2007

Entretenimento das últimas semanas.

Pois é, a barra tá pesada! Como podem notar o sumisso está grande nas últimas semanas. Mas podem confiar, o motivo é nobre.

Segue uma imagem para ilustrar detalhadamente no que andei me divertindo nestas últimas semanas:


Abraço !!!

20 de abril de 2007

19 de abril de 2007

Puxão de orelha faz bem, JavaScript também. Apresento o Firebug!

Este post fala especificamente do Firebug, uma ferramenta para editar, depurar e monitorar as principais tecnologias usadas em páginas web (e.g. CSS, HTML, JavaScript, DOM).

Sempre tive bronca com as tecnologias usadas em páginas web (CSS, HTML, JS, ...). Primeiro, pela falta de conformidade das implementações com as especificações (sic. IE), odeio esses "if (IE) { do_it; } else { do_similar; }". Segundo, que o sucesso de uma tecnologia está diretamente ligada à qualidade dos seus editores, compiladores, depuradores, ..., e convenhamos que este nunca foi um ponto forte nestas tecnologias.

Mas, incentivado pelo puxão de orelha do Carlos, o sucesso do AJAX e os tantos frameworks que abstraem a falta de compatibilidade entre navegadores, e a dica de alguns colegas no FISL, resolvi investigar o tão comentado Firebug.


O que é Firebug ?

É uma ferramenta de desevolvimento integrada ao Firefox, que permite editar, depurar e monitorar conteúdo CSS, HTML, JavaScript e DOM utilizados nas páginas web, e tudo isso pode ser feito enquanto você navega pelas páginas.


Instalando.

O Firebug é instalado como um plugin do Firefox, click, click, click, depois de reiniciado o navegador e todas as tuas sessões recuperadas (isso é bala no Firefox), você está pronto para usar o Firebug.


Primeiros passos

A tecla F12 é a sua amiga, com ela você abre e fecha a aba do Firebug. Com isso você pode inspecionar, editar, depurar o conteúdo da página que você está navegando no momento.


Trabalhando com HTML

Nesta aba você pode visualizar o código HTML da página, pode navegar pela sua árvore de elementos e ao selecionar um elemento ele é destacado na página atual.
O contrário também pode ser feito, isto é, clicar em um elemento na página e automaticamente o Firebug seleciona este elemento na árvore.
Muito fácil achar elementos dentro da sua página!

O Firebug apresenta os atributos do elemento selecionado em uma janela lateral, ele permite você alterar estes atributos ou editar diretamente o código HTML. Em todo momento o recurso de auto-complete está disponível =D.
O melhor disso tudo é que as alterações têm efeito instantâneo na página, super importante na abordagem "tentativa-e-erro" para desenvolvimento de interfaces web!


Trabalhando com Layout

Finalmente você vai conseguir entender porque suas caixas não estão alinhadas corretamente!
Basta selecionar o elemento desejado e deixar o Firebug mostrar e medir todos os atributos envolvidos no layout deste elemento.
Tudo isso facilitado com o uso de réguas e linhas guias, ah, lembra do recurso de editar os atributos on-the-fly?
Use e abuse em conjunto com as teclas direcionais =D!






Monitoramento da Rede

Vitor, lembra quando a página do Priki demorava mais de 10 segundos para ser carregada? Mole mole com o Firebug.
Para cada arquivo carregado dentro de uma página, ele mostra uma barra com o início e fim do carregamento em relação aos outros arquivos, além do tempo necessário para esta tarefa.
As barras cinzas em claro indicam que o arquivo foi carregado do cache do navegador, não consumindo recursos da rede.
Fácil de achar os gargalos, além de permitir ajustes finos na ordem de carregamento dos arquivos. Recurso muito bom!

O Firebug permite visualizar o conteúdo do request-response de cada arquivo carregado, além disso, ele permite monitorar as requisições XML utilizadas em páginas AJAX.


Depurando JavaScript

O esquema de depuração do Firebug é outro grande diferencial, de dar inveja a muita IDE com mais anos de estrada.

Permite inserir breakpoint em qualquer linha do código JS, parando a execução quando o depurador passar por aquela linha, além disto, este breakpoint pode conter uma condição de parada.
Tec, tec, tec, tec... a depuração pode ser feita passo a passo, permitindo avaliar expressões, checar e alterar valor das variáveis no contexto.

Bom, se mesmo com este arsenal de depuração, você deseja continuar no bom e velho "printf", manda ver! O Firebug disponibiliza um console, onde você pode escrever no seu JS comandos de saída.

>>> console.debug("Passei aqui!");
>>> console.log("Usuário removido.");
>>> console.warning("Conexão não estabelecida.");
>>> console.error("Ihhh, fud***");

Bom, seguindo na linha redeshop, as ofertas não acabam por aí. Se você precisa achar gargalos no seu JS, o jeito é partir para um profiling. Mas não se preocupe, o danado do Firebug tem! Basta um click para iniciar o profile, outro clique para interromper e apresentar o relatório. Tenta fazer no Eclipse =(


Cara, quanta coisa ainda tem nesta ferramenta! Bom, dormir também é preciso...


Conclusões

Apresentei apenas algumas características da ferramenta Firebug, e todos elas de maneira bem superficial. Você pode concluir os benefícios que esta ferramenta pode te trazer ao desenvolver páginas web com CSS, HTML, JavaScript e DOM. Eu não mencionei a parte de desenvolvimento CSS, vou deixar para os designers, nem a aba para exploração de árvores DOM. Mas a filosofia é a mesma, edite on-the-fly.

Fiquei realmente impressionado com o poder do Firebug, ousaria em dizer que é uma IDE dentro do Firefox, e vou mais longe, deixa muita IDE aí no mercado no chinelo, se tratando de depuração, profile, logging. Certamente o puxão de orelha valeu a pena, e a minha bronca miou com tecnologias para desenvolvimento de páginas web.



FERRAMENTA ALTAMENTE RECOMENDÁVEL!



PS: Nem tudo é maravilha ainda, utilizando a versão 2.0.0.3 do Firefox algumas features do Firebug não funcionaram corretamente, mas de qualquer forma, não arranha nem um pouco o brilho da ferramenta.


Referências

Firebug
Firebug add-on
AJAX debugging with Firebug
Blog do Carlos
A Guide for JavaScript Debugging using Firebug for Firefox

16 de abril de 2007

FISL 2007 - Conclusões

Não vou me estender nas impressões sobre o FISL, já que a maioria delas vêm de encontro com as do Vitor.

Porém gostaria de acrescentar algumas sugestões para o próximo ano:
- Voltem para a PUC por favor, pelo menos os problemas estruturais vão acabar. Ao que tudo indica a comissão do FISL está lutando para isso.
- Fazer metade das salas iniciarem suas palestras em hora cheia (ex. 10:00) e a outra metade em hora quebrada (ex. 10:30). Com isso baixaria a quantidade de gente e túmulto nos corredores na saída das palestras, além de permitir eu sair antes de uma palestra que não gostei e conseguir pegar logo outra palestra.

Gostaria de parabenizar a comissão do grupo de usuários do FISL, que aumentou a nossa área, permitindo uma melhor circulação por entre os stands. Isso mostra que eles acatam sugestões de anos anteriores =D !!!

FISL 2007 - Balanço último dia

Segue o balanço do último dia (14/04), parece relatório para empresa isso aqui !!!

Evento:
- Galera voltou a comparecer em massa.

- Problemas estruturais não tiveram jeito, aumentou a quantidade de gente, logo link voltou a cair e algumas quedas de energia no restaurante. Um dos banheiros estragou, deixando os outros um caos, principalmente na saída das palestras. Ouvi um zum-zum da comissão, que no próximo ano é quase certo que volte a ser na PUC, tomara que os engravatados se acertem.

- Zorra organizada pela galera do Debian parou o FISL por uns cinco minutos, apitasso geral =D.



Palestras:
- Primeira do dia "Web 2.0 na prática com Java, Faces, EJB, JPA / Hibernate e AJAX", apesar do título pretencioso para ser apresentado em apenas 1 hora, o palestrante focou em Ajax. Na minha opinião mandou muito bem, deixando claro o que é o Ajax, os resultados gerados por este tipo de tecnologia, apresentou a facilidade que o Faces dá para utilizar Ajax. Enfim, gostei da palestra.

- Depois a palestra "Por que ser um Desenvolvedor *Franciscano*? Resposta ao Jô !", que tinha por objetivo dar uma reposta à entrevista polêmica no Jô Soares sobre software livre (SL), em que ele denominou este tipo de desenvolvedor de *Franciscano*. Estavam na mesa grandes desenvolvores de SL no país, onde alguns falaram nada, outros alguma coisa, e outros disseram tudo: "Se desenvolve SL por paixão, para se divertir, aumentar sua rede de amigos, aprender, evoluir, compartilhar conhecimento, transformar seu meio social". Apesar das boas conclusões, vou ser obrigado a puxar a orelha do pessoal. SL já tem a fama de parecer tudo uma bagunça, mas a gente sabe que não é. O pessoal não poderia ter deixado acontecer as gafes no início da palestra, como a desincronização áudio/vídeo na entrevista do Jô, e o "pau" em um dos palestrantes, perderam metade da platéia com isso. Enfim, quem permaneceu na sala ouviu o que precisava para saber o que motiva um desenvolvedor de SL, gostei !!!

- Depois uma que eu esperava bastante "Nos trilhos com Rails", que mostraria os principais recursos do Ruby on Rails e ao final faria uma comparação entre uma aplicação Java+Struts+Hibernate e outra RoR. Infelizmente a palestra teve seu horário antecipado e eu não vi. Alguém viu?

- A tarde um mega palestra que não estava no programa "Tudo sobre frameworks Java com Leandro Saad", onde o Leandro mostrou grande parte das funcionalidades do Guara, além de diversas dicas sobre outros frameworks. Sem dúvida a palestra mais produtiva do FISL.

14 de abril de 2007

FISL 2007 - Balanço segundo dia

Aqui vai minha opinião sobre o segundo dia (13/04) do FISL:

- A quantidade de gente circulando deve ter caído pela metade neste segundo dia, o que me surpreendeu, já que me parece mais natural o pessoal ser liberado do trampo numa sexta-feira. Com isso não consegui avaliar se a estrutura de suporte melhorou ou se foi a quantidade de gente a menos que impactou, já que não houveram quedas de luz e nem baixas no link.

- Menos gente circulando, menos gente se interessando sobre o trabalho do JavaFree, logo mais palestras puderam ser assistidas. Porém minha opinião continua, palestrar fracas e sem necessidade.

- A primeira palestra que assisti do dia foi "O Presente e o Futuro da Propriedade Intelectual: um debate internacional". Palestra nada técnica, mas que abordava uma tema super atual e ainda não resolvido.
Com este "boom" do software livre, de quem é o direito intelectual? Pense em um projeto open source e que o Joãozinho contribui para este projeto. Um belo dia o desgraçado processa os responsáveis pelo projeto por direitos intelectuais no código que ele contribuiu. E aí, de quem são os direitos?
Tudo indicava que eu teria estas respostas na palestra, afinal dois "fodões" em propriedade intelecual estariam falando sobre o assunto, porém, na minha humilde opinião, apenas os problemas foram relatados e propostas de solução que é bom, NADA !!!

- Mas não desisti da minha pergunta, parti logo em seguida para a palestra "Novos Modelos de Negócio com Propriedade Intelectual", fiquei exatos 10 minutos, tempo para me convencer que ali também não me dariam respostas.

- Indo para a alçada mais técnica, fui assistir a palestra "Developing With KDE4", que apresentou os novos recursos para o desenvolvimento de aplicações desktop no KDE. A palestra só carimbou a minha conclusão sobre o assunto, que C++ apesar da idade, ainda está engatinhando no desenvolvimento deste tipo de aplicação.

- Finalmente uma palestra envolvendo Java "Apache Struts 2 - Turbinando o Desenvolvimento Web", e como a maioria sabe meu conhecimento em frameworks é quase nulo, boa hora para conhecer um pouquinho mais sobre o assunto. Conclusão, eu já sabia Struts 2 =(.

- Por fim, uma palestra sobre um assunto que curto muito, que é fazer baixarias com banco de dados. A palestra "PostgreSQL Babilônico - O banco de dados de muitos idiomas" tentou mostrar as diversas formas e linguagens para estender o PostgreSQL, interessante o assunto. Porém o palestrante não ajudou, com sua aversão ao desenvolvimento orientado a objeto e com o seu discurso "Parem de fazer selects burros e lógica de negócio nos seus objetos, façam isso no banco", fui obrigado a tapar o ouvido o resto da palestra. Além do figura ter gastado mais tempo e atenção preparando o currículo dele do que a própria apresentação, pois "estender" com "x" é dose amigo.

- Outra atração do dia foi o "TUX", muito engraçado o cara, fazendo várias bobagens pelo fórum, zoando com todo mundo. Ele foi se meter a bobo lá no JavaFree e tomou umas porradas, ta filmado hehehe.


- Ahhh, o cafézinho com as gostosas servindo, para "estresse" geral, continuaram no segundo dia =D.

13 de abril de 2007

FISL 2007 - Balanço primeiro dia

O balanço no primeiro dia (12/04) do FISL, começando pelos aspectos negativos:

- Poucas chamadas para palestras me chamaram a atenção, logo foram poucas que eu fui assistir, e infelizmente todas elas foram decepcionantes. Ponto fraco as palestras deste primeiro dia.

- A estrutura de suporte do evento ainda não está 100%, link para a internet instável, muitas vezes mais lento que uma linha discadinha, alguns pontos caiu a luz. Estes pontos acho extremamente grave para o evento.


Agoras as coisas legais, que fazem o evento valer a pena:

- Poder trocar idéia com vários fodões da área, que provavelmente desenvolveram algum framework que você esteja usando. Existe fonte melhor que essa para obter informações?

- Poder detalhar o trabalho feito no JavaFree ao pessoal que o (des)conhece.

- Poder conhecer pessoalmente uma cambada de gente que freqüenta o portal do JavaFree.

- Confraternizar a galera é muito show, vários contatos, diversas discussões técnicas, compartilhamento de experiências, momento de bobeira, enfim, na minha opinião é este tipo de coisa que faz o sucesso do evento.

- Tomar cafézinho a vontade, não um cafézinho qualquer, e sim um capuccino ou chocolate. Para deixar a situação mais "estressante", tais quitutes são servidos por baitas gostosas.


E vcs? Alguma palestra decente?
O que mais vocês curtiram?

FISL 2007 - JavaFree marcando presença

Como todos devem saber está ocorrendo em Porto Alegre, de 12 a 14 de abril, o 8º Fórum Internacional de Software Livre (FISL 2007), um dos maiores fóruns sobre o assunto no mundo. Telinha de abertura do evento logo abaixo:


Mais um vez nós do JavaFree estamos marcando presença com um mega-stand (1/4 de pizza) para expor o trabalho realizado pela nossa galera. Ta aí uma fotinho do nosso cantinho:


Podem notar que a camiseta deste ano está muito legal, parabéns ao Dalton. Aliás o pessoal que quiser uma camiseta, elas estão sendo vendidas no stand. Ta aí alguns clientes do dia:


Galera que esta afim de conhecer mais o nosso trabalho, tirar algum tipo de dúvida, jogar conversa fora, falar das promoters gostosas do evento, tomar cafezinho, enfim, passa lá no stand para conversar com a gente. Da esquerda para a direita: Elias (Confraria do Java), Vitor e Eu


Além da galera na foto, marcou presença o Ping (homem mobilidade), Dalton (fundador) e o Vicente (escritor AspectJ), aliás, sou fã do cara e da Datasul também heheh !!!

Abraços,

12 de março de 2007

Passagem de parâmetros em Java, valor ou referência?

Passagem de parâmetros em Java é por valor ou referência? Eu sei que é um assunto meio batido, mas ainda assim gerou muita conversa e discussão entre os mestrandos e doutorandos aqui do grupo de computação gráfica da UFRGS. Vamos aos fatos!

Java possui dois tipos de dados,

Tipo primitivo:
Englobam os tipos numéricos (byte, short, int, long, char, float, double) e booleano (boolean). Uma variável de tipo primitivo recebe um valor primitivo, este valor é armazenado diretamente no espaço de memória alocado para a variável. Exemplo:
public static void main(String[] args) {
byte a = 10;
byte b = a;
}
A figura ao lado representa as duas áreas de memória alocadas para as variáveis a e b, cada uma mantendo o seu respectivo valor.


Tipo referência:
englobam os tipos classes, interfaces e arrays. Salientando que uma String é uma classe. Uma variável do tipo referência recebe como valor uma referência para um objeto. Na área de memória da variável é armazenado um ponteiro para a área de memória que está o objeto. Objeto é uma instância de classe ou array. Exemplo:
public static void main(String[] args) {
Carro a = new Carro();
Carro b = a;

}
Figura apresenta a área de memória alocada para o objeto Carro e as duas áreas de memória alocadas para as variáveis a e b. Notem que as duas variáveis possuem áreas de memórias distintas, mas que referenciam o mesmo objeto.



Concluindo, passagem de parâmetro em Java é SEMPRE POR VALOR, isto é, ao passar uma variável como parâmetro de um método sempre será efetuada a cópia dos bits desta variável,

Variável primitiva:
public static void main(String[] args) {
byte preco = 10;
System.out.println("Preço antes : " + preco);
// Saída "Preço antes : 10"

somaPreco(preco);
System.out.println("Preço depois: " + preco);
// Saída "Preço depois: 10"

}

private static void somaPreco(byte parametro) {
parametro += 5;
}
Notamos que o conteúdo da variável preco foi copiado para a variável parametro, portanto quando somamos 5 a variável parametro estamos alterando apenas o conteúdo desta variável, enquanto a variável numero permanece com o mesmo valor.


Variável referência:
public static void main(String[] args) {
Carro carro = new Carro();
carro.preco = 10;
System.out.println("Preço antes : " + carro.preco);
// Saída "Preço antes : 10"
somaPreco(carro);
System.out.println("Preço depois: " + carro.preco);
// Saída "Preço depois: 10"
}

private static void somaPreco(Carro parametro) {
parametro = null;
}

private static class Carro {
byte preco;
}
Aqui o conteúdo da variável carro é passado para a variável parametro, ou seja, uma cópia da referência para o objeto Carro, as duas variáveis apontam para o mesmo objeto. Quando alteramos o conteúdo da variável parametro para null, a variável carro permanece inalterada.


Talvez a dúvida da galera tenha ocorrido pela maioria ser desenvolvedor C++, onde o tipo referência tem uma conotação um pouco diferente.

A regra de passagem por valor pode ser generalizada para qualquer atribuição, passagem de parâmetro ou retorno de método em Java, sempre é feita a cópia dos bits da variável, ou seja, SEMPRE POR VALOR.

Referência: Java Language Specification

5 de março de 2007

Tempo, nosso bem mais precioso.

Falar da correria do final de semestre foi proposital no último post. O final de semestre me encanta, me fascina, me transforma, me sinto um gênio, um homem com sua cópia!

Nesta época ando a passos largos, faço 10 coisas ao mesmo tempo, termino 10 coisas ao mesmo tempo, se bobear, as 10 no mesmo dia. Nesta época as prioridades ficam claras, as necessidades evidentes, os prazos não passam de poucas horas, as decisões sempre certeiras. A cada dia uma nova batalha travada, uma nova batalha vencida, sem aquela sensação de não ter evoluído nada.

De onde sai toda esta produtividade? Tentei relembrar e listar algumas atitudes tomadas no final de semestre:
  • listar tarefas: nesta lista vão todas as tarefas a serem desenvolvidas nesta época;
  • estabelecer prazos: definir um tempo para o término de cada tarefa, seja arrojado nos seus prazos, isso fará a diferença;
  • priorizar: estabelecer uma ordem para as tarefas, geralmente as que oferecem maior risco têm maior prioridade;
  • tarefas diárias: listar em um papel as suas atividades do dia, mas tem que ser em papel, aquela história de todo list na internet não funciona;
  • focar: talvez seja a mais importante das atitudes, manter o foco nas tarefas que estão na sua lista do dia, nestas tarefas desenvolver apenas o necessário, para que o prazo arrojado seja alcançado;
  • focar: estou batendo nesta tecla novamente devido a sua importância, tente não mudar o seu contexto de trabalho, iniciou uma tarefa, continue nela até terminar;
Escrevi sobre isso porque estou me sentindo improdutivo no mestrado. Durante o post fui me deparando com vários erros que estou cometendo:
  • Não estou fazendo minha lista diária de tarefas. Como vou saber se alcancei meus objetivos do dia?
  • Estou trocando de contexto direto. Estou lendo um artigo, dai vejo uma referência, parto a procura desta referência, depois tento implementá-la. Cadê o foco Giovane?
  • Não estou dando prazo para as minhas tarefas. Pior situação que pode existir, você fazer algo que tenha tempo ilimitado. XP já dizia: "Se tiveres 8 horas para fazer algo, você vai usar as 8 horas. Se tiveres 16 horas para fazer a mesma coisa, você vai usar as 16 horas."
Uma coisa é certa, vou ser um guerreiro de final de semestre o ano todo. Não é pelo meu chefe, não é pelo prêmio de melhor do mês, não é por ninguém além de mim. Quero evoluir diariamente, quero fazer a diferença, para isto, quero cuidar do meu bem mais precioso, quero que isso faça parte da minha cultura!

E você como tem cuidado do seu bem mais precioso?
Continuas escondido nas estimativas de 16 horas para aqueles relatórios que consegues fazer em 8 horas? Continuas nos fóruns da vida e indo para casa com a sensação de nada feito?
Se não, me conte como mantém a sua produtividade!

28 de fevereiro de 2007

Gerentes de projetos inatos.

Sim... você é um, eu sou, todos nós somos gerentes de projetos por nascença. Ouso até em dizer que somos grandes gerentes de projetos, só não confundam com gerentes de grandes projetos.

Pense nos últimos projetos que você gerenciou, daqueles que você aloca e administra recursos, estima prazos, define características e prioridades, negocia com clientes, enfim, todas as atividades que um gerente (como nós) sabe executar.

Você vem com essa: "Ah, eu nunca gerenciei um projeto, aliás, nem sei executar todas estas atividades!"

Será? Aposto que você já gerenciou vários projetos, e digo mais, vários deles ao mesmo tempo. Também aposto que a grande maioria dos projetos tiveram êxito e muitos deles pleno sucesso. Cito exemplo:

Faltam 2 meses para acabarem as suas aulas na faculdade, datas marcadas para as entregas dos trabalhos finais de BD, Compiladores, Linguagens de Programação, SO (éca), além das provas finais, incluindo o temível Cálculo VII. Cara, você tá em apuros!

Você vai para casa, xingando os professores é claro, e pensa em tudo que deve ser feito. Em Linguagens de Programação você está bem na foto e logo define: "Vou deixar por último, se der tempo, faço alguma coisinha".

Em SO a coisa muda de figura, além da professora ser chata, você não gosta da disciplina. Sorte a sua que o trabalho é em dupla e um dos seus colegas manja muito. Você muito esperto, combina com este colega de fazerem juntos o trabalho. Como tem muita coisa a ser feita, já marcam para toda terça e quinta a noite o desenvolvimento deste trabalho.

Sobre BD e Compiladores você divaga: "Vou precisar de um compilador para o meu BD, então é melhor eu começar o meu trabalho de Compiladores para ganhar experiência, depois começo o de BD". Pelas suas contas você precisaria trabalhar umas 12 horas por semana nestes 2 projetos para conseguir entregar a tempo. Acho melhor você cortar as saídas de sexta a noite para conseguir estas 12 horas cara, afinal, são só 2 meses.

Para as provas você resolve estudar aos finais de semana, e no dia anterior à prova dar aquela revisada. Como você pode ver, tudo planejado.

Após 1 mês, o trabalho final de SO está de vento em popa, afinal o seu colega está mandando ver. O de Compiladores você teve vários problemas, já sanados, mas que fizeram atrasar o trabalho de BD. Lá foi você chorar as pitangas para o professor de BD, mas ele aceitou você não fazer os comandos "order by" e "group by". As provas melhor impossível, só o temível cálculo que não entrava na cabeça.

Prazos encerrando, SO entregue, Compiladores entregue, BD faltando pequenos detalhes, e Linguagens de Programação (você esqueceu ?). Sorte sua que o professor é gente boa, com 5 minutos de conversa você consegue mais 1 semana de prazo. Pra melhorar a história, o bicho é o maior matão, então qualquer meleca que você fizer está bom. Provas faltando apenas de cálculo, mas você prometeu se dedicar neste último final de semana.

Por fim tudo entregue e você no bar com os amigos comemorando o término do semestre. Só um coisa, lembre de voltar no próximo semestre para fazer Cálculo VII novamente. =PPP

Dada as devidas proporções, não te achasse um gerente de projeto?

25 de fevereiro de 2007

Queries nativas em Java.

Na onda de sugestões para facilitar o desenvolvimento de aplicações Java, veio em mente um projeto que eu e o Vitor gostaríamos de ter feito um tempo atrás. A idéia é oferecer queries nativas em Java, acabando com algumas fraquezas de consultas baseadas em String. Na verdade este projeto era para ter saído no lugar no SnailDB, mas como o objetivo era a gente se formar, acabamos priorizando o Snail para fechar créditos na disciplina de BD.

1) Uma limitação de consultas baseadas em String é que a checagem sintática e de tipos é feita em tempo de execução, um exemplo SQL:

"SELECT nome FROM Pessoa WHER idade > 20"

O desenvolvedor saberia do erro sintático no "WHER" apenas em tempo de execução. Outra questão são os erros semânticos, supondo que o desenvolvedor atribua o retorno de um registro desta consulta a uma variável de tipo "Integer", este erro também só aconteceria em tempo de execução.

2) Outra grande limitação é que os atributos utilizados nesta consulta não participam de uma processo de refatoração, artifício muito utilizado pelos desenvolvedores, deixando o processo de manutenção do código oneroso. Pense em refatorar o código da classe Pessoa, para o atributo "idade" ser "idadeEmAnos". Buuummmm, esta consulta passaria a dar erro!

A idéia de queries nativas é simples, as consultas são escritas com uma sintaxe que faz "parte" da linguagem, permitindo que checagem sintáticas e de tipos possam ser feita em tempo de compilação, assim como os atributos utilizados na consulta participem em um processo de refatoração. Segue um exemplo de consulta sobre uma coleção em memória, retornando todos os clientes iniciando com nome "Java":

Collection(Customer) customers; // prevayler poderia manter esta coleção =D
...
Collection(Customer) result = FROM customers c WHERE c.name LIKE "Java%";

O objetivo do post é salientar o benefício de um recurso como este, deixando de lado a sintaxe a ser utilizada.

Quais seriam os benefícios de queries nativas ?

1) Checagem sintática e semântica
: desenvolvedor teria um feedback rápido das "cagadinhas" feitas na consulta em tempo de compilação;

2) Facilidade de manutenção:
as IDEs poderiam manter referência aos atributos utilizados na consulta, permitindo a refatoração e outros artifícios para manutenção de código;

3) Facilidade de aprendizado:
este benefício vale aos desenvolvedores vindos de consultas SQL-based.

Meu deus, vamos alterar a especificação da linguagem ? Não.

1) Poderíamos fazer algo em cima do Java, que checasse as consultas no código antes do compilador Java, para então traduzir para um código Java válido;

2) Viajando um pouco mais, poderíamos traduzir esta consulta para algum banco de dados específico, talvez.

A galera do db4o fez algo muito legal, queries nativas através de código Java. Segue um exemplo:

Collection(Customer) result = database.query(Customer)(new Predicate() {
public boolean match(Customer customer) {
return customer.getName().startsWith("Java");
}
});

Eu gostaria de algo mais simples, que o desenvolvedor não precise escrever tanto e que você mais intuitiva para o recém chegados do SQL. Quem sabe juntar os dois mundos não dê frutos ?

Porque remexi nesta idéia novamente ? Foi lendo a a especificação do C# 3.0, os caras colocaram queries nativamente na linguagem, me parece ter ficado bem descente. O projeto deles é o LINQ. Um pequeno exemplo:

var result = from c in customers
where c.name == "Java"
select c;

E o mais legal é ver uma idéia que tivemos alguns anos atrás, sendo investida e dando frutos nas linguagens do momento.

Bom deixa eu ir, mulher ta em cima. Mas vou continuar pensando a respeito e postar algo mais concreto. Abraço.

13 de fevereiro de 2007

Emprego: O que você responderia?

Lendo o folhetim de um grande guru de RH do país, me deparei com uma pergunta feita na entrevista de emprego para uma determinada vaga:

"Você está dirigindo seu carro numa perigosa noite de tempestade. Você passa por um ponto de ônibus e vê três pessoas aguardando o ônibus:
- Uma senhora idosa que parece estar à beira da morte;
- Um médico que salvou sua vida no passado;
- A pessoa amada que habita os seus sonhos.
Você só pode levar um no seu carro.
Qual você escolhe? Por favor justifique sua resposta".

Como farei um tour por SC neste carnaval, deixo a resposta do candidato escolhido para a próxima semana. Enquanto isso...

O que você responderia ?

12 de fevereiro de 2007

Usar padrões é legal.

Como um bom amante das bases da computação, neste final de semana baixei o código do compilador Java da Sun, para dar aquela fuçada básica na implementação dos caras.

A função do compilador é algo muito simples: ler um arquivo ".java", verificar se tudo o que o arquivo está "falando" é correto, em caso afirmativo gerar o ".class" que será executado futuramente pela JVM. Apesar do objetivo simples, tem muita coisa para se divertir no desenvolvimento de um compilador, mas deixo esta parte divertida para um futuro tutorial "Eu quero o meu compilador".

Neste post, gostaria de destacar o quanto é legal usar padrões de projeto. Bastou algum tempinho fuçando o código, para entender o funcionamento do compilador. Porquê ? Malditos patterns espalhados pelo código, ajudaram a comunicar pelo que cada classe era responsável, aliás, este é um dos principais objetivos dos patterns na minha opinião, agilizar a comunicação entre desenvolvedores.

Outra coisa que me deixou muito feliz, é que a estrutura do compilador é muito parecida com que eu usei no SnailDB, inclusive com os mesmos tipos de padrões, principalmente Visitor. Ou seja, desenvolvedores do javac também entenderão tranqüilamente o meu código.

Use padrões, é legal !!!

7 de fevereiro de 2007

Sem time, sem metodologia (parte II).

Dando continuidade ao último post e aliviando um pouco a dor dos defensores do RUP, vou contar a experiência de implantação do XP em uma "empresa", na qual fui um mero observador. Como vocês devem suspeitar, o final desta história é claro que não é vitorioso, afinal este é o objetivo do post: "Sem time, sem metodologia".

A implantação do XP foi feita na equipe que desenvolve os softwares internos de uma universidade, que nada tem de diferente de uma grande empresa, tirando a maior burocracia claro.

Como sempre, o ambiente era o mais amigável para a implantação, cliente sempre perto (eles próprios), grupo de 8 desenvolvedores, vários deles experientes, "diretores" dando carta branca ao projeto, enfim, tudo nos conformes para o XP.

Consultoria básica para treinar o pessoal, com direito ao Klaus e tudo, toda aquela euforia na equipe, "gerente" feliz com este clima, novatos adorando o contato com pessoal mais experiente, coisa mais linda do mundo !!!

Bom, terminada a consultoria, hora de caminhar com as próprias pernas. Passaram alguns meses, disciplinas do XP sendo levadas na ponta dos dedos, novatos já não poderiam mais ser chamados de novatos, estavam detonando. E foi neste ponto que eu perdi o contato com essa galera. "Ah Giovane, e o final ?"

Em conversa rápida estes dias com um dos desenvolvedores, ele me contou o final. Realmente um final que eu nunca tinha imaginado. Todo aquele ambiente, produtividade, euforia, já era. Mataram o XP naquela equipe e voltaram a desenvolver como nos "bons" e "velhos" tempos.

Os ditos desenvolvedores "experientes" (sabe aqueles analistas dos velhos tempos ?), puxaram o barco para trás, deixaram de aplicar várias disciplinas, deixaram de passar conhecimento, deixaram de participar de um time para montar o seu "auto-clã".

Benditos dinossauros, com sua vontade atrofiada, cérebros de amendoim que só pensam na aposentadoria e praticam o comodismo. Só pode ser auto defesa isso, vendo que a gurizada estava chegando ao seu nível, mas com uma diferença, a sede de mudança.

Uma pena isso, que essa é uma das maravilhas do XP, nivelar tua equipe por cima !

4 de fevereiro de 2007

Sem time, sem metodologia.

Falar de experiências com metodologias de desenvolvimento estava entre as minhas prioridades neste blog. Na onda do post do Vitor, achei interessante priorizar e dar mais "pano pra manga".

Bom, deixando de lado o "poder" da metodologia X ou Y, eu gostaria de focar no "poder" das pessoas envolvidas neste processo. Contar uma pequena experiência.

Felizmente trabalhei em uma grande empresa que aceitou o desafio de implantar uma metodologia de desenvolvimento em todos os seus departamentos. O ambiente era o melhor possível, juntava a "fome com a vontade de comer", os desenvolvedores e gerentes loucos por um processo de desenvolvimento, enquanto os diretores tinham paciência e dinheiro para implantar este projeto.

Sucesso ? Nem tanto !!!
Diretores fomentaram a implantação do RUP em todos os departamentos, e a escolha por tal metodologia foi recebida com "sorrisos amarelos" pelos líderes do meu departamento (tecnologia), afinal, estes líderes achavam o RUP "burocrático" demais para a tecnologia. Mas, vocês devem saber o que é uma ordem de diretoria, certo ? Então vamos a implantação.

Dado o devido treinamento é hora de colocar a mão na massa: especificação, casos de uso, diagramas, testes, ... enfim... tudo aquilo que o RUP disponibiliza, certo ? Errado.
Reuniões e mais reuniões entre líderes discutindo para que serve o tal "caso de uso". Debates filosóficos e intermináveis para (re)definir o objetivo de uma especificação. Atividades e mais atividades fora da metodologia, baixando ainda mais a produtividade no início da implantação.
Eu me perguntava: "Que tesão o 'Joãozinho' tem em criar o seu caso de teste, ouvindo o seu líder dizer que aquilo não presta ? É como ser incentivado a transar com uma mulher por alguém que não gosta de mulheres."

Então, depois de meses de "trabalho", adivinhem o que a diretoria viu de retorno ? Exatamente o que os líderes queriam, NADA, apenas mostrar que o RUP era um bixo papão e não servia para a tecnologia, sem ao menos vestir a camisa e tentar extrair o que de bom ele poderia oferecer. Na minha humilde opinião, a metodologia foi engolida pelos líderes logo no seu início.

A conclusão com este tipo de experiência, onde o insucesso acontece pela falta de TODOS vestirem a camisa, acredito que seja generalizável a qualquer ramo, atividade, idéia, objetivo, mudança. Isto vai de encontro as conclusões que o Bernardinho chegou, que o Vitor mencionou, e que qualquer pessoa com senso de grupo chegaria:


"Sem time, sem metodologia... sem time, sem mudanças !!!"


PS: Fica pra próxima uma histórinha sobre XP

1 de fevereiro de 2007

Feliz Ano Novo !!! Sim, isso mesmo.

"Estamos em 1º fevereiro e tais me desejando feliz ano novo ? Taxxx doido mermão."

Sim, eu sei. Porém eu considero que meu ano esteja começando hoje, 1º de fevereiro. Por isso as felicitações a todos.

Depois de um 2006 com relações restritas a comunidade free soft, tenho como meta voltar a contruibuir ativamente neste "novo ano". Galera que enfrenta mestrado sabe como é, né Vitor !!! Saiu das costas uma bagatela de 50 horas por semana investidas nas disciplinas do ano passado, acho que dá para usar isso de alguma forma útil para a comunidade, heheh !!!

Como ? Bem, incentivado pelo últimos posts (Vitor Pamplona, "Shoes", DFJUG) pretendo estar ajudando através tutoriais, artigos, forum, codando, sinal de fumaça, enfim, qualquer forma !
O blog, claro, servirá como um dos meios de comunicação, através de experiências, idéias, insatisfações, opiniões, relatos, mente feminina... calma, calma... é que estou morando com a mulher agora, então estou em processo de entendimento desta mente, então qualquer informação que contribua nesta área acho que também é bem vinda.

Ah, também não poderia deixar de mencionar a "memória viva", o Vitor. Divido apartamento com o "cara", quer maior incentivo que esse ? =ppp
A comunidade se beneficia com o conhecimento do guri. Eu, além disso, me beneficio com a seus conhecimento em limpeza, limpa um ap que é uma beleza.

Bom, por hora é isso !

Abraço galera