Git + Lazyness = happy Rails developer

I had some problems that you probably have too, if you are a ruby developer that works in a team…

Check if you have at least one of these problems:

  • Someone commits something that does not passes the test suit
  • Someone have deployed a version of the rails application without precompiling assets
  • Similar to the above but forgot to bundle install or npm install

The list can go on and on…

This short post will just give some tips of cool uses for the .git/hooks scripts to help solve some of these problems…

I have a small web application running, and the deploy of that application is just a git pull in the server (ok, blame on me, I’m not using docker for all my apps…)

And to prevent some of the above problems in this application, I created a .git/hooks/post-merge file with the bellow code:

bundle install
bundle exec rake db:migrate
bundle exec rake assets:precompile
touch tmp/restart.txt

just do not forget to “chmod u+x .git/hooks/post-merge”

With this small script, every time you run “git pull” the hook will fire and do all the dirty work for you.

The problem is that sometimes you are just updating a controller and does not need to run all that, and that is fine.

Of course you can make a more complex script to run only the commands you need, but this is good enough for simple scenarios, and at least in my case, I do no do that many deploys a day (most days there aren’t any deploys)

Another problem I had was some developers in the team, not running the tests before pushing changes to the central repository, and for this, a pre-push hook was just perfect, but I wanted to harden the things a little, and used a pre-commit hook, so to commit any small change, the developer should run the app tests.

To do that I created a .git/hooks/pre-commit (again, do not forget to make it executable) with this code:

#!/bin/bash
STAGED_FILES=$(git diff --cached --name-only)
if [[ "$STAGED_FILES" = "" ]]; then
    exit 0
fi
grep migrations $STAGED_FILES
if [[ $? == 0 ]]; then
  bundle exec rake db:migrate
fi
TESTS=""
CUCUMBER=0
grep models $STAGED_FILES
if [[ $? == 0 ]]; then
  TESTS="tests/models"
  CUCUMBER=1
fi
grep controllers $STAGED_FILES
if [[ $? == 0 ]]; then
  TESTS="$TESTS tests/controllers"
  CUCUMBER=1
fi
grep features $STAGED_FILES
if [[ $? == 0 ]]; then
  CUCUMBER=1
fi
if [[ "$TESTS" != "" ]]; then
  bundle exec rake test $TESTS
  if [[ $? == 1 ]]; then
    exit 1
  fi
fi
if [[ $CUCUMBER == 1 ]]; then
 bundle exec cucumber
 if [[ $? == 1 ]]; then
   exit 1
  fi
fi
exit 0;

we have some more verifications in the real file, but this is the idea, if you changed a file, we’ll run the tests before allowing you to commit.

We have some more ideas about how to make git help us, and some of them is building a “heroku like” experience, but we do not really need it but the “trick” that makes it possible, and makes the github web hooks possible too, is the “post-receive” hook.

Since we use github, we have not implemented a post-receive patch, but we have a webhook calling a “cgi script” that was written in ruby (just for fun) that fires a deploy, the script is stupidly simple, only the following:

#!/bin/env ruby
 Dir.chdir('applicationdir')
`git pull`
puts "<html></html>"

with this script, protected by authentication of course, and the hooks we mentioned before, I have github firing a deploy in my development/test environment every time a pull-request is merged to the master branch.

Of course we do not do anything that simple and unsecure to production, but this helps a lot our test environment ūüėÄ

 

I hope these git/rails tips help you to improve your project, probably not with the exactly same scripts, but the ideas can be adjusted to your environment.

If you need more ideas or have questions about anything that I wrote here, please leave a comment.

How to integrate Ruby on Rails and Google Firebase to send offline notifications to your users!

First, firebase is not the only solution for this, but I like their approach, it is simple and multi platform, and really easy to integrate in a rails application.

Of course Firebase has a lot more features, but to keep this post short, we’ll focus only on this feature today.

Remember that to use it in production your application needs to be acessed through SSL, the ServiceWorker API only works through SSL.

And before we start coding, you’ll need to go to the Firebase Console and create a new application for you there.

But lets start with the Rails application, create a new rails app with the ” rails new app_name”¬† command.

Now create a file named manifest.json in the public directory, this file is simple and will be your Portable Web Application manifest.

