Resolving slow loading of local virtualhosts on Chrome

I’ve in my development mac different virtualhosts, using .local or .wp TLDs. Opening these address in Chrome are slow – about 3 seconds ‘resolving address’. This situation doesn’t happen in Safari or Firefox. Here is my typical /etc/hosts configuration:
Read more


Replace git author using shell script

This is an old trick that saved me several times. Sometimes people forget to setup their name and email information. The following script is useful to fix mistakes:


git filter-branch -f --env-filter '


if [ "$GIT_COMMITTER_EMAIL" = "[email protected]" ]
  cn="New author name"
  cm="[email protected]"

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"

echo "Run after"
echo "git push origin +master:master"

Shell script para gravar áudio da Web

This post is also available in English.

Um dos meus programas de rádio favoritos é o Central 98, da 98FM (de Belo Horizonte). Ele começa às 10h da manhã e devido a diferença de 6h de fuso horário eu não consigo ouví-lo ao vivo. Então, criei um shell script para gravar o programa e assim posso ouvi-lo no meu tempo livre.

Read more


Shell script for audio recording

Esse artigo está disponível em português.

One of my favourite radio shows happens every day at 10 AM (Brasilia Timezone). I was unable to listen to it because the time zones. Then, I created the following small shell script to record the show and then I can listen to it in my free time.
Read more


the ink magazine

the ink magazine was an assignment of my HTML & CSS classes in the Web and Mobile App Design and Development program, performed in Langara College.

The students was supposed to create a magazine responsive layout using HTML/CSS. (I usually use Gulp and SASS in my projects, however, I didn’t use extra tools in this task).

The source code is available in my Github profile.


My Sublime Text settings

Almost 3 years ago I wrote (in Portuguese) a post about my Sublime Text settings. Now, I updated my tips in an English post.

1. Free video course

If you know nothing about Sublime, please watch these free videos from tut+.

2. Package Control

