Posted by: jossemaravila | Terça-feira, 1/Julho/2008

Você faz o que gosta?

Há alguns dias atrás recebi um material de um grande amigo por e-mail, sobre um discurso que o Steve Jobs fez em 2005 na universidade de Stanford para os formandos. Sei que muitas pessoas já tiveram acesso a este este material mas fica aí a dica e as referências:

Leia a traduçao do discurso ou a transcrição em inglês ou então assista ao vídeo e me diga:

Você descobriu o que quer fazer?

E o mais importante, você gosta do que faz?

Posted by: jossemaravila | Terça-feira, 1/Julho/2008

A volta dos que não foram!

Voltei! Depois de quase dois meses!

Bom é que estes últimos dias foram excepcionais e exigiram muito da minha atenção!!

Então só para não perder o costume vai um resuminho:

Maio:

Participação no Falando em Java 2008 que foi sensacional, principalmente a palestrado Sérgio, fiz mais um Curso de Scrum, só que desta vez na Caelum e com o Alexandre Magno, mais 2 sprints de trampo na CVC e a confabulação com o Leandro para montarmos nossa empresa!

Junho:

Mais 2 sprints na CVC (estamos melhorando a cada dia) e principalmente a união de nossas experiências (minha e do Leandro) para fundar a Sírius Software e a partir daí começamos a realizar a estruturação da empresa, mais estruturação, mais estruturação, preparação e…. o primeiro cliente oficial (rsrs)!

Putz, só não fui para Minas… saudades dos velhões! Vou este mês, prometo!

Bem por isto que fiquei um pouquinho longe. Mais agora voltei. E com força total!

Aguardem, em breve vai pintar um artigo bem legal (pretensioso) sobre lições aprendidas na aplicação de Scrum.

Até.

Posted by: jossemaravila | Sábado, 10/Maio/2008

Sugestões para pessoas em transição

Recebi um material de um amigo sobre algumas dicas e sugestões para pessoas que se encontram em transição profissional, principalmente para aqueles que estão pensando em montar o seu próprio negócio e gostaria de compartilhar a tradução do material com vocês, vejam abaixo:
Mais do que nunca as pessoas são vítimas de processos de downsizing e portanto perdem seu emprego. E neste ponto dúvidas começam a surgir, como: Para onde ir? O que fazer? Como conseguirei saldar minhas obrigações financeiras?
Para um trabalhador fixo, que não tem muitas perspectivas para substituir o posto de trabalho perdido, existe a possibilidade de tornar-se empresário. Já para aqueles que tem medo de perder o emprego (os sinais são na maioria das vezes evidentes) mas ainda não perderam existe a possibilidade de iniciar um novo negócio enquanto ainda estiver trabalhando, tal como Harvey McKay disse: “Encontre algo que você goste de fazer e você nunca terá que trabalhar um diar da sua vida”.

Para ajudar neste processo de transição, aqui está uma lista dos dez principais passos a serem realizados e os que não devem ser realizados por pessoas que desejam começar um novo negócio.

O que fazer:

  1. Comece a poupar dinheiro e a viver muito modestamente.
  2. Comece a estudar sobre o negócio, segmento e o mercado escolhido
  3. Trabalhe em tempo parcial, no negócio que você gostaria de começar
  4. Fale com seus familiares sobre as perspectivas de criação de uma empresa em conjunto
  5. Aprenda contabilidade
  6. Saiba como utilizar computadores e as ferramentas de comunicação on-line
  7. Saiba como utilizar comércio eletrônico e também como realizar marketing empresarial
  8. Elabore um plano de negócios
  9. Pergunte à pessoas qualificadas em seu negócio suas opiniões sobre o seu plano de negócios
  10. Começe uma dieta e exercícios físicos regulares para ajudá-lo na constituição de uma boa saúde e aumentar suas capacidades
