Posts de September, 2009

[Cristiano Casado] Deep Green, o amigo de boteco.

Friday, September 18th, 2009

Você já ouviu falar do Deep Blue, o computador da IBM que desafiou Gary Kasparov em uma partida de xadrez na década passada. Este no vídeo é o Deep Green, o robô que joga sinuca. Deep Green é um projeto de robótica da universidade Queens. Eles também estão trabalhando com conceitos de realidade aumentada para alinhar a tacada do jogador com feixes de laser.

[Rafael Biriba] Vulnerabilidade do site da VIVO: Seu windows pode ter sido afetado e já não ser mais seguro

Sunday, September 13th, 2009

De acordo com o wiki, malware é um software destinado a se infiltrar em um sistema de computador de forma ilícita, com o intuito de causar danos e roubar informção. E foi exatamente isso que aconteceu com todos os visitantes do site da vivo, no dia 08/09/2009.

Ao visitar o site da VIVO, foi requisitado a instalação de um applet, que provavelmente foi aprovado por todos, pois o arquivo malicioso era um suposto arquivo de imagem. Isso mesmo, um simples arquivo .jpeg, aparentemente inofencivo, que ocultava arquivos compactados java (JAR).

O que ele fazia ? Nada demais… Apenas alterava o arquivo HOSTS do windows. Para quem não sabe, nesse arquivo é possível mapear uma nova rota (IP) à um site que você visita. Isso significa, que se você adicionar neste arquivo um site de um banco, por exemplo www.itau.com.br, e um IP que te leve para um outro lugar, ao acessar seu navegador e digitar o endereço do itaú conforme o exemplo, você é redirecionado para um site falso.

Todos que foram “prejudicados” pelo malware, o arquivo HOSTS foi alterado, e as seguintes linhas foram adicionadas:

69.162.114.180 santander.com.br
69.162.114.180 www.santander.com.br
69.162.114.181 itau.com.br
69.162.114.181 www.itau.com.br
69.162.114.181 www.itau.com
69.162.114.181 itau.com
69.162.114.181 itaupersonnalite.com.br
69.162.114.181 www.itaupersonnalite.com.br
69.162.114.182 www.bradesco.com.br
69.162.114.182 bradesco.com.br
69.162.114.182 www.bradesco.com
69.162.114.182 bradesco.com
69.162.114.182 www.bradescoempresa.com.br
69.162.114.182 bradescoempresa.com.br
69.162.114.182 www.bradescoprime.com.br
69.162.114.182 bradescoprime.com.br
69.162.114.182 bradescocartoes.com.br
69.162.114.182 www.bradescocartoes.com.br
69.162.114.179 www.nossacaixa.com.br
69.162.114.179 nossacaixa.com.br

Se você roda linux, teste a difereça pelos ips abaixo! Se você roda windows, não acho seguro acessar o ip falso, então verifique a diferença nas imagens que coloquei no fim do post .
IP do site do banco itau VERDADEIRO: 200.196.152.40
IP do site do banco itau FALSO: 69.162.114.181

Como saber se você foi infectado ? Se você roda linux, certamente você NÃO foi infectado! (Gostei de dizer essa frase! Viva o Linux ! :) ), agora se você roda com windows, abra o bloco de notas e abra arquivo digitando o caminho completo: C:\WINDOWS\system32\drivers\etc\hosts

Se no arquivo não tiver os ips e os endereços acima, você não foi infectado. Mas se tiver, basta remover todas as linhas e salvar o arquivo. Por padrão a única linha que deve ter no arquivo é (127.0.0.1 localhost), lembrando que tudo que tem “#” antes não é levado em consideração (São apenas comentários no arquivo).

Agora vem a parte triste. Eu posso jurar que NÃO entrei no site da vivo no dia 08/09, então tomem cuidado, existe outro site, ou outras formas de se obter o malware. Em uma próxima ocasião, darei algumas dicar para evitar esses tipos de problemas.

Meu pai me fez uma pergunta interessante, que vale ser respondida aqui:
Como você conseguiu descobrir isso ?
Infezlimente eu caí parcialmente no golpe. Hoje precisei pagar um boleto, então entrei no site do itaú, digitei minha agência e conta, e logo depois a senha eletrônica, foi então que eu entrei numa tela (como mostra uma das figura a baixo) solicitando que eu digita-se TODAS as posições numéricas do meu cartão de segurança para recadastramento!

Eu ja sabia disso, mas no próprio cartão, está escrito: “O itaú nunca solicita o recadastramento deste cartão”, foi quando me dei conta do golpe e ao procurar mais detalhes no google, rapidamente descobri que esse golpe está associado a um malware e que muitas pessoas já cairam nele, e o pior, a maioria está com esses “IPs Maliciosos” no seu computador , alguns também já está com sua conta bancária comprometida e essas pessoas nem sabem sobre o golpe!

