Neil Carvalho

Desenvolvimento, lifehacks e outras coisas


Habilitando a cedilha no teclado internacional no Linux

08 Oct 2020

Toda vez que instalo uma distribuição nova eu tenho que procurar como resolver o problema da sequência ' + c que se transforma em um ć, como se eu fosse do leste europeu. Sempre tem a opção de enviar um Alt Gr + ,, mas ela não é nada agradável de usar. Então, vou colocar aqui pra referência futura:

Basta instalar o pacote ibus (pelo menos se chama assim no Manjaro), e em seguida, informei no /etc/environment:

GTK_IM_MODULE=cedilla

E reiniciar o computador.

Possível que dê problema em outros ambientes, como QT, mas aí eu vou esperar passar pelo problema pra buscar uma solução.

TL/DR: Instalar ibus, informar GTK_IM_MODULE=cedilla no /etc/environment e reiniciar o computador

Comentários

Usando AWS Lambda e IFTTT para dormir melhor

19 Jul 2019

Nesses dias eu percebi que, nessa época do ano, o nascer do Sol aqui em Americana está bem próximo das 7 da manhã. 6:48 da manhã, pra ser mais preciso. E 7h é a hora que meu despertador está configurado. Dormir com a janela aberta, sendo lentamente despertado pelo Sol e depois só recebendo o último empurrãozinho do despertador tem deixado meu começo de dia muito mais agradável.

Então, tive uma ideia: e se eu configurar meu despertador sempre para o nascer do Sol? E tivesse também acesso fácil ao melhor horário para dormir? Busquei uma solução no IFTTT e não encontrei nada do jeito que eu queria. Então resolvi fazer a minha. Vamos lá pra receita:

Ingredientes:

Passo 1: Criando um applet no IFTTT

TL/DR sobre o IFTTT: É um serviço que permite a conexão de dois serviços diferentes. Você pode configurar toda foto onde você é marcado no Facebook para ser enviada por e-mail, por exemplo.

IFTTT significa if this, then that. E é exatamente assim que os applets são criados.

Criei um applet em que o this é Webhooks. Isso precisa de uma chave de API, que pode ser criada no site deles. Chamei meu evento de tomorrows_sunrise, e é isso a configuração do this.

Já o that é o Notifications. Os webhooks do IFTTT podem receber até três parâmetros: Value1, Value2 e Value3. Eles serão passados pela função Lambda, descrita em seguida. Ah, como vou enviar Value1 como a hora do nascer do Sol e Value2 como a melhor hora para dormir, minha mensagem de notificação ficou exatamente:

Prepare-se para dormir às . O sol vai nascer às .

Passo 2: Criando a função do Lambda

TL/DR sobre o Lambda: É um serviço da Amazon onde você pode programar funções e plugar em outros serviços. Você não precisa se preocupar com o servidor e será cobrado apenas pelos segundos em que a função executar. Há uma quantidade mensal que é gratuita, e essa função está com uma enorme folga.

O propósito da função do Lambda é ser executada todos os dias, às 20h, ver a hora do nascer do Sol no OpenWeather e finalmente passar o bastão pro IFTTT completar o serviço.

O trigger da função é o CloudWatch Events. Criei uma regra do tipo Schedule expression, cofigurado assim:

cron(0 23 * * ? *)

Essa expressão de cronjob vai executar todos os dias, às 23:00 UTC, que equivale às 20:00 no horário de Brasília.

Finalmente, a função em Ruby:

require 'json'
require 'net/http'

IFTTT_KEY          = "SUA_CHAVE_DO_IFTTT"
CITY_ID            = 3472343 # Este é o id de Americana-SP - busque em openweathermap.org
OPENWEATHERMAP_KEY = "SUA_CHAVE_DO_OPENWEATHERMAP"
URL_IFTTT          = URI("https://maker.ifttt.com/trigger/tomorrows_sunrise/with/key/#{IFTTT_KEY}")
URL_WEATHER        = URI("https://api.openweathermap.org/data/2.5/weather?id=#{CITY_ID}&appid=#{OPENWEATHERMAP_KEY}")
TIMEZONE           = "-03:00"
SLEEPING_TIME      = 8*60*60 # 8 horas, em segundos

