terça-feira, 27 de setembro de 2011

Rhino: Rodando Javascript em Java

Rhino é um framework para a linguagem Java que permite executar scripts em Javascript. Ele foi feito pelo "mesmo" pessoal da Mozilla Foundation.
O mais legal é que dá para criar um console javascript em prompt de comando (coisa de nerd, eu sei... :) ).
Muito bom para quem gosta de Javascript e quer fazer aplicações em Shell/Terminal/Console/Prompt. :P

Para mais informações, acesse o site:
http://www.mozilla.org/rhino/doc.html

Obs.: A ferramenta de teste Selenium usou ele para executar Javascript em sua versão RC.

Até mais!

quinta-feira, 22 de setembro de 2011

Alguém se lembra do Jaspion?

Esse foi meu terceiro seriado live action japonês que assisti aqui no Brasil (os outros dois eram Spectreman e Changeman)


A série contava as aventura de um rapaz chamado Jaspion, que foi adotado e treinado pelo grande sábio Odin para lutar contra as forças malignas de Satan Goss.
Era uma loucura: tinha um passaro dourado, um bicho esquisito chamado Mia, uma androide gost..., quer quiser, muito bonita chamada Anri e um vilão que era a cara do Darth Vader.

Sei que a maioria que assistiu, aguardava a luta final contra McGaren. É..., foi legal e tudo mais, mas a luta que mais gostei foi contra a bruxa Kilza! :)


Meribegan Katabanga, Meribegan Katabanga, Meribegan Katabanga, Kikera!

Até mais!

segunda-feira, 19 de setembro de 2011

10 dicas para se trabalhar em equipe

Minhas dicas. :P

1) Tente ouvir mais do que falar, é mais importante saber ouvir do que saber falar.

2) Nunca ache que você sabe tudo e nunca ache que você não sabe nada.

3) Tente respeitar as pessoas, por mais que não pareça, elas tem sentimentos.

4) Tente trabalhar cooperativamente: nunca tente apontar os erros das outras pessoas. Se ocorreu um erro, o erro é da equipe como um todo.

5) Seja honrado em suas palavras: dizer que vai entregar amanhã e não entregar, só demonstra sua falta de confiança. É melhor dizer que errou a estimativa e que vai demorar do que prometer uma coisa que nunca vai cumprir.

6) Sempre que possivel, ajude o próximo e peça ajuda. Todos nós temos dificuldades e, algumas vezes, só conseguimos superá-las juntos.

7) Nunca duvide da capacidade de sua equipe, todos os membros da equipe são importantes, independente do seu status e/ou cargo.

8) Saiba receber críticas e evite criticar as pessoas de sua equipe.

9) Seja responsável pelos seus atos. Sei que é díficil apontar seus próprios erros, mas é importante para saber que não devemos repeti-los novamente.

10) Tenha paciência, pessoas não são iguais a você. Nunca as trate com desrespeito por que pensam diferente de você.

Não sou especialista e nem doutor nesta area, mas é aquilo que eu acho... :P

Aqui vai uma dica extra: 11) O mais importante: seja feliz no trabalho, faça aquilo que você gosta e se sente bem.

Preciso seguir minhas próprias dicas. :)

Até mais!

sábado, 17 de setembro de 2011

My new project in IOS!

Hi people! 

I was thinking about the IOS course in last week (yes, it's finalized! :D) and I resolved to start my new project: a music/dance game for IOS (iPhone and iPad) that will be to call DJam. 
I created any screens (but,  I obtained the images from Google Images... sorry guys by copyright... :P) and I will begin the coding in next week (this week, I will be very busy...).

Bellow, any screens:




Thanks for Ederson, Rampazzo (my colleagues in this course), Giuliano (my "mentor") and Paul Hegarty (the professor from the Stanford University).

And sorry people, about my english (in next post, I will use the Google Translate before publishing).

PS.: I won't publish this game in the Apple Store because I'm learning Objective C (my "target" is not money :) ).

quarta-feira, 14 de setembro de 2011

One song, 55 youtubers

Hi people,

I need to train my english... :P

One day, I was seeing any news about the japan earthquake/tsunami (was in March, 2011) and fortunately, I found a music video (clip) in youtube about this.



It's a great idea! Congratulations everyone (55 great youtubers) that participated in the video!
And thanks J. Rice for having created the song and having organized the people.