O que não fazer:
  1. Vá em concorrência directa com a sua entidade patronal
  2. Assumir novas obrigações financeiras que não estejam relacionadas às necessidades básicas
  3. Registrar ou assinar qualquer documento jurídico documento sem a aprovação do seu advogado
  4. Depender de informações de franchisers ou corretores: faça sua própria investigação
  5. Ter pressa
  6. Depender de seu banco para conseguir capital para iniciar o negócio
  7. Executar a idéia do negócio sem antes tê-la colocado em prática através de uma pequena prova para medir o retorno
  8. Iniciar uma empresa sem tenha recursos financeiros necessários para sua sobrevivência
  9. Escolher um negócio que possua um risco elevado
  10. Sair de seu trabalho antes que a empresa esteja em funcionamento e com um bom vigor
Posted by: jossemaravila | Terça-feira, 25/Março/2008

MIT oferece cursos online gratuitos

Veja no link http://ocw.mit.edu/OcwWeb/web/courses/av/#ElectricalEngineeringandComputerScience
a lista de cursos online gratuitos oferecidos pelo MIT.

Boa diversão!

Posted by: jossemaravila | Quarta-feira, 19/Março/2008

Oracle lança Portal OTN para a América Latina

A Oracle realizou o lançamento do Portal OTN para a América Latina!
Segundo a empresa você encontrará informações específicas sobre as tecnologias Oracle e terá a vantagem de adquirir conhecimento, em português, sobre como as ferramentas e soluções da Oracle são utilizadas pelo especialistas da região.

Maiores detalhes acesse: http://www.oracle.com/technology/global/lad-pt/index.html

Posted by: jossemaravila | Quarta-feira, 19/Março/2008

OSCache

É uma solução para realizar cacheamento de páginas ou trechos de páginas JSP através da utilização de um biblioteca de Tags e de um conjunto de classes para realizar o tratamento dinâmico do cache.

Permite ainda que a realização do cacheamento seja feito em memória ou em disco e pode ser utilizado para permitir que a aplicação se recupere de forma elegante de erros críticos. Por exemplo: se houver queda do banco de dados você pode enviar ao usuário o conteúdo disponível no cache permitindo a navegação e utilização do sistema.

Como realizar o cachamento de páginas JSP

  • realizar a importação da taglib <%@ taglib uri=”http://www.opensymphony.com/oscache” prefix=”cache”%>
  • delimitar o conteúdo a ser cacheado pelas tags <cache:cache> e
    </cache:cache>
  • Exemplo de Implementação:
<cache:cache key="idTrecho" duration="24k">   <x:transform doc="xmlDoc" xslt="xsltDoc">

<x:param name="parametro" value="xpto"/>

</x:transform>

<cache:addgroup group="meuGrupo"/>

