sábado, 6 de abril de 2013

Grade do FLISOL SSA[2013] Fechada



O FLISOL Salvador será um evento recheado de palestras voltadas para as novidades do mercado. O evento terá quatro salas, três contendo palestras e uma com atividade a ser anunciada. Uma novidade que será trazida esse ano ao evento,  é que dentro dele haverá um congresso de Javascript, o JS-BA, que tende a ser o primeiro do ramo aqui na Bahia. O evento acontecerá dia 27 de abril, na Faculdade AREA1.

Evento: FLISOL 2013
Data:
27 de abril, sábado
horário:
8:00-18:00
Local:
Faculdade AREA1
Inscrições:
http://javabahia.blogspot.com.br/p/proximos-eventos.html
Para mais informações: http://softwarelivre.org/flisol-ssa



Sala de BahiaJS

HorárioDescriçãoResponsável
08:30 às 09:00AberturaOrganização
09:00 às 10:00Comunicação entre janelas em domínios diferentes utilizando postMessageCaio Almeida (CaioSBA)
10:10 às 11:00DESENVOLVIMENTO DE EXTENSÕES PARA O GOOGLE CHROMEMarlon Carvalho
11:10 às 12:00Mapeando o mundo com o Google Maps APIAntonio Fernando Santos Ladeia
12:00 às 13:00Almoço
13:00 às 14:00Desenvolvendo plugins com o jQuery UI e testando com o jasmineAlexandre Magno Teles Zimerer 
14:10 às 15:00Arquitetura de SPA (Single Page Application) utilizando ExtJs MVC e outros padrõesVictor Cardins
15:10 às 16:00melonJS: Uma alternativa Livre para o desenvolvimento de jogos em HTML5Luis Gustavo de Jesus Araujo
16:10 às 16:50Criando aplicações com AngularjsWilson Mendes Neto
17:00 às 17:50Addicted to coffee(script)Aurélio A. Heckert
18:00 às 18:30Encerramento e sorteiosOrganização

Sala de Desenvolvimento

HorárioDescriçãoResponsável
08:30 às 09:00AberturaOrganização
09:00 às 10:00nodeNES - Construindo uma IDE para Nintendo 8 bits no Navegador.Guto Maia
10:10 às 11:00Introdução Prototipagem com Microcontrolador ArduinoFernando Moreira (Mestre dos Magos))
11:10 às 12:00As principais novidades do Java EE 7Bruno Borges
12:00 às 13:00Almoço
13:00 às 14:00Integrando Python e JavaScriptLuiz Claudio
14:10 às 15:00Design on the BrowserTassia Pellegrini
15:10 às 16:00Responsive Design, usar um framework ou não?Fernando
16:10 às 16:50Iniciando sua Jornada com Mule ESBJean Donato / Claudio Escobar
17:00 às 17:50Arquitetura e padrões 2.0Otávio Santana
18:00 as 18:30Encerramento e sorteios

Sala de Infra Estrutura

HorárioDescriçãoResponsável
08:30 às 09:00AberturaOrganização
09:00 às 10:00Criando um appliance Open Source para mitigar vulnerabilidades de serviços e aplicaçõesAlexandro 'Alexos' Silva
 10:10 às 11:00 Software livre como diferencial no mercado de trabalho Cristiano Furtado
11:10 às 12:00Criptografia assimétrica com GnuPGAntonio Terceiro
 12:00 às 13:00 Almoço
 13:00 às 14:00MainframesFabio Fonseca Barbosa Gomes
 14:10 às 15:00Balanceando alto tráfego de Proxy Squid Rafael Gomes
 15:10 às 16:00
 16:10 às 16:50Criatividade e Software Livre: como uni-los em um novo modelo de desenvolvimentoAlexandre Teles
 17:00 às 17:50 Novas Idéias, Negócios e Perspectiva no Trabalhar com JavaFelipe Mateus
 18:00 as 18:30Encerramento e sorteios Organização

Grade Sujeita a alteração


