Category Archives: Developments

Internet Video Game Library: a experiência de lançar um projeto

Um dos meus projetos mais velhos finalmente está no ar e eu acho que vale a pena falar um pouco sobre a experiência.

Uma introdução

No ensino médio conheci um amigo que guardava planilhas com os jogos que ele tinha, os que ele já tinha terminado e os que tinha emprestado.
Nessa época comecei a guardar os meus em uma também, mas em 2003 planilhas eram coisas muito etéreas, quando formatar seu SO (win.. cof.. dows.. cof.. cof..) eram coisas rotineiras, era fácil perder uma por descuido. E várias vezes perdi o conteúdo delas.
Comecei a ler mais portais de jogos e acabei desenvolvendo alguns métodos, ainda que primitivos, de guardar que jogos eu tinha jogado, quais eu queria em alguns desses, principalmente o gamespot.

A internet evoluiu desde então, e com isso, alguns novos serviços apareceram. Conheci sites e tracking de outras coisas: livros, filmes, seriados, cerveja, vinho, lugares. Usei todos os sistemas de tracking de jogos que eu conheci pelo caminho: Raptr, PlayFire, Backloggery, HowLongToBeat, Alvanista, EstouJogando. Nenhum deles me deixou muito feliz, até que recentemente eu voltei a usar planilhas (dessa vez, do Google Drive) pra manter meus jogos e quando eu os terminei.

Conhecendo o Goodreads

Em 2012 conheci o Goodreads. Na época, usava o skoob pra guardar os livros que eu lia. Achei o sistema incrível, diversas edições, suporte a várias línguas, ratings unificados. Era tudo que eu queria pra um site de jogos.

A difícil criação do Internet Video Game Library

O IVGLib ficou em gestação algumas vezes. A primeira vez tentei usar o Google App Engine para fazer, mas java nunca foi minha praia e eu entrei no barco durante os meses que seguiram uma atualização major na plataforma. Na época, o projeto tinha o codinome SEMAG. E com isso ele ficou de lado.

Um tempo depois, resolvi tentar retomar o projeto, dessa vez usando algum framework de PHP. Li sobre alguns, tentei usar o FuelPHP, e mais uma vez a falta de documentação, algumas frustrações pra fazer coisas que eu achava que eram básicas acabaram me fazendo mais uma vez largar o projeto de lado.

Do meio do ano passado pra cá eu vinha tentando aprender Ruby on Rails, fazendo homeopaticamente o tutorial do ruby.railstutorial.org e a parada foi fluindo. Em janeiro, durante as minhas férias, finalmente recomecei o projeto, dessa vez em Rails.

Desenvolvimento e tecnologias

Rails é um negócio incrível, você pensa em fazer uma parada e tem uma Gem pra fazer isso. (o que também é verdade pra muitas linguagens mais novas, antes que me joguem pedras).

Assim que comecei a fazer o sistema e me animei, registrei o domínio (um monte deles, na verdade), defini um MVP e saí fazendo a parada. Passei parte das minhas férias de janeiro debruçado sobre o PC fazendo o início do sistema.

Atualmente, o sistema tá uma sopa de nomes de serviços e aplicações: Tô hospedando o código no Heroku, com a busca usando o ElasticSearch através do SearchBox, usando coisas do Amazon AWS pra armazenamento de imagens e etc.

É muito doido ficar nessa de DevOps, nunca tinha ficado nessa posição antes e tá sendo uma experiência bem curiosa.

Go Live Day, by DevOps Reactions
Go Live Day, by DevOps Reactions

Apesar disso, meu MVP tá lá. Mil e umas funcionalidades legais pra implementar nos próximos dias. Diversos jogos pra cadastrar. Enfim, muito trabalho.

Nos próximos dias vai ser tempo de esmagar bugs antes de voltar pro roadmap e implementar os próximos passos. Parece que vai ser um longo e interessante caminho :)

Amarok 2.0 e o problema dos dispositivos externos

Já tinha comentado há um tempo atrás sobre o meu toc de não ouvir músicas repetidas.

