Beholddy, easily monitor youtube for new videos of specific subjects

On this last weekend, me and a couple friends hacked together a beautiful UI for a tool that I built to scratch my own itch: monitor youtube for new videos on specific subjects. Meet Beholddy:

This cute beholder, with its unique features, will monitor youtube for every new video uploaded and let you know as soon as a new that meets your criterias comes out!

I currently use it to find out:

  • videos of huge channels of a topic that I could take advantage on (by getting into their “similar videos”, for example);
  • discover smaller channels talking about subjects similar to mine and maybe propose a partnership;
  • monitor competitors;
  • new tips about videogames I enjoy 😜

But hey, this is me! Try it and maybe you will find other uses for it and don’t worry cause it has a free plan!

And please, give me some feedback on how you are using it and I will even add a couple more alerts to your free plan 😉

Lots of tools

Setapp – Assinatura mensal que inclui dezenas de apps pagos para mac

Vamos a uma dica rápida, um serviço que assinei recentemente e estou curtindo: o Setapp.

Com ele, eu pago uma assinatura mensal de cerca de U$ 10 e tenho acesso a dezenas de apps pagos de mac. Dentre eles, alguns que utilizo:

  • Chronicle – gerenciador de contas a pagar
  • iStat Menus – menu que lhe dá acesso a diversas estatísticas do seu mac
  • Lacona – tipo o famoso Alfred
  • Paste – mantém um histórico de tudo que você manda pro clipboard
  • Timing – app que monitora automaticamente o tempo que você dedica a cada app ou site
  • CleanMyMac – excelente utilitário para manter seu mac 100%

Eles tem vários outros apps disponíveis, acho que vale a pena pelo valor que esses vários apps somados têm, o tempo que eles poupam.

Além disso, por ser um serviço com uma assinatura mensal, você não precisa se preocupar com licenças expirando ou atualizações. #ficadica

Aprendendo um novo idioma sem muito esforço com FlipWord

As vezes eu só quero relembrar um idioma que há muito tempo não estudo, para desenferrujar (espanhol, estou falando de você), ou apenas praticar de leve para aprender vocabulário em outro idioma que sou mais safo (inglês).

Recentemente conheci o FlipWord, um produto que tem uma extensão de browser que muda palavras do site que você está lendo para o idioma que está querendo aprender.

How flipwork works

Mas eles não simplesmente mudam a palavra, a extensão do navegador também:

  • fala para você ouvir como se pronuncia;
  • pede para você digitar;
  • pede para você falar;
  • mostra uma frase que utiliza a palavra;
  • mostra sinônimos;
  • ocasionalmente pode até mostrar uma múltipla-escolha para você tentar identificar qual seria a tradução correta;

Ele faz tudo isso de forma gamificada onde você acumula pontos e sobe de ranking.

How flipwork pool works

Mas você pode estar pensando:

Mas e quando estou lendo um texto sério e preciso me concentrar?

Você pode facilmente acionar um período de pausa na extensão onde ele não irá funcionar pelo tempo desejado.

Mas e em sites como o github? Não quero essa extensão alterando as palavras do meu código, vai ficar muito confuso!

Você pode facilmente bloquear sites, eu por exemplo, bloqueei o github e sites de documentação de linguagens 👍

A extensão tem várias outras configurações como: porcentagem de palavras traduzidas na página, quantidade de “enquetes” como essa acima, etc.

Se você está querendo aprender um novo idioma ou desenferrujar outro, recomendo dar uma olhada no FlipWork.

Bike's brake

Como contornar erros no brakeman: “User controlled method execution” e “Unsafe reflection method constantize called with parameter value”

Eu tenho dois models diferentes mas que ambos respondem aos mesmos métodos, no esquema duck typing, e preciso criar uma action show pra eles.

Porém, se eles respondem aos mesmos métodos, pra que vou criar 2 actions show em 2 controllers diferentes se elas serão exatamente iguais?

Desenvolvedor Ruby malandro que é, você cria uma rota que vai te passar uma referência ao model, além do ID, e me lança a seguinte action:

# routes.rb
get 'clients/:contactable/:id', to: 'clients#show', as: :contactable

# ClientsController
def show
  contactable_model = params[:contactable]
  @contactable = current_company.send(contactable_model).find(params[:id])
  ...
end

