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 ;)

that-s-all-folks

 

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:

[client]
host=127.0.0.1
user=myuser
password=mypassword

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 --defaults-extra-file=.my.cnf -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.

Conclusão

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.

iOS iOS

 

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.

Nginx

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

PHP

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.

 

Curiosidade Ruby do dia #3: Strings

Strings são, em qualquer linguagem, cadeias de caracteres. Em Ruby, você pode acessar o conteúdo de uma string de forma semelhante a um array, exemplo:

message = "Hello World"
puts message[0,5] # Hello

É possível substituir uma palavra de dentro de uma string como se ela fosse um elemento de um array, veja:

message = "I like cats"
puts message # I like cats
message["cats"] = "dogs"
puts message # I like dogs

Uma exceção será disparada caso você tente substituir algo que não existe na string:

message = "I like cats"
message["dogs"] = "birds"
IndexError: string not matched

Além disso, você também pode obter o conteúdo de uma string utilizando um range, exemplo:

message = "ABCDEFGH"
puts message # ABCDEFGH
message[0..2] = "XYZ"
puts message # XYZDEFGH
 

TED

Confesso que gosto bastante de assistir os vídeos do TED. Os vídeos são curtos e narram a experiência de pessoas que possivelmente você não encontraria por aí para conversar.

Um dos vídeos que vi recentemente fala em tentar algo novo por 30 dias. 30 dias é geralmente o tempo necessário para assimilar ou abandonar um hábito.

Os próximos 30 dias irão passar, de um jeito ou de outro, então por que não tentar algo novo? Existe no Quora uma thread sobre quais seriam os melhores vídeos do TED. Assistí-los já pode ser um primeiro novo hábito de 30 dias.

 

DIY: Rastreamento veicular

Todo dia ouvimos histórias de roubos, que estão cada vez mais violentos. Com toda essa bandidagem solta, resolvi procurar uma forma de rastreamento veicular. Uma amiga sugeriu a empresa e-novate, mas acabei encontrando uma solução de baixo custo, que me motivou a escrever esse post.

Rastreador

Uma busca no MercadoLivre nos trás dezenas de modelos. Comprei por cerca de R$150 um rastreador (TK-102B), que além de informar a localização do carro ou moto, permite ouvir o que está se passando no local. Se você quiser investir mais, pode optar por modelos que até cortam o combustível e ignição do carro.

Somente depois de receber o rastreador que percebi que ele também está a venda na DealExtreme. Comprar lá é mais barato, mas a entrega está demorando muito.

Chip

O rastreador precisa de um chip para poder enviar mensagens. Optei por comprar um chip pré-pago da Vivo. Em Minas Gerais o sinal da operadora é bem razoável e você pode fazer via Paypal recargas mensais a partir de R$5,00.

A operadora tem aplicativos para iOS e Android e por eles você pode acompanhar a validade dos seus créditos. É necessário uma recarga a cada 30 dias, senão não será possível enviar mensagens.

Conclusão

Usar um rastreador pode ser uma forma barata de proteger seu carro ou moto. Por hora estou rastreando meu carro apenas por brincadeira. Assim como seguros e planos de saúde, espero que seja uma dessas despesas gastas para não se usar :)

 

Betacoins para o Mailbox para Mac

O Mailbox é um cliente de email famoso para celulares que lançou recentemente uma versão para Mac. Pode testá-lo somente quem tem betacoin. Tenho três betacoins e para usá-los basta salvar uma das imagens abaixo:



 

Ferramentas para monitoramento do Twitter

Tenho uma conta no Twitter que uso para experimentos da API do microblog. Recentemente, tive a necessidade de monitorar o número de seguidores dessa conta, para analisar o impacto de uma ação. Para o monitoramento, usei as seguintes ferramentas:

  • Twitter Counter: na versão gratuita, te dá gráficos da evolução de followers dos últimos 3 meses.
  • Favstar: útil para mostrar a repercussão de um tweet.
  • JustUnfollow: gera listas de não seguidores, recentes unfollowers e followers e usuários inativos. Envia emails diários com a evolução da sua conta.
  • SumAll: outra aplicação para medir o alcance dos seus tweets. Também entrega emails diários com um relatório sobre o assunto.

Além disso, o próprio Twitter pode enviar um email semanal informando: total views, new followers, retweets e quais tweets mais repercutiram.

 

Gource, uma forma estilosa de ver logs do seu controle de versão