Adoro ouvir música, não gosto de ouvir música repetida. Olhando o Last.fm de pessoas normais, você vê o playcount de determinadas músicas em 60, as vezes mais. Porque são músicas favoritas. No meu caso, minhas músicas favoritas tem o playcount em torno de 7.

Eu tava sem Mp3, então isso não vinha sendo um problema, afinal, no amarok 2.0 tem uma parada chamada dynamic playlist, que deixa você dar regras pra criar uma playlist e a minha regra era “playcount=0”, o que fazia com que músicas que já tivessem tocado não repetissem.

Hoje peguei emprestado o mp3 da namorada por uns tempos, daí fui tentar fazer o que fazia no amarok antigo, e não dava. E mais, com esse negócio de dynamic playlist, corria o risco do amarok sortear uma música que eu já tivesse ouvido no mp3.

Resolvi então fazer um script pro amarok, pra copiar as músicas pro mp3 e incrementar o playcount.

O negócio não tá perfeito, mas acabei de testar e serve super bem ao seu propósito :)

Taí pra quem quiser o negócio ;)

http://code.google.com/p/amarok-copy-musics-to-devices/source/browse/trunk/copyMusicsAmarok.py

Postmortem do Brasil Game Jam

Bom, já se vai agora mais de uma semana do Brasil Game Jam, e depois de ter visto os vídeos e repassado um pouco das coisas na cabeça, resolvi fazer um postmortem falando um pouco do que eu acho que a gente errou e acertou nessas 40 horas de evento.

É engraçado falar de um evento nesse estilo, porque você nunca sabe muito o que esperar até estar lá na hora. Mesmo com toda a concorrência (afinal, tinha muita gente boa lá), rola uma certa camaradagem porque todo mundo tem um mesmo propósito no fim das contas:  fazer jogos. E a maioria quer fazer porque acha divertido.

Conhecemos muita gente nesses pouco mais de dois dias. Gente de todo o Brasil, tinha gente do Sul, gente do Centro-Oeste, gente do Nordeste. O Brasil estava bem representado por lá! :)

Sobre a competição, nós entramos com muito pouca esperança; como é comum aos Game Jams, a ferramenta que será usada é de escolha da organização do local, e nesse caso, a escolha foi Unity 3d. Bom, a verdade é que mesmo já tendo ouvido de Unity 3D várias vezes nos últimos tempos, nós nunca tínhamos mexido com ela até ouvirmos falar da competição. E aí nós nos inscrevemos e no corre-corre para o SBGames, nós continuamos sem ter mexido nela. E fomos começar a mexer nela quando voltamos do SBGames, quando faltava pouco mais de uma semana para o evento.

Pois bem, chegando no evento a gente já tinha combinado alguns horários pra que a gente pelo menos conseguisse terminar com um jogo ao fim das quarenta horas. Afinal, pior do que não ser campeões seria terminar de mãos vazias!

Nas primeiras 3 horas nós queríamos decidir o gameplay. Chegamos no evento, teve a palestra de abertura, apresentações de regras, e o sorteio da frase. Que no fim era uma frase do Paulo Coelho:  “Quem vai à busca dos montes não se detém a recolher as pedras do caminho” (E que a internet diz que é de José Martí, e não de Paulo Coelho).

Pois bem, fomos até a sala onde ficavam os  computadores, escolhemos nossos três computadores, e voltamos para o lado de fora, onde ficamos fazendo o brainstorm pelas próximas duas horas e um tantinho. Nesse momento talvez nós tenhamos errado. Nós pegamos uma idéia muito boa no meio do brainstorm para o desenvolvimento do jogo, e nos animamos tanto com ela, que mesmo sabendo que ela corria sérios riscos de ficar sem forma fomos a frente. E ao mesmo tempo, nos animamos tanto com a idéia boa para história, que deixamos certas partes do gameplay sem definição precisa.

** Erro n° 1: Era necessário que tivéssemos definido todo o gameplay nessa primeira etapa **

Pois bem, definimos a idéia, definimos como funcionaria nosso mundo, perspectiva e a interação entre os personagens. Concordamos com o fato de que, por nossa idéia ser meio “alternativa” (a idéia era levar o jogador meio que numa viagem junto com a gente) poderia ser mal interpretada pelos juízes, e portanto, tomarmos um zero no quesito de proximidade do tema. Mas seguimos mesmo assim.