Então é isso aí! Divulguem para seus amigos e familiares, peçam para verificar o arquivos de hosts do windows. Muito em breve postarei algumas soluções e dicas para evitar esse tipo de problema.

O ato de enganar o usuário para obter informação desta maneira se chama Phishing. Aproveito para esclarecer, que o malware foi introduzido no site da VIVO por hackers, então não pense que foi a VIVO que fez essa “maldade”. Foi apenas uma falha de segurança. Quanto aos bancos, não acho que eles tenham alguma coisa a ver com isso também.

Agora os peritos tem que analisar o IP, e descobrir o dono do servidor que mantém esses sites fraudulentos. Numa pequena pesquisa que fiz, descobri que esse IP (69.162.114.181) vem de um servidor localizado na cidade de DALLAS - United States. A empresa responsável é a Limestone Networks (www.limestonenetworks.com). Agora só resta que essa empresa forneça os dados cadastrais, forma de pagamento, numero do cartão de crédito, e etc…, da pessoa que alugou o servidor, e estaremos bem perto dos culpados. Mas, como a empresa é estrangeira e os dados só podem ser obtido por processo jurídicos, isso vai demorar muito !

Logo abaixo vocês pode conferir algumas imagens que extraí do site falso do itaú. (Clique nas imagens para visualizar em formato maior )

itau-verdadeiro-smallSite Verdadeiro do Itaú

itau-falso-smallSite Falso do Itaú

itau-falso-cadastro-cartao-smallTela falsa solicitando os códigos de segurança

Só para reforçar, não esqueça de informar seus amigos e parentes… Eles já podem ter sido enganados pelo sistema falso, e precisam entrar em contato com o banco imediatamente para mudar as senhas e códigos…


Leia também outros assuntos:


[Cristiano Casado] Facebook abre o código do Tornado

Friday, September 11th, 2009

Tornado é um webserver escrito em python e projetado pelo Facebook para sites com grande tráfego e acesso simultâneo.  O Facebook abriu seu código sob licença Apache e utiliza a solução no recurso FriendFeed do site. O webserver se diferencia dos outros por ser “non-blocking”, utilizando epoll do kernel Linux para lidar com grande quantidade de file descriptors.  Possui módulos interessantes como o auth utilizado para autenticação e autorização em sistemas de terceiros ( Google OpenID, Yahoo BBAuth, Twitter OAuth ) ou o s3server que é uma interface para Amazon simple storage server.

Para ambiente de produção, a recomendação deles para performance é o uso do Tornado no esquema 4 single-threaded em uma máquina com 4 cores ( 1 thread para cada core ), tendo o nginx como reverse proxy.  O benchmark feito por eles chama a atenção pelo bom resultado, comparando populares web frameworks em python.

[Rafael Biriba] Wordpress: Enviando posts para o Twitter

Tuesday, September 8th, 2009

 

http://www.twitter.com

http://www.twitter.com

Procurar plugins para integrar o twitter com o wordpress é fácil. Saber qual e como usar é o difícil.

