-
Contagem de Conteúdo
68 -
Ingressou
-
Última visita
-
Dias Ganhos
6
Tipo de Conteúdo
Perfis
Fóruns
Blogs
Calendário
Downloads
Postagens postado por Kleverson Cruz
-
-
Oi pessoal, tudo bem?
Recentemente, tive a oportunidade de participar do quadro "Papo de Desenvolvedor" no canal da Casa do Desenvolvedor no YouTube. Foi uma conversa introdutória sobre a linguagem de programação C#, e também exploramos se ainda é válido começar a estudar essa linguagem. 🤓
Durante o bate-papo, compartilhei minha perspectiva sobre o uso do C#, tanto na criação de interfaces quanto nos sistemas e projetos que estou desenvolvendo atualmente.
Ficarei feliz se vocês quiserem conferir mais detalhes sobre nossa conversa:
Estou à disposição para possíveis dúvidas que possam surgir!
- 1
-
Opa Fernando, beleza?
Vou tentar passar a minha visão sobre as suas dúvidas:
Tem bastante conteúdo para criação e publicação de apps nas lojas de aplicativos. Com um pouco de experiência, uma boa ideia e MUITO tempo é possível criar uma aplicação e publica-la.
O salário vai depender muito da experiência que você possui. Se você possui uma longa experiência com uma tecnologia poderá negociar salários maiores. Manter uma carreira dentro de uma empresa é o método mais consistente de possuir uma fonte de renda, mas nada impede que desenvolvedores atuem como freelancers em outros projetos .
Geralmente grandes aplicações são desenvolvidas e mantidas por dezenas de pessoas, então dificilmente um único desenvolvedor conseguirá dar conta de tudo, ainda mais considerando que há muitas áreas diferentes, como front-end, back-end, sre, dba e etc .
- 5
-
Opa, tudo bem?
Utilizei o Azure Pipelines apenas com pipelines NodeJS, mas acredito que não seja muito diferente com Wordpress.Vamo lá:
1. Configure o repositório.
Vá para o Azure DevOps. Selecione seu projeto ou crie um novo.
2. Configurar o arquivo azure-pipelines.yml
No diretório raiz do seu projeto, crie um arquivo chamado "azure-pipelines.yml". Este arquivo vai ser preenchido com as instruções da sua pipeline.
trigger: - master # Indica que a pipeline será disparada sempre que houver commit na branch master pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '16.x' displayName: 'Install Node.js' - script: | npm install npm build displayName: 'Install and Build' # Esse é um exemplo básico de pipeline que utiliza NodeJS. # Modifique e adicione mais etapas conforme necessário, como build da aplicação, execução de teste, cópia de arquivos e etc.
Na documentação do azure devops tem mais alguns modelos de yaml que podem ser úteis.
3: Commit e Push
Com o repositório clonado localmente adicione o código do seu projeto WordPress e faça push para o Azure Repos.
4: Ative a Pipeline
No Azure DevOps, vá para "Pipelines" no menu e clique em "New Pipeline" e escolha o repositório onde está o azure-pipelines.yml.
Por fim clique em "Run" para executar a pipeline.
A construção do arquivo yaml vai depender de como sua aplicação está construída e hospedada. Por exemplo, se os arquivos do site precisam disponíveis de forma estática num servidor web, você pode criar uma etapa na pipeline que faça uma conexão FTP com o servidor e copie todos os arquivos do Azure Repos.
Espero ter ajudado de alguma forma 😉
- 2
-
Olá.
Dei uma olhada no JS que já tem e parece que está bem definido o funcionamento no tabuleiro 3X3.Para conseguir um 4X4 basta modificar os array 'winPatterns' com os padrões corretos de vitória no 4x4, aumentar o tamanho do array 'gameBoard' e por fim ajustar o HTML com os novos elementos.
O código parece bem estruturado então deve conseguir incrementar a lógica sem muitos problemas.
- 1
-
Olá
As versões comerciais do Intellij possuem o período trial de 30 dias, porém tem disponível a versão community totalmente gratuita:
https://www.jetbrains.com/idea/download/?section=windows
- 1
-
Olá.
O Google fornece uma API para pesquisas customizadas onde é possível obter imagens:
https://developers.google.com/custom-search/v1/overview?hl=pt-br
Em C# você pode consumir da seguinte forma:
usign var client = new HttpClient(); var url = "https://customsearch.googleapis.com/customsearch/v1?cx=[IdMecanismoPesquisa]&key=[API_KEY]&searchType=image&q=Coca Cola&num=1"; var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Add("Accept", "application/json"); var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(await response.Content.ReadAsStringAsync());
A partir dessa requisição será obtido a resposta:
... "items": [ { "kind": "customsearch#result", "title": "Coca-Cola - Wikipedia", "htmlTitle": "<b>Coca</b>-<b>Cola</b> - Wikipedia", "link": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/15-09-26-RalfR-WLC-0098_-_Coca-Cola_glass_bottle_%28Germany%29.jpg/1200px-15-09-26-RalfR-WLC-0098_-_Coca-Cola_glass_bottle_%28Germany%29.jpg", "displayLink": "en.wikipedia.org", "snippet": "Coca-Cola - Wikipedia", "htmlSnippet": "<b>Coca</b>-<b>Cola</b> - Wikipedia", "mime": "image/jpeg", "fileFormat": "image/jpeg", "image": { "contextLink": "https://en.wikipedia.org/wiki/Coca-Cola", "height": 2128, "width": 1200, "byteSize": 283763, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQJyEDVQYqZINpelmoCLYQPCr6MQXd1m9-6goF80ivqcAhL-84dXFEQwYY&s", "thumbnailHeight": 150, "thumbnailWidth": 85 } } ] ...
A documentação descreve os passos para obter o token de acesso e id do mecanismo de pesquisa programável. Importante notar que há uma limitação de uso gratuito de 100 consultas por dia.
Uma outra alternativa é utilizar o pacote HtmlAgilityPack para realizar a extração das imagens a partir do HTML das páginas do Google, mas isso vai exigir um bom conhecimento em técnicas de webscraping.
- 1
-
Olá
O estilo parece estar definido corretamente, é possível que você não esteja aplicando ao elemento no HTML.
Em index.html verifique se foi informado:
<header class="banner">
- 1
- 1
-
Olá Davi, tudo bom?
O problema no seu código é o uso da função Array.of. Para resolver seu problema você pode chamar a Array.from diretamente:
function getArrayWithLength(string) { return Array.from(string); } console.log(getArrayWithLength("Hello JS Arrays")); //Saida: //[ // 'H', 'e', 'l', 'l', // 'o', ' ', 'J', 'S', // ' ', 'A', 'r', 'r', // 'a', 'y', 's' //]
- 1
-
Opa @porter, beleza?
Ao executar JsonConvert.DeserializeObject, ele retornará um objeto genérico (object). Isso significa que você não terá um tipo específico para trabalhar e acessar os dados do JSON.
Para conseguir acessar os valores você pode criar uma classe equivalente ao JSON e especificar o tipo de objeto para o qual deseja desserializar informando o argumento no método DeserializeObject:
NotaFiscal notaFiscal = JsonConvert.DeserializeObject<NotaFiscal>(content); string idDaNota = notaFiscal.id;
Outra opção é usar os tipos dynamic(não tão recomendado, pois não há verificação de tipo rs):
dynamic jsonData = JsonConvert.DeserializeObject(content); string status_processamento = jsonData.retorno.status_processamento;
- 1
-
Se a intenção é transformar a imagem retangular em um quadrado, você pode usar a propriedade overflow: hidden para esconder as partes excedentes da imagem e ajustar o tamanho da imagem usando CSS.
<div class="quadrado"> <img src="sua-imagem.jpg" alt="Imagem Retangular"> </div>
.quadrado { width: 200px; /* Largura desejada do quadrado */ height: 200px; /* Altura desejada do quadrado */ overflow: hidden; /* Para cortar as partes excedentes da imagem */ }
.quadrado img { width: 100%; height: 100%; object-fit: cover; /* Ajusta a imagem para preencher o quadrado */ }
- 1
- 1
-
Opa @robert, beleza?
Consegue postar o trecho do código? Pela imagem não é possível identificar o problema. -
Opa @Killberly, beleza?
Sim, você pode criar um contador dentro de uma função, porém você deve criar a variável fora do loop.
function exemplo() { var contador = 0; for (var c = 1; c <= 10; c++) { contador = c; } return contador; } var resultado = exemplo(); console.log(resultado);
- 1
-
Opa @jcvilanova, beleza?
Não tenho experiência com PHP, mas posso ajudar com esse problema de forma mais conceitual rs.
Em C# eu tenho o Razor Pages onde é possível criar uma página HTML e inserir informações compiladas. Por exemplo:
<p>...@DateTime.Now nesta cidade de...</p>
Então seria possível criar uma pagina HTML com o texto fixo, informações dinâmicas, exportar para PDF e realizar a impressão.
Isso também pode ser feito usando apenas HTML e JS, mas acredito que você possa seguir um caminho parecido em PHP.
- 1
-
Não tenho muita experiência com os serviços da hostinger, mas dando uma olhada na página de hospedagem compartilhada parece que só é possível hospedar sites.
Pra manter uma aplicação aplicação em execução você precisa ter um servidor e para isso eles oferecem uma solução de VPC que pode resolver seu problema.
- 1
-
Geralmente, as hospedagens gratuitas impõem um limite de tempo que uma aplicação pode ficar em execução. Uma alternativa que pode ser interessante é utilizar sua função em uma solução serverless, como AWS Lambda ou Azure Functions. Nesse tipo de serviço, é possível configurar para que sua aplicação seja executada a cada 30 segundos sem a necessidade de manter e custear um servidor 24 horas.
- 1
-
Para obter apenas o valor da primeira propriedade do objeto JSON sem a chave, você pode acessá-lo diretamente pelo índice:
document.write(passedArray[1][0]);
-
O erro 404 indica que o endereço que está tentando acessar não existe no servidor.
Em qual momento você está pegando o erro? -
Opa, tudo bem?
Ao abrir HTML no navegador é possível utilizar as ferramentas de desenvolvimento(F12) para analisar erros. Quando tentei executar a função somar obtive o erro:
"Uncaught ReferenceError: n2 is not defined"
Ou seja, você não definiu a variável n2 antes de usa-la.
var n1 = Number(tn1.value) var n1 = Number(tn2.value) //Atribuindo valor para n1, mas deveria ser n2 var s = n1 + n2
Atribuir valor corretamente na variável n2 deve deixar seu código funcional
var n1 = Number(tn1.value) var n2 = Number(tn2.value) var s = n1 + n2
- 1
-
Pode ser que haja algum erro na formatação dos números. Mas apenas analisando o código não consegui identificar um erro. O valor obtido em row["preco_pedido"] é um número valido? É possível que o DB esteja retornando um valor diferente do esperado.
-
O principal erro em seu código está na função meu_callback onde será obtido os elementos que tenham exatamente os ids: rua, bairro, cidade, uf. Ou seja, sempre será utilizado os elementos definidos no HTML.
Acredito que essa seja a melhor forma de fazer seu código funcional:
Modifiquei o HTML e defini o id no grupo_endereco e adicionei o atributo "data-grupoid" no input cep.
<!DOCTYPE html> <head> <title>Teste</title> <script src="script.js"></script> </head> <body> <div id="endereco"> <div class="grupo_endereco" id="campo1"> <button type="button" onclick="adicionarCampo()">+</button> <br><br> <input type="text" name="cep[]" id="cep" data-grupoid="campo1" maxlength="9" placeholder="CEP" onblur="pesquisacep(this);" onkeypress="$(this).mask('#####-###');"><br> <input type="text" name="rua[]" id="rua" placeholder="Rua"> <input type="text" name="numero[]" id="numero" placeholder="n"> <input type="text" name="complemento[]" id="complemento" placeholder="Complemento"> <input type="text" name="bairro[]" id="bairro" placeholder="Bairro"> <input type="text" name="cidade[]" id="cidade" placeholder="Cidade"> <input type="text" name="uf[]" id="uf" placeholder="UF"> </div> </div> </body> </html>
Criei uma variável global para definir qual é o grupo de endereço que está sendo modificado. Essa variável será utilizada nas outras funções para manipular os elementos.
Também adicionei o atributo data-grupoid e função onBlur nos elementos gerados dinamicamente.
var controleCampo = 1 var grupoAtual function adicionarCampo() { controleCampo++ // console.log(controleCampo); document .getElementById('endereco') .insertAdjacentHTML( 'beforeend', '<br><div class="grupo_endereco" id="campo' + controleCampo + '"><button type="button" id="' + controleCampo + '" onclick="removerCampo(' + controleCampo + ')"> - </button><br><br><input type="text" name="cep[]" id="cep" data-grupoid="campo' + controleCampo + '" maxlength="9" placeholder="CEP" onblur="pesquisacep(this);"><br><input type="text" name="rua[]" id="rua" placeholder="Rua"><input type="text" name="numero[]" id="numero" placeholder="n"><input type="text" name="complemento[]" id="complemento" placeholder="Complemento"><input type="text" name="bairro[]" id="bairro" placeholder="Bairro"><input type="text" name="cidade[]" id="cidade" placeholder="Cidade"><input type="text" name="uf[]" id="uf" placeholder="UF"></div>' ) } function removerCampo(idCampo) { document.getElementById('campo' + idCampo).remove() } function limpa_formulario_cep() { grupoAtual.querySelector('#rua').value = '' grupoAtual.querySelector('#bairro').value = '' grupoAtual.querySelector('#cidade').value = '' grupoAtual.querySelector('#uf').value = '' } function meu_callback(conteudo) { if (!('erro' in conteudo)) { grupoAtual.querySelector('#rua').value = conteudo.logradouro; grupoAtual.querySelector('#bairro').value = conteudo.bairro grupoAtual.querySelector('#cidade').value = conteudo.localidade grupoAtual.querySelector('#uf').value = conteudo.uf } else { limpa_formulario_cep() alert('CEP não encontrado.') } } function pesquisacep(input) { // Obtém o ID definido no atributo data-grupoid. var grupoId = input.getAttribute('data-grupoid') // Define a variável global grupoAtual com o elemento do grupo. grupoAtual = document.getElementById(grupoId) var valor = input.value var cep = valor.replace(/\D/g, '') if (cep != '') { var validacep = /^[0-9]{8}$/ if (validacep.test(cep)) { grupoAtual.querySelector('#rua').value = '...' grupoAtual.querySelector('#bairro').value = '...' grupoAtual.querySelector('#cidade').value = '...' grupoAtual.querySelector('#uf').value = '...' var script = document.createElement('script') script.src = 'https://viacep.com.br/ws/'+ cep + '/json/?callback=meu_callback' document.body.appendChild(script) } else { limpa_formulario_cep() alert('Formato de CEP inválido.') } } else { limpa_formulario_cep() } }
Não ficou muito bonito, mas está funcional hehe
-
Você pode definir uma classe CSS para ser utilizada por múltiplos elementos da seguinte forma:
h2, h3 { color: blueviolet; }
Outra alternativa é criar um seletor para o estilo e decorar seus elementos H2 e H3
.titulo { color: red; }
- 1
-
A lógica parece estar correta, talvez seja um erro nesse aplicativo.
Em outro compilador também obtém false? -
Ambos são notebooks muito semelhantes, mas eu pessoalmente iria no Asus e se estiver dentro do orçamento vale a pela pegar a versão 16GB dele.
-
Oi, pessoal! Tudo bem?
Hoje gostaria de compartilhar com vocês um guia sobre como utilizar a API PlugNotas para emitir Notas Fiscais de Serviço Eletrônicas (NFS-e) de forma prática. Com um único JSON é possível emitir notas de forma simplificada, independentemente do padrão de webservice ou da cidade de prestação.
Acesso à API:
Antes de iniciar o processo, verifique se você possui a chave de API necessária para autenticar suas requisições. Para este guia, vamos utilizar o ambiente Sandbox da API PlugNotas, que oferece respostas fixas e permite testes sem a necessidade de informar um prestador devidamente credenciado.Endpoint utilizado será: https://api.sandbox.plugnotas.com.br/
Informe o token 2da392a6-79d2-4304-a8b7-959572c7e44d no cabeçalho x-api-key como autenticação para todas as suas requisições.
Cabeçalho x-api-key preenchido com token de sandboxCaso esteja utilizando o ambiente de produção, o endpoint será: https://api.plugnotas.com.br/
Para obter o token de produção, siga os passos descritos na documentação: Obtendo o TokenCertifique-se de ajustar o endpoint e o token de acordo com o ambiente que você está utilizando.
Agora, vamos prosseguir com os passos para emitir uma NFS-e.Cadastrar certificado:
O primeiro passo é cadastrar um certificado digital. Para isso, utilize a rota POST /certificado e inclua na requisição um form-data contendo o arquivo do certificado e a respectiva senha.
A obrigatoriedade do certificado pode variar de acordo com cada prefeitura ou webservice. Caso queira verificar se uma cidade utiliza certificado, você pode utilizar a rota GET /nfse/cidades.
O arquivo do certificado deve ser informado em corpo no formato form-data.Cadastrar prestador:
Agora vamos realizar o cadastro do prestador enviando uma requisição POST para a rota /empresa. No corpo da requisição, além dos dados básicos da empresa, inclua o campo "nfse" com as configurações de número de RPS (Recibo Provisório de Serviços), ambiente de emissão e autenticação da prefeitura.
Certifique-se também de incluir o campo "certificado" com o ID obtido no passo anterior, para vincular o certificado ao cadastro do prestador.{ "cpfCnpj": "71073473000167", "inscricaoMunicipal": "8214100099", "simplesNacional": true, "regimeTributario": 1, "razaoSocial": "Tecnospeed S/A", "certificado": "64b58c5405f34cdce812efc1", "endereco": { "bairro": "Zona 01", "cep": "87020025", "codigoCidade": "4115200", "estado": "PR", "logradouro": "Duque de Caxias", "numero": "882", "tipoLogradouro": "Avenida", "codigoPais": "1058", "complemento": "17 andar", "descricaoCidade": "Maringá", "descricaoPais": "Brasil", "tipoBairro": "Zona" }, "nfse": { "ativo": true, "tipoContrato": 0, "config": { "producao": true, "rps": { "lote": 1, "numeracao": [ { "numero": 1, "serie": "RPS" } ] }, "prefeitura": { "login": "teste", "senha": "teste123" } } } }
Emitir NFS-e
Após o cadastro do prestador, você estará pronto para emitir uma NFS-e. Para isso, envie uma requisição POST para a rota /nfse, incluindo um JSON com as informações da nota de serviço. Vamos destacar algumas das propriedades obrigatórias que compõem esse JSON- Prestador: Deve ser informado o CPF/CNPJ e outros dados relevantes do prestador de serviço, conforme necessário. Por padrão serão utilizados os dados do cadastro realizado previamente.
- Tomador: Nesse campo, devem ser fornecidos os dados do tomador do serviço, como CPF/CNPJ, razão social, endereço e e-mail.
- Serviço: Aqui, serão informados os detalhes do serviço prestado, como código, discriminação, valor a ser cobrado e impostos aplicáveis.
Com os campos devidamente apresentados podemos montar o JSON:
[ { "prestador": { "cpfCnpj": "82186217000100" }, "tomador": { "cpfCnpj": "99999999999999", "razaoSocial": "Empresa de Teste LTDA", "email": "teste@plugnotas.com.br", "endereco": { "descricaoCidade": "Maringa", "cep": "87020100", "tipoLogradouro": "Rua", "logradouro": "Barao do rio branco", "tipoBairro": "Centro", "codigoCidade": "4115200", "complemento": "sala 01", "estado": "PR", "numero": "1001", "bairro": "Centro" } }, "servico": [ { "codigo": "14.10", "codigoTributacao": "14.10", "discriminacao": "Descrição dos serviços prestados", "cnae": "7490104", "iss": { "tipoTributacao": 7, "exigibilidade": 1, "aliquota": 3 }, "valor": { "servico": 1 } } ] } ]
A emissão da NFS-e é um processo assíncrono. Você receberá um protocolo e um ID que serão utilizados para consultar a situação da nota posteriormente.
Se não houver erros de validação em sua requisição, você receberá a seguinte resposta:{ "documents": [ { "id": "64b5445a47188375a92f6414" } ], "message": "Nota(as) em processamento", "protocol": "22535d12-b458-4b12-b5d2-37c46f1f01ae" }
Consultar NFS-e
Após a emissão é necessário enviar uma requisição GET para /nfse/consultar/{idouprotocolo} a fim de verificar a situação da nota emitida. Essa consulta permitirá obter informações sobre o status atual da NFS-e.
Durante o processo de consulta, você pode encontrar os seguintes status:- PROCESSANDO: Indica que a nota está em processamento. Nesse caso, é necessário realizar consultas subsequentes até obter a situação final da nota.
- REJEITADO: Caso ocorra algum erro durante a emissão da nota, você receberá esse status juntamente com o motivo da rejeição. Analise a mensagem de erro, ajuste os dados do JSON de envio e tente a emissão novamente.
- CONCLUÍDO: Indica que a NFS-e foi devidamente autorizada. No ambiente Sandbox, todas as emissões resultarão em sucesso.
Ao consultar uma nota concluída, você receberá os seguintes dados:
[ { "id": "64b5445a47188375a92f6414", "emissao": "17/07/2023", "situacao": "CONCLUIDO", "prestador": "82186217000100", "tomador": "99999999999999", "valorServico": 1, "numeroNfse": "22143", "serie": "LAL", "lote": 290008, "numero": 7, "codigoVerificacao": "5278FE6A7", "autorizacao": "17/07/2023", "mensagem": "RPS Autorizada com sucesso", "pdf": "https://api.sandbox.plugnotas.com.br/nfse/pdf/64b5445a47188375a92f6414", "xml": "https://api.sandbox.plugnotas.com.br/nfse/xml/64b5445a47188375a92f6414" } ]
Exportar NFS-e
Após consultar a NFS-e e obter a situação "CONCLUÍDO", você pode exportar a nota nos formatos PDF ou XML. Para isso, basta realizar as seguintes operações:
Para exportar o PDF da nota, faça uma requisição GET para /nfse/pdf/{idNota}. Isso permitirá que você obtenha o arquivo PDF contendo os dados da NFS-e.
Para exportar o XML da nota, faça uma requisição GET para /nfse/xml/{idNota}. Isso permitirá que você obtenha o arquivo XML gerado pela prefeitura.
PDF obtido ao exportar.E assim concluímos o guia de utilização da API PlugNotas para emissão de NFS-e. Espero que este guia tenha sido útil e fornecido todas as informações necessárias para você começar a utilizar a API em seus projetos.
Caso queira explorar mais detalhes, exemplos e informações adicionais, recomendo que consulte a documentação completa, disponível no seguinte link: Documentação API PlugNotas
- 1
Como tornar o meu HTML em link público
em HTML & CSS
Postado
Olá.
A forma mais simples de gerar um link publico é hospedar o seu HTML em um servidor, há muitas alternativas gratuitas, mas minha favorita é o GitHub Pages.