A primeira noite acabou sendo pouco produtiva. Por problemas técnicos, a internet acabou as 2h. E por mais que os outros times fossem bastante solícitos, em alguns momentos tínhamos dúvidas com relação ao Unity e até mesmo com idéias que gostaríamos de mostrar aos outros que não tínhamos como mostrar/discutir devido à falta de internet. Adiantamos o máximo que nós podíamos, mas ao fim da primeira madrugada, tínhamos várias partes  desconexas, que não faziam sentido algum.

Dormimos algumas poucas horas e voltamos para implementação, nessa hora, chegou o nosso segundo erro. Pelo cansaço e também pela pouca experiência de trabalharmos juntos, começamos a bater cabeça com coisas que não eram tão relevantes assim para o produto final. Detalhes como em qual direção a animação correria, ou como funcionaria a aceleração do mundo na última parte do jogo.

** Erro n° 2: Se o  jogo ainda estava longe de ser um produto final, era pra estarmos longe de querer dar polimento **

Em algum momento nesse meio do caminho, a gente notou que aquele gameplay que a gente deveria ter definido nas primeiras horas, não tinha sido definido. Isso aconteceu no final da tarde do segundo dia. E aí a gente começou a tentar discutir um jeito de consertar, mas nessa hora, como o jogo ainda estava engasgado, a gente resolveu dar uma aguada nessa parte e torcer pra que o resto do jogo sustentasse esse caminho. Vocês vão ver que a jogabilidade ficou bem esquisita nessa parte por causa disso.

Por sorte, a gente desengasgou em algum momento. Os modelos começaram a ficar prontos, e conforme a gente foi colocando as coisas no jogo, parece que magicamente as coisas começaram a tomar as formas que tinham na nossa cabeça. Nesse momento, quando faltava pouco mais de 16h pro final do tempo, a gente viu que as próximas horas seriam de muito trabalho e quase nenhum sono.  Entramos em modo de correria, e começamos a tentar fazer tudo funcionar do jeito mais fácil possível, botamos tudo que era gambiarra que fosse necessária pra tudo plugar minimamente bem.

Mas as horas passam rápido nesses momentos e antes que a gente notasse, já faltavam umas 6 horas para o fim da competição. Foi hora de dar uma parada, comer alguma coisa, aliviar a cabeça, e voltar para mais programação.

Tudo começa a ficar meio esquisito nesse fim de competição e as horas parecem encolher na minha cabeça. Eu tava com bastante sono, tinha dormido só por volta de 2 ou 3 horas desde sexta feira, e estava tentando manter o pique pra ter um início, meio e fim até as 16h. Nesse momento o Yanko tava fazendo os sons e músicas e pensando em como a gente ia fazer a cena final, que na nossa cabeça era algo completamente diferente, mas que não ia ser feita até as 16h de jeito nenhum.

Pois bem. 40h depois, nosso jogo parecia estar funcionando. Estávamos prestes a ser expulsos da sala quando compilamos ele pela primeira vez. Acreditando que tudo funcionaria igual e saímos da sala. Mais tarde descobrimos que o jogo não rodava inteiro depois de compilado, mas vida que segue.

As coisas que eu tirei de bom foram:

– Apesar da competição, ninguém negou ajuda em nenhuma das horas. Todo mundo muito gente boa, sempre tentando dar uma mãozinha nos detalhes.
– A ferramenta era, ainda bem, fácil de acostumar a usar, não fosse por isso, nem protótipo de jogo teríamos no final das 40h.
– Ao contrário do que eu pensava, mesmo com tanta gente boa perto da gente, todo mundo teve alguns probleminhas ao longo do caminho. Stresse e falta de sono faz muito pra contribuir com isso.
– Dá pra terminar sim alguma coisa em 40h, é só saber cortar as coisas certas.

E de ruim:

– Experiência de trabalhar com a sua equipe faz falta. Muita falta.
– Internet nessas horas faz uma falta monumental.
– Sono atrapalha pra caramba, ainda mais quando você está querendo fazer coisas que você nunca fez.

