¡Adiós Madrid!

Depois de 18 meses vivendo na terra de Cervantes, estou de partida!

Nesse um ano e meio que passei aqui estive trabalhando no Tuenti, uma rede social espanhola com cerca de 12 milhões de usuários, na maioria adolescentes. E estive em duas equipes diferentes dentro da empresa, nos 6 primeiros meses estive na equipe Core, que cuida das features básicas da rede social (busca, fotos, mensagens, sugestão de amigos, etc) e depois fui para a equipe Tu, que é a equipe responsável pelo desenvolvimento das features relacionadas a operadora de celular do Tuenti (www.tuenti.com/tu). Aprendi muito tanto em termos pessoais quanto profissionais, fiz grandes amigos, conheci excelentes profissionais, aprendi a falar espanhol (não consegui perder o sotaque brasileiro, mas não passo aperto!), mas chegou a hora de partir para um novo desafio.

Acredito que no momento em que você já está na sua zona de conforto e não se sente mais desafiado e motivado a aprender e testar coisas novas no seu trabalho, está na hora de mudar. E foi isso o que me aconteceu.

Durante esse período, recebi alguns contatos de recruiters de outras empresas e nunca rejeitei nada logo de primeira (a não ser que fosse algo realmente desinteressante), sempre falei com as pessoas para saber o que tinham a me oferecer. Neguei algumas propostas porque ainda não tinha encontrado algo que realmente me fizesse sentir animado em abandonar o status quo. Até que chegou a vez do Spotify.

O Spotify provavelmente seja a empresa mais “quente” do momento no mercado europeu (junto com a Rovio, do Angry Birds) principalmente depois da sua entrada no mercado americano e parceria com o Facebook.

O serviço não está disponível no Brasil, mas só para explicar como funciona, o Spotify está para a música assim como o Netflix está para filmes e séries, ou seja, você paga uma mensalidade (existe também um plano limitado grátis) e pode escutar toda a música que quiser em streaming de um catálogo incrível que eles dispõem de forma legal, onde o artista e a gravadora são remunerados por isso.

O Spotify tem sedes em Nova Iorque, Londres e outros lugares com foco mais comercial e a principal sede está em Estocolmo, na Suécia onde está quase todo o departamento de engenharia. E é pra lá que eu vou!

Estarei todo o mês de dezembro na Paraíba com minha família pegando um solzinho e resolvendo o resto dos papéis que faltam para em janeiro embarcar para essa nova aventura fria! :-)

Önska mig lycka till! (me desejem sorte!)

Trabalhando com TI na Europa

Moro e trabalho em Madrid há quase 1 ano e meio e muitas vezes quando converso com amigos e ex-colegas, me perguntam sobre como é trabalhar por aqui, já que as empresas europeias normalmente oferecem produtos e serviços mais focadas no mercado interno e não são tão conhecidas fora do velho continente.

Aviso de antemão que as opiniões que eu vou mostrar nesse post podem ser incompletas e incorretas, já que são baseadas no ponto de vista míope de alguém que não está aqui há tanto tempo e não conhece tanta gente de outras empresas quanto gostaria.

Vários países da Europa ainda vêm sofrendo com a crise que abalou todo o mundo há alguns anos, esses países são chamados perjorativamente de PIGS (Portugal, Ireland, Italy, Greece e Spain) e essa crise provoca muito desemprego, problemas sociais e políticos mas no meu ponto de vista já não afeta mais o mercado de TI, que está com a demanda sempre crescente, sobrando vagas e faltando profissionais qualificados.

O número de startups que surgem na Europa é bem mais discreto do que nos EUA e acredito que parte disso se deve à força dos direitos trabalhistas que protege muito o trabalhador e dificulta a vida e a dinamicidade necessária para uma startup, que a princípio não pode garantir todos os direitos aos seus empregados. Só como exemplo, a empresa onde trabalho precisou gastar bastante tempo e dinheiro com advogados para conseguir o direito de oferecer stock options para os empregados já que a legislação trabalhista local não está preparada para esse tipo de “bônus” que nas startups normalmente é a principal parte da remuneração dos envolvidos.

