Veja a versão em português
Hello!
Today I had to install the OpenLDAP in a Windows enviroment.
It is easy, just do the following steps. You have to:
- Download the OpenLDAP for windows: http://sourceforge.net/projects/openldapwindows/
- Unzip it to some folder
- Execute it and install the software
- In "Windows Start Menu" look for "Start LDAP Server" and click on it. (Start – Programs – OpenLDAP 2.4.38 – Start LDAP Server)
- In "Windows Start Menu" look for "OpenLDAP Command Line" and click on it. (Start – Programs – OpenLDAP 2.4.38)
- Type: ldapadd.exe -v -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ..\etc\ldif\base.ldif
- Press enter. (If it doesn't work, try typing again the quotation marks (" ") because the Windows needs the right character.)
- Put the password that is "secret" by default
- Type: ldapadd.exe -v -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ..\etc\ldif\base.ldif
- Press enter.
- Put the password that is "secret" by default
Now, the OpenLDAP is installed, configured and started. To login use:
Host: localhost
Port: 389
User: cn=Manager,dc=my-domain,dc=com
Password: secret
Best Regards,
Adriano Schmidt
sexta-feira, 27 de fevereiro de 2015
Sizelimit Exceeded OpenLDAP
Veja a versão em português
Hello my friends,
Today I had this problem in my Java project when I tried do a search in OpenLDAP:
It happens because the OpenLDAP had 1500 users... and the default sizelimit in my Java client was 1000.
Changing the parameter sizelimit at slapd.conf in OpenLDAP doesn't solve the problem.
To solve this I used the class com.novell.ldap.LDAPSearchConstraints like this:
Best Regards,
Adriano Schmidt
Hello my friends,
Today I had this problem in my Java project when I tried do a search in OpenLDAP:
2015-02-26 16:44:04,875 ERROR [br.com.localhost8080.ldap.MyClass] Sizelimit Exceeded
LDAPException: Sizelimit Exceeded (4) Sizelimit Exceeded
LDAPException: Matched DN:
at com.novell.ldap.LDAPResponse.getResultException(Unknown Source)
at com.novell.ldap.LDAPResponse.chkResultCode(Unknown Source)
at com.novell.ldap.LDAPSearchResults.next(Unknown Source)
at br.com.localhost8080.ldap.LdapSynchronizer.synchronize(LdapSynchronizer.java:84)
It happens because the OpenLDAP had 1500 users... and the default sizelimit in my Java client was 1000.
Changing the parameter sizelimit at slapd.conf in OpenLDAP doesn't solve the problem.
To solve this I used the class com.novell.ldap.LDAPSearchConstraints like this:
LDAPSearchConstraints ldsc = new LDAPSearchConstraints();Setting the MaxResults with 0 (zero) the sizelimit becomes unlimited.
ldsc.setMaxResults(0);
connection.search(searchBase, searchScope, searchFilter, new String[] {}, false, ldsc);
Best Regards,
Adriano Schmidt
segunda-feira, 23 de fevereiro de 2015
Trabalhando com tags no Git
Referência básica para trabalhar com tags:
Para listar as tags no git:
git tag
Para listar as tags a partir de um filtro:
git tag -l 'v1.0*'
Para criar uma tag:
git tag -a <nome da tag> -m "<mensagem opcional>"
git tag -a v1.0.2 -m "entrega realizada com a funcionalidade X"
Para exibir uma tag:
git show v1.0.2
Para fazer push de uma tag:
git push origin v.1.0.2
Para fazer push de todas as tags:
git push origin --tags
Para deletar uma tag:
git tag -d v1.0.2
Para fazer push da deleção da tag:
git push origin :refs/tags/v.1.0.2
Para criar uma tag de um commit antigo:
git tag -a v.1.0.2 -m "entrega da funcionalidade X" <id_do_commit>
Mais em:
http://git-scm.com/book/en/v2/Git-Basics-Tagging
http://git-scm.com/docs/git-tag
Vaaleu!!
Adriano Schmidt
Para listar as tags no git:
git tag
Para listar as tags a partir de um filtro:
git tag -l 'v1.0*'
Para criar uma tag:
git tag -a <nome da tag> -m "<mensagem opcional>"
git tag -a v1.0.2 -m "entrega realizada com a funcionalidade X"
Para exibir uma tag:
git show v1.0.2
Para fazer push de uma tag:
git push origin v.1.0.2
Para fazer push de todas as tags:
git push origin --tags
Para deletar uma tag:
git tag -d v1.0.2
Para fazer push da deleção da tag:
git push origin :refs/tags/v.1.0.2
Para criar uma tag de um commit antigo:
git tag -a v.1.0.2 -m "entrega da funcionalidade X" <id_do_commit>
Mais em:
http://git-scm.com/book/en/v2/Git-Basics-Tagging
http://git-scm.com/docs/git-tag
Vaaleu!!
Adriano Schmidt
quinta-feira, 19 de fevereiro de 2015
git cherry-pick
Fala galera \o)
Você tem um commit perdido no tempo em algum branch do seu projeto... aquele commit resolvia um bug e você gostaria de aplicá-lo em sua master... seria tão legal se fosse possível simplesmente pegar as alterações daquele commit e aplicar na master, não seria? Pois saiba que é possível :D
O git tem o comando cherry-pick... ele pega as alterações de um commit e aplica em algum lugar.
Passo 1) Identifique o ID do commit que voce quer resgatar. Ex: 25210a9e67b0d77ee54ee67d9e106175c9285f18
Passo 2) Estando na master ou onde você quer aplicar o commit, rode o commando: git cherry-pick 25210a9e67b0d77ee54ee67d9e106175c9285f18
Passo 3) Dê um: git status
Passo 4) Caso apareçam conflitos, resolva-os.
Passo 5) Dê um: git add .
Passo 6) Dê um: git cherry-pick --continue
Passo 7) Confira se está tudo OK com um: git status
Passo 8) Faça um push: git push
Pronto, resolvido :D
Agradeço ao meu brother Alfredo André Zipperer que tem me feito subir uns 3 levels nas skills de git \o)
Valeu!
Adriano Schmidt
Você tem um commit perdido no tempo em algum branch do seu projeto... aquele commit resolvia um bug e você gostaria de aplicá-lo em sua master... seria tão legal se fosse possível simplesmente pegar as alterações daquele commit e aplicar na master, não seria? Pois saiba que é possível :D
O git tem o comando cherry-pick... ele pega as alterações de um commit e aplica em algum lugar.
Passo 1) Identifique o ID do commit que voce quer resgatar. Ex: 25210a9e67b0d77ee54ee67d9e106175c9285f18
Passo 2) Estando na master ou onde você quer aplicar o commit, rode o commando: git cherry-pick 25210a9e67b0d77ee54ee67d9e106175c9285f18
Passo 3) Dê um: git status
Passo 4) Caso apareçam conflitos, resolva-os.
Passo 5) Dê um: git add .
Passo 6) Dê um: git cherry-pick --continue
Passo 7) Confira se está tudo OK com um: git status
Passo 8) Faça um push: git push
Pronto, resolvido :D
Agradeço ao meu brother Alfredo André Zipperer que tem me feito subir uns 3 levels nas skills de git \o)
Valeu!
Adriano Schmidt
Alterar autor commit git
Para alterar o autor do seu último commit no Git basta fazer:
git commit --amend --author "Novo nome <email@email.com>"
Para alterar o nome e email em todos os commits de uma determinada pessoa é só fazer assim:
git filter-branch -f --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Adriano Ximit" ];
then export GIT_AUTHOR_NAME="Adriano Schmidt"; export GIT_AUTHOR_EMAIL=adriano@localhost8080.com.br;
fi; git commit-tree "$@"'
E assim também (pois caso contrário você só alterou o autor, mas o commiter não):
git filter-branch -f --commit-filter 'if [ "$GIT_COMMITTER_NAME" = "Adriano Ximit" ];
then export GIT_COMMITTER_NAME="Adriano Schmidt"; export GIT_COMMITTER_EMAIL=adriano@localhost8080.com.br;
fi; git commit-tree "$@"'
Depois de alterar você tem que dar um push... provavelmente com um --force
git push --force
Fontes:
http://stackoverflow.com/questions/750172/change-the-author-of-a-commit-in-git
http://stackoverflow.com/questions/4493936/git-could-i-change-my-name-and-surname-in-all-previous-commits
Abraço!!
Adriano Schmidt
Para alterar o nome e email em todos os commits de uma determinada pessoa é só fazer assim:
git filter-branch -f --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Adriano Ximit" ];
then export GIT_AUTHOR_NAME="Adriano Schmidt"; export GIT_AUTHOR_EMAIL=adriano@localhost8080.com.br;
fi; git commit-tree "$@"'
E assim também (pois caso contrário você só alterou o autor, mas o commiter não):
git filter-branch -f --commit-filter 'if [ "$GIT_COMMITTER_NAME" = "Adriano Ximit" ];
then export GIT_COMMITTER_NAME="Adriano Schmidt"; export GIT_COMMITTER_EMAIL=adriano@localhost8080.com.br;
fi; git commit-tree "$@"'
Depois de alterar você tem que dar um push... provavelmente com um --force
git push --force
Fontes:
http://stackoverflow.com/questions/750172/change-the-author-of-a-commit-in-git
http://stackoverflow.com/questions/4493936/git-could-i-change-my-name-and-surname-in-all-previous-commits
Abraço!!
Adriano Schmidt
quinta-feira, 12 de fevereiro de 2015
Como saber qual é o JSP em um projeto Struts?
Estou mexendo em um projeto bem antigo e precisei encontrar os arquivos JSP de cada tela que eu abria.
A partir da URL abaixo vamos descobrir o JSP
http://localhost:8080/meuprojeto/usuario.do?action=listarUsuarios
Primeiro vá no UsuarioAction (por causa do usuario.do)
Nesta classe, vá no método listarUsuarios (por causa da action)
Veja o que esse método retorna (por exemplo: return "listar";)
public ActionForward listarUsuarios(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
[...]
return mapping.findForward("listar");
}
Vá no struts-config.xml
Procure por UsuarioAction
Logo abaixo procure por "listar" (retorno do método)
Na linha do "listar" vai dizer qual é o jsp
<action path="/usuario" type="br.com.localhost8080.struts.UsuarioAction" name="usuarioForm" scope="request" parameter="action">
<forward name="listar" path="/p_listar_usuarios.jsp" />
Qualquer coisa dá um Ctrl+H com algum texto da tela :D
Att,
Adriano Schmidt
A partir da URL abaixo vamos descobrir o JSP
http://localhost:8080/meuprojeto/usuario.do?action=listarUsuarios
Primeiro vá no UsuarioAction (por causa do usuario.do)
Nesta classe, vá no método listarUsuarios (por causa da action)
Veja o que esse método retorna (por exemplo: return "listar";)
public ActionForward listarUsuarios(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
[...]
return mapping.findForward("listar");
}
Vá no struts-config.xml
Procure por UsuarioAction
Logo abaixo procure por "listar" (retorno do método)
Na linha do "listar" vai dizer qual é o jsp
<action path="/usuario" type="br.com.localhost8080.struts.UsuarioAction" name="usuarioForm" scope="request" parameter="action">
<forward name="listar" path="/p_listar_usuarios.jsp" />
Qualquer coisa dá um Ctrl+H com algum texto da tela :D
Att,
Adriano Schmidt
quarta-feira, 11 de fevereiro de 2015
Parar JBoss em uma linha de comando
Fala galera...
Se você quiser parar o JBoss, você pode fazer um "ps aux | grep jboss", pegar o PID e depois dar um "kill -9 <pid>"
Mas é possível fazer isso em uma linha, isso é importante caso queira fazer isso no Jenkins ou em algum script
A linha é essa:
kill -9 `ps -wef |grep jboss | grep jboss-eap-6.2 | grep -v grep |cut -c10-14` ;
No meu caso é o JBoss EAP 6.2, então eu coloquei tudo isso ali no grep pra ele nunca pegar outro processo. Altere conforme sua necessidade.
Esse comando já pega o processo certo, pq quando você dá o "ps aux | grep jboss", ele lista dois processos, o primeiro é o próprio ps aux grep... esse comando já pega o processo certinho.
E o cut é pra pegar o PID mesmo... que estará do caracter 10 ao 14.
Abraço!
Adriano Schmidt
Se você quiser parar o JBoss, você pode fazer um "ps aux | grep jboss", pegar o PID e depois dar um "kill -9 <pid>"
Mas é possível fazer isso em uma linha, isso é importante caso queira fazer isso no Jenkins ou em algum script
A linha é essa:
kill -9 `ps -wef |grep jboss | grep jboss-eap-6.2 | grep -v grep |cut -c10-14` ;
No meu caso é o JBoss EAP 6.2, então eu coloquei tudo isso ali no grep pra ele nunca pegar outro processo. Altere conforme sua necessidade.
Esse comando já pega o processo certo, pq quando você dá o "ps aux | grep jboss", ele lista dois processos, o primeiro é o próprio ps aux grep... esse comando já pega o processo certinho.
E o cut é pra pegar o PID mesmo... que estará do caracter 10 ao 14.
Abraço!
Adriano Schmidt
sexta-feira, 6 de fevereiro de 2015
Java InputStream e Encoding
Pessoal... ao ler um arquivo no Java todos os caracteres especiais (letras com acento por exemplo) ficaram desconfigurados. Ficaram assim: �
Quando eu executava no Windows funcionava perfeitamente, mas no linux ficava desconfigurado.
Isso acontecia pois eu estava lendo o arquivo dessa forma:
Para resolver tive que usar um InputStreamReader setando o encoding(charset), pois não consegui setar o encoding direto no InputStream.
Uma explicação para isso é que InputStream lê blocos de bytes, já o InputStreamReader lê blocos de chars. Não sei se é isso mesmo.
O fonte ficou assim:
Vejam que eu usei Charset.forName("ISO-8859-1"), fiz isso pois meus arquivos foram criados no windows, mas o java foi executado no linux. Se no seu caso for o contrário, talvez você tenha que usar Charset.forName("UTF-8")
Fonte: http://stackoverflow.com/questions/19317606/java-substring-broken-encoding
Abraço!!
Adriano Schmidt
Quando eu executava no Windows funcionava perfeitamente, mas no linux ficava desconfigurado.
Isso acontecia pois eu estava lendo o arquivo dessa forma:
InputStream myInputStream = MySampleClass.class.getResourceAsStream("./MyI18nFile.properties"); Listlines = org.apache.commons.io.IOUtils.readLines(myInputStream);
Para resolver tive que usar um InputStreamReader setando o encoding(charset), pois não consegui setar o encoding direto no InputStream.
Uma explicação para isso é que InputStream lê blocos de bytes, já o InputStreamReader lê blocos de chars. Não sei se é isso mesmo.
O fonte ficou assim:
InputStream myInputStream = MySampleClass.class.getResourceAsStream("./MyI18nFile.properties"); InputStreamReader myInputStreamReader = new InputStreamReader(myInputStream, Charset.forName("ISO-8859-1")); Listlines = org.apache.commons.io.IOUtils.readLines(myInputStreamReader);
Vejam que eu usei Charset.forName("ISO-8859-1"), fiz isso pois meus arquivos foram criados no windows, mas o java foi executado no linux. Se no seu caso for o contrário, talvez você tenha que usar Charset.forName("UTF-8")
Fonte: http://stackoverflow.com/questions/19317606/java-substring-broken-encoding
Abraço!!
Adriano Schmidt
quinta-feira, 5 de fevereiro de 2015
BDD Cucumber Java DDD DSL
Hoje resolvi estudar a teoria de BDD, DDD, DSL, estudar cucumber, cucumber para Java... etc...
Comecei estudando um pouco de DSL, que é uma forma de você escrever em altíssimo nível negócio e código quase que ao mesmo tempo.
Ao invés de escrever o método que soma dois valores com a sintaxe de alguma linguagem de programação você vai escrever que será necessário somar dois valores.
Depois ao estudar Cucumber (Ferramenta para BDD) vi que ela usava DSL, na verdade usa Gherkin, que é uma linguagem de DSL.
Não tive tempo de finalizar esse artigo.. logo faço isso.. mas seguem alguns links que podem ser úteis:
DSL:
http://martinfowler.com/books/dsl.html
Cucumber:
http://cukes.info/
Gherkin:
https://github.com/cucumber/cucumber/wiki/Gherkin
The Cucumber Book (PDF)
https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAA&url=https%3A%2F%2Fwiki.kuali.org%2Fdownload%2Fattachments%2F329384409%2FThe%2520Cucumber%2520Book.pdf%3Fversion%3D1%26modificationDate%3D1407504510000%26api%3Dv2&ei=7nnRVIX9IcHAggTE_YD4BA&usg=AFQjCNEwixnbrWYSEM1teUwGcUIZDO8_0g&sig2=dWa9zlqday0XrVCqP-N2Kg&bvm=bv.85076809,d.eXY
Outros links:
http://fit.c2.com/wiki.cgi?IntroductionToFit
http://www.bugbang.com.br/entendendo-bdd-com-cucumber-parte-i/
http://martinfowler.com/bliki/UbiquitousLanguage.html
http://behaviourdriven.org/
https://github.com/cucumber/cucumber/wiki
https://groups.google.com/forum/#!forum/cukes
https://pragprog.com/book/srjcuc/the-cucumber-for-java-book
Comecei estudando um pouco de DSL, que é uma forma de você escrever em altíssimo nível negócio e código quase que ao mesmo tempo.
Ao invés de escrever o método que soma dois valores com a sintaxe de alguma linguagem de programação você vai escrever que será necessário somar dois valores.
Depois ao estudar Cucumber (Ferramenta para BDD) vi que ela usava DSL, na verdade usa Gherkin, que é uma linguagem de DSL.
Não tive tempo de finalizar esse artigo.. logo faço isso.. mas seguem alguns links que podem ser úteis:
DSL:
http://martinfowler.com/books/dsl.html
Cucumber:
http://cukes.info/
Gherkin:
https://github.com/cucumber/cucumber/wiki/Gherkin
The Cucumber Book (PDF)
https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAA&url=https%3A%2F%2Fwiki.kuali.org%2Fdownload%2Fattachments%2F329384409%2FThe%2520Cucumber%2520Book.pdf%3Fversion%3D1%26modificationDate%3D1407504510000%26api%3Dv2&ei=7nnRVIX9IcHAggTE_YD4BA&usg=AFQjCNEwixnbrWYSEM1teUwGcUIZDO8_0g&sig2=dWa9zlqday0XrVCqP-N2Kg&bvm=bv.85076809,d.eXY
Outros links:
http://fit.c2.com/wiki.cgi?IntroductionToFit
http://www.bugbang.com.br/entendendo-bdd-com-cucumber-parte-i/
http://martinfowler.com/bliki/UbiquitousLanguage.html
http://behaviourdriven.org/
https://github.com/cucumber/cucumber/wiki
https://groups.google.com/forum/#!forum/cukes
https://pragprog.com/book/srjcuc/the-cucumber-for-java-book
The change could not be merged due to a path conflict
Estou em um projeto que usa o Gerrit como revisor de código, é muito bom!!
E ao revisar e aprovar um commit deu o erro abaixo pois outro commit foi aprovado antes e deu conflito já que os dois commits mexeram na mesma linha de um arquivo.
Ou também pode acontecer o erro:
Para resolver você tem que fazer um rebase localmente e resolver os conflitos.
Passo 1) git fetch origin <nome_da_branch>
Passo 2) git fetch <url> && git checkout FETCH_HEAD (esse comando você pega no próprio gerrit)
Passo 3) git rebase origin/<nome_da_branch>
Passo 4) git status (ao rodar esse comando vai mostrar os arquivos em conflito, resolva os conflitos abrindo os arquivos e ajustando o que for necessário)
Passo 5) git add .
Passo 6) git rebase --continue
Passo 7) git push origin HEAD:refs/for/<nome_da_branch> (esse é o push normal quando você manda algo para o Gerrit)
Passo 8) git checkout <nome_da_branch> (apenas para voltar a sua branch e poder voltar a trabalhar)
Se o rebase for muito grande você pode fazer um cherry-pick
Para uma explicação mais detalhada recomendo a leitura desse artigo:
http://www.mediawiki.org/wiki/Gerrit/resolve_conflict
Porém, nesse artigo é usado o git-review para fazer o fetch/checkout (Passo 2) e o push (Passo 7). Ignore essa parte e faça conforme eu mostrei.
Para estudar sobre o rebase: http://git-scm.com/book/pt-br/v1/Ramifica%C3%A7%C3%A3o-Branching-no-Git-Rebasing
Para estudar sobre o Gerrit: https://code.google.com/p/gerrit/
Abraço!
Adriano Schmidt
E ao revisar e aprovar um commit deu o erro abaixo pois outro commit foi aprovado antes e deu conflito já que os dois commits mexeram na mesma linha de um arquivo.
Code Review - Error
The change could not be merged due to a path conflict.
Please rebase the change locally and upload the rebased commit for review.
Ou também pode acontecer o erro:
The change could not be rebased due to a path conflict during merge.
Para resolver você tem que fazer um rebase localmente e resolver os conflitos.
Passo 1) git fetch origin <nome_da_branch>
Passo 2) git fetch <url> && git checkout FETCH_HEAD (esse comando você pega no próprio gerrit)
Passo 3) git rebase origin/<nome_da_branch>
Passo 4) git status (ao rodar esse comando vai mostrar os arquivos em conflito, resolva os conflitos abrindo os arquivos e ajustando o que for necessário)
Passo 5) git add .
Passo 6) git rebase --continue
Passo 7) git push origin HEAD:refs/for/<nome_da_branch> (esse é o push normal quando você manda algo para o Gerrit)
Passo 8) git checkout <nome_da_branch> (apenas para voltar a sua branch e poder voltar a trabalhar)
Se o rebase for muito grande você pode fazer um cherry-pick
Para uma explicação mais detalhada recomendo a leitura desse artigo:
http://www.mediawiki.org/wiki/Gerrit/resolve_conflict
Porém, nesse artigo é usado o git-review para fazer o fetch/checkout (Passo 2) e o push (Passo 7). Ignore essa parte e faça conforme eu mostrei.
Para estudar sobre o rebase: http://git-scm.com/book/pt-br/v1/Ramifica%C3%A7%C3%A3o-Branching-no-Git-Rebasing
Para estudar sobre o Gerrit: https://code.google.com/p/gerrit/
Abraço!
Adriano Schmidt
Assinar:
Postagens (Atom)