Ir ao conteúdo
  • Cadastre-se

marcel.mc

Membro Pleno
  • Posts

    58
  • Cadastrado em

  • Última visita

posts postados por marcel.mc

  1. Olá pessoal, estou numa empreitada tentando aprender Laravel e desenvolvendo um sistema não muito trivial (pelo menos não para mim que não tenho experiência). Hoje me deparei com um problema que não consegui encontrar solução durante umas 3 horas de pesquisa, se puderem me dar um auxílio agradeço.

     

    Um pedaço da minha aplicação, consiste no cliente logar e a partir daí cadastrar algumas informações pertinentes diariamente. Ao logar, ele cai na tela para escolher em qual captação ele irá cadastrar os dados. Na próxima ele escolhe qual sistema de captação, e por fim, ele insere os dados.  Para isso tenho as seguintes rotas:

     Route::get('/prop/{id_prop}/', 'PropriedadeController@clientePropriedade');
     Route::get('/prop/{id_prop}/cap/{id_cap}/', 'CaptacaoController@clienteCaptacao')->name('cap');
     Route::get('/prop/{id_prop}/cap/{id_cap}/sis/{id_sis}/', 'SistemaController@clienteSistema')->name('sis');

    Meu problema é: quando clico no link para alguma captação, sempre sou direcionado para a página do Sistema de Captação pertencente a captação 1. Independente da captação que eu escolher, sempre sou direcionado para os sistemas da captação 1. Usando o método dd() do Laravel para debugar, percebi que o parâmetro (int id) de meu método clienteCaptacao de CaptacaoController tem valor 1.

     

     public function clienteCaptacao(int $id)
        {
            dd($id);//valor 1
            $cap = Captacao::find($id);
    
            //dd($cap);
            if (!isset($cap)) {
                return view('erros.cliente.nCadastrado',
                    array('nome' => 'captações'));
            } else {
                return view('cliente.escolheSistema', compact('cap'));
            }
        }

    Os links estão corretos:

        <div class="col-lg-3 col-md-6">
      	  	<a href=http://h20.laravel/cliente/prop/1/cap/1 
        		class="btn  btn-secondary btn-block" style="background-color:red">Captacao 1</a>
        </div>
        <div class="col-lg-3 col-md-6">
        	<a href=http://h20.laravel/cliente/prop/1/cap/2 
        		class="btn  btn-secondary btn-block" style="background-color:red">Captacao 2</a>
        </div>
        <div class="col-lg-3 col-md-6">
        	<a href=http://h20.laravel/cliente/prop/1/cap/3 
        		class="btn  btn-secondary btn-block" style="background-color:red">Captacao 3</a>
        </div>

    Esses são os códigos da minha blade onde crio os links acima:

     

    
    <div class="row">
        @foreach ($prop->captacoes as $cap)
        	<div class="col-lg-3 col-md-6">
        		<a href={{
                   URL::route("cap",
        			['id_prop'=>$prop->id, 'id_cap'=>$cap->id])}} 
        				class="btn  btn-secondary btn-block" style="background-color:red">{{$cap->nome}}</a>
        	</div>
        @endforeach
    </div>

    Imagino que esteja cometendo um erro bobo, mas não tenho a menor ideia de como resolver. Se alguém puder me ajudar, fico grato. Muito obrigado.

  2. Olá pessoal, desculpem a demora em responder. Deixei o projeto em hiato pois não havia conseguido resolver o problema do gargalo. Gostei da proposta do @psykotico, e acabei utilizando como podem ver abaixo, porém somente isso não  resolve o problema.

     

    Embora a ideia de como resolver não tenha sido tirada do posto do @HwapX , ele menciona a mesma forma. Fico grato do mesmo jeito. 

    Abaixo vou postar os dois métodos e dar uma pequena explicada em como funcionam para eventuais consultas de alguém com problema semelhante:

     

    public void percorreDiretoriosCalculaHashRec(File path) {
            fileMap = new HashMap<>();
    
            for (File f : path.listFiles()) {
                if (f.isDirectory() && f.canRead()) {                
                    percorreDiretoriosCalculaHashRec(f);
                } else {
                    String hash = calculaHash(f);
                    if (fileMap.containsKey(hash)) {
                        System.out.println("O arquivo: " + f.getPath()
                                + " é igual a " + fileMap.get(hash).getPath());
                    } else {
                        fileMap.put(hash, f);
                    }
                }
            }
    }

    Nesse método uso exatamente a ideia proposta pelo @psykotico , percorro a árvore de diretórios recursivamente, calculo o hash de cada arquivo e insiro num map. Se aquele hash já estiver no map, imprimo os arquivos correspondentes.

     

    public String calculaHash(File f) {
            byte[] fArray = null;
            String hash = null;
    
            try {
                if (f.length() > 1048576) {
                    fArray = new byte[1048576];
                    RandomAccessFile raf = new RandomAccessFile(f, "r");
                    raf.read(fArray, 0, 524288);
                    raf.seek(f.length() - 524288);
                    raf.read(fArray, 524288, 524288);
                    raf.close();
                } else {
                    fArray = Files.readAllBytes(f.toPath());
                }
    
                hash = DigestUtils.md5Hex(fArray);
            } catch (IOException ex) {
                Logger.getLogger(Comparador.class.getName()).log(Level.SEVERE, null, ex);
            }
            return hash;
    }

    Nesse método, uso uma das ideias propostas pelo @HwapX. Se o arquivo tem tamanho menor ou igual 1 MB, calcula-se o hash diretamente. Se maior, uso um array de bytes que pega os primeiros 512KB e concatena com os últimos 512KB. Desse array, calculo o hash.

     

    Para uma base com mais de 91K arquivos consegui que o programa fosse executado em cerca de 20 minutos. Vou marcar o tópico como encerrado, mas sintam-se a vontade para postar novas ideias ou dúvidas. Muito obrigado aos dois que responderam, suas respostas foram muito úteis.

    • Curtir 2
  3. Olá pessoal, criei um sisteminha para comparar arquivos com finalidade de economizar algum espaço apagando os duplicados. A ideia é bem simples: dado um caminho para um diretório, percorro todos os subdiretórios e calculo o hash para cada arquivo encontrado. Depois saio comparando hash por hash, verificando se são iguais e mostrando o resultado.

     

    Funciona, porém as interações de I/O estão gargalando de forma que fica inviável o processo. Fiz o teste com 3 mil arquivos e está gastando cerca de 4 a 5 minutos, acontece que a pasta que mais me interessa verificar tem mais de 91 mil arquivos. Já fiz testes usando essa pasta que demoraram mais 1 hora sem serem concluídos e de longe não chegavam a metade, outros travaram por estourar a heap. Acho que threads com I/O não vão melhorar o desempenho.

     

    Eis uma das versões do código (estou usando algumas bibliotecas Apache commons só para evitar a fadiga):

     

     private Map<String, String> fileMap;
     private List<File> fileList;
     private File filePath;
       
     public void geraFileMap(){
            fileMap = new HashMap<>();
            fileList = new ArrayList<>(FileUtils.listFiles(filePath, 
                    TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE));
         
            int count=0;
            for(File f: fileList){
                fileMap.put(f.getAbsolutePath(), calculaHash(f));
                System.out.println(count);
                count++;
            }
        }
       
       public String calculaHash(File f) {
            byte[] fArray = null;
            String hash = null;
            try {
                fArray = Files.readAllBytes(f.toPath());
                hash = DigestUtils.md5Hex(fArray);
            } catch (IOException ex) {
                Logger.getLogger(Comparador.class.getName()).log(Level.SEVERE, null, ex);
            }
            return hash;
        }
       
        public void comparar(){
            
            geraFileMap();
            int count = 0, size = fileMap.size();
            List<String> stringList = new ArrayList<>(fileMap.keySet());
            
            System.out.println(size);
            for (int i = 0; i < size; i++) {
                for (int j = i + 1; j < size; j++) {
                    if(stringList.get(i).equals(stringList.get(j))){
                        System.out.println(stringList.get(i) +" = "+ stringList.get(j));
                    }
                    count++;
                }
            }
            System.out.println(count);
        }

    Se alguém puder me sugerir alguma forma de melhorar o gargalo, agradeço.

     

    Muito obrigado.

  4. Olá @DiF, muito obrigado pela resposta vou testar e ver se consigo algum progresso. 

     

    Então @Will871, na verdade não tenho nenhuma afinidade com PHP. Só pensei em usar pois meu orientador pode querer acrescentar algo nessa página que vá necessitar de banco e assim já teria meio caminho andando. 

     

    Muito obrigado pelas respostas, dou um parecer assim que tiver algum resultado.

    • Curtir 1
  5. Olá pessoal, eu desenvolvo em Java mas conheço praticamente nada de desenvolvimento Web. Desculpe uma dúvida tão banal mas não consegui resolver o problema.

     

    Preciso criar um "questionário" onde cada resposta correta faz mostrar a próxima pergunta. Explicando melhor: quando usuário abre a página, aparece uma pergunta um campo de texto e um botão no fim. Ao responder corretamente, logo abaixo do campo de texto aparece outra pergunta e um novo campo de texto e assim sucessivamente.

     

    Já criei uma classe com os atributos pergunta e resposta e um array desse objeto contendo as perguntas e resposta que irei usar. Usarei a função shuffle para embaralhar o array e evitar que as questões apareçam em sequencia para os usuários. 

     

    Se alguém tiver algum exemplo de algo parecido e puder me indicar, fico grato.

     

    Muito obrigado.

  6. Olá pessoal, me esclareçam uma dúvida se possível. Caso eu tenha um trecho de HTML que irá se repetir na página (no meu caso um formulário de endereço que aparecerá duas vezes na mesma página), o que eu faço para ter o trecho aparecendo todas as vezes que preciso no lugar correto sem a necessidade de duplica-lo?

     <form role="form" >
                        <div class="row">
                            <fieldset> <legend>Dados pessoais</legend>
    
                                <div class="form-group col-sm-4">
                                    <label>Nome:</label> <input type="text" id="nomeID" class="form-control"/>
                                </div>
                                <div class="form-group col-sm-4">
                                    <label>Telefone: </label><input type="text" id="telID" class="form-control tel"/>
                                </div>
                                <div class="form-group col-sm-8">
                                    <label> E-mail:</label><input type="email"id="emailID" class="form-control"/>
                                </div>
                            </fieldset>
                        </div>
    
                        <div class="row">
                            <fieldset> <legend>Endereço</legend>
                                <div class="endDiv"> 
                              		<!codigo do endereço aqui>
                              	</div>
                            </fieldset>
                        </div>
    
                        <div class="form-group col-md-6">
                            <fieldset> <legend>Dados da Queixa</legend>
                                <label>Tipo de Queixa</label>
                                <select class="form-control" id="select" onchange="carregaHTML('#queixa', 'view/form/' + this.value);">
                                    <option> </option>
                                    <option value="queixa_alimentar.php">Queixa Alimentar</option>
                                    <option value="queixa_animal.php">Queixa Animal</option>
                                    <option value="queixa_diversa.php">Queixa Diversa</option>
                                </select>
    
                                <div id="queixa">
    					<!aqui carrego o código de uma das três queixas que ira conter o trecho do endereço também> 
                                </div>
    
                            </fieldset>
                        </div>
    
                        <input type="submit" name="submitBTN" value="Salvar" >
                    </form>

     

  7. Olá, preciso analisar quais sites um grupo de usuários acessa em uma rede (será um experimento). Para isso estou usando o Squid como proxy e gerando o log para ser analisado. Usei o Sarg e tive pouco êxito então, me deparei com o Mysar que por gravar os dados em um banco de dados seria muito mais interessante para mim.

     

    Eis a situação: Fiz a instalação do Mysar numa máquina com Linux Mint 17 (não tenho certeza se realmente é essa versão), fiz várias configurações diferentes mas não consegui que a página web fosse atualizada com os dados do log. Mesmo adicionando regras ao cron, não consegui que atualizasse.

     

     

    Imaginando que pudesse ter algum problema com o Mint, Instalei Ubuntu 16.04 em outra máquina, segui os passos feitos na outra e para minha surpresa ao entrar na página de configuração do Mysar, o navegador mostrava o código fonte. Achei que pudesse ser a versão do PHP, já que o Ubuntu 16.04 usa por padrão a versão 7 então fiz o downgrade para 5.6, mas o resultado foi o mesmo.

     

    Alguém saberia me ajudar em um desses problemas? Caso conheçam algum outro analisador de log do Squid que tenha suporte a salvamento em banco de dados por favor me informe.

     

    Muito obrigado.

  8. 16 horas atrás, dwatashi disse:

    Squid seria a melhor opção, criando um proxy transparente você conseguiria capturar a maioria do tráfego.

     

     

    Muito obrigado pela resposta. Estava testando Squid numa VM mas infelizmente meu note acabou morrendo, vou instalar VM em outra máquina e ver o que consigo.

    Caso tenha conhecimento, saberia me dizer como faço para gerar um log com essas informações? Já andei procurando (pelo visto não nos lugares certos) mas não achei muita coisa, basicamente criação de regras de acesso (que não tem nada a ver com o que preciso).

  9. Olá pessoal, no meu TCC preciso fazer uma pesquisa onde devo monitorar quais sites as pessoas vão acessar dado o resultado de uma busca no Google. A forma mais simples que imaginei seria instalando um proxy e gerar um log contendo os sites, a maquina e horário em que foram acessados (o experimento será feito em ambiente fechado).

     

    O problema é que não sou muito conhecedor da área, tentei brincar com Squid mas não achei o que queria (talvez seja falta de procurar melhor). Alguém pode me informar algum proxy simples, que gere um log com essas informações e de preferência gratuito?

     

    Se tiverem outra ideia para resolver o problema, por favor informe.

     

    Muito obrigado.

  10. Achei que o @Mention deu uma boa resposta, mas vou fazer algumas consideraçõs:

     

    No exercício diz:

     

     

    Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; ....

     

    Portanto sua classe Casa é composta de um atributo cor (String) e de atributos portas(Porta) podendo ter mais características se você colocar.

    Assim sua classe Casa teria essa estrutura:

    public class Casa {    private String cor;    private Porta porta1 = new Porta();//porta da sala?    private Porta porta2 = new Porta();//porta do banheiro?    private Porta porta3 = new Porta();//porta do quarto?    public String getCor() {        return cor;    }    public void setCor(String cor) {        this.cor = cor;    }    public Porta getPorta1() {        return porta1;    }    public void setPorta1(Porta porta1) {        this.porta1 = porta1;    }    public Porta getPorta2() {        return porta2;    }    public void setPorta2(Porta porta2) {        this.porta2 = porta2;    }    public Porta getPorta3() {        return porta3;    }    public void setPorta3(Porta porta3) {        this.porta3 = porta3;    }

    Enquanto isso sua classe Main poderia ter a seguinte estrutura:

     public class Main {        public static void main(String[] args) {            Casa casa = new Casa();                        casa.setCor("branco");            //metodos para mostrar os resultados        }    }
  11. Olá pessoal, estou com um problema simples mas até agora não consegui muita informação. Tenho um projeto que desenvolvi para uma disciplina da faculdade e agora vou acrescentar alguns modulos e uma GUI. Criei cerca de 5 telas com o scene builder e consegui  fazer transição entre elas sem problemas. Minha dúvida é, se eu instancio um objeto na classe de controle da primeira tela, como eu teria acesso a esse mesmo objeto na classe de controle da terceira tela?

     

    Se tiverem achado confuso me avizem que tento explicar melhor. Obrigado.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!