terça-feira, 30 de dezembro de 2014

Saga do Sequestro em Budapeste - Parte 2



Continuando a saga iniciada nesse post

Após o grito “HHHHHHHHEEEEEEEEEELLLLLLLLLLLPPPPPPPPPPPPP!!!!!!!!!!!!!!!” fecho o olho e aguardo o tiro de pistola. Contudo, ele não vem. Continuo seguindo os jovens e em pouco tempo o segurança e sua parceira desistem de me seguir.
Começo então a pedir ajuda dos jovens, explicando que meu amigo tinha sido sequestrado e corria risco de vida. Fala para ligarem para a polícia. Depois de muita insistência, eles decidem me ajudar.
Um deles bate na porta de um prédio. Aparece então o que seria o síndico, com uma cara de sono danada. Ele então chama a polícia.
Cerca de 10 minutos depois chega a viatura. Os jovens ficam de intérpretes, umas vez que os policiais só falavam húngaro. Mesmo sem entender a língua, no final do papo entendi o contexto. Os oficiais pediram aos jovens para irem na viatura e ajudarem na comunicação. Um deles responde que não, que já tinham se envolvido até demais.
Entro então na viatura com dois policiais que não falam inglês e seguimos em direção ao bar. No caminho, lembro da frase do gangster “Minha cidade, minha polícia”. Penso que se ele tivesse dito a verdade, aí sim eu iria vestir terno de madeira...rs.
Mas na minha cabeça eu tinha que voltar o mais rápido possível. Mesmo torto de bêbado, eu imaginei que começariam a espancar o Beraba, então eu tinha que chegar antes que ele ficasse desfigurado...kkkk.
Parênteses: nesse meio tempo o segurança retornou com a mulher. Disseram para o Reginaldo: “Your friend is crazy, he almost beat me up. He took the money and started to run away”. Traduzindo: “Seu amigo é doido, ele quase me bateu. Pegou o dinheiro e começou a fugir correndo”. O gangster olha pro Beraba e diz: “Now you are in a serious trouble”. “Agora você está com um sério problema”. O sotaque bizarro eu tentei reproduzir nessa gravação:




Enfim, encham o saco do Beraba para ele contar a versão dele pois existem partes engraçadíssimas ;)

Mas continuando a história, eu chego no bar e o gangster está na porta. Ele late alguma coisa com os policiais e depois me diz: “Vocês entraram aqui e não quiseram pagar a conta. Seu amigo está no Hostel. Eu vou colocar um advogado internacional atrás de vcs”.
Eu respondo “Ok, se meu amigo estiver no hostel a salvo, pode mandar seu advogado nos procurar em nosso país”.
Embarco de novo na viatura com o policiais que me levam até o albergue. Chegando lá toco o interfone e começo a falar em inglês, ainda sobre efeito do álcool. Era o Beraba que tinha atendido...rs.
Subo para o albergue e encontro o Reginaldo junto com um uruguaio. Os policiais queriam que pagássemos a conta.
O Beraba liga pro dono do hostel que fala que era melhor a gente pagar.
Então o uruguaio da a ideia de ligarmos para a embaixada. Ligo e me indicam o telefone de uma advogado da embaixada. Ele atende com voz de sono, falando português com um sotaque extramente carregado. Ele conversa ao telefone com os policiais e tenta nos tranquilizar. Eu digo que queríamos uma escolta para levar a gente até a estação de trem para irmos embora. Ele diz que não precisa, que a Hungria não era o Brasil, que estávamos seguros, já que em nenhum momento nos agrediram. Isso, segundo ele, aconteceu porque a lei lá realmente é dura e funciona. Então ele diz que poderíamos ficar na cidade e aproveitar, pagarmos somente se quisermos, e já desligou o telefone meio sugado.
Enfim, vamos para nossas camas. Mas quem disse que conseguíamos dormir. Cada barulhinho no albergue e a gente já ficava alerta, esperando a máfia entrar metralhando tudo...rs
No outro dia nossa história ficou famosa. Todo mundo pedia para contarmos, não só no albergue mas durante todo o resto da viagem. Teve gringo nos encontrando no Vaticano, em Roma, e perguntando o que tinha acontecido. Viramos celebridades...kkkk
No fim, pensamos que se os mal feitores quisessem pegar a gente, pegariam de qualquer jeito, mesmo que decidíssemos partir de manhã. Então decidirmos ficar e aproveitar a cidade.
E foi muito legal. Visitamos os banhos termais, piscinas aquecidas de 22 a 30 graus, a céu aberto, em um inverno de 4 graus. Foi sensacional!
Além disso, visitamos os castelos medievais. Lá tirei essa foto do Beraba:



O engraçado dela, tirada um dia depois do sequestro, é que foi utilizado por toda imprensa nas matérias sobre a invasão do Facebook...kkk.

Enfim, assim terminou a grande saga do sequestro em Budapeste. Acabamos sobrevivendo ilesos e sem pagar a conta!

Apesar de tudo, foi uma das cidades mais legais que visitei durante o mochilão. Recomendo bastante. Mas tome cuidado com os bares da cidade ;).

Abs e feliz 2015.

terça-feira, 21 de outubro de 2014

Qual história você quer contar daqui 30 anos?


Startup é um assunto que entrou tanto na moda que até novela tem abordado o assunto. Eventos pipocam em todos os lugares. Percebo na comunidade de TI, e até fora dela, a dicotomia: ser assalariado ou abrir uma startup?

Já experimentei os dois mundos. Fui funcionário público, militar, e poderia ter seguido carreira ganhando um salário razoável, com toda segurança e estabilidade. Mas não estava feliz, pedi demissão.

