Experiência AngularJS + Java em Produção

divedoo

Olá Pessoal,

O post de hoje vou falar  um pouco sobre a experiência que tivemos aqui na ITSLabs com desenvolvimento de um produto usando AngularJS e hoje está em produção. O produto ainda é um MVP versão 1.0.0 e foi de desenvolvido em 45-50 dias.  Para quem acompanha o blog venho trabalhando com AngularJS no dia a dia a quase 1 ano e criei o grupo AngularJS-Brazil (https://groups.google.com/forum/#!forum/angularjs-brazil) no Google Groups e mais uma vez reforço para quem está chegando, quer aprender qualquer tecnologia? Saia do CRUD, só assim você vai poder aprender  de verdade.

Lets go…

 

ITSLabs

Antes de começar falando do projeto, deixa eu falar rapidamente da ITS. A ITS é uma start-up  voltada para criação de produtos web e mobile. Aqui buscamos resolver os problemas dos nossos clientes identificamos qual a tecnologia resolve melhor o problema. Portanto, a tecnologia nada mais é que apenas uma ferramenta para atingir o objetivo. Hoje temos projeto com AngularJS, NodeJS, Java etc.  Em breve assim que tiver um ok do cliente teremos mais um case que vou compartilhar aqui com vocês de um projeto NodeJS + AngularJS.  A ITSLabs não é consultoria, fabrica de software que tem o foco apenas em desenvolver software, vamos um pouco além, e precisamos entregar valor ao negócio do cliente e também trazer valor para nossa equipe técnica. Já rejeitamos projetos que financeiramente seria ótimo, mas valor entregue tecnicamente para nossa equipe seria quase zero. Nosso dia a dia é bem Agile, trabalhamos 95% remoto e pouco focado em horas trabalhadas ou que horas você entrou hoje e saiu ontem. Atender aos prazos com qualidade é o nosso maior ativo.

 

DiveDoo – www.divedoo.com

É uma plataforma que busca resolver o problema de quem  busca acessório, curso, equipamentos na área de mergulho, mas não sabe como e onde encontrar. Fazendo uma pesquisa no Google as informações estão espalhadas e alguns sites podem não ser confiáveis. Baseado nisso foi criado a plataforma pela mergulhadora Gabriela Galvão.

Nossa experiência com AngularJS          

Esse foi  o nosso terceiro projeto com AngularJS em produção, os dos primeiros eram projetos bem menores com relação ao DiveDoo.  Ter escolhido AngularJS foi  uma excelente escolha, por alguns motivos:

  • Manutenção do lado do cliente: ganhamos muito na organização de  js, css etc.  Isso foi fantástico e crucial  para o desenvolvimento;
  • Integração com back-end: ter o back-end e front 100% independente. É fantástico, podemos mudar para  qualquer outra tecnologia sem precisar tocar no código do cliente.
  • Ter programadores trabalhando em paralelo e separado sem bloqueios: isso ajudou bastante, alguns programadores back-end odeiam front-end (eu era um desses, mas deixei de ser graças ao AngularJS) e aqui podemos manter cada um trabalhando do seu lado e se comunicando apenas através de uma API REST.
  • IE: esse cara é uma dor de cabeça. Então se você pensa em querer dá suporte para versões antigas  como 8 ou inferior. Esquece de usar AngularJS, apesar que o pessoal da Google fala nas versões mais antigas do AngularJS que eles oferecem suporte e talz, algumas coisas não funcionam bem, e ainda depender do Windows com a versão do IE, pegamos incompatibilidade. É tenso o negócio, simplesmente consome um tempo enorme para tentar achar a solução e se encontrar.  Se você tem um projeto que vai dá suporte a esse camarada em versões antiga, pode ir buscando outro framework, pq o AngularJS não vai rolar. E o problema não é do AngularJS, na verdade ele nasceu sem vontade nenhuma em querer ajudar o browser da Microsoft :). A partir do IE9 as coisas já funcionam com uma compatibilidade melhor.

