devcommerce

#Devcommerce slides da palestra sobre Manifesto Reativo e painel Big Data

Wow! Adorei a primeira conferência para desenvolvedores na indústria de e-commerce.

Para quem estava buscando os slides da apresentação sobre o manifesto reativo, está disponível para baixar:
Slides da palestra.

Gostaria de agradecer toda manifestação de apoio, aplausos e perguntas realizadas no evento e pós evento, foi muito legal conhecer todos vocês e saber que o pessoal realmente se interessou pelo manifesto reativo e novas técnicas de desenvolvimento de software para a indúsitra de e-commerce.

Obrigado Tiago Baeta, pelo apoio; Toda a equipe do e-Commerce Brasil pela fantástica organização do evento, estão de parabéns.

#Goreactive!
#GoBigData

devcommerce

Devcommerce palestra e painel sobre Big Data

No próximo dia 20 de Junho acontece a primeira edição do devcommerce, um evento voltado pra desenvolvimento de e-commerce na America Latina, ajudei a organizar a grade de palestras junto com o pessoal do iMasters, parceiros de longa data, lá estarei palestrando sobre o Manifesto Reativo para e-commerces e juntei um time bem legal para discutirmos sobre Big Data em e-commerce e os problemas da infra.

Basicamente todos sabem que também estou envolvido em grandes e-commerces Brasileiros e quero compartilhar um pouco sobre a plataforma da Typesafe e o que grandes empresas vem fazendo para entender hábitos do consumidor através do Big Data.

O evento acontece no Hotel Renascence, aqui em São Paulo.

A grade de palestras esta imperdível, tem muito conteúdo bom, pena que as vagas são poucas, embora nossa intenção é ter novas versões desse evento.

Adoraria entrar em contato com você que estiver lendo aqui e participar do evento, ouvir de você os problemas é algo que podemos colaborar e melhorar as soluções exponencialmente.

Para quem ainda conseguir achar vaga, aqui o link.

hangout-header

Hangout do movimento Reativo e o Play Framework

Hoje mais cedo prometi no Twitter o seguinte:

Promessa é dívida, então agora no momento em que estou escrevendo o post, atingimos a marca de 10011 inscritos no movimento, ele já foi traduzido para português Brasil e Português de Portugal, estará em breve no site.

Hangout confirmado e será distribuído o video pelo Youtube como fiz com o do AngularJS.

Informações do evento
Quando será? 04 de Abril 2015 11 de Abril 2015
Preço? Gratuito
Onde? On-line na seguinte URL
Quem pode participar? Devs Scala, Java e Curiosos sobre a plataforma Reativa
Qual Conteúdo? Aprenda um pouco como criar aplicativos com o Play Framework, APIs REST e como criar sistemas de alta escalabilidade.

Compartilhe, ajude a divulgar, on-line não existe limite de participantes, da última vez do Hangout com a participação de todos, conseguimos juntar quase 1k de pesssoas ao vivo durante o evento.

 [Atualizado 30 de Março 2015] 

Devido a muitos me pedirem para mudar a data devido o feriado, mudei para o dia 11 de Abril 2015. Ajustem suas agendas por que a data mudou. E como todos estão com várias dúvidas, é melhor perguntar ao vivo do que vê apenas a gravação.

big-data

Big Data será um forte tópico por aqui

Recentemente mudei de time e estou muito focado em Big Data, Big Apps e Análises Complexas. É bom quando você praticamente muda de ares depois de uma certa década trabalhando só com Web e Mobile.

Nos últimos 45 dias eu tenho me dedicado ao assunto e posso asseguramente dizer que tem muito tópico para ser escrito por aqui relacionado a Big Data.

Sendo mesmo um buzzword do momento, Big Data nada mais é que o grande apetite das empresas em querer entender melhor sobre seus negócios, seus clientes e tentar imitar Deus ou seja lá como você chama seu criador.

O assunto é uma forte pauta em minha cabeça que comecei a escutar alguns livros no Audible sobre o assunto e prometo escrever um review sobre eles assim que possível, dentre eles estão:

