Archive for the 'Programação' Category

Eles liberaram meu acesso, viva.

Basicamente, será adicionado uma nova opção no menu: “Aplicativos”. Clicando nela, aparecerão os aplicativos instalados, um campo para adicionar novos por URL e um botão para navegar por um diretório de aplicativos (já existem alguns prontos). Clicando no nome do aplicativo, eles são abertos.

No profiles, os aplicativos também aparecerão, logo abaixo do perfil, que agora não aparecerá por completo.

O “Funny Cat Photos” é um aplicativo que estava disponível no diretório. O “Kyon Quotes” eu que fiz, para testar XD

Para desenvolver os aplicativos, é só consultar a API - embora ela ainda não esteja oficialmente lançada, já existe um preview de como ela será. Perceba que existem dois tipos de API: em Javascript e outra usando REST, caso você deseje rodar o aplicativo no seu próprio servidor.

Alguns tutoriais estão no ar. Para aplicativos em Javascript, o procedimento é o mesmo ao de se criar um Google Gadget. Você pode usar o Google Gadget Editor para criar os aplicativos, mas devo dizer que ele é um saco de se usar - a vantagem é que o Google hospeda o aplicativo para você.

Sobre a API em si: ela é dividida em três partes. Na “People and Friends” você pode obter as informações dos profiles de uma pessoa e de seus amigos; na “Activities” ela permite publicar “ações” que uma certa pessoa realizou - por exemplo, o recente “atualizações de seus amigos” do Orkut; e o “Persistence” permite guardar dados relacionados a uma pessoa - por exemplo, se você estiver desenvolvendo um jogo, pode guardar a pontuação do jogador.

Mas posso dizer que eu segui alguns tutoriais e algumas coisas não funcionam - eu não consegui obter a lista de amigos; ela retorna vazia. Mas eu não cheguei a testar muito. Vamos ver como o serviço progride. Outra coisa muito irritante é que ele usa algum sistema de cache - se você altera o aplicativo, você não terá a versão atualizada no Orkut. Para contornar isso tiver que ficar mudando o nome do arquivo.

EDIT: por segurança só aparecem na lista de amigos outros desenvolvedores do OpenSocial; e para transpassar o cache é só colocar &bpc=1 no final da url

O aplicativo de teste que eu fiz é bem simples, e não chega a usar nada da API em si - ele apenas mostra imagem do Kyon e um quote aleatório dele. Você pode adicioná-lo (ou fuçar nele) usando esse URL.

§ Finalmente traduziram o primeiro capítulo de Jyuki Ningen Jumbor! É legalzinho, vamos ver se eles continuam a fazer os scanlations.

MAS… pelo o que acabei de ver no Baka-Updates, ele foi cancelado… T___T

§ Death Note Ep 19: Matsuda é o verdadeiro herói da história.

§ Tsubasa Reservoir Chronicle Cap 145 (scan, tradução): Splash page rox. Um pouco de explicações. Revelação bombástica.

§ xxxHOLiC Cap 130 (scan, tradução): Coisas começam a se deteriorar. Kohane cute. WatanukixDoumeki cada dia mais canon.

§ Então quando eu comecei a usar o Windows XP uma das primeiras coisas que fiz foi tirar o tema Luna e voltar para o clássico. Então me toquei que estou usando a mesma coisa há mais de 7 anos e resolvi botar algum tema decente. O ruim é que para instalar temas não oficiais no Windows XP tem que instalar uns programas meio suspeitos e não fiquei muito disposto, mas descobri um tema oficial da Microsoft feito para o lançamento do Zune que é muito tri. Sim, fim. EDIT: screenshot:

Screenshot do tema Zune

§ Estou cansado do meu ADSL e queria mudar pro Virtua, só que precisa assinar a TV a cabo junto. GVT é muito cara e tem que trocar a linha de telefone. E não sobra mais nada. É impressionante a qualidade patética dos provedores de internet no Brasil.

§ Então numa das competições do TopCoder ganhei 23 dólares. Viva. Só que para receber eu preciso mandar para eles uma declaração (affidavit) com reconhecimento de firma em cartório. Só que a declaração é em inglês, portanto preciso pagar um tradutor juramentado para traduzi-lo, por R$ 47 cada 1250 letras totalizando R$ 235. Mais o reconhecimento de firma, que é uns R$ 10. Sendo que o prêmio foi de US$ 23 e terei que deixar 30% de imposto para os EUA, ficarei com R$ 48. Concluindo, terei um prejuízo de R$ 197. Uhu!

…a única chance é descobrir se alguém na universidade pode assinar a declaração.

§ Meu plano de ir na última hora torcendo para a seção estar completa não funcionou. Pelo menos fui promovido, antes tinha sido secretário (aka otário que fica na porta) e agora vou ser segundo mesário (aka otário que fica procurando o nome dos eleitores no caderno e manda assinarem no lugar certo) e portanto vou pegar 10 vezes mais (10 x 0 = 0).

Malditos.

§ Então o TBS parece ter morrido mas eu ainda não desisti dele (risadas ao fundo). Não gostei do código que escrevi até agora e provavelmente vou reescrever (mais risadas). Eu sabia que o certo para jogos online é usar UDP mas eu queria usar TCP mesmo assim. Porém agora depois das aulas de redes vi que realmente tenho que usar UDP. Achei uma biblioteca que faz tudo o que eu precisava (UDP confiável), a pyraknet, binding da raknet.

É, eu sei.