def lambda_handler(event:, context:)
    json          = JSON.parse(Net::HTTP.get(URL_WEATHER))
    sunrise       = json["sys"]["sunrise"]
    time_to_sleep = sunrise - SLEEPING_TIME

    formatted_sunrise       = Time.at(sunrise).getlocal(TIMEZONE).strftime("%H:%M")
    formatted_time_to_sleep = Time.at(time_to_sleep).getlocal(TIMEZONE).strftime("%H:%M")

    response = Net::HTTP.post_form(URL_IFTTT, value1: formatted_sunrise, value2: formatted_time_to_sleep)

    { statusCode: 200, body: response.body }
end

E é isso. Pretendo melhorar a notificação, enviando também a previsão do tempo pro dia seguinte. Ou simplesmente utilizarei uma receita já pronta do IFTTT, com uma nova notificação.

Comentários

Rails/Webpacker asset compilation error: SyntaxError> Unexpected token

26 Feb 2019

A colleague was having this problem today:

ExecJS::RuntimeError: SyntaxError: Unexpected token: operator (>) (line: 69370, col: 12, pos: 3058098)

It happened to be the file extension. The file was .js, so Asset Pipeline was trying to compile it. As the code had arrow functions (=>), introducted in EcmaScript 6, the code has to be in a ‘.es6’ file for webpacker to pick and compile to mundane javascript.

TL/DR

If you are using ES6 features, use the .es6 extension.

Comentários

Hello again, world

14 Oct 2018

Estou num daqueles momentos em que olho pro meu eu do passado e acho, em alguns aspectos, melhor que o eu do presente. Sei que melhorei em muitos aspectos, longe de querer desvalorizar todas as evoluções que tive ao longo dos anos. Tenho consciência disso.

Uma sensação que adoro ter é ver um código ruim enquanto trabalho, buscar quem fez e por que fez e descobrir que fui eu mesmo, há 2 anos. É um sinal de que melhorei muito nesse tempo. Isso tá cada vez menos frequente. E tem sido mais frequente elogiar coisas que escrevi anos atrás.

Sei que é normal. Toda evolução começa mais forte no começo, e depois você evolui mais lentamente. Quem já tem uma bagagem maior, naturalmente, evolui de forma mais devagar.

Mas alguns sinais vermelhos estão gritando em mim. Abrir este site e ver que a última postagem foi em 2015 é ruim. Outro dia eu estava com uma dúvida, pesquisei no Google, caí aqui, agradeci mentalmente à pessoa linda que escreveu aquilo e só depois de uns 30 segundos percebi que era eu mesmo.

Os últimos 12 meses têm sido uma montanha russa. Nos últimos meses do ano passado eu estava me sentindo o dono do mundo, depois tive uma queda e a síndrome de impostor bateu forte, depois me recuperei, caí de novo, e nos últimos 2 ou 3 meses passei pelo mesmo ciclo mais uma vez.

Ligo muito disso a dois fatores: dificuldade de manter hábitos, junto com querer abraçar o mundo as coisas estão bem. Não sei se os dois fatores se alimentam ou se são coisas separadas.

No último mês, tentei, ao mesmo tempo: acordar cedo, ir à academia pela manhã, organizar tarefas com o método GTD, estudar todos os dias, ler algo não-técnico, e ainda fiquei animado pra submeter uma palestra pra Rubyconf deste ano (que seria minha primeira palestra). O prazo da Rubyconf é hoje, consegui ir à academia cedo só durante uma semana, depois de algumas falhas no GTD eu joguei tudo pra cima, os estudos duraram uma semana, o livro não técnico não passou do primeiro capítulo e a produtividade no trabalho também caiu por falta de foco. E as caminhadas que estava fazendo antes do período de “euforia” foram embora.

