terça-feira, 11 de agosto de 2015

JSON no Browser

Opa,

Se vc usa REST e ele retorna JSON... Instale essa extesion do chrome:

https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?utm_source=chrome-app-launcher-info-dialog

Vai mudar suaa vida :D

Ela deixa formatadinho seu JSON... coisa linda!

Obrigado ao Guilherme Ribeiro pela dica!

Abraço!
Adriano Schmidt

domingo, 9 de agosto de 2015

node js - helloworld e um pouco mais

Semana passada comecei a brincar com Node JS.

Fiz um hello-world bem simples e rápido.

Caso queira fazer também, faça clone desse projeto e siga o arquivo README: https://github.com/adrianoschmidt/node-hello-world

Pronto, agora vamos um passo adiante.

No caso do Windows, depois vale à pena instalar mesmo o node (não só baixar o .exe e sim o .msi)

Agora instale o bower e o grunt
npm install -g bower
npm install -g grunt-cli

Baixe esse projeto e siga o README:
https://github.com/adrianoschmidt/seat-map-nodejs

Depois baixe o front-end desse seat-map (bootstrap, angular e grunt)
https://github.com/adrianoschmidt/seat-map-frontend

Qualquer dúvida é só comentar!

Abraço!
Adriano Schmidt

nome de arquivo muito longo no windows

Hoje tentei deletar uma pasta no Windows e aconteceu esse erro:

"Os nomes dos arquivos de origem são maiores do que o tamanho máximo permitido pelo sistema de arquivos."


Esse erro é causado pois o nome do caminho completo do arquivo é muito grande, mais do que o Windows suporta. No meu caso o npm criou umas pastas muito loucas no node_modules e aí gerou esse problema.

Para resolver faça o seguinte:

Alternativa 1) Renomear diretorios
Renomeie alguns diretorios, por exemplo:
Dê:
c:\work\projeto\node_modules\alguma coisa\outra coisa\diretorio com nome grande\mais uns 4 diretorios\arquivo.txt
Para:
c:\work\projeto\n\a\o\d\m\arquivo.txt

Assim o caminho do arquivo fica menor e tá tudo certo.

Alternativa 2) Mapear como unidade de rede

a) Faça uma pasta compartilhada
Você vai na pasta, talvez não na pasta mais interna, mas em alguma no meio do caminho e compartilha ela na rede (Botão direito na pasta > Compartilhar com)

b) Mapeie uma unidade de rede
Depois você tem que mapear essa pasta compartilhada como uma unidade de rede (Botão direito em Meu computador > Mapear unidade de rede > Escolhe a pasta compartilhada)

c) Exclua o arquivo
Ao acessar essa nova unidade (unidade "Z:" por exemplo) você vai conseguir excluir ou mover os arquivos pois agora o caminho completo do arquivo ficou menor.

-------------------

Qualquer dúvida é só comentar aí embaixo!!

Valeeu!!!
Adriano Schmidt

quinta-feira, 6 de agosto de 2015

Grunt com HTTPS/SSL em ambiente de desenvolvimento

Hoje precisei rodar o Grunt com HTTPS para fazer uns testes aqui. Segue o passo-a-passo:

Primeiro crie o certificado. Aqui estou usando o openssl no ubuntu. Se você usa Windows pesquise sobre como criar certificado no windows ( https://www.openssl.org/related/binaries.html )

openssl genrsa -out livereload.key 1024

openssl req -new -key livereload.key -out livereload.csr
(esse comando vai pedir alguns dados... vai preenchendo... Só em "Common Name" coloque "localhost" sem aspas)

openssl x509 -req -in livereload.csr -signkey livereload.key -out livereload.crt

Agora você tem 3 arquivos, copie os livereload.key e livereload.crt para dentro do seu projeto, na mesma pasta do Gruntfile por exemplo.
Eu criei uma pasta chamada ssl dentro da pasta onde está o Gruntfile.

----------------------

No seu Gruntfile no  "watch: {" você tem colocar esse options em todos os lugares que você quer que rode com https (no js, css e no livereload) por exemplo:

        options: {
            livereload: {
              port: 9000,
              key: grunt.file.read('ssl/livereload.key'),
              cert: grunt.file.read('ssl/livereload.crt')
            }
          }

Como ficou meu watch:

   watch: {
      bower: {
        files: ['bower.json'],
        tasks: ['wiredep']
      },
      js: {
        files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
        tasks: ['newer:jshint:all'],
        options: {
            livereload: {
              port: 9000,
              key: grunt.file.read('ssl/livereload.key'),
              cert: grunt.file.read('ssl/livereload.crt')
            }
          }
      },
      jsTest: {
        files: ['test/spec/{,*/}*.js'],
        tasks: ['newer:jshint:test', 'karma']
      },
      styles: {
        files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
        tasks: ['newer:copy:styles', 'autoprefixer'],
        options: {
            livereload: {
              port: 9000,
              key: grunt.file.read('ssl/livereload.key'),
              cert: grunt.file.read('ssl/livereload.crt')
            }
          }
      },
      gruntfile: {
        files: ['Gruntfile.js']
      },
      livereload: {
     options: {
         livereload: {
           port: 9000,
           key: grunt.file.read('ssl/livereload.key'),
           cert: grunt.file.read('ssl/livereload.crt')
         }
       },
        files: [
          '<%= yeoman.app %>/{,*/}*.html',
          '.tmp/styles/{,*/}*.css',
          '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
        ]
      }
    },


Agora no seu index.html, uma linha antes de fechar o body (</body>) cole isso:
<script>document.write('<script src="https://' + (location.host || 'localhost').split(':')[0] + ':9000/livereload.js"></' + 'script>')</script>

Pronto, ao rodar o "grunt serve --force" tudo estará rodando em HTTPS :)

