~~ CdH ~~

tertium datur

terça-feira, 13 de dezembro de 2011

Gerador de cartão

Gerador simples de cartões, geralmente de crédito, que utilizam o algoritmo Luhn. O código fonte também está no post para quem quer estudar.

Sites de fonte de conhecimento:
http://www.merriampark.com/anatomycc.htm
http://bin-iin.com/MasterCard-BIN-List.html
http://www.compago.it/ajax/ID-13742.HeadA.Hack_25.html

Modo de usar: Insira os primeiros 6 dígitos oficiais de um cartão (caso sejam 4, insira outros 2 aleatórios) e o tamanho do código que será gerado (geralmente 16).

--

Digitos:
Tamanho:
Cartão gerado:

Código fonte (javascript):
Spoiler:
function creditgen(numero, tamanho)
{
    if (isNaN(numero) || numero.length != 6)
        return -1;
    else if (tamanho <= 6)
        return -2;
   
    var soma = 0;
    var card = "";
   
    // Faz a soma dos 6 primeiros dígitos.
    {
        soma += Number(numero.charAt(0) * 2 >= 10 ? numero.charAt(0) * 2 - 9 : numero.charAt(0) * 2);

        soma += Number(numero.charAt(2) * 2 >= 10 ? numero.charAt(2) * 2 - 9 : numero.charAt(2) * 2);
       
        soma += Number(numero.charAt(4) * 2 >= 10 ? numero.charAt(4) * 2 - 9 : numero.charAt(4) * 2);
       
        soma += Number(numero.charAt(1)) + Number(numero.charAt(3)) + Number(numero.charAt(5));
       
        card = numero;
    }

    var i = 6;
   
    // Gera valores aleatórios até n-1.
    {   
        if ((Number(tamanho)-1) > i)
            while (i < (Number(tamanho)-1))
            {
                card += Math.floor((Math.random()*100)%10);
               
                if (i%2)
                    soma += Number(card.charAt(i));
                else
                    soma += Number(card.charAt(i) * 2 >= 10 ? card.charAt(i) * 2 - 9 : card.charAt(i) * 2);
                   
                i++;
            }
    }
   
    // Cálculo do "check digit".
    {
        var check = soma;
       
        while (check%10 != 0)
            check++;
       
        check -= soma;
       
        card += check;
    }
   
    return card;
}

function gerar(numero, tamanho)
{
    var creditogerado;
   
    if ((creditogerado = creditgen(numero, tamanho)) == -1)
        alert("Deve ser número de 6 dígitos.");
    else if(creditogerado == -2)
        alert("Tamanho tem que ser maior do que 6.");
    else
        return creditogerado;
}
--

*Obs: Esse post não tem como objetivo incentivar a fraude de uso de cartões online, somente ensina o funcionamento do algoritmo Luhn.

sábado, 10 de dezembro de 2011

Lista Emulação e Camada de Compatibilidade

Gosto de me lembrar dos jogos antigos, além disso rodar Windows no Linux é uma boa.

Emulador: Software que simula toda a arquitetura de instruções um processador.
Camada de Compatibilidade: Um software nativo que entenda as funções de determinado sistema e consiga executá-las.

## Windows ##
Wine - Gratuito, funciona em Linux, BSD e Mac. Aposto que uma grande parte dos usuários de Linux já usaram. Lembrando que não é um emulador, é uma camada de compatibilidade, logo não gasta processamento e memória emulando um processador inteiro, mas acaba por ter seus problemas, como a falta de algumas funções do Windows original.

Outros programas para a mesma finalidade, na grande maioria, são baseados no Wine, que atualmente é o melhor de todos. Existem alguns sistemas operacionais baseados nele, como é o caso do ReactOS (versão alpha).

Os outros programas que foram criados para a mesma finalidade começaram a serem distribuídos na versão 1.1 e 1.2 do Wine, quando alguns componentes essenciais, principalmente para jogos, ainda não tinham compatibilidade. Atualmente a versão 1.3 já roda a maioria dos componentes, dentre eles o DirectX (10 e anteriores), o .NET (4.0 e anteriores) e as bibliotecas de redistribuição (VC, VB, etc.).

Perguntas?

## Linux ##
Usuário de BSD?

Alguns sistemas BSD já possuem camadas de compatibilidade para Linux, basta apenas ler os manuais e ativá-los.