Sai para iniciativa privada e foi fantástico. Aprendi muitas coisas e tudo estava perfeito. Mas a felicidade passou e então então fui picado pela mosca do empreendedorismo. Cheguei abrir um negócio e depois, por fim, acabei me tornando CTO em startup.

Mais uma vez tive um período sensacional. Poder conviver com pessoas incríveis e ter uma autonomia que até então não tinha experimentado. Mas quem já passou por isso sabe que a vida glamourosa é coisa de filme de cinema. Você trabalha ainda mais que assalariado e recebe menos, com a promessa de ficar rico no futuro. A verdade é que realmente deve-se estar apaixonado para seguir nessa vida. Mais do que isso, é necessário fazer as contas para avaliar se realmente a fortuna vai chegar no caso da empresa bombar.

Nesse turbilhão de trabalho várias ideias me ocorriam e não podiam ser colocadas em prática por conta do tempo demandado como CTO. Certo dia toda empresa participou do “Day1”. Esse é um evento onde empresários relatam sua história de sucesso, dizendo qual foi o dia em que perceberam que a empresa iria decolar. Foi um divisor de águas em minha vida.

Na pegada de startup, sempre fomos instigados a pensar na história que gostaríamos de contar em nosso futuro. O intuito era querer mudar o mundo com a startup e ver um propósito maior no que fazíamos no dia a dia. Me lembro de todos meus amigos saindo do evento extremamente motivados e felizes. Sai totalmente desmotivado. Não falei nada para não estragar a alegria alheia.

Mas reparei atento nos palestrantes. Enxerguei um padrão. A maioria contou a mesma história: “Trabalhei muito, sacrifiquei feriados e a convivência com a família para conquistar tudo isso. Agora estou vendendo a empresa para aproveitar, vou recuperar o tempo perdido e aproveitar”. Passei um bom tempo pensando nisso. Eles não me pareciam felizes, pelo menos não da maneira que eu pensaria que estaria no lugar deles. Me perguntei: “Como é que eles vão correr atrás do tempo perdido? Tem gente ali que deve ter filho com 18, 20 anos e não deve ter participado da vida dele. Como se recupera esse tempo?”.

Com um adendo muito importante: ali estavam aqueles que “venceram”. Os “perdedores”, pelo menos no Brasil, não costumam contar história. Imagine esses, que nem sequer com o consolo de uma fortuna contam?!

Nessa mesma época passei a frequentar comunidades de tecnologia e acabei vendo uma palestra do Henrique Bastos que me mostrou uma terceira opção: lifestyle business. Pesquisei, li blogs interessantes, como o do VinicusTelles. Devorei livros sobre o assunto: 4 hour week work, The Incredible Secret of Money Machine.

Durante esse processo de pesquisa e auto conhecimento, não me lembro onde me deparei com a seguinte pergunta: “O que você faria se ganhasse num concurso um salário de R$ 20.000,00 vitalício?”. Por mais simples que essa pergunta possa parecer, demorei certo tempo a responder. Depois de meditar por algum tempo, cheguei em algumas respostas: “Daria mais atenção a minha família, faria exercícios físicos, emagreceria, viajaria, escreveria um livro, leria mais, faria software por diversão, daria aulas”.

O ponto importante de chegar nessa resposta foi a conclusão de que eu não precisava ter uma fortuna. O que eu precisava era do bem infinitamente mais precioso que grana: tempo! Mas a “matrix” não nos deixa ver isso.

Foi então que comecei a me preparar financeiramente para ter tempo livre. Cancelei cartão de crédito, parei de comprar bugigangas inúteis (ex: trocar de celular só porque saiu marca nova). Diminui as contas até um patamar onde apenas com um dia e trabalho por semana eu as honraria. Com um detalhe importantíssimo: esse dia de trabalho é na faculdade, dando aula, que já é/era justamente uma das atividades que eu gostaria de fazer ;). Além disso, para me preparar para o pior caso, o de não poder trabalhar por alguns meses, fiz uma reserva financeira.

Falando assim até parece que tudo é/foi fácil e instantâneo. Confesso que não foi. O cagaço bate, quase desisti.

Mas nesse momento refleti sobre o que de pior poderia acontecer. É engraçado o que ocorre quando você descreve seu medo. Ele deixa de ser aquele monstro perverso que você imagina. Sendo do mercado de TI, sei que ele está extremamente aquecido. Deixando a modéstia de lado, sempre recebi e recebo ofertas de trabalho, de CTO de startup a trabalho assalariado. E isso acontece com todos da área, não é privilégio meu. Logo, o pior que poderia acontecer seria voltar para o mesmo ponto: trabalhar no mercado. Nessa conjuntura, não fazia sentido nenhum não tentar uma nova opção.

Então depois de alguns meses de preparo, desde julho de 2013 passei a viver o chamado lifestyle business. Não existe mais aquela frase “quanto eu tiver tempo faço”. Com tempo livre, bateu a vontade, faço. Como agora que estou escrevendo esse artigo =P.

E assim surgiram várias oportunidades e projetos: Meu livro; Python Birds, curso de Orientação a Objetos com Animação, projetos open source, vídeo aulas gratuitas. Nesse processo, ainda descobri que não era necessário muito dinheiro para viajar. Esse ano conheci Santa Rita do Sapucai, Brasília, Aracaju, Lavras e Goiânia. Em todas elas o custo da viagem foi menor do que eu gastaria ficando em casa! Mas isso é história para outro post.

Esse ano li mais livros do que toda minha vida: 4 hour week work; Contrato Social; Revolução dos Bichos (Animal Farm); A Arte de Estar Sempre Certo: 38 estratagemas; 5 livros Game Of Thrones; Como fazer amigos e influenciar pessoas; O que é Marketing (Raymar Richers). Esses pelo menos que eu me lembre.

