Domingo, Novembro 23, 2008
Sábado, Agosto 30, 2008
SoftSimples no ar.
Hoje coloquei meu site no ar, site onde pretendo colocar os minhas idéias em prática, e quem sabe ganhar uma grana.
O primeiro software que ficará disponível será o SoftAggregator, e os plugins que já existem, e após isso um plugin de e-mail marketing.
O endereço é www.softsimples.com e www.softsimples.com.br
Penso também em criar um local para rss, contendo as notícias deste blog.
Pretendo também contribuir mais com a comunidade de desenvolvedores. O SoftAggregator já é uma tentativa de fazer isso.
Vejo vocês lá.
Quarta-feira, Julho 02, 2008
O projeto SoftAgregator surgiu da necessidade de disponibilizar pequenos programas de uma forma simples e com a opção de atualização ou ativação/desativação de plugins.
Para isso usamos o padrão OSGI(http://www.knopflerfish.org). poderiamos ter usado o Equinox(http://www.eclipse.org/equinox) ou o Felix(http://felix.apache.org/site/index.html).
Tanto o knopflerfish quanto o Felix foram bem cotados já que a documentação e exemplos eram bem claros, já o Equinox tinha uma documentação um pouco confusa e quase sem exemplos.
A idéia do SoftAgregator e disponibilizar plugins/bundles tanto gratuitos quanto pagos, de forma que cada usuário possa escolher o ambiente de trabalho que melhor atende suas necessidades.
Por que não usar o Eclipse ou o NetBeans como plataformas para esse modelo de aplicação?
Além de serem complexos são pesados, uma instalação de eclipse pode chegar a 14mb(aprox.) e uma com Netbeans 8mb(aprox).
Sem contar que com NetBeans tenho que escrever e manter muitos arquivos xml.
Mas o que nos motivou mesmo foi a simplicidade e a possibilidade de usar novas tecnologias usando a api padrão do java, isso seria possivel também com NetBeans, mas não gostamos da quantidade de xml que teriamos que mater para fazer tanto o projeto quanto os plugins.
Neste modelo usamos a API do java 6 update 10.
Criamos um ambiente de persistencia simples também, para plugins não tão comlexos usando DB4O, o que facilita a integração entre plugins e a munutenção já que tudo é objeto.
Por que não usamo o projeto Sneer(http://sovereigncomputing.net)?
Nossa idéia não é tão soberana assim e optamos por uma especificação como OSGI, para desenvolvimento dos plugins.
Fotos do sistema.
Terça-feira, Julho 01, 2008
Terça-feira, Junho 24, 2008
Terça-feira, Março 18, 2008
Simplicidade como?
Este sistema deveria rodar na web, para poder ser acessado por bom número de pessoas.
Então fui a escolha das tecnologias Java, Ruby, Python, Smalltalk, logo parei e pensei, quero algo simples então vou usar o que vai ser mais fácil para mim: Java, pronto decidi como seria o servidor, agora precisava decidir como salvar meus objetos(Ops aqui já complicou um pouco), que forma usar já que não tenho servidor próprio e meu limite de memória é 100MB?, prevalência de objetos nem pensar, então me restou o nem tão bom assim e velho banco de dados(ficou um pouco mais complicado), meu servidor me oferece dois bancos, MySQL e Postgree optei pelo MySQL já que meu servidor diz que posso ter até 10 beses deste banco enquanto Postgree eu poderia ter somente uma. Agora tinha que escolher fazer objeto relacional ou usar JDBC direto, qualquer uma que escolhesse já aumentaria a dificuldade de implementação, fui então em busca de uma solução no google, com a pesquisa: “java object simple persistence”. Nos resultados escolhi um, que me pareceu bem simples e funcionava com MySQL e não havia necessidade de fazer anotações(mapeamento), o escolhido foi beankeeper, realmente simples, mas mesmo assim no início tive que me bater um pouco com o tutorial, coisa de uma manhã, mas ok o cara funcionou. Pronto servidor estava preparado.
Agora tinha que definir que tecnologia de interface com usuário para web, aqui meu desespero aumentou muito, inicialmente pensei: vou usar o XUL tecnologia disponível no Firefox, já possui todos os componentes que eu queria, parecido com html, pode ser usado tanto na web quanto no desktop. Mas pensei, quantos dos meus amigos usam Firefox, então fiz uma pesquisa rápida, o resultado foi desesperador, 80% usam Internet Explorer ou seja, se desenvolvesse no que seria mais simples pra mim, seria usado por apenas 20% dos meus amigos.
Novamente que tecnologia escolher, Flex, Silverlight, Applet(Swing), DHTML, sem contar que esta escolha deveria levar em conta minhas limitações como designer. Então de cara já eliminei o Flex e o Silverlight, a disputa estava entre applets(Swing) e dhtml, lembrem-se que estou falando de interface com usuário e para eu usar applets meu cliente tem que ter a máquina virtual java. No meu caso de preferência com a versão 6, já que dá para fazer algumas brincadeiras legais com Java2D. Aqui um problema grave, pois o download da vm, custaria a meus usuários o download de 15MB aproximadamente. Novamente uma pesquisa rápida com meus amigos e o resultado: 90% desistiria pela demora e a dificuldade de começar a usar, espero que a vm com download por demanda não demore muito. Por estes motivos fui direcionado para dhtml.
Qual tecnologia de dhtml usar? extjs, DOJO, yui, etc...?
Novamente tinha que lembrar das minhas limitações como designer.
Então o escolhido foi o extjs, por ter um visual já pré-estabelecido e agradável.
Usando extjs nos remete ao uso de AJAX(no meu caso sempre troco o X por JSON), então mais complexibilidade, fazer a comunicação ser JSON. Meu servidor tem que responder as requisições AJAX no formato JSON e receber também nesse formato, já viram que é necessário fazer o parser tanto na chegada da requisição ao servidor para objetos e na resposta de objetos para JSON. Mais muita complexibilidade.
Com isso tudo o que era para ser legal ficou muito chato e complicado.
Como gostaria de fazer tudo em desktop(Java Swing/Java2D/Prevayler ou DB4O), comunicando via http usando objetos serializados ou até mesmo usando XUL(Firefox) com uma applet de comunicação para enviar e receber objetos serializados.
Mas e a quantidade de usuários?
Dar manutenção e manter os usuários motivados a usar?
Simplicidade no inicio do uso, já que a web é a forma de marketing que vende quando a pessoa ainda tem vontade de comprar, ou seja, ofereço uma opção de software, que o usuário pode usar imediatamente ao receber o impacto de uma chamada ao site, sem precisar instalar, simplesmente esta disponível para uso.
Sou forçado a usar uma forma complicada e chata de desenvolver, para ficar aderente a esse modelo de marketing, sem contar nas limitações que este formato(web) me forçam.
Com isso posto(referência a um jornalista da região onde nasci), até o próximo post.
Sábado, Setembro 22, 2007
Gerenciamento E Desenvolvimento Ágil.
Motivação.
Desenvolver software de qualidade é algo extremamente difícil. Muitos problemas podem acontecer durante este processo, existem estudos que relatam o seguinte:
1. Que 75% dos projetos falham devido a funcionalidades solicitadas (Standish Group, 2004)
2. Que de 42% a 64 % dos defeitos se originam nas funcionalidades solicitadas e de 20% a 40% dos gastos totais são devidos a correções, causadas por erros nas funcionalidades solicitadas. (SEI Research Report, 2004).
Isso nos diz que desenvolver software é um investimento arriscado, uma tarefa que deve ser medida e redirecionada dia-a-dia. Fazendo-se uma analogia, é como investir seu dinheiro na bolsa de valores. Mas na bolsa de valores você não deixa seu dinheiro esquecido por seis meses e so depois volta para ver o que aconteceu, você verifica todos os dias, estuda riscos, acompanha o mercado, se adapta a mudanças, faz as correções que acha correto e ai obtem os lucros, isso também se aplica a desenvolvimento de software.
O sucesso do software depende de ponto de vista do cliente e da empresa desenvolvedora, às vezes eles podem ter conceitos diferentes de sucesso.
Sucesso na visão da empresa desenvolvedora de software é quando o projeto é entregue no prazo e dentro dos custos.
Sucesso na visão do cliente é quando o projeto é entregue no prazo, dentro dos custos, com todos os requisitos funcionando e atendento as necessidades de seu negócio.
Para tentar resolver estes problemas, um grupo de pessoas ligadas a área de desenvolvimento se reuniu e discutiu sobre este assunto.
Eles chegaram a um acordo sobre práticas que ajudariam a diminuir estes riscos. Eles publicaram um documento, onde ficam expostas estas práticas, este documento foi chamado de Manifesto Ágil ( http://www.agilemanifesto.org )
O que é o Manifesto Ágil?
O Manifesto ágil é um conjunto de práticas que ajudam a solucionar problemas referentes a desenvolvimento de software e valorizam as pessoas que trabalham no projeto, o cliente e mudanças no negócio do cliente.
Diminui o valor de algumas práticas e super valoriza outras, seu foco é software de qualidade e funcionando, atendendo as necessidades do negócio.
Manifesto para Desenvolvimento Ágil de Software
Nós estamos procurando melhores maneiras de desenvolver
software fazendo isso e ajudando outros a fazer isso.
Para realizar este trabalho nós priorizamos estes valores:
Pessoas e Interações ao invéz de processos e ferramentas
Trabalhar no software ao invéz de documentação compreensiva
Colaboração do cliente ao invéz de negociação de contrato
Responder a mudanças ao invéz de seguir o plano
Isto é, valorizamos o valor dos itens a direita,
mas damos mais valor para os itens a esquerda.
Uma equipe ágil vai além de apenas usar estas práticas, todos os comprometidos (time de desenvolvimento e cliente), devem concordar com estas práticas e valores. É um processo de colaboração, afinal todos querem o mesmo resultado, o sucesso.
Como todo negócio, o cliente quer prazos e garantias de retorno do investimento, para isso precisamos gerênciar o processo. Neste momento precisamos de uma forma de controlar este ambiente dia-a-dia, para essa finalidade usaremos um framework de gerênciamento ágil chamado SCRUM. Existem outras opções que podem ser usadas, afinal cada projeto é diferente um do outro e exigem diferentes abordagens, mas, optamos pelo SCRUM por concordarmos mais com suas práticas.
O que é o SCRUM?
Scrum é um processo ágil para desenvolvimento de software. Com Scrum, projetos progridem via uma série de interações mensais chamadas de sprints.
Scrum é a ferramenta ideal para projetos que rapidamente tem que se adaptar a mudanças ou um alto número de requerimentos que surgem durante o processo. O trabalho que deve ser feito em um projeto Scrum é listado em um Product Backlog, que é a lista de tudo que se quer no produto. No inicio de cada sprint um Sprint Planning Meeting é realizado para que o Product Owner priorize o Product Backlog, isto é ordene o que tem que ser feito de acordo com sua necessidade e o Scrum Team seleciona as tarefas que eles podem completar durante o Sprint que irá começar. Estas tarefas então são movidas do Product Backlog para o Sprint Backlog.
Cada dia durante o sprint é conduzido por uma breve reunião diária chamada de Daily Scrum, que ajuda o time a não perder o foco, resolver problemas mais rapidamente e ficar dentro do prazo.
No final de cada sprint o time demostra a(s) funcionalidade(s) que foram realizadas em um Sprint Review Meeting.
Ciclo de um projeto gerenciado pelo SCRUM:
O que é o Extreme Programming?
Extreme Programming (XP) e atualmente a mais ponderada e disciplinada maneira de desenvolver software.
XP e bem sucedida por se preocupar muito com a satisfacao do cliente. A metodologia e designada a entregar o software que seu cliente precisa quando ele precisa. XP encoraja seus desenvolvedores a ter confianca ao responder as mudancas de requerimentos do cliente, que sempre sao de ultima hora.
Esta metodologia enfatiza no trabalho em time. Gerentes, clientes e desenvolvedores sao todos parte de um time dedicado a entregar um software de qualidade. XP implementa simplicidade de maneira efetiva e abilita um estilo de desenvolvimento em grupo.![]()
XP melhora um projeto de software de quatro maneiras essenciais; comunicacao, simplicidade, feedback e coragem.
Seguência de desenvolvimento XP e representado nas figuras a seguir:
Quem sou eu
- agnaldo4j
- Sou alegre, gosto de fazer amizades e quando possível ajudar quem precisa.
Arquivo do blog
-
▼
2008
(6)
- ▼ 11/23 - 11/30 (1)
- ► 06/29 - 07/06 (2)