{
  "name": "My  First PWA On Rails",
  "short_name": "PWAOnRails",
  "start_url": "/",
  "icons": [
    {
      "src": "/my_icon.png",
      "sizes": "256",
      "type": "image/png"
    }
  ],
  "theme_color": "#000000",
  "background_color": "#FFFFFF",
  "display": "standalone",
  "orientation": "portrait",
  "gcm_sender_id": "103953800507"

}

The sender ID 103953800507 is a fixed number Firebase uses, do not put your project firebase id there.

Then we need to create also in the public directory a file named “firebase-messaging-sw.js” to host the Firebase javascript initialization code, the content of this file is provided by the firebase web framework.

importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');
importScripts('/firebase/init.js');

firebase.messaging();

The only missing piece is the firebase/init.js file that will hold your firebase application configuration, the values for this file will come from the application you’ve created previously in the console.

// Initialize Firebase
var config = {
    apiKey: "YOUR_API_KEY",
    authDomain: "YOUR_APP.firebaseapp.com",
    databaseURL: "https://YOUR_APP.firebaseio.com",
    projectId: "YOUR_PROJECT_ID",
    storageBucket: "",
    messagingSenderId: "THIS_IS_YOUR_REAL_SENDER_ID"
};
firebase.initializeApp(config);

We are almost done with the application initialization, now we need to tell the browsers that we want the service worker loaded, to do that, lets use the firebase javascript code, we’ll just add a similar piece of code to the main application layout.

    <script src="https://www.gstatic.com/firebasejs/4.8.1/firebase.js"></script>
    <script>
        // Initialize Firebase
        var config = {
            apiKey: "YOUR_API_KEY",
            authDomain: "YOUR_APP.firebaseapp.com",
            databaseURL: "https://YOUR_APP.firebaseio.com",
            projectId: "YOUR_PROJECT_ID",
            storageBucket: "",
            messagingSenderId: "THIS_IS_YOUR_REAL_SENDER_ID"
        };
        firebase.initializeApp(config);
    </script>

With that done, we need to start integrating the Firebase API with our rails application (yes, I know, we didn’t do anything in rails yet…), and to start we’ll create another javascript file, now in our application assets file, I’ll call it “first_pwa.js”.

function FirstApp() {
    this.saveMessagingDeviceToken = function () {
        firebase.messaging().getToken().then(function (currentToken) {
            if (currentToken) {
                console.log('Got FCM device token:', currentToken);
                $.post("/push_registrations", {subscription: currentToken});
            } else {
                // Need to request permissions to show notifications.
                this.requestNotificationsPermissions();
            }
        }.bind(this)).catch(function (error) {
            console.error('Unable to get messaging token.', error);
        });
    }
    this.requestNotificationsPermissions = function() {
        console.log('Requesting notifications permission...');
        firebase.messaging().requestPermission().then(function() {
            // Notification permission granted.
            this.saveMessagingDeviceToken();
        }.bind(this)).catch(function(error) {
            console.error('Unable to get permission to notify.', error);
        });
    };
}
var firstApp = new FirstApp();
firstApp.saveMessagingDeviceToken();

This code will ask the user for permissions to show notifications, these notifications work online or offline, and more importantly will send the firebase messaging token to the “push_registrations”¬† controller, now we just need to create this controller, use the approach you prefer, I just create the file using a text editor, the content for now is really simple, just to show how to use it…

class PushRegistrationsController < ApplicationController
  def create
    puts  params[:subscription]
    User.find_or_create_by push_sub: params[:subscription]
  end
end

We are saving the user subscription ID in a User model, for this sample, I just created the model with the command:

rails g model user push_sub:string

And we can create another controller to broadcast messages to everyone that has already opened the application, but to do that we’ll need a REST client, the easier to use for this sample is the ‘rest-client’ gem, please add the following entry to the Gemfile and run “bundle install”

gem 'rest-client'

You’ll need to get a server application key for your Firebase Messaging app from their web site.

And the broadcast controller will look similar to this:

class BroadcastsController < ApplicationController
	def index
		headers = {"Content-Type": "application/json",
			"Authorization": "key=YOUR_SERVER_KEY"}
		url = "https://fcm.googleapis.com/fcm/send"
		User.find_each do |user|
			payload = {
				"notification": {
					"title": "We have a message for you!",
					"body": "Answer please, we are cool!",
					"icon": "/app_icon.png",
					"click_action": "https://oursecureurl.domain.com/chats"
					},
				"to": user.push_sub
			}
			RestClient.post(url, payload, headers)
     	end
	end
end

If the application is not running in the moment you send the message, a notification will be displayed for the user automatically, but if the application is running, meaning, if the user is in your web site, you need to handle the message in your code, the code is still simple, just a little more javascript.

Lets open the “firebase-messaging-sw.js” and change the last line and add a few more:

importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');
importScripts('/firebase/init.js');

const messaging = firebase.messaging();

messaging.onMessage(function(payload) {
  console.log("Message received. ", payload);
  // ...
});

Of course you can use the firebase API to create topics and device groups to make it easy to send message to many devices of one user, or to notify everyone that a specific product is on sale.

But this is the basics for the first PWA on Rails with offline notifications.

 

 

 

Brain Hack – Trabalho remoto e produtividade

Atualmente eu estou digamos assim, apaixonado por trabalho remoto, estou trabalhando desta forma desde dezembro de 2013, ou seja j√° deu tempo de aprender algumas coisinhas.

Claro que existem diversos tipos de pessoas, e nada é perfeito, tudo tem vantagens e desvantagens.

A foto do post é de onde estou escrevendo ele hoje, não estou de férias, só resolvi trabalhar uma semana longe de casa.

Na minha opinião esta é uma das vantagens de trabalhar remoto, ou home office, ou chame como quiser, eu não chamo de home office por que não estou sempre em casa.

Existem desvantagens também, uma grande na minha opinião é não ter colegas de trabalho que fazem algo parecido com o que você faz, isto as vezes faz você se sentir sozinho e um pouco perdido.

Eu n√£o trabalho sozinho, tenho um colega desenvolvedor na empresa, mas eu trabalho no Brasil e ele na Europa (muda de pais de vez em quando ūüėõ ).

Outro ponto negativo é que com menos contato com o seu chefe, ser promovido ou qualquer coisa parecida pode se tornar um pouco mais complicada.

Mas na empresa em que eu trabalho hoje eu não teria muito espaço para promoção mesmo se trabalhasse no escritório, que por acaso fica em New York, e eu nunca fui lá, até estou planejando uma viajem para conhecer meu chefe pessoalmente, mas ainda não fui, só conheço ele via Skype até hoje.

Mas de volta ao assunto do post.

Trabalhando remoto eu consigo ser mais produtivo do que no escrit√≥rio, tenho menos interrup√ß√Ķes, menos pessoas para conversar (sim, mesmo sendo um nerd eu converso com quem estiver por perto ūüėõ ).

Mas tamb√©m acontece de as vezes voc√™ simplesmente n√£o estar em um bom momento para produzir, um dia que voc√™ tem muita coisa para terminar, e n√£o esta conseguindo produzir, neste caso eu uso alguns “brain hacks” para me ajudar.

* uma forma de recuperar o foco √© esquecer um pouco do trabalho, eu aproveito que trabalho remoto, cuido os hor√°rios de reuni√Ķes (sim, eu tenho reuni√Ķes), e simplesmente pego meu cachorro e saio pra caminhar em uma pra√ßa no meio do dia, relaxo um pouco, e quando volto para o computador com uma x√≠cara de caf√© rec√©m passado, o trabalho flui muito melhor.

* “men sana in corpore sano”, uma varia√ß√£o da t√©cnica acima, que ocupa um pouco mais de tempo, mas √© √ļtil em casos mais extremos √© fazer um intervalo para exercicios, isto mesmo, no meio do dia, se o trabalho esta estressante demais, ou voc√™ n√£o esta conseguindo produzir, troque de roupa e saia para correr, v√° na academia, v√° nadar, ou qualquer coisa que voc√™ goste de fazer, garanto que quando voltar vai conseguir produzir muito melhor. Men Sana in Corpore Sano