Tools

Usar Yeoman  & Grunt é um fator de produtividade. Criamos uma estrutura do lado do back-end onde o desenvolver front-end consegue testar aplicação com back-end localmente e podendo sempre pegar o ultimo código que foi comitado. Separamos isso em módulos :

  • Web: aqui  é a versão que vai para o servidor remoto
  • Core: todo back-end
  • Webdev: aqui é onde o programador front-end trabalha e segue toda a estrutura do Yeoman. Se for preciso debugar um código local basta subir aplicação a partir desse modulo  usando o comando: grunt Server  e pronto.O Server vai subir em porta e IP diferente da aplicação que possui o back-end.  Quando o trabalho de front-end está concluído e precisa ser integrado com o back-end basta executar um grunt build e todo código do front é minificado e colocado no modulo de web  para ser deployed. Para quem está trabalhando no front-end isso é transparente.

Montamos essa estrutura, pois em projetos passados sofremos bastante com isso, a estrutura tudo em um único projeto funciona bem, quando temos um projeto que não é grande, ou seja, poucas funcionalidades. 

Aprendizado

Aprendemos que sem Yeoman é querer sofrer. Realmente é uma ferramenta poderosa e querer fazer tudo na mão, é perda de tempo, exceto se você está querendo aprender criando seus projetos house made. Mas, projeto que vai para produção, não recomendo. UI-Router  esse é o cara. Muito bom, e facilita bem o uso de rotas dentro do AngularJS. Quando você usa o UI-router que percebe a limitação que temos com as rotas default com AngularJS. Em breve vou fazer um post sobre  ele. Aprenda a separar as coisas, controller, services etc. Ter tudo organizado e separado é importante. Crie padrões de nomeação de arquivos para facilitar na hora que for buscar. Se você usa o Yeoman, ele ajuda em manter tudo organizado.  Use e abuse da injection dependecy que temos no angularJS, é fantástico. Lembro que quando comecei a estudar AngularJS demorei um pouco para pegar o core de usar injeção de dependência , a dica é leve o tempo que puder estudando, mas aprenda.  Não tenha medo de perguntar e não ache que você sabe tudo, esse é o maior erro achar porque fez algum CRUD que já aprendeu, pelo contrario é nesse momento que a brincadeira começa, todo dia  você vai aprender alguma coisa nova.

Conclusão

Hoje usamos fortemente AngularJS em nossos projetos aqui na ITS, há outros valores na tecnologia da Google que se fosse entrar nos detalhes  o post viraria um livro. Por falara nisso, em breve estarei lançando meu próximo livro que será sobre AngularJS, que nada mais vai ser o que aprendi nesse  quase 1 ano em três projetos completamente diferente e os erros que cometi, e acertos que também tive.

Vou ficando por aqui…

See ya!!!Abraços,

Série Dropbox: Renomeando arquivo via easyJavaDropboxAPI


 
Olá Pessoal, 
 
No post de hoje vamos ver como renomear um arquivo no dropbox usando a easyJavaDropbox API. O problema surgiu porque a API do Dropbox não tem nenhum método Java para renomear um arquivo. Na verdade tem um move que pode de fato mover um arquivo ou folder e também renomear. Achamos funcionalidades demais para um unico método, e na versão 1.2.0 da easyJavaDropbox API adicionamos um método que é capaz de fazer o rename. 
 
Lets go…
 
 
Starting… 
 
Considerando que você já tem API configurado no seu projeto, vamos ver como usar a nova funcionalidade de renomear um arquivo.
 
Requisitos
 
EasyJavaDropboxAPI 1.2.0 
 