Em resumo, estou me capacitando sobre o assunto e de uma melhor forma escrever meus próprios inputs.

Tecnologias que estou de olho:

Investir o tempo é algo que não me falta desânimo, especialmente para aprender mais, as tecnologias corretas encurtam seu tempo nesse período e te fazer querer investir em algo que te traga retorno, seja prático ou teórico.

Big Data não é capaz de viver sozinha sem um software de distribuição paralela. E eu gosto como a fundação Apache se sai sobre esse teto, no momento estou investindo nas seguintes tecnologias:

Apache Kafka
Apache Hadoop
Apache Mahout
Apache Storm
Apache Spark
Scala
ETLs de uma maneira geral.

Nos vemos no próximo post.

angular2-logo

Angular 2.0 mudança drástica e a Ng-conf 2015

Embora o AngularJS 1.3.x e 1.4.x continue sendo mantido, a idéia é que você mude como cria apps com o novo framework 2.0.

Hoje é o segundo dia da Ng-Conf, embora seja o segundo dia, não consegui manter o ritmo em assistir as novidades vs os atributos diários, hoje como é uma sexta-feira eu consigo assitir algumas palestras.

Para quem quiser assistir as de hoje. Só assistir abaixo.

Os videos do que aconteceu ontem, podem ser acessados daqui.

Em resumo, quem perdeu ontem e quer acompanhar, basta entrar no novo site do Angular.

 www.angular.io 

Resumindo o que aconteceu ontem:

  • AngularJS agora é Angular
  • Angular agora é baseado no TypeScript
  • Angular agora é mantido pela Microsoft e Google
  • Templates muito mais simplificados
  • Controllers agora são Assincronos
  • Lazyload de Controllers por padrão
  • Mudança absurda na sintaxe
  • Suporte a E5, E6

Prometo escrever um post muito mais completo assim que consegui assitir tudo e me atualizar.

play_framework_dicas

Play framework servindo XML e JSON ao mesmo tempo

É comum quando você está criando sua API do zero, ter o suporte fora da caixa em JSON; Que é o padrão REST de tráfego de dados atualmente e usado por todos.

E quando sua API fala com vários players de mercado e esses players usam tecnologias diferentes? Uma boa parcela adota o JSON como padrão, já outras ainda estão amarrados ao XML. Tudo por causa do legado deixado. À exemplo disso, tem muita empresa que ainda usa Oracle 9g e 10g que não tem suporte padrão ao JSON por parte da Oracle, tendo que depender de packages de terceiros.

Teorias a parte, ainda tem muito software antigo em uso que fizeram implementação SOAP 1.1 e pararam por ai, difícil você convencer um player a mudar a sua saída para consumir nossos serviços. O interessante seria você dar a solução e criar uma interface que deixe o cliente o mais confortável possível para ele conseguir se comunicar com sua API.

Ter suporte a XML é uma forma natural de todos falarem naturalmente com seus serviços e o sucesso da integração completa é quase certo.

Enfim, o Play Framework dá suporte a saída XML e JSON nativamente fora da caixa. O problema existe quando você quer servir ambas as coisas em uma única requisição.

Para você conseguir nesse ponto, basta você interceptar qual o Content-Type da chamada e assim direcionar o uso para o formato requisitado.

package controllers;
 
import com.fasterxml.jackson.databind.node.ObjectNode;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
 
/**
 * Created by igorcosta on 14/01/15.
 */
public class BlogController extends Controller {
 