Mais detalhes em: http://www.gilluminate.com/2014/06/10/livereload-ssl-https-grunt-watch/

Abraço! Qualquer dúvida comenta aí!
Adriano Schmidt

quarta-feira, 5 de agosto de 2015

X-Frame-Options to SAMEORIGIN

Eu estava fazendo um client OAUTH para fazer login via facebook e deu o erro:

Refused to display 'https://www.google.com.br/qualquerUrl' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

Isso é problema de Same Origin Policy... uma política de segurança para evitar que scripts de um site acessem scripts de outro site. Mais em:
https://en.wikipedia.org/wiki/Same-origin_policy

Seguindo nessa linha instalei extensões no google chrome. Pesquisei por "cross domain" e achei várias. Mas não resolveu meu problema.

Iniciei o google chrome passando parâmetros para desabilitar a segurança. No Ubuntu fiz dessa forma:
google-chrome --disable-web-security --allow-file-access-from-files --allow-file-access --allow-cross-origin-auth-prompt
Mas não resolveu meu problema.

Achei que o erro estava acontecendo pois eu estava rodando em localhost ou 0.0.0.0 (estou usando grunt no meu projeto). Então tentei utilizar um DNS. Mas não resolveu meu problema.

Por fim, identifiquei, que minha empresa tinha um servidor de proxy, e por mais que minha máquina estivesse liberada e eu pudesse acessar tudo (pelo menos era o que parecia) verifiquei no network do chrome que o meu OAUTH Client acessava em algum momento a URL http://static.ak.facebook.com e o response vinha com uma página do google, e isso que gerava o erro.

Solução: Desligamos a máquina do proxy, não faz sentido hoje em dia usar isso :D E tudo funcionou perfeitamente \o)

Obrigado ao Herbert Smith e ao Alfredo Zipperer pela força!

Abraço!!!
Adriano Schmidt

quinta-feira, 30 de julho de 2015

Como instalar o Mongo no linux?

Segue passo-a-passo para instalar o MongoDB no Linux

Onde estiver escrito (root) você deve utilizar um usuário com permissão de root

Apenas para informacao: O mongo rodara em localhost:27017 e tambem sera startado automaticamente na proxima inicializacao da maquina.


########### Para RedHat/CentOS ###########

# crie o diretorio /data/db (root)
mkdir -p /data/db

# Garanta que o dono da pasta seja o usuario correto. (Altere <nome do usuario> para o usuario que iniciara o mongo) (root)
chown -R <nome do usuario> /data/db/

# crie o arquivo do repositorio yum (root)
vi /etc/yum.repos.d/mongodb-org-3.0.repo

# aperte i para entrar no modo "INSERT" e depois cole as seguintes linhas:
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1

# aperte "ESC" e depois digite ":wq" para salvar e fechar o arquivo

# agora instale o mongo (root)
yum install -y mongodb-org

# rode o comando abaixo e verifique se a instalação aconteceu com sucesso
mongo --version

# inicie o mongo
service mongod start

# teste
mongo

#apert ctrl c para sair


########### Para Ubuntu/Debian ###########


# crie o diretorio /data/db (root)
mkdir -p /data/db

# Garanta que o dono da pasta seja o usuario correto. (Altere <nome do usuario> para o usuario que iniciara o mongo) (root)
chown -R <nome do usuario> /data/db/

# agora instale o mongo (root)
apt-get install mongodb

# rode o comando abaixo e verifique se a instalação aconteceu com sucesso
mongo --version

# teste
mongo

#apert ctrl c para sair