Há apenas dois novos métodos nessa versão: 
 
  • renameFileRoot(String currentNameFile, String newNameFile): esse método renomeia um arquivo considerando que o mesmo está na raiz do dropbox: “/”.  Lembre-se de que a raiz é da app que você criou.
 
  • renameFile(String pathFolder, String currentNameFile, String newNameFile): já esse método vai renomear um arquivo para um caminho que for especificado, então você vai ter que dizer:
    •  a pasta onde está o arquivo;
    •  o nome do arquivo que será renomeado; 
    • e o nome do novo arquivo; 
 
Development 
 
Agora vamos praticar. Como sempre, o exemplo vai estar no projeto easyJavaDropboxAPIExample, que já possui exemplos das outras funcionalidades da API.
 
Passo 1 
 
No método main vamos criar um método privado que fará o rename de um arquivo na raiz e outro para um caminho específico: 
 
public static void main(String[] args) throws DbxException, IOException {
String token = "token here";
String path = "/";
EasyJavaDropBoxService easyJavaDropBoxService = new EasyJavaDropBoxServiceImpl(path, token);
renameFileFromRoot(easyJavaDropBoxService);
renameFile(easyJavaDropBoxService); 
}

Agora vamos criar os métodos: 

private static void renameFile(EasyJavaDropBoxService easyJavaDropBoxService)
throws DbxException {
easyJavaDropBoxService.renameFile("/teste/","myfile.png", "renameok.png");
}

 

private static void renameFileFromRoot(EasyJavaDropBoxService easyJavaDropBoxService)

throws DbxException {
String newNameFile = "alertfytestelocal.png";
String currentNameFile = "testelocal.png";
easyJavaDropBoxService.renameFileRoot(currentNameFile ,newNameFile);
}

No dropbox: 

Temos um arquivo dentro do diretório teste chamado de myfile.png 
 
easydropboxapirenamefile
 
Vamos renomear esse arquivo para renameok.png
 
Na raiz vamos alterar o arquivo chamado alertfytestelocal.png para testelocal.png
 
easydropboxapirenameroot
 
Testando 
 
Agora vamos testar a aplicação executando o método main. 
 
Resultado: 
  
Na pasta teste:
 
easydropboxapirenametesteworking
 
 
Na raiz: 
  
easydropboxapirenamerootworking
 
Fantástico, não? Espero que tenham gostado do post e da funcionalidade. 
 
Github Projeto 
 
 
Projeto Exemplo: 
 
 
Abracos, see ya!! 

Série Dropbox: Enviando arquivos para o Dropbox via Java Application

Olá Pessoal,

Venho trabalhando há um bom tempo com API do Dropbox em web apps. No post de hoje vamos ver como enviar um arquivo para uma conta no dropbox via Java Application. É um verdadeiro upload via console.

Lets go…
O cenário

Imagine que você queira ter um upload na sua aplicação. Nada de diferente aqui, mas sabemos que há várias formas de fazer isso e temos bastante frameworks Java que nos ajudam. Mas, como fazer de forma rápida e segura? Aqui usamos o serviço do Dropbox para armazenamento de arquivos que vem da aplicação. Isso nos ajuda em vários pontos:

1. Segurança: Certamente o time do dropbox é preocupado com isso;