* tem aquele dia que tu n√£o consegue produzir, e n√£o esta afim de se mexer muito tamb√©m, neste caso eu aproveito uma pra√ßa que tem atr√°s do pr√©dio onde eu moro, e fa√ßo 10 minutos de medita√ß√£o. Existem diversos tipos de medita√ß√£o com prop√≥sitos diferentes, e isto fugiria um pouco do foco deste post, mas pode escolher qualquer um, a id√©ia √© parecida com o passeio com o cachorro, s√≥ tirar alguns minutos para descansar a cabe√ßa, parecido com ir para o “caf√©zinho” em um escrit√≥rio cheio de gente e conversar sobre algo aleat√≥rio com qualquer um que estiver l√°.

* mude de ambiente, as vezes quando sei que o dia vai ser mais pesado, que tenho muita coisa para fazer, gosto de simplesmente pegar minhas coisas e ir trabalhar fora de casa, em um café, um coworking, etc. Só escolha um lugar que lhe agrade e pronto.

E por √ļltimo, isto √© uma coisa que eu gosto de fazer, mas tem gente que prefere de outra forma, como eu trabalho remoto, eu prefiro n√£o ter hor√°rio fixo, eu tenho um contrato para trabalhar um numero fixo de horas por dia, mas n√£o tenho um hor√°rio fixo, e mesmo a quantidade de horas √© s√≥ uma refer√™ncia, √© mais importante eu fazer o que tem que ser feito do que cumprir a quantidade de horas.

Neste caso, eu tiro alguns hor√°rios na semana para fazer coisas que me agradam, tipo duas vezes por semana pela manha, eu trabalho por aproximadamente 1h, paro o que estou fazendo, levo meu filho pro Karate, depois volto e continuo trabalhando, mas poderia ser qualquer coisa, fazer uma aula de m√ļsica, ter um hor√°rio alternativo para a academia e pegar todos os equipamentos livres, …

Use sua imaginação e faça com que trabalhar remoto tenha mais vantagens do que desvantagens.

Uma id√©ia √© trabalhar da praia no ver√£o…

Na verdade esta √© uma boa id√©ia, vou procurar um lugar barato pra fazer isto, mando fotos pra quem ta trabalhando todo dia no mesmo escrit√≥rio ūüėõ

GTD – acho que finalmente entendi :D

Já li bastante sobre o tal do GTD (Getting Things Done), li também o livro sobre ZTD (Zen to Done), e a pouco resolvi finalmente ler o livro do David Allen sobre GTD, e acho que finalmente entendi a brincadeira, pelo menos de uma forma que esta funcionando para mim.

Uma coisa que percebi é que é uma grande mudança de hábitos, e que eu funciono melhor mudando um hábito de cada vez, e foi o que fiz, adicionando passo a passo, ainda não estou usando todas as praticas mas já melhorou bastante minha organização.

E claro que como qualquer maluco de TI eu preciso de softwares para fazer qualquer coisa, e neste caso estou usando s√≥ o Evernote, por que ele torna a primeira pr√°tica extremamente simples, vou descrever passo a passo abaixo o que do GTD eu estou usando, e se algu√©m mais usa GTD e perceber que entendi alguma coisa errado, por favor estejam a vontade para me avisar ūüėÄ

Coleta
A coleta é a fase mais importante e mais difícil de começar na minha opinião, a idéia básica é se acostumar a colocar no mesmo lugar todas as possíveis tarefas que chegarem, mesmo antes de ter certeza se é uma tarefa.

Eu criei uma pasta chamada “Caixa de entrada” no Evernote, onde eu coloco todas as tarefas do trabalho, emails que precisam de a√ß√£o, foto ou scan de contas que chegam, artigos que posso me interessar no futuro, id√©ias que eu tenho para novos projetos.

Quando for começar a fazer isto, um exercício interessante é sentar em algum lugar em casa e anotar tudo o que tu lembrar que precisa fazer, qualquer pequeno concerto, qualquer coisa que tu acha que precisa comprar, qualquer coisa que passar pela cabeça.

Um ponto importantissimo √© que tem que ser um item em casa nota do Evernote, pense que esta escrevendo cada item em um pequeno peda√ßo de papel, ou se se sentir mais confort√°vel, escreva cada item em um peda√ßo de papel e coloque tudo na mesma caixa ūüėÄ

