Month: March 2014

Um jeito não muito programático de achar arquivos duplicados no Linux

Eu estava com o seguinte problema:

No diretório X eu tinha 942 livros em PDF divididos em subdiretórios e no diretório Y eu tinha 2655 livros em PDF também distribuídos em vários diretórios.

Objetivo:

Encontrar os livros que são únicos no diretório X para que depois eu possa move-los para o diretório Y.

Fiz várias pesquisas na internet e não encontrei um jeito rápido e fácil de encontrar arquivos duplicados. Neste caso o que importa é o conteúdo do arquivo e não o nome do arquivo, pois um mesmo livro pode estar com nome diferente.

Resolvi implementar minha própria solução:

Executar o comando md5sum em cada arquivo para gerar a listagem com “hash” de todos os livros. Se o “hash” bater é 99.99999999% provável que o arquivo seja o mesmo.

Então vamos ao comando para gerar a lista com todos os MD5 dos livros do diretório X:

$ cd X
$ find . -type f -print0 | xargs -0 md5sum > /tmp/livrosX.txt

Repita este mesmo processo dentro do diretório Y:

$ cd Y
$ find . -type f -print0 | xargs -0 md5sum > /tmp/livrosY.txt

Abra o arquivo livrosX.txt no editor de texto (gedit.txt por exemplo) selecione todo o conteúdo (Ctrl+A) e copie (Ctrl+C). Então abra o programa Gnumeric e posicione o cursor na célula A2 e cole (Ctrl+V). Neste momento aparecerá a tela “Configuração de Importação de texto”, então marque a opção “Largura Fixa” e clique em Avançar”. Nesta tela aparecerá várias linhas com o MD5 e o caminho/nome do livro, então dê duplo clique no espaço que existe entre o MD5 e o nome do livro, serão criadas as Colunas 1 e 2. Então clique em “Fim”.

Repita este mesmo processo para o livrosY.txt, porém no momento de colocar o texto escolha a célula D2 ou invés da C2, pois deixaremos a coluna C para indicar se o livro é único ou não.

Agora clique na célula C2 e cole esta formula:

=if(iserror(match(A2;$D$2:$D$4000;0));"Unico";"Duplicado")

Posicione o cursor na borda inferior direita da célula C2, ele vai virar um pequena cruz, neste momento dê duplo clique sempre mover o mouse, espere alguns segundos e o Gnumeric automáticamente estende a formula para todas as demais linhas.

Não esqueça de colocar nomes aos campos (A1 = MD5, B1 = Nome do Livro, C1 = Unico ou Não?, D1 = MD5 e E1 = Nome do Livro).

Agora use o auto filtro (Dados -> Filtro -> Adicionar Auto Filtro) para listar apenas os nomes dos arquivos que são únicos.

Após gastar tempo escrevendo este post, resolvi refinar minha busca e pesquisar novamente por uma solução.

Este cara fez um script para fazer praticamente a mesma coisa que fiz, usando um script shell:
http://www.techrepublic.com/blog/linux-and-open-source/how-to-remove-duplicate-files-without-wasting-time/2667/

Este outro explica que existe uma ferramenta no Linux chamada fdupes que faz a mesma coisa:
http://forums.scotsnewsletter.com/index.php?showtopic=63146

Existe até mesmo uma ferramenta gráfica chamada FSlint que faz inclusive bem mais que achar arquivos duplicados, ela serve para corrigir nomes de arquivos entre outras coisas:
http://www.pixelbeat.org/fslint/

Outras dicas e opções podem ser encontradas neste site:
http://askubuntu.com/questions/3865/how-to-find-and-delete-duplicate-files

Moral da história: as vezes você precisa reinventar a roda para aprender como pesquisar no google pelas palavras certas. Era só eu ter pesquisado por “linux how to find and remove duplicate files based on its content” (risada do pica-pau triste he he heeeee).

Fonte da dica de formula para encontrar células repetidas numa planilha eletrônica: http://www.ablebits.com/office-addins-blog/2013/09/05/compare-two-columns-remove-duplicates/

Creating a ZVS high voltage circuit