P.S.:  Sorry about my english... (this continue very bad)

Now, in portuguese:

Achei legal a idéia de reunir alguns youtubers para fazer uma canção para arrecadar fundo as pessoas que foram atingidas pelo tsunami no Japão.

Parabéns ao pessoal e a J. Rice que organizou e escreveu a canção.

See you later! ;)

segunda-feira, 12 de setembro de 2011

Vestibulinho do COTUCA

Abriram as inscrições para o vestibulinho do COTUCA! (para quem não sabe, o COTUCA é o Colégio Técnico da Universidade de Campinas)
Para maiores informações, no site:
http://examesel.cotuca.unicamp.br/

Obs.: Acho que este ano, vou fazer Eletronica (ano retrasado eu fiz e até passei, mas tive uns problemas de saúde...). :)
Poxa, sou da turma de Informática Noturno de 1999 e ainda sinto saudades de lá.

Ah... Parece que vai ter escola aberta este ano, no dia 24/09/2011. Quem quiser ir... ;)

Ops... Quase esqueci: Valeu Diego pela dica! :)

Até mais!

domingo, 11 de setembro de 2011

Dicas de Programação: Como copiar dados de um bean ao outro em Java?

Não há nada mais trabalhoso do que copiar os dados de um bean ao outro, sendo que estes tem os mesmos nomes nas propriedades...

Por exemplo:

@Entity
@Table(name="CLIENTE")
public class Cliente {
       private String nome;
       private String endereco;
       ...
}

@WebForm
public class ClienteForm {
       private String nome;
       private String endereco;
       ...
}

Se as classes tiverem uns 100 campos, eu precisaria obter e colocar os dados, um por um (ou seja, fazer get e set de todos os campos...), 100 vezes!

Ai, as pessoas perguntam/respondem (dependendo do entendimento): "Não é para isso que serve o estagiário?"

Ai, eu respondo: "Não, não é para isso que serve o estagiário!" :P

Sei que é muito mais rápido na execução de um programa se não usarmos reflexão (eu já falei disso? Se não falei, seria um ótimo assunto para um próximo post :) ) mas, neste caso, acho muito mais fácil utilizá-la do que fazer um monte de get e set (sei lá, dependendo do caso, o código fica até mais bonito...).

Bem, já escrevi demais, vamos ao código:

public class ObjectUtil {

//Método que copia os campos de um objeto a outro.
public static void copyFields(Object from, Object to) {
        //Obtenho os campos que estão declarados no objeto de origem
        Field fields[] = from.getClass().getDeclaredFields();
        for (Field fromField: fields) {
                try {
                      //Obtenho o campo do objeto de destino que possue o mesmo nome do campo do objeto de origem
                      Field toField = to.getClass().getDeclaredField(fromField.getName());
                     //Modifico a acessibilidade...
                      toField.setAccessible(true);
                      fromField.setAccessible(true);
                      //Obtenho o valor do campo do objeto de origem
                      Object value = fromField.get(from);
                       //Coloco o valor no campo do objeto de destino
                       toField.set(to, value);
                } catch (Exception e) {
                       //Se der erro, não copio e passo para o próximo campo
                }
        }
}

}

Hum... Será que isso funciona bem?

Até mais!

sexta-feira, 9 de setembro de 2011

10 dicas para ser um bom arquiteto de sistemas

As dicas que peguei com os caras de arquitetura, durante estes anos:

1) Saber que você SEMPRE terá que estudar novas metodologias/tecnologias que SEMPRE aparecem todo ANO (ou seja, enfia a sua cara no livro, meu filho...). :P

2) Saber que você NÃO sabe tudo.

3) Saber que você TEM que saber tudo.

4) Ter paciência e calma por que, por mais que você seja uma pessoa precavida, SEMPRE as coisas tendem a dar errado.

5) Utilizar SEMPRE a regrinha do Mais ou Menos 7. (Que regra é essa? Sei lá, vou ter que estudar... :P)

6) Saber que você SEMPRE terá problemas com ambiente (seja de desenvolvimento, testes, homologação, implantação, etc.).

7) Se possivel, utilizar SEMPRE as tecnologias que você conhece.

8) NUNCA criar uma arquitetura mirabolante para validar o login e a senha de um usuário. (Hã? Acho que esta eu vou entender quando for arquiteto...)

9) SEMPRE dar suas opiniões, para que depois você possa falar: "Eu não avisei?" :P