Processamento Di√°rio
Depois de encher a caixa de entrada, coisa que vai acontecer com frequencia, j√° que todos os dias recebemos emails, tarefas, e tudo isto deve ir para a caixa de entrada, temos de processar estas informa√ß√Ķes.

Este processamento tem um passo a passo bem simples e que deve ser seguido, para evitar que comecemos a fazer apenas o que queremos, gostamos e lembramos, e deixemos o resto por l√°.

O processamento come√ßa com o primeiro item da caixa de entrada, e termina no √ļltimo, n√£o devemos pular, olhar o de baixo que eu j√° sei o que fazer, come√ßar pelo meio, …
Se não estiver usando o Evernote, a indicação é começar de cima para baixo, mas o importante é seguir uma ordem e não pular items.

Para cada um dos items, segue-se este script:

2. Precisa de algum tipo de ação sua neste item?
2. N√£o precisa
* Se precisar deste item como referencia no futuro, arquive ele
* Se n√£o precisar dele como referencia no futuro, apague
2. Precisa
* Se ele é uma tarefa simples e leva menos de 2 minutos, faça agora
* Se ele é uma tarefa simples e leva mais de 2 minutos, adicione a lista de atividades
2. Se ele precisa de uma a√ß√£o, mas √© maior que uma √ļnica tarefa, agora este item √© um projeto
1. Quebre o item em tarefas simples e adicione elas a lista de atividades
2. Anote no projeto quais tarefas pertencem aquele projeto
3. Nada por enquanto, mas um dia quem sabe
1. Id√©ias, coisas que n√£o sabe se vai comprar, … tudo isto vai para uma lista chamada “Um dia quem sabe”

Sobre adicionar a lista de atividades, na lista acima isto é um conceito simplista demais, na verdade este item é mais complexo, por exemplo um item destes pode ser agendado para algum momento especifico no futuro, para isto você pode usar uma agenda, o calendário do seu celular, eu prefiro utilizar os lembretes do Evernote.

Quanto a listas de atividade, quando eu comecei eu tinha só uma, mas como é mencionado no livro, é muito mais produtivo quando as listas tem contexto, ou seja, hoje eu tenho um caderno no Evernote para todas as tarefas, e uso tags para separar por contexto, os contextos que eu criei por enquanto são:
@Fone
@Compras
@Pessoal
@Trabalho

Alem de eu também criar uma tag por projeto com o nome do projeto, e na hora de arquivar eu tenho várias tags por assunto.

Para facilitar a visualização, eu tenho também tags por dia da semana que uso na hora de organizar as tarefas da semana.

Fazer

Isto n√£o esta explicito no livro, eu acho que todos deveriam sub intender isto, j√° que este √© o objetivo, mas tem um monte de gente reclamando que o GTD n√£o foca no “D”.

Eu acho que foca sim, e todos os dias eu pego a lista de tarefas, por contexto por exemplo, se estou no mercado ou no shopping eu pego a lista @Compras e compro o que esta ali.

Se estou no horário de trabalho pego a lista @Trabalho e começo a fazer os itens da lista.

Se aparecer alguma outra coisa durante o trabalho, o que sempre aparece, se for urgente vai direto para a lista @Trabalho e se n√£o for vai pra caixa de entrada para processar amanha.

Assim que termino uma tarefa, marco ela como pronta e passo para a próxima.

Processamento Semanal

Bem parecido com o processamento di√°rio, mas aqui voc√™ deve revisar todos os projetos para ver o progresso de cada, e lembrando que no conceito do GTD um projeto √© simplesmente uma coisa que precisa de mais de um passo para ser feita, por exemplo, comprar uma bicicleta n√£o √© uma tarefa, e sim um projeto por que inclui escolher um estilo de bicicleta (speed, mountain, hibrida, dobravel, …), escolher uma bicicleta no estilo definido, pesquisar pre√ßo, e por √ļltimo ir at√© a loja e fechar a compra.

Neste momento gosto de anotar nos cart√Ķes de projeto como anda o progresso de cada um.

Tamb√©m √© o momento para revisar a lista “Um dia quem sabe”, dar uma olhada nas id√©ias de l√°, nas coisas que pensou em comprar um dia para ver se j√° esta na hora ou se n√£o quer mais, apagar alguns itens daquela lista, …