Mais detalhes das Palestras e palestrantes:
Sala BahiaJS: http://goo.gl/Whl3Q
Sala de Infraestrutura: http://goo.gl/B3SX1
Sala de Desenvolvimento: http://goo.gl/5PyK0

quinta-feira, 14 de março de 2013

Inscrições para FLISOL SSA 2013 Abertas




As inscrições para o FLISOL 2013 estão abertas, esse evento mais uma vez conta com a ajuda da comunidade brasileira, com profissionais com reconhecidos em todo mundo.
Umas das novidades desse evento é o primeiro encontro de javaScript da Bahia.

Guarde em sua agenda:

Evento: FLISOL 2013
Data: 27 de abril, sábado
horário: 8:00-18:00
Local: Faculdade AREA1
Inscrições: http://javabahia.blogspot.com.br/p/proximos-eventos.html
Grade: http://softwarelivre.org/flisol-ssa/programacao-2013
Palestras Desenvovlimento: http://softwarelivre.org/flisol-ssa/palestra-desenvolvimento
Palestras BahiaJS: http://softwarelivre.org/flisol-ssa/palestra-bahiajs
Palestra infraestrutura; http://softwarelivre.org/flisol-ssa/palestra-infraestrutura

quinta-feira, 14 de fevereiro de 2013

Novidade: FLISOL com o BahiaJS









O Festival Latino Americano de Instalação de Software Livre, FLISOL, sempre foi palco de novidades, com palestras de infraestrutura, empreendedorismo, desenvolvimento, dentre outros quando o assunto é software livre. O objetivo do evento é sempre mostrar que a tecnologia de código aberto vem evoluindo através do tempo e muito tende a crescer. Esse ano a sala de desenvolvimento traz uma grande novidade:

Em conjunto com o FLISOL, acontece o primeiro encontro de JavaScript na Bahia, o BahiaJS. A linguagem JavaScript, que vem era tratada como mero coadjuvante para aplicação web, tem se tornado uma peça preponderante não somente para a usabilidade da aplicação e estética, mas também para performance e economia de recursos do servidor.  Assim como o FLISOL, esse é um evento que depende e muito da participação de todos! Ajude-nos a divulgar o evento, submeta palestras e principalmente: venha prestigiar o evento!
Contamos com sua participação no BahiaJS junto com o FLISOL que acontecerá no dia 27 de abril, sábado, na faculdade AREA1.
Você tem interesse em palestrar no BahiaJS? Então submeta sua palestra em: http://goo.gl/od1TY
Você ou sua empresa tem interesse em em patrocinar o evento: Proposta do evento



sexta-feira, 18 de janeiro de 2013