Aquele mini-hábito de meditação, que falei em 2015, tinha dado muito certo. Consegui meditar por 1 ano e meio, sem faltar um único dia. Foi bonito ver os mais de 450 dias no Headspace. Mas só precisei quebrar essa corrente para parar de meditar quase que imediatamente.

Preciso voltar aos baby steps. Mini-hábitos são ótimos para isso. Só preciso descobrir uma forma de não deixar uma falha fazer tudo desmoronar.

Comentários

Configuring rbenv on fish shell

25 Nov 2015

This weekend I made a clean install of OS X on my machine, and when I was about to install zsh and prezto again, I thought about trying out fish shell. So why not?

It’s not POSIX compatible, so there’s some gotchas. When installing rbenv, I had a couple problems when setting the environment variables and initializing the function.

First of all, fish does not have an EXPORT command. You set variable environments using SET. Another thing is that fish’s PATH is a list, instead of a semicolon- sepatared string. So, setting the path becomes:

set -x PATH $HOME/.rbenv/bin $PATH

Now, the trickiest and most difficult part to find on Google: setting up the rbenv function. rbenv’s README says you need to add eval "$(rbenv init -)" to your profile, but you first have to convert it to fish’s syntax. Add instead:

rbenv init - | source

TLDR: Add to your .config/fish/config.fish:

set -x PATH $HOME/.rbenv/bin $PATH
rbenv init - | source

Comentários

Troca de mini-hábito

31 Jan 2015

Depois de algum tempo pensando sobre isso, resolvi que o hábito de escrever 50 palavras por dia não está em sua melhor hora pra ser cultivado.

Deixe-me explicar: ao decidir os quatro primeiros hábitos, fiz uma lista de cerca de 10 hábitos, versão full size, que eu gostaria de ter. Depois, para cada da lista, respondi mentalmente a uma série de porquês, para entender o motivo de eu querer tê-los. Terminei com uma lista de quarto hábitos, entre eles a escrita.

Para a escrita, o objetivo era conseguir me expressar melhor, de maneira mais articulada. Isso é algo que eu quero pra vida, e que me traz problemas hoje. Mas há coisas mais importantes. Me deixei ser influenciado pela sugestão do livro e escolhi escrever 50 palavras por dia, ao invés de fazer alguma dessas coisas de maior importância.

Decidi trocar o hábito da escrita pela meditação. Tenho lido bastante sobre meditação, inclusive escrito sobre, e vi que é mais importante agora entender e treinar minha mente do que conseguir me expressar melhor. É isso não significa que vou parar de escrever, apenas não está mais na minha lista. Esse post, inclusive, não está sendo escrito como uma obrigação.

tl;dr: troquei o mini-hábito de escrever 50 palavras por dia pelo mini-hábito de meditar 3 minutos por dia

Comentários

Meditação

21 Jan 2015

Desde minha adolescência, quando comecei a questionar o mundo e os costumes ao meu redor, tive algumas fases onde fiquei de alguma forma fascinado pelo budismo e sua filosofia. Estudei a religião e vi que não era bem pra mim, por causa do lado espiritual que nunca engoli, com karma e reencarnações, mas outras partes nunca perderam o encanto.

A que mais me chamou a atenção desde sempre foi a meditação. Aqueles monges de robes laranjas sentados no topo das montanhas certamente tinham algo a ensinar. Aquela paz que eles passam não veio do céu. Aí terminei deixando pra lá, mas não por por muito tempo.

Sempre pensei que meditação fosse ficar parado pensando na vida, filosofando sobre seus fatos e como lidar com eles. Ou então, se não fosse isso, talvez fosse ficar parado sem pensar em absolutamente nada, quase como se estivesse dormindo sem sonhar, mas mais consciente.

Enfim, há alguns meses tive um retorno à meditação. Finalmente fui procurar entender melhor o que é e como que posso fazer. Vi alguns vídeos, inclusive um sobre uma meditação de um minuto. Como assim, os monges não ficam meditando por 12 horas sem parar?

Então, no depois de algum tempo indo e voltando, dessa vez com intervalos bem menores, conheci o Headspace. É basicamente uma meditação guiada, que vai te apresentando lentamente aos conceitos e métodos da meditação, mas com uma gratificação instantânea. Recomendo fortemente.

