Ir ao conteúdo

felipecchaves

Membro Pleno
  • Posts

    28
  • Cadastrado em

  • Última visita

Tudo que felipecchaves postou

  1. @arthurbavi não é o que eu pensei. Não manjo nada de React Native, mas fiz uma pesquisa, testei aqui e funcionou. O "App.js" é o entry point da aplicação, então o "createStackNavigator" e o "createAppContainer" precisam ficar nele. Vai ficar assim: // App.js import { createAppContainer } from 'react-navigation'; import { createStackNavigator } from 'react-navigation-stack'; import Login from './Login'; import Home from './Home'; const AppNavigator = createStackNavigator({ Login: { screen: Login, navigationOptions: { header: null } }, Home: { screen: Home, navigationOptions: { headerTitle: 'Home' } } }); export default createAppContainer(AppNavigator); // Login.js import React, { Component } from 'react'; import { View, Text, TextInput, TouchableOpacity, StyleSheet } from 'react-native'; export default class Login extends Component { state = { nome: '' } render() { return ( <View style={styles.container}> <TextInput style={styles.input} onChangeText={text => this.state.nome = text} placeholder="Digite seu email" /> <TouchableOpacity style={styles.botao} onPress={() => { this.props.navigation.navigate('Home', { 'nome': this.state.nome }) }} > <Text style={styles.botaoText}>Entrar</Text> </TouchableOpacity> </View> ) } } // Home.js import React, { Component } from 'react'; import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; export default class Home extends Component { render() { const { navigation } = this.props; return ( <View style={styles.container}> <Text style={styles.texto}> Nome: {JSON.stringify(navigation.getParam('nome', 'NO-ID'))} </Text> <TouchableOpacity style={styles.botao} onPress={() => { this.props.navigation.navigate('Login') }} > <Text style={styles.botaoText}>Voltar</Text> </TouchableOpacity> </View> ); } }
  2. Mostra todo esse código. Esse "this.props" significa que você recebe uma propriedade "navigation" através das propriedades desse componente que tá renderizando o botão. No caso desse erro que tá aparecendo é porque não tá recebendo essa propriedade.
  3. Acontece que o seu "this.props.navigation.navigate('Home')" é indefinido. Como você tá passando essa propriedade pro componente?
  4. O problema é que qualquer um vai poder alterar os arquivos do seu FTP. Não tem como criar um usuário e senha "somente leitura"? Ou criar uma página que lista todos os arquivos que estão dentro do seu FTP.
  5. @Niê já tentou um overflow: hidden; no CSS do elemento que você quer esconder a barra de rolagem?
  6. @Swalls se você conseguiu inicializar então tá no caminho certo. Eu dei uma olhada na documentação e realmente é bem complexo. Antes você não tinha nada, agora já tem um código que inicializa o SDK. Saiu do 0% e chegou em 3%, agora é continuar e quando chegar em uns 30% já vai ter alguma coisa funcional.
  7. @Brunowwf encontrei um bot escrito em C# e o projeto tá bem ativo. A última atualização foi feita há dois dias. Nesses links você consegue se inteirar sobre o funcionamento do Bot: Repositório RSBot Facebook da comunidade RSBot Discord da comunidade RSBot
  8. @Brunowwf sem uma API do jogo é impossível. A única opção é usar um algorítimo para simular a interação do usuário com o PC, e a AHK parece ser a melhor opção. Talvez com alguma biblioteca em Python que simula essa interação, mas seria algo muito mais avançado. Qual é o jogo? Me fala que eu faço uma pesquisa rápida e vejo se encontro alguma coisa.
  9. Não conheço essa linguagem, mas dei uma olhada na documentação e encontrei uma função para fazer a busca de uma imagem na tela, onde retorna a posição da imagem. Você pode usar essa função e depois simular um click do mouse na posição retornada caso encontre a imagem. Documentação AHK - ImageSearch
  10. O que tá acontecendo é que essa linha tá fora do while, então você vai pegar o número do candidato apenas uma vez. Quando entrar no while o valor da sua variável "candidato" vai ser sempre o mesmo, por isso todos os votos vão para o mesmo candidato. Se você colocar essa linha dentro do while, antes do if, ele vai te perguntar o número do candidato em cada repetição do while.
  11. HIKVISION SDK Quando você baixar o SDK vai ter uma pasta "doc" com a documentação explicando como usar.
  12. Se você for usar apenas na sua rede interna, basta instalar um servidor http no seu computador e configurar no roteador pro seu PC ficar com IP fixo. Os servidores http mais populares são Apache e Nginx. Depois de instalar o servidor no seu PC você precisa configurar as rotas (endpoints) como mostra na documentação do Control iD. Por exemplo, se você configurou o IP fixo do seu PC para 192.168.100.100, então pra monitorar o estado da porta você precisa da rota (endpoint) "http://192.168.100.100/api/notifications/door". Sempre que o estado da sua porta for alterado vai ser enviado um JSON pra essa rota com as informações no novo estado e identificação do equipamento que enviou a requisição. Se você quiser monitorar o estado dos equipamentos fora da sua rede interna, vai precisar de um servidor web. Existem infinitas opções, eu posso sugerir a Vercel que é grátis e já vem com toda a segurança de um back-end profissional. O resto é exatamente igual, basta configurar as rotas pra receber as requisições sempre que o estado for alterado.
  13. Os dois erros acontecem porque você tá enviando uma requisição de uma origem genérica que é "https://script.google.com". A requisição precisa ser enviada através de um servidor próprio usando o protocolo https. Nesse caso você pode usar a Vercel (vercel.com) que é grátis. Não tem como rodar só o script no servidor da Vercel, então você vai precisar de um front-end completo pra rodar seu script. Se precisar de ajuda pra fazer o front do seu sistema me manda uma mensagem que a gente combina.
  14. Não entendi o que você quis dizer com "anti restful". Documentação Control iD - Monitor Nesse link explica como monitorar o estado dos equipamentos. Documentação Control iD - Estado das portas Aqui explica como monitorar o estado das portas. Em resumo, você precisa configurar um servidor que vai receber uma requisição do equipamento sempre que houver uma alteração do estado.
  15. API REST é uma API que pode ser acessada por um endereço na web, pode ser por um domínio (http://enderecodaapi.com/api) ou usando um IP (http://192.168.100.52/api). No caso da Control iD o acesso é feito usando o IP do equipamento. Esse é um exemplo de como pode fazer login no equipamento usando JavaScript: let session = ''; const api = 'http://192.168.0.123/login.fcgi'; fetch(api, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ login: 'admin', password: 'admin' }) }).then((response) => { if (response.status === 200) { return response.json(); } return null; }).then((data) => { if (data) { session = data.session; } }); Exemplo de como enviar requisição para abrir a porta: const api = 'http://192.168.0.123/execute_actions.fcgi?session='; // "session" é fornecido quando realiza o login com sucesso fetch(`${api}${session}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ actions: [{ action: 'door', parameters: 'door=1' }] }) }); Documentação Control iD A documentação deles é muito bem explicada e com exemplos em diversas linguagens. Peguei essas informações lá. Dá um olhada na documentação e qualquer dúvida chama aqui que a gente te ajuda.
  16. Usando JavaScript seria algo assim: const api = 'https://mercado.varejofacil.com/api/v1/produto/custos'; // Requisição para pegar uma lista de itens const request1 = '?start=0&count=100'; // Começa no 0 e vai até o 99 fetch(`${api}${request1}`, { method: 'GET' }) .then((response) => { if (response.status === 200) { return response.json(); } }) .then((data) => { console.log(data.items); }); // Requisição para pegar um custo através do ID const request2 = '?id=123'; // Custo com ID 123 fetch(`${api}${request2}`, { method: 'GET' }) .then((response) => { if (response.status === 200) { return response.json(); } }) .then((data) => { console.log(data); }); Pra realizar essas requisições você precisa autenticar primeiro, que seria algo assim: const api = 'https://mercado.varejofacil.com/api/auth'; fetch(api, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ "username": "usuario", "password": "senha" }) });
  17. Parece que o botão tá dentro do elemento que altera quando inicia o jogo. O elemento com a frase "Pressione Enter para jogar o Pong" altera pra "Jogo iniciado". Quando faz essa alteração o botão some. Se postar o código que tá usando fica mais fácil de responder sua dúvida.
  18. Não é minha área, mas acredito que as respostas são A) e C). Na primeira pergunta acredito que as duas são falsas porque existe um pré-processamento dos dados antes de rodar qualquer algoritmo de machine learning, justamente pra remover ruídos, dados faltantes, etc. Na segunda pergunta, se a padronização dos dados ocorre com uma média 0 e variância 1, então o valor precisa ser entre 0 e 1. A única resposta que tem um valor nessa faixa é a letra C).
  19. @TheNeuromancer Respira fundo, irmão. Isso é que você tá sentindo é pura ansiedade. As coisas na vida acontecem de maneira progressiva, um pouco de cada vez. Se você tá se dedicando, fazendo projetos, melhorando seu portfólio, seu diploma não tem nenhuma importância, muito menos o tempo que você demorou pra conseguir ele. Essa é a grande sacada, principalmente no front-end. Você disse que tem 8 projetos simples no seu github, começa desenvolver projetos mais complexos. Isso faz com que você demonstre cada vez mais suas habilidades. Linkedin também é importante, pesquisa no Google como melhorar seu Linkedin que você encontra muito material ensinando. Para um minuto pra analisar os processos seletivos que você participou e tenta encontrar alguns pontos que pode melhorar, por exemplo, sua desenvoltura na hora de uma entrevista conta muito. Se você for uma pessoa mais tímida começa trabalhar esse seu lado pra conseguir ter um melhor desempenho nas próximas oportunidades. Não sei se te consola, mas vou contar um pouco da minha história. Comecei trabalhar com manutenção de computador aos 15 anos e sempre gostei de programar. Aos 18 anos minha família me convenceu a entrar no curso de Agronomia (kkk), onde fiquei por 10 longos anos e sai sem um diploma. Depois de uma década perdida decidi entrar no curso de Sistema de Informação, mas eu tava mais ou menos que nem você, meio perdido e cansado. Fiz um semestre de SI e larguei tudo, fui morar na praia vendendo minha arte (literalmente). Fiquei no litoral da Bahia por 2 anos durante a pandemia. No final do ano passado voltei a estudar programação por conta própria, e desenvolvimento web faz alguns meses. Hoje tenho 33 anos, não tenho diploma, mas tenho me dedicado muito. Nesse último ano já fiz alguns trabalhos voluntários, como forma de aprender e melhorar minhas habilidades. Fiz um sistema básico pra ajudar um amigo que tem um restaurante, um pequeno site de entrega pra outro colega. E assim as coisas vão fluindo. Não tenha pressa, muda seu foco pra adquirir conhecimento e por em prática esse conhecimento. Aí é só uma questão de tempo pra você alcançar seu objetivo.
  20. Agora acho entendi o que você quer fazer. Nesse caso você precisa alterar o valor da variável "nomes" dinamicamente. Ela precisa ter um valor baseado na na lista que tá dentro da tag <ul>. <html lang="en"> <head> <meta charset="UTF-8"> <title>TvRoBrasil</title> </head> <body> <input type="text" id="nome" value="insira o nome" onfocus="this.value='';"> <button onclick="adicionar()">Adicionar</button> <div class="exibir"> <ul id="lista"> <!-- Os nomes precisam tá aqui porque a variável "nomes" vai pegar esses valores --> <li>Jonas@email</li> <li>Edna@email</li> <li>Felipe@email</li> <li>Pedro@email</li> <li>Tomas@email</li> <li>Claudio@email</li> <li>Brenda@email</li> </ul> </div> <textarea name="" id="copy-me"></textarea> <button id="copy-btn">Copiar HTML</button> <br> <br> <script> let nomes = []; // A variável começa com um array vazio. const lis = document.querySelectorAll('li'); // Cria uma lista de todos os elementos com tag <li>. // Em cada elemento da lista "lis" vai adicionar o conteúdo da tag na variável "nomes". lis.forEach((li) => nomes.push(li.innerHTML)); let updateList = [...nomes]; const copyValue = document.getElementById("copy-me"); const copyButton = document.getElementById("copy-btn"); copyButton.addEventListener("click", () => { copyValue.select(); document.execCommand("copy"); }); const onChangeCopyHtml = () => { const source = document.documentElement.outerHTML; copyValue.value = source; }; const renderList = () => { lista.innerHTML = ""; for (var i = 0; i < updateList.length; i++) { var lis = document.createElement("li"); lis.innerHTML = updateList[i]; lista.appendChild(lis); } onChangeCopyHtml(); }; const onAddName = (name) => { updateList.push(name); const newList = updateList.slice(1, updateList.length); return newList; }; function adicionar() { var coleta = document.getElementById("nome").value; var nomeDig = document.createElement("li"); updateList = onAddName(coleta); renderList(); } renderList(); </script> </body> </html>
  21. Experimenta esse site: Teste TvRoBrasil É o seu código rodando fora de todos os iframes. Funcionou perfeitamente no meu computador e tá rodando belezinha nesse servidor.
  22. Seu problema é que você usou algum criador de site pra criar o template, e esse código que você postou no início tá rodando dentro desse template. É como se tivesse uma página dentro de outra página. No caso desse site (https://sites.google.com/view/teste-lista/pedagocia/exon1) é uma página dentro de outra página que está dentro de mais uma página que tá dentro de outra página. São 3 iframes dentro da página principal, um dentro do outro. Isso gera uma série de problemas pro dinamismo da página. Se você executar só esse código, ele vai realizar exatamente o que você deseja. Que é exatamente o mesmo código que você postou no início do tópico, eu só removi as duas linhas com os scripts que citei no comentário anterior. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UFT-8" /> <title> </title> </head> <body> <input type="text" id="nome" value="insira o nome" onfocus="this.value='';" /> <button onClick="adicionar()">Adicionar</button> <div class="exibir"> <ul id="lista"></ul> </div> <textarea name="" id="copy-me"></textarea> <button id="copy-btn">Copiar HTML</button> <br /> <br /> <script> const nomes = ["Jonas@email", "Edna@email", "Felipe@email", "Pedro@email", "Tomas@email", "Claudio@email", "Brenda@email"]; let updateList = [...nomes]; const copyValue = document.getElementById("copy-me"); const copyButton = document.getElementById("copy-btn"); copyButton.addEventListener("click", () => { copyValue.select(); document.execCommand("copy"); }); const onChangeCopyHtml = () => { const source = document.documentElement.outerHTML; copyValue.value = source; }; const renderList = () => { lista.innerHTML = ""; for (var i = 0; i < updateList.length; i++) { var lis = document.createElement("li"); lis.innerHTML = updateList[i]; lista.appendChild(lis); } onChangeCopyHtml(); }; const onAddName = (name) => { updateList.push(name); const newList = updateList.slice(1, updateList.length); return newList; }; function adicionar() { var coleta = document.getElementById("nome").value; var nomeDig = document.createElement("li"); updateList = onAddName(coleta); renderList(); } renderList(); </script> </body> </html> Se quiser testar no seu computador, salva esse código em um arquivo "index.html" e abre esse arquivo com o navegador. Você vai ver que esse código tá rodando perfeito, quando adiciona um novo item na lista também altera o valor da caixa de texto pra copiar.
  23. Os três são a mesma estrutura de dados. São arrays, que significa que são listas de alguma coisa. Fila e pilha são conceitos diferentes de como utilizar uma lista (array). O conceito de fila é "o primeiro que entra é o primeiro que sai". Já o conceito de pilha é "o primeiro que entra é o último que sai". var fila = []; fila.push(1); // fila == [1] fila.push(2); // fila == [1, 2] fila.push(3); // fila == [1, 2, 3] // No conceito de fila usa o metódo shift() que retorna o primeiro elemento da lista (array) var primeiro = fila.shift(); // fila == [2, 3] console.log(primeiro); // 1 // Ou seja, 1 foi o primero elemento adicionado e foi o primeiro a sair da lista var pilha = []; pilha.push(1); // pilha == [1] pilha.push(2); // pilha == [1, 2] pilha.push(3); // pilha == [1, 2, 3] // No conceito de pilha usa o metódo pop() que retorna o último elemento da lista (array) var ultimo = pilha.pop(); // pilha == [1, 2] console.log(ultimo); // 3 // Ou seja, 3 foi o último elemento adicionado e foi o primeiro a sair da lista
  24. Testei seu código na minha maquina e funcionou perfeitamente. Reparei que o servidor que você tá usando coloca seu código dentro de vários iframes, e acredito que seu problema é esse. Se você remover esses scripts e rodar apenas seu código acredito que vai funcionar da maneira que deseja. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="/scripts/snippet-javascript-console.min.js?v=1"></script>
  25. Saudações, colegas! Estou estudando programação web sozinho faz 3 meses, e criei um projeto para cadastro e autenticação de usuários usando Firebase e React. Minha dúvida é a respeito da legibilidade do meu código. Gostaria de saber se ele atente aos critérios de boas praticas de programação, tendo em vista que não tenho nenhuma experiencia na área. Código do meu projeto Projeto hospedado na Vercel Caso queiram testar o projeto sem fornecer o e-mail pessoal podem usar o temp-mail para criar um e-mail temporário e testar as funcionalidades de validação de e-mail e recuperação de senha. Qualquer critica, sugestão, dica ou feedback é muito bem vindo. Obrigado a todos.

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...