quarta-feira, 15 de junho de 2011

Buscar palavras do dicionário para registrar domínio



No início do mês de junho foram finalmente oferecidos registros para o domínio colombiano .CO. Em pouco tempo já haviam um milhão de pedidos de registro! Empresas de destaque na Internet, como Amazon e Twitter foram atraídas pela novidade, e com isso impulsionaram uma corrida desenfreada junto às empresas de registro.



Pensando nas possibilidades de negócio de se garantir um nome de Internet rentável com o sufixo .co, decidi cruzar os dados de um dicionário e fui buscar ajuda ao amigo Shell... Irei mostrar nas linhas a seguir o que consegui com essa brincadeira!



Para iniciar, instalei um dicionário de correção ortográfica do OpenOffice.org, o myspell. No Debian, basta executar o comando a seguir como super usuário:


apt-get install myspell-pt-br


Entre diversos arquivos, o que me interessou foi o pt_BR.dic. Com cerca de 4,5 MB, ele possui mais de 300 mil verbetes da língua portuguesa! Para não correr o risco de danificá-lo, copiei para minha área (i.e., home):


cp /usr/share/hunspell/pt_BR.dic ~


O arquivo é originariamente codificado com ISO-8859-1. Pra me livrar dessa orelhada, o converti para o formato Unicode (i.e., UTF-8) usando o iconv:


iconv -f iso-8859-1 -t utf-8 pt_BR.dic > pt_BR-utf8.dic


Eis um trecho do arquivo pt_BR-utf8.dic:

abacalhoar/akYMjL
abacamartado/D
aba?anar/akYMjL
abacanto/D
abacatada/B
abacataia/B
abacatal/BR
abacate/BP
abacate-do-mato
abacateiral/BR


Não sei precisar que tipo de informação é carregada após o sinal de barra em cada linha do arquivo, mas com certeza não me interessa nesse momento. Vamos removê-la e filtrar apenas as palavras que terminam em "co" com a ajuda de um conhecido amigo, o SED!


sed -e 's/\/.\+$//' -e '/co$/!d' pt_BR-utf8.dic > palavras-co.txt


E eis o arquivo resultante palavras-co.txt, bem mais comportado:

abrodílico
abrotanínico
abrotonínico
absalônico
abscísico
abscíssico
absenteístico
absentístico
absintático
absintêmico


É certo que existem palavras muito esdrúxulas da amada língua portuguesa que jamais seriam usadas num nome da Internet. Usando um outro carinha legal, o AWK, além do comando sort, criei um outro arquivo contendo a quantidade de letras e a palavra, ordenando pela primeira coluna. Eis a mágica:


awk '{print length($0)"\t"$0}' palavras-co.txt | sort -n > palavras-co2.txt


E olha só como ficou o arquivo palavras-co2.txt:

5 dorco
5 écico
5 édico
5 efuco
5 élico
5 êmico
5 emoco
5 ênico
5 épico
5 Érico


Agora resta a parte mais divertida do trabalho: varrer a lista de palavras do dicionário e analisar se cada uma delas já não foi registrada nesse novo domínio ".co". O resultado será um outro arquivo de texto, semelhante ao anterior, mas com a adição de uma terceira coluna, que dirá a disponibilidade do domínio "palavra.co".



Para essa tarefa, usei comandos como while, read, echo e cut do Shell e carinhas legais como o sed (de novo!) e curl. Como consegui a URL de teste? Tive que fuçar nos fontes da página do cointernet.co...



Bom, eis o código resultante em Shell. Ficaria mais bonito eu ter colocado num arquivo Shell Script, mas fiquei com preguiça...


> palavras-co3.txt
while read linha
do
letras=`echo $linha | cut -f1 -d' '`
palavra=`echo $linha | cut -f2 -d' '`
token=`echo $palavra | sed 's/co$/.co/'`
disp=`curl -s "http://www.opportunity.co/register/whois-lookup.php?oppurl=$token"`
echo "$palavra"
echo -e "$linha\t$disp" >> palavras-co3.txt
done < palavras-co2.txt


Olha só que legal o resultado disso: o arquivo de texto resultante (um outro!) trará TRUE caso a palavra esteja disponível para o registro ou FALSE se alguém já tiver tido essa ideia!

Eis um trecho do arquivo palavras-co3.txt:

5 dorco FALSE
5 écico TRUE
5 édico TRUE
5 efuco FALSE
5 élico TRUE
5 êmico TRUE
5 emoco FALSE
5 ênico TRUE
5 épico TRUE
5 Érico TRUE


Legal, funcionou, mas e agora?!

Chuá...! [balde-de-água-na-cabeça]

Ao rodar o script e gerar o arquivo, disparei um tail -f e cheguei à conclusão de que alguém já fez esse trabalho e tratou de registrar tudo quanto é palavra do dicionário de português... (Malditos!)

Aliás, só apareceram como disponíveis as palavras acentuadas, que provavelmente não poderão ser registradas caso haja a versão normalizada delas (ex: "mímico" vs "mimico").

Ou seja, se você tinha esperanças de conseguir algo como bote.co, magi.co, sova.co ou peni.co, perca-as... Ou senão entre em contato com o feladamãe que registrou antes de você e negocie o nome de domínio...

Bom, pelo menos serviu para brincar um pouco com o Shell. :D

Desafio: tente normalizar as palavras do arquivo palavras-co.txt (i.e., deixando tudo em minúsculo e retirando os acentos e caracteres especiais) antes de fazer as consultas WHOIS com o script.


segunda-feira, 6 de junho de 2011

Persistência nas Nuvens com NoSQL



Um termo recorrente quando se fala em computação em nuvem é a persistência dos dados em bancos do tipo NoSQL, ou seja, em uma forma não-relacional. Essa tecnologia não substitui os consolidados Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDRs), mas ao invés disso torna-se uma nova ferramenta disponível ao desenvolvedor.


Implantar uma aplicação na nuvem não significa que NoSQL será utilizada. Entretanto, as funcionalidades que essa tecnologia provê são altamente convergentes com as propostas da computação em nuvem: performance, escalabilidade horizontal, alta disponibilidade e flexibilidade.




View more presentations from hjort.


Nesta apresentação são introduzidos conceitos como Computação em Nuvem, Persistência de Dados, Bancos de Dados Relacionais, o movimento NoSQL, o modelo de dados do Bigtable da Google, a arquitetura do Dynamo da Amazon e detalhes técnicos do Apache Cassandra.