O Catarse é uma plataforma brasileira de crowdfunding que em 2 anos já apoiou mais de 700 projetos, movimentando quase 5 milhões de reais. São números impressionantes, estão todos de parabéns por fazer acontecer, mas não é essa a razão do meu post :)

Ao me deparar com seu post de estatísticas, o vídeo da evolução do código-fonte do app deles me chamou a atenção. Ele foi feito com o Gource, que até o momento não conhecia. Esse aplicativo lê os logs do sistema de controle de versão (Git, Mercurial, Bazaar, Subversion) do seu projeto e gera a visualização gráfica da evolução do desenvolvimento. Por exemplo, o vídeo abaixo mostra a evolução dos commits de 2004 a 2009 do Rails:



O Youtube está cheio de vídeos desse tipo. Se você usa Mac OS, pode instalar o gource via port:

port install gource
 

Dicas aleatórias para gestão de código

No post anterior mostrei como migrar um repositório de SVN para Git. No meu caso, eram mais de 2000 commits, 1 GB de código, feito por meia dúzia de programadores. Abaixo compartilho algumas dicas que podem ser úteis na gestão de todo esse código:

Controle de Banda

Ao fazer a migração dos repositórios, comi uma boa parte da banda de Internet e vi que no servidor local de Internet não havia nada para balancear velocidade. Fazendo meu dever de casa, descobri que é possível controlar a banda do que o Mac OS transfere, através do utilitário ipfw. Por exemplo, se você quer limitar a 200KB o tráfego que sai de sua máquina pela porta 22 – execução de um git push, por exemplo – digite:

sudo ipfw add pipe 1 ip from any to any out dst-port 22
sudo ipfw pipe 1 config bw 200KBytes/s

Isso criará uma regra em seu sistema operacional. Para conferir as regras em execução:

sudo ipfw pipe list

…e para apagar a regra criada:

sudo ipfw pipe delete 1

Gitlab

O Gitlab é feito com Rails e faz o gerencimento de repositórios Git. Sua interface e funcionalidades lembram muito o GitHub. Você cria e edita repositórios com cliques, adiciona membros ao time com facilidade e ainda tem a possibilidade de criar wikis para seus projetos. Só me arrependo de não o ter instalado antes.

StatSVN

O StatSVN é um programa em Java que lê seu log do Subversion e produz várias estatísticas. Se você é ligado a números, teste esse programa!

 

Migrando um repositório SVN para GIT

Nos últimos dias, pesquisei uma forma de migrar um repositório de SVN para GIT e quando consegui fazer, percebi que era mais fácil que eu imagina. Com isso, resolvi escrever uma receitinha de como fazer isso.

Inicialmente você deve criar um arquivo mapeando seus usuários do SVN para o GIT. Ele deverá ter o formato abaixo:

leonardo = Leonardo Faria <leonardo @email.com>
autor2 = Autor <autor @email.com>

Nota: caso você não queira manualmente escrever esse arquivo, vasculhe o log do seu projeto SVN e obtenha a lista de autores automaticamente:

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" < "$2">"}' | sort -u > authors.txt

Read more

 

Configurando o Sublime Text 2

Tempos atrás tinha instalado o Sublime, mas não o usei efetivamente. O Nando Vieira fez um ótimo post detalhado sobre o editor, e após isso, resolvi dar uma olhada mais a fundo. O Sublime é altamente configurável e abaixo cito algumas modificações que fiz.

Plugins

O Sublime possui um gerenciador de plugins que extendem as funcionalidades do editor. O post que citei do Nando mostra como instalá-los. Esses são os plugins que andei testando:

  • Git: integra funcionalidades do Git a seu projeto;
  • SidebarGit: integrar comandos do Git a sidebar do projeto;
  • MacTerminal: integra o iTerm 2 ao Sublime;
  • BracketHighlighter: destaca blocos de código. Útil quando você pega código alheiro e se perde tentando entender onde começam e terminam funções e métodos;
  • Sublime Lint: valida a sintaxe inline de códigos JavaScript, Ruby e PHP. Nunca fui fã desses recursos, mas resolvi instalar para experimentar;

Tema

No Textmate eu usava o esquema de cor All Hallow’s Eve. Esse e todos os outros esquemas de cores podem ser usados no Sublime. Para isso você precisará do tema Soda. Criei um fork do tema original para colocar ícones nas pastas, baseado em um hack que encontrei. Para instalar o tema, clona o repositório:

cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages
git clone https://github.com/leonardofaria/soda-theme.git "Theme - Soda"