10) Ser SIMPLES (sim, das duas maneiras que você entendeu).

Será que eu consigo seguir estas dicas? :D

Até mais!

quinta-feira, 8 de setembro de 2011

Alguém já jogou Ninja Gaiden?

Eu jogava Shinobi do Master System na época (era um dos meus jogos preferidos, além de Castle of Illusion e Out Run).
Mas tinha um pouco de inveja de quem tinha um Phantom System.
Principalmente, por causa de games como Super Mario da Nintendo e Ninja Gaiden da Tecmo.



Ninja Gaiden contava as aventuras do ninja Ryu Hayabusa contra as forças do mal (que mudava a cada versão do jogo... :P).
Em relação ao game Shinobi, a velocidade, as músicas e a dificuldade dava de dez a um (não vou dizer zero, por que eu gostava de Shinobi...) neste concorrente (eu sempre achei que o personagem de Shinobi tinha algum problema com a coluna, por que ele andava duro... - aos engraçadinhos de plantão, pense no que quiserem :P).

O melhor Ninja Gaiden, na minha opinião, era a de número 3. :)

Obs.: Eu já disse que sou um saudosista de plantão?

Ah... Obrigado ao pessoal do Classic Game Room, por disponibilizar o vídeo.
The Classic Game Room team, thanks a lot! :)

Até mais!

quarta-feira, 7 de setembro de 2011

Analista (de Sistemas?)

Uma vez, uma pessoa (que era analista de sistemas em uma empresa), me disse:

"Um bom analista de sistemas não deve saber programar!"

Na época, achei estranho a afirmação, principalmente por que eu estava fazendo o curso de "Analise de Sistemas" para aprender programação! (falando nisso, eu acho que eu menti no outro post, dizendo que não fiz um jogo descente - bem, tenho que dizer adeus a carreira de Diretor de TI... :P)

Achei que o que ela estava falando era uma loucura (ou algo parecido), que ela estava revoltada por repetir em Estrutura de Dados pela segunda vez. (humm..., talvez este seja o real motivo, mas vamos dizer que não é...)

Mas, pensando agora, depois de me formar e de longos anos de trabalho, não é que ela pode ter um pouco de razão?

Não vou dizer que um bom analista de sistemas não deva ter conhecimento em programação, mas acho que isso não é o mais importante.

Penso que o mais importante para a (nossa) profissão é ter lógica, bom senso e, principalmente, saber quem é a sua equipe e o que você faz por ela.

Lógica, por que cabe ao analista decidir quais coisas são importantes ao seu cliente e tentar enxergar um sistema que possa ser informatizado através das dificuldades que este possue.

Bom senso, para definir o que pode ou não ser aplicado no sistema, ou seja, definir um escopo factível sem coisas mirabolantes que não agregam valor e nem caibam no prazo.

Saber sobre sua equipe, do conhecimento que ela possue, suas dificuldades e suas "facilidades" para tomada de decisões sobre qualidade, prazo e entrega.

E, finalmente, de como você a trata (quando eu falo de equipe, eu falo das pessoas que você trabalha, incluindo seu cliente...), pois, no final das contas, você depende de todos para realizar o (que não é "seu"...) projeto (poxa, agora pensei naquela frase batida: "Se você não cuidar bem..." :P).

Acho que para estas coisas não é preciso saber "programar"... (mas, se souber, facilita muito a vida de todo mundo... :P)

Obs.: Já disse que isso expressa somente minha opinião e que nada que eu escrever neste blog é uma verdade absoluta? Bem, agora esta dito! :D

Até mais!

terça-feira, 6 de setembro de 2011

Dicas de Programação: Propriedades estáticas em Java

Esta dúvida também apareceu semana passada...

Se eu criar uma propriedade estática do tipo contador e incrementa-la no construtor do objeto...

public class Usuario {
      private static int contador = 0;
      //Construtor
      public Usuario() {
              contador++;
      }
      //Exibe o valor
       public void exibirContador() {
               System.out.println("No. de Usuarios: " + contador);
       }
}

E criar e instanciar 5 objetos desta classe, não importa em qual objeto chamar o método exibirContador, que ele sempre retornará o mesmo valor, ou seja, 5 (é como se a variável fosse global):

Usuario u1 = new Usuario();
Usuario u2 = new Usuario();
Usuario u3 = new Usuario();
Usuario u4 = new Usuario();
Usuario u5 = new Usuario();