O importante, se você leu até aqui, não é ficar imaginando se eu sou doido, corajoso, sortudo, convencido ou qualquer coisa desse gênero. Pelo contrário, não sou e não quero ser exemplo para ninguém. O principal é você saber que existem opções diferentes das “40 horas semanais”. Mais importante ainda é que a opção “startup” pode não ser a mais recomendada para você. Não existe fórmula fechada, as rédeas de sua vida estão em suas mãos.

Então a pergunta que você deve se fazer agora é: “Estou feliz com minha opção atual?”. Se a resposta for sim, viva intensamente a segurança e conforto de seu trabalho semanal; a adrenalina, agitação e desafios de sua startup; os projetos a que você se dedica por conta do tempo livre conseguido com seu lifestyle business.

Agora se a resposta for não, saia da zona de conforto. Pare de culpar os outros por sua infelicidade. Só cabe a você mudar a situação!

Qual história você quer contar daqui 30 anos?





quarta-feira, 1 de outubro de 2014

A Saga do Sequestro em Budapeste


A Saga do Sequestro em Budapeste

No fim do terceiro ano do ITA os alunos se reúnem na chamada Comissão de Viagens (CV). Seu objetivo é angariar recursos durante o quarto ano para financiar uma viagem técnico cultural dos participantes pela Europa, vulgo mochilão.

Meu amigo Beraba, agora mas conhecido como hacker do Facebook, foi aclamado presidente da comissão. Eu fui diretor da CAPRO, Comissão de Artigos Promocionais.

Depois de arrecadados os recursos, embarcamos cerca de 40 pessoas no sucatão, o Boieng que o Lula desovou para a Força Aérea. Naquele época o voo era fornecido gratuitamente, já aproveitando a viagem para cumprir missão no exterior. Então junto com a tripulação foram várias caixas de peças de avião.

Aterrissamos em Madri e a viagem começou animadíssima. 40 moleques felizes igual pinto no lixo. Todos se organizaram em pequenos grupos. No meu havia 3 pessoas, eu, Jandaia e o Beraba.

Na primeira noite fomos à uma rua de balada espanholas. Lisos como todo estudante, tentamos dar um “Bob Nelson” para entrar de graça. Ali escutamos uma frase de um segurança que devíamos ter levado mais a sério: “No hai nada gratis”.

A viagem prosseguiu e visitamos diversas cidades. Na ordem: Madri, Barcelona, Paris, Amsterdam, Bruxelas, Bruges e Toulouse. Nessa fizemos uma visita muito legal à Air Bus. Se a memória não me falha, vimos um Beluga. Conclui que qualquer coisa com asas voa:


 
Meu cartão de crédito não funcioanva em nenhum lugar. Assim, o Beraba virou meu pai e passou a pagar tudo que era de conta de cartão.

Durante toda a viagem seguimos um ritual. Íamos a um supermercado e comprávamos uma garrafa de Absolut e energético. Essa vodka era mais barata que Smirnof lá. Então uma era finalizada cada dois dias, durante as baladas, passeios e albergues da vida.

Em Toulouse pegamos um voo para Londres. Mas fomos apenas eu o Beraba. Jandaia prosseguiu para a Russia sozinho.

Chegando na Inglaterra ficamos em um dos melhores albergues da viagem, próximo ao Hide Park. Chegamos de noite e tinha somente o dia seguinte para turistar. Nesse dia caminhamos por toda Londres por umas 7 horas. Foi desgastante.

Contudo, ao voltar para o Hostel, nos esperava nosso energético. Resumindo, Beraba bebeu demais e se passou no Hostel. Cedinho tínhamos que pegar um voo para Budapeste. Foi muito legal porque fomos andando pelo parque por conta da ressaca. Nada parava na barriga do “gordim”...kkk. Tenho um vídeo  daquela manhã:



Em toda viagem a gente comia só no Mc Donaldos por conta da liseira. Mas a fama no Leste Europeu era das coisas serem mais acessíveis. Isso e as baladas também. Era um sábado, mas por conta da “enfermidade” do meu amigo, acabamos não saindo naquele dia.

No domingo ele estava um pouco melhor, mas não ao ponto de beber. E eu louco para sair. Naquela pilha toda, acabamos indo em uma balada esquisitíssima. Antes de entrar bebi toda minha parte da vodka, e também a do Reginaldo. O lugar parecia uma construção velha da época da segunda guerra. Na entrada havia umas cortinas de plástico no estilo daquelas de açougue. Dentro tinha uma galera alternativa. Em algumas mesas, havia banheiras em vez de banco para sentar. Mas só tinha cueca lá.

Decidimos voltar para o Hostel. Eu já estava totalmente embriagado. Heis então que brota um húngaro do nada e nos convida para conhecer sua balada. Disse que a entrada era franca e ainda ganhávamos uma cerveja. Deveríamos ter desconfiado. Esmola demais...

Beraba me pergunta se quero entrar. Eu muito doido, falei “Bora”. Pegamos nossa cerveja grátis e ao entrar só tinha um cara no que parecia um porão-bar. Não deu 5 minutos, o Beraba falou para irmos embora porque aquilo estava esquisto. Falei: “Partiu”.

Na saída o caixa falou que tínhamos que pagar a conta. Perguntamos: “Que conta? Só pegamos a cerva grátis e nem ela tomamos inteira!”. Ela então aponta para nossa mesa. Estava cheia de bebidas. Champagne, whisky e algumas outras que não estavam ali 5 minutos antes.

Mal começamos a argumentar e já havia 5 seguranças em nosso redor. Pensei: “a gente vai apanhar muito hoje”. O interlocutar e aparentemente líder do bando era igual o gangster do seriado Nip Tuck. Começa então o bate papo “amistoso”.