    private static final String RESPONSE_APPLICATION_XML_TYPE = "application/xml";
    private static final String RESPONSE_XML_TYPE = "text/xml";
    private static final String RESPONSE_APPLICATION_JSON_TYPE = "application/json";
 
 
    public static Result ola() {
        String headerType = request().getHeader("Content-Type");
        String retorno = null;
        if (headerType.contains(RESPONSE_APPLICATION_XML_TYPE) ||
                headerType.contains(RESPONSE_XML_TYPE)) {
 
            if (headerType.equals(RESPONSE_APPLICATION_XML_TYPE)) {
 
                response().setContentType(RESPONSE_APPLICATION_XML_TYPE);
            } else {
                response().setContentType(RESPONSE_XML_TYPE);
            }
            // Use any java lib to generate a better xml 
            retorno = "Ola Mundo";
 
        } else if (headerType.contains(RESPONSE_APPLICATION_JSON_TYPE)) {
            // Serving just plain json
            ObjectNode result = Json.newObject();
            result.put("mensagem","Ola Mundo");
            retorno = result.toString();
        }
 
        return ok(retorno);
    }
}

Screenshot from 2015-01-14 12:29:03

Você interceptando o tipo do conteúdo da chamada, você pode servir os dois formatos.

Como o Play faz o auto-generate do Header da chamada, é importante também sobrescrever o retorno da chamada, caso contrário você tem um retorno em pleo text/plain.

foot_steps

Feliz Natal e Ano Novo

Chegamos à praticamente mais um final de ano, todos recebem aqueles cartõezinhos sem sentidos e automáticos de listas de opt-in, alguns recebem descontos de 10% de ofertas para produtos que não tem necessidade e outros se manifestam em blogs, escrevendo pseudos textos para distrair a mente e desejar um feliz natal para seus fiéis leitores.

2014 Foi um ano turbulento, com fortes mudanças de vida, mudei de cidade, mudei de emprego, renovei os conhecimentos, aprendi 2 novos idiomas (Chinês e Japonês), não como gostaria, seria um pouco soberbo em achar que dominaria todo por completo. O básico para guia do viajante eu já sei, o que é de bom tamanho. Se eu falhar tem o inglês sempre que me salva.

Mudei completamente o foco do blog, prometi escrever mais, só que devido a tanta mudança tentei ser o mais pontual possível nos posts por aqui. Embora tenha mudado, consegui ainda escrever uma média de 3 artigos por mês.

Se for aplicar a matemática humana, fiz muita coisa e coisas boas. A vida em São Paulo é totalmente diferente da vida que eu vivia, ser empregado é uma nova experiência, é algo que estou aprendendo constantemente. Deixei de lado um pouco eventos, embora convites não fosse feito, eu preferir evitar e focar nessa nova jornada, sabe aquela coisa foque no que você é bom.

Cai de cabeça dentro dos estudos, compartilhei em alguns videos no youtube um pouco do que aprendi, ganhei milhares de admiradores e fiz novos amigos.

Um agradecimento em especial as pessoas que fizeram a diferença em meu 2014:

Alexandre Salomão, Jennifer Lee Palmer, Merlise Rupolo, Daniele Alves, Rodrigo Kfouri, Orsi, Miguel Damasceno, Fabricio Costa, David Ruiz, Marcelo Santos, William Amaro, Gustavo Lopez, Alexandre Telles, Cassiano Alves, Cid Moreira, Luciana Carvalho, Lucas Melman, Igor Minar, Robert Nyman, Aral Balkan, Alex Harui, Fabio Magnoni, Eduardo Magno, Wesley Valentim, Elizangela, Pollyana Damasceno, Heider Lopes, Mariana Fullen, Sergio Cabral, Thiago Baeta, Cezar Xavier, Larissa Lima, Rafael B Lopes, Dona Sônia, Wender Lima (Grande Brother), Alexandre Grillo, Rafael Nami, Carlos Gatto, Mariana Villas Lobo, Lucas Alves, Larissa Medeiros, Thiago Medeiros, Marcus Pinto, Plínio Fabricio Alencar, Minha Familia, Todos os leitores do blog, Todos que assistiram aos videos no youtube.

Todos que estão ai em cima impactaram positivamente meu 2014.

Desejo a todos vocês um feliz natal e em uma frase bem simples: “Nunca deixe de acreditar em si mesmo”.

wired

Habilitando CORS no Play Framework 2.3.x