E eu gosto também de re-checar os itens marcados como concluídos durante a semana, isto ajuda na motivação, ver a quantidade de coisas que conseguimos terminar durante a semana passada.

Vantagens que vi no GTD até agora

*Motivacional* – Antes de come√ßar a ter todas as minhas anotadas, eu sempre acreditei ter uma boa mem√≥ria e fazia tudo de cabe√ßa, claro que as vezes eu esquecia de alguma coisa, mas o pior para a motiva√ß√£o e para o bom humor, √© que v√°rias vezes, durante o trabalho, temos uma tarefa principal e daqui a pouco come√ßam a chegar in√ļmeras outras que precisam ser feitas no mesmo dia, mas a sensa√ß√£o que fica no final do dia √© que n√£o fizemos nada de produtivo pois aquela tarefa principal n√£o foi finalizada.
Pois agora não tenho mais isto, posso ver uma lista grade de coisas finalizadas naquele dia, e como uma tarefa grande se torna um projeto, eu com certeza vou ver algum progresso naquela tarefa grande e importante que eu tinha, pois alguns dos itens serão marcados como concluídos.

*Organização* РNão estou mais pagando juros de contas atrasadas, não tenho deixado de fazer coisas que preciso fazer, e quando demoro muito para fazer algo, só o fato de ver todos os dias aquilo na minha lista de tarefas me incomoda o suficiente para fazer o mais rápido possível.

*Produtividade* – √Č incr√≠vel como o nosso c√©rebro perde tempo nos lembrando de coisas que n√£o podemos fazer agora, e segundo algumas teorias temos uma quantidade limitada de aten√ß√£o que podemos usar no mesmo dia.

Depois que você confiar no seu sistema, quando colocar uma tarefa na lista, o seu cérebro vai descansar e parar de bater naquela tecla por que ele sabe que a tarefa vai ser finalizada no momento necessário.
Isto poupa bastante energia, e tenho conseguido focar mais nas tarefas que preciso realizar, a quantidade de vezes que estou fazendo uma coisa e o cérebro começa sozinho a lembrar de outra que não posso fazer agora caiu para praticamente zero, e tenho completado muito mais coisas durante o dia.
Ou seja, percebo um aumento de produtividade no meu trabalho, e normalmente termino o dia menos cansado.

—————————-

Bom, acho que √© isto, se eu esqueci de alguma coisa, por favor me avisem, e se gostaram da brincadeira, recomendo ler um pouco sobre GTD, gostei bastante do m√©todo, mesmo que eu ainda n√£o esteja usando ele todo ūüėÄ

Introdução ao Pomodoro

  • Voc√™ j√° sentiu que tinha muita coisa acontecendo ao mesmo tempo e estava com dificuldade de dar aten√ß√£o para tudo?
  • J√° se sentiu cansado, parecendo que n√£o tinha energia para focar na atividade que deveria estar fazendo?

Pois o pomodoro pode ajudar nisto, a técnica foi inventada por _Francesco Cirillo_ no final dos anos 80, e é baseada na idéia de que pausas frequentes podem aumentar a agilidade mental

——————————

Entre os objetivos da técnica, e parte da propaganda apresentada no site http://pomodorotechnique.com/get-started/  que vou traduzir livremente aqui, estão:

Trabalhe com o tempo, e n√£o contra ele

Para muitas pessoas, o tempo é um inimigo. Nós corremos contra o relógio para terminar tarefas, atingir prazos. A Técnica Pomodoro te ensina como trabalhar com o tempo, em vez de viver brigando com ele. Uma técnica revolucionária mas também extremamente simples de se aprender, mas que pode mudar sua vida ao usa-la.

Eliminar o Burnout

√Č essencial para o Pomodoro a no√ß√£o de que tirar pequenos intervalos agendados enquanto trabalha, elimina a sensa√ß√£o de se estar correndo contra o tempo. √Č imposs√≠vel trabalhar demais se voc√™ se ativer ao sistema.

Gerenciar Distra√ß√Ķes