Por fim, em breve a gente deve colocar o jogo final online. A gente tá só acertando umas arestas, coisas que não deixavam o jogo rodar do início ao fim. Mas essa correria de fim de período tá impedindo que isso saia rápido.

Se vocês quiserem ver os vlogs que a gente foi fazendo pelo caminho, o post que o Yanko botou na devoid tá mais completo, veja aqui.

Game Jam do BGS

Sábado começa oficialmente o Brasil Game Show, uma feira de jogos, almejando chegar nos moldes da E3 ou Tokyo Game Show, só que aqui em terras Tupiniquins.

Enquanto a feira estiver rolando, durante o fim de semana, acontecerá também o Brasil Game Jam, promovido pelo evento com apoio da Sony.

Anualmente, a IGDA promove o Global Game Jam, cuja idéia é reunir, em times de 3, pessoas num mesmo lugar para que estas tentem fazer um jogo inteiro em 40h.

O Brasil Game Jam usa a mesma idéia. Os participantes terão 40 horas contadas a partir de amanhã para desenvolver um jogo até domingo.

E eu tô nessa parada aí.

Honestamente? Tô começando a ficar ansioso. Serão outras 9 equipes concorrendo, e o tempo é curto. Mas vamos que vamos.

Torçam aí pelo time, e vejamos no que vai dar :)

C# e o problema dos Grids

Bom, eu não sou exatamente um expert em C#, mas uso no dia-a-dia no trabalho, e ultimamente uma coisa vem me incomodando bastante na sua definição.

Primeiro, vamos deixar claro, uso .net v2.0. Ou seja, não sei se o problema foi corrigido nas versões posteriores, mas pelo que vi, não o foi.

Quando criamos um DataGrid em C#, para exibirmos dados no DataGrid precisamos especificar um DataGridTableStyle, que é o define que tipo de dado será exibido naquele DataGrid, qual será o nome de cada coluna, a ordem das colunas, etc.
Pois bem, temos então algo nesse estilo:

DataGridTableStyle estilo = new DataGridTableStyle();

estilo.MappingName = typeof(List).Name;

DataGridTextBoxColumn coluna = new DataGridTextBoxColumn();
coluna.MappingName = “Campo”;
coluna.HeaderText = “Meu Campo”;
estilo.GridColumnStyles.Add(coluna);

dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(estilo);

Agora olhe bem pra esse código. Você a vê a linha que define coluna.MappingName? Pois é. Ele define uma string com o nome do campo. Sim, uma string hard-coded no seu código.
“Ah, mas qual o mal nisso?”, você pode perguntar. Como é sabido, o Visual Studio tem uma ferramenta de refactor razoavelmente eficiente. Que deixa que você modifique o nome de um campo para melhorar o seu código em poucos passos. No entanto, com o nome no campo assim numa string, isso passa a não ser mais tão útil assim, pois você tem que ir lendo todas as ocorrências da string para ver se elas são mesmas relativas ao campo que você está modificando. Se você esquecer de alguma, você terá problemas no seu programa.
Um outra caso é que em refactors algumas vezes você muda a estrutura do seu programa e aí você não pode ter certeza se o campo que você quer apagar realmente não é referenciado pois não é possível encontrá-lo sem que você busque pela string e vá vendo ponto-a-ponto.

Não é o pior problema do universo, no entanto, vai de encontro a toda facilidade de refactor estabelecida no Visual Studio.

Eu procurei e não encontrei solução para isso, e fiquei bem decepcionado. Tive que usar de truques pra encontrar essas coisas no código, como declarar uma variável temporária do mesmo tipo da Classe usada na Lista para poder usar o refactor.

Vocês conhecem uma solução melhor?

Sobre desenvolvimento de jogos

Bom, ainda sobre o projeto final, a área que eu escolhi é desenvolvimento de jogos.

