GWT, você entendeu? Server-side code…. Novembro 30, 2006
Posted by felipecruz in GWT, Web.5 comments
Primeiro, como sempre, começo reclamando de alguma coisa; nesse caso é a página inicial do GWT. O que eu espero de uma página inicial de uma ferramenta é uma descrição básica:
1. O que minha ferramenta faz?
2. Como ela funciona?
Nada muito extenso, afinal é uma página inicial, mas na do GWT, não tem “Como ele funciona”. Depois de umas buscas no google e uns clicks(3 clicks exatamente), eu descobri como funciona e depois disso eu realmente entendi como o GWT funciona. A documentação é boa e simples, só faltou na pagina inicial uma informação que é essencial. Não é a toa que *muita* gente se enganou a respeito do GWT.
Como eu levantei as 2 informações que eu acho essenciais pra o site de uma ferramenta, eu mesmo vou responder.
1. O que o GWT faz?
É um framework que ajuda na criação de aplicações AJAX, através de um compilador que transforma código JAVA em Javascript. Você não deve se preocupar com tipo do browser, escrever javascript por exemplo. Apesar disso, em um ambiente de desenvolvimento, o código roda na Jvm, ou seja, é possível debugar o código com seu Debugger preferido. Outras features você encontra aqui: http://code.google.com/webtoolkit/overview.html
Não vou continuar muito por aqui, porque documentação é o que não falta e eu não pesquisei muito essa parte do framework. Mas da pra fazer bastante coisa como por exemplo criar um componente a partir da composição de outros.
A parte que confunde a maioria das pessoas
2. Como funciona?
Quando você escreve uma classe como as que estão nos exemplos do GWT, o código java dessa classe é compilado e vira Javascript.
Como usar então classes que não são suportadas pelo compilador(Hibernate, EJB etc..)?
Você tem que criar as classes chamadas serviços. Precisei de 3 clicks pra chegar na documentação de serviços, que devia estar lá no “Getting Started”. A arquitetura do GWT divide sua aplicação em 2 partes. Client-Side Code e Server-Side Code. O client code é o carro chefe do framework, mas você não faz nada pro mundo real sem usar o Server-Side Code, que vou chamar de SSC.
O SSC, é compilado em .class e roda no servidor. Aqui não existe absolutamente nada de cliente(no máximo um callback para chamadas assíncronas), nem javascript. Nas classes SSC, você esta livre pra usar o que você quiser, pois nessa parte da aplicação é tudo 100% Java, então provavelmente aqui você vai usar o hibernate, o EJB ou até mesmo POJOs. Como o foco do post era mais chamar a atenção para uma deficiência na documentação inicial do GWT, vou continuar explicando um pouco mais essa parte que esta distante 3 clicks de você mas é fundamental.
Como criar um Serviço?
Primeiro cria-se uma interface Client-Side que herda de RemoteService.
public interface MyService extends RemoteService {
public String myMethod(String s);
}
A interface síncrona é a versão definitiva da especificação do serviço. Qualquer implementação desse serviço no lado do servidor deve herdar de RemoteServiceServlet e implementar a interface do serviço
public class MyServiceImpl extends RemoteServiceServlet implements MyService {
public String myMethod(String s) {
return s;
}
}
Você pode ter implementações assíncronas, onde a alem da interface que herda de RemoteService, você tem uma interface correspondende para chamadas assíncronas. O sufixxo Async é *obrigatório* e para cada método na interface síncrona você deve fazer um correspondente seguindo a regra abaixo:
De:
public ReturnType methodName(ParamType1 param1, ParamType2 param2);
Para:
public void methodName(ParamType1 param1, ParamType2 param2, AsyncCallback callback);
Mais informações sobre o CallBack aqui: AsyncCallback
Agora que você já sabe criar um serviço síncrono e assíncrono, você só precisa saber como se comunicar com eles do Client-Side Code.
Para isso basta(se o serviço for síncrono):
MeuServico service = (MeuServico) GWT.create(MeuServico.class);
Se o serviço for assíncrono, veja como fazer em: Actually Making a Call . Adianto que não é muito diferente e a grosso modo, você só precisa informar ao endpoint (seu serviço) aonde esta o entryPoint (que é aonde está o código do callback).
Existem outros detalhes que você deve ler aqui Remote Procedure Calls mas nada muito extenso, como eu disse são mais detalhes.
Do aspecto de arquitetura, o pessoal do GWT exemplifica os serviços de 2 modos:
- Como o Back-End completo da sua aplicação, ou seja, aonde está a lógica de negocio, as chamadas a outros frameworks etc..
- Como “gateways” leves que irão ser intermediários entre o cliente e outros recursos como um cluster de servidores JEE
Esse foi o primeiro post mais técnico de vários que ainda estarão por aqui. Espero que seja útil. Duvidas, críticas e comentários, escrevam aqui ou me mandem um email felipecruz AT gmail DOT com.
Trabalho individual em equipe Novembro 28, 2006
Posted by felipecruz in Empresa, Gestão.add a comment
Por mais contraditório que pareça, é o que acontece na maioria dos ambientes de desenvolvimento de software. O software é dividido em partes, frequentemente chamadas de módulos, e cada um faz a sua parte. Vários profissionais fazem parte de um grupo chamado Equipe, sendo assim temos um trabalho individual em Equipe.
Esse modelo não é interessante pra ninguém por alguns motivos:
- O desenvolvedor fica com uma visão limitada do software que esta construindo e não tem como participar de decisões mais amplas do software como uma unidade.
- As vezes você tem acesso restrito aos fontes, e mais uma vez fica alienado sobre o que está sendo feito e usado pelos outros membros da equipe.
- A equipe fica dependente do desenvolvedor, assim como a gerência.
- Troca de conhecimento baixa.
- Integração baixa.
- Soluções projetadas por uma pessoa e vistas de apenas um ponto de vista, já que os problemas não são estudados por todos com o mesmo esforço.
- “Isolamento” e pouca motivação.
- Não existe competitividade positiva.
- Nem sempre a divisão de tarefas é justa (desafios, complexidade e trabalho braçal etc…).
Por outro lado, a única característica positiva que eu encontrei foi velocidade, agilidade, qualidade de desenvolvimento, se imaginarmos um profissional competente e um planejamento mais fácil, se cada membro conseguir planejar sua parte, mais reduzida e especifica, de forma mais precisa.
Vejo esse trabalho individual como algo estratégico ou talvez emergencial em alguns casos, mas que deve ser evitado ao máximo para que as partes negativas desse estilo de trabalho não apareçam.
É fundamental estimular o trabalho em equipe, integração no dia a dia e não através de festas anuais, a troca de conhecimento e uma participação mais ampla da cada membro de uma equipe, que eu prefiro chamar de time, no desenvolvimento do software como uma unidade e não como um conjunto de peças. É claro que para determinadas tarefas uma pessoa apenas é o suficiente e a melhor escolha, mas um software é composto de peças grandes e pequenas, de complexidades altas ou baixas.
Muito se fala sobre integração de serviços(a moda do momento), mas pouco se fala na integração de recursos humanos. Numa entrevista, Simon Phipps, diretor de tecnologia da Sun Microsystems disse:
Para um desenvolvedor de software fica fácil de entender que o modelo antigo em que se reuniam os melhores profissionais fechados em uma sala para produzir uma solução. Não importa quão inteligentes essas pessoas sejam, o fato é que haverá outras tantas pessoas inteligentes for a da sala que poderão contribuir. Se os de dentro da sala puderem falar com os de fora, com certeza, o resultado será um software melhor.
Por mais que um profissional seja competente, as vezes uma opinião de fora pode mudar completamente a visão do mesmo problema e por consequencia aumentar a qualidade da solução. A cooperação e o individualismo tem seus valores, mas em um trabalho de equipe cooperação deve prevalecer sempre.
Fábricas de Software X “Alfaiataria de Software” Novembro 21, 2006
Posted by felipecruz in Arquitetura, Empresa, Gestão.add a comment
Essa discussão é velha…. Você trabalha em uma fábrica ou numa alfaiataria? O conceito de fábrica (comum a todos) vem de um lugar onde se produz um produto em massa. Segundo o wikcionário, “ser da mesma fábrica” significa “agir de modo igual”. Isso deveria valer para softwares também, mas na prática não é o que acontece. Clientes que não sabem comprar compram de vendedores que não sabem vender e os esboços ou idéias de sistemas chegam até nós. No mundo em que vivemos, quase sempre quem manda é o dinheiro, então os clientes como os donos do dinheiro se colocam de uma forma extremamente intrusiva(em muitos casos) no processo da desenvolvimento de uma fábrica. Vamos culpar os cliente pelo primeiro erro:Comprar de uma fábrica um serviço de consultoria.
Se eu quero um terno sob-medida eu procuro um alfaiate. Se o cliente quer um software que atenda minuciosos padrões(questionáveis) de “qualidade”, ele deveria procurar um serviço de consultoria e não uma fábrica. Entende-se, ou pelo menos deveria, entender que uma fábrica de software deve(deveria..) funcionar como uma linha de montagem. Fábricas podem usar e abusar de geração de código, frameworks, geradores de modelo de Dados etc… O objetivo de uma fábrica de software é produzir software em massa. Os famosos cadastros que as empresas gostam de comprar. Se o seu cadastro precisa ser extremamente customizado ao seu problema, procure uma consultoria. Se seu problema é muito específico, cheio de detalhes e exceções, talvez ele não tenha sido resolvido da melhor forma. Analistas de sistemas são profissionais com boa visão e raciocínio lógico para resolver problemas e estruturar processos.
Voltando ao primeiro parágrafo, todos os softwares deveriam ter um comportamento parecido. No caso da produção de software, se não estamos falando de software de prateleira, devemos substituir “agir de modo igual” por “ser construido de forma semelhante”. Isso sempre nos leva a palavras muito usadas por ai: Componentes, Serviços, reuso etc.. Clientes não deveriam interferir nos processos de uma fábrica; jamais. Na minha opinião o cliente pode apenas exigir que o software rode em uma certa plataforma, com determinado SGBD(se necessário) e que atenda alguns requisitos não funcionais como tempo de resposta. Impedir de usar frameworks, interferir na modelagem etc.. JAMAIS. O software produzido deve atender apenas a requisitos. Fazer isto, fazer aquilo.
Mas existe o erro também de quem vende. Isso interfere de uma forma gigantesca dentro de uma fábrica.
Como analista, que trabalha dentro de uma fábrica(hipoteticamente) eu espero que os responsáveis pelo projeto e os profissionais em contato com o cliente filtrem tudo que está errado do outro lado. Minha função é construir sofware. Não me interessa se o cliente não gosta do Spring ou do hibernate. O que me interessa são prazos e requisitos e só. Os papéis tem que ser bem definidos. É inadmissível ver gerentes que não gerenciam, analistas de requisitos que não produzem documentação adequada e o seu telefone tocando com um cliente mau humorado do outro lado testando uma funcionalidade que ele nem deveria ter acesso ainda. Os vendedores não estão nem ai… Vendem e ganham suas largas comissões e francamente, por um trabalho extremamente mau feito.
Os vendedores vendem projetos que nós não temos interesse em construir. Os vendedores não nos consultam antes de vender. Hoje eu sou mais um dos que acha necessário uma equipe de “pré-vendas” composta por técnicos(analistas e gerentes) para no mínimo dar alguma opinião do impacto da venda de um determinado projeto. Projetos ruins geram insatisfação, levam funcionários a abandonar a empresa, muito stress etc…Tudo é uma bagunça mesmo, com graves conseqüências… O trabalho fica chato, os profissionais perdem a motivação. Nós falamos mau dos clientes e eles de nós, e mesmo assim nos reunidos toda semana!
Graças a Deus hoje eu não me preocupo tanto com isso, afinal eu vou abrir minha empresa até 2010, faltam apenas 3 anos! E na minha empresa eu vou construir as minhas idéias, nada mau… Eu serei cliente e analista ao mesmo tempo! Conflitos? só existenciais… hehe
A Inspiração vem de dentro – Diário da Revolução Novembro 21, 2006
Posted by felipecruz in Terceiros.add a comment
Enquanto eu preparo o próximo post, a leitura obrigatória de quem passa por aqui está abaixo!
Créditos ao blog http://bizrevolution.typepad.com/bizrevolution/
Eu particularmente concordo com todos os pontos, e você?
A Inspiração vem de dentro.
No século passado vencia quem tinha mais força nos braços. No século 21 vence quem é mais CRIATIVO.
Todo mundo sabe que a mais importante habilidade que todo Profissional, seja qual for a sua posição na empresa, deve praticar todos os dias chama-se CRIATIVIDADE.
Ninguém compra o melhor produto ou o melhor serviço, as pessoas compram o que é diferente.
O melhor é relativo. O Diferente é Diferente.
Ser Diferente traz mais resultados do que ser o Melhor.
Ser Diferente é o que importa.
Ser Criativo é o que interesse para ser diferente, para diferenciar a empresa, para diferenciar os produtos e serviços.
Ser Diferente! Diferenciar a Empresa! Criar Diferenciais!
Nada menos que isso interessa.
Uma recente pesquisa realizada pelo Creative Group em Maio de 2006 apontou que 93% dos executivos de marketing e vendas de médias e grandes empresas nos EUA disseram que o layout, a iluminação e a decoração do ambiente de trabalho impactam significativamente a criatividade das pessoas.
Chega de ambiente pesado! Chega de cara fechada! Chega de paredes cinzas!
Lá vão algumas idéias muito simples que se aplicadas vão estimular a criatividade da sua equipe, alavancar as vendas e a motivação da equipe.
Tá na hora de dar um banho de loja no ambiente de trabalho da sua equipe.
1. Crie zonas da criatividade para sessões de brainstorm, adicione quadros brancos para a turma rabiscar, espalhe revistas, muitas revistas sobre a sua indústria.
2. Transforme uma das paredes do seu escritório em uma parede de idéias. Estimule as pessoas a rabiscar a parede com idéias.
3. Ofereça um santuário privado onde os funcionários possam se concentrar sem o medo de ser distraídos.
4. Coloque as mesas próximas as janelas para que a turma possa ver o que acontece lá fora. (Os gerentes devem perder suas salas maravilhosas próximas as janelas). Se não houver janela o suficiente para todos, capriche na iluminação do ambiente.
5. Mude o cenário das suas reuniões. Faça reuniões de staff em lugares diferentes. Fora da sala de reunião, fora do ambiente que todo mundo conhece.
6. Coloque um banner, o maior possível, na sala de trabalho da equipe com a seguinte frase: “Quem você agradeceu hoje?”
7. Crie o “Café-da-Manhã das Sextas-Feiras”, onde uma vez por semana um dos funcionários deve trazer alguns comes e bebes para toda a equipe.
8. Monte árvore de natal no Natal, agite a quadrilha nas festas juninas, faça molecagem na semana da criança, pinte as paredes de verde e amarelo durante o mês de setembro, distribua livros no mês da volta as aulas.
9. Crie uma versão maluca de um produto ou serviço que você vende.
10. Coloque um poema ou uma letra de música diferente por dia na porta de entrada da empresa.
11. Compre um quadro de aviso e preencha-o com coisas legais, eventos legais, tudo que for diferente, relevante.
12. Exponha serviços e produtos inacabados da empresa em um determinado lugar para que todos os funcionários possam opinar durante a fase de protótipo.
13. Estimule os próprios funcionários a se tornarem palestrantes dos assuntos que dominam, por exemplo, o profissional do financeiro poderia ensinar finanças; os profissionais do marketing poderiam ensinar como fazer marketing pessoal para todos os funcionários da empresa.
14. Organize jantares, as famílias estão convidadas.
15. Estimule a prática de esportes entre a equipe, organize equipes de corrida, futebol, até xadrez.
16. Desafie um outro departamento da empresa para uma disputa esportiva.
17. Crie camisetas para a sua equipe usar.
18. Crie “Equipes QUEBRA TUDO” onde profissionais de diferentes departamentos devem trabalhar juntos para atacar um determinado problema que afeta a todos.
19. Todos os meses, determine duas ou três horas para limpar sua mesa, seu computador, jogar fora tudo que você nunca vai olhar mesmo.
20. Leve a natureza para dentro do escritório! Plantas, (animais).
21. Escute música! Crie um servidor na rede da empresa onde os funcionários podem armazenar arquivos de música e compartilhar com os colegas.
22. Planeje um dia para feedback em círculo, onde individualmente cada funcionário recebe feedback de todos os outros.
23. Comemore os Aniversários, não apenas das pessoas, mas também datas importantes para a cultura da empresa, como a Primeira Nota Fiscal, o Primeiro Grande Negócio, a Primeira Vez que a empresa quebrou etc.
24. Monte a biblioteca da empresa, distribua livros, recomende livros e leituras com frequência e consistência.
25. Permita que os funcionários trabalhem remotamente de suas casas.
26. Coloque quadros e pinturas ENGRAÇADAS na sala séria de reuniões da empresa.
27. Quebre o gelo antes do início de qualquer tipo de reunião, exemplos de quebra-gelo: Qual foi o seu primeiro trabalho? Se você pudesse ir para qualquer lugar do planeta, para onde você iria? Qual foi a sua maior realização profissional? Qual foi a última coisa realmente bonita que você viu?
28. Celebre o sucesso das pessoas, reconheça os vencedores na frente de todos.
29. Quando alguém for a uma conferência fora da empresa, assegure-se que o cidadão irá compartilhar o que viu com todos os colegas.
30. Crie um sistema de Mentor, principalmente para os novos funcionários.
31. Permita que os funcionários tragam fotos da família e dos filhos. Crie um mural com as fotos da família.
32. Distribua sorvete nos dias de calor, distribua chocolate quente nos dias de frio.
33. Lidere uma reunião chamada “Questões e Oportunidades” onde a turma lista as questões prioritárias que devem ser atacadas. Defina um líder para cada questão. Conduza essas reuniões semestralmente.
34. Sorria mais!
É óbvio que Você não precisa colocar em pratica todas essas idéias, entretanto, é também óbvio que você deve colocar em prática no mínimo metade delas.
Vamos dar um banho de loja na empresa!
Profissionais X Atletas, Trabalho X Competições Novembro 16, 2006
Posted by felipecruz in Empresa, Gestão.add a comment
Pegando um gancho na discussão do post Ivan Sanchez, sobre características de bons profissionais, vou um pouco mais longe e relacionar exportes X trabalho.
Quem já foi atleta, sabe que levar a sério um esporte exige dedicação, perseverança, paciência, planejamento entre outras características. Os técnicos estão ai para ajudar atletas no planejamento, motivar e ajudar na parte técnica. Um bom profissional se compara a um atleta. Mesmo sem um técnico por perto, ele busca se manter motivado, planeja seu desenvolvimento (isso pode ter uma ajuda do chefe), são dedicados e pacientes.Assim como no esporte, o trabalho é um processo de constante evolução. Muita gente por ai se acomoda no trabalho e prefere ficar fazendo o “arroz com feijão” a vida toda. Certamente essas pessoas não seriam grandes atletas, a não ser que deus tenha as presenteado com muito talento (chance de 1 em 1 milhão). Muitos ambientes de trabalho abafam a competitividade, justamente porque muita gente não se sente a vontade com esse clima. Hipocrisia.
Competição é saudável. Aprender a ganhar e perder. Perder principalmente. Remuneração variável estimula competição, motiva os funcionários (através do dinheiro… mas porque não um período de férias maior?). Talvez muitos acomodados precisem de um empurrãozinho para entrar em um clima saudável de competição no trabalho. Aquela dedicação um pouco maior, implementar aquele código “melhor” mesmo que de mais trabalho, escrever boa documentação mesmo que não seja obrigatório, testes sem esperar que alguém teste pra você etc…
Eu tenho como objetivo abrir uma empresa e certamente vou buscar recursos humanos que tenham essas características. Administrar vaidades é papel do gerente e um papel extremamente importante. Como os gerentes(a maioria) não sabem administrar isso corretamente, fica tudo meio que no “ar”. Porque será que a maioria dos profissionais não diz o valor do seu salário abertamente? Porque tem muita gente pouco produtiva que chegou ao bom salário sem méritos. Todo mundo conhece alguém desse tipo.
No futebol os melhores ganham mais, muito mais. Os intermediários ganham o que tem que ganhar (muito mais do que nós analistas diga-se de passagem). Isso independe de idade, experiência etc.. Como os intermediários são maioria, essa política semelhante a dos esportes não é vista com bons olhos. Inveja.
Acho que existe um número grande de pessoas que pensa como eu, e acredito que muitas empresas hoje já funcionam de forma semelhante a que eu descrevi. Os preguiçosos de plantão que se cuidem….