Ex: http://www.freebsd.org/doc/handbook/linuxemu-lbc-install.html

Usuário de Windows, Mac, ...?

Não existem camadas de compatibilidade nativas para esses sistemas.

## Emuladores para arquitetura x86 e x86_64 ##
Com esses programas você poderá instalar seu Windows ou qualquer outro SO suportado em seu Mac, Linux ou qualquer SO que o software de emulação suporte.

Lembrando que isso é um emulador, ou seja, ele não vai emular somente a arquitetura de comandos/api's de seu sistema operacional, o que será emulado é toda a arquitetura de instruções do processador, ou seja, ele vai emular a BIOS, Boot, Kernel e também o resto de seu SO, então é comum o uso exagerado de processamento e memória.

VirtualBox - Gratuito, funciona em quase todos os sistemas operacionais e é fácil de usar.
VMWare - É um excelente software, embora seja comercial.
DosBox - Gratutito, roda qualquer jogo da arquitetura 8086 de 16 bits.
QEMU - Gratuito e Open Source, como o VirtualBox e o DosBox. Muito bom para fazer emulação no Boot do SO para que, quando a máquina for desligada, tudo volte para o passado.

OBS: Você deve ter o arquivo de instalação de seu sistema operacional, seja em um CD, USB, arquivo, entre outros.

## Game Boy COLOR/ADVANCE ##

VisualBoy Advance Merge - Esse é um projeto de ressurreição dos 3 consoles de jogos portáteis da Nintendo.
GBCoid - Gratuito, um bom emulador para Android.

Existem diversos outros emuladores para esse console, eu diria que esse sistema e o Nintendo 8 bits foram os que mais tiveram emuladores.

## NES ##

FCE Ultra - Preciso falar algo mais? Tem até Ultra no nome.

Existem dezenas de outros emuladores desse sistemas, mas o FCE Ultra é o mais atualizado para os sistemas operacionais atuais.


## Super Nintendo ##

ZSNES - Gratuito, diria que é o mais famoso. É um emulador excelente.
SNES9X - Gratuito, meu preferido atualmente. É Open Source e foi escrito originalmente para PC, mas possuí ports para Wii, Android, PS3 (homebrew) e outros.
BSNES - Gratuito e Open Source. Esse emulador é o mais polêmico atualmente, seu criador quer fazer o emulador de SNES perfeito. É necessário um uso gigantesco de processamento para que o computador consiga calcular e executar com perfeição a velocidade e os gráficos de um sistema que diria ser bem simples comparado com video games atuais. Sem nenhuma modificação nas ROM's, seria necessário um processamento de 3 GHz para realizar seu objetivo.

## Arcade ##

MAME - Excelente emulador, diria que é o melhor para a maioria dos jogos de Arcade. Mas por que é tão bom? Simples, roda quase todas as arquiteturas Arcade, incluindo CPS1, CPS2 e CPS3, sendo algo necessário para qualquer fan de fliperama.
Kawaks - Ótimo emulador de CPS1 e CPS2, caso queira emular só essas duas arquiteturas diria que esse é melhor do que o Mame.

Lembrando que existem emuladores independentes para um determinado jogo que funcionam melhor do que qualquer um para o tal jogo, existem também emuladores brasileiros famosos.

## DS ##

Desmume - Gratuito e open source. O melhor atualmente.
No$GBA - Até algum tempo atrás diziam que esse emulador era o melhor, mas foi descontinuado e está encalhado na versão atual a anos.

## Emulador MESS ##

O projeto MESS surgiu com o objetivo de juntar todos os sistemas possível e emulá-los com apenas um programa. Diria que esse projeto é um projeto épico, sendo que precisa de muitos programadores de software com conhecimentos de hardware.

MESS

Tem até página em português no Wikipedia: http://pt.wikipedia.org/wiki/MESS

## Mais sistemas? ##

Esse tópico será revisado de tempo em tempo. Caso queira algum emulador que não esteja citado nesse tópico pesquise no Google ou em sites como:

http://www.emucr.com/
http://www.zophar.net/

sexta-feira, 2 de dezembro de 2011

Lista Criptografia

Programas de criptografia interessantes:

TrueCrypt: http://www.truecrypt.org/ - GPL - Tutorial: Link (inglês)
AxCrypt: http://www.axantum.com/axcrypt/

--
Irei atualizar essa lista de tempos em tempos.