Se você procurar por twitter no banco de plugins (http://wordpress.org/extend/plugins/search.php?q=twitter), vai receber mais de 28 páginas com plugins que fazem de tudo.

No meu caso, procurei por um plugin que enviasse ao meu twitter o título e o link toda vez que eu criasse um novo post.

Selecionei aleatoriamente vários na listagem, dando proferência aos mais recomendados e apenas 2 chamaram minha atenção:

WP to Twitter: http://wordpress.org/extend/plugins/wp-to-twitter/

Tweetable: http://wordpress.org/extend/plugins/tweetable/

Qual dos dois é o melhor ? Bom, eu não saberia dizer, sem antes fazer testes nos 2 plugins. Se trocar a pergunta para, qual dos dois é o mais “usual” ?, então afirmaria com toda a certeza que é o Tweetable.

O WP to Twitter possui muitas configurações que não são simples de cadastrar. Por exemplo, para encurtar a URL você precisa se cadastrar no site cli.gs ou no bit.ly, e depois fornecer ao plugin seu usuário e sua “key” de acesso.

Já o Tweetable possui configurações são bem intuitivas e distribuidas em passos. Por motivos de segurança e identificação, ele acessa o twitter como uma aplicação, o que requer um cadastro complementar. O plugin se encarrega de  redirecionar você até a página de cadastro de aplicação do twitter e depois o traz de volta. Feito isso o plugin está pronto para o uso.

Agora nós temos uma balança equilibrada. O Tweetable usa alguns serviços como tr.im e tinyurl.com e é fácil de configurar. O WP to Twitter possui apenas o cli.gs e bit.ly, não é tão simples de gerenciar mas seus serviços de URL Shortener são excelentes.

http://twitter.com/rafaelbiriba

Você está usando algum outro, deixe sua opnião e conte-nos como funciona. Existem muitos plugins que prometem fazer coisas, mas não cumprem nem a metade.

Eu escolhi o Tweetable usando tr.im. Cabe a você agora decidir qual usar…


Leia também:


[Cristiano Casado] Múltiplos uploads para o Google Docs

Sunday, September 6th, 2009

Se você precisa fazer upload de múltiplos arquivos para o Google Docs, ficará limitado pelo upload tradicional que permite a operação de um arquivo por vez.  O Google Docs possui uma API para upload, download e edição de documentos.  Uma das aplicações que faz uso desta API foi escrita por Anton Belograzov e se chama Google Docs Batch Upload.  É uma aplicação java command-line para Linux, Mac e Windows com JRE 1.6.

Google Docs Batch Upload faz o upload de um ou mais arquivos suportados pelo Google Docs a partir de um determinado diretório local.  A sintaxe do comando é a seguinte:

java -jar google-docs-upload-1.0.jar <path> –recursive

( substituindo <path> com o caminho para o diretório com o conteúdo para upload).

[] Writing a domain specific language DSL with python

Saturday, September 5th, 2009

A domain-specific language is a piece of software designed to be useful for a specific task in a fixed problem domain, they’re gaining popularity because they enhance productivity and reusability of artifacts. DSLs also enable expression and validation of concepts at the level of abstraction of the problem domain, this approach is very useful when you need to describe a user interface, a business process, a database, or the flow of information.

// <![CDATA[
google_ad_client = "pub-9202186284112152"; /* 300x250 blog content */ google_ad_slot = "4279590471"; google_ad_width = 300; google_ad_height = 250;
// ]]>

The DSL concept isn’t new after all, special-purpose programming languages and all kinds of modeling, specification languages have always existed, but this term rise due the popularity of domain-specific model.

You can easily implement dsls using the ruby language, Java or even C# if you prefer, but this isn’t the main propose of this article. The sine qua non become visible when I was implementing a simple test case with python. Indeed, there are a lot of python BDD-like frameworks, mostly who are self claimed the silver bullet, that are mismatching a lot of basic principles, but like I said, we are talking about dsls =)

With python we can easily create a piece of software that expresses some basic desired behavior, like rspec does, but much more pythonic.

spec.py

# coding: pyspec
    class Bow:
        def shot(self):
            print "got shot"
 
        def score(self):
            return 5
 
    describe Bowling:
        it "should score 0 for gutter game":
            bowling = Bow()
            bowling.shot()
            assert that bowling.score.should_be(5)

we can easily make this test dsl a runnable piece of python code, whiteout writing incompressible regular expressions, just using the python codecs and tokenizer.

Fist of all we need to define a new encoding for pyspec – our pre defined spec file syntax – this neat hacking enables a new path to tokenize this file

tokenizer.py

import tokenize
    import codecs, cStringIO, encodings
    from encodings import utf_8
 
    class StreamReader(utf_8.StreamReader):
        def __init__(self, *args, **kwargs):
            codecs.StreamReader.__init__(self, *args, **kwargs)
            data = tokenize.untokenize(translate(self.stream.readline))
            self.stream = cStringIO.StringIO(data)
 
    def search_function(s):
        if s!='pyspec': return None
        utf8=encodings.search_function('utf8') # Assume utf8 encoding
        return codecs.CodecInfo(
            name='pyspec',
            encode = utf8.encode,
            decode = utf8.decode,
            incrementalencoder=utf8.incrementalencoder,
            incrementaldecoder=utf8.incrementaldecoder,
            streamreader=StreamReader,
            streamwriter=utf8.streamwriter)
 
    codecs.register(search_function)

Our tiny translate function defines a easy way to translate both describe and it into a traditional python class and method definition.

def method_for_it(token):
        return token.strip().replace(" ", "_").replace("\"","" ) + "(self)"
 
    def translate(readline):
        previous_name = ""
        for type, name,_,_,_ in tokenize.generate_tokens(readline):
            if type ==tokenize.NAME and name =='describe':
                yield tokenize.NAME, 'class'
            elif type ==tokenize.NAME and name =='it':
                yield tokenize.NAME, 'def'
            elif type == 3 and previous_name == 'it':
                yield 3, method_for_it(name)
            else:
                yield type,name
            previous_name = name

Clever isn’t ? Now, fell yourself free to fork this project on GitHub and finish the job =) maybe someday we can have a real BDD python framework. http://github.com/fmeyer/pydsl/tree/master

References:

  1. [codecs — Codec registry and base

classes][5]

  1. [tokenize — Tokenizer

for Python source][6]