O gangster passa a conta pra gente: 300.000 Forentis, a moeda húngara. Eu muito doido, começo a fazer a conta de cabeça e em etapas. 250 Forentis igual a 1 Euro, 2.500 a 10, 25k a 100, 250k a 1000. Parei e disse: “Beraba, faz essa porra dessa conta que eu to doidasso, na minha cabeça está dando mais de 1000 euros!”. Só ouço a reposta “deu 1.2k euros”. Pensei: “Não vamos apanhar hoje, vamos morrer”.

Então a gente começa argumentar, e os caras falando em húngaro entre eles. Pela expressão corporal parecia que ia “azedar” bastante. Entre as ameaças o gangster fala “Se vocês sumirem aqui, ninguém vai nem saber”. Prontamente o Beraba pega meu passaporte, que era de militar, e diz que estávamos em missão. O cara responde num sotaque bizarro “Do you like to play games?” (você gosta de brincar?). “guarde isso agora. Caso contrário, você vai ver o que vai te acontecer”. Acho que o criador de jogos mortais deve ter ouvido nossa história para criar o bordão .

Como todo bêbado é macho, eu digo “Amigo, chama a polícia que a gente paga”. Logo ele responde “This is my city, my police” (Essa é minha cidade, minha polícia). Mas bêbado não desiste da macheza: “Então chama aí”. O cara simplesmente caga pra mim. Cada vez eu tinha mais certeza que nossas vidas estavam próximas do fim.

Vai ameça, vem ameaça. O álcool me dá uma brilhante plano de ação: “Amigo, vou fazer o seguinte: vou te dar toda grana que tenho e a gente fica acertado”. Enfio a mão no bolso. e pego uma nota de 5 Forents, mais umas moedas. Junto tudo em uma mão e dou porrada com a grana no balcão. Eu não lembro da cara do Beraba, mas imagino. O gangster fala: “Are you crazy, are you drunk?” (Você está doido, está bêbado?). A pronta resposta “Lógico que tô bêbado, você não está vendo?”. Ele retruca: “Vou te revistar e se achar alguma coisa você verá o que vai te acontecer”. Cauteloso, eu digo: “Pera aí então que eu to muito doido, deixa eu dar mais uma conferida”. Retiro do meu bolso 50 centavos mais uma manteiga de cacau e dou mais uma porrada no balcão...kkkkkkkkkkkkkkkkkkkkk. Obviamente o cara ficou muito, mas muito puto. O Beraba diz que eu até levei um “pedala” nessa hora, mas não lembro. Se era para morrer, que pelo menos fosse tirando onda.

Por fim eles surgem com um plano de pagamento. O Beraba iria até o caixa para retirar o dinheiro e eu ficaria de refém no bar-porão. Eu pensei: “Beleza, espero que o Beraba fuja. Com uma testemunha solta, não vão me matar. Como estou anestesiado por conta da cachaça, nem vou sentir as porradas que vão me dar até ele voltar para me buscar”. Não sei porque não falei isso pra ele na hora em português, para ele fugir.

Beraba vai escoltado por um segurança baixinho mais uma mulher. Eu embriagado fiquei enchendo o saco dos que ficaram comigo: “Gente, que vida de merda vocês tem, ter que ficar dando golpe para sobreviver deve ser uma foda”. Bêbado insuportável, eles se afastaram.

Reginaldo volta com seus amigos em 5 minutos, cartão não funcionou. Então eles falam que é minha vez de ir. Mandam o mesmo segurança baixinho e mulher. Meu pensamento foi : “Sou eu então que tenho que fugir”. Morei no Rio de Janeiro e por conta disso meditei: “Pessoal lerdo, mandar um segurança anão e uma mulher só comigo”. Mas vi que ele estava com um casaco preto e com a mão sempre no bolso. Pensei que naquele mato tinha coelho.

Mesmo assim, ao caminhar fui tentando decorar o caminho para resgatar o Beraba caso eu fugisse. Me levaram em uma avenida onde tinha o caixa. Insiro o cartão e ao pedir a senha, olho feio para o segurança. Muito educados, eles viraram de costas para não verem. Pensei: “Se fosse bandido carioca eu já tinha levado uma coronhada e já estavam com minha senha e cartão”.

Mas meu cartão não funcionou em nenhum lugar da Europa, por que iria aqui? Parceiro, a Lei de Murphy é implacável. Saquei o máximo, 100.000 Forents, saiu uma montanha de dinheiro. O segurança diz: “Faltam 200k”. Tento fazer mais um saque no mesmo valor. Consigo! Cartão “fela da puta”. Meu racioncínio: “Os caras já vão ter o dinheiro e nós dois lá naquele porão, não vai ter mais nada pra negociar”.

Então o santo álcool me deu coragem: “Amigo, acabou a negociação. Tenho aqui 200k, que é mais do que você merecem. Eu não vou voltar. Você traz meu amigo aqui e te dou a grana”. O cara fica puto e pega no meu braço para me levar de volta. Dou um tapa na mão delr, fazendo ele me largar. Repito “Acabou parceiro, traz meu amigo e te dou a grana”.

Nisso vem uma mulher andando pela rua. Eu peço: “Me ajuda, esse pessoal sequestrou meu amigo e querem me matar, chama a polícia!”. A mulher saca o celular. O anão segurança late algo em húngaro com ela. Pelo que entendi, deve ter sido algo como “Não se mete ou vai sobrar para você”. Ela me fala que não confia em mim. Eu digo: “Não confia em mim? Maravilha, então chama a polícia!”. Ela se afasta rapidamente.