Fonte: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/
Créditos: Ao Alfredo Zipperer que me deu uma mão para instalar o mongo aqui

Vaaleu!
Adriano Schmidt

terça-feira, 28 de julho de 2015

Unicode character table

Em algum momento da sua vida... seja num teste rápido ou até naquele momento de desespero... você vai precisar da tabela de Unicode...

Fiz esse post para registrar os caracteres mais usados e espero que possa ser útil para você assim como foi pra mim.


###### Unicode character table ######

#lettipo minusmaius
#a crase \u00E0 \u00C0
#a agudo \u00E1 \u00C1
#a chapeu \u00E2 \u00C2
#a ttil \u00E3 \u00C3
#c cedilha \u00E7 \u00C7
#e agudo \u00E9 \u00C9
#e chapeu \u00EA \u00CA
#i agudo \u00ED \u00CD
#o agudo \u00F3 \u00D3
#o chapeu \u00F4 \u00D4
#o ttil \u00F5 \u00D5
#u agudo \u00FA \u00DA


A lista completa pode ser encontrada aqui: http://unicode-table.com/en/

Fiz uma clase Java para printar esses caracteres para validar se estão corretos: https://gist.github.com/adrianoschmidt/60f0070b69e66067b922

Abraço!!!
Adriano Schmidt

segunda-feira, 27 de julho de 2015

Como trocar versão do Java no ubuntu?

Olá :)

No terminal, rode o comando "java -version" para ver a versão atual utilizada na sua máquina:







Rode o "sudo update-alternatives --config java" para ver as versões instaladas na sua máquina.
Como você usou o "sudo" talvez seja solicitado a senha do seu usuário.
Depois digite o número da coluna "Selection" de acordo com a versão que você que utilizar.















Depois rode o "java -version" de novo para verificar se funcionou:







É isso :)

Abraço!
Adriano Schmidt

terça-feira, 21 de julho de 2015

Spring OAP

Hoje precisei criar um interceptor.

Queria que antes e depois da execução de determinados métodos fosse chamado um Rest.
Também queria que se o método lançasse uma exception, chamasse outro Rest.

Pensei em annotation processor... orientação a aspectos com o aspectj... no fim resolvi com o Spring AOP.

Resumindo, você precisa:

Criar uma annotation para anotar no método que você quer interceptar.
Criar um Advisor para ler os métodos que tem a annotation.
Criar o interceptador para inserir o comportamento que você quer.
Alterar o applicationContext.xml e colocar o component-scan com o pacote onde está seu Advisor e adicionar o bean DefaultAdvisorAutoProxyCreator.

Com isso você consegue apenas colocando uma anotação no seu método fazer algo antes dele ser chamado, depois, ou tratar exceptions por exemplo.

Você pode ver o código nesse meu projeto no GitHub: https://github.com/adrianoschmidt/springaop

Mais detalhes em:
http://blog.javaforge.net/post/76125490725/spring-aop-method-interceptor-annotation

Abraço!!
Adriano Schmidt

Como fazer deploy no nexus

Para fazer seu projeto fazer deploy no nexus você precisa:

Criar repositórios no nexus:
Acesse o nexus como admin e crie dois repositórios do tipo "Hosted Repository"
Configure o "Repository Policy" do primeiro como "Release" e dê o nome de nome-do-projeto-releases
Configure o "Repository Policy" do segundo como "Snapshot" e dê o nome de nome-do-projeto-snapshots

Adicionar no seu pom: (altere a URL e o nome-do-projeto)
<distributionManagement>
<repository>
<id>nome-do-projeto-releases</id>
<url>http://nexus.localhost8080.com.br/nexus/content/repositories/nome-do-projeto-releases</url>
</repository>
<snapshotRepository>
<id>nome-do-projeto-snapshots</id>
<url>http://nexus.localhost8080.com.br/nexus/content/repositories/nome-do-projeto-snapshots</url>
</snapshotRepository>
</distributionManagement>

Configurar settings.xml
Configure o setting.xml (seja no maven da sua máquina ou no Jenkins (no jenkins você pode configurar pelo managed files também))

      <servers>
          <server>
              <id>nome-do-projeto-releases</id>
              <username>user_no_nexus_com_permissao_de_deploy</username>
              <password>senha_do_user</password>
          </server>
          <server>
              <id>nome-do-projeto-snapshots</id>
              <username>user_no_nexus_com_permissao_de_deploy</username>
              <password>senha_do_user</password>
          </server>
      </servers>


Deploy na mão
Abra o terminal e rode o comando: mvn clean deploy

Deploy pelo jenkins
Mesma coisa que manual, porém configure o seu job para fazer o mvn clean deploy


Abraço!!
Adriano Schmidt