Outra coisa que torna a criação de startups mais complicada na Europa é o maior número de restrições que a União Europeia impõe em termos de privacidade e manipulação de dados pessoais na internet. Um exemplo simples disso é que o Facebook mesmo com um grande número de usuários no continente não tem um data center local, pois caso tivesse teria que obedecer a essa legislação, o que não é o caso quando, por exemplo, determina que a idade mínima dos seus usuários é de 13 anos (lei americana) e na Europa a lei diz que a idade mínima deve ser de 14 anos.

Mas nem tudo é mais difícil! Muitas empresas, fundações e projetos importantes para o desenvolvimento da internet e tecnologia em geral são europeus, como Opera (Noruega), Nokia e Linux (Finlândia), Instituto Fraunhofer (criador da MP3) (Alemanha), Skype (criada por suecos mas sediada em Luxemburgo)  sem contar com figuras como Dijkstra (Holanda) e Turing (Inglaterra), etc… e de fato existem startups europeias de sucesso atualmente, sendo a Rovio (Finlândia), criadora do jogo Angry Birds, a que está mais na crista da onda agora e também a sueca Spotify, dona de um serviço de música sob-demanda de muito sucesso na Europa e que chegou há cerca de dois meses aos EUA. Além disso, também existem umas sedes fantásticas do Google (destaco Zurique e Londres) e uma da Mozilla (Paris), fora várias sedes de outras empresas americanas que estão se instalando em Dublin.

Especificamente na Espanha, a Tuenti é a maior empresa da “geração 2.0″, com cerca de 230 empregados, mas existem também outras empresas de sucesso e startups que prometem bastante, e entre elas eu destacaria:

  • Socialpoint - Uma startup de Barcelona que em julho recebeu um investimento de 2.5 milhões de euros e que faz jogos para Facebook, entre eles o mais famoso é o Social Empires.
  • Youzee – Ainda não está com seu serviço aberto ao público, mas basicamente é um servicio de V.O.D. a la Netflix, melhorado, que está sendo desenvolvido principalmente por ex-empregados do Tuenti.
  • Vizzuality – Eu sou fã do trabalho desses caras, é uma empresa pequena de Madrid que trabalha desenvolvendo interfaces bonitas para visualização de dados científicos e recentemente fizeram um projeto com o Google para um infográfico sobre a evolução da Web
  • 11870.com – Um Yelp! a la espanhola
  • idealista – Site de anúncios imobiliários espanhol que tem sede também na Itália e Portugal
  • E obviamente não poderia deixar de falar da Tuenti, que em números gerais de usuários já foi superada pelo Facebook, mas continua sendo a #1 entre os adolescentes e está mais focada nesse nicho de mercado mais jovem, além de que com a aquisição da Telefónica também tem focado muito no mercado mobile oferecendo uma operadora de celular, chamada Tu, para seus usuários com várias vantagens. (que é o projeto em que eu trabalho já a quase um ano)

Salários
Comparar salários entre países é bastante complicado. Custo de vida, imposto de renda e serviços oferecidos “gratuitamente” pelo governo variam muito e normalmente a relação salário/custo de vida nas principais capitais e grandes cidades do mundo são equivalentes, então comparar os números friamente nem sempre te dá uma sensação real de como se vive em determinado local, mas vou citar uma faixa salarial que tenho visto ser tendência por aqui.

Os salários base de Software Engineer em empresas decentes na maioria dos países europeus variam de ~30 mil € anuais para programadores Jr./Associate a cerca de 50 mil € para Sênior (é uma estimativa feita com um pequeno espaço amostral onde, na realidade, certamente há muitos pontos fora da curva). Em alguns países existe uma espécie de décimo-terceiro que seria mais 8% desse valor por fora e em outros casos algumas empresas oferecem pagamentos variáveis de acordo com a performance do empregado que pode render até uns 20% a mais se o cara for um top-performer. Além disso, também existem as stock options que já mencionei e algumas empresas oferecem uma “home leave policy” se te contratam enquanto você mora em outro país e te dão pelo menos uma passagem por ano para ir ao seu país.