Para ativá-lo, abra o arquivo de preferências do Sublime (Sublime Text 2 > Preferences > Settings – User ou command + ,) e adicione:

{
  "theme": "Soda Light.sublime-theme",
  "color_scheme": "Packages/Color Scheme - User/All Hallow's Eve Custom.tmTheme"
}

Os temas do Textmate podem ser encontrados nesse repositório do Github. O tema Soda permite a customização das abas, tornando-as semelhantes as abas do Google Chrome.

Para usar o estilo clássico de abas, acrescente no seu arquivo de preferências:

"soda_classic_tabs": true

Ícone

Eu particulamente não gosto do ícone padrão do Sublime. No Dribbble, vi alguns designers fazendo releituras do icone original. Uma busca no site retorna dezenas de boas opções.




Escolhido o ícone, basta copiá-lo do site e substituí-lo no Sublime. Vá na pasta Aplicativos do seu Mac OS, clique com o botão direito no ícone do Sublime e escolha “Mostrar Conteúdo do Pacote”. Em seguida, localize a pasta Contents > Resources. O arquivo a ser substituído é o “Sublime Text 2.icns”.

 

Raspberry Pi

A alguns dias atrás comprei um Raspberry Pi. Ele é um computador do tamanho de um cartão de crédito, possui um processador de 700 MHz, 512 MB de Ram e você pode usar um cartão de memória como disco de boot. Para alimentação, um carregador de celular basta. Estou usando um teclado de um iMac capacete e um adaptador wifi xing ling para acessar a rede sem fio de casa.

Existe uma versão de Debian específica para ele, mas se você não gosta dessa distribuição, pode usar o Arch Linux. Escolhi o Debian, configurei Apache e PHP para me enviarem email com o IP do computador e assim trabalho remotamente com ele. Ainda não dei um destino final a ele, mas pela Internet dá para imaginar várias possibilidades:

Painel de fotos;
Media Center, para reproduzir seus filmes, usando o conhecido XBMC;
Portão eletrônico de garagem;
Wireless airplay speaker, muito bacana para quem não tem um Apple TV.

 

Para agilizar o desenvolvimento do frontend

Uso o Chrome como browser padrão em minha máquina e algumas extensões interessantes para desenvolvedores.

 

mytop, para monitorar seu MySQL

O mytop é um clone do comando top para o MySQL. Ele é usado para monitorar a performance do seu banco, sem precisar de softwares caros, complexos ou pesados. Ele é escrito em Perl e abaixo está um mini-roteiro de como instalá-lo – no meu caso, Mac OS Mountain Lion.



Antes de compilar o mytop é necessário instalar o pré-requisito DBD-Mysql. No terminal, digite:

perl -MCPAN -e 'shell'

Em seguida, execute:

get DBD::mysql
exit

Ao sair do prompt do cpan, digite:

cd ~/.cpan/build/DBD-mysql-<version>/
perl Makefile.PL--testuser='mysql_user_name' --testpassword='mysql_passwd'
make
make test
make install

Faça o download do pacote porque já é hora de compilá-lo:

tar -zxvf mytop-<version>.tar.gz
cd mytop-<version>
perl Makefile.PL
make
make test
make install

Execute o mytop pela primeira vez:

mytop

Pode acontecer o seguinte erro:

Error in option spec: "long|!"

Caso esse erro aconteça, é necessário editarmos o mytop. Abra o arquivo – aqui instalado em /usr/local/bin e edite a linha 159:

"long|long_nums|l!" => \$config{long_nums},

Além disso, substitua as linhas 958 e 959 pelas linhas seguintes:

if ($host)
	{
		$host =~ s/^([^.]+).*/$1/;
		$thread->{Host} = $host;
	}

Usando o mytop

Você pode monitorar seu banco passando as configurações de conexão via shell:

mytop -u 'seuusuario' -p 'suasenha' -h 127.0.0.1 -d 'seubanco'

…ou pode criar um arquivo .mytop em sua pasta de usuários, como o abaixo:

user=seuusuario
pass=suasenha
host=127.0.0.1
db=seubanco
 

WordPress Plugin: Fast Flickr

Portuguese version / Versão em português
Fast Flickr is a fast way to show a Flickr set using a lightbox window.

Demo:

[fastflickr set=72157630371382464]

Uso:

  1. Download files, copy the folder (fastflickr) into /wp-content/plugins;
  2. Active the plugin;
  3. Use in your posts or pages:
[ fastflickr set=SET ID ]

The original source code is avaliable on GitHub.