Facebook Slashdot WordPress LiveJournal Plurk Read It Later Digg Posterous Reddit Tumblr Orkut Yahoo Bookmarks DZone Google Bookmarks Twitter Google Gmail Delicious Google Reader LinkedIn Yahoo Messenger Share/Bookmark


[] Venha trabalhar na globo.com

Wednesday, September 2nd, 2009

A vaga é para uma das equipes responsáveis pelo desenvolvimento de novos produtos globo.com[bb]. Somos uma equipe multidisciplinar totalmente responsável pelos projetos desde sua concepção, criação, desenvolvimento, deployment até o suporte.

Não estamos procurando especificamente desenvolvedores Java, PHP, Ruby, Python, C ou C++, queremos uma pessoa totalmente agnóstica que não tenha medo de experimentar e aprender. É óbvio que cada um tenha suas especialidades e/ou preferências, mas estamos procurando programadores multidisciplinares e que além disso sejam capazes não só de programar mas de arquitetar, analisar, testar e trabalhar com novas tecnologias o tempo todo.

Mesmo assim, fortes conhecimentos em Ruby, Javascript, CSS, HTML, Banco de dados schema free, Infra e Amazon EC2 são um grande diferencial.

Por último mas não menos importante, todos nós somos geeks, apaixonados por tecnologia e super atualizados com as últimas novidades da Internet[bb] e do mercado. Nossa equipe é jovem, irreverente, descontraída e em constante evolução. É uma pessoa assim que estamos procurando.

A empresa oferece contratação apenas por CLT, com salário de mercado e plano de benefícios. Estamos localizados na Barra da Tijuca (Rio de Janeiro[bb]).

Se você acha que se enquadra, mande um email para nós beta@corp.globo.com com uma breve introdução, com todos os seus contatos github, twitter, LinkedIn e blog, mande também a lista dos 3 últimos livros[bb] que leu.

@fmeyer, @gcirne, @nevesbruno, @peleteiro

Facebook Slashdot WordPress LiveJournal Plurk Read It Later Digg Posterous Reddit Tumblr Orkut Yahoo Bookmarks DZone Google Bookmarks Twitter Google Gmail Delicious Google Reader LinkedIn Yahoo Messenger Share/Bookmark


[Gabriel Falcão] Introducing Sponge, a python web framework aimed on testing

Tuesday, September 1st, 2009

Sponge first prage

Some time ago, a friend of mine created a cherrypy-based continuous integration application, we both work with Django, but we think that its stack is too big for simple web projects, specially when we do not need to access SQL databases.

More on Django

In adition, I think that Django-powered applications are hard to make unit tests, mostly related to the fact that models, templates and other django helpers need the DJANGO_SETTINGS_MODULE environment variable set, which turn its tests wired.

We have created a few patterns to make Django projects unit-testable, but it is for another post :)

Are you trying to say that Django is not a good framework ?

Nope! I work with Django, and I just LOVE Django, that is a great framework. Its models, forms, and everything else are awesome, and help me to write web applications without much effort, thus keeping high level of quality.

So, why did you create another framework ?

As I’ve just said some posts ago, I really enjoy agile, and I use to write simple web applications that does not demand the whole Django stack, and I need to have agility to write my tests.

CherryPy is a good solution for me, I don’t want another huge-ish framework, even if its based on cherrypy. I just need a few helpers functions, and a pattern to follow.

Idealizing sponge

Bernardo and me wrote a few web applications with cherrypy, and always focusing in TDD, we needed to create some helper classes to cherrypy. Sometime after, we figured out that those helpers could be grouped in a simple library, or a kind of tiny framework.

I started some mashups, and Sponge has been developed.

The name comes from the fact that a sponge can be used to dry stuff. We like the concept of DRY, hence the name :)

Sponge has been developed with TDD, but that is not all.

I’m trying to keep 100% of code coverage in both unit + functional tests, at minimum. It’s because 100% of coverage does not assure that the code works. Lines of code can be covered with some tests, but the same lines can have one or more different behaviours that won’t be found with 100% of coverage.

Principles

  • Help and incentivate developer to write unit and functional tests
  • Less friction as possible
  • Be simple to configure
  • Be simple to deploy
  • Be 100% testable, specially with unit tests
  • Provide pretty URLS through a rails-like syntax
  • Be as most compliant as possible, with package-systems, such as APT
  • Free software (LGPL-3)
  • Comes with jQuery javascript library and 960 grid system
  • Fun to use :)

Hands on!

Installing

If you are using Debian Unstable, just run:

sudo aptitude install python-sponge

If not, you will need, unfortunately, to use setuptools:

In this case, just grab the bleeding edge version through git:

git clone git://github.com/gabrielfalcao/sponge.git

Or just the latest stable relase:

Sponge 0.3.1

Extract, if needed, and run:

sudo python setup.py install

Tutorial

Sponge comes with a simple tutorial within its documentation, but you can access it online