As emocionantes aventuras de um sysadmin linux na procura pelo uptime perfeito!

A interface do WoW e a boa programação

Posted: dezembro 22nd, 2006 | Author: coredump | Filed under: Gaming, Programação | Tags: ,

Primeiro, vejam o screenshot abaixo, é a última versão da minha UI (User Interface) no World of Warcraft:

From Screenshots

Se você der uma olhada no álbum inteiro, tem alguns screenshots das versões anteriores, ou de como eu fui adaptando até chegar ai. Eu mudei muita coisa pelo simples fato de não conseguir enxergar bem a interface padrão da Blizzard: Fonte muito ruim, items mal colocados, informação escondida…

Aos interessados, os addons que eu uso neste screenshot são:

  • ag_UnitFrames (Barras de Health/etc..)
  • Bartender3 (Barra de Botões)
  • Cartographer
  • Chronometer (Timer de habilidades como Polymorph)
  • Clearfont2 (Coloca uma fonte legível no jogo)
  • DeuceCommander
  • eePanels (Cria painíes como o atrás dos botões e do chat)
  • ElkBuffBars (Mostra os buffs como barras de progresso)
  • EQCompare
  • Fubar com vários ‘fu’ (Barra no topo com informações)
  • oCB (Casting Bar)
  • oCD (Cooldown Count)
  • Prat (Chat com cores, nome de canais abreviados, etc…)
  • SimpleCombatLog (Combat Log mostra informações de forma legível)
  • simpleMiniMap (Mini Mapa quadrado, sem bordas)
  • TinyTip (Tip com detalhes mais legíveis)
  • Cryolisis (A bolota no meio com um monte de coisas legais pra Mage)

Quem conhece o WoW sabe que uma das grandes sacadas do jogo são os Addons, que são mini-programas para manipular aspectos e a interface do jogo. Esses addons são limitados e por isso não chegam a ser cheating porque não conseguem fazer coisas milagrosas ou quebrar regras.
Uma coisa interessante sobre os addons de World of Warcraft é que eles são programados numa linguagem chamada Lua, criada e mantida na PUC-Rio.

A biblioteca Ace2

Sempre que eu me referir a “Ace2″, considere que eu estou falando da Ace versão 2 e de sua versão anterior, “Ace1″ ou simplesmente “Ace”.

Depois de algum tempo, as pessoas que programam começam a notar que várias coisas que elas fazem são repetidas, e como em todo ambiente onde se compartilha código, começam a notar que existem formas melhores de fazer de tudo. O pessoal da Ace2 fez exatamente isso: pegou um monte de funções que a maioria dos addons precisa usar e criou uma biblioteca. Isso inicialmente criou um monte de reclamações: para se instalar um determinado addon, era necessário baixar DUAS coisas (a biblioteca e o addon propriamente dito) e ainda tinha de se manter as versões de tudo sincronizado, além disso, certos jogadores acham que biblioteca é desperdício de memória. E pode ser, se usado incorretamente como veremos daqui a pouco…

Então o pessoal da Ace2 provou ser realmente hacker de respeito. Criaram um programa rodando em windows para cuidar de baixar, atualizar e remover os addons baseados em sua biblioteca, e criou um ambiente de desenvolvimento com fórum, servidor svn e trac para todos que fossem usar a biblioteca. Assim, eles foram criando novos addons e, quando necessário, clonando addons famosos usando a Ace2.

From Screenshots

Mas porquê, você pergunta? Se já existe um addon que faz o trabalho, porque esta cisma em criar um novo, só pra usar a Ace2?

World of Warcraft, Lua e o Garbage Collection

Addons são programas que rodam dentro do jogo. Ou seja, eles gastam memória. Quanto mais dados ou imagens um addon gerencia, mais memória ele usa. Para gerenciar esta memória, a linguagem Lua inclui (como toda linguagem moderna) o recurso de Garbage Collection. Além disso, estamos falando de código reentrante, que é uma coisa velha como a serra (existe desde os anos 80).

O maior motivo que se tem para que vários addons sejam portados ou clonados usando a Ace2 é simplesmente pelo uso de memória. Um exemplo:

Usando addons independentes:

Addon 1 – 100 kb
Addon 2 – 100 kb
Addon 3 – 100 kb

Suponhamos (hipoteticamente) que estes 3 addons tenham cerca de 20% de código parecido, ou seja: todos precisam manipular texto, todos precisam mostrar mensagens na tela e todos precisam criar uma janela colorida em alguma parte da tela. Mesmo assim, eles estão implementando estas funções de forma diferente, cada um usando seu próprio código, e mesmo que eles copiem o código entre si, os addons são compartimentos diferentes. Assim sendo, o total seria de 300 kb de uso de memória.