</cache:cache>
  • Atributos da tag cache:cache
  • key - utilizado para dar uma identificação única ao trecho cacheado.
  • duration - indica a duração do cache. Segue o mesmo pattern do SimpleDateFormat.
  • Atributos da tag cache:addgroup
  • group - utilizado para identificar de qual grupo o trecho faz parte. Esta informação é muito importante para a o momento de invalidação, pois a mesma é feita por grupos.

    Como realizar a invalidação do cache de páginas JSP

    Para realizar a invalidação do cache deve-se utilizar a tag <cache:flush>. Veja exemplos de invalidação:

    • Invalidação de todo conteúdo cacheado: <cache:flush scope=”application”/>
    • Invalidação do conteúdo cacheado e de um grupo específico: <cache:flush scope=”application” group=”meuGrupo” />
    • Atributos da tag cache:flush
    • scope - scope onde o cacheamento foi realizado. Por default, quando algo é cacheado o escopo é definido como de aplicação.
    • group - identifica o nome do grupo que terá o cache invalidado.

    Referências

    http://www.opensymphony.com/oscache/

    Posted by: jossemaravila | Terça-feira, 11/Março/2008

    OutOfMemoryError: PermGen space no OC4J 10.1.3.x

    Dependendo do tamanho da aplicação, quando é feito o rededploy (redisponibilização) no container OC4J ocorre o seguinte erro de PermGen space: “… nested exception is java.lang.OutOfMemoryError: PermGen spaceCaused by: java.lang.OutOfMemoryError: PermGen space”.

    Isto geralmente ocorre quando a instância utiliza os parâmetros default do JDK.

    A solução é realizar a configuração do PermGen space que será utilizado pelo OC4J que pode ser feita de duas maneiras:

    • Executando a linha de comando: java -jar -XX:MaxPermSize=256M oc4j.jar;
    • Ou editando o arquivo opmn.xml e incluindo o parâmetro -XX:MaxPermSize=256M na inicialização do java-options. Veja o exemplo abaixo:

    <data id=”java-options” value=”-server -XX:MaxPermSize=256M -Djava.security.policy=$ORACLE_HOME/j2ee/SysturApps/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false”/>

    Para maiores detalhes, veja referência da Oracle.

    Posted by: jossemaravila | Quinta-feira, 28/Fevereiro/2008

    Padrão para gerar release de software

    Este assunto sempre dá “pano para manga”, principalmente por não haver nada que padronize e defina suas regras.
    Por isto, minha idéia, aqui, foi a de compilar tudo que conheço sobre o assunto e de buscar alguns fundamentos e bases substanciais para endossar meu conhecimento.
    E, o primeiro passo para realizarmos a tarefa de controlar a identificação de nossas releases é entender que as melhores práticas para definição de uma esquema para este fim não estão relacionadas apenas com o formato e a distribuição dos identificadores, mas também com algo mais abrangente denominado: Gerenciamento de Release.
    Contudo, antes de definirmos este conceito, precisamos definir o significado do termo release de software, que segundo a Wikipedia é:
    “release de software é uma distribuição, pública ou privada, de uma primeira ou uma nova versão atualizada de um determinado software
    Então, de forma bem pragmática, Gerenciamento de Release consiste em planejar e organizar as distribuições de seu software.
    Por isto, é fundamental sabermos que uma distribuição (release) possui um ciclo de vida composto por diferentes etapas. Onde, cada qual é responsável por descrever a estabilidade do produto e também de denotar quanto desenvolvimento será necessário antes da entrega da versão final do produto.
    • alpha - é a versão que está em construção e que foi disponibilizada para a área de homologação, que é geralmente interna à comunidade ou organização que desenvolve o software.
    • beta - é a primeira versão lançada fora da organização ou da comunidade que desenvolve o produto, para efeitos de avaliação ou de testes de caixa preta.
    • release candidate - refere-se a liberação de uma versão com potencial para se tornar o produto final. Nesta fase, o produto apresenta todas as funcionalidades concebidas sem a presença de bugs impeditivos;
    • gold - é a versão final de um determinado produto e normalmente é quase idêntica à release candidate, só que acrescida apenas da correção de pequenos bugs identificados nos testes finais. É considerada muito estável e relativamente livre de bugs, possuindo assim uma qualidade adequada para ampla distribuição e utilização por parte dos usuários finais.

    Release life cycle
    Utilizar esta nomenclatura, como dito antes, auxilia no entendimento da estabilidade do produto bem como na identificação do quão distantes estamos de finalizar a implementação do produto, mas isto por si só, não determina uma identidade única para a release.
    Então, para identificarmos unicamente uma distribuição utilizamos um esquema numérico(sequencial e incremental). Este esquema geralmente é composto por três números separados por pontos, por exemplo: 1.0.0.
    Este esquema é o mesmo utilizado pela Apache Software Foundation para identificar as releases de seus produtos, veja:
    • Esquema da Apache Foundation
    Esquema Nome Características
    X.x.x Major Release Novas funcionalidades significativas
    x.X.x Minor Release Melhorias, refatoramentos e evoluções
    x.x.X Revision Release Correções de bugs

    Vamos agora a um exemplo prático da adoção do controle de fases e do esquema utilizado pela Apache:

    Faremos o lançamento hipotético de um produto nos próximos 6 meses e definimos que este produto se chamará Sirius e que possuirá 5 funcionalidades.

    A release inicial deste produto será identificada, por exemplo, como 0.0.0, o que quer dizer que é a minha primeira versão.

    Durante o primeiro mês de trabalho foram implementadas duas funcionalidades e resolveu-se liberar uma versão alpha do produto para a área de homologação chamada: Sirius-0.0.0-alpha.

    Durante os testes (que duraram duas semanas) foram encontrados bugs,  que foram corrigidos durante as duas semanas seguintes e liberados em uma nova versão alfa chamada: Sirius-0.0.1-alpha. Notem que a revisão da versão foi incrementada, pois somente o que foi liberado nesta release foram as correções.

    Após os novos testes (duas semana depois) não foram encontrados bugs significativos e decidiu-se realizar a liberação da versão beta: Sirius-0.0.1-beta.

    E, nesta mesma data, como os desenvolvedores finalizaram mais duas funcionalidades, também foi feita a liberação da versão alpha: Sirius-1.0.0-alpha.

    Portanto, com  2 meses de projeto o cenário é o seguinte:

    • 4 funcionalidades desenvolvidas;
    • 2 funcionalidades testadas e corrigidas internamente (Sirius-0.0.1-alpha);
    • 2 funcionalidades liberadas para comunidade (Sirius-0.0.1-beta gerada a partir da Sirius-0.0.1-alpha);
    • 2 novas funcionalidades liberadas para testes internos (Sirius-1.0.0-alpha);

    Durante o mês seguinte (3º mês), a comunidade pegou vários bugs, assim como os testes internos identificaram outros tantos. Todos estes bugs foram corrigidos e também a última funcionalidade foi desenvolvida. E, com isto, foram liberadas as seguintes versões:

    • Sirius-2.0.0-alpha - correções dos bugs encontrados na release Sirius-1.0.0-alpha e liberação da última funcionalidade;
    • Sirius-1.0.0-beta - 2 novas funcionalidades e correções dos bugs da release Sirius-1.0.0-alpha e correções dos bugs encontrados na release Sirius-0.0.1-beta;

    E depois de mais um mês (4º mês) todos os bugs encontrados nas releases alpha e beta foram corrigidos e foi feita a liberação da versão Sirius-2.0.0-beta contendo todas as 5 funcionalidades e as correções dos bugs das releases  Sirius-2.0.0-alpha e Sirius-1.0.0-beta.

    Durante o 5º mês a comunidade identificou outros bugs que foram corrigidos e originaram a release Sirius-2.0.1-alpha que foi liberada internamente e passou nos testes internos sem que houvesse a necessidade de realizar correções e por isto logo em seguida foi liberada a release Sirius-2.0.1-rc (release candidate).

    Depois de vários outros testes e da utilização por parte dos usuários e da comunidade, não foram identificados bugs impeditivos e foi liberada a versão final do projeto, chamada de Sirius-2.0.1 (gold).

    Bom, é isto aí!

    Em breve falarei sobre como tudo isto se integra com um ambiente que utiliza ferramentas SCM e de Integração Contínua.

    Aguardem!

    Posted by: jossemaravila | Segunda-feira, 18/Fevereiro/2008

    Conceitos de Orientação a Objetos

    Gostaria de atender um pedido de um ex-aluno e falar um pouquinho sobre Orientação a Objetos (OO) e as dificuldades que enfrentei quando,  em 1998, comecei a trabalhar e estudar programação orientada a objeto.

    No início, minha maior dificuldade foi romper o cordão umbilical que me ligava ao paradigma de programação/análise estruturada e deixar cair por terra algums paradigmas que tinha sobre programação e desenvolvimento de software.

    Nos primeiros meses foi muito difícil fazer com que os conceitos de OO entrassem na minha cabeça de forma clara e consistente.

    Tinha muitas dúvidas sobre quais comportamentos e informações deveriam estar ou não em uma determinada classe e também como é que uma classe se relacionaria com outra!

    Somente consegui romper esta barreira e deixar para trás estas dúvidas com muita leitura e estudo, para ter na ponta da lingua todos os conceitos básicos de OO, mas foi principalmente observando e estudando soluções que outras pessoas conceberam é que fui conseguindo uma melhor compreensão de como tudo funciona em OO.

    Pois bem! Então, como dica para quem está começando ou deseja enveredar-se por este caminho, sugiro:

    • Ler e estudar sempre (todos os dias se possível);
    • Observe e analise o que pessoas mais experientes fizeram;
    • E, questione! Não fique com dúvidas! Busque respostas para tudo que lhe causar estranheza ou desconforto.

    Resolvi escrever também, além deste pequeno depoimento, de uma forma um pouco mais estruturada sobre o assunto. E por isto realizei abaixo uma rápida e breve compilação dos principais conceitos e caracterísiticas de OO.

    Histórico

    Orientação a Objetos (OO) surgiu na década de 60 com o intuito de ajudar a diminuir a complexidade de construção e manutenção de software, enfatizando fortemente: unidades discretas de programação lógica e reutilização de software.

    Simula foi a primeira linguagem de programação a introduzir tais conceitos que ganharam grande evidência na década 90 através da linguagem C++ e pela crescente popularidade das interfaces gráficas.

    Já na última década ganhou mais notoriedade devido a popularização da linguagem Java, principalmente, pelo fato desta ser multiplataforma.

    O que é OO?

    É um paradigma utilizado para desenvolvimento de software que baseia-se na utilização de componentes individuais denominados objetos que colaboram entre si para construir sistemas complexos.

    A colaboração entre os objetos é feita através do envio de mensagens.

    Analogamente, significa organizar o mundo real como uma coleção de objetos que incorporam dados e operações que manipulam estes dados.

    Benefícios

    • Os modelos refletem o mundo real de maneira mais próxima;
    • São mais fáceis de entender, manter e evoluir;
    • Possibilitam a reutilização de código;
    • Redução das linhas de código programadas;
    • Auxiliam e propiciam a separação de responsabilidades;
    • Ajudam na modularização e componentização da solução;

    Conceitos Gerais

    • Classe
      • Define características abstratas dos objetos;
      • Define os atributos (informações) e métodos (comportamentos) dos objetos;
      • É a “planta” que define como serão os objetos.
    • Objeto
      • Um objeto possui um estado (atributos), exibe um comportamento (operações) bem-definido e possui uma identidade única (referência).
    • Atributo
      • São características de um objeto, basicamente a estrutura de dados que vai representar a classe. Exemplos:
        1. Classe Funcionário: nome, endereço,telefone, CPF;
        2. Classe Carro: nome, marca, ano, cor;
        3. Classe Livro: autor, editora, ano.
    • Método (operações/comportamentos)
      • Define os comportamentos dos objetos.
      • Por exemplo, Spartacus é uma instância da classe Cachorro e portanto tem habilidade para latir, definida através do método latir().
      • Este comportamento somente ocorre quando o método é invocado através do objeto, no caso Spartacus.latir().
      • Programaticamente a utilização de um método deve afetar apenas um objeto em particular, pois todos cachorros podem latir, mas queremos que apenas Spartacus dê o latido.
    • Mensagem
      • É a chamada de um método de um objeto com o objetivo de ativar um determinado comportamento descrito pela classe deste objeto.
      • Uma mensagem pode ser enviada para um método de um objeto ou de uma classe, neste último caso ele é chamado de método estático.
    • Abstração
      • É operação pela qual o espírito considera separadamente coisas inseparáveis na natureza e resulta no processo mental em que as idéias estão distanciadas dos objetos por meio de uma operação intelectual que isola os generalismos teóricos dos problemas concretos, para que estes sejam resolvidos
      • Trata-se de um mecanismo essencial em disciplinas filosóficas e científicas, pois traz consigo a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais.
      • Em OO, uma classe é uma abstração de entidades existentes no domínio de um sistema de software.

    Caracterísiticas

    • Encapsulamento
      • Consiste na separação de aspectos internos e externos de um objeto.
      • É um mecanismo amplamente utilizado para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados.
      • Por exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo, pois a carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).
    • Herança
      • Herança é um mecanismo da OO que permite criar novas classes a partir de classes já existentes, aproveitando-se das características existentes na classe a ser extendida.
      • Este mecanismo promove reuso e reaproveitamento de código além de possibilitar a criação de classes derivadas (subclasses) a partir de classes bases (superclasses).
      • As subclasses são mais especializadas do que as suas superclasses, mais genéricas, e todas herdam todas as características de suas superclasses, como seus atributos e métodos.
    • Polimorfismo
      • É a capacidade de um objeto ser referenciado de várias formas o que quer dizer que a referência ao objeto se transforma, ou fica se transformando ao longo do tempo.
      • Vale ressaltar que um objeto nasce e morre sendo de um mesmo tipo e o que muda ou transforma-se é a maneira de como nos referenciamos a ele. Por exemplo: um gerente financeiro pode ser tratado (referenciado) como gerente financeiro, gerente ou funcionário quando estamos em um contexto de uma empresa. Se ampliarmos este contexto também podemos dizer que um gerente financeiro pode ser tratado (referenciado) como pessoa física, por exemplo.

    Espero que este material possa ajudá-lo a entrar no mundo OO com pé direito.

    Sucesso e boa sorte na jornada!

     

    Posted by: jossemaravila | Segunda-feira, 18/Fevereiro/2008

    Desafio público. Vai encarar?

    Domingo, dia 03/02, estávamos, eu e meu filho Gabriel, fazendo uma típica atividade de pai e filho: assistindo um desenho animado!

    O desenho contava a estória de um garoto que encontrou uma lâmpada mágica e um gênio que lhe concedia três desejos. Até aí tudo normal, no entanto, no meio de toda a estória, meu filho fuzilou a seguinte pegunta:

    Papai quais seriam os seus três desejos?

    Confesso: titubiei, travei, deu pane!

    Não respondi!

    Mas fiz o que geralmente os pais fazem quando não querem ou não sabem a resposta: devolvi a pergunta, que prontamente foi respondida com a apresentação de uma enorme lista de brinquedos, é claro que todos com alguma coisa do homem aranha!

    O engraçado é que aquela pergunta ficou martelando! E não consigue parar de pensar nisto!

    Primeiro, pensei em fazer pedidos que sanariam alguns desejos pessoais como: dinheiro, carros, viagens, etc, etc, etc; mas o o engraçado é que logo bateu um grande sentimento de egoísmo!

    Afinal, teria oportunidade para mudar ou fazer qualquer coisa que ajudasse várias pessoas ao mesmo tempo e porque não fazê-lo? Será que outras pessoas também teriam o mesmo pensamento?

    Então, semana passada, comentei sobre o ocorrido com a galera da Arquitetura da CVC (Leandro, Morais, Hirata e Valdir) e a conversa fluiu de forma um tanto quanto esperada, pois, todos, também resolveriam e pediriam coisas pessoais.

    Mas, quando questionei-os sobre ter o poder para mudar o mundo, curar doenças, dar emprego ou dar estudo e dignidade as pessoas é que me surpreendi!

    Isto porque concluímos que: bens materiais, comida, esmolas ou uma casa, por exemplo, não resolveriam o(s) problema(s) das pessoas menos favorecidas, mas sim, propiciar a estas pessoas a chance de tornarem-se cidadãos, sábios de seus direitos e deveres, capazes de construir uma vida digna e honrada. O que somente pode ser feito dando oportunidades de crescimento e amadurecimento físico, moral, emocial, psicológio e educacional a estas pessoas.

    Pois bem, depois de toda esta conversa, fiquei pensando: será que precisamos encontrar uma lâmpada com um gênio mágico para realizarmos nossos desejos pessoais e principalmente para começarmos a agir como catalisadores de mudanças em nossa sociedade?

    Com certeza, não!

    Por isto, gostaria de lançar um desafio a todos nós:

    Vamos nos empenhar e atuar de fato, até o final deste ano de 2008, como catalisador de mudança de vida para pelo menos uma pessoa?

    O que vocês acham?

    Vão encarar?

    Postagens Antigas »

    Categorias