Encornarei também alguns canais no YouTube com meditações guiadas, inclusive em português, para quem não está disposto a pagar os 12 dólares mensais do Headspace - ou não entende inglês mesmo. É muito gratificante parar por 10 ou 20 minutos no seu dia e entender o que está acontecendo na sua cabeça.

Comentários

Técnica Pomodoro

18 Jan 2015

Num post anterior, escrevi sobre a maneira como divido o trabalho através do tempo: 25 minutos de trabalho a cada 30 minutos. Esse foi um resumo bem preguiçoso para quem não usa a técnica Pomodoro, que é melhor detalhada no link. Vou tentar resumir um pouco melhor a técnica aqui.

A técnica Pomodoro é um paraíso pra quem não consegue parar numa única tarefa e perde o foco, seja navegando no Facebook ou interrompendo a tarefa e começando uma outra coisa. Também é ótima pra tarefas extremamente chatas, onde queremos desesperadamente fazer outra coisa.

O material básico é: um papel e um timer. Podem ser usados aplicativos, mas dá pra ser usado só um papel, onde fica sua lista de tarefas, e um cronômetro, temporizador ou daqueles timers de cozinha - aliás, é daí que vem o nome da técnica.

Coloque sua lista de tarefas no papel, uma tarefa por linha. Como a unidade básica de tempo do Pomodoro é de 25 minutos, tente calcular em quantos blocos essa tarefa vai ser terminada, e faça um quadrado para cada bloco ao lado da tarefa. Não se preocupe em ser muito preciso, você vai melhorar com o tempo, e de qualquer forma a estimativa por tempo costuma ser bem falha por natureza.

Após as tarefas estarem bem definidas e estimadas, vamos ao trabalho! Ligue o seu timer em 25 minutos e comece a trabalhar. Coloque um fone de ouvido daqueles bem grandes, uma burqa, uma camisa na cabeça, que seja. Deixe bem claro que você está focado e não deixe ninguém te interromper.

Se alguém, por algum acaso, te interromper, tire os fones, olhe com cara de desprezo e faça uma marca próximo à tarefa indicando que você foi interrompido. É interessante diferenciar as interrupções: se foi interna - você perdeu o foco sozinho e foi pro Facebook - ou externa - alguém chegou no seu lado e te cutucou.

Após o período de 25 minutos, marque um X em um quadrado ao lado da tarefa, coloque o timer pra 5 minutos e vá fazer alguma outra coisa. É importante não fazer “só mais um pouquinho” (embora eu faça, quando vai demorar menos que ~15 segundos). Nesse tempo eu vou beber água, mijar, responder às perguntas no Hipchat, olhar se chegou algum e-mail importante e esticar os braços e pernas.

Voltando um pouco à interrupção, há uma “penalidade” pra quando elas ocorrem. Não faço em 100% dos casos, mas dependendo do tempo que ela me toma, reinicio o timer e começo tudo de novo. Faço isso em todas as interrupções internas, e nas interrupções externas quando envolve mais do que apertar uma mão.

A cada 4 pomodoros - o que leva 2 horas se não houver nenhuma interrupção - podemos tomar um merecido descanso de 15 minutos. E isso não é nenhuma perda de tempo, uma vez que várias soluções para problemas que estávamos lutando durante os períodos de foco aparecem nessa hora.

Para finalizar, alguns aplicativos que uso ou tentei usar:

Pomodoro One - Mac

Aplicativo bem simples de Pomodoro para Mac. Gosto dele porque é leve, tem a opção de mostrar o tempo restante na barra de menus e ainda é bonitinho. Foi o que mais me dei bem para Mac até hoje.

O único defeito dele é não controlar essas pausas mais longas de 15 minutos.

ClearFocus - Android

Outro aplicativo bem simples, mas um pouco mais completo que o Pomodoro One. A interface dos dois é extremamente parecida, arrisco até dizer que um dos dois teve um pouco de inspiração do outro. O legal é que ele controla esses períodos de descanso maior, e tem a opção de desligar a Internet do celular, os sons e as vibrações.