Com a crise que está assolando o continente está cada vez mais difícil conseguir visto de trabalho, mas se você pensa em tentar, eu creio que a experiência vale muito a pena!

Redes sociais: O que fazer com o perfil de quem morreu?

O tema desse post pode parecer um pouco macabro, mas me parece já ser um problema da sociedade atual.

Para muitas pessoas o mundo “real” é apenas o lugar onde se tiram fotos e se fazem check-ins para publicar no Facebook (ou similares) mas é fato incontestável que pessoas morrem, e o que se deve fazer com o perfil delas nas “internets”? Manter o seu perfil in memorian? Apagar o perfil? Como comprovar que morreu?

Eu nunca havia pensado nisso até que um dia uma pessoa que até então eu não conhecia chegou pra mim, sabendo que eu trabalho numa rede social e me perguntou: “Minha cunhada morreu, mas o perfil dela no Facebook continua aberto e tem gente que nem sabe do acontecido mandando mensagens e etc… O que eu posso fazer para fechá-lo?”  Nesse momento momento eu comecei a pensar e vi que onde trabalho não há uma política clara para esses casos, mas seria tratado com atenção por pessoas, e não máquinas, da equipe de suporte a usuário (que inclusive é um trabalho bem interessante, passam o dia todo vendo e apagando a pornografia que é denunciada :D ). Imagino que no Facebook seja algo parecido, a diferença deve ser só que o suporte a usuário é feito em out-sourcing na Índia com centenas de empregados! E foi isso que sugeri que fizesse, buscasse o e-mail de contato com a equipe de suporte.

Então fiquei pensando nisso e em qual seria a maneira mais adequada de tratar esses casos e a solução que me veio na cabeça e que pareceu mais simples e eficiente foi permitir que a própria pessoa decida, como um testamento.

Para parecer menos sinistro, na configuração de conta ter uma seção onde se configura o que fazer quando a conta passe muito tempo “inativa”, e o próprio usuário possa definir quanto seria esse tempo e o que deve ser feito, por exemplo:

Vou nas configurações da minha conta e defino que se minha conta passa mais de 30 dias inativo, me mande um e-mail (como um ping), se eu não faço login nem respondo o e-mail em mais X dias, marque meu perfil como inativo e não permita que me enviem mais nada, ou caso prefira, que apaguem meu perfil e todo o conteúdo que já publiquei ou senão que mande uma senha alternativa da minha conta para o e-mail de outra pessoa (minha esposa, por exemplo) e permita que ela acesse a conta e faça o que quiser (eutanásia!?).

Isso poderia servir tanto para caso de morte ou algo mais temporário que poderia ser reativado depois, como se por exemplo resolvo passar um ano isolado morando com uma tribo de Pigmeus em Botsuana.

E vocês? O que acham que seria uma boa opção?

UPDATE: Sugestão de @daniel_leite: permitir que o usuário deixe uma mensagem/vídeo post mortem: “Se você está vendo esse vídeo, é porque eu devo estar morto…”  :D

Dicas de livros

Hoje vou falar sobre três livros que li ultimamente, gostei bastante e tenho recomendado a alguns amigos:

The Algorithm Design Manual