Introdução ao BigData





    Demorou, mas finalmente conseguir um tempo para falar um pouco da minha apresentação no JavaOne 2012 que foi BigData. Com a evolução das aplicações e a necessidade do ser humano pela informações, mais e mais aplicações vem surgindo, deixando o homem cada vez mais refém da informação. Para isso basta lembra-nos da evolução do homem em que num passado existia muitas pessoas para uma máquina ( como o mainframe), em seguida uma pessoa por máquina ( o caso do computador pessoal) e nos tempos atuais em que para cada pessoa possue várias máquinas ( notebook, ultrabook, PC, tablet, smartphone, no futuro óculos, geladores, etc.). Com tantos aplicativos surgindo as informações são geradas exponencialmente, com isso a capacidade de gerenciar tantas informações se torna primordial para as aplicações atuais. Esse mesmo crescimento de dados acontece nos aplicativos empresariais com crescimento anual de 60%, se estima que uma empresa com mil funcionários gera anualmente 1000 terabytes sem falar que essa quantidade tende a aumentar cinquenta vezes até 2020.

    Com o recém surgimento do bigdata, a primeira dificuldade é encontrar o seu conceito, é possível vê-los de maneiras totalmente divergentes em cada blog que se lê, ou seja, se você ler 10 materiais sobre bigdata, provavelmente cada um trará conceitos diferentes. Dentre as matérias ao se tirar um mínimo comum se verá que o bigdata na sua raiz se fala em tratar um grande volume de dados com grande velocidade. No entanto se repara que essa definição é bastante abstrata pelo simples fato de que para uma pessoa A, por exemplo, um grande volume seja um gigabyte e para uma pessoa B um grande volume seja um terabyte e o mesmo pode acontecer ao se referenciar a velocidade e o tempo de resposta de uma requisição.
    Assim o grande desafio do bigData é estar administrando um grande volume de dados e minerando informações em um menor tempo de requisição. Com o grande volume de dados fazer com que a aplicação cresça a medida que é necessário é uma ótima estratégia assim uma escalabilidade vertical ( em que se aumenta o poder do hardware como aumento de memória e de processamento de uma única máquina) ou horizontal ( em que se aumenta a quantidade de máquina) deve ser analisada. Apesar de ser mais complexa a escalabilidade horizontal acaba sendo muito barata sem falar de ser mais fácil de crescer ou diminuir os recursos por demanda.
    Para armazenar as informações com a escalabilidade horizontal os bancos NOSQL são uma ótima estratégia, vale lembrar que o banco NOSQL significa não apenas, not only, e não sql, no sql. Uma diferença entre os bancos NOSQL e o SQL é que o primeiro possui uma grande variedade de bancos e cada um com características diferentes. Em termo de arquitetura os bancos NOSQL podem ser distribuídos ou não, embora sejam mais populares do tipo distribuído. Sua forma de armazenamento pode ser apenas memória ou apenas disco rígido ou configurável( vale apena lembrar que banco apenas na memória são muito rápidos, no entanto são volúveis, já os somente no HD tem informações permanentes, porém o I/O é muito alto). Outra características divergentes entre os bancos NOSQL está na forma do armazenamento que são: chave-valor, documento, família de coluna e grafos. Os bancos         NOSQL costumam ser muito rápido na leitura e na escrita, no entanto, possui uma grande deficiência por parte das buscas, normalmente são dadas apenas pela chave, para isso usar um serviço para terceirizar o serviço pode ser uma boa ideia, como o framework Lucene.
    Mesmo realizando estratégias de buscas terceirizadas ou buscando pelo id, se a informação não estiver na memória principal pode haver uma demora para recuperar essa informação, assim, ter um dispositivos de acesso rápido pode ser uma melhor opção, com isso o uso do cache. Ao se optar pelo cache deve-se levar em conta os dois maiores desafios:
  • Ter informação: O ato de esquentar a informação é extremamente importante para esse mecanismos, já que não adianta existir um cache se o mesmo não tenha nenhuma informação. Para isso ele pode ser esquentado de várias formas (ao iniciar uma aplicação, por demanda, por sessão do usuário) que desse ser definido com o aplicativo em questão não existindo uma bala de prata.
  • Matar o cache: Para o cache é necessário que exista apenas informações atuais, assim é importante que os dados atuais sejam mortos e trocado por informações mais atuais.


    Um outro aspecto no bigdata, que não é muito tratado, está relacionado na velocidade da modelagem além da velocidade no desenvolvimento de software. Um exemplo muito interessante é o twitter que viu muito usuários usando a hashtag ( o '#' adicionado com uma palavra) e em pouco tempo teve que realizar pesquisas através dos mesmos.
    Assim podemos verificar que o bigdata não apenas está relacionado apenas na velocidade de requisição, mas também em desenvolvimento, assim conhecer bem o negócio além de várias ferramentas poderá ser extremamente importante. Na linguagem Java conhecer o Java EE 6, muito em breve o java 7, além do JDK 7 trará velocidade de desenvolvimento, produtividade e um melhor gerenciamento de memória.
    Assim pode-se concluir que o conceito do BigData é relativamente muito fácil, mesmo sendo divergente em várias fontes, que é gerenciar um grande volume de memória em alta velocidade. O mais difícil certamente é chegar nesse objetivo já que para isso é necessário conhecer uma gama de ferramentas, frameworks, metologias, tipos de bancos como NOSQL, SQL e NewSQL, cache, serviço de indexação de buscas, tipos de escalabilidades, etc. Apesar de ainda ser muito discutida nas universidades a normalização foi desenvolvida em 1970 ( vale lembrar que os servidores da época possuíam 16kb de memória principal e 800kb de armazenamento e os celulares são muitas vezes mais rápido que estes servidores) ou seja não é certo afirmar que os aplicativos, os hardwares, as necessidades de hoje são os mesmos daquela época, assim é entender que esse padrão nem sempre é válido.