É bem comum quando você trabalha com diferentes servidores e recursos separados por uma vasta rede de servidores, ou você contorna isso usando Nginx, proxies ou você implementa uma abordagem diferente quando chega nesse nível.

CORS, basicamente é o problema mais comum em lhe dar com chamadas AJAX hoje em dia, por exemplo esse post foi inspirado nessa necessidade.

No Play Framework você samba um pouquinho para conseguir adicionar suporte a CORS nas chamadas que forem executadas por lá.

Para quem usa Tomcat, pode usar o filtro que o Ebay disponibilizou no Github.

Como funciona no Play?

Crie um arquivo na pasta Raiz:Global.java

 
import play.GlobalSettings;
import play.libs.F.Promise;
import play.mvc.Action;
import play.mvc.Http;
import play.mvc.SimpleResult;
 
public class Global extends GlobalSettings {
    private class ActionWrapper extends Action.Simple {
        public ActionWrapper(Action<?> action) {
            this.delegate = action;
        }
 
        @Override
        public Promise<SimpleResult> call(Http.Context ctx) throws java.lang.Throwable {
            Promise<SimpleResult> result = this.delegate.call(ctx);
            Http.Response response = ctx.response();
            response.setHeader("Access-Control-Allow-Origin","*");
            response.setHeader("Access-Control-Allow-Methods", "POST, HEAD, PATCH, GET, PUT, DELETE, OPTIONS");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
            return result;
        }
    }
 
    @Override
    public Action<?> onRequest(Http.Request request, java.lang.reflect.Method actionMethod) {
        return new ActionWrapper(super.onRequest(request, actionMethod));
    }
}

Salve e execute qualquer chamada REST que você tenha de serviço no Play, o cabeçalho agora aparecerá para você assim:

 
 
    Status Code: 200 OK
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization
    Access-Control-Allow-Methods: POST, HEAD, PATCH, GET, PUT, DELETE, OPTIONS
    Access-Control-Allow-Origin: *
    Content-Length: 3322
    Content-Type: application/json; charset=utf-8

Fácil né? Para chegar até aqui foi complicado, então deixo aqui o registro para futuros devs Java que tiverem esses problemas para resolver de forma mais rápida que eu.

Até o próximo post, dúvidas, deixem seus comentários.

gitignore_site

.gitignore e como gerar o seu

Esse é um post rápido, se você tem um projeto e que faz versionamento com o Git, sempre terá que ignorar alguns arquivos como: preferências de (sdk, projeto), saída do projeto, arquivos de documentação. Em fim tem de tudo um pouco para você gerenciar.

O que mais complica é quando você tem N IDEs,com um time que tem diferentes skills e que usam diferentes IDE para trabalhar, nesse ponto você tem que alterar com certa frequência o .gitignore para levar em consideração e não entrar arquivos indesejáveis.

A melhor maneira de fazer isso é com auxílio. Achei um site bem bacana para isso.

www.gitignore.io

O site gitignore.io é excelente, consigo facilmente adicionar os arquivos para serem ignorados. Diminuindo a chance de erros.

Welcome - Polymer

Gravação Componentizando a Web com Polymer

No último sábado aconteceu outro Hangout da série tecnologias Google para desenvolvimento Web.

Eu particularmente estou adorando a receptividade do público que está fomento por tanto conteúdo.

Nesse hangout eu mostrei um pouco sobre componentes Web, arquitetura do Polymer e como ele pode resolver alguns problemas já existentes.

Quem quiser assistir, está on-line a gravação no youtube.

Código fontes e slides são disponíveis pela licença Creative Commons, significa que você pode modificar e mencionar a fonte original, com isso você pode fazer a mesma apresentação no seu grupo de usuários, estudos etc.

Slides: Baixar Slides

Exemplos criados no Hangout:
Fork no Github

Aproveito e faço o convite para os próximos que sempre acontecem na última semana de cada mês.

Quem perdeu também o hangout sobre AngularJS, pode assistir aqui.

Desenvolvimento de software para Web e Mobilidade