Chromium as the default browser
March 2, 2013 - No comments yet
The code of Google Chrome is based on Chromium, all the feature implemented in Chromium comes in Google Chrome.
What do you think of being one of the first to test new feature of Google Chrome? Interesting huh!
Download a bleeding-edge build of Chromium for Mac!
Chromium does not update automatically, for this reason I wrote a shell script which updates the Chromium on Mac:
#!/bin/sh
#
# Note, this will remove /Applications/Chromium.app
#
echo '..'
rm -f chrome-mac.zip chrome-mac
export CHROME_VERSION=`curl http://commondatastorage.googleapis.com/chromium-browser-continuous/Mac/LAST_CHANGE`
echo " latest version: $CHROME_VERSION"
echo '..'
export CHROME_OLD_VERSION=`cat ~/dotfile/CHROME_VERSION`
if [ $CHROME_VERSION == $CHROME_OLD_VERSION ]; then
echo ' latest version!'
echo '..'
exit 2
fi
echo $CHROME_VERSION > ~/dotfile/CHROME_VERSION
echo " save latest version: $CHROME_VERSION"
echo '..'
echo " get latest version: $CHROME_VERSION"
echo '..'
wget http://commondatastorage.googleapis.com/chromium-browser-continuous/Mac/$CHROME_VERSION/chrome-mac.zip
echo " compile latest version: $CHROME_VERSION"
echo '..'
unzip chrome-mac.zip
rm -rf /Applications/Chromium.app
echo " install latest version: $CHROME_VERSION"
echo '..'
mv chrome-mac/Chromium.app /Applications/Chromium.app
rm -rf chrome-mac chrome-mac.zip
killall -9 Chromium
open /Applications/Chromium.app
echo 'DONE'
base source: https://github.com/avelino/dotfile/blob/master/chromium_update.sh
The post Chromium as the default browser appeared first on Thiago Avelino.
Riak, alta performance NoSQL para seu projeto
December 23, 2012 - No comments yet
Esse ano de 2012 ajudei a comunidade Riak que a cada dia esse banco de dados vem me surpreendendo. Estou para escrever um blogpost desde fevereiro, mas como vida de programador (pelo menos para mim esse ano) é agitada.
Resolvi falar sobre a performance nesse primeiro blogpost sobre Riak e colocar na mesa um teste (relativamente simples) para compara o tempo de inserção, realmente é um teste simples se tratando de NoSQL.
Antes de mostrar a comparação acho importante deixar claro as vantagens que temos em utilizar Riak:
- Disponibilidade: sistema de recuperação de dados onde trabalha de forma inteligente para que esteja disponível para ler e escrever operações, mesmo em ambiente com falha, assim garantindo a integridade dos dados;
- Tolerância a falhas: pode perder o acesso aos nós (Servidores Riak), devido à falha de rede ou partição de hardware e nunca perder de dados;
- Simplicidade de utilização: facil adição de máquinas em um cluster Riak, sem ocorrer uma carga nos servidores – isso em um pequeno grupo de servidores como uma grande quantidade de servidores Riak;
- Escalabilidade: Riak distribui automaticamente os dados ao redor do cluster e produz um aumento de desempenho quase linear quando você adicionar dados.
Depois de deixar claro os itens acima podemos colocar na messa o Riak e o grande MongoDB, lembrando que esse blogpost não é para falar qual NoSQL é melhor ou para você parar de utilizar um ou outro banco, Riak e MongoDB tem algumas características semelhantes, esse foi o motivo de colocar em teste os dois.
O teste foi simples preciso inserir 1 milhão (1000000) de registro no meu banco de dados, qual banco de dados entrega isso mais rápido para mim?
Código Python usando drive nativo do Riak:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Código Python usano drive nativo do MongoDB:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Um código simples onde faço um loop que vai de 0 a 1000000 (estou fazendo 1000001 inserção), e dentro de cada interação do loop estou gerando um registro no banco de dados. Veja abaixo o resultado:
| 1 2 3 4 5 |
|
Realmente o tempo de execução do Riak é muito mas muito rápido, o que me deixou mais surpreso foi o tempo do MongoDB, o MongoDB demorou 9 vezes mais comparado com o Riak.
Não estou falando que o MongoDB é ruim, ate mesmo que tenho projetos grande em produção usando ele e dependendo do projeto/infra recomendo usar MongoDB.
The post Riak, alta performance NoSQL para seu projeto appeared first on Thiago Avelino.
Palestra sobre London Framework na PyCon Argentina
November 20, 2012 - No comments yetNo começo de junho o Mariano (organizador do evento PyCon Argentina 2012, me fez um convite para ir palestra sobre London Framework (Framework criado por Marinho Brandão).
Nada melhor do que conhecer pessoas e principalmente culturas novas, entender o que os Argentinos estão desenvolvendo e o que anda estudando, ou seja, fazer network (como falamos na área de tecnologia). Dava para ver no rosto dos argentinos a vontade de aprender e de consumir o maximo de informação possível, na PyCon Argentina de 2012 teve uma ótima seleção de palestra, onde foi abordado temas como asynchrony (twisted), Plone (com Erico Andrei – Brasileiro), web2py (com Massimo Di Pierro – criador do framework), Python 3.3 (com Brett Cannon – Desenvolvedor Google) e muito mais.
Tive grande privilegio de palestra sobre London Framework, foi apresentado o motivo de criar um novo framework (Python) e hoje temos funcionando dentro do London. A repercussão foi muito positiva, recebi muitos tweets e e-mails de desenvolvedores querendo saber mais sobre London Framework, o que mostra grande aceitação e necessidade (semelhantes) do framework dentro da comunidade Argentina. Veja abaixo os slide da palestra de London Framework:
A pedidos da organização, fiz minha palestra em portunhol (tinha planejado apresentá-la em inglês, já que não sou fluente em espanhol). Pelas conversas de corredor, acredito que o público entendeu bem o meu portunhol!
No final do primeiro dia de evento tivemos uma confraternização, onde a organização da PyCon Argentina chamou uma pizzaria conhecida de Buenos Aires para fazer algumas pizza. A forma dos argentino preparar a pizza é bem diferente de nos Brasileiros, não querendo puxar sardinha para os Argentinos, é muito gostosa a pizza Argentina.
The post Palestra sobre London Framework na PyCon Argentina appeared first on Thiago Avelino.
Plone, por onde começar?
November 6, 2012 - No comments yetPlone é um CMS (Content management system, ou seja, sistema de gestão de conteúdo), no Brasil muito usado no Governo (saiba mais porque o Governo Brasileiro selecionou Plone como sistema de gestão de conteúdo, palestra do Giuseppe Romagnolli na Plone Symposium).
Por onde começa?
Como estou usando uma maquina Linux vou explicar como subir o Plone em ambiente Unix.
Iremos usar versão 4.2.2 (estável) do Plone, para começa precisamos baixar o source do Plone e descompactar:
$ cd /tmp/$ wget --no-check-certificate https://launchpad.net/plone/4.2/4.2.2/+download/Plone-4.2.2-UnifiedInstaller.tgz$ tar -vxf Plone-4.2.2-UnifiedInstaller.tgz$ cd Plone-4.2.2-UnifiedInstallerAntes de instalar o Plone precisamos instalar alguns pacote no Linux, como:
- python-distribute
- python-dev
- build-essential
- libssl-dev
- libxml2-dev
- libxslt1-dev
- libbz2-dev
- subversion
- git
- libjpeg62-dev
- libreadline-gplv2-dev
- wv
- poppler-utils
- python-imaging
$ echo "Instalar biblioteca Python"$ sudo aptitude install python-distribute python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev$ echo "Instalar biblioteca de imagem"$ sudo aptitude install libjpeg62-dev libreadline-gplv2-dev wv poppler-utils python-imaging$ echo "Instalar controle de versão"$ sudo aptitude install subversion gitApós a instalação das dependências do Plone, vamos começa a realmente interagir com o Plone. Agora precisamos instalar o Plone, existe dois modelo de Plone, um onde instalamos a instancia Plone e outra que instalamos um Cluster de ZEO (ambiente de produção que precisa isolar ZEO do Plone):
$ ./install.sh standaloneNo final da instalação do Plone o mesmo vai retorna algumas informações importante como a senha do usuário Administrador do Zope, pasta que foi instalado o Plone, informações para suporte (da comunidade) e etc.
########################################################################################### Installation Complete ###################### Plone successfully installed at /home/avelino/PloneSee /home/avelino/Plone/zinstance/README.htmlfor startup instructions Use the account information below to log into the Zope Management InterfaceThe account has full 'Manager' privileges. Username: admin Password: xxxxxxx
This account is created when the object database is initialized. If you changethe password later (which you should!), you'll need to use the new password. - If you need help, ask the mailing lists or #plone on irc.freenode.net.- The live support channel also exists at http://plone.org/chat- You can read/post to the lists via http://plone.org/forums - Submit feedback and report errors at http://dev.plone.org/plone(For install problems, specify component "Installer (Unified)") avelino@SAO-NT-01072:/tmp/Plone-4.2.2-UnifiedInstaller $Agora depois do Plone instalado queremos subir um site:
$ cd ~/Plone/zinstance$ lltotal 600-rw------- 1 avelino avelino 316 Nov 6 17:53 adminPassword.txt-rw------- 1 avelino avelino 4161 Nov 6 15:11 base.cfgdrwxr-xr-x 2 avelino avelino 0 Nov 6 17:53 bin-rw-r--r-- 1 avelino avelino 3901 Oct 22 19:16 bootstrap.py-rw------- 1 avelino avelino 7498 Nov 6 17:52 buildout.cfg-rw-r--r-- 1 avelino avelino 4192 Oct 22 19:16 develop.cfgdrwxr-xr-x 2 avelino avelino 0 Nov 6 15:11 develop-eggs-rw-r--r-- 1 avelino avelino 686 Oct 22 19:16 lxml_static.cfgdrwxr-xr-x 3 avelino avelino 0 Nov 6 17:52 partsdrwxr-xr-x 2 avelino avelino 0 Oct 22 19:16 products-rw-r--r-- 1 avelino avelino 3490 Nov 6 17:53 README.htmldrwxr-xr-x 2 avelino avelino 0 Oct 22 19:16 srcdrwx------ 10 avelino avelino 0 Nov 6 18:17 var-rw-r--r-- 1 avelino avelino 9112 Oct 22 19:16 versions.cfg-rw-r--r-- 1 avelino avelino 1901 Oct 22 19:16 zopeapp-versions.cfg-rw-r--r-- 1 avelino avelino 1115 Oct 22 19:16 zope-versions.cfg-rw-r--r-- 1 avelino avelino 2517 Oct 22 19:16 ztk-versions.cfg
$ bin/instance fg2012-11-06 18:59:47 INFO ZServer HTTP server started at Tue Nov 6 18:59:47 2012 Hostname: 0.0.0.0 Port: 80802012-11-06 18:59:47 INFO Archetypes2012-11-06 18:59:53 INFO plone.app.theming Patched Zope Management Interface to disable theming.2012-11-06 19:00:01 INFO Zope Ready to handle requestsTemos o Zope/Plone rodando na porta 8080 liberado para todos os IP de sua maquina, ao acessar o endereço no browser http://127.0.0.1:8080/ veremos esse site:
Precisamos criar um Plone Site, para isso basta clicar no botão “Criar um novo site Plone, após clicar você será redirecionado para uma pagina onde deve preencher com nome e titulo do site, abaixo dessas duas informações temos a lista de produtos (para quem vem de outro CMS geralmente é chamado de Plugin) instalados no Plone. Como estamos começando agora vamos deixar todos em branco e clicar em Criar site Plone.
Após clicar no botão você acabou de criar o seu Plone Site.
Agora basta você colocar conteúdo em seu Plone Site.
Comunidade Plone Brasil
No Brasil temos a comunidade PloneGov-BR.
The post Plone, por onde começar? appeared first on Thiago Avelino.
Comandos tmux (cheat sheet)
October 8, 2012 - No comments yettmux é um software que pode ser usado para vários consoles de multiplex virtuais, permitindo que um usuário acesse múltiplas sessões de terminais separados dentro de uma janela de um único terminal ou sessão de terminal remoto. É útil para lidar com vários programas a partir de uma interface de linha de comando, e para separar os programas a partir do shell do Unix, que começou o programa. Distribuído sob uma licença BSD.Segue abaixo um cheat sheet:
# tmux - terminal multiplexer
## Managing tmux sessions: $ tmux # start tmux server $ tmux at # attach running sessions to a terminal $ tmux ls # list running tmux sessions
## Sharing sessions between terminals: $ tmux new -s session_name # make new named session $ tmux at -t session_name # attach to exist session (allowing shared sessions)
## Commands (used within a running tmux session): c - create new window n/l - next/last window & - kill current window
% - split window, adding a vertical pane to the right " - split window, adding an horizontal pane below ←/→ - move focus to left/right pane ↑/↓ - move focus to upper/lower pane ! - Break current pane into new window x - Kill the current pane. d - detach the current client
[ - enter copy mode (then use emacs select/yank keys) * press CTRL-SPACE or CTRL-@ to start selecting text * move cursor to end of desired text * press ALT-w to copy selected text
] - paste copied text
? - show tmux key bindings
### NOTE:* All commands need to be prefixed with the action key.* By default, this is CTRL-b The post Comandos tmux (cheat sheet) appeared first on Thiago Avelino.
Plone para desenvolvedores Python
August 30, 2012 - No comments yetSempre que uma pessoa vinha falar de Plone para mim eu não me sentia muito bem pois não conhecia e o pessoal que sempre conversei que desenvolvia em Plone e depois conheceu Django sempre falava que não valia apena mexer com Plone! Será que isso é realmente verdade?
Depois do que eu escutei o pessoal falando eu não queria nem saber desse cara chamado Plone, ate mesmo que para desenvolver uma solução de gerenciamento de conteúdo usando Django não é muito trabalhoso (Realmente era assim que eu pensava, mal eu sabia que estava completamente enganado). Como eu fiz para mudar esse preconceito que tinha?
Realmente para mim mudar esse pensamento foi preciso senta e conhecer a ferramenta, não foi um trabalho muito facil pois como já relatei vim de Django e para mim era preciso subir um ambiente relativamente parecido, mas é Plone e ele roda encima do servidor de aplicação Zope e isso é algo que eu não conhecia (apenas tinha uma ideia do que era mas o que é realmente não sabia) em fim, depois do esforço de conhecer o Zope e Plone achei bacana. Mas achar bacana e colocar em produção é bem diferente.
No começo de agosto assumi um cargo de lider tecnico da tv1.com, eis que surge uma demanda gigantesca pois atendemos muitos sites do Governo Brasileiro, tais como:
- Portal Brasil
- Secom
- Planalto
- Biblioteca da Presidencia
- Emquestão
- entre outros…
Todos os sites é em Plone, e por esse motivo tive que estudar ainda mais do que estava estudando…
Semana passada Liz Leddy e Nejc Zupan (dois desenvolvedores Plone) estava no Brasil para participar do evento Plone Symposium South America e Caipirinha Sprint (um dos melhores sprint que participei).
O sprint foi muito bom fiquei surpreso com a qualidade do código que o Plone tem e como o pessoal leva a escrita de teste unitario e teste funcional a serio, o que posso falar é que 100% do código Plone tem cobertura de teste (se você que ver com os seus proprio olhos aqui explica como rodar os teste com coverage).
Bom o que posso falar mais é que agora sou um core commiter do Plone:
Bom nós desenvolvedores (Python) temos mania de criticar (ter preconceito) ou não ter uma iniciativa para estudar uma nova tecnologia, o que posso falar para essas pessoas (eu realmente sou um desse) é: Conheça para depois tomar suas propria decisão, se você acha que um projeto pode ser mais simples ou melhor em um ponto especifico, não esqueça que você desenvolvedor (Python) tem capacidade de ajudar um projeto open source.
The post Plone para desenvolvedores Python appeared first on Thiago Avelino.
Proxy transparente com Nginx
August 9, 2012 - No comments yetMuitas pessoas usa Squid para fazer qual quer tipo de proxy, ate mesmo para proxy transparente para usar em servidor web, por exemplo:
Você tem um site que precisa ter IP aqui no Brasil so que como o custo de servidor e link aqui no Brasil é muito caro, você pode fazer um proxy transparante para o servidor aqui no Brasil ser um cara que vai receber a requisição e repassar para o outro servidor que esteja em qual quer lugar do mundo. Com essa solução podemos ter uma maquina simples (maquina com pouco poder de processamento) pois ela só vai receber o trafego e repassar para o servidor que esteja em outro local.
Vamos imaginar um exemplo pratico, preciso que o usuário acesse o IP 177.71.248.185 (é um servidor da Amazon no Brasil), esse servidor precisa receber a requizição e repassar para o IP 67.159.35.2 (é maquina principal onde é processado o backend, esse servidor esta fora do Brasi). Foi usado essa solução em um portal que atendo para ter baixa latencia.
Vamos ao exemplo pratico:
upstream server { server 67.159.35.2; } server { listen 80; server_name avelino.us www.avelino.us; location / {
proxy_cache proxy-cache; proxy_cache_key "$host$request_uri$args"; proxy_ignore_headers "Cache-Control" "Expires"; proxy_cache_min_uses 1; proxy_hide_header Set-Cookie; proxy_cache_valid 200 301 302 30m; proxy_cache_valid any 0m; proxy_buffering on;
proxy_pass http://server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
}Criei um “upstream server” para falar qual é o servidor de destino do trafego, na configuração acima tem um cache de 30 minutos pois no servidor principal tem cache de 4 horas.
Logicamente que existe desvantagem com isso, pois vamos estar trafegando em duas (ou mais) rede, assim usando o trafego do servidor que esta recebendo a primeira requisição e do segunda que esta recebendo um requisição do primeiro.
The post Proxy transparente com Nginx appeared first on Thiago Avelino.
Console colorido usando Node.js
July 27, 2012 - No comments yetPara quem esta acostumado trabalhar com make para subir um ambiente ou o pessoal que gosta de escrever alguns shell scripts para automação de simples rotinas acho muito importante colocar cor nos retornos do script, isso é ótimo para sinalizar o que realmente o software (ou script) esta fazendo.
Para deixar um retorno colorido usando Node.js não é muito diferente de shell script, pois o que vai processar o retorno é um console bash (zsh ou qual quer outro shell), veja o exemplo abaixo de como deixar um retorno de shell script colorido:
echo -e " \033[0;30m Preto \033[0m --> 0;30 "echo -e " \033[0;31m Vermelho \033[0m --> 0;31 "echo -e " \033[0;32m Verde \033[0m --> 0;32 "echo -e " \033[0;33m Marrom \033[0m --> 0;33 "echo -e " \033[0;34m Azul \033[0m --> 0;34 "echo -e " \033[0;35m Purple \033[0m --> 0;35 "echo -e " \033[0;36m Cyan \033[0m --> 0;36 "echo -e " \033[0;37m Cinza Claro \033[0m --> 0;37 "echo -e " \033[1;30m Preto Acinzentado \033[0m --> 1;30 "echo -e " \033[1;31m Vermelho Claro \033[0m --> 1;31 "echo -e " \033[1;32m Verde Claro \033[0m --> 1;32 "echo -e " \033[1;33m Amarelo \033[0m --> 1;33 "echo -e " \033[1;34m Azul Claro \033[0m --> 1;34 "echo -e " \033[1;35m Purple Claro \033[0m --> 1;35 "echo -e " \033[1;36m Cyan Claro \033[0m --> 1;36 "echo -e " \033[1;37m Branco \033[0m --> 1;37 "
Bom como comentei acima em Node.js não é muito diferente, seja exemplo abaixo:
'use strict';//// http://avelino.us/2012/07/27/console-colorido-usando-node-js////
// Retorna o texto em vermelhoconsole.log("\033[31m Aqui esta o texto em vermelho.")
// Retorna o texto em azulconsole.log("\033[34m Aqui esta o texto em vermelho.")
// Volta o padrão do bashconsole.log("\033[0m Aqui estamos dando reset nas cores do bash.")
// Criando variavel para deixar um pouco mais simplesvar red, blue, reset;red = '\u001b[31m';blue = '\u001b[34m';reset = '\u001b[0m';
console.log(red +"Aqui esta o texto em vermelho. "+ blue +"Aqui esta o texto em vermelho. "+ reset +"Aqui estamos dando reset nas cores do bash.")
Perceba que no começo do script estamos usando o “'use strict';“, para não termos problema com o formato loco de color dentro das strings. No exemplo que estamos usando variáveis coloquei as colors em Unicode (eis ai uma problema!).
Porque uso “\u” nos códigos unicode?
Bom realmente eu não entendi muito bem o porque o Node.js trata dessa forma, mas achei uma essa explicação:
Octal literals can be identified by a numeric value starting with a leading 0 (zero). Since this is a source of a possible unintentional octal values when the programmer zero-pads decimal numbers of varying lengths in the source code to make then look prettier and more uniform. The strict mode disallows the octal mode due to this reason.
The ESCape code can be represented in a number of ways. Decimal 27 , Hexadecimal 1B , Octal 33 or Binary 00011011.
So instead of write the ESC code in a string as \033 you can as well just choose one of the other modes. Hexadecimal for instance: \x1B.
In your example you used the two-byte unicode representation of the character \u001b which works just as well.
I’m still an oldschool C head and usually assumes all strings to be plain ASCII so I’d use \x1B by default instead of this newfangled unicode crap Java is using. ^_^
Realmente não é muito produtivo desenvolver dessa forma, mas temos algumas iniciativas open source que pode nos ajudar com o retorno de cores dentro do Node.js.
- cli-color - Mariusz Nowak
- colorize - Matt Patenaude
- sty - Trevor Burnham (Esse projeto aceita você coloca objetos html como marcação)
Todos os projetos acima estão dentro do npm.
The post Console colorido usando Node.js appeared first on Thiago Avelino.
Criando package (modulo) em Node.js
June 23, 2012 - No comments yetExiste muitas pessoas querendo estudar Node.js pela simplicidade de trabalhar com processamento assíncrono e por usar JavaScript em server side. JavaScript é uma linguagem simples mas para desenvolvimento Client side mas ao mesmo tempo quando colocamos JavaScript do lado do servidor começa a surgi algumas duvidas como: estrutura do software, como criar biblioteca, qual Framework usar e muitas outras.
Dando uma olhada no Github vi que tem muitos software que parece uma lingüiça com mais de 500 linhas em um mesmo arquivo, aí me vem a seguinte pergunta “JavaScript não é orientado a objeto?” logicamente que sim, então tem alguma coisa errada pois uns dos paradigma é dividir funcionabilidade onde cada modulo faça sua parte e usando todas faz o que foi proposto a ser feito.
Então vamos lá, seguindo um exemplo simples:
- Conectar em um banco de dados
- Fazer insert, update e delete
- Desconectar do banco de dados
O exemplo usado encontra-se no repositorio “example-nodejs-mongodb” na minha conta do Github, nesse exemplo vou usar o banco de dados MongoDB por ser mais simples de instalar e usar (Pois é um banco de dados NoSQL) . Dado que já esteja instalado o MongoDB em seu sistema operacional (Para usuarios Linux basta baixar o source do MongoDB no site e depois rodar o binario mongod, já para usuarios Windows não tenho não tenho experiencia no ambiente mas achei esse tutorial que pode ajudar). A instalação do NodeJS e NPM no Linux e Windows é uma operação relativamente simples, por isso não vou detalhar todo o processo, você pode ver nos artigos nesse blogpost.
A primeira coisa que temos que ter em mente é que tudo o que é escrito dentro de um package (proprio) não é levado para fora, você precisa especificar o que realmente quer expor do seu package. No arquivo mongocon.js temos um exemplo de como trabalhar com exports no Node.JS:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/avelinous');
exports.mongoose = mongoose;
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/avelinous');
exports.mongoose_schema = mongoose.Schema;
{
"name": "mongo_test",
"description": "A package using mongoose ODM",
"author": "Thiago Avelino <thiagoavelinoster AT gmail DOT com>",
"dependencies": {
"mongoose": ">= 2.7.0"
},
"engine": "node 0.6.19"
}
Vagas de Python para trabalhar remoto
May 7, 2012 - No comments yetA duas semana eu escrevi um blogpost sobre “Trabalhar para empresa de fora do Brasil” e realmente vale muito apena, como a demando do projeto aumentou consideravelmente estamos precisando de desenvolvedores para entrar no time. Nosso time é responsável por desenvolver algumas ferramentas de SEO.
Conhecimento necessario:
- Dominio do idioma inglês;
- Python;
- Django (Caso conheça outro frameworks é importante).
Itens importante:
- Tradução de projeto open source;
- Foco (Como o trabalho é remoto, temos que sempre ter foco no que estamos fazendo);
- Conhecimento em arquitetura de software;
- Contribuido com projeto open source (Ideal que tenho o repositorio aberto);
- Ótimo conhecimento em desenvolvimento ágil;
Estamos procurando por pessoas criativas, que gostem de inovação, de pesquisar e identificar novas tendências e de encarar desafios complexos com agilidade e velocidade.
Se você se encaixa neste perfil, envie seu curriculo em inglês para mim (thiagoavelinoster AT gmail.com) com uma lista dos últimos 5 livros técnicos que você leu, Github, Twitter, LinkedIn e o que você quiser compartilhar.

