sexta-feira, 16 de novembro de 2012

Conhecendo o tio da senha





A divisão do software em camadas, atualmente, é certamente uma das formas mais eficiente de estar se organizando a sua aplicação. Facilitando a manutenção, reaproveitamento de código, etc. Vale salientar que camada no inglês tem duas palavras: Tier, a camada física e Layer, camada lógica. No entanto, criar um grande número de camadas além de desnecessário acaba deteriorando a desempenho do seu software. Assim surgiram as chamadas delay layer, camadas lógicas que apenas servem para passar à informação a diante, gerando atraso na reposta e consumo desnecessário na memória. Esses atrasos em alguns casos acontecem fora da parte lógica da aplicação. Acontecem no processo de desenvolvimento (fora do código), pessoas ou profissionais que acabam gerando um atraso na resposta, delay tier, conhecido carinhosamente como os tios da senha.



Exemplificando como eles funcionam, falarei do funcionário que aperta o botão no elevador, não estou desmerecendo nenhuma profissão. O elevador possui uma interface super simples e basta se pressionar o botão com o andar desejado. Você precisa informar o andar desejado e ele por sua vez apertará o botão. Essa chamada gerará um atraso natural até você informar o andar desejado e ação desse profissional, quando entrar 10 pessoas simultaneamente essa demora será “gritante”.

As empresas não o contratam diretamente, os preferem chamar de Arquitetos, gestores de aplicação ou DBAs, são profissionais que centralizam alguns até mesmo todos os processos de software de uma empresa. Essa ação gera uma pseudo controle para a empresa, porém, acaba gerando atraso tanto nas escolhas de tecnologias quanto na execução de um script, alteração no banco de dados etc. e esses atrasos impactam diretamente a entrega desse projeto.
O fato é que as tecnologias, requisitos, metodologias, etc. surgem muito rápidos, assim nascem várias siglas (UX, DDD, TDD, BDD NOSQL, NewSQL, bid data, integração contínua, etc.) e deixar essa responsabilidade na mão de apenas uma pessoa ou uma pequena equipe se torna um erro. Por alguns motivos:
Caso os detentores das senhas, se desmotivarem e parem de se atualizar profissionalmente. O parque tecnológico da empresa em pouco tempo vivará artefato de museu.

Centralizar decisões tecnologias para todos os projetos é um grande erro! Ninguém melhor que um membro da equipe para decidir qual ferramenta é a mais interessante para um requisito específico. Sem falar que pode gerar uma padronização equivocada, ou seja para todos os problemas a mesma solução. Dizer que para todos os problemas precisamos de um martelo é dizer que os parafusos também são pregos.
O aumento demasiado do ego, isso mesmo, um técnico com um ego muito grande faz com que toda a empresa use tecnologias do seu “mundinho” para que assim seja o maioral.


Atraso na resposta, fazer com que muitos processos passem na mão de uma pessoa, quando existir muitas requisições de várias pessoas em algum momento gerará um atraso, é o caso do elevador quando entram dez pessoas ao mesmo tempo.

Mal aproveitamento de um profissional, se queremos executar um simples script ou renomear um campo de uma tabela para que precisamos de um DBA para uma atividade tão trivial ? Seria mais interessante que ele estivesse ajudando em atividades como: trabalhar para dar maior desempenho e diminuir o tempo de resposta no banco, definir índices, ajudar na escalabilidade do banco, uma mudança de estratégia para um banco NOSQL ou NewSQL, bigdata, ajudar na criação de querys com mais desempenho ou talvez criação de views, etc.

Abandono na qualidade do projeto, o software que usa ferramentas muito antigas será a janela quebrada do seu projeto.