This site has the ZVS schematics and explanation:

http://wiki.4hv.org/index.php/Flyback_transformer

There are many tips in the forum, but it is not accessible anymore, fortunately it is archived:

https://web.archive.org/web/20080218130627/http://old.4hv.org/index.php?board=18;action=display;threadid=5667;start=msg58867

To discover the Flyback pinout find this tutorial:
http://lifters.online.fr/lifters/labhvps/tht.htm

I need to create a high voltage circuit to implement an electrostatic painting. It will be used to coat a virgin PCB with photosensible ink.

Update: I will start with a more simple and less powerful driver using the CI 555 : http://www.eleccircuit.com/efficient-flyback-driver-circuit-by-ic-555-irf510/. These ZVS are ways over the lethal current (10mA) your heart will support.

Java e os erros inexperados

Por que será que os sistemas desenvolvidos atualmente sempre dão erros inexperados? Provavelmente porque o sistema não foi bem modelado antes de começar a implementação.

Este é um erro que ocorreu na página de Vale:

Ocorreu um erro inesperado. Utilize as informações abaixo para entrar em contato com o suporte.
 
Sistema: 	SGP Web - Sistema de Gerenciamento de Passagem
Ambiente: 	PRD - prd296.cvrd.br
Transação: 	
    com.accenture.cvrd.framework.model.dao.exception.PersistenceException: Falha ao executar a query:
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1321)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.findByColumns(MappingQuery.java:292)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.findByColumns(MappingQuery.java:242)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.FerroviaDAOImpl$1.doInConnection(FerroviaDAOImpl.java:35)
    at com.accenture.cvrd.framework.model.dao.ConnectionTemplate.execute(ConnectionTemplate.java:55)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.FerroviaDAOImpl.getFerroviaPeloId(FerroviaDAOImpl.java:32)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.services.impl.CoreServiceImpl.getFerrovia(CoreServiceImpl.java:1080)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.common.presentation.internet.action.LoginInternetHelper.persisteFerroviaNaSessao(LoginInternetHelper.java:37)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.PrincipalActionInternet.preparaPesquisaPassagens(PrincipalActionInternet.java:95)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.PrincipalActionInternet$1.executeLogic(PrincipalActionInternet.java:56)
    at com.accenture.cvrd.framework.presentation.action.BaseCommand.execute(BaseCommand.java:161)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.PrincipalActionInternet.execute(PrincipalActionInternet.java:51)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:734)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:391)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:908)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:458)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)
    Caused by: java.sql.SQLException: Protocol violation
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:175)
    at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:898)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:656)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:503)
    at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:1029)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:535)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1126)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043)
    at oracle_jdbc_driver_T4CPreparedStatement_Proxy.executeQuery()
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1316)
    ... 26 more

Para que não conhece a implementação do sistema, estas mensagens de erro são mais enigmáticas que o código em hexadecimal dos BSoD do Windows.

Mas bacane né? Recebo de presente um monte de código de erro, mas as não consigo comprar as passagens.

Update: Após clicar no botão voltar e preencher os campos de Origem e Destino recebo novas mensagens de “esperança”:

Ocorreu um erro inesperado. Utilize as informações abaixo para entrar em contato com o suporte.
 