Desenvolvimento de jogos é uma área que sempre me interessou e, na verdade, foi um dos grandes motivos pra entrar na faculdade. Sempre sonhei em participar do processo de criação de um jogo. Quando era pequeno, vi um programa no Discovery Kids em que o apresentador visitava o centro de testes da Nintendo of America, fiquei maravilhado e por muitos anos aquele foi o sonho da minha vida. Quando soube mais do trabalho descobri que ele não era nenhum trabalho dos sonhos, mesmo. Mas, na época, os atrativos eram enormes – você jogava videogames o dia inteiro, videogames novos, e ainda podia pegar os jogos da nintendo de graça pra levar pra casa.

(…)

Pra ler o resto, clique aqui, ou lá em cima em GameDev.

Transferir os posts do Blogger.com.br pro WordPress – Parte II

Esse post ainda é um campeão de ocorrências. E infelizmente o método que eu indiquei nele já não funciona como deveria. Portanto, hoje resolvi botar no ar um método que funcione pra ajudar os que chegam aqui procurando uma luz. Vamos lá.

Uma pequena introdução: uma coisa interessante é notar como o blogger.com.br parou no tempo. O blogger.com é gerenciado pela Google. Embora seja uma ferramenta de blogging que eu pessoalmente não gosto, ele ainda tem atualizações, possui hoje em dia feeds rss, e outras coisas que são tão úteis na comunidade blogueira dos dias de hoje.
Já o blogger.com.br está nas mãos da globo.com, não me lembro muito bem, mas acho que o blogger.com.br foi vendido pra globo.com, ou talvez alugado, vá saber, e do mesmo jeito que ele estava quando eu comecei a usá-lo em 2004, ele continua hoje em dia.
Com isso, é comum as pessoas quererem migrar pra fora dele. Ou mais, quererem tirar suas coisas do ar, porque as vezes as idéias e opiniões mudam, e as que estão online já não mais condizem com o que você pensa. Mas no blogger.com.br não há opção de fazer backup. Ainda mais de usar de ferramentas de migração. Para isso, esse tutorial.

Em primeiro lugar, vamos começar pelo princípio. Salve todas as suas páginas de arquivo do blogger. Elas serão todas modificadas, e no caso de dar algum problema no meio da migração, você terá os arquivos em algum lugar pra pegar os arquivos.
Um problema desse método é que em teoria ele só funciona para blogs com até 999 posts. Digo em teoria porque claro que você pode ir olhando de mês em mês e importando os meses manualmente, mas se o seu blog tem mais de 999 posts, provavelmente isso será bem entediante. Mas dá pra ser feito.

Bom, se você já fez os backups necessários (ou ignorou essa etapa), então tá na hora de ajeitar a página principal. Vá nas configurações do seu blog no blogger e mude as seguintes opções:

– Mostrar os últimos XXX Posts: coloque para 999
– Formato do Cabeçalho de Data (ATEN????O: Esta opção parece estar ao contrário, o nome correto dela seria formato de data. No caso do nome ser ajeitado, basta buscar nas duas opções, pois somente uma delas apresenta esse formato): 2/26/2009 09:21:07 PM (ou seja, mês/dia/ano hora:minuto:segundo AM/PM)

Agora, vá até o seu template, e cole o seguinte código lá (Lembre-se de guardar seu template, se for de seu interesse!!):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
>
<channel>
<description>Personal blog</description>
<link>(Endereço do blog)</link>
<title>(Título do Blog)</title>
<Blogger>
<item>
<title><$BlogItemDateTime$></title>
<description><![CDATA[<$BlogItemBody$>]]></description>
<content:encoded><![CDATA[<$BlogItemBody$>]]></content:encoded>
<author><$BlogItemAuthorEmail$> (<$BlogItemAuthorNickname$>)</author>
<guid>(Endereço do blog)/<$BlogItemArchiveFileName$>#<$BlogItemNumber$></guid>
<link>(Endereço do blog)/<$BlogItemArchiveFileName$></link>
<pubDate><$BlogItemDateTime$></pubDate>
</item>
</Blogger>
</channel>
</rss>