Usando uma biblioteca:

Biblioteca 1 – 20 kb
Addon 1 – 80 kb
Addon 2 – 80 kb
Addon 3 – 80 kb

O que acontece? Os 20% de código ‘parecido’ foi movido para uma biblioteca compartilhada pelos 3 addons. As funções de texto, mensagens na tela e janelas são comuns e por isso precisam ser criadas apenas 1 vez. A utilização total da memória é de 260 kb.

Então, por isso as pessoas pedem tanto para que (se possível) todos os addons usem a Ace2: eles podem chegar a economizar 40% de memória. Toda a minha interface acima gasta 24MB, contra quase 40MB que ela utilizava antes, usando addons similares, não-Ace2.

Então, se você estiver interessado em testar, dê uma passada na página do Ace2, nos fórums, leia sobre os addons disponíveis e você vai ver que até os grandes famosos como o CT_Raid tem contrapartes mais leves e tão boas quanto usando o Ace2.

Se você não é nerd, hacker, ou curioso, o post acabou aqui.

Mas…

Se você é…

Como a Ace2 usa o Garbage Collector do WoW de forma inteligente.

Pois é. Isso aqui:

Biblioteca 1 – 20 kb
Addon 1 – 80 kb
Addon 2 – 80 kb
Addon 3 – 80 kb

É a situação ideal que acontece DEPOIS da primeira passagem do Garbage Collector do WoW. A Ace2, para evitar problemas, inclui SUAS bibliotecas (porque Ace2 é na verdade um conjunto de mini-bibliotecas) em todos os addons que usam ela. Na verdade, quando você inicia o jogo, é mais isso aqui que acontece:

Biblioteca X do Addon 1 – 20 kb
Addon 1 – 80 kb
Biblioteca X do Addon 2 – 20 kb
Addon 2 – 80 kb
Biblioteca X do Addon 3 – 20 kb
Addon 3 – 80 kb

Para um total de 300kb, como no caso anterior. WTF!!! Como eu disse, para cada addon, a biblioteca foi incluida para evitar dores de cabeça. Só que eles são muito expertos. Como as bibliotecas tem as mesmas assinaturas, o Garbage Collector sabe que na verdade isso tudo é cópia de uma mesma biblioteca. Na primeira passagem ele passa o rodo na memória duplicada e deixa apenas uma versão ativa, chegando no cenário ideal. Isso acontece de forma transparente para o jogador, de tempos em tempos, mas é uma informação interessante de saber… Principalmente porque existem alguns addons, como o Warmup que medem a “velocidade” da carga de addons, e eles podem ser enganados por esta característica da Ace2. Ele acha que esta memória toda que está sendo usada vai ser desperdiçada, enquanto na verdade ela vai ser aproveitada na primeira passagem do Garbage Collector.

Então, se você nerdou até aqui, o post acabou e você já descobriu algo novo, eu espero. :)

intel

5 Comments »

Twilight Zone!

Posted: dezembro 13th, 2006 | Author: coredump | Filed under: Cybermundo, General | Tags: ,

Final de dia de trabalho. Aparece no google talk um convite desconhecido de “pessoa quer adicionar”. Com essa coisa de Orkut junto com Gtalk, sempre tem alguém novo… Mal imaginava eu o bizarro que estava pra acontecer:

me: Quem é voce mesmo?
renata0007: renata
e vc?
me: Essa parte eu ja tinha visto.
Eu provavelmente tenho você no Orkut e por isso seu gtalk me adicionou.
renata0007: é?
me: hmmm… José Júnior, coredump?
renata0007: e eu tenho?
me: Sei la.. deve ter…
vc me adicionou no google talk como?
renata0007: nossa
ñ era vc
desculpa
me: …
renata0007: oiiiiiiiiiiiiiii
kd vc?
me: aqui
como assim não era eu.
renata0007: pq eu tenho um amigo
renata0007: que tbm se chama assim
me: vc não é de brasília
?
renata0007: ñ
sou de sao paulo
me: jesus.
renata0007: e essa pessoa tbm
me: ah ok.
prazer então
tomara que voce ache o jose junior correto :)
renata0007: mas ñ tem problema em sermos amigos tbm
ou tem?
mas já encontrei
…hehehehe
me: Eu nem te conheço :)
renata0007: `)
me: quantos anos voce tem?
renata0007: nem queira saber
sou muito nova
tenho 17
tenho um filho
e vc?
me: 28, casado e também tenho um filho.
Quantos anos tem o seu?
renata0007: HUM
ELE TEM 1 ANO E OITO MESES
E O SEU?
me: a mesma idade…
credo
renata0007: NOSSA
me: que bizarro
renata0007: QUE ORROR
VC ESTA ME COPIANDO?
me: Eu sou mais velho
e o meu nasceu em março
renata0007: SEU BB É DE MARÇO
?
P MEU TBM
me: AHHHHHHH vá se f….
qual dia?
renata0007: MAS O MEU TBEM É
Ñ ESTOU BRINCANDO
ELE FAZ DIA 7
E O SEU
?
me: bom, ele é uns dias mais velho que o meu pelo menos.
renata0007: PELO MENOS ISSO NÉ
me: bizarro bizarro
renata0007: PARA VC VER
EU POSSO TE ADD NO ORKUT?
OU Ñ?
me: voce pode tentar. mas depois desse lance meio bizarro eu vou pensar no assunto.
Na verdade, eu vou ter de sair agora e vou remover o seu nome do google talk.
Foi muito “além da imaginação”.
renata0007: NOSSA
me: Saúde pra seu filho.
Boa sorte.
renata0007: VC Ñ GOSTOU DE TC COMIGO
?
me: Intel.
You have blocked renata0007. You can no longer see each other online or chat together.

renata0007 is offline and can’t receive messages right now.

Então… A musiquinha de Twilight Zone ainda tá no meu ouvido….

Bizarro.
Estranho.

intel.

Technorati Tags: , ,

5 Comments »

5 Anos de Blog, kinda…

Posted: dezembro 4th, 2006 | Author: coredump | Filed under: Pessoal | Tags: ,

E então. No final de novembro/início de dezembro de 2001 eu comecei com o single user mode, o meu primeiro blog. Teoricamente era um blog pessoal, algumas vezes profissional. Em 2005 resolvi dividir os dois, criando o the brain is a machine, mas acabou que fiquei postando só neste aqui, então posso dizer que o single user foi encerrado para dar lugar ao the brain.

Até porque, single user, não faz mais sentido. É sempre bizarro ler posts antigos. Os posts de 5 anos atrás mostram uma pessoa completamente diferente do que sou hoje. Hoje eu não sou mais single, nem solitário como era 4, 5 anos atrás. Tenho uma esposa linda, um filho que me arranca da cama cedo no domingo gritando PAPAAAAAAI (e por isso é impossível ficar de mal humor, mesmo sendo praticamente madrugada). Há 5 anos atrás eu era um usuário de Linux radical, hoje eu sou menos radical e mais preocupado com questões de privacidade, segurança, identidade…

Claro que ainda tem muito chão pra andar, faculdade pra terminar, novos desafios profissionais, a própria criação do Pedro que por si só é uma tarefa que vai levar uma vida inteira… Nem tudo é perfeito. Nem todo mundo vai com a minha cara, eu
ainda devo coisas a pessoas (e eu não estou falando (só?) de dinheiro), mas eu não esqueci disso e vou arrumando aos poucos. Aqui e ali temos os solavancos, mas tudo se acerta com calma, muita calma. Os planos agora são feitos não mais para duas semanas como a 5 anos atrás, mas para anos a frente…

Mas, afinal, eu sou um cara sastifeito. Conversando com a Li ontem descobri que eu nunca fui de pensar no meu “Sonho”, aquele tipo “Eu tenho um sonho a realizar na vida”. Claro, todo mundo tem objetivos, mas nunca tive alguma coisa que fosse um driving goal tão forte quanto os objetivos que tenho atualmente (família, filho, trabalho). Mas eu posso dizer que há vários anos atrás eu tinha dito que ia me casar com a Li, e hoje eu estou realmente casado com ela. yay. Não tenho isso escrito em lugar algum, mas eu tenho certeza que algum amigo antigo (dos idos de 97) ou leitor aqui do blog (ou ela mesma) pode confirmar o fato: em 1997 eu já tinha avisado pra ela que não tinha escapatória (erm… Matthias, se você estiver lendo, eu falei isso sem a menor má intenção na época… :) ). Ou seja, posso até não ter tido um sonho, mas eu consegui me casar com a mulher que eu sempre quis, e ter um filho com ela, e planejar os próximos vários anos com eles.

E não é todo mundo que consegue isso, pelo menos eu acho. Tipo, não é todo mundo que está feliz e em paz com uma parte inteira de sua vida como eu estou com meu relacionamento/vida a dois/casamento, etc… Isso dá mais tempo para me concentrar nas outras!

Há 5 anos atrás, eu escrevia um blog com o objetivo de deixar as pessoas saberem como eu estava sem precisar contar pra cada um. Hoje é mais uma forma de expor minhas opiniões para um monte de gente que eu não tenho certeza que lê :)
Assim como meus amigos raramente visitam minha casa, raramente comentam alguma coisa que lêem aqui. Eu ainda devo ser anti-social.

Nestes 5 anos eu saí do interior de Minas, morei em BH, consegui fazer um nome razoável na comunidade de software livre, mudei pra Brasília e conheci grandes pessoas, verdadeiros gênios, em todas as áreas.

De certa forma, os arquivos do blog são também minha memória. Quem me conhece sabe que eu me esqueço o que aconteceu a 10 minutos atrás, então nada melhor que escrever para lembrar. A 5 anos atrás eu não me importava em viver só até os 40, hoje em dia eu tenho certeza que pelo menos até os 21 anos do Pedro eu tenho de ir, mas adoraria ter mais um(a) filho/filha e poder ver meus netos.

Ou seja, eu acho hoje que eu sou uma pessoa muito melhor do que era há 5 anos atrás, e com certeza eu sou uma pessoa muito mais madura do que a que saiu de BH para vir pra Brasília, e eu só posso agradecer a todo mundo que nestes 5 anos fez parte de alguma forma disso. Especialmente a Li, porque só com o apoio e compreensão desse anjo que me espera em casa eu consegui começar e me manter na faculdade, fazer as melhores escolhas nos empregos… ou seja, se eu for um grande homem um dia, já sabem quem é a grande mulher ;)

Então. 5 anos é coisa pra cacete.

intel

4 Comments »

Trac Hacks Indispensáveis

Posted: dezembro 1st, 2006 | Author: coredump | Filed under: Linux e Open Source, Programação | Tags: , ,

Então, eu uso bastante o trac como gerenciador de projetos. Além disso ele é uma ótima ferramenta para integrar wiki/svn/controle de tempo, de uma forma simples e limpa.
Além disso, é feito em Python e usa uma estrutura de plugins muito legalzinha, depois de configurar um Trac/SVN perfeitamente, tenho pelo menos 3 destes plugins que eu achei indispensáveis:

WebAdmin: Este é básico. Administrar o Trac sem ter de logar na interface shell é muito mais prático, seguro e hosteável. O companheiro dele, AccountManager, também é bem legal mas eu não cheguei a usar porque nenhum dos meus sites usando Trac permite/necessita cadastro de usuários e coisas assim.

PageToPDF: O nome já diz tudo. Exporte as páginas do Wiki em PDF além do formato normal (texto). Só isso já é uma mão na roda no quesito documentação.

Acronyms: Usa uma tabela criada em uma página especial do próprio wiki para mostrar aquelas explicações sobre abreviaturas quando se passa o mouse em cima. Além disso suporta links dinâmicos, muito legalzinha.

DoxygenPlugin: Para o caso de projetos legados ou mesmo projetos atuais que usam documentação no formato Doxygen este plugin é fantástico. Ele não só disponibiliza o conteúdo HTML do Doxygen no Trac como cria um namespace wiki [doxygen:] que você pode referenciar nas páginas, linkando diretamente do Wiki para a documentação gerada do código. Pena que o suporte a Python do Doxygen é meio fraquinho :(

Mas então, dêem sempre uma olhada no Trac-hacks, tem muita coisa legal lá e algumas bem específicas que mesmo não indo para a distribuição principal podem ajudar bastante, principalmente nas ferramentas de integração com outros sistemas.

intel

Technorati Tags: , ,

1 Comment »

Funcionalidades e Prazos

Posted: dezembro 1st, 2006 | Author: coredump | Filed under: Programação | Tags: ,

Então…

Vale mais atender ao prazo ou colocar todas as funcionalidades? Acho que depende mais do foco do projeto na verdade.
Um dos meus projetos pessoais tinha a deadline para hoje, e eu consegui colocar todas as funcionalidades que eu queria nele a tempo. Só que durante os últimos 3 dias eu notei que as funcionalidades que eu tinha colocado não eram corretas, a aplicação simplesmente não iria funcionar a contento daquela forma. Fazer o que? Back to the drawing board, ao que parece.
Por enquanto, o closed alpha test que devia começar hoje vai ser arrastado para alguns dias, enquanto eu penso em como resolver uns problemas de concepção.
A verdade é que a definição de prazos para desenvolvimento de software é bem relativa. Mesmo eu tendo feito quase tudo pelo manual, incluindo casos de uso e diagramas, a concepção não foi pensada direito. Também, para uma idéia que eu tive enquanto tomava banho… :)
Agora é pensar direitinho como resolver os entraves. A versão que era para esta semana vai ganhar mais uma semana, acho.

intel

Technorati Tags:

1 Comment »