Sistema: 	SGP Web - Sistema de Gerenciamento de Passagem
Ambiente: 	PRD - prd296.cvrd.br
Transação: 	
    com.accenture.cvrd.framework.model.dao.exception.PersistenceException: Erro ao executar o mapRow(): java.sql.SQLException: OALL8 is in an inconsistent state.
    at com.accenture.cvrd.framework.model.dao.MappingQuery.createDataList(MappingQuery.java:1247)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.resultSetToList(MappingQuery.java:1195)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1317)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.SgpMappingQuery.executeQueryComCache(SgpMappingQuery.java:159)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.SgpMappingQuery.findByFilter(SgpMappingQuery.java:124)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.SgpMappingQuery.findByFilter(SgpMappingQuery.java:233)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.TremDAOImpl$12.doInConnection(TremDAOImpl.java:349)
    at com.accenture.cvrd.framework.model.dao.ConnectionTemplate.execute(ConnectionTemplate.java:55)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.TremDAOImpl.getTrensPorComplementoRotaData(TremDAOImpl.java:337)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.vendapassagem.ServicoVendaPassagem.obtemPassagensMesmaRota(ServicoVendaPassagem.java:714)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.vendapassagem.ServicoVendaPassagem.pesquisaPassagensDisponiveis(ServicoVendaPassagem.java:277)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.services.impl.CoreServiceImpl.pesquisaPassagens(CoreServiceImpl.java:1555)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.common.action.command.PesquisarPassagensCommand.executeLogic(PesquisarPassagensCommand.java:88)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.VendaPassagemInternetAction$2.executeLogic(VendaPassagemInternetAction.java:106)
    at com.accenture.cvrd.framework.presentation.action.BaseCommand.execute(BaseCommand.java:161)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.VendaPassagemInternetAction.pesquisaPassagens(VendaPassagemInternetAction.java:113)
    at sun.reflect.GeneratedMethodAccessor913.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:734)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:391)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:908)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:458)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)
    Caused by: com.accenture.cvrd.framework.model.dao.exception.PersistenceException: Falha ao executar a query:
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1321)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:476)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeForObject(MappingQuery.java:667)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.SgpMappingQuery.findByKey(SgpMappingQuery.java:306)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.SgpMappingQuery.findByKey(SgpMappingQuery.java:254)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.ferrovia.model.dao.impl.OSUnilogDAOImpl$1.doInConnection(OSUnilogDAOImpl.java:23)
    at com.accenture.cvrd.framework.model.dao.ConnectionTemplate.execute(ConnectionTemplate.java:55)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.ferrovia.model.dao.impl.OSUnilogDAOImpl.getPeloId(OSUnilogDAOImpl.java:21)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.ferrovia.model.unilog.ServicoOSUnilogImpl.getOrdemServico(ServicoOSUnilogImpl.java:13)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.TremQuery.mapRow(TremQuery.java:97)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.createDataList(MappingQuery.java:1245)
    ... 35 more
    Caused by: java.sql.SQLException: OALL8 is in an inconsistent state.
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)
    at oracle.jdbc.driver.T4C8Oall.init(T4C8Oall.java:325)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:170)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:503)
    at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:1029)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:535)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1126)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043)
    at oracle_jdbc_driver_T4CPreparedStatement_Proxy.executeQuery()
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1316)
    ... 45 more

E a pergunta que não quer calar: você contrataria a empresa que desenvolveu este sistema para desenvolver um software de missão crítica para a sua empresa/indústria/usina nuclear? 😛

Update2: Ao logar no sistema eu recebo:

Ocorreu um erro inesperado. Utilize as informações abaixo para entrar em contato com o suporte.
 
