Muitas vezes quando criamos projetos de Desenvolvimento e os vamos hospedar no Github estudando ou ainda na construção da estrutura é comum mudarmos de idéia sobre como a estrutura deveria funcionar. Um exemplo básico é criarmos um projeto de front em Angular por exemplo e depois resolvemos que queremos colocar um Json Server rodando local sem ficar criando um banco de dados. Afinal, o foco e o front-end e apenas precisamos de uma API JSON para usar na aplicação.
Daí nos deparamos com o problema de criamos uma pasta “frontend” e outra pasta “backend”. Então decidimos criar uma pasta para o projeto que agrupe as duas pastas que afinal são do mesmo projeto não é mesmo?
Só que quando fazemos isso e subimos o repositório nos damos conta que dentro destas pastas elas mesmas possuíam seus próprios arquivos do git (.gitignore, ./gitconfig) e desta forma depois de subirmos pro repositório criado descobrimos que estas (ou esta ) pasta está bloqueada para acesso com um ícone de seta pra direita nela. Dentro dela não existe nada. Daí começa a incomodação.
Isso acontece quando o git interpreta estas pastas como “gitlink” pois interpreta a pasta como se ela fosse um repositório “aninhado”. Colocando a seta em cima da pasta para representar esse entendimento.
Como eu resolvo essa bagunça agora?
Primeiro você precisa remover todos os arquivos do Github que estão nas suas pastas. Isso pode levar um tempinho. “. Remova estes arquivos e cole na nova pasta raiz. Que existe tanto no frontend ou no back. Jogue todas as pastas para dentro da Raiz d projeto. Essas pastas ai foram as causadoras do projeto na verdade porque não estavam na pasta raiz antes.
pegue o arquivo “.gitignore” de uma das pastas e corrija os caminhos pra não dar problemas com isso depois. Jogue este arquivo .gitignore para a pasta raiz por fim.
Você não precisa fazer muita coisa para resolver isso. Como tudo que é reversível no Git isso também é. Desa forma o qe eu te aconselho é fazer o seguinte:
Clone novamente seu repositório em outra pasta da sua máquina. E rode o comando:
git clone --recurse-submodules <nome-repositorio>
Uma vez feito isso. O repositório será baixado novamente usando a regra de rescursividade de respositório, deixando a paste livre da recursividade em que se encontra e liberando o acesso a ela normalmente. Mas ainda não acabou.
Você precisa remover o identificador do cache do repositório / branch:
git add <nome-repositorio>
git rm --cached <nome-repositorio>
Agora vc só precisa readicionar o conteúdo que não existia antes na suas pastas do projeto que tinham o bloqueio e os ícones de setas.
git rm add <nome repositorio>
Agora é só subir as alterações e estará tudo resolvido em seu portal do github nos seus repositórios que estavam com esse bloqueio neles. Daí é śo seguir a valsa. add, commit, push pro remoto.
Muitos Dev’s, Designer’s (mais estes) conhecem bem o mouse MX Master 3 da Logitech. Ele leva o título de melhor mouse do mundo para produtividade. Eu comprei meu primeiro Mouse dessa família, na versão 3, não tinha tido nem aquela vontade nem aquela promoção boa pra comprar ele.
No entanto, quando minha vida definitivamente virou para o tão sonhado Home-office. Uma realidade que se tornou para a maior parte dos Devs e galera de TI hoje depois da pandemia o investimento em Equipamentos aumentou consideravelmente. Então eu aposto que muita gente resolveu comprar esse mouse.
Resultado google trends
A Logitech técnicamente usa o Slogan de que o mouse é compatível com Mac, Windows e Linux. Isso é verdade mas ela não faz o Software de gerenciamento do MX Master para Linux. Só faz com que os botões configurados de Fábrica sejam reconhecidos com seus devidos comandos. Isso já é muito bom no sentido de produtividade e compatibilidade mas é até covardia o que você pode fazer com esse mouse em termos de configurações e personalizações no Windows e Mac e não ter isso de fábrica no Linux.
Para resolver este problema, muita gente se moveu de tanta que é a paixão por esse mouse no meio Dev e criou versões alterativas para solucionar o problema. De início, quando comprei e me deparei com esse problema em meu Fedora e PopOS (uso os dois) fui primeiro buscar uma solução e o que eu encontrei?
É bom e também precisa do “RatBag Library” para funcionar bem e reconhecer seu Mouse (https://github.com/libratbag/libratbag). Ele funciona melhor em Distros baseadas em Debian como o Ubuntu, Mint e outros. Eu tentei instalar ela no meu Fedora que também tem versões pra ele mas nunca funcionou bem, perdia as configurações e não sei porque pois não me dei ao trabalho de Mapear o problema mas consumia memória á rodo. No final exorcisei ele da máquina. Nem tentei em Debian ainda (vale à pena vc tentar ai no seu).
Olha. Esse cara aí foi o primeiro que funciona em qualquer máquina. Mas é na munheca mesmo…Pode se preparar pra “programar” ou trabalhar usando a linguagem de configuração nativa dele na sua máquina. Mas não é uma coisa complexa mas não vou mentir, leva tempo mesmo para aprender.
Eu conhecí esse Software e posso indicar até um vídeo onde tem muitos comentários trocados entre mim o dono do canal e outro usuário onde compartilhamos os problemas e as soluções para esse cara aí. Teve o mesmo comportamento tanto no Fedora quando no PopOS. Sendo que no PoPOS eu achei o retorno mais eficiente em relação a inicializar ele com o sistema por padrão. Ele apresenta alguns problemas frequentes com isso, pelo menos na versão que tinha utilizado até então (v0.2.2). Mas ele é bom só dá trabalho e você vai precisar usar terminal, mexer e editar arquivos e salvar eles no Sistema. Então se prepara pra ser feliz (no final é claro:)_
Vídeo citado onde troco bastante idéia sobre o problema com o dono do canal, o Garcia. Aliás, prata fina de mesa o cara.
CEREJA DO BOLO AH! SEMPRE TEM!
Hoje, por acaso eu queria poder usar o mouse com dois notebooks (PoPOS e FEDORA34) ao mesmo tempo e foi a primeira vez que queria fazer isso. Então percebi que isso não era possível porque você pode usar o mouse automaticamente entre os dois monitores no Mac e Windows. Inclusive mover arquivos de um micro pra outro com esse mouse, o bicho é do Baralho mesmo amigo. Altos mouse. Mas o Linux isso não acontece 😦
Mas pesquisando encontrei um programa que na data desse post se tornou o melhor programa pro Mouse Logitech MX Master (pelo menos o 3) no Linux que eu já ví até o momento que permite inclusive que você consiga fazer a mudança do mouse de um PC pro outro sem ter de ficar mudando no botão físico em baixo do mouse, só com o Software mesmo. Dentro todas as outras coisas que os outros ou não fazem ou fazem mal e fazem com 20 linhas de código no mínimo. E o nome dele é…
SOLAAR
Esse aí em cima é o painel dele. Se o seu mouse estiver sincronizado ele acha na hora. Mostra a carga da bateria (real) que o mouse está no momento, porque nos S.O’s eles não fazem a leitura real e correta da bateria desse mouse. Ele controle tudo do mouse. Frequência, rolagem do scroll magnéticom quantidade de DPI, qual tecla e gesto você vai usar pra aumentar ou diminuír esse DPI entre muitas outras coisas. E ali no final você consegue ver em “Change Host”, você consegue mudar o S.O. Ali está o meu fedora, se eu clicar ali vai aparecer 3 opções e os Sistemas conectados ou mouse e com isso você escolha o outro e pronto, tá feito, funcionando perfeitamente aqui entre o PoPOS de um notebook com o Fedora 34 do outro. E o maior detalhe de todos. Você não precisa ficar com ele aberto, pode fechar ele que as configurações ficam registradas e salvas.
Uma outra vantagem pra quem quer ir mais à fundo é que o Solaar também possui assim como o Logiops a opção de se implementar configurações detalhadas e personalizadas com o “Rule Editor”. Aquele botão no final da tela anterior que leva pra essa tela abaixo onde você poderá criar a configurar tudo que quizer extendendo ainda mais as opções dele. Incluíndo personalizações por programas para todos os botões. É um App completão pro MX Master que faz com que você no Linux fique tão satisfeito quanto no Windows.
Eu consegui baixar esse aplicativo na loja do PopOS portanto muito provavelmente no seu Ubuntu vai rolar também. No caso do Fedora não apareceu na loja mas bastou eu fazer uma busca no repositório do DNF “search dnf solaar” no terminal que ele apareceu. Na verdade, se o seu Fedora estiver atualizado basta já mandar instalar com “sudo dnf install solaar” que ele já instala pra você e o bom do Fedora é que ao contrário das distros base Debian ele instala todos os pacotes de dependências junto com o Solaar e o que ele precisa dai é só saír usando.
Enfim. Pra um post que iria falar só do Solaar como dica principal acabei me extendendo mas achei legal compartilhar a experiência de forma resumida pra você que está lendo ele. Depois de gastar uma grana num mouse top que nem esse pra aumentar sua produtividade, vale muito à pena conhecer esse Aplicativo. O único que usei que não dá pal hora nenhuma, e funciona todas as opções.
No mais é isso pessoal. Espero que tenha sido útil este post e que vocês possam aproveitar ao máximo esse mouse que é fantástico.
Com certeza o último post do ano. Ele serve até mesmo pra mim. Não somente pra reforçar o conhecimento mas pra poder também me ajudar a “fixar uma didática melhor” pra poder explicar a alguém que me pergunte. Os exemplos que vejo por aí nunca acho realmente simples de entender então aqui neste post vou deixar o mais “tosco” possível e também o mais simples possível, por isso o “BEM” no título.
Uma coisa básica antes de dizer a diferença entre let e var é que qualquer variável declarada sem let, var ou até mesmo const vai ter um escopo global. Isso é, vai valer em todo seu script.
Primeiro o VAR
var possui um escopo global por padrão. Visto em todo o Script ou dentro de um bloco de função (ou escopo de função). Isso é. Você pode declarar lá no início do seu bloco de código da página (ou seu construtor, por exemplo).
Quando eu falo de declarar dentro de um bloco de função estou falando que uma função pode conter várias funções dentro dela(escopos de bloco) e neste caso declarando var dentro desta função, todos os escopos de bloco dentro dela também vão enxergar esta var. Repare o exemplo tosco abaixo:
bloco_de_funcao() {
var qqCoisa = qqCoisa;
escopo_de_bloco1() {
...
//enxerga a var
}
escopo_de_bloco2() {
...
//enxerga a var
}
escopo_de_bloco3() {
...
//enxerga a var
}
...escopo_de_blocoX...//enxerga a var
}
Dentro do escopo o uso de var é muito comum porque ela já é iniciada dentro dele antes das execuções dos escopos de bloco e desta forma não corre o risco de tomar um undefined na lata, como poderia acontecer com let. Veja:
console.log(souUmaVar);
var souUmaVar = 'qqCoisa'; // vai retornar undefined
console.log(souUmLet);
let souUmLet = 'qqCoisa'; // Uncaught ReferenceError: souUmLet is not defined
Agora vamos falar de Let, esse é um pouco mais explicadinho…
Declarar uma variável let como um var, isso é, como um intuito de “escopo global” não vai dar liga irmão, não funciona.
var Um = 'souVar';
let Dois = 'souLet';
// local
console.log(Um); // souVar
console.log(Dois); // souLet
// Global - vai dar erro
console.log(window.Um); // souVar
console.log(window.Dois); // undefined - com let vai dar erro!
Dentro do if seus estados (if, for, while, etc) o let possui diferentes perfis em escopos de blocos.
var souUmVar = 'valorVar';
let souUmLet = 'valorLet';
if(condicao qq) {
var souUmVar = 'outroValorVar';
let souUmLet = 'outroValorLet';
console.log(souUmVar, souUmLet); // vai retornar outroValorVar, outroValorLet
}
console.log(souUmVar, souUmLet); // vai retornar outroValorVar, valorLet
// Fora do escopo da funcao o "let" reassume o valor inicial dele.
Seguindo essa linha de pensamento, se você tentar fazer uma nova declaração de let no mesmo escopo de bloco (ou função) vai dar erro.
var souUmVar = 'valorVar';
let souUmLet = 'valorLet';
var souUmVar = 'outroValorVar';
let souUmLet = 'outroValorLet'; // Uncaught SyntaxError: Identifier 'souUmLet' has already been declared
// Ele acusa erro na tentativa de passar novo valor informando que o let já tinha valor declarado anteriormente.
Quando falamos de declaração. O let é menos dinâmico ou melhor, ele é mais específico, isso é, vc precisa saber o que está fazendo com ele. Com var é de boas, declarou var dentro do escopo, ela é iniciada na hora que a execução entra nele, então, mesmo que o código em questão ainda não tenha lido a linha onde o valor de var foi atribuido, muito provavelmente var será lido. Já o let não, ele vai dar erro de falta de definição neste caso porque ele tem de ser “invocado” somente depois da linha onde foi declarado.
console.log(souUmVar); // no máximo vai rolar um "undefined", como neste caso.
var souUmVar = 'valorVar';
console.log(souUmLet); // vai dar um erro do tipo não definido, "souUmLet not defined"
let souUmLet = 'valorLet';
Resumindo então, porque pra um textinho tosco já tá bem grande, podemos resumir que:
O Modificador let faz com que o escopo da variável declarada se limite ao bloco de código ou expressão onde ela foi declarada apenas.
O Modificador var serve para tornar a variável local, acessível apenas ao seu escopo de função. Ou global se declarar ela lá no início do seu código ou no construtor do componente por exemplo (definição tosca, era isso né).
Se você declarar uma variável “solta”, sem nenhum modificador atribuído ela acaba tendo sua abrangência de escopo como uma variável global.
Não se esqueçam que o que tô colocando aqui é o básico do básico. Existem muitas interpretações e formas de se implementar fazendo desde obras de arte até cacas enormes com JS, então aconselho ir mais à fundo nisso e ver as pequenas diferenças. Se está querendo sacar legal de JS e se aprofundar aconselho a série do Kyle Simpson chamada “You dont know JS”. E para os chorões de plantão tem de graça e traduzido, legalmente e autorizado pelo Autor numa repo do Cezar Augusto do Github…
Sim.Não existe uma segunda personalidade em mim que se transforma em um Profissional e quando acaba o trabalho se torna o eu pessoal. Isso é loucura pra mim e se chama “Dupla Personalidade”. Mas vamos lá. Este texto não será um texto técnico como na maior parte das vezes então se está interessado só nisso acho que vai perder o seu tempo. É uma reflexão pessoal (e opinião também).
O que aprendi com o ano de 2020 como Desenvolvedor:
Que a demanda alucinada do mercado de TI é uma ilusão (pois os novatos não tem vez).
Que só existe Dev nível Sênior pra cima tamanho conhecimento que o mercado exige.
Que a Síndrome do Impostor é a melhor amiga e maior inimiga do Dev.
Que Flatpaks são muito melhores que Snaps.
Que as línguagens e frameworks e suas modinhas prevalecem sobre o valor do produto quando se vê as escolhas feitas analisando um projeto existente.
Que cursos gratuitos de Desenvolvimento em sua maioria são uma armadilha pra comprar mais cursos.
Que o conceito que era velho é novo e o que é novo será velho.
Que trabalhar remoto é muito mais produtivo e que se você não tomar cuidado nunca irá parar de trabalhar.
Que os recrutadores do segmento de TI estão atormentados na procura por profissionais e as empresas estão se aproveitando deles. Os profissionais também.
Que o “home office” pode ou será muito mais confortável e bem equipado que sua mesa na empresa (mesmo que seja com o tempo).
Que ter Cachorros é mais importante pra você do que para o Cachorro.
Trabalhar em casa pode fortalecer ainda mais seu casamento.
Que não preciso mais de uma IDE parruda, talvez nem mesmo uma IDE para trabalhar.
Que a palavra “inovação” e “disruptivo” são uma obsessão do mercado e ambas estão sendo usadas da mesma forma e muito mal usadas assim como a palavra “urgente” e quando tudo é urgente, nada é urgente. Poucas são as pessoas que conhecem bem o valor real destas palavras. Conforme o tempo vai passando as distâncias para se ser “disruptivo” e “inovador” estão ficando cada vez mais curtos entre o que já existe e o que é considerado “inovador”.
Tempo é sem dúvida a coisa mais importante do mundo. Agora também é a moeda mais valiosa que existe e isso vai ser cada vez mais importante.
Que não existe o segmento de Front-end e Back-end. Só existe Full-stack porque as descrições das vagas agora possuem um item na descrição, o famoso “Diferencial” que você deve entender como “Fundamental” ou “Imprescindível”. E se você é um Front-end tem de saber desenvolver API’s, configurar as aplicações na AWS, manjar de Docker, Heroku, Kubernetes, Testes automatizados, Testes unitários, PostGress, mySQL, PHP, e ter noções de paradigmas de arquitetura e tem de saber deixar uma aplicação rodando no ar em produção depois de configurar o ambiente Dev e homologação fazendo deploy e build com semaphore e Jenkins. Não esqueça também de fazer toda documentação pra compôr aquela “Colcha de retalhos” no final do projeto (Confluence). Tudo dentro da mais impressionante performance declaradas nos Sistemas Ágeis.
Se você for Back-end, o seu “Diferencial (ah!)” é saber implementar styled Components, TalwindCSS, Less, Sass, CSS, Bootstrap, fazer protótipos no Figma, Mind-flow no Miro e editar algumas imagens no Photoshop ou no Gimp(porque vc usa linux), também saber todo o restante descrito antes no Front-end e mais um pouco.
Que a ausência de especialistas qualificados para a enorme demanda do mercado é que para ser bom em todos os items acima e realmente ser Sênior, demanda tempo. Não existem “Crianças Índigo” o suficiente para lhe entregar todo esse conhecimento em apenas dois anos de profissão, isso é uma minoria privilegiada da novíssima geração que tem o Dom incrível para tecnologia. Mais fácil vai ser o mercado procurar na Inteligência artifical o profissional que tanto desejam.
Que não adianta a empresa criar vários mimos, se declarar “disruptiva”, espalhar pufs, salão de jogos e toda essa balela se ela continuar com processos tradicionais, continuar morosa nas mudanças, burocrática nas necessidades. Os profissionais se cansam em vão em bora. Aparências são armadilhas, não sustentam pessoas.
Profissionais da nova geração (eu não sei aonde essa geração começa) não vão mais parar de mudar de empresas. Não adianta mais. Eles vão receber ofertas e vão sair. O tempo do profissional nas empresas é cada vez (e será) mais curto. A galera jovem vê empregos como projetos, só mudam. Eles não sabem o que é fazer carreira numa empresa. Esperar pra ganhar um salário maior, ocupar uma posição acima. Eles vão simplesmente buscar a felicidade neste sentido em outro lugar. Salário maior também.
O que acredito para 2021 (…em diante)
O modelo Home office será o modelo de TI:
Salvo algumas funções específicas, o modelo de “Home Office” será o modelo padrão. Por mais força que se faça para contrariar a razão, tanto pelas empresas ortodoxas quanto por profissionais que não gostam do modelo de “Home Office”, na minha humilde opinião vai ser o padrão para TI, mais ainda Desenvolvedores.
As empresas que insistirem nisso perderá para outras empresas toda sua força Sênior (salvo os que gostam do modelo tradicional) para outras empresas. Inclusive pagando mais neste processo, porque o fato de trabalhar em casa não justifica pagar menos pelo profissional até memso porque sinceramente hoje, no início do processo ele trabalha mais do que no escritório até esse processo de trabalho em casa se tornar mais maduro, isso ocorre naturalmente só que de forma mais agradável. Mas o modelo de trabalho em casa é melhor em vários sentidos e depois de experimentar coisas melhores, voltar para as piores sem uma necessidade realmente relevante não tem mais como. Não tem como lutar contra fatos.
Não preciso entrar em detalhes porque todos ai já devem saber os benefícios. Mas a maior produtividade é um fato e não adianta colocar a culpa nas crianças, porque se em algum caso elas estão atrapalhando o trabalho é por culpa dos responsáveis que não sabem administrar isso direito (ainda) ou por conta do fato de não estarmos tendo Aulas nas Escolas. Porque, quando os Pais trabalhavam nas empresas, onde as crianças ficavam?
Eu fiz um calculo por baixo este ano e com certeza no modelo Home office meu tempo ganho com produtividade aumentou em 40% fácil. É realmente impressionante como perde-se tempo fazendo coisas banais como ir ao trabalho. E não somente o tempo de ida e volta mas o tempo que você leva para “aquecer” e estar realmente produzindo. Estou falando de chegar no escritório, tomar o cafezinho, conversas preliminares até sentar e estar realmente produzindo. O Rito matinal para produtividade se tornou algo particular e pessoal e isso acelera tudo, o ambiente, os equipamentos que você escolhe pra você e a empresa não tem como fazer isso personalizado e faz toda diferença também. Outra questão é as interrupções que são menos frequêntes e com hora marcada geralmente. São vários fatores mas nem vou entrar em detalhe aqui porque hoje não é mais novidade pra ninguém. Apenas vou dizer que o cuidado com a organização do tempo, estudo e evolução são duplamente necessários, neste ponto é fácil se perder mas o fato de ter de cuidar disso faz com que você se torne um profissional melhor.
Outro fator importante é que remotamente percebi um interesse maior entre os profissionais de desenvolvimento em entender o negócio do projeto onde trabalham e não somente sentar pra codar. Alguns vão argumentar que no ambiente de trabalho as pessoas interagem mais. Eu concordo até certo ponto. Nas empresas onde trabalhei os desenvolvedores ficavam o tempo todo com fones de ouvido, tentando e lutando para se concentrar no que estavam fazendo. A maior parte não gostava de ser interrompido de forma pessoal e a maioria pedia para mesmo estando a 4 metros de distância dele mandasse mensagem pela ferramenta oficial da empresa, como o slack ou whats, etc. Na maior parte das vezes também não respondiam na hora, porque não olhavam nos seus talkers com frequência, sabiam que se fosse urgente, alguém iria lá na sua mesa lhe “incomodar”. Agora, remotamente todos respondem mais rapidamente porque ficam de olho nos talkers e além de justificar esse comportamento, agora é feito com mais eficiência e velocidade.
O fato de estarmos isolados também nos está fazendo ser mais interativos e resilientes, não somente com nosso time mas com outros projetos, as comunidades. O aprendizado também está sendo feito com maior qualidade porque com menos interrupções, mesmo demorando mais por não termos ali pessoas do lado pra perguntar, fazemos isso com mais concentração, com mais cuidado e qualidade e com isso aprendemos de forma mais sólida, errando menos e quando metendo a mão na massa fazendo com mais qualidade nosso trabalho.
Então, você pode não concordar comigo mas aposto minhas fichas nisso. As empresas também ganham em vários fatores. Entregas no prazo, menos custos com mobiliários, economia enorme com água e luz entre vários outros fatores. Com isso temos inclusive uma expansão no conceito de trabalho presencial. O Coworking pode se tornar uma prática muito mais saudável que uma empresa. A empresa pode abrir mão de um ambiente corporativo e contratar mensalmente um espaço no Coworking e com isso não somente disponibilizar um espaço para trabalho presencial para seus times mas também fazer com que seu time conviva com times de outras empresas, expandindo o networking, conectando pessoas e idéias, criando parcerias possíveis entre muitos outros fatores.
O mundo está mudando. De toda tristesa que surgiu com o Corona Vírus, muitas coisas boas virão na minha visão. O Ser-humano tem essa característica, ele evolui muito mais na desgraça que na alegria. Somos seres naturalmente acomodados, atribulações são o que move nossa espécia pro caminho certo ou melhor.
O Mercado de trabalho em tecnologia será Global e será Pessoa Jurídica:
As empresas já começaram aos montes este ano e vão continuar. Contratação de pessoas de todos os lugares do mundo para todos os lugares do mundo. Brasileiros trabalhando para empresas Canadenses, Neo-Zeolandeses, Americanos, etc. O “trabalho remoto” virou realidade e no ano que vem vai dominar o mercado de TI. Principalmente Devs primeiro e o restante vai junto depois. Isso vai obrigar as empesas nacionais a oferecer salários melhores, a segurança no emprego ainda é uma dúvida se vai aumentar ou diminuir na minha mente mas com certeza pra mim é uma realidade cada vez maior e no ano que vem vai cravar no chão da realidade de uma forma cruel pra muita empresa ai que não quer ver a realidade.
O dinheiro físico vai começar seu caminho de extinção:
Tirando o processo de injeção de grana na economia usada pelos Bancos Centrais que também faz parte dessa mudança e tem enorme interesse, nosso processo de uso de dinheiro impresso já perdeu o sentido. Apenas nossa resiliência mantém ele funcionando mas ele vai acabar. Não posso afirmar que será em 2021, mas muito provavelmente esse processo vai iniciar com mais força esse ano. Para os Governos o custo é quase zerado com relação a criação de dinheiro, o controle é muito maior. Transações eletrônicas não tem como esconder em 95% dos casos. Portanto o recebimento de tributos é muito mais eficiente, incluindo Imposto de Renda, etc. É um movimento natural que acho que não tem jeito. Se você acha que eu estou falando besteira basta pesquisar no Youtube rapidamente vai ver milhares de vídeos por ai. Vou até deixar um bem relevante e curto de 2017 do influente José Gomes Ferreira.
A profissão de Programador vai acabar então comece a se preparar para isso:
Na minha visão o programador somente existe porque as inteligências artificiais não conseguem trabalhar direito com abstrações. Mas com a evolução cada vez maior das tecnologias em Ciência de Dados e IOT, a convergência entre estes pontos além de ser ascendente vai transformar o programador de hoje em algo obsoleto. Os frameworks vão inflar, as complexidades vão aumentar e as Inteligências artificias e suas tecnologias vão se disseminar no mercado de forma vertiginosa e em breve elas farão os programas, elas irão programar baseadas em parâmetros e também nos cruzamentos de dados chegando as suas próprias conclusões até o ponto que elas por conta própria criaram aplicativos, sistemas porque perceberam antes de nós a necessidade dele. As novas necessidades surgiram e boom, uma solução nova será criada para atender isso. Você vai achar isso normal. Como olhar as horas porque quer saber que horas são.
Como desenvolvedor deve-se começar a investir nesse entendimento agora, para que você possa fazer sua transformação de forma fluida, leve e principalmente, a tempo porque ele agora anda muito mais rápido, não é mais ditado por nós como sociedade e sim pela velocidade da tecnologia e ela é muito mais veloz do que podemos imaginar porque ela duplica sua velocidade conforme vai se evoluindo, então aceita que esta profissão é assim, que a Síndrome do impostor é sua amiga e toca ficha.
A Pandemia talvez nos tenha salvado à longo prazo:
A imprensa em geral fica romantizando as relações humanas e como as pessoas querem voltar a normalidade. Mas o que eu ando vendo não é isso. O que eu ando vendo é um mundo dando uma freiada e as pessoas gostando disso.
Menos de muita coisa ruim da superpopulação e da loucura desenfreada do consumismo. E isso pra mim é um fato. O cosumismo diminuiu. Se tornou mais saudável. Muita coisa ruim aconteceu, com os negócios e com a economia mas a longo prazo, na minha opinião, nosso formato de consumo, não se sustenta. Não passaríamos pelo “grande filtro” do “Paradoxo de Fermi” se continuássemos assim. No cenário onde vamos consumir todos os recursos que existirem no nosso ambiente até que sejamos extintos. O que eu acho é que a Pandemia iniciou o freio desse pensamento nas pessoas, pelo menos em grande parte delas, pararam pra refletir sobre isso em suas vidas e isso vai se refletir no nosso futuro. Isso tudo é uma viagem sem drogas, mas se você deixar de lado e pensar nisso com seriedade alguma parte de você vai concordar com essa possibilidade. Eu acho que 2021 vai ser pra mim, um ano onde muitas dessas reflexões vão começar a fazer parte de nosso comportamento, dos negócios e do consumo como um todo. Eu tenho essa esperança.
Disclaimer: Não estou aqui escrevendo pra agradar a todos. Essa é uma visão ainda não completamente formulada na minha mente. Tudo é muito dinâmico hoje mas o início desse pensamento veio à minha mente e queria escrever essas reflexões antes de virar o ano né. Não fique bravo comigo se tiver outra opinião, isso realmente é muito chato. Gaste seu tempo refletindo porque você fica zangado com opiniões diferentes da sua se for esse o caso. Vai ganhar muito mais com isso.
Estou passando rapidinho porque depois de tentar fazer um projeto rodar na minha máquina onde estava rodando o Ubuntu 20.04 que uso a vários anos e é, pra mim, o melhor que existe. Tive de formatar minha máquina porque fiz zorra demais no sistema e resolvi usar novamente (porque já usei em máquinas de trabalho algumas vezes) o POPOS 20.10.
A primeira impressão é muito boa. Algumas funcionalidades são muito legais, como um gerenciador de janelas, como na interface I3W você consegue gerenciar janelas quando usa esse modo na sua interface. Basta clicar no ícone na barra superior do sistema.
Clicar na janelinha acima que as bordas estão em vermelho ao lado direito do relógio.
Também existem vários outros detalhes e o mais importante é a estabilidade do Sistema de base alterada do Ubuntu e que tem um excelente gerenciamento de memória, processamento, coolers e outros pontos do sistema. Mas não estou aqui para falar sobre o PopOS 20.10, pra isso o Youtube tá cheio de vídeos pra você conhecer.
Eu vou falar sobre coisas que geralmente você não encontra lá. Primeiro que ele usa o FlatPak ao invés do Snap (que eu realmente não entendo porque insistem nele no Ubuntu), mas também respeita sua escolha com pacotes deb. A central de software dele trabalha muito melhor que no Ubuntu. Rápida, cheia de opções, etc.
Mas a primeira dica é quando for fazer o download. Se você não possui uma placa NVidia na sua máquina não tem porque ficar instalando os drivers dela. Então quando for fazer o download, olhe com cuidado e veja que tem duas versões. Uma dedicada para placas Intel e outra pra Placas NVidia.
Se liga nos dois campos de download. Ele geralmente já detecta e indica.
Problemas com Renderização de fonte no Google Chrome com PopOS.
Agora vem o prato principal. Você, vai reparar como eu quando instalar o Google Chrome que a fonte da maior parte dos Sites que não possui uma fonte definida ou é implementada de forma dinâmica fica estranha. Tipo comprimida (eu acabei não dando print nela pra mostrar errada).
Isso acontece porque o PopOS 20.10 não colocou (ainda) na Distro a fonte “Arial”, usada pelo Navegador para renderizar fontes desconhecidas nas páginas. Então para resolver, você só precisa instalar a fonte “Arial” no seu PopOS.
Pra você não ter o trabalho de ficar procurando ele pra baixar eu vou deixar aqui meu repositório de fontes do meu github. Eu tenho esse repositório com fontes que uso no sistema e também para editores de código e scripts. Enfim. Segue ai e vc pode clonar ou baixar e instalar na sua máquina. As fontes Arial estão lá pra você resolver também seu problema.
Se vc não sabe como fazer isso, existem duas formas. A primeira é clicando em cima da fonte duas vezes e o gerenciador de fontes abre e vc clica em instalar.
A outra forma é criar uma pasta chamada “fonts”, dentro da pasta “.local/share/” da sua “home” e jogando as fontes lá dentro. Mas para que o sistema possa enxergar as fontes você deverá rodar no terminal o comando abaixo:
sudo fc-cache -f -v
Assim o Sistema vai rodar o recarregamento de leitura das fontes de texto do sistema. Depois disso feche e abra novamente seu Navegador Chrome e “Voilá”. Seu Chrome estará com as fontes bacanas novamente.
PS: No caso deste problema, não vai adiantar personalizar as fontes do chrome em “Aparência” porque neste caso é só para as fontes de texto das janelas e menus. Este é um caso específico e só assim mesmo pra resolver. Porque até mesmo se você editar o arquivo CSS do Chrome na sua pasta home dentro de config, quando ele atualizar vai sobscrever o arquivo. Além do mais várias outras coisas podem usar e aí melhor já ter.
Você também pode esperar que os Desenvolvedores do PopOS arrumem esse problema nas próximas atualizações porque já abri uma Issue para resolver isso com eles.
No mais é isso rapaize…Grande abraço e se não rolar mais um post em breve, Feliz Natal e Ano novo!
Coisa simples… Tenho visto alguns códigos CSS aqui, coisa simples nos reviews e muito profisional ainda confunde o “initial” e o “inherit” do CSS.
O “Inherit” checa a existência de propriedades do elemento Pai (mais próximo) que podem afetar à ela antes de atribuír seu valor inicial (:root). Se esse valor pai tiver essa propriedade ele vai aplicar ela a sí mesma.
O “initial” não tem este comportamento. Ele vai lá na raíz (:root)das propriedades do navegador e aplica o valor desta propriedade a sí mesma.
Não caia na armadilha de achar que pode usar o “initial” como uma forma de resetar tal elemento. Ele não serve para isso pois cada navegador possui seu padrão de elementos gerando a possibilidade de um resultado inesperado.
Eu sempre aconselho o uso de resets CSS numa aplicação. Desta forma você solucionaria este problema sabendo extamente como vai usar o “initial” e caso seja necessário durante o processo de desenvolvimento vc vai lá e adiciona tal valor à propriedade. CSS é uma bola de neve nervosa, nunca ignore ele na sua aplicação. 😉
Depois daquele clássico tempo sem escrever nada, porque profissional de TI de verdade nunca tem tempo porque faz o que gosta então não faz mais nada. Eu resolvi compartilhar com vocês o porque vocês deveriam conhecer o Next.JS 10 e começar a trabalhar com ele.
Eu mesmo não uso tanto o NextJS mas isso vai mudar com certeza à partir de agora. Os caras realmente se superaram e poliram esta ferramenta a um nível muito alto. Tudo muito bem pensado, muito bem planejado.
Pra começar a integração criada pela Vercel do Github com a plataforma deles consegue te entregar uma esteira de desenvolvimento de sistema completa, completa mesmo, Com Deploy em produção, stage e dev, rodando sua aplicação, tudo de graça. Isso mesmo. Os caras te dão um laboratório automatizado de graça pra você testar sua aplicação !
Vou mostrar aqui um exemplo. É coisa simples. Cria lá no seu Github (se você não sabe do que eu estou falando é porque está no Blog errado) então clone ele para sua máquina (se se empolgar depois muda ele o deleta e faz outro). Clonou? Então blz!
Uma vez clonado vamos abrir no seu Editor de Código predileto e vamos criar um projeto nextjs nele. Roda aí…
npx create-next-app
# ou
yarn create next-app
Daí é aquelas perguntas padrão de quando criamos um projeto né. Qual o nome (lembre-se que não pode ser camel case os nomes agora) e ele vai instalar tudo.
Você vai reparar que ele possui o comando “yarn dev” e é ele que vai rodar o projeto no servidor de desenvolvimento dele. Esse atalho, está sendo executado lá o “package.json” dele. e nada mais é que o comando “next dev”.
Agora explicando rapidamente aqui a estrutura dele. O Next.JS salva todas as suas páginas dentro da pasta “pages“. Você sempre deve salvar suas páginas lá dentro e o Next entende que cada uma dessas páginas é uma rota de seu sistema então você não precisa se preocupar com isso.
Sai declarando que a navegação é com ele, muito massa isso né. Mas deve se atentar que isso só ocorrerá automaticamente se for feito na pasta “pages”.
Por exemplo se no seu projeto você criar uma pasta chamada “menu” e dentro dela criar um arquivo chamado “menu.js”. Na sua URL localhost default do projeto esta página vai ficar… http://localhost:3000/menu/menu
O NextJS o navegador não carrega a página inteira e a navegação do lado do cliente funciona em seu estado DOM. Então por exemplo. Se você colocar um fundo amarelo em uma página (componente no caso) no inspetor de elementos do navegador e navegar nela indo para outra página e voltando vai perceber que quando voltar a cor que injetou no inspetor persiste. Mas atenção, é necessário usar os elementos do NextJS. Por exemplo se você usasse a tag “a” ao invés da tag do NextJS para navegar, a “Link” perderia a cor porque ele carregaria a página inteira novamente. Não se esqueça que “a” é um tag do HTML que dispara um comportamento nativo do HTML junto ao browser.
Outra coisa muito legal quando se trabalha com NextJS (e cara, o velho modelo estático vai voltar com tudo na minha opinião) é que carregar apenas o código da página solicitada também significa que as páginas ficam isoladas. Se uma determinada página gerar um erro, o restante do aplicativo ainda funcionará.
No caso do "className" do React. Se você adicionar ou quiser ou precisar usar ele precisará fazer isso externamente usando a clássica tag "<a>". Você não deve usar className com o NextJS.
Exemplo:
import Link from 'next/link'
export default function LinkClassnameExample() {
// To add attributes like className, target, rel, etc.
// add them to the <a> tag, not to the <Link> tag.
return (
<Link href="/">
<a className="foo" target="_blank" rel="noopener noreferrer">
Hello World
</a>
</Link>
)
}
Além disso, um Sistema rodando em produção com Next.js, sempre que o componente possuir a tag “Link” carregar no navegador o Next.js pré-busca automaticamente o código para a página vinculada por trás dos panos. Quando você clicar no link, o código da página de destino já estará carregado em segundo plano e a transição da página será quase instantânea!
Outra coisa é quanto o arquivo “_app.js”. Nele você deve colocar sua importação de CSS, seja Bootstrap, seja um tema personalizado de alguma library escolhida.
Nele também existirá a configuração padrão da Aplicação retornando o componente principal (que pode ser manipulado e personalizado) e as propriedades desta componente que importa todo conteúdo incluído na index ou qualquer outro componente da aplicação. Ele funciona como um componentes de todos os componentes incluídos na pasta “pages”. Isso também é muito bom porque você poderá “esconder” seus componentes encapsulados pelo Javascript.
O Estilo global é importado no _app.js
A pasta “.next”, assim como a pasta “.node_modules” não deve ser enviada para seu repositório e apenas por curiosidade ela possui a pasta de rotas do projeto “cuspida” pelo NextJS na compilação de sua aplicação digamos “dev” dentro do projeto. Em “public” que segue o mesmo conceito do ReactJS possui os ítens como imagens públicas como favicon, e logos.
O resto é como manda a canja de sempre. Pasta Styles, etc.
Os Módulos CSS geram automaticamente nomes de classe exclusivos . Contanto que você use os Módulos CSS, você não precisa se preocupar com conflitos de nomes de classe.
Além disso, o recurso de divisão de código do Next.js também funciona em módulos CSS . Isso garante que a quantidade mínima de CSS seja carregada para cada página. Isso resulta em tamanhos de pacote menores.
Os módulos CSS são extraídos dos pacotes JavaScript no momento da construção e geram .cssarquivos que são carregados automaticamente pelo Next.js.
“_APP.JS”
Uma curiosidade sobre o “_app.js” é que você pode ativar a renderização dinâmica (eliminando a estática) usando o método “getInitialProps”. Então apenas a Otimização estática automática será desativada, porque se você estiver usando “getInitailProp”, significa que a página não é estática (requer dados adicionais do servidor para renderizar), então Next não pode gerar um arquivo html estático para isso. Então cuidado em suas decisões para que você não tenha uma aplicação React dentro do NextJS só ali firulando e perdendo o propósito principal do NextJS que é justamente gerar páginas estáticas no lado cliente, carregando absurdamente mais rápido que aplicações de base dinâmica. Neste caso aconselho usar mesmo um VueJS ou o ReactJS mesmo. Veja o exemplo abaixo, básico de implementação:
NextJS 10 agora manipula imagens, se aproximando do Gatsby mas na minha opinião está melhor. Você joga uma imagem de alta resolução e principalmente se você estiver usando o ambiente da Vecel com sua aplicação ele trata a imagem deixando ela otimizada para qualquer dispositivo mostrando uma imagem para cada dispositivo reconhecido.
Um exemplo básico de implementação de imagem no NextJS 10 é o abaixo:
import Image from 'next/image'
function Home() {
return (
<>
<h1>My Homepage</h1>
<Image
src="/me.png"
alt="Picture of the author"
width={500}
height={500}
/>
<p>Welcome to my homepage!</p>
</>
)
}
export default Home
Um exemplo pode ser visto na documentação oficial:
Não é meu objetivo aqui ficar explanando muito sobre o NextJS 10 mas mostrar uma implementação básica e colocar em produção real disponível com esteira de produção profissional mas vou deixar uns links mastigados da documentação mostrando várias vantagens e novas implementações do NextJS. Neste link tem tudo que vc precisa pra aprender rapidinho…
Mas vamos voltar a nossa festa. Pega essa aplicação que criou em NextJS e faz o push (espero que hoje não seja sexta, 18 da tarde…). Não esqueça de dar push no branch principal “main”.
Com esta aplicação criada e push feito, vamos seguir para o próximo passo que é criar uma conta no site da Vercel.
Eu aconselho você fazer o login usando sua conta do github porque facilita demais. Não se preocupe que não vai ter de pagar nada que é “Fair Use”.
Depois de se logar ele vai te pedir pra escolher o formato de criação do projeto, escolha o github. O Quadro do lado esquerdo:
No quadro seguinte você deve copiar a URL do seu repositório lá na barra de URL do browser (ou no clone) e colar no campo:
Depois confirma sua conta (pessoal ou outra, dependendo de quantas contas tem) e esta escolha vai se repetir no quadro seguinte, é pessoal então nem vou mostra nada.
No quadro seguinte você deve escolher a permissão e escolher no outro quadro se você vai liberar acesso para todos os repositórios ou só pro desse nosso post. Eu aconselho escolher a segunda opção até mesmo por ser mais seguro. “Only select repositories”. Ali você escolher o repositório que criamos.
Agora é só mandar instalar …Ele vai mostrar o quadro onde ele informará que reconheceu uma aplicação NextJS. Daí manda vê clicando no Deploy.
Agora vem o mais bacana. Não vai zapear agora porque ele vai te mostrar o deploy de sua aplicação no repositório em tempo real. E vai ser muito rápido, isso é, sua aplicação já está fazendo deploy pra produção.
Uma vez finalizada (viu. Nem deu tempo de zapear…). Vc vai receber a página de congratulação que tudo deu certo.
Quando nesta página você vai reparar que ele te mostra dois botões. Um pra visitar a página online (Site mesmo) da sua aplicação disponível e otimizada pra qualquer lugar do mundo e também o Dashboard da sua aplicação. Cara, o que dizer tá tudo pronto!
Uma coisa muito massa é que se vc criar outro branch como por exemplo, branch “dev”. Ele também fará o mesmo processo para ele. Você não passará por problemas de indispobilidade pois se você subir branchs novos ele não vai tirar nada do ar pra subsituir. Só quando terminar a o novo estiver 100% é que ele vai trocar, de forma invisível. Os outros branchs terão outros endereços assim você poderá tratar sua aplicação de forma individualizada por feature.
Você ainda pode pensar que essa solução mesmo sendo de graça não vai te entregar performance mas vai. Eles fizeram testes à rodo na solução deles com milhares de cargas por muito tempo e ele aguentou sem botar a língua pra fora. Pode acreditar que vai ficar top.
Eu vou deixar aqui um vídeo do Youtube do amigo Felipe Deschamps que faz um processo semelhante que também é o mesmo processo da documentação oficial do NextJS. Caso você seja meio preguiçoso de ler mas amigo, deixa essa preguiça de lado e vai lá na documentação oficial. Nada é melhor que a documentação oficial das soluções. Principalmente neste caso que foi feita de um jeito tão divertido pelo time do NextJS.
Boa diversão…Provavelmente Feliz ano Novo porque não vou ter tempo de fazer outro post nesse Ano ainda. Fui!
Eu sempre vejo o pessoal se perguntando quando usar map, reduce ou filter então mesmo tendo muita coisa por aí falando sobre resolví criar este post explicando da forma mais simples possível e quem sabe ajudar você(s) nisso e ainda fixar melhor o conceito.
É importante reforçar que existem: “Arrays, representados por []” “Objetos ou listas, representados por {}”
Basicamente…
MAP : Corre/ pega/ mapeia cada um dos elementos do array e te retorna aplicando uma determinada regra um novo Array sempre com o mesmo tamanho.
No exemplo abaixo eu estou pegando cada um dos elementos do Array Inicial e multiplicando cada elemento dele por 2.
Codificando ficaria:
const array = [2,4,5,10,8,1];
function dobro(num) {
return num * 2
}
const novoArray = array.map(dobro);
console.log(novoArray);
// o retorno deverá ser [ 4, 8, 10, 20, 16, 2 ]
FILTER: Basicamente corre os elementos de um array implementando as regras para lhe gerar outro Array com os resultados desta filtragem. Este array não necessáriamente precisa ser do mesmo tamanho.
No exemplo abaixo o filtro é aplicado em um Array, selecionando aqueles elementos que são maiores ou iguais a 5. Com isso temos os retornos “true” somente para 3 posições do Arrray, a 2, 3 e 4.
REDUCE: Vai correr os elementos de um Array os somando. Para isso ele usa dois parâmetros. Um acumulador e o próximo elemento do Array.
(acumulador, elemento)
Esse acumulador poderá ser um array ou objeto ou string ou número ou qualquer coisa que você queira colocar pra esse acumulador. O Elemento será cada um dos elementos do Array que está sendo aplicado o reduce.
Se não existir um valor inicial ele utilizará os dois primeiros elementos do Array para inicializar as operações de reduce.
No exemplo abaixo bastante simples, faço um reduce em cima de um Array onde inicializo o valor do acumulador com “0”. Ele vai efetuando a soma de todos os elementos do array junto ao acumulador.
Neste caso acredito que o código puro mesmo deixe mais fácil entender…
const array = [2,4,5,10,8,1];
// a = acumulador e b = elemento
a = 0;
function somar(a,b) {
return a + b
}
const novoArray = array.reduce(somar)
console.log(novoArray);
// resultado esperado 30
Espero que tenha conseguido deixar esses conceitos mais claros com estes exemplos super simples porque menos é mais 🙂
Cara. Achei que tinha abandonado esse meu Blog. Um tempão e nada de postar. Vida loka essa nossa de profissional de TI.
Nessa vibe aí resolví voltar a postar escrevendo sobre algo que tenho observado muito e realmente me pergunto porque isso não muda. Eu comecei na minha profissão em meados da década de 90 e pra quem for falar que eu sou vovozão da TI já pode ir se f*%%@$@!
Naquela época o mercado cometeu o erro que paga até hoje de estimular que o profissional que sabia de tudo um pouco era o mais valorizado porque como estávamos no início de tudo o cara teria de fazer tudo. Consertar computadores, passar cabos de rede, montar servidores, controlar a rede de usuários e mais. Isso era valorizado nas empresas e esse cara era o full-stack da época.
Mas hoje, depois de tantos anos o mercado continua pagando por este comportamento pois fica afirmando que não existe mão de obra qualificada. São milhares de anúncios de vagas. Mas também são milhares de profissionais por ai. Ao meus olhos, toda geração, praticamente 80% dos jovens de hoje que estão na versão Y e Z querem ser Desenvolvedores. Virou moda. É como uma extensão de ser “gamer”. Vc tem de ser gamer e se formar em TI, ser programador, hacker, em suma, um fucker!
Mas será que o mercado sabe o que está fazendo? Na minha opinião com certeza não. Hoje, o profissional quer se especializar (ele já queria isso antes). E o mercado também quer especialistas, em tudo!
São anúncios de vagas para Front-end que querem que você saiba Java, Banco de dados, Python, Laravel. São vagas de Back-end que querem que você saiba React, tenha noções de CSS e que tenha o dom de relações interpessoais, seja carismático e que tenha boa habilidade pra trabalhar em equipe. Cara, na boa. Como um desenvolvedor back-end consegue trabalhar hoje numa empresa (principalmente as moderninhas, aquelas com puf e playstation que ninguém usa) sem se isolar com fone de ouvido pra produzir? O mercado continua a estimular frenéticamente que o profissional de TI, no caso deste post Desenvolvedores saibam tudo. As vagas Full-stack estão cada vez mais em alta. Começaram ali, no cantinho, uma ou outra mas agora elas estão em todas as descrições de vagas mesmo que o título seja outro como Front ou back-end. Se não estiver nas descrições explícitas elas se camuflam na sessão mais abaixo, no final. Os famosos “Diferenciais” ou “Você terá um diferencial se souber…” e vem toda a descrição daquilo que faltava pra te transformar num full-stack.
É claro que existem as mínimas excessões de anúncios, estou falando da maioria mas a maioria é o estímulo de mercado. E ouzo dizer que estes anúncios, são aqueles que perceberam que o profissional anunciado não existe ou que se exitir( pois tem aquele pessoal do futuro que nasce hoje né, aquele pessoal evoluído, que não aprende, apenas lê e entende tudo e aprende em uma semana aquilo que você demora 1 ano pra aprender ou é super-dotado no bom sentido), vai querer receber 20 mil por mês e muda a descrição da vaga para encontrar algo mais realista para sua necessidade porque o prazo está curto, a contratação tem de ser rápida.
Eu vejo isso demais hoje em dia. A coisa piorou com a onda de terceirização para contratação destes profissionais pelas empresas. Estou falando dos Head hunters que já é moda lá fora e agora no Brasil está se tornando coisa comum. As empresas contratam uma empresa especializada em contratação e aproveitam que estão pagando e abusam das exigências junto a essas empresas, quanto ao profissional a ser contratado de forma que faz com que essas empresas tenham de se virar nos 30 pra conseguir algum profissional que chegue ao MVP (mínimo produto viável) das exigências que as empresas querem. Uma tremenda sacanagem com empresas especializadas que são muito importantes para o mercado, obrigando a fazerem seu trabalho sob pressão da sobrevivência de um cliente focado no impossível.
Não diferente tem os anúncios disfarçados. São aqueles anúncios cheio de frases que parecem ser criadas por Coachers Quanticos. Falando das maravilhas de uma empresa e uma descrição “geek” da vaga mas quando se vai na entrevista a pessoa que faz contigo chega de “terninho psicológico” te tratando de forma mais tradicional possível com aquelas pergutinhas clássicas e toscas de modelos de entrevista criados por pessoas que não fazem a menor idéia do que é ser um Desenvolvedor.
Quando se entra nessas empresas se descobre na maior parte das vezes que são uma zona, são “A Terra prometida que nunca chega”. Os processos, os prazos, as estimativas, as Sprints e os Kanbams??? porra meu, monitor tivesse 2 metros de área visual não dava pra ver todos os cards. Papéis mal definidos quando o são, pessoas passando por cima de papel dos outros rompendo limites de todos os lados. É tudo uma grande zona na maior parte das empresas mesmo na realidade e você entra num inferno na maior parte das vezes ganhando pouco, vivendo pouco, o puf vazio, a mesa de sinuca impenando por falta de uso, o Playstation já tá cansado de rodar os mesmos jogos porque no fundo poucos usam. Aquele tobogâ. PQP, joga aquilo fora, só ocupando espaço pra foto de instagram.
O que eu acho disso tudo é que temos um mercado enorme de profissionais com potencial para serem profissionais de desenvolvimento de qualidade, mas que leva tempo, tempo para absorver conhecimento, tempo para conhecer o negócio, tempo para se tornar produtivo. As empresas precisam deixar de lado esse anseio de conseguir milagres pagando pouco e começar a ir no foco de solução dos problemas, cobrar do governo impostos menores ou recorrer a métodos de contratação onde se pague melhor e se perca menos dinheiro com impostos. Elas tem condição de fazer isso.
O mercado deve parar de obrigar as pessoas, ou melhor, os profissionais tratados neste post como máquinas de trabalhar, de alta produtividade de “Sonho do Kanbam” e começar a focar suas necessidades reais para seus projetos, saber planejar equipes bem estruturadas e fazer delas produtivas da forma correta.
É necessário qualificar a mão de obra que já existe no mercado mas saber que isso leva tempo e que tudo que podem fazer é ter paciência para que esse quadro mude porque fantasiar que ele vai mudar via anúncios e “Sonhos de Sol e Sarfi”. É necessário pegar profissionais com menos exigências e pagar salários melhores porque não dá pra se tornar um profissional melhor e estudar e aprender mais e mais tendo de se preocupar se vai conseguir pagar suas contas, se vestir, trocar o equipamento de trabalho para poder estudar, pagar cursos nem que sejam online tipo allura, etc.
Não é necessário criar este tipo de estimulo para que as pessoas corram atrás de qualificação. A pessoa é programador porque gosta, porque é isso que ela quer. Ela vai atrás de aprender coisas novas por conta própria. Essa é a principal característica dos profissionais dessa área.
Existe muito profissional com potencial por aí. Contratar e anúnciar vagas só de Sênior, Pleno, é eliminar uma galera descomunal.
Eu não sou o dono da verdade e este post não procura ser um post da verdade absoluta ou o post impessoal e perfeitinho, cheio de bons modos para tratar esse assunto. Alguém precisa falar sobre essas coisas analisando de um lado, sem essa frescurada de palavras que o mundo está se tornando para falar as coisas. Isso aqui é muito mais um desabafo do que um post qualificado. Inspirado em um amigo indicado que não foi contratado por pura palhaçada pois sei que o cara é bom. E com certeza fica aí os votos de meter o sarrafo se não concordar. Não ligo pra críticas, muitas me fazem rir e as outras, elas me ajudam a crescer.
Para você que está com a nova versão do Ubuntu 19.10 e começou a instalar programas e viu que o antigo método de instalação do Java 8 não está funcionando então essa dica aqui é pra você. Agora as coisas são um pouco diferentes e vc terá de instalar o pacote JDK8 de outra forma. Eu não sei você mas a maior partes das aplicações que trabalho dão problemas com qualquer versão do JDK maior que 8. Vamos lá, rapidinho…
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
Pronto. Agora o JDK 8 já está instalado em sua máquina.
Para conferir rode no terminal…
java -version
Deverá retornar …
openjdk version "1.8.0_232-ea"
OpenJDK Runtime Environment (build 1.8.0_232-ea-8u232-b04-0ubuntu6-b04)
OpenJDK 64-Bit Server VM (build 25.232-b04, mixed mode