Mudar os lugares onde está escrito (Título do blog) e (Nome do blog) não é necessário. Mas para um rss bem formatado, esses campos são necessários. Agora salve o seu template, vá até o painel de posts e clique em publicar. Se tudo tiver corrido bem, você deverá ter quase o rss pronto para ir para o seu wordpress.
Temos dois problemas, porém. A data que o blogger fornece pra nós está quebrada. E ele não lê o feed RSS corretamente.

Bom, para consertar isso, eu fiz um pequeno script em perl que vai pegar o feed que você acabou de gerar do seu blog, corrigir esses dois problemas, e em seguida irá lhe enviar o arquivo pra que você possa utilizar no wordpress. Então, siga este link e faça os passos necessários. Esse procedimento foi testado com sucesso no wordpress 2.7.1. Então, se o seu wordpress está numa versão inferior, atualize antes de começar!

A saída do script será baixada para o seu computador, de modo que você agora poderá ir no seu wordpress e na opção de manage clicar em import -> rss.
OBS: na versão 2.7 o import foi para o menu tools.

Bom, espero que isso ajude mais gente por aí afora. Afinal, ainda tem muita gente que vem visitar esse blog com esse intuito.

Bônus: Se você caiu no caso chato de ter um blog com mais de 999 posts, não se desespere. O que você deve fazer é ir nas configurações do seu blog no blogger e clicar em republicar todos os posts. Isso fará com que o seu arquivo seja atualizado para o formato do rss. Com isso, ao invés de você usar a sua página principal como endereço no script, você deverá usar o endereço dos arquivos, um-a-um, até que você tenha importado todo o seu blog. O trabalho não é divertido, mas a menos que você tenha escolhido arquivar semanalmente, não deve demorar muito. Boa sorte!
Ah, não se preocupe com posts repetidos. Eles não são importados automaticamente pelo WordPress.

Transferir arquivos do Blogger.com.br pro WordPress

UPDATE: Como esse tutorial já não funcionava direito, fiz um novo, testado e todo por mim que funciona com certeza. Veja aqui!

Bom, vieram me pedir ajuda de como fazer a transferência do blogger.com.br, pois os tutoriais explicando parecem ser poucos.

Infelizmente não posso disponibilizar o que eu usei pra fazer a minha conversão pois foi um mini-programa feito por mim que eu já não tenho mais em meu pc, mas caso haja procura eu posso tentar fazer algum.

Bom, o que vou usar para explicar é o RSSify do Interney.net.

O único jeito fácil de transferir os arquivos do Blogger.com.br para o WordPress é com um RSS de todo o conteúdo do blog. Embora o RSSify do Interney faça isso de um jeito mais simples do que o desejado (os seus posts vão ficar sem título e provavelmente vão assumir a data de hoje), ele é o único RSSify que eu conheço para o blogger, então vamos lá.

Primeiro, tenha em mente: Esse procedimento N??O é garantido. Pode não funcionar do modo desejado, e os primeiros passos visam evitar que isso aconteça, então vamos lá!

1) Confira se o seu template não possui tags <span>. Esse passo é importante pois com tags <span> no seu template o RSSify do interney não funcionará como desejado.
2) Agora, edite as configurações do blogger.com.br e mude a seguinte opção “Mostrar os últimos 999 posts na página principal”. Deixe-a desse jeito.
3) **IMPORTANTE** Nesse passo, você irá republicar todo o seu blog MAS tenha em mente que ao republicar todo o seu blog, todos os templates que estão em seus arquivos antigos mudarão para o seu template atual. Caso você não queira perder os templates antigos, salve os arquivos antigos um a um, para que eles não se percam.
4) Com o blog já republicado, na página principal agora devem estar aparecendo todos os posts de seu blog. Com isso, cheque mais uma vez se há em algum lugar do código alguma tag <span>, caso haja, retire-a de lá.

Com isso, seu blog deve estar pronto para a usar a ferramenta de RSSify do interney.net, então vá em http://www.interney.net/rssify.php e siga as instruções. Recomendo que depois de inserir a tag que está descrita lá, republique todo o conteúdo mais uma vez.

Se tudo correu bem, agora você deve ter um rss funcional do seu blogger.com.br, que deverá poder ser importado para o WordPress sem problemas.