u2.exibirContador(); //Tente trocar para qualquer outro objeto que sempre dará o mesmo valor...

Outra dúvida que surgiu é a chamada desta variável. Será que é possível chamar assim:
      public Usuario() {
              contador++;
      }
Ou assim:
      public Usuario() {
              this.contador++;
      }

Ou assim:
      public Usuario() {
              Usuario.contador++;
      }


Sim, por incrivel que pareça, é possível. (agora, não me pergunte o porque... - parece que isso tem haver com escopo da variável e outras coisas a mais que não faço a menor idéia de como funciona...)

Que confusão... Será que eu consegui explicar alguma coisa?
Bem, de qualquer forma, é bom testar o código acima... :P

Até mais!


segunda-feira, 5 de setembro de 2011

Dicas de Programação: Qual é a diferença entre classe abstrata e interface em Java?

Isso foi me perguntado semana passada....

A resposta:

Classe Abstrata é uma classe que não pode ser instanciada, pode possuir métodos abstratos (ou seja, sem implementação) e que somente pode ser extendida (ou seja, as classes filhas somente podem herdar de uma única classe abstrata).

Interface é uma estrutura que também não pode ser instanciada, possui sempre métodos abstratos e podem ser implementadas em várias classes (ou seja, as classes filhas podem herdar de uma ou mais interfaces).

Exemplo:

//Classe abstrata Som
abstract class Som {
    public abstract void tocar();
    public void info() {
           System.out.println("Testando som, 1, 2, 3");
    }
}

//Classe abstrata Video
abstract class Video {
     public abstract void exibir();
     public void info() {
            System.out.println("Luzes, Camera e Acao");
     }
}

//Classe Musica que extende a classe Som (funciona!)
class Musica extends Som {
       public void tocar() {
              System.out.println("Do re mi fa sol la si");
       }
}

//Classe Filme que extende as classes Video e Som (não funciona...)
class Filme extends Video, Som {
       public void tocar() {
              System.out.println("Do re mi fa sol la si");

       }
       public void exibir() {
               System.out.println("Vendo o filme");
       }

}

A classe Filme somente funcionaria, se as classes abstratas Video e Som fossem interfaces:

//Interface Video (não há implementação de método)
interface Video {
      public void exibir(); 
}

//Interface Som (não há implementação de método)
interface Som {
      public void tocar();
}

//Classe Filme que implementa as interfaces Video e Som (funciona...)
class Filme implements Video, Som {
       public void tocar() {
              System.out.println("Do re mi fa sol la si");

       }
       public void exibir() {
               System.out.println("Vendo o filme");
       }

}

Complicado, não? Mas com o tempo, a gente pega a prática... :)

Até mais!

domingo, 4 de setembro de 2011

Para o Dia do Estagiário (18/08)

Sei que estou atrasado (era dia 18/08...), mas parabéns a todos os estagiários! :)

Você deve perguntar: Porque estou fazendo isso agora?

Eu respondo: Por que eu quero! :P

Mas, mais do que isso, por que eu tenho que agradecê-los.

Uma vez, eu agradeci a todos, que durante minha carreira de 10 anos, trabalharam e me ensinaram a ser como eu sou profissionalmente (apesar de ainda ter que aprender, acho que estou no caminho certo...). :P

Mas devo muito do que sou hoje, aos estagiários com quem eu trabalhei.

Agradeço ao Vinicius, que durante o pouco tempo que fiquei no projeto, me fez ver como alguém pode se dedicar tanto aos estudos e ao trabalho, sendo competente nos dois.

Agradeço ao Eduardo, que teve paciência comigo e me fez ver o quão um estagiário pode ser mais maduro que muitos implementadores.

Agradeço a Mariângela, que me mostrou o quanto uma pessoa pode ser competente através de sua própria força.

Agradeço ao Lucas, por me fazer ver que existem mais coisas do que informática no mundo.

Agradeço ao Andrius, que me mostrou o quanto a empolgação pode faze-lo chegar a seus objetivos.

Agradeço ao Marcos que, com sua garra e força, esta demonstrando que se pode se superar, mesmo com as adversidades.

Aos demais, que já foram estagiários, que sigam em frente, mas que se lembrem sempre de seu passado.

Obs.: Pessoal, estou orgulhoso de vocês! :)

Obrigado e até mais!