Criptografia

    A criptografia é um método de transformação de dados legíveis para dados ilegíveis, de modo que só alguns possam ter acesso ao método ou senha de deciframento para obter os dados originais.
    Utilizo esse método para evitar o acesso indevido aos meus documentos importantes, principalmente de projetos. No final do site estão dispostos os arquivos aos quais eu me referi, utilizo o programa TrueCrypt para criptografá-los.
     Tutoriais para o programa estão disponíveis nessa página: http://colapsodohardware.blogspot.com/2011/12/lista-criptografia.html

quinta-feira, 1 de dezembro de 2011

Infinito

    O projeto Infinito é um jogo RTS (estratégia em tempo real) ambientado no futuro de ficção científica, onde robôs e humanos vivem pacificamente, ou não.

--

Principais aspectos do jogo:

  • Interface ao usuário
  • Programação no jogo (in game programming)

Linguagens utilizadas: C++, LUA
Motor de gráfico: Ogre3D
Ferramenta para desenho: Blender
Sistemas operacionais compatíveis (expectativa): Linux, Windows.

Objetivos:

  • Criar um jogo com interação em massa de jogadores.
  • Criar um jogo com finalidades de educação na área de programação.

--

Introdução

    Você é o cérebro comandante de uma sociedade ou grupo, ou trabalha sozinho. Seu objetivo é descobrir um planeta, sendo que esse planeta tem suas próprias características: gasoso, ferroso, carbônico, entre outras. Esse planeta também poderá ter vida inteligente ou não, nativa ou não.
    Seu objetivo no planeta é colonizá-lo, explorá-lo e, se for preciso, destruí-lo. E, caso tenha terminado de conquistar esse planeta, é bom que conquiste o próximo.

Jogo

    O principal do jogo é a batalha em campo característica dos jogos RTS, mas não será só isso. Existirá um mapa espacial principal onde o jogador escolhe o planeta que deseja colonizar e quantas unidades deseja enviar, além do cérebro, da nave e do centro de controle.
    No campo de batalha o papel principal de cada jogador é conquistar a região, com ajuda ou não de outros jogadores. Acabe com seus inimigos e domine o mundo.

Unidades

    As unidades que você poderá comandar rapidamente são os robôs e alguns ciborgues¹. As outras unidades, sejam completamente biológicas ou cibernéticas, poderão demorar para executar alguma ordem, devido a sua própria lógica, além disso, algumas dessas unidades também não poderão ser automatizadas para fazer múltiplas tarefas.
    Os robôs são unidades "zeradas", ou seja, não possuem qualquer inteligência artificial programada. No caso, o jogador poderá programar uma IA ou pedir para a fábrica (construção) produzir um robô com IA simples. A IA do jogo é explicada adiante no texto.
    Os ciborgues são unidades biológicas que possuem partes mecânicas e eletrônicas. Alguns ciborgues podem ser programados como os robôs, embora outros sejam organismos biológicos simples com algumas capacidades a mais proporcionadas pelas peças mecânicas.
    Todos os robôs e alguns ciborgues necessitam de energia elétrica para executar suas ações, caso acabe ele será desativado.
    Os organismos biológicos puros não podem ser programados, necessitam de mais recursos e demoram mais para serem recrutados, mas são os únicos que ficam de pé após o colapso do cérebro principal. Logo são as únicas unidades que podem consertar seu cérebro quando ele for destruído.
    Os veículos são unidades móveis que não possuem qualquer programação interna e necessitam de qualquer unidade não veículo e inteligente para controlá-lo. São unidades que possuem diversas finalidades, dentre elas coleta de recursos e batalhas.
    O cérebro (você) é a estação de controle principal de cada unidade comandada por você no jogo. Caso o cérebro seja danificado ou destruído, os prejuízos serão grandes. Sempre estará no região de batalha. Pode ser móvel, imóvel ou misto (se movimenta e no final se transforma em uma unidade imóvel). Poderá executar quase todos os tipos de atividades, dentre elas batalhas e coleta de recursos. É imune a diversos tipos de ataques.
     A expectativa do máximo de unidades para cada jogador/computador² será de cerca de 12500 unidades e o jogo terá um máximo de 16 jogadores no campo de batalha.

Construções


    As construções são os locais onde as unidades podem ser produzidas, onde podem ser desenvolvidas novas tecnologias, podem ser utilizadas também para defesa, coleta e armazenamento de recursos, controle de unidades, entre outras finalidades. Algumas também podem ser programadas como as unidades.

