Desafio Homem X Máquina: Kramnik vs Deep Fritz

30 11 2006

O atual campeão mundial de xadrez Vladimir Kramnik está enfrentando o software de xadrez Deep Fritz 10
(foto: Schwarti)

No jogo 2 Kramnik comteu um erro impressionante para um campeão mundial!
Acompanhe:

Deep Fritz 10 – Kramnik,V (2750) [D10]
Man vs Machine Bonn, Germany (2), 27.11.2006
1.d4 d5 2.c4 dxc4 3.e4 b5 4.a4 c6 5.Nc3 b4 6.Na2 Nf6 7.e5 Nd5 8.Bxc4 e6 9.Nf3 a5 10.Bg5 Qb6 11.Nc1 Ba6 12.Qe2 h6 13.Be3 Bxc4 14.Qxc4 Nd7 15.Nb3 Be7 16.Rc1 0-0 17.0-0 Rfc8 18.Qe2 c5 19.Nfd2 Qc6 20.Qh5 Qxa4 21.Nxc5 Nxc5 22.dxc5 Nxe3 23.fxe3 Bxc5 24.Qxf7+ Kh8 25.Qf3 Rf8 26.Qe4 Qd7 27.Nb3 Bb6 28.Rfd1 Qf7 29.Rf1 Qa7 30.Rxf8+ Rxf8 31.Nd4 a4 32.Nxe6 Bxe3+ 33.Kh1 Bxc1 34.Nxf8. Now 34…Kg8 35.Ng6 Bxb2 36.Qd5+ Kh7 37.Nf8+ Kh8 38.Ng6+ é o empate forçado. Mas Kramnik jogou 34…Qe3?? Seria esse o erro do século?





A Evolução dos Programadores

30 11 2006


Mais uma da série: “Para que simplificar se a gente pode complicar?” A evolução do programador do ponto de vista do “Hello World”!

Colegial:

  10 PRINT "HELLO WORLD"20 END

Primeiro ano da faculdade:

  program Hello(input, output)beginwriteln('Hello World')end.

Formando da Faculdade:

  (defun hello(print(cons 'Hello (list 'World))))

Profissional recém contratado:

  #include void main(void){char *message[] = {"Hello ", "World"};int i;

for(i = 0; i 

Profissional Senior:

    #include #include 

class string{private:int size;char *ptr;

string() : size(0), ptr(new char[1]) { ptr[0] = 0; }

string(const string &s) : size(s.size){ptr = new char[size + 1];strcpy(ptr, s.ptr);}

~string(){delete [] ptr;}

friend ostream &operator 

Programador Master:

  [uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)]library LHello{// bring in the master libraryimportlib("actimp.tlb");importlib("actexp.tlb");

// bring in my interfaces#include "pshlo.idl"

[uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)]cotype THello{interface IHello;interface IPersistFile;};};

[exe,uuid(2573F890-CFEE-101A-9A9F-00AA00342820)]module CHelloLib{

// some code related header filesimportheader();importheader();importheader();importheader("pshlo.h");importheader("shlo.hxx");importheader("mycls.hxx");

// needed typelibsimportlib("actimp.tlb");importlib("actexp.tlb");importlib("thlo.tlb");

[uuid(2573F891-CFEE-101A-9A9F-00AA00342820),aggregatable]coclass CHello{cotype THello;};};

#include "ipfix.hxx"

extern HANDLE hEvent;

class CHello : public CHelloBase{public:IPFIX(CLSID_CHello);

CHello(IUnknown *pUnk);~CHello();

HRESULT  __stdcall PrintSz(LPWSTR pwszString);

private:static int cObjRef;};

#include #include 

#include #include #include "thlo.h"#include "pshlo.h"#include "shlo.hxx"#include "mycls.hxx"

int CHello::cObjRef = 0;

CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk){cObjRef++;return;}

HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString){printf("%ws", pwszString);return(ResultFromScode(S_OK));}

CHello::~CHello(void){

// when the object count goes to zero, stop the servercObjRef--;if( cObjRef == 0 )PulseEvent(hEvent);

return;}

#include #include #include "pshlo.h"#include "shlo.hxx"#include "mycls.hxx"