§ Li Fortaleza Digital, do Dan Brown. É bonzinho, o único problema são a quantidade de erros que existem no livro (por exemplo, considerar 64 bits como sendo 64 caracteres; criptógrafos usando senha de 5 dígitos ou deixando o terminal destravado ao sair). Se ele tivesse pesquisado melhor, talvez fosse até melhor que O Código (IMHO), já que ele fala de assuntos “da minha área” e a história em si é bem interessante.

A versão em inglês tinha uma seqüência de dígitos no final que escondiam uma mensagem secreta, aqui não teve… será que não conseguiram adaptar pro português ou nem descobriram do que se tratava?

Estava eu aqui mexendo no Quivi quando fui recompilar o stdafx.cpp e deu erro. No winuser.h.

Esse é um header do Windows que é incluído pelo windows.h. A única coisa que podia dar erro nele seria algum outro header incluído antes dele ter definido algum símbolo que conflitasse ou algo do tipo. Mas o windows.h era o primeiro a ser incluído.

Abri o arquivo onde tava dando erro e tinha um SINUSERAPI. Era pra ser WINUSERAPI.

Só que o arquivo é read-only porque rodo como usuário normal.

E a última modificação tinha sido em 2005.

E quando tava digitando isso eu tava escutando mp3s de um CD do GreenDay e começa a tocar uma música de Guardian Heroes.

SOCORRO, MEU HD ESTÁ DERRETENDO NESTE EXATO MOMENTO!!!!!!!!!

EDIT 30 segundos depois:

OK, quando fui organizar meus arquivos, sem querer eu botei a música de Guardian Heroes na pasta do Green Day. *facepalm*

Mas e o SINUSERAPI?

EDIT: mistério resolvido.

§ Death Note até cap 108 (Completo), finalmente. Muito bom, com certeza um dos melhores mangás que eu li… Como eu disse antes, eu tinha desanimado com a “segunda parte” da história, mas vendo agora, ela foi necessária pra chegar no final (embora muita gente preferiu que tivesse acabado no final da primeira parte), fora que mais pra frente ela fica mais interessante.

Então, adeus pro Light. Poxa, só eu que tava torcendo para ele? =x Ele era um gênio, mas o excesso de confiança finalmente o derrotou…

Agora é esperar o anime e o filme…

§ Obrigado a todos pelo enorme retorno em relação ao Quivi. Alguém usou? Se usou e não pretende usar mais, porquê? O que falta? O que precisa ter? Hunf.

§ A Conrad vai publicar Nausicaä! Eu baixei ele em inglês faz tempo mas sempre me enrolei pra ler, o que pode ser considerado crime em certas jurisdições. Preço salgado, 30 reais, mas não tenho como não comprar.

O Miyazaki demorou 13 anos para completar Nausicaä. Vale lembrar que a história é meio diferente do movie, primeiro porque ela se estende mais, segundo que o “final feliz” (do qual o Miyazaki se arrependeu) do movie não existe no mangá.

§ Por falar em Miyazaki, tava fuçando no Galbadia Hotel e achei os álbuns do Joe Hisaishi. Recomendado para quem gosta de piano. Baixe pelo menos a The Wind Forest (clique em “click here” (doh)), que é a versão piano solo da Kaze no Toorimichi, de Totoro.

§ Finalmente, aqui está a primeira versão do Quivi (pros perdidos, é um visualizador de imagens que eu tou fazendo mais para ler mangá). Por favor baixem e digam o que não gostam e o que está faltando. Tem a documentação, mas só em inglês ainda. Sim, Sourceforge, sou chique.

Os atalhos do teclado são basicamente: Page Up, Page Down e setas funcionam como era de se esperar, Home e End vão para a imagem anterior ou próxima, caso seja uma pasta ou zip, aperte Insert para entrar nela. Delete vai para a pasta superior. Ctrl+Page Up e Down vão para a pasta/zip “irmã”. Tab faz a lista de arquivos (des)aparecer.

EDIT: Sabia que ia fazer alguma besteira, esqueci de botar uma DLL. Já arrumei.

Então já fiz o básico do Quivi e queria lançar a primeira versão dele. Fui compilar em modo Release, rodei, e… Esse programa encontrou um problema e será fechado.

A princípio, se um programa funciona em Debug, funciona em Release.

A estratégia mais óbvia para descobrir o que estava ocorrendo era ir mudando as configurações do Release em direção ao Debug, até o erro sumir. A primeira mudança foi ativar o debug no código para poder, bem, debuggar. No velho e bom step into e step over, me deparei com a linha culpada com a clássica reação “mas eu sou mesmo um idiota”.

assert(getItemType2(itemNumber) == TYPE_IMAGE);

Só de olhar o nome da função dá para perceber que um WTF está para vir. Tudo bem, fazer uma “versão 2″ de uma função é uma coisa ridiculamente imbecil mas foi aqueles momentos de “ah, eu sei que tá tosco, depois eu refatoro”.

A função em si faz duas coisas: descobre o tipo do item em uma pasta, dado o seu índice, e ajusta o índice (o parâmetro é passado por referência) de modo que ele aponte a uma posição válida num certo vetor (que não vem ao caso).

Umas das regras básicas da programação: uma função só deve fazer uma e somente uma coisa.

Os mais entendidos já podem ter descoberto o que aconteceu: no modo Release, todos os assert’s (que é uma macro) não produzem código. São removidos. A função não era chamada, o que não daria problema se ela só checasse o tipo do item, mas ela também muda o valor do índice… Sem mudar, o índice acabava apontando para fora do vetor. Yay for buffer overflows!

(Claro que a culpa não é do C++. Mas o C++ pode ser muito cruel com novatos e gente desleixada.)

(Por outro lado, esse é mais um motivo pelo qual macros fazem mal à saúde.)