Sistema: 	SGP Web - Sistema de Gerenciamento de Passagem
Ambiente: 	PRD - prd296.cvrd.br
Transação: 	

    com.accenture.cvrd.framework.model.dao.exception.PersistenceException: Erro ao executar o mapRow(): java.sql.SQLException: Protocol violation
    at com.accenture.cvrd.framework.model.dao.MappingQuery.createDataList(MappingQuery.java:1247)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.resultSetToList(MappingQuery.java:1195)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1317)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.SgpMappingQuery.executeQuery(SgpMappingQuery.java:42)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.VendaPassagemDAOImpl$18.doInConnection(VendaPassagemDAOImpl.java:494)
    at com.accenture.cvrd.framework.model.dao.ConnectionTemplate.execute(ConnectionTemplate.java:55)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.VendaPassagemDAOImpl.getVendasInternetSatisfazendo(VendaPassagemDAOImpl.java:491)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.vendapassagem.ServicoVendaPassagem.getVendasInternetPeloFiltro(ServicoVendaPassagem.java:1679)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.services.impl.CoreServiceImpl.getVendasInternetPeloFiltro(CoreServiceImpl.java:5715)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.MinhasPassagensAction$1.executeLogic(MinhasPassagensAction.java:83)
    at com.accenture.cvrd.framework.presentation.action.BaseCommand.execute(BaseCommand.java:161)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.presentation.vendapassagem.internet.action.MinhasPassagensAction.listar(MinhasPassagensAction.java:98)
    at sun.reflect.GeneratedMethodAccessor1471.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:734)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:391)
    at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:280)
    at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:68)
    at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:214)
    at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)
    at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:219)
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:734)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:391)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:908)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:458)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)
    Caused by: com.accenture.cvrd.framework.model.dao.exception.PersistenceException: Falha ao executar a query:
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1321)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:476)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.CarroTremDAOImpl$6.doInConnection(CarroTremDAOImpl.java:104)
    at com.accenture.cvrd.framework.model.dao.ConnectionTemplate.execute(ConnectionTemplate.java:55)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.CarroTremDAOImpl.getPeloCarro(CarroTremDAOImpl.java:91)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.TremDAOImpl.associaLocalFerroviarioDesembarqueCarro(TremDAOImpl.java:60)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.TremDAOImpl$1.doInConnection(TremDAOImpl.java:48)
    at com.accenture.cvrd.framework.model.dao.ConnectionTemplate.execute(ConnectionTemplate.java:55)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.impl.TremDAOImpl.getPeloId(TremDAOImpl.java:40)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.BilhetePassagemQuery.obtemTremUtilizandoCache(BilhetePassagemQuery.java:269)
    at br.com.vale.cm.gerenciamentopassagem.sgpweb.core.model.dao.query.BilhetePassagemQuery.mapRow(BilhetePassagemQuery.java:180)
    at com.accenture.cvrd.framework.model.dao.MappingQuery.createDataList(MappingQuery.java:1245)
    ... 45 more
    Caused by: java.sql.SQLException: Protocol violation
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:175)
    at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:898)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:656)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:503)
    at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:1029)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:535)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1126)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043)
    at oracle_jdbc_driver_T4CPreparedStatement_Proxy.executeQuery()
    at com.accenture.cvrd.framework.model.dao.MappingQuery.executeQuery(MappingQuery.java:1316)
    ... 56 more

Como dá pra ver nada neste site funciona!

Be aware of issues with these TB6560 boards from eBay

Are you planning to buy one these TB6560 boards from eBay to use with your home made CNC? Then you need to know about many issues with these boards. Issues like the motor loosing steps or stall are very common. Some people prefer to use the Gecko G540 board, but this boars is about 10 times more expansive than these TB6560 boards.

But all is not lost! You can do some modifications to fix these issues, please read this loooong thread at cnczone about how to fix it:

http://www.cnczone.com/forums/general-cnc-machine-related-electronics/110986-fixed-chinese-tb6560-controller-updated.html

This guy modified his board following the instructions from CNCZone:
http://www.homediystuff.com/fixing-a-chinese-made-cnc-stepper-motor-driver-board-tb6560-chips/

More info about this 4-axis TB6560 blue board:
http://reprap.org/wiki/4_Axis_TB6560_CNC_Stepper_Motor_Driver_Board_Controller

Listagem de algumas empresas de fabricação de PCB no Brasil

Esta é uma lista com as principais empresas que fabricam PCB no Brasil:

Alfapress:
http://www.alfapress.com.br

BR PCI:
https://www.brpci.com.br

Circuibras:
https://www.circuibras.com.br

Curta circuito:
https://curtacircuitos.com.br

Cirvale:
https://www.cirvale.com.br

Digicart:
https://www.digicart.com.br

Griffus:
http://www.griffuspcb.com.br/fabricacao-placas-circuito-impresso.html

GPO
http://www.gpocircuitos.com.br

LKpads:
https://www.lkpads.com.br

Lauquen:
http://www.lauquen.com.br

Micropress:
http://www.micropress.com.br

Montecnica:
https://www.montecnica.ind.br

PCB Brasil:
http://www.pcbbrasil.com

PCI Paraná:
http://www.pciparana.com.br

Stick:
http://www.stick.ind.br

TEC-CI:
https://tec-ci.com.br

Tecnel:
http://www.tecneleletronica.com.br

Caso você conheça outras empresas, poste seu comentário para que possamos atualizar esta lista.