novembro 2016 – Algoritmos Descomplicados
Git e a dificuldade em renomear um arquivo
Um problema que sempre acontece um dia quando a gente usa o git.
29 de novembro de 2016 2 de dezembro de 2016 angeliskiDeixe um comentário
Quem trabalha com Git ou usa ele em casa, provavelmente já teve esse problema.
Quer dizer, existe alguns requisitos pra isso acontecer… Primeiro você não pode usar linux (não me odeie, eu uso linux em casa!) ou seja, isso só costuma acontecer no Mac (Eu uso no trabalho) e no Windows.
O problema é relativamente simples, você renomeia um arquivo, mas você só altera as letras maiúsculas e minúsculas, por exemplo, você pega o seu arquivo QuitacaoParcialDECompras.java e altera para QuitacaoParcialdECompras.java
Pronto! Ai você comita e segue a vida. Você não vai ter nenhum problema até que baixe esse projeto novamente ou que outra pessoa de um pull na máquina dela.
"Angeliski, se tá bricando né? Porque isso daria problema?"
O que acontece é que o git por padrão tem uma configuração de case insensitive… Isso quer dizer que pra ele TESTE.java, teste.java, TesTe.java, TEsTe.java são a mesma coisa. E isso é um problema, porque quando você altera o nome do arquivo ele não salva essa alteração… O que resulta num problema no próximo pull que for dado, já que você tem um arquivo com o nome errado e acha que ele está certo. Normalmente em projetos Java isso dá problema, por conta da estrutura de pacotes que a linguagem usa (Porque isso se aplica a nome de pastas também).
"Mas como eu resolvo isso? Tem algum jeito?"
A primeira vez que eu me deparei com esse problema eu resolvi da maneira mais porca simples que se possa imaginar. Mudei o nome do arquivo para uma coisa aleatória como A.java, fiz um commit, depois alterei o nome do arquivo para o que eu realmente queria, QuitacaoParcialdECompras.java. Só que isso sempre me incomodou, parece uma solução extremamente gambiarrenta grosseira. Depois de umas pesquisas, achei na documentação do git a solução:
If true, this option enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like FAT. For example, if a directory listing finds "makefile" when Git expects "Makefile", Git will assume it is really the same file, and continue to remember it as "Makefile".
Nem preciso dizer que eu chorei pulei de alegria não? O que acontece é simples, apesar da propriedade core.ignoreCase ser false por padão o git-clone faz o favor de colocar ela como padrão quando é executado. Isso ai atrapalha tudo! Mas uma vez que a gente sabe qual é o problema é simples de resolver:
Publicado em programaçãoCom a tag controle de versão, dicas, git, mac, problemas, windows
O que a Programação Funcional pode fazer por você?
Uma visão simplificada de porque a programação funcional pode ser boa para a sua carreira.
21 de novembro de 2016 21 de novembro de 2016 angeliskiDeixe um comentário
Um dos tópicos da programação que se tem falando muito é a Programação Funcional… Algum de vocês devem estar se perguntando, que diabos é isso? Vamos começar esclarecendo algumas coisas então!
No meio da programação existem três paradigmas mais conhecidos, o primeiro comumente chamado de Programação estruturada. Isso se deve ao fluxo do programa, seguindo um fluxo continuo e ESTRUTURADO. O nosso amigo Cobol é um grande exemplo desse paradigma.
Temos também a Programação Orientada a Objetos (POO) que tem como sua premissa a criação de objetos, que contém propriedades (variáveis) e funções (métodos). O funcionamento do programa se dá com base nas iterações entre objetos, que vão chamando e interagindo entre si. O grande representante desse paradigma com certeza é o Java.
E não menos importante temos a Programação Funcional. A ideia desse paradigma é trabalhar principalmente com funções. Tudo se resume a funções que podem ser agrupadas ou combinadas para produzir um resultado. Ela se vale de muitos principios matematicos, o que as vezes pode ser complicado de entender. Como exemplo podemos citar o Haskell.
Essa é uma explicação muito simplificada dos paradigmas, visando mostrar a ideia principal por trás deles, cada um tem um conjunto maior de características e regras que definem ele como um todo. Dito isso podemos voltar ao nosso tópico principal, que é a Programação Funcional!
Porque ela tem sido tão falada ultimamente?
Acontece que cada vez mais os hardwares que temos hoje estão se limitando e a evolução está tomando um caminho de multi processamento, ou seja, os computadores cada vez mais estão sendo feitos com múltiplos núcleos de processamento para realizar muitas operações em paralelo. Só que gerenciar esses multi processamentos, também conhecidos como processamento multithread, exige um esforços cada vez maior e é ai que as linguagens funcionais se destacam no cenário atual.
Você ganha o processamento multithread de graça!
"Nossa Angeliski, que mágica é essa?"
Calma, não é mágica.
Acontece que muitos dos conceitos que estão definidos dentro do Paradigma Funcional permitem que as linguagens funcionais tenham um comportamento multithread sem muito esforço. Vamos a um exemplo, a Imutabilidade. Um dos conceitos que existe dentro do paradigma funcional é a imutabilidade, ou seja, um dado é criado e nunca mais será mudado até o fim da sua vida, ele é imutável.
"Mas como pode isso? Eu não posso mudar nada?"
É um pouco mais complexo que isso, além de existir algumas exceções….
Pausa Dramática no Texto
Sim, eu sei que existem muitas lacunas nas coisas que eu estou te dizendo, mas se você é alguém que não entende do que eu estou falando é está lendo isso, explicar essas lacunas vai te deixar completamente perdido. Se você entende, as lacunas já estão preenchidas. Então vamos por partes, eu vou explicar algumas coisas nesse texto e outras mais pra frente, em outros textos.
Voltando a imutabilidade, suponha que você criou uma variável idade com o valor 10. Para todo o sempre a variável idade terá o valor 10. Mas e se eu quiser incrementar esse valor? Então uma nova variável, que pode ter o mesmo nome (para simplificar as coisas), será criada, com o valor 11 por exemplo. A imutabilidade garante que você pode usar essa variável em milhões de processamentos paralelos e que o valor será imutável. Se fosse no Java por exemplo, você teria que usar mecanismos de sincronização para que essa variável pudesse ser compartilhada em muitas threads sem nenhum problemas. Consegue enxergar a vantagem? Como a imutabilidade já faz parte do paradigma funcional você não precisa se preocupar com nada disso. Maravilha né?
Além disso, uma das coisas boas sobre aprender o paradigma funcional é a chance de pensar fora da caixa. Quando você aprende um novo paradigma, seja ele estruturado, orientado a objetos ou qualquer outra coisa, sua mente precisa pensar de uma maneira completamente diferente para resolver os mesmos problemas. Isso te permite crescer e aprender novas estratégias para resolução de problemas, novas ferramentas. Como programador você deve deixar de lado a bala de prata, cada caso tem uma solução mais adequada, hoje pode ser estruturada (Cobol vive até hoje nos bancos), amanhã pode ser programação funcional (Clojure é a linguagem principal da Nubank).
Você deve estar se perguntando se eu domino a Programação Funcional e a resposta é… não.
"O.o Mas como pode? Se faz maior propagando do negocio e não entende?"
Eu disse que não domino. Atualmente estou estudando sobre o assunto e por isso vim compartilhar a minha visão do porque aprender isso, mais pra frente vou tentar trazer alguns exemplos práticos.