Como nada é perfeito, não gosto de prestar atenção no computador e no celular ao mesmo tempo. Mas para quem conhece, é uma boa.

OFFTIME - Android

Esse eu ainda nem usei, mas gostei da proposta. É um aplicativo que tanto pode ser usado para a técnica Pomodoro quanto pra deixar seu celular mais “distante” enquanto você está numa mesa de bar com os amigos. Ele permite que o uso do celular seja quase que completamente bloqueado durante um período, excluindo uma whitelist de contatos e aplicativos.

Comentários

Mini-hábitos e fins de semana

18 Jan 2015

Acredito que um dos motivos para não conseguirmos adquirir hábitos seja a inconsistência entre os dias de semana. Como cultivar alguns hábitos que tentamos fazer logo cedo se acordamos às 7 da manhã nos dias de semana e meio-dia nos fins de semana?

Hoje foi meu primeiro dia depois de quase uma semana praticando meus mini-hábitos, e a percebi uma resistência bem maior. O legal é que essa estratégia torna os hábitos tão ridículos que eles se tornam pequenos demais pra serem ignorados, mas ainda assim senti uma dificuldade maior.

Relembrando, escolhi fazer todos os dias: escrever 50 palavras, fazer uma flexão, guardar uma coisa fora do lugar e estudar 10 minutos. Guardar uma coisa já está se tornando bem automático, mas escrever um parágrafo já exige um pequeno preparo, nem que seja tirar o celular do bolso. A flexão eu estou com preguiça - hehe - e os estudos vou fazer assim que terminar aqui.

Enfim, voltando ao assunto da hora de acordar. Já li que vários CEOs de grandes empresas acordam na mesma hora todos os dias e seguem exatamente a mesma rotina assim que acordam. Com isso, imagino que aquela moleza de fim de semana nem apareça - mas também é importante ter uma hora certa para dormir.

Alguém acorda todos os dias na mesma hora? O que acham que isso impacta no seu dia-a-dia e nos seus hábitos?

Comentários

Interrupções

15 Jan 2015

Tenho um problema de manutenção de foco. Dependendo do nível de foco, se passar uma mosca a 5 metros de distância, eu já esqueço o que estava fazendo e viro um doutorando em moscologia.

Agora calcule o que acontece com o celular apitando a cada tweet, e-mails chegando a cada 2 minutos, grupos de família no WhatsApp com um bom dia e feliz aniversário a cada 10 minutos e perguntas constantes no Hipchat, nossa ferramenta de comunicação dentro da empresa. Sem contar o telefone, as reuniões (quando não participo) e até mesmo uma eventual cutucada no ombro.

Comecei a tratar isso já há alguns meses, quando entrei numa dieta de informação bastante necessária. Desabilitei as notificações do meu celular pra praticamente tudo, exceto mensagens diretas no WhatsApp e Twitter, SMS e, claro, ligações. Aquelas vibrações constantes me mantinham num estado de ansiedade constante e também atrapalhavam qualquer outra coisa que eu estivesse fazendo.

Em seguida, desliguei os sons do computador. Pensei que as notificações visuais atrapalhariam menos que as sonoras, mas ainda não estava bom o suficiente. Depois de algum tempo, passei a não conseguir mais ignorar o ícone do Hipchat piscando por mais que 1 minuto, e isso já quebrava qualquer linha de raciocínio.

Agora estou tentando o seguinte: desabilitei todas as notificações do computador, sonoras ou visuais. Estou trabalhando em períodos de 25 minutos de foco a cada 30 minutos, aí olho esses e-mails e mensagens no período de descanso. Ah, o contador de e-mails e mensagens está sempre à vista, mas pelo menos não é um ícone pulando sem parar.

Vejamos se o dia de trabalho melhora com isso. O objeto não é me fechar ao mundo exterior, apenas manter um pouco de ordem para que eu não só ajude os outros, mas também consiga produzir bem.

Comentários