The Algorithm Design ManualEsse é um livro de algoritmos com leitura agradável, não é tão profundo quanto o Cormen mas cobre a maioria dos tópicos com abordagem mais prática e menos acadêmica. Foi escrito pelo Skiena que é uma celebridade no meio das competições de programação e se divide em duas partes, a primeira contém os capítulos normais e a segunda são só problemas em que se aplicam os algoritmos apresentados.
Uma coisa legal para quem faz entrevistas ou está se preparando para ser entrevistado, é que a cada capítulo tem uma parte de perguntas para entrevistas usando o tópico explicado.
É uma leitura bastante “leve” se comparada aos livros do Cormen, Knuth ou Papadimitriou e é um livro que dá pra ler de forma salteada, já que os capítulos são bem independentes e você pode usar como guia de referência.
Além do livro também existe um site do autor (http://www.algorist.com/) que tem material complementar e inclusive vídeo de aulas dadas por ele: http://www.cs.sunysb.edu/~algorith/video-lectures/
O único ponto negativo que vi nesse livro é que, estranhamente, não tem nenhum capítulo específico sobre árvores.

Programming Pearls

Já é um clássico que todo programador deveria ler. É um excelente livro que aborda diversos tópicos relacionados a programação como algoritmos, corretude, estruturas de dados, estimativa e análise de performance e acima de tudo ensina como pensar “fora-da-caixa” e ter aqueles momentos Eureka! que resolvem o problema de maneira nem sempre óbvio mas super eficiente e elegante.

Being Geek

Esse livro é completamente diferente dos anteriores, é focado no relacionamento programador-humanos e não no programador-máquina como os anteriores.
O assunto é principalmente a carreira profissional, com dicas valiosas de relacionamento no trabalho, como funcionam normalmente os processos de entrevista e seleção na maioria das empresas, como subir na carreira, etc. É uma forma bacana de dar um Norte pra quem tá perdido sem saber o que fazer na sua carreira, e um manual de sobrevivência geek.
Esse vídeo divulgado pelos editores do livro ilustra um pouco o que é apresentado:

O programador poliglota

“/^Sou programador (java|c|php|python|ruby|perl|cobol)$/”

Essa frase é coisa do passado, a moda agora é saber programar pelado independente de linguagem.

Esse “novo conceito” se deve a diversos motivos e o principal deles, na minha opinião, é o fato dos sistemas serem cada dia mais distribuídos e componentizados, permitindo assim que cada um desses componentes use a linguagem que melhor soluciona o problema. Ou seja, não é raro hoje em dia ver numa mesma aplicação: o back-end feito em uma linguagem como Scala, front-end em uma linguagem de script como PHP, Python ou Ruby e um cliente mobile em Objective-C ou Java, tudo conversando entre si usando JSON, Thrift, XML ou whatever.

Além disso, com os conceitos do Agile cada vez mais difundidos, fazendo com que se trabalhe em equipes pequenas e com o código pertencendo a todos, é importante estar preparado para codificar em algo que não seja sua “língua nativa”.

E o que isso significa na prática? Tenho que saber programar em todas as linguagens que possivelmente irei tocar em algum momento da minha vida? Não! Mas é importante ter em mente os principais conceitos, paradigmas e conhecer um pouco algumas das linguagens mais “raízes” que influenciaram as outras.

Um bom programador não é o cara que conhece todos os glitches e detalhes de uma linguagem, mas acima de tudo é como o Mr. Wolf de Pulp Fiction, um cara que resolve problemas:

E quando se fala de programação, para resolver problemas é preciso ter em mente mais coisas do que apenas a linguagem em si; é importante entender bem o seu problema, elaborar uma boa estratégia para atacá-lo e entender como o computador vai agir com essa sua estratégia (i.e.: estruturas de dados necessárias, complexidade do algoritmo, é possível paralelizar? etc) e é aí que o programador poliglota faz a diferença.

O “programador de uma linguagem só”  tem o mindset de alguém que só sabe usar um martelo e vê todos os problemas como pregos, ou seja, vai sempre tentar dar um jeitinho de resolver com a linguagem que já sabe, mesmo que isso implique em uma solução ineficiente, trabalhosa e deselegante. Como por exemplo: Usar PHP em aplicações desktop com PHP-GTK :D

Já um “programador poliglota” que tem a noção de outras linguagens/paradigmas e percebe, por exemplo, que em determinado caso uma linguagem funcional serviria de uma maneira mais eficiente e evitaria todo o overkill de uma linguagem OO, vai poder aprender até sob-demanda alguma linguagem específica que implemente o paradigma e resolver melhor o problema. E a cada nova linguagem que se aprende, se aprende também uma nova forma de pensar.

Fazendo um paralelo tosco, um programador com boa base teórica de programação e paradigmas é como alguém que sabe Latim e vai ter muito mais facilidade de aprender Português, Espanhol, Italiano, Francês, Romeno, etc…

Esse argumento é bem suportado no livro “The Pragmatic Programmer” que prega que um programador deve aprender pelo menos uma linguagem diferente por ano e também no livro “Seven Languages in Seven Weeks“, que apresenta superficialmente sete linguagens usando paradigmas distintos.

Vou terminando esse post com as dicas valiosas do Larry Wall (criador do Perl) sobre quais linguagens todo programador deveria conhecer:

Android – Minhas impressões após um mês usando o sistema do robô

Hola!

Resolvi revitalizar o blog, dessa vez postando textos de âmbito mas genérico voltado a TI sem ter mais um foco tão específico em PHP e webdev. Sendo assim, o primeiro post dessa nova era será sobre minhas impressões sobre o Android após um mês de uso.

Usei iPhone por pouco mais de um ano e estava bastante feliz com ele, mas o fato de ter perdido o “ciclo do iPhone” e ter comprado um 3Gs pouco antes do lançamento do 4 e a política agressiva de obsolescência programada aplicada pela Apple me forçavam a um upgrade.

Fui visitar minha família em julho, levei de presente para minha mãe um HTC Wildfire S, e usei-o durante uns dias antes da viagem para testar e ter certeza que não estava levando um aparelho defeituoso. Acontece que gostei bastante da experiência proporcionada pelo Android (e pelo HTC Sense) e resolvi dar uma chance ao robôzinho. Então ao voltar de viagem encontrei uma oferta muito boa do Nexus S livre de contrato, por 330€ e como bom geek, viciado em gadgets, não resisti.

Desde então estou bastante satisfeito com a user experience oferecida por ele, que ainda não chegou ao nível de polimento do iOS mas também não deixa a desejar. E o que mais gosto é a integração com todos os serviços do Google (Gmail, Reader, Gtalk, Calendar, Docs, Contacts, etc) dos quais sou completamente dependente e Just Works (TM).

Outros pontos positivos na minha opinião:

  • Não precisar usar iTunes
  • Instalação over-the-air das apps. Você vai ao site do Android Market, seleciona a app, diz em qual gadget quer instalar e-pronto.
  • Ter acesso a informações de mais baixo nível como a memória ocupada por cada app, não é algo realmente importante, mas é uma geek-feature
  • Google Reader, tão útil nas salas de espera e meios de transporte, tem uma app decente e oficial do Google.
  • A possibilidade de escolha de, por exemplo, usar Firefox ao invés do Browser padrão. (O Firefox para Android não está mal, mas continuo usando o browser default)
  • A tela “curva” do Nexus S dá uma experiência de uso interessante e confortável

Pontos negativos:

  • UI é boa, mas não tão boa quanto a do iOS
  • Algumas apps ainda são exclusivas do iPhone, como Instagram (embora o Android tenha alternativas), GitHub:Issues e principalmente STREET FIGHTER 4  :-(
  • Algumas coisas que poderiam vir nativas, como recurso de HDR na câmera, necessitam uma app externa.

Não posso comentar nada como desenvolvedor, pois nunca desenvolvi para nenhuma das plataformas, mas noto que as apps para iOS têm uma maior padronização no estilo, que dá uma aparência mais “profissional”, mas isso me parece uma consequência natural do nível de restrições impostas pela Apple nas suas APIs e no processo de aprovação das apps para a store, que tem esse ponto positivo mas também tem seus pontos negativos.

Continuo usando iOS no iPad, mas no celular estou contente com o Android e devo seguir com ele por mais um bom tempo.

Slides @ V Ensol

Opa!

Postando rapidamente, só para publicar o link para meus slides apresentados no V Ensol, em João Pessoa agora no mês de Julho, onde falei sobre Software Livre em Aplicações Web de larga escala.

Eles estão disponíveis aqui: http://feliperibeiro.com/slides/ensol2011

E agora em agosto devo dar uma ajeitada no blog e voltar a ativa! Tá prometido.

Meu ambiente de trabalho em 7 itens

Cof, Cof… Quanta poeira por aqui, hein?

Estou voltando a postar aqui no blog para dar seguimento ao meme criado pelo @duodraco e que fui “convocado” pelo @brgomes, para descrever meu ambiente de trabalho em 7 itens, então aí vai:

  1. Mac OS X: Desde que comecei a trabalhar com desenvolvimento, nunca gostei do Windows. Usei o Linux por anos até que em 2007 me converti ao mundo Mac e desde então tenho nele tudo que preciso. Um Unix que não me faz trabalhar *para* ele, como eu fazia nos meus tempos de Slackware e Gentoo.
  2. IDEs Eclipse/Netbeans/Vim: Em um mesmo dia de trabalho chego a utilizar esses três ambientes de desenvolvimento em momentos distintos. O Eclipse é o que tenho mais familiaridade e é o que uso normalmente com PHP, o Netbeans, pra mim, é imbatível para JavaScript e um Vim bem configurado, usando CTAGS e tudo mais, para mim é melhor que o TextMate, então uso ele para projetos pessoais que normalmente não são muito grandes e também para editar coisas diretamente no cluster usado como ambiente de desenvolvimento no trabalho.
  3. VCS – SVN/Git/Hg: No trabalho estamos passando por uma migração de SVN para Mercurial (hg) e nos meus pet-projects que sempre faço para colocar em prática algo novo que estou aprendendo (algoritmos/técnicas/tecnologias) tenho usado o Git.
  4. Terminal (shell): Gosto do “poder” que o Terminal dá e ainda faço muitas coisas por ele, como usar o Vim, executar scripts de build/deploy, usar svn/mercurial/git, etc. Tenho ele sempre aberto.
  5. Browsers: Chrome é o meu browser principal, antes era só para uso pessoal mas agora também uso bastante na hora de desenvolver. O Developer tools dele ainda não é tão completo como o Firebug mas já resolve maioria das coisas. Ele também tem a extensão SpeedTracer que me é muito útil. Mas continuo usando o Firefox de vez em quando pelas coisas que sou mais familiarizado no Firebug.
  6. Spotify: Spotify é uma mistura de GrooveShark com Last.fm, é uma rede social onde você escolhe o que quer ouvir e tem os seus amigos com quem você pode criar e compartilhar playlists. É bem bacana, tem uma qualidade de som boa (principalmente se você paga a conta Premium) e lhe dá uma sensação de estar escutando música “legalmente” :) . Passo todo o dia conectado e ouvindo música por ele.
  7. Headphones: Já que se falou em música, não posso deixar de comentar que sou meio maníaco por headphones, estou sempre buscando o som perfeito e atualmente não largo dos meus Bowers & Wilkins P5 que são os headphones com melhor qualidade de som que já vi, superando inclusive os BOSE. O único problema dele é que esquenta bastante as orelhas! :D

E pra terminar, passo adiante esse meme com:

@marcosjr
@yogarine
@italosatiro
@herval

Workshop: Segurança e otimização de performance em Web Sites

Olá pessoal,

Estarei no dia 13/03/2010 na Faculdade Marista em Recife-PE ministrando um workshop sobre segurança e otimização de performance em web sites.

Dentre os assuntos abordados destacam-se:

Segurança:

  • XSS (Cross site scripting)
  • SQL Injection
  • Code injection
  • XSRF (Cross site request forgery)
  • Session Hijacking
  • Directory traversal

Otimização de Performance:

  • Front-end
    • Ferramentas de auxílio a otimização (Firebug, YSlow, Page Speed)
    • Caching a nível de browser
    • Estruturação de arquivos ((X)HTML, CSS, JavaScript)
  • Back-end
    • Tuning do Apache e PHP
    • Tuning do MySQL (estruturação de tabelas, índices e engines)
    • Caching
    • Dicas de escalabilidade (configuração de servidores, BDs orientados a documentos,  etc)

O valor da inscrição é R$ 50,00 e pode ser feita no hotsite http://r8tecnologia.com.br/workshop/