Desmotivar a refatoração do projeto, o fato mais comum para os requisitos é que eles mudam com uma grande facilidade, desse modo, a refatoração é importante tanto para um código e banco mais limpo tanto para um bom desempenho para a aplicação. Quando para realizar tal atividade precisa passar por um processo demorado, essa atividade acaba sendo muito custosa para o projeto e em alguns casos sendo descartável.
Ou o que eles precisam fazer ?
Acredito que o primeiro passo é entender que engenharia de software não é comparável com outras áreas, assim, possuem características e metodologias próprias. Em seguida a área evolui muito rápida e precisamos evoluir junto com ela simplesmente “parar no tempo”.

Em relação das ações, o que eles precisam fazer é o processo totalmente inverso, ou seja, o de não centralizar informação e ser o facilitar o acesso ao conhecimento. Descentralizar é fazer com as informações circulem de maneira mais “livre” e que as soluções partem de qualquer parte da empresa. Estimular atividades como codingdojos, participação de eventos, wiki na empresa, etc. Uma equipe autogerenciável deve ser o sonho de qualquer gestor de TI que esteja em 2012.


Remover os atrasos do processo software é crucial para manter um ciclo saudável no desenvolvimento. Conhecer a filosofia “toyotismo”, que se tornaram base para as metodologias ágeis, e dizer adeus ao “Taylorismo”, filosofia de Taylor que visa centralizar as decisões, é um pequeno passo para isso. Desconcentrar processos e decisões de software é muito mais do que apenas remover uma camada física desnecessária, delay tier, também é criar uma equipe auto-gerenciável, impedir que a empresa vire um museu, permitir que exista opções para solucionar um problema e que a mais adequada seja utilizada, deixar fluir a informação e fazer com que o profissionais se atualizem e utilizem tal conhecimento. Sobre tudo demonstrar que gosta do que faz e passar esse prazer para os outros membros da equipe, estimular para que eles também façam o mesmo.






quarta-feira, 31 de outubro de 2012

Ultimo Encotro javaBahia 2012




Local: Estácio FIB
Data: 10 de novembro
Horário: 8:30
Inscrições: http://goo.gl/feCAz
valor: Gratuíto


8:30 palestra GDG
DescriçãoOs GDGs (Google Developer Groups) são peças muito importantes na estratégia do Google de divulgar e popularizar as tecnologias e produtos da empresa. Além disso, nada melhor que promover a troca de conhecimento e experiências entre a própria comunidade, e o Google quer ajudar os grupos a fazerem isso. Nessa palestra, vamos falar um pouco sobre a estratégia, os benefícios e como o Google pretende ajudar os GDGs no Brasil, e claro, a importância de novos grupos como o GDG SSA.
9:00Palestra: Google Maps API
Descrição: Google Maps API é um serviço gratuito que possui várias APIs que permitem incorporar as funcionalidades do Google Maps em seus aplicativos. Nessa palestra, iremos ver na prática como usar alguns desses recursos.
9:30 Palestra: Android 4 UX e Design – O que muda?
Descrição: Plataforma. Algumas regras mudaram. Novos padrões surgiram. Se você estava acostumado à forma de construir aplicativos para Android com as versões pré-ICS, venha conhecer essas mudanças e como elas vão afetar, para melhor, sua forma de criar aplicativos.
10:00 Palestra Utilizando as APIs de dados do Google.
DescriçãoAngularJS é uma biblioteca JavaScript para desenvolvimento de
aplicações Web que implementa o modelo MVC do lado do navegador e
recupera dados do servidor em formato JSON. Sua principal
característica é desacoplar a manipulação do DOM da lógica da
aplicação, o que facilita muito o uso de testes.
11:00 PalestraPrimeiros passos com GAE em Java
Descrição: Conheça um pouco das vantagens que o GAE pode te proporcionar.

domingo, 23 de setembro de 2012