2. Histórico: Por default o dropbox mantém um histórico do arquivo, então em caso de precisar retornar uma versão é muito simples;
3. Baixo custo de desenvolvimento: API do dropbox é bem documentada e tem suporte a diversas linguagens. O que teremos que fazer é sempre implementar algo muito específico ou encapsular algumas features mais comuns para evitar de ter código repetido em várias partes da aplicação;
Ai nasceu no laboratorio da ITS a easyJavaDropboxAPI(https://github.com/ITSStartup/easyJavaDropboxAPI), que nos ajuda no dia a dia. A API ainda está nas primeiras versões e recentemente acabou de sair a versão 1.1.0 com algumas funcionalidades e melhorias e uma delas é permitir salvar arquivos no dropbox (a versão anterior nos permitia apenas ler um arquivo). O método na API que salva um arquivo é assim:

 

Vamos ver na prática

Primeiro Passo

Vamos usar o projeto easyJavaDropboxAPIExample que vimos no post: https://blog.camilolopes.com.br/serie-dropbox-conectando-com-dropbox-api-java/

Então você precisa ter feito os passos descritos no post acima.

Segundo Passo

Se fez o passo 1, certamente consegue listar os arquivos.

Terceiro Passo

Atualize o pom.xml para usar a versão mais nova da API:

<dependencies>
<dependency>
<groupId>com.its.api</groupId>
<artifactId>easyJavaDropboxAPI</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>

 

Quarto Passo

Agora vamos adicionar o código que fará o upload. Não vamos modificar o código existente, apenas adicionar. No método main adicone as seguintes linhas:

//upload service
EasyJavaDropBoxServiceImpl upload = new EasyJavaDropBoxServiceImpl(token);
saveToDropbox(upload);

 

 O código com o método main completo ficou assim:

public static void main(String[] args) throws DbxException, IOException {
String token = "your token here";
String path = "/";
EasyJavaDropBoxService easyJavaDropBoxService = new EasyJavaDropBoxServiceImpl(path, token);

List<DbxEntry> listFiles = easyJavaDropBoxService.listFiles();
for (DbxEntry file : listFiles) {
System.out.println(file.name);
}
//upload service
EasyJavaDropBoxServiceImpl upload = new EasyJavaDropBoxServiceImpl(token);
saveToDropbox(upload); 
}

 

Lembre-se de que é preciso gerar o token para sua conta. Quando tiver o token coloque como valor na variável token. Agora vamos criar o método que salva o arquivo no dropbox:

private static void saveToDropbox(EasyJavaDropBoxService uploadEasyJavaDropBoxService) throws DbxException, IOException {
//creating new file
File file = new File("camilotestedropbox2.txt");
file.createNewFile();
//writing content in file
FileWriter fileWriter = new FileWriter(file);
fileWriter.write("Test upload to dropbox api");
fileWriter.close();

try {
FileInputStream fileInputStream = new FileInputStream(file);
String fileName = file.toString();
//calling method from easyJavaDropboxAPI
uploadEasyJavaDropBoxService.saveToDropbox(fileName, fileInputStream); 
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}

 

Testando

Agora chegou a hora de testar. Rode a aplicação e vamos ver a saída no console:

dropboxuploadconsole

 

Na imagem acima são listados os arquivos que tenho no meu dropbox. Agora vamos ver se no dropbox tem o novo arquivo que criei:

 

dropboxfileuploadeddone

Pronto, arquivo enviado para o dropbox. Simples, não?

O projeto foi atualizado no Github:

https://github.com/ITSStartup/easyJavaDropboxAPIExample

Vou ficando por aqui. Espero que tenham gostado do post.

Abracos, see ya!!!

Série Dropbox: Enviando arquivos para o Dropbox via Java Application

 
Olá Pessoal, 
 
Venho trabalhando há um bom tempo com API do Dropbox em web apps. No post de hoje vamos ver como enviar um arquivo para uma conta no dropbox via Java Application. É um verdadeiro upload via console. 
 
Lets go…
 
O cenário
 
Imagine que você queira ter um upload na sua aplicação. Nada de diferente aqui, mas sabemos que há várias formas de fazer isso e temos bastante frameworks Java que nos ajudam. Mas, como fazer de forma rápida e segura? Aqui usamos o serviço do Dropbox para armazenamento de arquivos que vem da aplicação. Isso nos ajuda em vários pontos:
 
1. Segurança: Certamente o time do dropbox é preocupado com isso;
 
2. Histórico: Por default o dropbox mantém um histórico do arquivo, então em caso de precisar retornar uma versão é muito simples; 
 
 
3. Baixo custo de desenvolvimento: API do dropbox é bem documentada e tem suporte a diversas linguagens. O que teremos que fazer é sempre implementar algo muito específico ou encapsular algumas features mais comuns para evitar de ter código repetido em várias partes da aplicação; 
 
Ai nasceu no laboratorio da ITS a easyJavaDropboxAPI, que nos ajuda no dia a dia. A API ainda está nas primeiras versões e recentemente acabou de sair a versão 1.1.0 com algumas funcionalidades e melhorias e uma delas é permitir salvar arquivos no dropbox (a versão anterior nos permitia apenas ler um arquivo). O método na API que salva um arquivo é assim:
 
public void saveToDropbox(String finalName,InputStream inputStreamContent) throws DbxException,IOException;

 

Vamos ver na prática 
 
 
Metendo a mão na massa  
 
Primeiro Passo
 
Vamos usar o projeto easyJavaDropboxAPIExample que vimos no post:
 
Então você precisa ter feito os passos descritos no post acima.
 
Segundo Passo
 
Se fez o passo 1, certamente consegue listar os arquivos. 
 
Terceiro Passo
 
Atualize o pom.xml para usar a versão mais nova da API:
 
<dependencies>
<dependency>
<groupId>com.its.api</groupId>
<artifactId>easyJavaDropboxAPI</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>

 

Quarto Passo 
 
Agora vamos adicionar o código que fará o upload. Não vamos modificar o código existente, apenas adicionar. No método main adicone as seguintes linhas:
 
//upload service
EasyJavaDropBoxServiceImpl upload = new EasyJavaDropBoxServiceImpl(token);
saveToDropbox(upload);

O código com o método main completo ficou assim: 

public static void main(String[] args) throws DbxException, IOException {
String token = "your token here";
String path = "/";
EasyJavaDropBoxService easyJavaDropBoxService = new EasyJavaDropBoxServiceImpl(path, token);
List<DbxEntry> listFiles = easyJavaDropBoxService.listFiles();
for (DbxEntry file : listFiles) {
System.out.println(file.name);
}
//upload service
EasyJavaDropBoxServiceImpl upload = new EasyJavaDropBoxServiceImpl(token);
saveToDropbox(upload);
}

Lembre-se de que é preciso gerar o token para sua conta. Quando tiver o token coloque como valor na variável token. Agora vamos criar o método que salva o arquivo no dropbox:

  

private static void saveToDropbox(EasyJavaDropBoxService uploadEasyJavaDropBoxService) throws DbxException, IOException {
//creating new file
File file = new File("camilotestedropbox2.txt");
file.createNewFile();
//writing content in file
FileWriter fileWriter = new FileWriter(file);
fileWriter.write("Test upload to dropbox  api");
fileWriter.close();

try {
FileInputStream fileInputStream = new FileInputStream(file);
String fileName = file.toString();
//calling method from easyJavaDropboxAPI
uploadEasyJavaDropBoxService.saveToDropbox(fileName, fileInputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}

Testando 

Agora chegou a hora de testar. Rode a aplicação e vamos ver a saída no console: 
 
dropboxuploadconsole
 
Na imagem acima são listados os arquivos que tenho no meu dropbox. Agora vamos ver se no dropbox tem o novo arquivo que criei: 
 
dropboxfileuploadeddone
 
Pronto, arquivo enviado para o dropbox. Simples, não? 
 
O projeto foi atualizado no Github:
 
 
Vou ficando por aqui. Espero que tenham gostado do post. 
 
Abracos, see ya!!!

Lançamento 1.1.0 easyJavaDropbox API

olá Pessoal,
O post de hoje é  bem curto apenas para anunciar para uma released da API easyJavaDropboxAPI. Para não ter que repetir o que já publiquei configura nesse post Por que usar easyJavaDropbox? e  confira o que temos de novo na nova versão e o que já está on development para versão 1.2.0.
GitHub
abracos, see ya!!