Mais uma vez sou puxado pelo braço. Mais uma vez repilo com um tapa. Andando na rua aparecem dois adolescentes. Mais uma vez peço ajuda. Eles tentam andar rápido para me despistar. Eu sigo e digo “Eu vou seguir vocês. Eles estão com meu amigo. Se for para eu morrer, vocês irão junto comigo agora”. Cara, eu rio hoje imaginando se esse caras não cagaram na calça.

A corrida maluca segue em frente. Eu atrás dos jovens, o segurança e a mulher atrás de mim. Mas uma vez sou agarrado. Me desvencilho com o velho tapa e digo num tom mais alto: “Me larga”. A mulher responde: “Hei, fala baixo”. Penso comigo: “Falar baixo?”. Junto todo ar nos pulmões e grito o mais alto que já consegui na vida: “HHHHHHHHEEEEEEEEEELLLLLLLLLLLPPPPPPPPPPPPP!!!!!!!!!!!!!!!”. O grito ecoa por toda Budapeste. No finzinho eu fecho olho e aguardo o tiro da pistola que eu achava estar na jaqueta do segurança.

Bom esse post já está enorme nesse ponto, então vou deixar o restante para outro.

Só queria deixar um ensinamento dessa história antes de você ir embora furioso por ter lido até aqui e ter que esperar pelo final:

“No hai nada gratis”. Se te disserem que a entrada é grátis, pergunte quanto custa a saída ;)

Além disso, intimo meu amigo Beraba a escrever a versão dele dos fatos ;)

Grande abraço e até o próximo post!

quarta-feira, 23 de julho de 2014

App Engine e Django: No! hell!


Ultimamente tenho evangelizado a Plataforma como Serviço (do inglês PaaS – Plataform as a Service) Google App Engine (GAE), utilizando a linguagem Python. Uma pergunta me é feita de forma recorrente: “Renzo, é possível rodar Django no App Engine? Funciona bem?”. Isso era de se esperar, visto que Django é o framework web full-stack mais famoso dessa linguagem.

Versão curta:

Sim, é possível utilizar o Django no GAE com o porte não oficial: 


Contudo, você encontrará várias limitações:


Na prática, você vive no pior dos dois mundos: não consegue utilizar nem o Django nem o GAE 100%, ficando com uma solução capenga. Então não use o Django no GAE!

Se você quiser usar o Django, use em um stack padrão para ele. Seja Heroku, Amazon ou Digital Ocean.