HANDLE hEvent;

int _cdecl main(int argc,char * argv[]) {ULONG ulRef;DWORD dwRegistration;CHelloCF *pCF = new CHelloCF();

hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// Initialize the OLE librariesCoInitializeEx(NULL, COINIT_MULTITHREADED);

CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,REGCLS_MULTIPLEUSE, &dwRegistration);

// wait on an event to stopWaitForSingleObject(hEvent, INFINITE);

// revoke and release the class objectCoRevokeClassObject(dwRegistration);ulRef = pCF->Release();

// Tell OLE we are going away.CoUninitialize();

return(0); }

extern CLSID CLSID_CHello;extern UUID LIBID_CHelloLib;

CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */0x2573F891,0xCFEE,0x101A,{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }};

UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */0x2573F890,0xCFEE,0x101A,{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }};

#include 

#include #include #include #include #include "pshlo.h"#include "shlo.hxx"#include "clsid.h"

int _cdecl main(int argc,char * argv[]) {HRESULT  hRslt;IHello        *pHello;ULONG  ulCnt;IMoniker * pmk;WCHAR  wcsT[_MAX_PATH];WCHAR  wcsPath[2 * _MAX_PATH];

// get object pathwcsPath[0] = '';wcsT[0] = '';if( argc > 1) {mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);wcsupr(wcsPath);}else {fprintf(stderr, "Object path must be specifiedn");return(1);}

// get print stringif(argc > 2)mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);elsewcscpy(wcsT, L"Hello World");

printf("Linking to object %wsn", wcsPath);printf("Text String %wsn", wcsT);

// Initialize the OLE librarieshRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);

if(SUCCEEDED(hRslt)) {

hRslt = CreateFileMoniker(wcsPath, &pmk);if(SUCCEEDED(hRslt))hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);

if(SUCCEEDED(hRslt)) {

// print a string outpHello->PrintSz(wcsT);

Sleep(2000);ulCnt = pHello->Release();}elseprintf("Failure to connect, status: %lx", hRslt);

// Tell OLE we are going away.CoUninitialize();}

return(0);}

Hacker Aprendiz:

  #!/usr/local/bin/perl$msg="Hello, world.n";if ($#ARGV >= 0) {while(defined($arg=shift(@ARGV))) {$outfilename = $arg;open(FILE, ">" . $outfilename) || die "Can't write $arg: $!n";print (FILE $msg);close(FILE) || die "Can't close $arg: $!n";}} else {print ($msg);}1;

Hacker Sênior:

  #include 

#define S "Hello, Worldn"main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Hacker “Rodado”:

  % cc -o a.out ~/src/misc/hw/hw.c% a.out

Guru Hacker:

  % echo "Hello, world."

Novo Gerente:

  10 PRINT "HELLO WORLD"20 END

Gerente Médio:

  mail -s "Hello, world." bob@b12Bob, por favor, você pode escrever um programa que imprima "Hello, world."?Preciso disso pra amanhã!.^D

Gerente Senior:

  % zmail jimPreciso de um programa "Hello, world." para essa tarde!

Presidente:

  % letterletter: Comando não encontrado.% mailPara: ^X ^F ^C% help mailhelp: Comando não encontrado.% porra!!: Evento não reconhecido% logout

Fonte: The Evolution Programmer





Xadrez do futuro?

30 11 2006





Equipes em sintonia!

17 11 2006





Instalando Samba e Swat no Ubuntu

15 11 2006

O Samba é um servidor Linux de compartilhamento e gerenciamento de recursos em redes formadas por computadores com clientes Windows, através do protocolo SMB (Server Message Block)/CIFS (Common Internet File System), equivalentes a implementação NetBEUI no Windows. Desse modo, pode-se usar o Linux como servidor de arquivos, servidor de impressão, entre outros servidores, para os clientes que rodam Windows (NT, 2000, XP, Server 2003).
O Swat é uma ferramenta de manutenção do Samba através da web, facilitando seu gerenciamento.
Para quem quer economizar uns trocados com a compra de um Win Server, ou para quem prefere mesmo os ambientes Unix-Like, o Samba é uma ferramenta já bastante usada.