Seja uma chamada telef√īnica, uma mensagem no Facebook ou simplesmente lembrar que tu precisa trocar o √≥leo do carro, muitas distra√ß√Ķes e pensamentos aleat√≥rios aparecem quando voc√™ esta trabalhando. A T√©cnica pomodoro vai te ajudar a anotar as distra√ß√Ķes e ordena-las por prioridade, na maior parte das vezes elas podem esperar.

Criar um melhor balanço entre vida e trabalho

A maior parte de nós esta sempre convivendo com a culpa que vem da procrastinação. Se não tivemos um dia produtivo, é fácil acabar sentindo que não temos o direito de aproveitar o tempo livre. Se tornar mestre no Pomodoro inclui criar uma agenda efetiva, te permitindo aproveitar todo seu tempo livre.

A M√°gica simples do tomate

O nome da técnica apareceu depois que o Francesco Cirillo começou a implementar a técnica utilizando um relógio de cozinha na forma de um tomate, que em italiano é Pomodoro.

O processo básico é simples:

  1. Escolha uma tarefa que você precisa realizar
  2. Configure um timer para 25 minutos
  3. Trabalhe exclusivamente nesta tarefa por todos os 25 minutos
  4. Quando o timer apitar, faça uma pequena pausa (5 minutos são o tempo indicado), neste pausa tome um café, caminhe um pouco, converse com o colega, olhe o facebook, ou seja, qualquer coisa não relacionada com trabalho.

Seu cerebro vai agradecer.

  1. A cada 4 pomodoros fa√ßa uma pausa maior (20 minutos √© um bom tempo, ou 30) seu cerebro vai usar o tempo para assimilar novas informa√ß√Ķes e descansar para o pr√≥ximo round.

O ideal é no inicio do dia, do período ou seja lá como você prefere chamar, que você faça uma lista das tarefas que pretende realizar naquele dia, uma tarefa pode precisar de mais de um pomodoro para ser concluída, isto não é problema. Mas é importante que você anote em algum lugar o que fez em cada pomodoro, o indicado na técnica é fazer isto quando começou a trabalhar no pomodoro, e ao final do pomodoro marcar que trabalhou um pomodoro naquela tarefa.

Manter esta lista de alguma forma tem diversas vantagens, uma √© que voc√™ vai saber quanto tem para fazer no dia, mas o mais importante √© que voc√™ vai ter uma indica√ß√£o vis√≠vel de quanto realizou no dia, e isto ajuda bastante a n√£o terminar o dia com aquela sensa√ß√£o de que n√£o fez nada de √ļtil mesmo tendo trabalhado o dia todo (quem nunca passou por isto?).

Depois vou detalhar melhor o Pomodoro, o que fazer quando aparecem interrup√ß√Ķes, como utiliza-lo junto com outras t√©cnicas apresentadas no livro, mas este √© o conceito b√°sico.

O filtro do tato (por que nerds/geeks tem problemas de relacionamento com outras pessoas)

Bom, eu sou um exemplo vivo, pelo menos eu acho que sim, de que nerds, geeks ou como preferirem ser chamados, tem problemas no trato com outras pessoas.

Sempre acham que eu sou direto demais, ou que sou grosso, ou qualquer coisa do gênero.

Na verdade, eu concordo que sou direto demais, n√£o com a parte de ser grosso.

Eu acredito que se eu penso alguma coisa, eu posso dizer aquilo, e azar é de quem estiver ouvindo, mas isto ja me trouxe muitos problemas.

Mesmo, pelo menos na minha opini√£o, eu sendo um dos melhores na parte t√©cnica do que eu fa√ßo, eu acabo sempre me prejudicando por falar o que eu penso e outras pessoas n√£o gostarem de ouvir isto, o que prejudica inclusive o crescimento profissional …

Eu ja tentei ser gerente de projetos, e tenho a consci√™ncia de que pelo menos por enquanto n√£o seria um bom gerente …

Em empresas que eu trabalhei, ja houveram casos em que mesmo sabendo que eu tinha a resposta, colegas de trabalho evitavam perguntar alguma coisa para mim.

Bom, eu ja melhorei muito neste ponto, acho que hoje sou razoavelmente conhecido na “comunidade java” aqui no Brasil, e cheguei a ouvir de um gerente: Bahh, legal, n√£o sabia que tu era “O Urubatan”.
Mas melhorei isto com muito custo, e n√£o foi muito f√°cil …

