O engraçado é tu ter passado o comando "time" e depois sair contando manualmente. É tipo: "eu mesmo vou contar, não confio nisso" hahahahha. Vídeo sensacional
Na moral, tô curtindo muito seu canal mano. Didática top. Postura humilde pra ensinar quem sabe menos, sem arrogância e prepotência. Parabéns cara, de verdade, vc é foda.
Essa é a segunda vez que assisto esse vídeo. Tô tão feliz que agora estou conseguindo entender cada detalhe que voce está desenvolvendo... *-* Depois de algumas semanas estudando todo dia... Seu canal tem me ajudado. Obrigada.
Fico Mega Feliz Bella que tenha ajudado. Esses vídeos são muita informação em pouco tempo, não dá tempo de eu explicar tudo infelizmente. Então sempre que tiver alguma dúvida que eu puder responder pode perguntar ok?
@@Filhodanuvem Sim, acaba que tem termos que precisa de um video mais longo pra explicar tudo ne. Estou quebrando a cabeça agora tentando aprender teste de integração.
Antes desse vídeo não tinha menor interesse em aprender regex, agora tô vendo como é importante aushaush, o problema do parse eu pensei logo em utilizar um split e nossa senhora, iria ficar bem custoso
Top d+++, vlw Filho da Nuvem pelo video, ficou nota 10!!! Bola uma aí desse método usando a lib que vc falou que tem que dar o await. Parabéns pelo trabalho!
Valeu Rodrigo. Se curtiu esse vídeo talvez curta os outros na mesma linha, mas com tecnologias diferentes: czcams.com/play/PLzehOqhpwpxh2iUcEkWaIijVRhbeiakrL.html
Bha!, dei uma pausa no vídeo e já dei meu like porque faz parte né e aproveitei pra comentar. Outra ideia bacana para o canal é colocar problemas igual esse que você apresentou isso é muito trí afinal num canal de programação problemas fazem parte do dia a dia, parabéns pelo vídeo e esta muito legal.
@@Filhodanuvem tipo a forma que você resolveu o problema foi muito interessante e pensei que se desse para replicar para mais problemas seria muito legal, a forma que você explicou é joinha.
Saquei Luis. Obrigado pelo feedback. Eu tô pensando em trazer mais vídeos desses sim, o problema é que pra fazer 1 vídeo desse eu preciso de ter uma solução pronta e aí dependendo do problema eu gastaria horasss pra codar pra daí escrever o roteiro, gravar, editar. Enfim. Preciso encontrar problemas que não sejam tão grandes 🙃.
Acabei de chegar no canal. Algumas críticas. 1- parabéns pelo nome passei mal de rir hahahah muito criativo . 2- muito bom o formato do vídeo, me ajudou muito, parabéns cara.
Muito bom seu vídeo. Eu fiz um exemplo muito similar. Na parte do parser eu utilizei o antlr 4. Gerei o parser em go e foi sucesso :). Sugiro da próxima vez dar uma olhada em gramática livre de contexto... :) é nóis. Baita vídeo bom :)
Obrigado por ser honesto(a) meruem. De repente esses vídeos aqui são mais tranquilos pra entender. Desenvolvendo uma calculadora czcams.com/video/YjfyaaEnjrg/video.html Teste pratico mais fácil usando go czcams.com/video/I70UQ2p5OrE/video.html
Sensacional Claudson! Claudson, só fiquei com uma dúvida. Caso o processo de leitura de linhas do arquivo seja mais rápido que o processo de inserção no banco de dados vamos ter um cenário onde o número de goroutines vai aumentado indefinidamente durante a execução do código. Neste caso, podemos acabar com um número muito grande de goroutines rodando em paralelo (memory leak) e o banco de dados overloaded. O que acha de usar algo como worker pools para limitar o número de workers/goroutines e mitigar este problema? Teria alguma outra sugestão para este caso? Parabéns pelo trabalho sensacional!
Muito bom ponto Luis e você tem toda a razão. O número de go routines ali está muito acoplado ao número de chunks então pode crescer indefinidamente e apesar das routines de go serem muito leves, as linhas do log podem sim ficar todas na memória antes mesmo de começar a escrever no banco. Eu acabei focando mais nas goroutines que nas channels, mas uma das formas que vejo pra limitar o número de goroutines é usando buffered channels, basicamente você define uma channel com um número limite, (mas esse número não pode ser o mesmo numero de chunks como eu fiz). Quando a sua channel fica cheia porque já tem muitos items nela, o go bloqueia a execução pra não permitir mais entradas e só volta a correr quando itens começarem a sair da channel, ou seja, quando goroutines começarem a trabalhar e remover o item dela. Esse link aqui tem vários exemplos e explicação das vantagens de buffered channels. link.medium.com/sE2jzXpk26
Vou ser sincero, eu não vi o vídeo inteiro ainda porque estou meio ocupado agora, mas como eu me interessei, por hora, eu acabei vendo só alguns pedaços... A expressão regular que você montou não está correta, você precisa dar escape nos pontos... `[0-9]+.[0-9]+.[0-9]+.[0-9]+` precisa ser `[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+` As entradas do log eu não vi, então não sei te dizer se está correto ou não, mas provavelmente daria pra montar uma expressão precisa. Até porque existe IPv4, IPv6, IPv4 mapeado em IPv6, loucura total ;) Regex talvez não seja a melhor opção para dar parse nesse log. Acredito que um simples split por espaço entre os tokens resolva, mas pra isso precisa saber qual o formato de quem produz o log pra evitar problemas.
Fala Rafael! Boas observações. Sobre o escape, você tá certo, deveria ter colocado. Mas como ponto quer dizer qualquer elemento incluindo o literal ponto ele casa com ipv4 hahaah. Acho que split por espaço não funciona porque existem tokens que contem espaços dentro, depois tu continua 😉.
@@Filhodanuvem Cara, voltei pra ver o vídeo... Sim, de fato por um simples espaço não daria certo, mas um mix entre espaço e aspas contando as ocorrências, talvez resolveria. Alguns outros detalhes que eu vi no seu código e vou sugerir como melhorias: 1. No parser.Parse você compila a expressão regular a cada chamada, você pode compilar ela apenas na inicialização e reutilizar posteriormente. 2. Pelo que vi, você usou muito append nas slices o que também não é legal, já que muita coisa ali você poderia prever quantos itens você precisaria processar e já reservar a quantidade de itens evitando realocações desnecessarias. 3. Na parte que você monta a string para inserir no SQL, você também montou da maneira mais simples que seria simplesmente concatenando strings, porém existem métodos muito mais eficientes para concatenar string em golang (stringbuilder por ex). São pequenos detalhes que eu notei, mas que com pequenas modificações devem trazer um bom ganho de desempenho. Por acaso esse código está disponível em algum lugar? Gostei do vídeo, muito interessante para quem está iniciando.
Primeiramente valeu mesmo mano, faz tempo que eu não recebo um Code review tão bom. Já aprendi mais coisas pra próxima vez 😎. Eu não coloco esse projeto público na net porque tenho um pouco de receio da empresa reclamar (não é difícil algumas chegarem aqui hehe), então eu conseguiria tirar o vídeo do ar e não tem código aberto.
Opa, tá na mão, tive que editar um pouco para remover dados da empresa mas dá pra estudar. gist.github.com/filhodanuvem/80a799672f455b8f97c43acba7f0076c Além disso, deixo aqui o melhor conteudo de expressoes regulares, que foi por onde aprendi aurelio.net/regex/
Aquela parte do sistema que ninguém quer mexer neh? o problema que a alternativa a regex geralmente é criar um parser, que também não é lá algo muito simples de manter.
Olá, tudo bem ? Muito legal e parabens pelo video. Só um ponto que chamou a atenção é no parser dos logs, se você reparar bem os logs tem o formato dos Combined Log Format do Apache que é assim: "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" E poderia ter resolvido talvez com a seguinte regex: ^(?P\S+) \S+ (?P\S+) \[(?P[^\]]+)\] \"(?P[A-Z]+) (?P[^ \"]+)? (?PHTTP/.*)\" (?P[0-9]{3}) (?P[0-9]+|-) \"(?P.*?)\" \"(?P.*?)\"
Fala Antônio, não lembro exatamente quanto tempo levei, pelos commits deram 4 dias mas acho que fiquei pelo menos um dia codando sem commit. Eu sempre peço uma semana porque só consigo focar mesmo no fds.
Em me tire uma duvida seu canal é muito bom eu vou me formar em ADS e vou trabalhar na area um tempo para adquirir xp você acha que depois uma pós em engenharia de software vai destacar no curriculo pois saberei do Hardware e do software? Eu vi em um site que um programador recem formado começa ganhando 3000 mil e com 5 anos de xp o salario é 7000 reais isso é verdade?
Fala Pablo. Então... 1. Não entendo porque você falou hardware. ADS se não me engano é análise e desenvolvimento de sistemas e Engenharia de software também foca em software então não tem foco em hardware nesse seu plano. 2. Não existe nenhuma lei que exija empresas a pagar 3k para um iniciante. Eu não sei como o mercado vai estar quando você começar a trabalhar. Existem juniors ganhando 1k e existem juniors ganhando 3k sim, depende do nível de conhecimento e experiência da pessoa. Esses números que você falou são super comuns na nossa área, agora quando que você vai ganhar depende desses fatores, experiência, conhecimento, cidade, etc. Da uma uma olhada nesse video e nos comentários, muita gente, inclusive iniciantes falando seus salários. czcams.com/video/XduwTIHeG7c/video.html
Vish mano, do meu primeiro hello world até aqui já tem mais de 10 anos fácil. Entrei na faculdade em 2008 (e já tinha feitos códigos antes) entao da 12+ anos. Mas vamos estudando que não tem tempo ruim, quando a gente menos espera a gente já sabe mais do que acha.
Parabens pelo canal! Mto daora! Descobri agora e to acompanhando! Gostaria de fazer uma pergunta: eu estou estudando ainda (html>css>js>agora to no react) e acabei de conseguir a cidadania portuguesa. Imagino que sendo assim, conseguir meu primeiro emprego como programadora jr aqui no Brasil ou em Portugal vai ser a mesma dificuldade né? Ou vc acha q um mercado está super mais aquecido q o outro? Pergunta 2: vi em alguns videos que um senior ganha em media 2 mil euros limpos, mais que isso seria fora da curva. Eu poderia esperar 1000 euros pra esse primeiro emprego? Ou menos? Eu vi seu video sobre salários mas achei mto otimista rs Mto obrigada pela atenção em ler tudo isso desculpa tantas perguntas. Um abraço!
Olá Bruna. Valeu pelo suporte. Pergunta 1: bom você tem uma vantagem, que é poder ser contratada e vir no outro dia mesmo. Em termos de mercado aquecido, o do Brasil tende a ser muito mais até pelo tamanho do país, mas também depende de qual região você tá. Eu gosto da ideia de ter primeiras experiências no Brasil, a não ser que sua ideia seja se muda pra cá com ou sem o trabalho. Pergunta 2: que bom que você achou otimista, é melhor você ter um pé atrás com as informações da Internet e ser surpreendia positivamente do que chegar aqui e ver que tudo é diferente (até porque na condição atual do mundo, nada vai se permanecer igual por muito tempo). Eu acho que algo perto de 1000 euros pra um iniciante é a faixa das capitais daqui. Mas de novo, sempre se prepare para o pior, e tudo que acontecer de bom será lucro.
Muito Legal a sua solução para o desafio, trabalho como desenvolvedor Java, mas estou estudando Go. Ainda não me aprofundei em concorrência em Go, mas me lembra um pouco a forma que o Elixir lida com a concorrência. Em meus estudos em Go cheguei a implementar load balancer simples utilizando Channel. Baseado nesse Github muito bacana por sinal github.com/danistefanovic/build-your-own-x/blob/master/README.md
@@Filhodanuvem Obrigado, Ainda não o coloquei no github, Mas Fica a indicação do código github de Load Balancer e o link que usei como referência: github.com/kasvith/simplelb/ e kasvith.me/posts/lets-create-a-simple-lb-go/, seria muito interessante ver em um video!
Opa acabei de subir o código github.com/luishpcosta/loadbalancer. É basicamente uma copia do original haha apenas modularizado do meu jeito. A intenção era apenas compreender cada parte do load balancing construido por Kasvith.
Uma dúvida, na linha 87 do dumper.go ele chamaria o dumper.Dump com chunk vazio se o scanner tivesse scaneando um número de linhas múltiplo do maxChunkSize, correto?
Fala mano, desculpa a demora. Acho que não aconteceria isso porque o for é controlado por um scanner.Scan(). Ou seja, se ele perceber que chegou no fim do arquivo, ele nao teria mais uma volta do for para ter um chunk vazio. gist.github.com/filhodanuvem/02aa699654c1cc776cb735a591830ab5#file-dumper-go-L6
Tem bastante vaga sim, principalmente em uk, o maior desafio que vejo das vagas de go é que a maioria são pra quem já é mais senior, mas é um questão de procurar bastante e se jogar nas vagas.
Fala Filho da Nuvem, tudo certo? Não conheço muito de Go, não seria possível converter o long em um json, e depois usar para identificar as linhas que seriam salvas no db?
Bom ponto Édipo. Posso estar errado mas o problema é como poderíamos converter o log para um json? ele tava num formato de 1 linha com espaços como no vídeo e eu teria que converter para {ip: X, date: y}. O único modo que vejo pra fazer essa conversão também seria com expressão regular (tem como usar outra técnica de parsing mas é mais complexa). Então como eu não vejo uma fuga da regexp, nem valia a pena converter pra json pra depois fazer o json to struct.
Vou procurar se ainda tenho esse código, a título de informação estou postando outros desafios em go numa plataforma, depois da uma olha se te interessar www.devgym.com.br/
Você passou na vaga? Cuidado, para não ser trote. Ou seja, tem gente que fala que vai contratar, põe um problema que a empresa não ta conseguindo resolver, somente para alguém resolver, depois ela manda uma mensagem dizendo que você não passou.
Mano, pior que eu fiquei pensando sobre isso nesse caso. Porque era uma empresa muito pequena e vai ver queriam um jeito de acessar os logs hahaha. Mas honestamente se eles querem fazer isso usando banco de dados, eles tão num caminho bem errado.
@@Filhodanuvem O importante é que você tem capacidade o suficiente para resolver. Você fez bem expondo esse problema, se fosse eu , eu ainda colocaria o link da empresa + endereço AHHSHADHASH . Ultimamente eu estou ligando aquele botão , sabe qual é né?
Hahahahahahahahaha sei como é, essa semana eu já liguei algumas vezes . É mó desgastante fazer esse tipo de teste. Então pelo menos vira vídeo pro canal 🤣
@@Filhodanuvem Ao menos você não perde nada em fazer os testes. Você ganha, o canal ganha e nós mais ainda. hehehehe Agora... Faz um vídeo criando um Bot para o Telegram usando Go, com teclados inline. Cara... Tô aqui nessa vibe, o meu tá quase pronto. Porém apanhando pros inlines, pois não quero usar package de terceiros.
Fala mano. O gopher foi nessa loja aqui gopher.golangmarket.com/ Os de php não comprei, foram ganhos em evento, trocas com amigos. Mas se tu buscar por elephpant na net é capaz de encontrar lojas que vendem alguma versão.
Acho que não tem uma resposta certa pra isso. Comecei com o go tour, depois segui conteúdos na net (canal just for func, todos os canais de conferências, podcast), fui a conferência, fiz um curso chamado ultimate go e escrevi código algumas vezes.
Para mais projetos práticos inspirados em testes de emprego, acesse www.devgym.com.br/
Gosto assim, programadores empolgados com suas habilidades. Parabéns!
O engraçado é tu ter passado o comando "time" e depois sair contando manualmente. É tipo: "eu mesmo vou contar, não confio nisso" hahahahha. Vídeo sensacional
Hahahaahahahahahahahahahahaha acho que eu não confio em software que lida com tempo mesmo rs.
Na moral, tô curtindo muito seu canal mano. Didática top. Postura humilde pra ensinar quem sabe menos, sem arrogância e prepotência. Parabéns cara, de verdade, vc é foda.
Que legal que está curtindo Jonathan. Vamo que vamo.
Cara, melhor canal que eu conheci essa semana. Uma pérola. Cara gente boa demais e sabe ensinar.
Um dia eu chego nesse nível!
Por hora tô sofrendo com coisas básicas. 😂
Parabéns Filho da nuvem, vc é D+
A gente cresce junto Otávio 😉. Valeu!
@@Filhodanuvem por isso admiro vc mano !
Cara, que conteúdo exemplo. Vc trouxe muitos conceitos importantes nesse vídeos. Parabéns!!!
Valeu Silas, que bom que curtiu, foi divertido condensar os conceitos no vídeo também.
Essa é a segunda vez que assisto esse vídeo. Tô tão feliz que agora estou conseguindo entender cada detalhe que voce está desenvolvendo... *-* Depois de algumas semanas estudando todo dia... Seu canal tem me ajudado. Obrigada.
Fico Mega Feliz Bella que tenha ajudado. Esses vídeos são muita informação em pouco tempo, não dá tempo de eu explicar tudo infelizmente. Então sempre que tiver alguma dúvida que eu puder responder pode perguntar ok?
@@Filhodanuvem Sim, acaba que tem termos que precisa de um video mais longo pra explicar tudo ne. Estou quebrando a cabeça agora tentando aprender teste de integração.
Excelente video! Organizado, objetivo e com muito alto astral. Parabéns, Claudson =)
Opa, valeu Edilson, que bom que curtiu!
Que rajada de conhecimento cara kkkk parabéns pelo conteúdo Claudson, ta muito bom!
hahahaha valeu Enzo.
Mano, voce é bom. Só digo isso. Ganhou mais um Inscrito.
Opa! Valeu e bem vindo :)
Top show , tu é incrível mano!!
Valeuuu. Tem muito o que melhorar mas vamos devagar!
Tô amando seus vídeos!! Obrigada :) Tô aprendendo muito.
Que legal Bella que tu tá curtindo. Qualquer dúvida e sugestão é só mandar por aqui 😉.
Antes desse vídeo não tinha menor interesse em aprender regex, agora tô vendo como é importante aushaush, o problema do parse eu pensei logo em utilizar um split e nossa senhora, iria ficar bem custoso
Regex é lindo haha.
Muito bom! Várias técnicas avançadas pra operação de read/write! Parabéns bixo
Valeu Daniel
Muito bom!!! Parabéns por ter construído essa linha de raciocínio
Valeu Lucas!
Monstro demais 👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻
Opa, valeuuu mano, que bom que curtiu!
Que massa !!!, obrigado pelas dicas de regex
Cara eu sou seu fã, eu gosto muito de Go apesar de trabalhar com c# faço alguns trabalhos pessoais em GO seus videos são otimos me inspiram muito.
Fico feliz que os vídeos te inspiram, quem sabe um dia tu não migra de vez pra go 😉
Top d+++, vlw Filho da Nuvem pelo video, ficou nota 10!!! Bola uma aí desse método usando a lib que vc falou que tem que dar o await. Parabéns pelo trabalho!
Valeuuu, que bom que curtiu o vídeo :)
Que conteúdo legal! é sempre bom ver outras pessoas resolvendo problemas pra podermos ampliar a nossa percepção. Tá de parabéns!
Valeu Rodrigo. Se curtiu esse vídeo talvez curta os outros na mesma linha, mas com tecnologias diferentes:
czcams.com/play/PLzehOqhpwpxh2iUcEkWaIijVRhbeiakrL.html
@@Filhodanuvem Vou fazer uma maratona já já! é que eu trabalho com back end, mas quando trabalhava com C, não tinha conteúdos como o seu.
Bha!, dei uma pausa no vídeo e já dei meu like porque faz parte né e aproveitei pra comentar. Outra ideia bacana para o canal é colocar problemas igual esse que você apresentou isso é muito trí afinal num canal de programação problemas fazem parte do dia a dia, parabéns pelo vídeo e esta muito legal.
Valeu pelo Like Luis! Me explica sua ideia. Seria fazer um vídeo com problemas e deixar vocês resolverem?
@@Filhodanuvem tipo a forma que você resolveu o problema foi muito interessante e pensei que se desse para replicar para mais problemas seria muito legal, a forma que você explicou é joinha.
Saquei Luis. Obrigado pelo feedback. Eu tô pensando em trazer mais vídeos desses sim, o problema é que pra fazer 1 vídeo desse eu preciso de ter uma solução pronta e aí dependendo do problema eu gastaria horasss pra codar pra daí escrever o roteiro, gravar, editar. Enfim. Preciso encontrar problemas que não sejam tão grandes 🙃.
@@Filhodanuvem verdade, não levei em conta esses "parâmetros", o mundo não é um caramelo kkkk.
Parabéns. Seria legal disponibilizar uma parte desse arquivo de log para podermos tentar fazer.
Valeu pela sugestão, vou fazer isso da próxima.
Acabei de chegar no canal. Algumas críticas.
1- parabéns pelo nome passei mal de rir hahahah muito criativo .
2- muito bom o formato do vídeo, me ajudou muito, parabéns cara.
Obrigado pelos comentário Nicholas e seja bem vindo :)
Cara, gostei bastante da forma que implementou o código. Parabéns!
Valeu Silas, legal que você curtiu!
Muito bom seu vídeo. Eu fiz um exemplo muito similar. Na parte do parser eu utilizei o antlr 4. Gerei o parser em go e foi sucesso :).
Sugiro da próxima vez dar uma olhada em gramática livre de contexto... :) é nóis. Baita vídeo bom :)
Que bom que curtiu Rafael! Acho que vi gramáticas no curso de auto e linguagens formais rsrs boa lembrança, abraços.
Cara primeiro parabéns, gostei muito da forma como desenvolveu o problema. Tem algum conteúdo para quem esta começando com Golang ?
Valeu Leandro! Você já passou pelo go tour? Costuma ser o primeiro lugar pra se ter algum conhecimento em Go.
faz um vídeo codando isso 😍
Hummm, acho que levaria horas pra codar isso num video ein rsrs mas valeu pelo sugestão, talvez eu possa tentar numa versão reduzida pro futuro 🤔
Ótimo vídeo e uma boa ideia para para praticar GO!!
Valeu João!
Mais um vídeo sensacional. Parabéns Man.
valeu Bruno
Excelente vídeo. Está de parabéns!!
Obrigado Wesley, que bom que curtiu!
Como de costume, conteúdo top !!!
Ja te falaram que você é parecido com o Djonga ? kkk lembrando que parecido não é igual
Valeu Detroit. E já apareceram umas pessoas aqui falando especificamente do djonga haha tô começando a acreditar que pareço.
Não consegui entender nada mas mesmo assim achei lindo kkkkkkkkkk! Parabéns pelo trabalho e pelo canal meu amigo!
Obrigado por ser honesto(a) meruem. De repente esses vídeos aqui são mais tranquilos pra entender.
Desenvolvendo uma calculadora
czcams.com/video/YjfyaaEnjrg/video.html
Teste pratico mais fácil usando go
czcams.com/video/I70UQ2p5OrE/video.html
Eu tbm estou aprendendo GO e já fazia tempo que uma linguagem não me empolgava.
Go é amor. Principalmente depois dos primeiros dias onde tudo parece estranho rs
Muito boa a sacada de usar regexp!
Valeuu Ulisses.
Muito irado mano! Parabéns
Boa Victor. Que bom que curtiu.
Sensacional Claudson!
Claudson, só fiquei com uma dúvida. Caso o processo de leitura de linhas do arquivo seja mais rápido que o processo de inserção no banco de dados vamos ter um cenário onde o número de goroutines vai aumentado indefinidamente durante a execução do código. Neste caso, podemos acabar com um número muito grande de goroutines rodando em paralelo (memory leak) e o banco de dados overloaded. O que acha de usar algo como worker pools para limitar o número de workers/goroutines e mitigar este problema?
Teria alguma outra sugestão para este caso?
Parabéns pelo trabalho sensacional!
Muito bom ponto Luis e você tem toda a razão. O número de go routines ali está muito acoplado ao número de chunks então pode crescer indefinidamente e apesar das routines de go serem muito leves, as linhas do log podem sim ficar todas na memória antes mesmo de começar a escrever no banco. Eu acabei focando mais nas goroutines que nas channels, mas uma das formas que vejo pra limitar o número de goroutines é usando buffered channels, basicamente você define uma channel com um número limite, (mas esse número não pode ser o mesmo numero de chunks como eu fiz). Quando a sua channel fica cheia porque já tem muitos items nela, o go bloqueia a execução pra não permitir mais entradas e só volta a correr quando itens começarem a sair da channel, ou seja, quando goroutines começarem a trabalhar e remover o item dela.
Esse link aqui tem vários exemplos e explicação das vantagens de buffered channels. link.medium.com/sE2jzXpk26
Muito massa!!! Parabéns!
Valeu Jefferson!
O miserável é um genio
bacana demais esse vídeo!
Opa, daora que você curtiu!
Muito bom mestre!!
Valeu Luciano
Vou ser sincero, eu não vi o vídeo inteiro ainda porque estou meio ocupado agora, mas como eu me interessei, por hora, eu acabei vendo só alguns pedaços...
A expressão regular que você montou não está correta, você precisa dar escape nos pontos... `[0-9]+.[0-9]+.[0-9]+.[0-9]+` precisa ser `[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`
As entradas do log eu não vi, então não sei te dizer se está correto ou não, mas provavelmente daria pra montar uma expressão precisa.
Até porque existe IPv4, IPv6, IPv4 mapeado em IPv6, loucura total ;)
Regex talvez não seja a melhor opção para dar parse nesse log. Acredito que um simples split por espaço entre os tokens resolva, mas pra isso precisa saber qual o formato de quem produz o log pra evitar problemas.
Fala Rafael! Boas observações. Sobre o escape, você tá certo, deveria ter colocado. Mas como ponto quer dizer qualquer elemento incluindo o literal ponto ele casa com ipv4 hahaah.
Acho que split por espaço não funciona porque existem tokens que contem espaços dentro, depois tu continua 😉.
@@Filhodanuvem Cara, voltei pra ver o vídeo...
Sim, de fato por um simples espaço não daria certo, mas um mix entre espaço e aspas contando as ocorrências, talvez resolveria.
Alguns outros detalhes que eu vi no seu código e vou sugerir como melhorias:
1. No parser.Parse você compila a expressão regular a cada chamada, você pode compilar ela apenas na inicialização e reutilizar posteriormente.
2. Pelo que vi, você usou muito append nas slices o que também não é legal, já que muita coisa ali você poderia prever quantos itens você precisaria processar e já reservar a quantidade de itens evitando realocações desnecessarias.
3. Na parte que você monta a string para inserir no SQL, você também montou da maneira mais simples que seria simplesmente concatenando strings, porém existem métodos muito mais eficientes para concatenar string em golang (stringbuilder por ex).
São pequenos detalhes que eu notei, mas que com pequenas modificações devem trazer um bom ganho de desempenho.
Por acaso esse código está disponível em algum lugar?
Gostei do vídeo, muito interessante para quem está iniciando.
Primeiramente valeu mesmo mano, faz tempo que eu não recebo um Code review tão bom. Já aprendi mais coisas pra próxima vez 😎.
Eu não coloco esse projeto público na net porque tenho um pouco de receio da empresa reclamar (não é difícil algumas chegarem aqui hehe), então eu conseguiria tirar o vídeo do ar e não tem código aberto.
Irmão sera que teria como disponibilizar o aquivo de logs? gostaria de estudar REGEX e não sei por onde começar, vlw!
Opa, tá na mão, tive que editar um pouco para remover dados da empresa mas dá pra estudar.
gist.github.com/filhodanuvem/80a799672f455b8f97c43acba7f0076c
Além disso, deixo aqui o melhor conteudo de expressoes regulares, que foi por onde aprendi aurelio.net/regex/
@@Filhodanuvem vc é fera!
Caaara se eu vejo uma expressão regular desse tamanho eu já falo que precisa refatorar essa parte do sistema
Aquela parte do sistema que ninguém quer mexer neh? o problema que a alternativa a regex geralmente é criar um parser, que também não é lá algo muito simples de manter.
Muito top
Obrigado irmão.
Tamo juntoo
Olá, tudo bem ?
Muito legal e parabens pelo video.
Só um ponto que chamou a atenção é no parser dos logs, se você reparar bem os logs tem o formato dos Combined Log Format do Apache que é assim:
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
E poderia ter resolvido talvez com a seguinte regex:
^(?P\S+) \S+ (?P\S+) \[(?P[^\]]+)\] \"(?P[A-Z]+) (?P[^ \"]+)? (?PHTTP/.*)\" (?P[0-9]{3}) (?P[0-9]+|-) \"(?P.*?)\" \"(?P.*?)\"
Boa mano, obrigado pela adição, ficou bem mais simples.
Dúvida, quanto tempo você achou que iria terminar e quanto tempo você realmente usou ?
Fala Antônio, não lembro exatamente quanto tempo levei, pelos commits deram 4 dias mas acho que fiquei pelo menos um dia codando sem commit. Eu sempre peço uma semana porque só consigo focar mesmo no fds.
Em me tire uma duvida seu canal é muito bom eu vou me formar em ADS e vou trabalhar na area um tempo para adquirir xp você acha que depois uma pós em engenharia de software vai destacar no curriculo pois saberei do Hardware e do software? Eu vi em um site que um programador recem formado começa ganhando 3000 mil e com 5 anos de xp o salario é 7000 reais isso é verdade?
Fala Pablo. Então...
1. Não entendo porque você falou hardware. ADS se não me engano é análise e desenvolvimento de sistemas e Engenharia de software também foca em software então não tem foco em hardware nesse seu plano.
2. Não existe nenhuma lei que exija empresas a pagar 3k para um iniciante. Eu não sei como o mercado vai estar quando você começar a trabalhar. Existem juniors ganhando 1k e existem juniors ganhando 3k sim, depende do nível de conhecimento e experiência da pessoa. Esses números que você falou são super comuns na nossa área, agora quando que você vai ganhar depende desses fatores, experiência, conhecimento, cidade, etc.
Da uma uma olhada nesse video e nos comentários, muita gente, inclusive iniciantes falando seus salários.
czcams.com/video/XduwTIHeG7c/video.html
Cara tu e fera, quanto tempo demorou para você chegar nesse nível ?
Vish mano, do meu primeiro hello world até aqui já tem mais de 10 anos fácil. Entrei na faculdade em 2008 (e já tinha feitos códigos antes) entao da 12+ anos. Mas vamos estudando que não tem tempo ruim, quando a gente menos espera a gente já sabe mais do que acha.
Boa tarde meu amigo, tem como disponibilizar o arquivo usado como base para o teste ?
Parabens pelo canal! Mto daora! Descobri agora e to acompanhando!
Gostaria de fazer uma pergunta: eu estou estudando ainda (html>css>js>agora to no react) e acabei de conseguir a cidadania portuguesa. Imagino que sendo assim, conseguir meu primeiro emprego como programadora jr aqui no Brasil ou em Portugal vai ser a mesma dificuldade né? Ou vc acha q um mercado está super mais aquecido q o outro? Pergunta 2: vi em alguns videos que um senior ganha em media 2 mil euros limpos, mais que isso seria fora da curva. Eu poderia esperar 1000 euros pra esse primeiro emprego? Ou menos? Eu vi seu video sobre salários mas achei mto otimista rs Mto obrigada pela atenção em ler tudo isso desculpa tantas perguntas. Um abraço!
Olá Bruna. Valeu pelo suporte.
Pergunta 1: bom você tem uma vantagem, que é poder ser contratada e vir no outro dia mesmo. Em termos de mercado aquecido, o do Brasil tende a ser muito mais até pelo tamanho do país, mas também depende de qual região você tá. Eu gosto da ideia de ter primeiras experiências no Brasil, a não ser que sua ideia seja se muda pra cá com ou sem o trabalho.
Pergunta 2: que bom que você achou otimista, é melhor você ter um pé atrás com as informações da Internet e ser surpreendia positivamente do que chegar aqui e ver que tudo é diferente (até porque na condição atual do mundo, nada vai se permanecer igual por muito tempo). Eu acho que algo perto de 1000 euros pra um iniciante é a faixa das capitais daqui. Mas de novo, sempre se prepare para o pior, e tudo que acontecer de bom será lucro.
@@Filhodanuvem muitíssimo obrigada! :D
Muito Legal a sua solução para o desafio, trabalho como desenvolvedor Java, mas estou estudando Go. Ainda não me aprofundei em concorrência em Go, mas me lembra um pouco a forma que o Elixir lida com a concorrência.
Em meus estudos em Go cheguei a implementar load balancer simples utilizando Channel. Baseado nesse Github muito bacana por sinal github.com/danistefanovic/build-your-own-x/blob/master/README.md
Nossa que foda Luis! Voce tem esse código no github? Seria legal mostrar isso num video! Parabéns.
@@Filhodanuvem Obrigado, Ainda não o coloquei no github, Mas Fica a indicação do código github de Load Balancer e o link que usei como referência: github.com/kasvith/simplelb/ e kasvith.me/posts/lets-create-a-simple-lb-go/, seria muito interessante ver em um video!
Opa acabei de subir o código github.com/luishpcosta/loadbalancer. É basicamente uma copia do original haha apenas modularizado do meu jeito. A intenção era apenas compreender cada parte do load balancing construido por Kasvith.
Boa Luis, vou dar uma olhada aqui. Valeu por compartilhar.
Uma dúvida, na linha 87 do dumper.go ele chamaria o dumper.Dump com chunk vazio se o scanner tivesse scaneando um número de linhas múltiplo do maxChunkSize, correto?
Fala mano, desculpa a demora. Acho que não aconteceria isso porque o for é controlado por um scanner.Scan(). Ou seja, se ele perceber que chegou no fim do arquivo, ele nao teria mais uma volta do for para ter um chunk vazio.
gist.github.com/filhodanuvem/02aa699654c1cc776cb735a591830ab5#file-dumper-go-L6
@@Filhodanuvem entendi, bom conteúdo, abs!
Aí na Europa tem demanda para linguagem go ? Em 2022 vou tirar minha cidadania italiana, quero tentar trabalhar na área de TI ai!
Tem bastante vaga sim, principalmente em uk, o maior desafio que vejo das vagas de go é que a maioria são pra quem já é mais senior, mas é um questão de procurar bastante e se jogar nas vagas.
@@Filhodanuvem obrigado por responder
Fala Filho da Nuvem, tudo certo?
Não conheço muito de Go, não seria possível converter o long em um json, e depois usar para identificar as linhas que seriam salvas no db?
Bom ponto Édipo. Posso estar errado mas o problema é como poderíamos converter o log para um json? ele tava num formato de 1 linha com espaços como no vídeo e eu teria que converter para {ip: X, date: y}. O único modo que vejo pra fazer essa conversão também seria com expressão regular (tem como usar outra técnica de parsing mas é mais complexa). Então como eu não vejo uma fuga da regexp, nem valia a pena converter pra json pra depois fazer o json to struct.
onde posso baixar esse codigo fonte estou começando com go e queria ver um projeto assim
Vou procurar se ainda tenho esse código, a título de informação estou postando outros desafios em go numa plataforma, depois da uma olha se te interessar
www.devgym.com.br/
Tá bom n precisa humilha não.
😂😂
Você passou na vaga? Cuidado, para não ser trote. Ou seja, tem gente que fala que vai contratar, põe um problema que a empresa não ta conseguindo resolver, somente para alguém resolver, depois ela manda uma mensagem dizendo que você não passou.
Ai é ruim!!
Mano, pior que eu fiquei pensando sobre isso nesse caso. Porque era uma empresa muito pequena e vai ver queriam um jeito de acessar os logs hahaha. Mas honestamente se eles querem fazer isso usando banco de dados, eles tão num caminho bem errado.
@@Filhodanuvem O importante é que você tem capacidade o suficiente para resolver. Você fez bem expondo esse problema, se fosse eu , eu ainda colocaria o link da empresa + endereço AHHSHADHASH .
Ultimamente eu estou ligando aquele botão , sabe qual é né?
Hahahahahahahahaha sei como é, essa semana eu já liguei algumas vezes . É mó desgastante fazer esse tipo de teste. Então pelo menos vira vídeo pro canal 🤣
@@Filhodanuvem
Ao menos você não perde nada em fazer os testes. Você ganha, o canal ganha e nós mais ainda.
hehehehe
Agora...
Faz um vídeo criando um Bot para o Telegram usando Go, com teclados inline. Cara... Tô aqui nessa vibe, o meu tá quase pronto. Porém apanhando pros inlines, pois não quero usar package de terceiros.
onde vc comprou os pelucias do php e golang? rsr
Fala mano. O gopher foi nessa loja aqui gopher.golangmarket.com/
Os de php não comprei, foram ganhos em evento, trocas com amigos. Mas se tu buscar por elephpant na net é capaz de encontrar lojas que vendem alguma versão.
@@Filhodanuvem vlw amigo
aprendeu go por onde?
Acho que não tem uma resposta certa pra isso. Comecei com o go tour, depois segui conteúdos na net (canal just for func, todos os canais de conferências, podcast), fui a conferência, fiz um curso chamado ultimate go e escrevi código algumas vezes.