Como disse, não será um RSS perfeito, mas será o jeito mais fácil de importar no WordPress. Caso você ache outras ferramentas de RSSify, esses passos provavelmente serão úteis para elas também. Me dê um feedback e eu editarei as informações aqui :)

Boa sorte e caso consiga, deixe um post aqui dizendo o endereço do seu novo blog e do antigo para que eu possa ver :)

UPDATE: Como esse tutorial já não funcionava direito, fiz um novo, testado e todo por mim que funciona com certeza. Veja aqui!

Um ensaio sobre as pessoas e a probabilidade

Não sou um especialista em estatística. Longe disso. Mas tenho certeza de que nada é 100% randômico. Mas pra algumas aplicações humanas, isso é realmente bom.

Existem os dois lados. Quer ver um exemplo?

Tenho certeza que você quer que o seu sorteio da Mega Sena seja o mais aleatório possível. Você quer que as chances de cair 1-2-3-4-5-6 sejam exatamente as mesmas de cair 1-33-42-47-52-58. E digo mais, se aquele jogador assíduo suspeitar de que não é assim, ele será o primeiro a pular e reclamar.

Mas isso traz um problema, e aí entra o outro lado. Seres humanos possuem memória. “Grande Descoberta!”, você pode dizer, mas isso introduz um real problema em alguma coisa ser completamente randômica. Porque coisas completamente randômicas podem se repetir várias vezes.

1 2 3 3 3 1 9 2 3 3 3 4 7 89 99 1 23 4 57 64 54 32 44 12 32 99 53 29 1 29 34 87 23

Então. Você acha que isso ali em cima é randômico ou que está viciado? ?? uma sequência randômica, mas por causa da nossa memória, parece pra nós que ela está viciada, por causa da ocorrência de números “3”. A verdade é que uma sequência randômica não precisa não ter números repetidos. Mas sim que quando você olhar a longo prazo, a ocorrência dos números seja basicamente a mesma. (Mas isso é quando você sortear 4 milhões de números e não sorteando 20)

O segundo problema é que humanos se incomodam com repetição quando acham que as coisas não deveriam repetir. Quer ver algo que provavelmente já aconteceu com você? Verdade ou Consequência. Você tá lá, reunido numa roda de amigos jogando Verdade ou Consequência do modo clássico, usando uma garrafa. Mas aí já caiu 10 vezes ao longo da brincadeira fulano pra siclano. Fulano já não sabe mais o que perguntar pra siclano. Beltrano tá de saco cheio porque não consegue perguntar/responder. E aí todo mundo decide brincar de alguma outra coisa.

Há um tempo eu tentei fazer um programinha pra fazer o sorteio das pessoas. E fazer uma pequena experiência, também.
No princípio, o programa só pegava duas diferentes de uma lista, completamente randômico. O resultado foi que as pessoas se incomodavam muito com o fato de algumas pessoas repetirem com frequência, assim como acontecia no modo clássico, como era o esperado.
Depois, numa versão posterior, eu evitava de acontecer só o caso em que uma pessoa respondia ou perguntava logo depois de ter respondido ou perguntava. Mas ainda assim, a frequência de repetição ainda era alta, e as pessoas se incomodavam muito rápido com isso.
A última versão diminuíu muito a insatisfação das pessoas, o que foi feito é que todas as pessoas perguntavam ao menos uma vez antes de alguém repetir. Muito tempo se passou antes que a repetição começasse a ser realmente incômoda.

Esse monte de falação é só pra dizer que completamente randômico não existe, e mesmo que existisse, as pessoas se incomodariam com ele em várias situações do dia-a-dia por causa a falsa sensação de repetição que algo realmente randômico passa.

Sobre a parte do não existir completamente randômico. Pelo menos não em computadores. Aquilo que fingi ser aleatório no seu computador é uma equação matemática. E como tal, você talvez se lembre de nunca ter visto uma função matemática que gere um número diferente sempre. ?? porque ela não existe. :)

Pense num dado de 6 faces. Pense em um jogo como War, o número de vezes que o dado se repete pra você numa noite, e o quanto incomoda quando você dá aquela lufada de azar e tira 1 durante três rodadas seguidas. :)