Mas voltando ao assunto deste post, eu encontrei um texto excelente que explica muito bem, na minha opini√£o, por que a maioria dos Nerds tem problemas no relacionamento com outras pessoas “N√£o Nerd”.
O texto original é este: Tact Filters

A baixo segue uma tradução livre deste excelente texto.

Filtros de tato

Todas as pessoas possuem um “filtro de tato”, que aplica um filtro de “trato social” em uma dire√ß√£o h√° tudo que passa por ele. A maioria das “pessoas normais” tem este filtro posicionado para filtrar tudo o que elas falam ou fazem. Ent√£o toda e qualquer coisa que as “pessoas normais” dizem, tem a quantidade ideal de “filtro para trato social” aplicado, antes de elas realmente falarem. Isto normalmte acontece por que quando eles estavam crescendo, os seus pais continuamente diziam para eles coisas como: “Se voc√™ n√£o pode dizer algo de bom, n√£o diga nada!”, ou ent√£o “N√£o diga este tipo de coisa, vai fazer com que eles se sintam mal!

“Nerds”, por outro lado, tem este filtro, aplicado na posi√ß√£o contr√°ria, ou seja, tudo o que eles ouvem √© filtrado. Ent√£o, qualquer coisa que qualquer um diz para eles, tem a quantidade adequada de “filtro social” aplicado quando eles ouvem. Isto normalmente √© por que quando eles estavam crescendo, as outras crian√ßas ficavam incomodando e dizendo coisas desagrad√°veis, e os seus pais diziam o tempo todo: “Eles est√£o dizendo estas coisas s√≥ por que eles est√£o com ci√ļmes”.

Quando “pessoas normais” conversam entre si, elas normalmente aplicam a quantidade apropriada de “tato social” para tudo o que eles dizem, e ningu√©m sai com os sentimentos feridos. Quando “Nerds” conversam entre si, eles normalmente aplicam a quantidade adequada de “tato social” a tudo o que eles ouvem, e ningu√©m sai com os sentimentos feridos. Entretanto, quando pessoas normais, falam com “Nerds”, os “Nerds” ficam frustrados com freq√ľ√™ncia, por que as “pessoas normais” parecem estar sempre evitando de dizer o que eles realmente querem. E pior ainda, quando “Nerds” falam com “pessoas normais”, estas com freq√ľ√™ncia saem com os sentimentos feridos, por que os nerds n√£o aplicam o filtro ao que eles est√£o falando, esperando que o ouvinte o fa√ßa.

Ent√£o, os “nerds” precisam entender que as “pessoas normais”, precisam aplicar este filtro para tudo o que eles dizem, eles ficam desconfort√°veis se eles n√£o puderem fazer isto. “Pessoas normais” precisam entender que fora o fato de os nerds normalmente n√£o possuirem “tato”, as coisas que eles dizem quase nunca devem ser tomadas como pessoais. Ambos os tipos de pessoas precisam ter uma quantidade extra de paci√™ncia quando estiverem lidando com algu√©m que possua o “filtro de tato” na dire√ß√£o oposta a sua.

——————-

Acho que este texto explica mais ou menos bem, os motivos destes “conflitos” entre os “nerds” e as outras pessoas.

√Č poss√≠vel para um nerd amenizar bastante este problema, acho que na maior parte das situa√ß√Ķes eu ja melhorei muito, mas eu continuo achando irritante quando as pessoas ficam cuidando o que v√£o falar, ou at√© mesmo falando claramente algo diferente do que est√£o pensando apenas para n√£o “ferir os sentimentos” de quem esta ouvindo.

As vezes eu até encaro isto como um pouco de hipocrisia.

Mas quem sou eu para querer mudar o mundo …

Ent√£o, o que voc√™s acham deste texto, n√£o √© mais ou menos isto o que acontece? mesmo os motivos originais mudando bastante de uma pessoa para outra …

Eu acho que entender esta “teoria” tem me ajudado bastante, e um exerc√≠cio de paci√™ncia de vez em quando ajuda muito tamb√©m ūüėÄ

O texto original é de autoria de: Jeff Bigler.
Todos os outros coment√°rios e tradu√ß√£o s√£o de minha autoria ūüėÄ