E aí vem o nosso querido Brakeman, sempre preocupado com as falhas de segurança da nossa aplicação, lança o erro: “User controlled method execution”!

Você relê o código que escreveu e na mesma hora vê o mole que deu!  Usando send com qualquer coisa que o usuário preencher!?

Como resolver isso? Você pensa em usar o constantize porque se o usuário tentar marretar qualquer outra coisa vai dar exception de constante não existe, easy:

def show
  contactable_model = params[:contactable].singularize.classify.constantize
  @contactable = contactable_model.where(company: current_company).find(params[:id])
end

Aí vem o Brakeman e lança: “Unsafe reflection method constantize called with parameter value”…

Você para um pouco e reflete sobre isso… verdade, ainda é muita informação que você tá dando pro possível atacante… como resolver então?

A forma que mais curti foi a sugerida pelo Paul Kwiatkowski:

class ClientsController < ApplicationController
  CONTACTABLE_MODELS = {
    'contacts' => Contact,
    'connections' => Connection
  }.freeze

  def show
    contactable_model = CONTACTABLE_MODELS.fetch(params[:contactable])
    @contactable = contactable_model.where(company: current_company).find(params[:id])
  end
end

Dessa forma, se o atacante tentar qualquer outro valor além dos que estão nas chaves da constante, uma exception será levantada de cara pelo fetch. 👍

Person using macbook

Como resolver: macOS Sierra toda hora pedindo a senha da chave ssh

Desde que atualizei meu macbook pra versão 10.12.2, toda hora que ia dar um git pull ou push, eu recebia a mensagem pedindo para digitar a senha da minha chave ssh:

$ git pull
Enter passphrase for key '/Users/yogodoshi/.ssh/id_rsa':

Depois de tentar algumas soluções diferentes, incluindo usar o keychain, a que resolveu pra mim foi adicionar umas linhas no arquivo de config global ssh: ~/.ssh/config:

Host *
  AddKeysToAgent yes
  UseKeychain yes

É isso, espero que facilite a vida de uma galera que ficou de saco cheio tentando resolver esse problema, como eu 😜

Someone coding

How to delete local git branches after the merge

From time to time we all get annoyed by the git branch autocomplete, which used to be so useful, but now makes us practically write the whole branch name! 😡

Why it keeps happening? Because we are awesome developers who use feature branch flow and now, after working so hard, we have dozens of branches on our local machine.

Yogo, can you tell me an easy way to clear these branches? I don’t wanna delete each one manually! 😩

I sure can, my friend! Here is an alias that I use to delete all my merged branches:

alias clear_merged_branches="git branch --merged | egrep -v '(^\*|master|production)' | xargs git branch -d"

It will only leave the “master” and “production” branches, which you can easily change on that code. Besides the branches that haven’t been merged into master, of course.

Remember to use this alias while you are on the “master” branch 😉

Update

As lpmusix pointed out, you can also use it as a git alias. Add to the alias section of your ~/.gitconfig:

cb = "!git branch --merged | egrep -v '(^\\*|master|production)' | xargs git branch -d"

Dica para um hackathon remoto mais divertido: Watch2Gether

Eu sempre curti marcar hackathons lá em casa com os amigos. Quando me mudei pra Curitiba fiquei preocupado que não conseguiria mais fazer hackathons porque uma das coisas mais legais dos hackathons eram as zueiras:

Felizmente, eu me enganei, não é a mesma coisa mas ainda é possível fazer os hackathons remotamente. Uma ferramenta que ajudou muito a manter o clima de proximidade e a zueira foi o Watch2Gether.

Ele permite que várias pessoas ouçam/ assistam vídeos do youtube, vimeo e twitch, além músicas do Soundcloud simultâneamente, com um sincronismo excelente!

Então, antes do começo do evento, já crie uma sala no site e vai montando sua playlist!

Vou aproveitar e deixar umas dicas do que por na sua playlist:

  • aberturas de desenhos antigos e animes pra geral cantar junto;
  • funks das antigas porque dá aquela nostalgia e empolga também;
  • molejão, obviamente. Destaque pra esse cover do Earth, Wind and Fire;
  • punk rock das antigas que também empolga;
  • põe também um “Ramon Page, baby” também que é excelente;

Depois pode por as músicas que tiverem bombando no momento 😜