- Para instalar o Samba no seu Ubuntu, via terminal entre com o comando:
#sudo apt-get install samba smbfs

- Para gerenciar os usuários de sua rede no Samba, entre os comandos via terminal:
#sudo smbpasswd -a system_username

Crie um arquivo novo de nome “smbusers”
#sudo gedit /etc/samba/smbusers

Adicione essa linha no novo arquivo:
system_username = “network username”

O “network username”, que é o nome do usuário da sua rede Windows, deve ir entre aspas mesmo.

- Para criar os usuários no seu Ubuntu/Samba:
#sudo smbpasswd -a system_username

- Para deletar usuários no Samba:
#sudo smbpasswd -x system_username

- Para compartilhar pastas home somente leitura:
#sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
#sudo gedit /etc/samba/smb.conf

Encontre essa linha:

; security = user

Troque por essa:
security = user
username map = /etc/samba/smbusers

Salve o arquivo e restart o Samba:
#sudo testparm
#sudo /etc/init.d/samba restart

- Para compartilhar pastas home com escrita/leitura:
#sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
#sudo gedit /etc/samba/smb.conf

Encontre essa linha:

; security = user

Troque por essa:
security = user
username map = /etc/samba/smbusers

Nesse arquivo smb.conf, encontre essa seção:

# By default, the home directories are exported read-only. Change next
# parameter to ‘yes’ if you want to be able to write to them.
writable = no

e troque as linhas acima por essas:
# By default, the home directories are exported read-only. Change next
# parameter to ‘yes’ if you want to be able to write to them.
writable = yes

Salve o arquivo e restart o Samba:
#sudo testparm
#sudo /etc/init.d/samba restart

- Para compartilhar pastas de grupo com leitura/escrita:
#sudo mkdir /home/group
#sudo chmod 777 /home/group/
#sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
#sudo gedit /etc/samba/smb.conf

Encontre essa linha:

; security = user

e substitua por essa:
security = user
username map = /etc/samba/smbusers

e também adicione essa linhas no fim do arquivo:
[Group]
comment = Group Folder
path = /home/group
public = yes
writable = yes
valid users = system_username1 system_username2
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup

(lembrando claro de substituir “system_username1″, etc pelo usuário real e “/home/group” pela pasta de sua escolha)

Salve o arquivo e restart o Samba:
#sudo testparm
#sudo /etc/init.d/samba restart

Para instalar o Swat, é bem simples. Isso pode ser feito pelo Gerenciador de Pacotes Synaptic: basta fazer uma busca por “Swat”, marcar a seleção, aplicar e pronto!

Feito isso, instale o inetd:
#sudo apt-get install netkit-inetd

Restart o inetd:
#sudo /etc/init.d/inetd restart

Veja se o arquivo /etc/inetd.conf tem essa linha descomentada:
swat stream tcp nowait.400 root /usr/sbin/swat swat

e aponte seu browser para http:/ip_servidor/:901

Um detalhe…o Swat edita o arquivo smb.conf, mas também limpa todos os comentários que você tenha feito nele. Portanto é melhor fazer uma cópia do arquivo antes de usar o Swat.

Bons compartilhamentos!





A paranóia das metricas de software

11 11 2006


Estava lendo um artigo no blog do Joel Spolsky (na verdade, a fonte original que me levou ao artigo foi um post do blog do Phillip Calçado , o “Shoes”) que diz que a maioria das empresas de desenvolvimento de software tendem a recompensar os programadores que escrevem mais linhas de código e resolvem mais bugs.
Fica claro que a qualidade despenca, uma vez que seria melhor gastar o tempo escrevendo código sem tantos bugs.

O caso mais extremo da paranóia das metas/métricas fica por conta do exemplo da Amazon: como a medida de satisfação dos clientes é mensurada de acordo com o número de chamadas por hora, os atendentes simplesmente desligam na cara do cliente, para não perder tempo com uma única chamada e, assim, aumentar o número de atendimentos.
Coisa de maluco!

Confira aqui o artigo completo





Alavancando a carreira

10 11 2006





Google fazendo escola…

