Ir ao conteúdo
  • Cadastre-se

Rui Guilherme

Membro Pleno
  • Posts

    194
  • Cadastrado em

  • Última visita

Tudo que Rui Guilherme postou

  1. @João pedro chaves Outra solução é aplicar esse código direto no style da página, segue a modificação: function CriaPDF() { const carta = document.getElementById('carta').innerHTML; let style = "<style>"; style = style + "table {width: 100%;font: 20px Calibri;}"; // modificação abaixo style = style + "@page { size: auto; margin: 0mm; }" // modificação acima style = style + "table, th, td {border: solid 1px #DDD; border-collapse: collapse;"; style = style + "padding: 2px 3px;text-align: center;}"; style = style + "</style>"; const win = window.open('', '', 'height=700,width=700'); win.document.write('<html lang="pt-br">'); win.document.write(style); win.document.write('</head>'); win.document.write('<body>'); win.document.write(carta); win.document.write('</body></html>'); win.document.close(); win.print(); } Caso você queira testar, segue o link: https://codepen.io/ruiguilherme/pen/yLMaVvp Se mesmo assim não funcionar... Talvez você esteja em uma versão antiga do Firefox: talvez adicionar o moznomarginboxes mozdisallowselectionprint na tag html também pode ajudar: <!-- resto do código --> <html moznomarginboxes mozdisallowselectionprint> <!-- resto do código --> </html> mozNoMarginBoxes pode não fazer efeito nas versões novas do Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1260480 Lembra-se: Mantenha seu Firefox atualizado.
  2. Então é um sistema web que possui 4 níveis de acesso, ele também vai precisar de uma gateway de pagamento, geração de notas fiscais e ter que lidar com dados sensíveis... Em minha humilde opinião: Se a aplicação tem mais que dois níveis de acessos já deixa de ser "pequena" e se tem um ecommecer dentro dela e trabalha com dados sensíveis então deixa de ser uma aplicação média. Mas tenho que deixar algo claro: Quantidade de programadores depende do seu prazo e de sua capacidade técnica dos envolvidos, talvez um programador leve 2 semanas simplesmente para aprender como funciona o Phase(situação hipotetica) .
  3. @João pedro chaves O Window.print() por padrão coloca esses valores, para remover eles basta colocar isso na head do html ou no seu css: <style type="text/css" media="print"> @page { size: auto; margin: 0mm; } </style>
  4. Animações de texto podem ser feitas usando CSS base, você não precisa quebrar muito a cabeça com isso se estiver programando algo com prazo, use logo a https://animate.style/ e seja feliz. Se você quiser aprender a fazer seus próprios efeitos pode começar por aqui: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Using_CSS_animations ou simplesmente pesquisar o how to make + nome do efeito + css/javascript. Agora que você tem as animações é só usar o DOMTokenList.classList para adicionar e remover classes do elemento que você quer animar junto do Document: scroll event caso tenha problemas de fazer na mão, esse link pode te ajudar: https://webdesign.tutsplus.com/tutorials/animate-on-scroll-with-javascript--cms-36671 Ou você pode simplesmente usar o https://michalsnik.github.io/aos/, https://scrollrevealjs.org/ e/ou https://scrollmagic.io/ e ser feliz.
  5. @LucasExcelOpa amigo, tudo bem? Posso sim ajudar com mais detalhes. Porém não tenho experiência com o ADsense do Facebook. Quando você cria uma aplicação dentro do Facebook ele gera uma id dessa aplicação, o link que eu mandei no primeiro comentário explica melhor isso, porém recomendo iniciar por aq: https://pt-br.facebook.com/business/help/621956575422138?id=649869995454285 https://blog.hotmart.com/pt-br/anunciar-no-facebook/ https://postcron.com/pt/blog/como-criar-anuncios-no-facebook-ads/ Você também consegue muitos vídeos no Youtube de como fazer isso; . . . META é uma tag HTML que vai dentro da tag <head> view-source:https://sublime-relogio.myshopify.com/ Como você pode ver, você já tem METAS para o twitter Você provavelmente está usando Wordpress ou alguma outra CMS, você precisa pesquisar para saber exatamente como adicionar a<meta>. Porém eu acredito que não é necessario uma app_id para anuncios, apenas se você for usar diretamente a API o que eu acredito que não seja o caso. Acrédito que o máximo de "id" que você vá usar é os Pixels: https://www.facebook.com/business/help/952192354843755 porém você n precisa pensar nisso agora, primeiro procure mais vídeos no youtube de como criar anuncios dentro da plataforma da Facebook.
  6. É exatamente o que a ferramente de debugger quer dizer, você precisa adicionar a id do facebook nas suas metas. <meta property="fb:app_id" content="ХХХХХХХХХХХХХХХ" /> dai você precisa substituir os "X's" em content pela sua app_id: https://developers.facebook.com/docs/development/create-an-app/
  7. Primeiramente vamos corrgir um erro de sintaxe nos if's: if(teste01 === 0){ alert("Ambos são pares") } else if(teste02 === 1){ alert("Ambos são impares") } else alert("Demais Casos") } Depois de fazer essa correção, vamos ver como a aplicação se comporta. Primeiro caso: Nesse caso a aplicação funcinou perfeitamente, maravilha, certo? Vamos testar o proximo caso! Segundo caso: Nesse caso a aplicação também funcinou perfeitamente! Vamos testar o proximo caso! Terceiro caso: Nesse caso a aplicação não funcinou como o esperado. (Mostrei dois casos.) Recomendo ler isso: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND a1 = true && true // t && t retorna true a2 = true && false // t && f retorna false a3 = false && true // f && t retorna false a4 = false && (3 == 4) // f && f retorna false a5 = 'Gato' && 'Cachorro' // t && t retorna "Cachorro" a6 = false && 'Gato' // f && t retorna false a7 = true && 'Gato' // f && t retorna "Gato" a8 = 'Gato' && false // t && f retorna false a9 = '' && false // f && f retorna "" a10 = false && '' // f && f retorna false Agora que você entendeu que o operador && só "verifica" a segunda condição quando a primeira é verdadeira vamos continuar... ====== PRESTE BASTANTE ATENÇÃO NO a2 E a3 E GRAVE ELES ====== O problema está no teste01, vejamos: Se num1%2 for igual 0 (par) então teste01 vai receber 0, quebrando o código porque ele n checa a segunda situação. (SITUAÇÃO MOSTRADA NO a3) Se num1%2 for igual 1(impar) e num2%2 for igual a 0(par) então teste01 vai receber 0, quebrando o código. (SITUAÇÃO MOSTRADA NO a2) Por isso tanto num1 = 1 e num2 = 2 ou num1 = 2 e num2 = 1 vai atribuir 0 em teste01 quebrando o código. Como resolver? Para isso você precisa entender também o operador ||(OR): Recomendo ler isso: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR o1 = true || true // t || t retorna true o2 = false || true // f || t retorna true o3 = true || false // t || f retorna true o4 = false || (3 == 4) // f || f retorna false o5 = 'Cat' || 'Dog' // t || t retorna "Cat" o6 = false || 'Cat' // f || t retorna "Cat" o7 = 'Cat' || false // t || f retorna "Cat" o8 = '' || false // f || f retorna false o9 = false || '' // f || f retorna "" o10 = false || varObject // f || object retorna varObject Agora que você entendeu que o operador || só "verifica" a segunda condição quando a primeira é falsa vamos para solução: ====== PRESTE BASTANTE ATENÇÃO NO o2 E o3 E GRAVE ELES ====== Se num1%2 for igual 0 (par) ou num2%2 for igual a 1(impar) então teste01 vai receber 1. (SITUAÇÃO MOSTRADA NO o2) Se num1%2 for igual 1(impar) então teste01 vai receber 1. (SITUAÇÃO MOSTRADA NO o3) Solução: function testejoao(){ const num1 = prompt("Digite um número"); const num2 = prompt("Digite outro número"); const teste01 = num1%2 || num2%2 const teste02 = num1%2 && num2%2 if(teste01 === 0){ alert("Ambos são pares") } else if(teste02 === 1){ alert("Ambos são impares") } else { alert("Demais Casos") } } Executando: Dica: Evite usar var, use const ou let.
  8. Estranho... Mas provavelmente seu Android está usando MAC Dinamico, toda rede que ele conecta deve estar alterando para um MAC diferente e aleatorio. Seu Android é o stock do dispositivo? Se for o caso nas configurações de wifi ou do dispositivo deve ter algo sbre isso.. Caso seu Android for root e custom rom eu tenho certeza que o canal no Telegram da sua ROM consegue te ajudar.
  9. Eu adoro esses desafios, mas não vou te dar a solução completa... Essa página apesar dela retornar uma tabela, a tabela vem como HTML e não como JSON, porém essencialmente HTML não é muito diferente de XML, então vem a pergunta como eu faria para converter um "HTML" em JSON? Para obter o HTML você pode usar o fetch e obter os dados do response usando o Body.text()... Caso você tem dificuldades de entender o fetch com Body.text() esse link pode te ajudar a entender: https://stackoverflow.com/a/52523232/15405395 EVITA VER MEU CÓDIGO! AQUI ESTÁ A RESPOSTA, MAS ISSO VAI FAZER PERDER A GRAÇA DO DESAFIO! Certo, agora que você tem em mãos uma String HTML, então a primeira coisa que a gente precisa fazer é converter essa "HTML String" em "HTML", para isso você vai usar o DOMParser(), para ser mais especifico, você vai usar DOMParser.parseFromString(): EVITA VER MEU CÓDIGO! AQUI ESTÁ A RESPOSTA, MAS ISSO VAI FAZER PERDER A GRAÇA DO DESAFIO! OS LINKS QUE EU DEIXEI EXPLICAM COMO TRABLAHAR COM O DOMPARSER(). Agora sim! Nesse ponto você está fazendo uma request na tabela e convertendo ele para HTML... então agora vamos converter de HTML para JSON! ESSA É A PARTE MAIS "LEGAL/difícil" DO DESAFIO! porque? porque o JavaScript não tem uma função nativa que converta HTML para JSON, então o que fazer? Vamos primeiro analisar a tabela, ela tem as seguintes informações: Codigo, Nome, E-mail e Categoria Antes de ver minha estrutura/código, tente montar seu JSON usando apenas as informações da tabela. Agora que temos nossa estrutura, precisamos fazer um "loop" para pegar os valores de dentro da tabela, e salvar eles dentro do nosso JSON... Temos duas principais formas de fazer um loop e pegar os valores: "map" e a "forEach", nesse nosso caso vamos usar o forEach. Mas não podemos simplesmente rodar todo o HTML dentro do forEach, isso seria problematico. Então como vamos fazer? Vamos usar o Document.querySelectorAll() e Selecionar todos os tr, feito isso vamos ter uma Array de 15 valores e vamos conseguir rodar essa array dentro do forEach. TENTE FAZER ANTES DE VER MEU CÓDIGO: Certo, e agora? Agora vamos pegar o valor que o forEach entrega pra gente(eu salvei eles dentro de props) e vamos usar novamente Document.querySelectorAll() PORÉM vamos selecionar todos os td. TENTE FAZER ANTES DE VER MEU CÓDIGO: Agora está quase tudo pronto! O segundo querySelectorALl já está entregando os valores dentro de uma array com 4 indexes, agora vamos colocar os valores dentro do nosso JSON: ESSE É O CÓDIGO FINAL: Vale lembrar que esse código não é dinamica, caso a tabela sofra a adição ou a remoção de sua estrutura, o JSON gerado vai ter alguns problemas em sua estrutura. Aqui está o código funcionando:
  10. Poderia dar mais detalhes? Você quer um grupo que vai receber mensagens de um bot para informar e marcar um motorista e veículo, desta forma logo abaixo da mensagem vai existir um botão para o motorista confirmar o chamado? Dai quando o motorista aceitar o chamado a mensagem vai desaparecer do grupo. Telegram API é extremamente bem documentado, você pode facilmente fazer um bot. Você pode começar por aqui: https://core.telegram.org/bots Como adicionar um botão na mensagem: https://core.telegram.org/api/bots/buttons Só uma pergunta... Essas mensagens enviadas no grupo vão estar disponível para todos os membros, você sabe disso certo? Não seria um problema os outros ficarem sabendo qual chamado o motorista X ou Y está fazendo? Eu particularmente acredito que trabalhar com um bot no privado seja mais eficiente, você pode usar o https://core.telegram.org/bots/api/#replykeyboardmarkup para fazer um teclado personalizado, dai o bot simplesmente vai mandar uma mensagem para o motorista quando tiver um chamado, e o teclado personalizado vai ter o botão para confirmar o chamado. Caso você tenha dificuldades em iniciar um projeto, você pode usar algum bot já existente para começar o seu, existem mais de 7000 escritos em JavaScript no Github https://github.com/search?l=JavaScript&q=telegram+bot&type=Repositories e mais de 20000 escritos em Python: https://github.com/search?l=Python&q=telegram+bot&type=Repositories
  11. Está pelo Wi-Fi? Como dizia meu grande amigo e professor de redes: "Wi-Fi é uma piada, as pessoas pensam que isso funciona, mas a realidade é outra." Caso sua rede seja 2.4Ghz você precisa configurar seu Wi-Fi para usar os canais 1, 6 ou 11. (Os outros canais não funcionam, são placebos para encher linguiça, ignora eles.) Caso não resolva então seu Wi-Fi pode estar sofrendo outros tipos interferências, por exemplo, pelo Bluetooth. Para confirmar casos de interferência o melhor a se fazer é conectar seu notebook no cabo Ethernet e realizar os testes. Btw: fast.com não reflete a realidade da internet caso esteja automático. Para fazer um teste mais robusto eu recomendo o SpeedTeste da Ookla dai você vai clicar em "Change Server" / "Trocar Servidor" e vai selecionar servidores em outros países, recomendo testar em Miami, Log Angeles, São Paulo e London. Vale destacar que o ideal é fazer vários testes nas mesmas regiões.
  12. Existem serviços de hospedagens gratuitos excepcionais, melhor inclusive que muitos "pagos" por aí. Se for uma página HTML estática você pode subir seu site no próprio Github, ele ainda fornece um domínio, segue um exemplo: https://kenwheeler.github.io/slick/ Docs: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages Porém, o GitHub limita apenas a páginas HTML estáticas e seu código não pode ser privado no caso de contas grátis. Se você quiser host's mais completos e profissionais você também pode usar o Heroku que provavelmente vai satisfazer qualquer projeto pequeno, em contas sem verificação ele te da 400 horas mensais (uns 16 dias) e 1000 horas mensais (uns 40 dias) se fazer a verificação por cartão de crédito. Um alternativo ao Heroku é o Vercel que também não deixa nada a desejar, bastante completo. Outro alternativo é o HeliosHost, porém não uso ele há muito tempo, mas me satisfez bastante quando usei. Existem também os "trial" como, exemplos: Google: https://cloud.google.com/free/ Red Hat: https://www.openshift.com/try Amazon AWS: https://aws.amazon.com/free/ (Melhor escolha) DigitalOcean: https://try.digitalocean.com/freetrialoffer/ (Precisa inserir o cartão de crédito para ganhar os $60 por 60 dias) Vale lembrar que empresas como Google, Red Hat, Amazon, Heroku, DigitalOcean e Vercel são empresas de topo, são as melhores entre as melhores para hosting de serviços webs;
  13. eu n vivo sem o useState() do Hook... Caso você queira algo mais avançado para controlar o state da aplicação então você recomendo conhecer o ReduxJS. ReduxJS é um pouco chato de começo, mas depois fica fácil, e controlar as coisas por ele ajuda de mais, o Reddit por exemplo usa o ReduxJS. Sim, se você for montar uma API então iria precisar obter os dados da URL ou do BODY, aí no Select que você vai dar no banco de dados você colocar o valor que veio no URL/BODY e para isso você iria precisar entender o LIMIT do SQL Porém, você n precisa quebrar a cabeça pensando nisso, essas coisas vêm naturalmente quando você está fazendo, foque em dominar o consumo de API's json.
  14. Acredito que você consiga obter a tela do cliente usando cavas. https://html2canvas.hertzen.com/ Outras opções são mais divertidas caso queira ir a fundo é usar o WebRTC: o getUserMedia que funcionam tanto no Chrome como no Firefox ou o getDisplayMedia que funciona apenas no Chrome.
  15. Acredito que a uma boa prática a ser feita, não é tratar a quantidade no ReactJS, mas sim na API. No axios você vai passar os seguintes parametros get: https://jsonplaceholder.typicode.com/posts?_start=0&_limit=10 Isso vai te retornar apenas os itens dos index 0 ao 10, dai na paginação você pode colocar um evento que muda os valores do _start=0, exemplo: Clicou na página 1? Carrega 10 index iniciando do 0(_start=0) Clicou na página 2? Carrega 10 index iniciando do 20(_start=10) Exemplo pratico - OBSERVE AS ID'S DOS ITENS: (fiz usando o fetch porque consigo executar direto pelo console do navegador, PORÉM RECOMENDO O AXIOS.) Código: (Página 1) fetch('https://jsonplaceholder.typicode.com/posts?_start=0&_limit=10') .then((response) => response.json()) .then((json) => console.log(json)); Saida: (Página 1) [ { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }, { "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" }, { "userId": 1, "id": 3, "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut", "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut" }, { "userId": 1, "id": 4, "title": "eum et est occaecati", "body": "ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\nquis sunt voluptatem rerum illo velit" }, { "userId": 1, "id": 5, "title": "nesciunt quas odio", "body": "repudiandae veniam quaerat sunt sed\nalias aut fugiat sit autem sed est\nvoluptatem omnis possimus esse voluptatibus quis\nest aut tenetur dolor neque" }, { "userId": 1, "id": 6, "title": "dolorem eum magni eos aperiam quia", "body": "ut aspernatur corporis harum nihil quis provident sequi\nmollitia nobis aliquid molestiae\nperspiciatis et ea nemo ab reprehenderit accusantium quas\nvoluptate dolores velit et doloremque molestiae" }, { "userId": 1, "id": 7, "title": "magnam facilis autem", "body": "dolore placeat quibusdam ea quo vitae\nmagni quis enim qui quis quo nemo aut saepe\nquidem repellat excepturi ut quia\nsunt ut sequi eos ea sed quas" }, { "userId": 1, "id": 8, "title": "dolorem dolore est ipsam", "body": "dignissimos aperiam dolorem qui eum\nfacilis quibusdam animi sint suscipit qui sint possimus cum\nquaerat magni maiores excepturi\nipsam ut commodi dolor voluptatum modi aut vitae" }, { "userId": 1, "id": 9, "title": "nesciunt iure omnis dolorem tempora et accusantium", "body": "consectetur animi nesciunt iure dolore\nenim quia ad\nveniam autem ut quam aut nobis\net est aut quod aut provident voluptas autem voluptas" }, { "userId": 1, "id": 10, "title": "optio molestias id quia eum", "body": "quo et expedita modi cum officia vel magni\ndoloribus qui repudiandae\nvero nisi sit\nquos veniam quod sed accusamus veritatis error" } ] Código: (Página 2) fetch('https://jsonplaceholder.typicode.com/posts?_start=10&_limit=10') .then((response) => response.json()) .then((json) => console.log(json)); Saída: (Página 2) [ { "userId": 2, "id": 11, "title": "et ea vero quia laudantium autem", "body": "delectus reiciendis molestiae occaecati non minima eveniet qui voluptatibus\naccusamus in eum beatae sit\nvel qui neque voluptates ut commodi qui incidunt\nut animi commodi" }, { "userId": 2, "id": 12, "title": "in quibusdam tempore odit est dolorem", "body": "itaque id aut magnam\npraesentium quia et ea odit et ea voluptas et\nsapiente quia nihil amet occaecati quia id voluptatem\nincidunt ea est distinctio odio" }, { "userId": 2, "id": 13, "title": "dolorum ut in voluptas mollitia et saepe quo animi", "body": "aut dicta possimus sint mollitia voluptas commodi quo doloremque\niste corrupti reiciendis voluptatem eius rerum\nsit cumque quod eligendi laborum minima\nperferendis recusandae assumenda consectetur porro architecto ipsum ipsam" }, { "userId": 2, "id": 14, "title": "voluptatem eligendi optio", "body": "fuga et accusamus dolorum perferendis illo voluptas\nnon doloremque neque facere\nad qui dolorum molestiae beatae\nsed aut voluptas totam sit illum" }, { "userId": 2, "id": 15, "title": "eveniet quod temporibus", "body": "reprehenderit quos placeat\nvelit minima officia dolores impedit repudiandae molestiae nam\nvoluptas recusandae quis delectus\nofficiis harum fugiat vitae" }, { "userId": 2, "id": 16, "title": "sint suscipit perspiciatis velit dolorum rerum ipsa laboriosam odio", "body": "suscipit nam nisi quo aperiam aut\nasperiores eos fugit maiores voluptatibus quia\nvoluptatem quis ullam qui in alias quia est\nconsequatur magni mollitia accusamus ea nisi voluptate dicta" }, { "userId": 2, "id": 17, "title": "fugit voluptas sed molestias voluptatem provident", "body": "eos voluptas et aut odit natus earum\naspernatur fuga molestiae ullam\ndeserunt ratione qui eos\nqui nihil ratione nemo velit ut aut id quo" }, { "userId": 2, "id": 18, "title": "voluptate et itaque vero tempora molestiae", "body": "eveniet quo quis\nlaborum totam consequatur non dolor\nut et est repudiandae\nest voluptatem vel debitis et magnam" }, { "userId": 2, "id": 19, "title": "adipisci placeat illum aut reiciendis qui", "body": "illum quis cupiditate provident sit magnam\nea sed aut omnis\nveniam maiores ullam consequatur atque\nadipisci quo iste expedita sit quos voluptas" }, { "userId": 2, "id": 20, "title": "doloribus ad provident suscipit at", "body": "qui consequuntur ducimus possimus quisquam amet similique\nsuscipit porro ipsam amet\neos veritatis officiis exercitationem vel fugit aut necessitatibus totam\nomnis rerum consequatur expedita quidem cumque explicabo" } ] Com isso você consegue renderizar a página com os novos valores. Dica: Eu observei que você está usando Classes no React. Eu acho que a Facebook deveria abandonar classes e deixar o suporte apenas para versões antigas do React, eu recomendo fortemente que você migre seu código para Hooks, o código fica mais simplificado, especialmente na hora de dar manutenção. https://reactjs.org/docs/hooks-intro.html
  16. Se você está perdendo a porcentagem provavelmente é porque o valor da variável que define a porcentagem está sendo resetado durante a troca de abas. Talvez você consiga resolver isso usando Steppers porque vai conseguir colocar vários elementos de formulário dentro de uma única tag <form> e fazendo isso você evita ficar usando o submit para cada aba do formulário. Tem vários mini-frameworks que disponibilizam steps com ou sem Jquery. Se quiser resolver isso mais eficientemente seria legal você debuggar essa aplicação para saber quando formProgressBar é chamado, tenho quase certeza que ele é chamado quando ocorre o evento de troca de abas, assim resetando os valores. Esse vídeo mostra como usar o debugger no Chrome: https://youtu.be/H0XScE08hy8 Esse vídeo mostra como usar o debugger no Firefox: https://youtu.be/bwUNifZ4WrY (Legendado em português porque a Mozilla é deus em forma de empresa) Caso você queira debuggar pelo vscode, existem as extensões Firefox Debugger e Chrome Debugger que são bem documentadas e simples de serem usadas. Se quiser ver de forma mais detalhada, esse cara fez vários vídeos explicando como fazer Multi-Form's com barra de progresso: https://www.youtube.com/watch?v=4fzT7hdyL7k (Apesar que usar apenas um stepper pronto é mais produtivo.)
  17. @cerumaninho Definir preço por um serviço assim é loucura. Queria ouvir o que eles falam para cliente com pedidos de aplicações únicas ou mais Hardcores. Esse site tá basicamente falando "Seguinte, não importa sua regra de negócio, a gente faz por valor X fixo se tiver até 10 páginas." que chega até ser engraçado. Claro... Eles trabalham com um tipo específico de produto, qualquer coisa que fuja disso eles vão negar ou vão ajudar os preços. Respondendo sua pergunta... Página estática é caro? Depende muito das coisas nessa página, fazer páginas dinâmicas-estáticas para um ‘e-commerce’ usando NextJS vai sair bem mais caro para o cliente que fazer uma página com HTML puro e dependendo do tipo de suporte pode sim chegar em valores bem altos.
  18. Não, não precisa. A linha Z das placas mães Intel libera overclock para processadores da linha K;
  19. @Mizrain Phelipe Sá Eu apenas simulei um resultado do fetch, na sua rota do (/Dashboard/AjaxGetAllCrimeAutorModel) deve retornar um objeto ou array com os dados, certo? Você só precisa organizar o json e salvar na const resultado e seguir o resto do código Para puxar do banco de dados eu teria que fazer um Select no banco de dados, eu recomendo você pode usar o Sequelize e o NodeJS - pode optar pelo NanoExpressJS - ou se quiser algo mais profissional você pode usar o AdonisJS, e se quiser algo de alto desempenho pode usar o uWebSocketsJS.
  20. @Mizrain Phelipe Sá Você precisa pegar essa String e usar o Date, porém, uma das suas datas são inválidas ([24-03-2021 00:00:00.000]) e isso pode causar uma issue no seu código, eu recomendo dar uma olhadinha aqui: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date // Retorna a diferenças de dias entre duas datas :D function CalcularDias(a, b) { return Math.floor((b.getTime() - a.getTime()) / 86400000); } async function shortestTimeDays() { try { //const resposta = await fetch(`/Dashboard/AjaxGetAllCrimeAutorModel`); //vou supor um resultado: (usei como exemplo os dados da print do banco de dados, porém coloquei outro exemplo para dar menos de 7 dias) const resultado = [ { DataDoIndiciamento: '2021-03-17 00:00:00.000', DataDoRecebimentoDaDenuncia: '2021-03-24 00:00:00.000' }, { DataDoIndiciamento: '2021-03-01 00:00:00.000', DataDoRecebimentoDaDenuncia: '2021-03-28 00:00:00.000' }, { DataDoIndiciamento: '2021-03-01 00:00:00.000', DataDoRecebimentoDaDenuncia: '2021-03-03 00:00:00.000' } ] // Vou rodar os valores de dentro da array resultado e colocar em props. resultado.map((props) => { // vou extraiar as duas datas de dentro de props const { DataDoIndiciamento, DataDoRecebimentoDaDenuncia } = props //aqui eu faço a "conversão" de string para Date, const Indiciamento = new Date(DataDoIndiciamento) const Denuncia = new Date(DataDoRecebimentoDaDenuncia) //aqui eu pego a diferenças de dias..; const tempoPercorrido = CalcularDias(Indiciamento, Denuncia) if (tempoPercorrido >= 7) { // Aqui você pode exibir o toast, model, alert... console.log("Nice, se passou 7 dias, quantidade: " + tempoPercorrido) } else { // Aqui você pode exibir o toast, model, alert... console.log("Ainda não se passam 7 dias, quantidade: " + tempoPercorrido) } }) } catch (e) { console.error("Erro ao realizar fetch"); return console.error(e); } } Você pode testar e ver funcionando aqui: https://codepen.io/ruiguilherme/pen/RwKoOmK?editors=1011
  21. Linux é Linux. Em geral não importa muito a distro, o que importa é se você vai usar uma DE ou WM, se vai aguentar usar o SX ou vai depender do DE. Não recomendo distribuição como Slax(não é atualizado desde 2019, por exemplo) mas pode ser um alternativo para quem não quer usar o Arch ou Debian puros. Antes de continuar você também pode dar uma olhada no: antixlinux, busenlabs Agora que as crianças saíram do quarto: Eu particularmente recomendo o Arch Linux[https://archlinux32.org/download/] porque talvez assim você consiga um ambiente smooth e usar um LibreOffice da vida sem ter um ambiente gráfico comento toda a RAM. haha Então, basta o Arch? Não... eu recomendo usar o Sway como ambiente gráfico, Sway é um ambiente que usa o Wayland como compositor e é super configurável, e tem suporte total as documentações do i3wm . Como gerenciador acredito que qualquer um base-console seja o suficiente, basta escolher: https://wiki.archlinux.org/index.php/Display_manager#Console NÃO escolha nenhum gráfico (GDM, SDDM, LightDM ou qualquer outro), você também pode deixar ainda mais leve e não usar Display Manager, o Sway consegue iniciar direto pelo TTy, basta executar sway após fazer login que o Sway inicia. Caso esteja com preguiça de configurar seu Sway você pode copiar as configurações de alguém, existem aos gigas no Github: https://github.com/search?q=sway+dotfiles e se você quiser fazer suas próprias configurações existem canais no Youtube mostrando como. Como você tem muita pouca RAM acrédito que vai fazer mt uso da SWAP, bota entre 512MB~2GB, porém SWAP não é extensor de RAM e pode causar Thrashing. Para evitar isso você pode usar https://github.com/hakavlad/nohang A instalação do nohang pode ser feita manualmente, ou você pode usar o AUR. Caso queira usar o AUR recomendo o yay.
  22. Rode o teste do FuryMark e fique acompanhando os resultados, e se possível grave o teste de começo ao fim... Caso dê problema novamente entre em contato com o vendedor da GTX 1050Ti e diz que vai devolver o produto por ele está defeituoso. Se a compra tiver sido pelo Mercado Livre vai ser fácil lidar com esse problema, se foi pela OLX então eu desejo boa sorte. Edit: Você encontra RX 470/570 pelo preço da 1050Ti e vai ter quase 3 vezes mais desempenho.
  23. // você vai receber duas strings, certo? const calcularResultado = (carta1, carta2) => { const combinacoes = [ ['imgCard_0', 'imgCard_6'], ['imgCard_1', 'imgCard_7'], ['imgCard_2', 'imgCard_8'], ['imgCard_3', 'imgCard_9'], ['imgCard_4', 'imgCard_10'], ['imgCard_5', 'imgCard_11'], ] let resultado = false combinacoes.map((prop) => { if ((carta1 === prop[0] || carta1 === prop[1]) && (carta2 === prop[0] || carta2 === prop[1])) { resultado = true } }) return resultado } calcularResultado('imgCard_0', 'imgCard_6') // true -> primeira combinação calcularResultado('imgCard_6', 'imgCard_0') // true -> primeira combinação invertida calcularResultado('imgCard_9', 'imgCard_11') // false calcularResultado('imgCard_11', 'imgCard_9') // false Não sei se essa é a melhor solução para esse problema, mas funcionou aqui Outra coisa que você pode fazer é atribuir id's iguais... Exemplo: - A B 1 x x 2 x x 1A + 2B = true e 1B + 2A = true , o resto é falso... Você vai precisar fazer ID's iguais nas cartas 1A/2B e 1B/2A... E adicionar um evento para quando alguém clicar na carta salva a ID, no segundo click é só você checar se as ID's das cartas selecionadas são iguais, se não forem iguais você reseta tudo.
  24. Bom... Você precisa aprender sobre responsividade de sites e entender como funciona o Container, você pode fazer usando CSS puro ou fazer o uso de alguma framework como o Boostrap que tem seus componentes de Grid e Container. Vou deixar duas vídeos aulas para poder te ajudar: https://youtu.be/H91DhKPjhPk https://youtu.be/VUAReozpoDo
  25. Assumindo que seja ReactJS você só vai precisar aprender algumas coisas. useState: import React, { useState } from 'react'; function Example() { // Declare a new state variable, which we'll call "count" const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } https://reactjs.org/docs/hooks-intro.html Axios: https://www.npmjs.com/package/axios (Para consumir a API) FlexBox/Grid: https://css-tricks.com/snippets/css/a-guide-to-flexbox/ https://material-ui.com/components/grid/#grid eu gosto bastante do material ui, então acredito que seja legal para você também. Fiz esse demo para te mostrar como usar uma grid de 4 (3+3+3+3): https://codesandbox.io/s/material-demo-forked-0nls6 basta abrir o demo.js e colocar as imagens que você vai pegar pelo Axios no lugar de Paper. (Caso o projeto não carregue você pode abrir ele aqui: https://0nls6.csb.app/ )

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!