First of all, you should install Package Control to manage plugins. Actually, you can install packages just copying the package files to correct folder, however, Package Control is easier than copy & paste. Open Sublime Text console (View > Show Console or ctrl + `) and paste the following line:
Read more


Useful apps that I use daily

I decided write a post describing some tools that I use in my MacBook to enhance my tasks.


How awesome is Alfred? It is totally awesome! Alfred is a great tool working as a shortcut to daily tasks. More than that, you can create customized workflows that improve even more your productivity. You must see:

  • Yet another layouter: you can use keyworks like top left, top right to resize and move windows. This is really useful for people who use multiple displays
  • Battery: it is a workflow that shows relevant information about battery, such as charge cycles, health and serial number
  • Alfred Workflows Forum: the community forum where people share their workflows
  • Packal: an unofficial directory of workflows and themes. My currently theme is the Elegant v4, but you can choose your favorite in several options.

Read more


A new place

I have just moved this week to Vancouver. I started my Web and Mobile App Design and Development post-degree in Langara.

Maybe I should write a blog talking about cultural differences between Brazil and Canada, like dozens of Brazilians but I think that those pages show limited or inaccurate point of views.

New times are coming! :)


Data looks better naked

Data is usually explained in tables or charts, but people sometimes commit mistakes when they add in them redundant or boring elements. A good table or chart is worth a thousand words and the following three gifs show how to improve your presentations. Source

Remove to improve - the pie chart edition
Read more


codestacker in Github

codestacker Some years ago, precisely on July/2008 I created codestacker. I know, there were several options to collect snippets, but I decided to code my own solution. More than that I have planned to develop a Textmate bundle and a Mac OS Widget (who cares?), however I did not code these functions.

In the latest days, I migrated all old data to a new app written in Rails 4.2 and hosted on Heroku. The source code is available in Github.


One line webservers for everybody

Sometimes it is necessary to serve a folder with static resources (images, for example) as a web server. The probably most popular commands to perform these tasks are:

php -S localhost:9999
python -m SimpleHTTPServer 9999

The option that uses PHP built-in web server requires PHP 5.4+. The following gist provides several other ways to run a webserver locally.
Read more


Useful Chrome extensions to developers

First of all, you must see Dev Tips: developer tips delivered daily in your email.

Now, these are some useful extensions that I’ve been using in Chrome to help me to develop webapps:
Read more


Uptime monitoring tools

Sometimes people cann’t believe in their infrastructure. This can be easily understood because maintaining complex software integrates several pieces of information. Moreover, people sometimes hire bad IT solutions and as a result, shit accidents happen.

I have been using some tools to report me web server down time. Here we go:

  • it is a powerful tool that provides several features. I am currently using it to monitor a specific term in a specific page. It’s a free feature and it can check a website from 2 different countries
  • Pingdom: it looks like a full solution to analyse performance issues and downtime
  • Pingoou: this a Brazilian option. It offers up to 3 URLs in the free account and notifications via SMS, Campfire, Hipchat and email in the paid accounts
  • SiteUptime: 1 monitor for free each 30 minutes. Actually is not the best deal
  • UptimeRobot: it monitors up to 50 websites for free

Building it own tool

You can alternatively build your own monitoring tool to check if a website is up or down. The concept is pretty simple: you can use your favorite language to create a script that loads a page and then you are able to check a specific string in the document. In the following example I used Ruby and Mechanize gem to request a status page.

In this case, I use Heroku to run this script. The emails are delivered by SendGrid, via Pony gem. There are no costs in the process.

This post is also published in coderwall.


Writing for IELTS and TOEFL

I took the TOEFL exam some weeks ago. This is one of most popular tests to prove English skills. It is considered by many people a tough exam because it requires not only English skills, but also time management skills.

The test takes 4 hours to be finished. The last part of the test is to write 2 texts in 50 minutes. In the first task, the student is supposed to summarise a text and a lecture, which lecture sometimes cast doubt in the passage. The second one is called independent task. In this task the student should write about a specific subject. During my preparation, I written more than 50 texts and I believe that practice makes perfection. After this hard work, I imagined create a simple app with exercises and tips to improve the writing skills.

Writing for IELTS and TOEFL has 100 exercises to practice writing. In addition, I collected several tips to improve writing skills, such as an effective checklist and an extensive explanation about linking words. All these tips are useful in my exam.

Writing for IELTS and TOEFL

The app is available on Google Play and Apple Store and it costs US$0.99.


Notice about future

I stopped writing in this blog for a while. I have been using this blog since 2005 and my absence is justified by live changes.

I am going to write my posts in English but texts in Portuguese could appear eventually. Sorry for eventual grammar mistakes ;)



Curiosidade MySQL do dia: senhas em scripts

Sempre que você está executando um script automatizado que usa o MySQL você possivelmente se pergunta como aplicará alguma boa prática para evitar a inserção de senha diretamente no shell.

Fiz uma pesquisa rápida sobre o assunto e encontrei duas soluções:

1) Variáveis

Você pode usar a variável MYSQL_PWD para armazenar uma senha de conexão com o banco. Exemplo:

export MYSQL_PWD=mypassword
mysql -h127.0.0.1 -uuser -e "show processlist"

No caso acima o mysql está sendo usado sem a opção -p, que é opção utilizada para informar a senha do banco. O comando só é executado com sucesso pois o MySQL automaticamente identifica a variável MYSQL_PWD. Utilizei a opção -e para executar via shell o comando show processlist, que lista as queries em processamento no momento.

2) Arquivo adicional de configuração

Outra opção interessante é criar um arquivo .my.cnf com os parâmetros de conexão com o banco e guardá-lo em sua pasta de usuário. Exemplo:


Lembre-se de dar permissão de acesso a esse arquivo somente para o seu usuário:

chmod 600 .my.cnf

Feito isso, quando necessário executar o mysql, basta informar as credenciais de conexão do seu arquivo:

mysql -e "show processlist"

Atenção: Lembre-se sempre de rever as permissões do usuário do MySQL que executará scripts. Evite sempre dar privilégios a mais e assim você poderá evitar grandes tragédias :)


Mini-review: Cubieboard 3

cubieboardO Cubieboard é uma placa com processador ARM bem pequena que entrega um computador razoável por seu preço. Com essas características, pode ser usada como media center para sala de TV ou até mesmo como um ponto de venda de loja. Já são 3 versões de Cubieboard, comprei recentemente o modelo mais recente na Amazon, que veio com case, fonte USB, cabo SATA e outras coisinhas.

Cubieboard vs Raspberry Pi

Acho que é impossível falar do Cubieboard sem compará-lo com o Raspberry Pi. Como já tive um, resolvi escrever esse mini-review comparando os dois últimos modelos. Por partes:

  • Processador: 1GHz dual no Cubieboard contra 700MHz no Raspberry
  • Memória: 2GB no Cubieboard contra 512MB no Raspberry
  • Armazenamento: Ambos tem entradas MicroSD. Além disso, o Cubieboard tem 4GB internos e entrada para um disco SATA.
  • Saídas: HDMI e VGA no Cubieboard, enquanto o Raspberry conta com uma saída HDMI. O modelo mais recente do Raspberry possui quatro portas USB e o Cubieboard somente duas. Portas USBs sempre fazem falta e um minihub USB é uma boa pedida.
  • Preço: o Cubieboard 3 custa por volta de US$89,00 e o Raspberry por volta de US$35,00

O Cubieboard é um pouco maior que o Raspberry, mas é igualmente portátil. Alguns cases já trazem espaço para um HD de notebook SATA, facilitando o transporte do disco. Vale lembrar que o Cubieboard tem um adaptador Wifi.

Sistema Operacional

O Cubieboard vem com Android 4.4 instalado em sua memória interna porém é possível usar várias distribuições Linux, tanto na memória interna quanto no cartão MicroSD ou no HD Sata. A instalação no cartão de memória geralmente é feita baixando uma imagem pronta do OS e a clonando através do comando dd.

Já a instalação na memória interna é feita ligando o Cubieboard em uma porta USB do computador e transferindo o sistema operacional através de um programa chamado LiveSuit (Mac e Linux). Usuários de Windows podem utilizar um programa chamado PhoenixSuit.

Na saga para deixar o Cubieboard do meu jeito testei algumas distribuições. Foi na base da tentativa e erro, e não me aprofundei bastante em cada uma delas. As distribuições testadas foram:

  • Linaro: baseada no Ubuntu. Tive problemas com updates da distribuição.
  • Cubian: baseada no Debian. Instalei no SD Card e tentei sem sucesso instalar na memória interna.
  • Fedora: não reconheceu meu monitores com saída VGA. Possivelmente deveria testá-la usando uma saída HDMI.
  • Ubuntu Desktop: foi a distribuição que tive sucesso. Tem suporte VGA e HDMI, mas aparentemente é a versão 12. Infelizmente essa distribuição vem com Unity por padrão, o que a torna um pouco lenta, entretanto instalando o XFCE ou outro gerenciador de janelas mais leve é uma alternativa para melhorar a performance.


Para quem gosta de minicomputadores com Linux, o Cubieboard é uma ótima opção. Apesar de não ser tão conhecido como o Raspberry Pi, talvez o mais famoso da categoria, seu desempenho é razoável até mesmo para ser uma máquina de escritório.


e-Recursos mobile

Esse é um post a posteriori. A mais ou menos 1 ano atrás foi publicado a primeira aplicação móvel do Ministério da Previdência Social. Trata-se do e-Recursos, sistema de processo eletrônico de recurso do INSS.

Android Android

O aplicativo permite a consulta a movimentação do processo bem como o acesso aos documentos que o compõem, desde que o acesso seja realizado pela própria parte interessada. A aplicação está disponível para Android e iOS e já foram mais de 10 mil downloads.



DIY: Upgrade de SSD no MacBook Air (e outros MacBooks)

ssdA Transcend é uma empresa que produz SSDs específicos para MacBooks. Comprei para um amigo o kit para o MacBook Air 11′ e ontem fiz o upgrade na máquina.

Antes de comprar o kit você precisa descobrir qual o modelo adequado para o seu Mac, pois há kits para todos os MacBooks (Pro, Air e Retina). Se você tiver dificuldades em encontrar o modelo certo, basta instalar um aplicativo que fará a identificação do hardware. O kit é composto por:

  • SSD
  • Case e parafusos para seu SSD adicional
  • Chaves para abrir o MacBook
  • Cabos, manuais e outros itens

A instalação é simples. Basicamente consiste em:

  1. Colocar o SSD novo no case
  2. Ligar o MacBook em modo de recuperação, para clonar o disco novo com o conteúdo do antigo
  3. Abrir o MacBook com as chaves inclusas
  4. Substituir o SSD e fechar o MacBook
  5. Colocar o SSD antigo no case – com isso você ganha uma mídia externa!

O vídeo abaixo explica o processo didaticamente, não tem como errar. Dependendo do modelo de MacBook, pode ser necessário também desconectar a bateria.


Ocultando versões do Nginx e PHP de seu servidor web

Uma prática comum em administração de servidores é ocultar a versão dos softwares utilizados, o que dificultaria na exploração de falhas específicas de um determinado pacote. Resolvi escrever esse arquivo mostrando como é fácil ocultar tais informações no Nginx e no PHP.


Para remover a versão do Nginx das requisições, edite o arquivo nginx.conf (geralmente em /etc/nginx) e dentro de umas seções: http, server ou location, acrescente:

server_tokens off;

O uso da variável na seção http modificará a exibição em todos os servers configurados. Por sua vez, você pode filtrar esse comportamento usando a diretiva na seção server, para remover a informação de versão em um servidor específico ou ainda na seção location, para um local específico. Realizada a alteração, reinicie o servidor web:

service nginx restart


Para ocultar a versão do PHP, abra o arquivo php.ini e procure pela configuração expose_php:

expose_php = Off

Não se esqueça de reiniciar o Apache ou o PHP5-FPM para que a alteração surja efeito.