Novo Easy-Cassadran 1.1.0: Unindo com o Google Guice




      Lançada a mais nova versão do Easy-Cassandra, essa nova versão trouxe novidade no gerenciamento de muitos nós. O uso de muito nós é interessante para o Cassandra já que evita gargalos, garante a tolerância a falhas, elasticidade além do fato. Um grande número de nós faz com que o Cassandra distribua as requisições salientando que esse tipo de banco possui uma arquitetura distribuída, ou seja, vale a pena utilizar um grande número de nós.
       Tão logo se tenha múltiplos nós do Cassandra o próximo passo é estar dividindo as tarefas entre os mesmos, não adianta se possuir dez nós, por exemplo, se todas as requisições vão sempre para um. Feito isso, o banco tratará todo resto (replicar informação entre os nós, ler e escrever a partir do nível de consistência, etc.). A estratégia utilizada no Easy para aproveitar o máximo dos múltiplos nós, é fazer com que cada requisição use um cliente diferente, para isso ele terá duas formas:


  • Seqüencial: Cada nó recebe um número de ordem crescente que vai de 0 até N-1, em que N é o número instâncias do Cassandra, feito essa numeração, para cada solicitação ao Cassandra ( atualizar, criar, deletar) é usado um cliente diferente seguindo em ordem crescente, por exemplo: Primeira requisição cliente 0                                                                                                 Segunda requisição cliente 1                                                                                                       Uma vez acabado o número de nós, essa ordem recomeça a partir do cliente 0. 



  • Randômico: De forma semelhante ao seqüencial, é dado um número para cada cliente onde começa de 0 até n-1, após essa numeração para cada requisição é criado um número aleatório que representa uma instância do Cassandra.   


       Para usar uma das duas estratégias no ORM é bastante simples: O primeiro passo é criar instâncias do Cassandra Adicionar esses nós no Easy-Cassandra Criar uma das duas Estratégias informando o nome do keyspace, caso não existe o keyspace será criado. Para demonstrar esse novo recurso será usado um simples exemplo: O seu objetivo será apenas recolher uma resposta de qualquer usuário para a seguinte pergunta: “O que você acha do Cassandra”. Para fazer esse exemplo utilizaremos o tomcat como servidor, jsf na visão e o Google Guice como injeção de dependência. Como o objetivo é estar apenas armazenando o usuário e sua pergunta, modelando o objeto a ser salvo ficará do seguinte modo:

  
@Entity
public class Post implements Serializable;
   @Id
    private String nickName;
    
    @Column
    private String text;

     Estaremos usando os qualificadores do Google Guice, a idéia é que a partir da anotação seja definido o tipo de persistência seqüencial e randômico. Conforme mostra a tabela 2.
  
@BindingAnnotation @Target({ FIELD, PARAMETER, METHOD }) @Retention(RUNTIME)
public @interface Random {}
@BindingAnnotation @Target({ FIELD, PARAMETER, METHOD }) @Retention(RUNTIME)
public @interface Sequencial {}

  

 @Inject @Sequencial
    private ServiceClient sequencialClient;
    
    @Inject @Random
    private ServiceClient randomClient;

      A criação dos dois tipos é bastante semelhante, a primeiro é adicionando os host, feito isso já se pode chamar qualquer uma das formas de estratégia de persistência conforme mostra a tabela 3.
  
        EasyCassandraManager.getPersistence("javabahia", "localhost", 9160);
        EasyCassandraManager.getPersistence("javabahia", "node2", 9160);
        EasyCassandraManager.getPersistence("javabahia", "node3", 9160);
        EasyCassandraManager.addFamilyObject(Post.class);

     O código desenvolvido permite duas opções de inserir sua resposta: uma seqüencial e uma randômica e tão logo é inserido a informação é recuperada e lançada em forma de lista das duas formas.


      Nesse pequeno post foram apresentadas duas estratégias para a persistência com multi-nodes usando o Easy-Cassandra. A idéia principal foi demonstrar a importância de compartilhar os trabalhos com as outras instâncias, já que não adianta ter muitos nós e todas as requisições ficarem apenas em uma, gerando todo o gargalo. Além de demonstrar um pouco do recurso do Google Guice e sua integração com o framework.

Exemplo: http://softwarelivre.org/otagonsan/codigofonte/guicecassandra.zip
Easy-Cassandra: https://github.com/otaviojava/Easy-Cassandra
Google Guice: http://code.google.com/p/google-guice/