Primeiro post do ano ressuscitando a categoria dica rápida.
Há uma ou duas semanas o PotHix me passou umas músicas, mas na hora de copiar, todos os arquivos vieram sem extensão. Depois de perder um tempo tentando resolver com bash, eu desisti e resolvi o problema em 10 min usando ruby. Se alguém puder postar nos comentários a solução em bash eu agradeço!
Para a minha solução usei apenas os seguintes métodos:
#Retorna um array de strings com todos os arquivos do diretório.
Dir.entries("dir")
#Retorna se o arquivo é um diretório ou não.
File.directory?("arquivo")
#Renomeia o arquivo.
File.rename("nome_antigo", "nome_novo")
Minha solução final ficou assim:
def rename_in_dir(dir)
files = Dir.entries(dir)
files.each do |f|
# Usei esse if para ignorar os arquivos que já tinham
# extensão e as referências '.' e '..'
next if f == "." or f == ".." or f =~ /.*\..{2,4}$/
# é importante sempre usar o diretório junto, se não ele vai
# procurar sempre no diretório onde o script está sendo executado
if File.directory?("#{dir}/#{f}")
# Se for um diretório faz a chamada recursiva
puts "DIR: #{dir}/#{f}"
rename_in_dir("#{dir}/#{f}")
else
puts "renaming: #{dir}/#{f}"
# Adiciona a extensão .mp3 no arquivo
File.rename("#{dir}/#{f}", "#{dir}/#{f}.mp3")
end
end
end
# Começa a partir do diretório onde o arquivo está
rename_in_dir(".")
Mais uma dica rápida e dessa vez não é sobre o git!
Uma funcionalidade relativamente bastante usada, principalmente em relatórios, é substituir dados nulos por algum valor padrão. Por exemplo, dada a seguinte tabela (Usuario) quero um select que liste os nomes dessa maneira: “David Paniz”, “Anonimo”.
| Id | Nome |
|---|
| 1 | ‘David Paniz’ |
| 2 | null |
Cada banco tem sua solução para esse problema. No oracle usamos a função nvl
select nvl(nome, 'Anonimo') from User
No mysql temos a ifnull
select ifnull(nome, 'Anonimo') from User
Para resolver o problema no Hibernate temos a função coalesce no hql
//Isso é HQL
select coalesce(nome, 'Anonimo') from User
Quando fazemos um clone um projeto git ele copia todo o histórico do repositório e, por isso, quando o projeto começa a ficar antigo o clone pode demorar muito. A dica rápida de hoje é como fazer o clone ignorando o histórico.
git clone --depth 1 git://...
Dessa forma ele baixa apenas o útimo commit como se fosse um checkout de um svn.
Novamente fazendo referencia, esse dica veio pelo Douglas via twitter (@qmx).
Aproveitando para criar uma nova categoria aqui no blog chamada “dica rápida”. Nessa categoria pretendo postar exatamente esse tipo de coisa: dicas rápidas. E aqui vai a primeira:
Quando estamos usando o git e queremos baixar do servidor um branch, ou seja, pegar um branch remoto, somos tentados a fazer dessa forma:
#NÃO FAÇA DESSA FORMA! ERRADO!
git checkout -b new_branch
git pull origin new_branch
Infelizmenete não é dessa forma. Para fazer o pull do branch remoto localmente basta fazer da seguinte maneira:
git checkout -b new_branch origin/new_branch
Apenas para completar, aqui vai o link (em inglês) de onde eu achei a solução para esse problema.