Se quer usar App Engine, use com suas apis. Apesar do medo do “vendor-lock-in”, em 4 anos nunca sofri com isso. Se for para portar para outro host, melhor é usar o Appscale (http://www.appscale.com/) do que Django. Use um framework full-stack feito exclusivamente para a plataforma:

https://github.com/renzon/tekton

Versão Longa:

DJango é um framework feito com SQL em mente. Suas apps, painel de adminstração, ORM e scaffolding dependem fundalmentalmente desse tipo de banco para funcionar 100%. Assim, querer portá-lo para NoSQL me lembra a célebre frase “para quem só conhece martelo, tudo é prego”.

Um dos grandes atrativos para iniciantes é o painel de adminstração. Aliado ao scaffold, é possível prototipar rapidamente aplicações web. Contudo, ao tentar rodar o DJango-Admin no GAE, as limitações do Datastore (https://developers.google.com/appengine/docs/python/ndb/) não permitem o uso integral do painel. Além disso, a plataforma em si já provê um painel de adminstração próprio, mesmo que mais rústico.

Mas as limitações desse banco existem por uma razão: escalabilidade. Elas estão lá para permitir que sua aplicação escale sem haver necessidade de alterar o código. E o fato é que depois de conversar com engenheiro de grandes sites, como Facebook e Globo.com, conclui que mesmo trabalhando com SQL, várias dessas limitações impostas acabam sendo necessárias nesse tipo de banco para se atingir uma grande escala. Como exemplo a eliminação de joins para facilitar o cache:


Outra grande vantagem do Django é seu ecossistemas de apps (módulos). Elas resolvem problemas recorrentes apenas com a instalação de uma biblioteca. Para exemplifcar, procurei no Google: “app django voting” e consegui uma para resolver votações online: https://code.google.com/p/django-voting/. Contudo, uma vez que se baseiam em Django + SQL, elas também não funcionarão 100% no GAE. Basta a app precisar de um simples join e sua funcionalidade não irá funcionar.

Tendo então comprometidas as duas grande vantagens, sobra ainda uma outra muito interessante: geração e validação automática de formulários a partir dos modelos. Isso é extremamente útil, evitando replicação de código e reduzindo sua complexidade. Porém, para utilizar os formulários, pelo menos o ModelForm, é necessário utilizar os modelos do Django.

Ao utilizar o ORM do Django, e algumas outras apis, você irá perder uma grande vantagem do ndb: chamadas assíncronas (https://developers.google.com/appengine/docs/python/ndb/async). Com elas é possível paralelizar as diversas buscas que devem ser feitas em banco de dados durante uma requisição. Assim é otimizado o uso de seus recursos gerando economia para seu bolso, uma vez que o modelo de cobrança é proporcional ao tempo de uso. Logo, mais uma vez um recurso não será utilizado 100%.

Ok, se te convenci nesse ponto de que usar Django no GAE é “martelar parafuso”, então a pergunta lógica a ser feita é: “O que uso para desenvolver?”

Quando comecei a usar a plataforma, o projeto Django-nonrel não existia. Da mesma maneira, o micro framework Flask também não. Mas o que percebi, acompanhando discussões Flask versus Django na comunidade Python é que microframeworks, como o primeiro, são preferidos por devs mais experientes, pela liberdade de escolha que proporcionam. Mas para devs iniciantes, um framework full-stack é mais adequado. E a razão disso é muito simples: para um dev iniciante, é melhor contar com as decisões feitas por profissionais mais experientes dentro do framework do que bater cabeça tentando criar suas soluções.

Essa conclusão então me chamou a atenção para a pergunta recorrente do início do post, que aqui repito: “Renzo, é possível rodar Django no App Engine? Funciona bem?”. Acabei meditando melhor, deixando meu preconceito contra frameworks full-stack de lado, tentando entender o que realmente essa pergunta queria dizer. Como fruto desse pensamento, acabei traduzindo a pergunta para “Existe uma forma de automatizar o código no GAE da mesma forma que faço com o Django?”. E a reposta é sim.

A solução então foi adaptar minha biblioteca, o Tekton. Ele foi construído em cima do framework padrão da documentação do App Engine, o webapp2. Sua versão inicial tinha a mesma filosofia do Flask. E por conta do que comentei sobre esse tipo de framework, essa é uma opção não familiar para devs iniciantes ou àqueles que conhecem as facilidades do Django.

Passei então a analisar os pontos fortes do Django e também do Rails. Minhas conclusões:


  1. Seria legal ter scaffold para prototipação
  2. Seria legal ter validação automática de formulários a partir de modelos
  3. Seria legal ter a criação de código html a partir de modelos
  4. Seria legal ter um ecossistema de apps mínimas para começar, e ir acrescentando outra com o tempo
  5. Seria legal fornecer uma arquitetura para permitir o uso das API's assíncronas do Google, ao mesmo tempo em que se construa apps isoladas como as do Django
  6. Seria legal documentar todas ferramentas
  7. Seria legal criar uma comunidade em volta desse framewok


Para as primeiras 4 questões, segue o vídeo:




Para as demais:

Apps: 

Até agora escrevi 5 apps:
  1. GAEBusiness. Arquitetura para camada de negócio que permite separar apps e ainda sim executar código utilizando as vantagens da API assíncrona;
  2. GAEGraph. Lib que permite modelagem de dados no banco como um grafo. Prove várias features interessantes, como recuperação de nós, salvamento entre outras. Isso utilizando memcache para aumentar performance e reduzir custos;
  3. GAECookie. App de segurança de cookie para validação de sessão e para evitar ataques CSRF;
  4. GAEPermission. Plataforma de login com Google, Facebook e Passwordless. Também prove camada de segurança por lista branca (white-list) para controlar permissões em alto nível;
  5. GAEPagseguro. Plataforma de integração com pagseguro.

Todas essas features podem ser conferidas em https://pt-dot-tekton-fullstack.appspot.com/ e também em http://adm.python.pro.br/

Quanto a documentação, vou reescrever todo o livro https://leanpub.com/appengine para conter essa nova abordagem. Após isso vou documentar todas apps no Github.

Por fim, fica a criação da comunidade. É isso que começo fazer agora! Assim, se você quiser participar desse projeto ou tirar dúvidas, fica o endereço do fórum para você se filiar:


Até o próximo post!

quinta-feira, 22 de maio de 2014

Sistema de Login sem Senha


Ano passado meu amigo Dênis Costa me enviou um post fantástico sobre um sistema de login sem senha. A ideia principal é: “Para que pedir uma senha ao usuário se ele vai esquecê-la?”. Ou seja, se o “esqueci minha senha” vai ser utilizado com frequência, porque não simplesmente enviar um link de login por e-mail toda vez que usuário quiser acessar o sistema? Achei a ideia genial.

Procurei por alguém que oferecesse o login sem senha como serviço, aos moldes de um “login com Facebook”. Não encontrei. Decidi então desenvolver o Passwordless. Além de se poder utilizar como serviço, o projeto é livre:

https://github.com/renzon/pswdless

No processo de desenvolvimento mapiei os status para logar o usuário:

  1. Usuário pede para fazer login em um site;
  2. Site envia chamada para Passwordless;
  3. Passworldless envia e-mail em nome do site;
  4. Usuário acessa e-mail e clica no link;
  5. Passworldless envia noticação ao site.
  6. Site efetua o login

Desenhando o diagrama de sequência:


Além desse fluxo, também são importantíssimos os requisitos de segurança.

O primeiro deles é evitar o envio de spam. Isso foi mitigado criando um intervalo de tempo mínimo, atualmente 30 minutos, para que se possa enviar um e-mail de login para o mesmo usuário. Segue o teste automático:


def test_spam(self):
        site = mommy.make_one(Site, domain='www.pswd.com')
        user = mommy.make_one(PswdUser)
        ndb.put_multi([site, user])
        create_login = CreateLogin(user, site, 'hook')
        create_login.execute()
        # time.sleep(3)  # giving time because eventual consistency
        validate_cmd = ValidateLoginCall(site.key.id(), site.token, 'http://www.pswd.com/pswdless',
                                         user.key.id())



O segundo requisito seria proteger o link de login. Para isso foram implementadas as seguintes medidas:

  1. Todo link é único, contendo um token aleatório e assinado via hash;
  2. Todo link tem validade. Se em 10 minutos o usuário não clicar nele, ele fica inválido;
  3. Todo link é descartável. Depois de utilizado, não mais é possível fazer login com ele.

Para todas essas medidas foram construídos testes automáticos:

class ValidateLoginLinkTests(GAETestCase):
    def _assert_error(self, token):
        validate_cmd = ValidateLoginLink(token, None)
        validate_cmd.execute()
        self.assertDictEqual({'ticket': 'Invalid Call'}, validate_cmd.errors)

    def _assert_wrong_status(self, status):
        login = Login(status=status, hook='https://pswdless.appspot.com/foo')
        login.put()
        cmd = client_facade.sign_dct('ticket', login.key.id())
        cmd.execute()
        self._assert_error(cmd.result)

    def test_invalid_token(self):
        self._assert_error('invalid token')

    def test_already_clicked(self):
        self._assert_wrong_status(LOGIN_CLICK)

    def test_already_got_detail(self):
        self._assert_wrong_status(LOGIN_DETAIL)

    def test_not_existing_login(self):
        cmd = client_facade.sign_dct('ticket', 2)
        cmd.execute()
        self._assert_error(cmd.result)

Depois de um certo tempo, outro amigo, o Giovane Liberato, acabou me enviando alguns links sobre o assunto:


Interessante notar a análise no segundo, onde colocaram dados sobre a aceitação dos usuários a um sistema de login sem senha de um comércio eletrônico.

Mas e você, qual sua opinião sobre um sistema de login sem senha?

Até o próximo post.

segunda-feira, 5 de maio de 2014

Primeiro ano de ITA


Após a grande batalha de 2003, em janeiro do ano seguinte seguimos do RJ para o ITA no meu carro eu, Alan, Papel e Raissan. Dada minha experiência no Naval, cheguei no CTA de “guarda alta”, pronto para trotes pesados.

O veterano que nos recebeu foi Átila, da turma 07. Tudo muito tranquilo, falou que deveríamos escolher um apartamento, mas que não poderíamos ficar todos juntos, 2 no máximo por ap. A razão disso era enturmar todos os ingressantes, evitando a formação de panelas.

Perguntei então sobre a rotina, se tinha revista no apartamento. Ele respondeu que o apartamento era nosso e que apesar de o ITA estar em uma base militar, ele não tinha a rotina de milico. Você não é obrigado arrumar sua cama ou até mesmo ir a aula. Ao saber disso, pensei: “Isso vai ser uma colônia de férias”.

Ficamos então eu e Raissam no apartamento 316. Lá já estava o Reginaldo José, vulgo Beraba, que recentemente ficou famoso por hackear o Facebook. Depois chegaram o Thiago (Granola) , Joaquim (Mantega) e Marcelo Gomes (Muskito).

Durante o primeiro mês ocorria a chamada integração. Durante o período os calouros eram reunidos para “bostejos”, que são bate papos onde veteranos explicam o funcionamento do ITA e seus valores. Aconteciam algumas brincadeiras, mas depois dos trotes do Naval, aquilo era muito tranquilo.

Além disso havia instrução militar no CPOR. No primeiro ano todos alunos são militares, visando cumprir o serviço obrigatório. Mas sendo a maioria dos alunos compostas por civis, ou seja, quem não optou por ser militar no vestibular, as instruções eram bem suaves.

Apesar de eu achar tudo ótimo, a maioria dos meus amigos de turma não estava acostumados com as novidades. Morar sozinho era um desafio. Os apartamentos eram velhos e com vários problemas. Certa vez chouveu e o esgoto inundou minha vaga e a do Raissan. Muitos reclamavam do trote. Mas enfim, para quem morava em alojamento, tinha que arrumar a cama todo dia e ir para aula fardado, o CTA e o alojamento (H8) eram um paraíso.

Terminado o período de integração começaram as aulas. Nesse período apenas tínhamos que ir no CPOR às segundas de tarde. E isso recebendo um salário, não sei como ainda tinha gente que reclamava. Nesse início mais uma vez boa parte da turma se frustrou. Alguns professores deixavam a desejar. Por conta da fama do ITA, a maioria pensava que só existiriam profissionais espetaculares. Em particular ,eu não me frustrei por já ter passado o mesmo Naval.

Depois de estudar nessas duas instituições e conhecer muitos amigos de colégios militares, cheguei na fórmula das boas escolas:

  1. Processo seletivo acirrado
  2. Média de aprovação alta
  3. Provas difíceis, independente da qualidade do professor
  4. Regras rígidas, com muitas culminando em desligamento.

A média no ITA é 6,5. São feitas em geral 3 provas: primeiro e segundo bimestre e mais uma prova final. Se não atingir a média, o aluno deve fazer segunda época no próximo semestre e atingir a média. Isso quer dizer que se você ficou com 6 de média, precisa tirar 7 na segunda época, com 5 é necessário 8 e assim sucessivamente. Mas mesmo que você atinja a média na segunda época, há ainda mais uma regra. Se você tirar menos de 8,5, você fica com o 'I' de insuficiente em seu currículo. Se durante todo o ITA você acumular mais do 5 Is, você é desligado. Se você repete maid de suas matérias, você tem que refazer todos as outras do semestre. Você só pode trancar duas vezes: uma por nota e uma por saúde. Na prática, em minha época o pessoal acochambrava para deixar você usar o “continue” da saúde mesmo que a razão verdadeira fosse nota.

Mas são essas dificuldades e o fato de morar juntos que faz com que os integrantes da turma sejam muito unidos. Os mais safos ajudam aqueles com maior dificuldade e assim se formam amizades para uma vida inteira.

Um valor interessante, herdado das escolas militares, é muito interessante: a Disciplina Consciente (DC). Basicamente o conceito pode ser traduzido como honestidade, praticado através da confiança nesse valor. Como exemplo, é comum um professor passar provas e não ficar supervisionando a sala. Mais ainda: dar uma prova para se fazer em casa, com tempo de duração e sem consulta. Isso cria um ambiente ímpar. Mas como as regras são rígidas, quebrar esse valor é algo muito sério. Alunos que são pegos colando são expulsos, apesar de algumas vezes já terem acochambrado e apenas trancado alunos pegos com a boca na botija. Mas isso é muito incomum.

Enfim ,o primeiro ano do ITA foi relativamente tranquilo para mim. A boa base que o Colégio Naval me deu, mais 1 ano de cursinho Roquette (infelizmente falecido há poucos dias antes da publicação desse artigo) contribuíram para isso.

Infelizmente no fim do ano (talvez tenha sido no segundo ano) o Raissan trancou por conta de notas. Além disso, estávamos divididos em dois grupos no ap. Granola e Beraba estudavam e eram regrados. Os outros, eu incluso, tocávamos o zaralho: vídeo game até tarde, séries de TV, saidões. Por conta disso, acabamos decidindo por dividir o ap no segundo ano. Mas o segundo ano fica para um outro post.

Enfim, o ITA é um lugar incrível onde você encontra pessoas sensacionais, fazendo amizades para a vida inteira. As regras rígidas, estudo puxado e a DC é fórmula para a fama da instituição, materializado pelo assédio das empresas para contratarem os que se graduam na instituição. Além disso, esse fatores contribuem para a “máfia iteana”. Ela consiste em uma rede de contatos de ex-aluno que costuma se ajudar, principalmente no quesito mercado de trabalho.

Enfim, um lugar espetacular que tive o privilégio de estudar e que aconselho a todos que se interessarem e estiverem dispostos a pagar o preço exigido pelo foco no estudo.

Nesse ano de 2004 ainda cheguei a ir no baile da Escola Naval. Foi interessante encontrar os velhos amigos de Colégio Naval e poder dar a volta por cima. No ano seguinte e também fui ao baile, com histórias mais interessantes para contar, mas fica para o próximo post.


quarta-feira, 12 de fevereiro de 2014

Como Publicar um Livro na Internet


Conhece aquele ditado: “Há três coisas que todo ser humano deve fazer na vida para se sentir realizado: escrever um livro, ter um filho e plantar uma árvore”? Pois é, faço parte dessa turma. No início de 2014 achei que era hora de começar a escrever. Avaliei algumas opções para publicação e acabei optando por uma independente (self publishing).

Acabei encontrando o espetacular site de publicação independente LeanPub. O primeiro aspecto que achei fantástico foi poder fazer o lançamento de maneira “lean”. Isso quer dizer que é possível testar o mercado muito antes da conclusão do trabalho. O site provê uma “landing page” na qual você pode perguntar quanto as pessoas estariam dispostas a pagar. Fiz o lançamento depois de terminar o primeiro capítulo do App Engine e Python, você programa e o Google escala! Foi muito motivador fazer a primeira venda. Com certeza dá muito mais energia para escrever mais.

Outra funcionalidade fantástica é a geração do livro. Após o cadastro da conta o site compartilha uma pasta com você através do Dropbox. Dessa forma não há necessidade de se fazer upload e dowload. Ela contém os arquivos para geração do livro. O formato de escrita é o Markdown. Ou seja, para quem está acostumado a editar esse tipo de arquivo no GitHub, a curva de aprendizado é super suave. Com apenas um clique você tem a geração em formato epub, mob e pdf. É muito estimulante poder ver seu trabalho em um leitor eletrônico como o Kindle.

A simplicidade na geração do material é tanta que pensamos em fazer um teste no Python Pro. Começando pelo App Engine Fundamental, vamos ver se funciona fornecer as várias versões como material de apoio ao curso. Dessa maneira o aluno aprende com aulas ao vivo, exercícios e mais o livro para se aprofundar.

Enfim, tem vontade de escrever sobre algum assunto? dificuldade para publicar não é mais desculpa!

Se você gostou desse artigo, ajude um escritor independente curtindo a fan page: https://www.facebook.com/pythonappengine.

Até o próximo artigo.

segunda-feira, 20 de janeiro de 2014

Screencast no Linux


Screencast no Linux

Depois que comecei a fazer o curso AppEngine e Python: você programa e o Google escala!, muita gente me perguntou como eu estava fazendo o screencast no Linux. Então vou comentar as ferramentas que estou utilizando e algumas que usei, mas não funcionaram bem.

Qualidade do áudio

A primeira coisa que você deve prestar atenção quando for gravar screencast é o aúdio. Os microfones dos laptops atuais servem para você conversar no Skype ou Hangout. Já para gravação deixam a desejar, por conta dos ruídos e chiados.

Para resolver esse problema, comprei um microfone USB da Microsoft (Obs: o hardware da M$ costuma ser muito bom, apesar do Windows =P). Como a entrada de microfone comum (p2) costuma não ser muito boa para captação, escolhi esse modelo USB.

Captura de vídeo

Inicialmente eu tentei utilizar o Record my Desktop mas houve problemas. Ele grava utilizando a extensão ogv e o arquivo fica enorme. Além disso, na hora de fazer recortes durante a edição, o aúdio ficava dessincronizado com o vídeo. E quanto maior o recorte, pior ficava, inviabilizando o seu uso.

Existe também a opção de linha de comando que meu amigo Tony Lâmpada postou em seu blog. Mas ainda sim pode ser problemático se você estiver usando um monitor adicional.

Por fim o programa que estou usando hoje é o Kazam . Ele já possui opção de fazer o encoding em mp4; permite fazer o setup dos inputs de aúdio e vídeo, em termos harware; quadros por segundo e também que se faça o screencast de uma porção limitada da tela. Disparado o melhor que econtrei.

Edição de vídeo

Para edição, estou utilizando o Kdenlive. A interface de edição dele é simples e lembra um pouco a interface do do Camtasia, apesar de não ter tantos recursos. Mas para recortes é perfeito.

Screenshot

Apesar de não ter relação direta com vídeo, uso o Shutter para fazer screeshots. Ele permite fazer a captura de uma janela específica, economizando o tempo de você ter que recortar a imagem. Possui também recurso de timer para que você possa fazer a captura de acesso a menus de contexto de programas, o que é impossível apenas utilizando o printscreen.

Enfim, se o software era sua desculpa para não gravar aquele curso bacana que está na sua cabeça, agora isso não é mais problema.

Abraços e até o próximo post.