sábado, 3 de setembro de 2011

Vamos Jogar?

Como é Sábado, nada melhor que fazer um post que não fale sobre trabalho... :P

A maioria de meus amigos e colegas, sabe que eu era aficcionado em games no passado (desde do Odyssey (que vi de relance...), passando pelo Atari (que eu acho que nunca tive..., pode não parecer, mas antigamente era caro pra dedéu... :P), pelo Phantom System (uma das versões do NES, distribuido pela antiga Gradiente...), pelo Master System (meu primeiro video-game oficial!) e pelo Mega Drive (meu segundo :P).

Então, por uma bela noite dessas, durante a semana, resolvi procurar no Youtube por jogos antigos, só para matar as saudades (depois de velho, a gente gosta de lembrar da infância...).

E encontrei um "Let's Play" (são videos e/ou imagens que alguns jogadores postam para mostrar um jogo do começo ao fim, geralmente feitos em inglês) em português!

Matei as saudades do Kid Chameleon! (para quem nunca jogou, eu recomendo!)


Agradeço ao senhor Owen pelos seus projetos (o do Sonic foi animal, apesar de ficar preocupado que o senhor começou a falar consigo mesmo... - por acaso, trabalha com informática? :P).

Abaixo, o link para o canal dele (isso soou meio estranho...), no Youtube:
http://www.youtube.com/user/owenglndwr

Obs.: De novo, eu não conheço ele e não faço a menor idéia de quem ele seja.

Até mais!

sexta-feira, 2 de setembro de 2011

Sonhos, Desejos e Etc.


Acho que todo sonho de um garoto que é ou foi fanático por video-games, é saber como um jogo é feito...

E assim, com 18 anos, ele entra no curso de Análise de Sistemas para ver o estranho e fantástico mundo de informática.

Mas, como todo mundo, meio que se decepciona quando a primeira aula da sua faculdade é de Metodologia Científica (tem gente que decepciona com Cálculo, mas aí vai do gosto... :P).

Ele pensa:

"Vai ter mais coisas que isso! Eu vou aprender a fazer um joguinho!"

E aparece a primeira aula de programação.

Ele pensa:

"Opa, vou aprender a fazer joguinho!"  :)

Mas, no final do curso, a única coisa que sabe fazer é ordenação de um array (e olhe lá...).

Ele pensa:

"Ok, ainda não foi, mas nas próximas, com certeza eu vou aprender..."

Então passa por LAP II, Estrutura de Dados, Banco de Dados, Engenharia de Software I, Engenharia de Software II, Sistemas Operacionais, Analise de Sistemas I, Analise de Sistemas II e Orientação á Objetos (ufa...).

E percebe que, ao fazer o TCC (Trabalho de Conclusão de Curso), no último ano, com seu conhecimento adquirido, ainda não dá para fazer um jogo...
Portanto, meio a contragosto, faz um sistema de video-locadora para apresentar no final do curso...

E entra em desespero, por causa que o sistema de video-locadora dá mais trabalho do que imaginava...
No final,  entrega o TCC (que sabe que esta meia boca...) e reza para passar...

E, graças ao bom Deus, passa.

Ai, entra como estagiário em uma empresa... Mais tarde, é registrado e vira programador.
E depois, com os anos, vira lider técnico, arquiteto, analista de sistemas, gerente de projeto e diretor de TI.

No final das contas, ele conseguiu um bom cargo e um bom salário em uma boa empresa!

Porém, não conseguiu criar seu joguinho... :P

Obs.: Estou longe de ser diretor de TI, mas como ainda não fiz um jogo decente, ainda tenho chances de chegar lá! :)

Até mais!

quinta-feira, 1 de setembro de 2011

Bibliotecas para aplicações Desktop: QT e GTK


QT é uma biblioteca de desenvolvimento para aplicações Desktop para multiplas plataformas (MS-Windows, GNU/Linux, Mac OS X, Embedded Linux e Windows CE). Possui várias ferramentas de geração e edição de código, como KDeveloper e QT Design.

Atualmente, é desenvolvido pela Nokia:
http://qt.nokia.com/

GTK é também uma biblioteca de desenvolvimento para aplicações Desktop para multiplas plataformas (MS-Windows, GNU/Linux e Mac OS X). Também possui ferramentas para geração de interface e algum código.

É sustentado por uma comunidade Open Source:
http://www.gtk.org/