10 11 2006

Ninguém duvida que a integração do GMail com o Google Talk trouxe uma grande praticidade aos seus usuários. Tanto que o Yahoo pretende fazer o mesmo com seu serviço de webmail, integrando o Yahoo! Mail com o Yahoo! Messenger.
Notícia da Info:



Yahoo! terá mensagem instantânea em webmail

Sexta-feira, 10 de novembro de 2006 – 13h40

SAN FRANCISCO, Estados Unidos (Reuters) – O Yahoo está tornando mais simples a escolha entre ferramentas de email e mensagens instantâneas ao vincular as duas em seu serviço de webmail

O Yahoo Mail, que tem cerca de 250 milhões de usuários ativos por mês, planeja nos próximos meses incorporar o Yahoo Messenger dentro do sistema de email, informou o executivo da companhia Brad Garlinghouse.

Os consumidores poderão executar os dois sistemas de mensagens dentro do programa navegador de Internet. Não há necessidade de se fazer download do Yahoo Messenger, uma complicação para usuários que não têm muitos conhecimentos em informática.

A união dos sistemas de email e mensagens instantâneas do Yahoo segue estratégia adotada pelo Google, que integrou o Google Talk ao Gmail e também integrou o Google Talk ao site de redes sociais Orkut. Mas a audiência do Yahoo é quase 10 vezes maior que a base de usuários do serviço de email do Google, segundo dados da indústria.

Reuters





Blog movido

10 11 2006

Esse blog foi movido para

http://evandrobarreto.blogspot.com/

See you there!





Senado decide retirar projeto que define controle da internet

8 11 2006


A votação do projeto do senador Eduardo Azeredo (PSDB-MG) que previa a identificação dos usuários de internet, foi retirada da pauta de votações. Será um lampejo de bom senso?

Quem iria arcar com os custos de se manter por até 3 anos os registros e logs de todos os usuários dos respectivos provedores de acesso?

Ou então, será que não houve interesses comerciais, como por exemplo dos bancos que têm que investir grandes quantias em segurança da informação?

Li em um blog (não me lembro qual nesse momento) que, de qualquer maneira, se essa lei passar pelo Senado, a Câmara deve barrá-lo.

Segue a notícia publicada na Info OnLine:

Quarta-feira, 08 de novembro de 2006 – 09h27

SÃO PAULO – O Senado decidiu retirar de sua pauta de votações a análise do projeto sobre crimes digitais. A votação do projeto na Comissão de Constituição e Justiça (CCJ) estava marcada para esta quarta-feira (8).

De acordo com a assessoria do senador Eduardo Azeredo (PSDB-MG), não há novo prazo definido para que o projeto retorne à pauta de votações da casa. Antes de ser votado pelos parlamentares, o projeto será submetido a debate público e poderá sofrer mudanças.

Entre diversos artigos que prevêem, por exemplo, punições para quem cria e dissemina vírus ou invade computadores e redes, o projeto prevê a identificação obrigatória de todos os usuários de internet no país, item que causou forte polêmica.

Após reação pública negativa, vários parlamentares pediram que a análise do projeto fosse adiada. O presidente da casa, Renan Calheiros (PMDB-AL) e o senador Antônio Carlos Magalhães (PFL-BA) pediram publicamente mais tempo para avaliar a proposta.

Na Câmara, o deputado Aldo Rebelo (PC do B-SP) disse que o Congresso apoiará o combate ao cibercrime, desde que isto não interfira nas liberdades individuais dos usuários.

O texto a ser analisado é de autoria do senador Azeredo, que é relator do projeto e autor do texto final (substitutivo) que condensa outros três projetos sobre crimes digitais que tramitaram no Congresso. Azeredo afirma que seu projeto não fere a privacidade dos usuários, mas sim moderniza e amplia o controle da internet o que, na sua opinião, é uma tendência mundial.

Para se tornar lei, o projeto deveria ser aprovado não só na CCJ, mas também em plenário, por maioria simples, em ambas as casas (Senado e Câmara). O projeto teria ainda que ser sancionado pelo presidente da República.

Felipe Zmoginski, do Plantão INFO