Expectativa de construções
  • Centro de controle
    Onde podem ser recrutados humanos e outras unidades para a dominação da região do planeta. É a construção principal do jogo, onde a colonização da determinada região do planeta começa.
     Possuí um limite de armazenagem de recursos, utilizado no começo da partida. Só poderá existir uma central de controle para cada jogador no campo de batalha.
  • Armazéns
    Onde é armazenado qualquer tipo de recurso. Essas construções são utilizadas principalmente para aumentar a capacidade de armazenamento da sociedade.
  • Extratores de recursos
    Construções que extraem recursos automaticamente. Geralmente utilizados para extrair metais. A velocidade na qual extraem os materiais está relacionada a alimentação energética e IA da construção.
  • Construções de defesa
    As construções de defesa tem como principal objetivo evitar os ataques vindos dos inimigos diretamente a sua base. Entre as construções de defesa podemos citar as muralhas e as torres.
     As torres automáticas podem ser programadas como as unidades e também necessitam de energia elétrica para seu funcionamento.
  • Geradores
    Os geradores são construções indispensáveis no jogo. Essas construções são responsáveis pela geração de energia elétrica, que pode ser eólica, nuclear, solar, orgânica, combustível, entre outras.
  • Fábrica
    As fábricas são construções que produzem robôs, veículos e outras unidades, excluindo biológicas, em massa.
    O jogo será um RTS com uma quantidade gigantesca de unidades em campo, como mencionado no item "Unidades". Logo uma construção que fabrique unidades em massa é indispensável ao jogador.

IA

    A IA desse item se refere a inteligência artificial programada pelo próprio jogador diretamente no jogo, uma dos aspectos principais. Como mencionado no item "Unidades", as únicas unidades que podem ser programadas no jogo são os robôs e alguns ciborgues.
    É ai que entra a criatividade do jogador, ele poderá programar a IA com uma linguagem suportada pelo jogo, programar interativamente por um menu ou pedir para a fábrica produzir unidades com IA pré programada.
    As unidades programadas pelo jogador fazem apenas ações especificadas pelo jogador, mas trabalham mais rapidamente, consomem menos energia e podem ser programadas também para atacar tipos específicos de unidades.

    A linguagem utilizada para a programação do robô será a linguagem LUA, devido a sua facilidade. O jogo já possuirá uma quantidade grande de funções pré-programadas para o jogador utilizar:
function loop()
    local inimigos = {"Soldado", "Cabo", "Sargento"}

    local i = 0
    while i < #inimigos do
        local unidade = rastrearElemento(inimigos[i], _UNIDADE)
        if unidade != nil and jogador(unidade) == "Jogador 2" then
            atacarUnidade(unidade, _LAZER)
        end
    end
end
    A unidade também poderá ser programada interativamente por um menu de funções. No menu existirão, por exemplo, botões de programação rápida de unidades, onde o jogador seleciona as funções desejadas e, após ser programado, a unidade as executa. Essas unidades consomem um pouco mais de energia do que as programadas por linguagem.
    Unidades programadas automaticamente pela fábrica são muito parecidas como qualquer unidade que não pode ser programada, permite o controle comum sobre elas. Essas unidades consomem muito mais energia e são mais lentas.
    Construções também podem ser programadas, como a fábrica, por exemplo, para produção automática de unidades.

  • Por que AI programada pelo jogador?

    Um dos principais problemas dos jogos RTS ambientados no futuro é o controle do jogador e o controle da máquina. Já existem jogos nos quais é quase impossível enfrentar o computador sozinho em um campo de batalha. Simples, o computador consegue calcular e executar milhares de comandos por segundo e você não.
    Você pode pensar o porquê da facilidade ao vencer o computador no modo um jogador ou até no multi jogador na maioria dos jogos. Isso se deve pelo fato de que a maioria dos bot's são programados de forma muito simples, e outros que são mais complexos coloca-se um atraso grande em cada etapa da estratégia artificial, fazendo com que o computador jogue muito lentamente.
    Com a AI programada pelo jogador, ele poderá criar as próprias estratégias onde também se aproveita dos recursos do processador. O tempo que ele pode demorar fazendo isso não importa, porque os códigos são salvos e podem ser utilizados em outras partidas, dessa forma cada jogador real terá estratégias diferentes dos outros.

  • Por que não somente a AI programada?

    Pretende-se introduzir qualquer tipo de pessoa no jogo, não somente aquelas que sabem programar.

  • Qualquer pessoa acharia mais fácil utilizar o menu de programação ou uma AI pré programada pela fábrica, por que programação com linguagem?

    Os jogadores poderão utilizar seus códigos em qualquer partida, não sendo necessário escrever sua própria IA em todas as rodadas de jogos. As vantagens, além de um controle automático realizado pela IA, será o de menor uso de energia pela unidade ou construção programada.

