Em clima de festa com direito a montinho e tudo:
Fico feliz por ter surpreendido do Antonio nesses poucos meses que trabalhei com ele, agora os desafios são outros (aka Expurgo…)!
Toninho, boa sorte no Yahoo!
Em clima de festa com direito a montinho e tudo:
Fico feliz por ter surpreendido do Antonio nesses poucos meses que trabalhei com ele, agora os desafios são outros (aka Expurgo…)!
Toninho, boa sorte no Yahoo!
Apache CouchDB is a very nice schema-free document-oriented database that I’m playing with lately.
Here’s a quick guide to get CouchDB running on Ubuntu 8:
Prepare your environment
sudo aptitude install automake autoconf libtool subversion-tools help2man spidermonkey-bin build-essential erlang erlang-manpages libicu38 libicu-dev libreadline5-dev checkinstall libmozjs-dev wget
Create a couchdb user
sudo adduser --no-create-home --disabled-password --disabled-login couchdb
Download and build the latests version
wget http://mirrors.uol.com.br/pub/apache/incubator/couchdb/0.8.1-incubating/apache-couchdb-0.8.1-incubating.tar.gz
tar -xzvf apache-couchdb-0.8.1-incubating.tar.gz
./configure --bindir=/usr/bin --sbindir=/usr/sbin --localstatedir=/var --sysconfdir=/etc
make
Install it
sudo make install
sudo chown couchdb:couchdb -R /var/lib/couchdb /var/log/couchdb
sudo update-rc.d couchdb defaults
Start the service
sudo /etc/init.d/couchdb start
CouchDB will be running on port 5984. By default it listens only for connections from the local host. To change that edit /etc/couchdb/couch.ini and restart CouchDB.
Sample code (Ruby):
#!/usr/bin/env ruby # Setup require "rubygems" require "couchrest" require "test/unit/assertions" include Test::Unit::Assertions # Database couchdb = CouchRest.new("http://localhost:5984") couchdb.database('helloworlds').delete! rescue nil db = couchdb.create_db('helloworlds') # Create db.bulk_save([ {"_id" => "en", "helloworld" => "Hello world"}, {"_id" => "pt", "helloworld" => "Ola mundo"} ]) # Retrive document = db.get("pt") assert_equal "Ola mundo", document["helloworld"] # Update document["helloworld"] = "Olá mundo!!!" db.save(document) # Retrive again assert_equal "Olá mundo!!!", db.get("pt")["helloworld"] # Fails to delete, since variable msg is an only snapshot of the data assert_raise(RestClient::RequestFailed) { db.delete(document) } # But working with a last revision of the document document_last_revision = db.get("pt") assert_not_equal document["_rev"], document_last_revision["_rev"] assert_nothing_raised { db.delete(document_last_revision) } # Schema free db.bulk_save([ {"name" => "Maria Hernandes", "helloworld" => "Oi!"}, {"name" => "John Wisky", "helloworld" => "Whatzup!", "age" => 24}, {"helloworld" => "Duuuude!", "age" => 18, "country" => "Australia"}, {"name" => "Peleteiro", "age" => 29, "country" => "Brazil", "helloworld" => "Olá"}, {"helloworld" => "Hi guys", "name" => "Michel", "country" => "USA"} ])

Uma das primeiras coisas que aprendi quando trabalhava como testador foi tentar este código em telas de login:
' or '1' ='1
Imagine que o impacto dessa belezinha em uma query como esta:
"SELECT USUARIO FROM TABELA WHERE USUARIO = '" + usuario + "' AND SENHA = '" + senha + "'"
temos, então:
SELECT USUARIO FROM TABELA WHERE USUARIO = 'qqCoisa' AND SENHA = '' or '1' ='1'
Consegui efetuar o login devido a extrema preguiça do desenvolvedor que nunca se interessou em estudar um pouco de segurança, muito menos sabe o que é um prepared statement. Isso no melhor dos casos, posso querer inserir um DROP TABLE da vida facilmente, pois o sistema está, literalmente, de pernas abertas.
Recentemente um colega testou esse tipo de ataque contra um site de uma instituição por curiosidade. Ele conseguiu obter um arquivo contento a senha e o IP do banco de dados e conseguiu acessa-lo, perceberam o perigo?
Sinceramente? Se eu vejo um site que cai nesse truque eu não sinto pena. Não vou zoar ou fazer algo maléfico, as vezes até tento avisar, mas não sei se vale a pena: ou o sistema custou muito barato ou custou muito caro, foi produzido por uma consultoria que lucou 1980% em cima do salario do estágiario e que, por mais documentos que tenham produzido não conseguiram fazer algo básico: um site seguro contra hackers que estudam pela Wikipedia.
Se o seu site não pode receber aspas simples, duplas ou %, tenha MUITO medo, pois alguem VAI fazer algo em breve…
public class A { public static void main(String args[]) { @Shared int acumulador = 0;
{int => int } xxx = { int i => acumulador += i; i};
System.out.println(xxx.invoke(1)); System.out.println(xxx.invoke(2)); System.out.println(xxx.invoke(3)); System.out.println("o valor do acumulador eh " + acumulador );
}}
Só eu estou achando divertido?
http://gafter.blogspot.com/2008/08/java-closures-prototype-feature.html
Isn’t loopback a redundancy?
If it’s a loop wouldn’t it be back anyway?