Nações

    As sociedades presentes no jogo são criadas pelos próprios jogadores ou são nativas de um planeta, sendo que podem ser miscigenadas³ com outras. As sociedades nativas que não estão em posse de jogadores estão sob controle do computador, sendo que podem ser neutras, amigas ou inimigas.

Recursos

    A maioria dos jogos de estratégia em tempo real possuem recursos, os quais podem ser utilizados em geral para construção e consumo. Dentre os recursos do jogo, podemos citar o metal e a energia elétrica.
    O metal é um dos principais recursos para a montagem de construções e unidades. Para a montagem de todos os robôs e ciborgues, é necessário metal de qualquer tipo.
    Outro recurso que é indispensável no jogo é a energia elétrica, necessária para o funcionamento de todas as construções e unidades automáticas. Sem energia a unidade ou construção é desativada. Para carregar um elemento, é necessário estar a uma certa distância do gerador elétrico, quando sair do limite de distância o elemento para de receber energia. Algumas unidades especiais para recarga de energia também existirão no jogo. Outros métodos de se obter energia será por saques⁴ aos nativos ou inimigos.

Cenários

    Os cenários nada mais são do que os campos de batalha frequentemente referenciados nesse texto.
    Os campos de batalha que ainda não foram jogados serão gerados aleatoriamente, de acordo com as características do astro⁵ onde ocorrer a partida. Poderá ser uma batalha em asteroides, planetas, estrelas e outros.
    Após gerados, poderão ser salvos em arquivos e jogados novamente em uma partida que não seja da campanha, além de que podem ser transferidos para outros jogadores.

Campanha

    As campanhas são como um jogo em "modo história", na qual o jogador avança no jogo ao qual ele não sabe o que irá descobrir, como se fosse uma aventura no espaço.
    As campanhas serão geradas aleatoriamente como os cenários. Não há expectativa de campanha realizada pelos desenvolvedores do jogo, pelo fato de que o trabalho e tempo gasto para fazer uma história e desenvolvê-la diretamente no jogo seria muito grande.

Detalhes técnicos

    Os detalhes técnicos são tópicos referentes a como o jogo será desenvolvido.
  • Processamento
    Pelo fato da quantidade de unidades dentro do campo, o processamento será muito pesado. A equipe de programação fará o máximo para deixar o código o mais enxuto e rápido possível. Os motores de gráfico utilizados no jogo também serão um pouco pesados, será necessário uma placa de vídeo boa.

~
1 - "Um ciborgue é um organismo dotado de partes orgânicas e mecânicas..." (fonte: http://pt.wikipedia.org/wiki/Ciborgue)
2 - Computador, nesse texto, se refere a estratégia utilizada pelo PC para simular um jogador, ou seja, é uma inteligência elaborada pelo desenvolvedor do jogo para que seja possível o jogador real jogar contra o computador, sem a necessidade de um outro jogador real para iniciar uma partida. Também pode ser e é comumente chamado de "bot".
3 - "A miscigenação consiste na mistura de raças, de povos e de diferentes etnias, ou seja, relações inter-raciais." (fonte: http://pt.wikipedia.org/wiki/Miscigena%C3%A7%C3%A3o)
4 - "A pilhagem, também chamada de saque, é o roubo indiscriminado de bens alheios como parte de uma vitória política ou militar, ou no decorrer de uma catástrofe ou tumulto, como numa guerra ou num desastre natural."
5 - "Astro é a designação comum que se dá aos corpos celestes que orbitam no espaço."

Lista RTS

Jogos de estratégia em tempo real interessantes:

Spring RTS (engine): http://springrts.com/ - GPL
Age of Empires: http://www.ageofempires3.com/ - Comercial
Warzone 2100: http://wz2100.net/ - GPL

--
Irei atualizar essa lista de tempos em tempos.

Salvar página como PDF

Ainda não implementado!