Revisão do instalador para Windows
O feedback que recebi me deu umas orientações boas. Bom até alguns comentários bizarros apareceram, fazer oque faze de testes é sempre um momento tenso.
Estou contente com a velocidade do feedback. Segue agora um relato do impacto disso tudo.
O usuário Jëff Leadmann da GameDeve me lembrou do UPX, destinado a aprimorar o empacotamento de softwares ele tem versões para Win, Linux e Mac.
Ele representou uma boa economia no produto final do instalador. tipo comeu 20% do total oque me permitiu passar para um passo mais ousado: incorporar compressão LZMA ao projeto. A imagem abaixo mostra o resultado do produto final com uma economia de 27%.
Vírus
O meu aplicativo em estado bruto também chegou a ser considerado vírus pelo Norton. Provavelmente pelo tamanho pequeno e pela capacidade de acessar a Internet e escrever no disco o mecanismo identificou características de vírus.
Para me assegurar fiz uma verificação extra com o ClanAV e nada. A maquina virtual que usei para a produção parece estar limpa.
Também ando ouvindo relatos do UPX ter sido identificado como vírus! Justamente por alguns usarem ele para compactar seus trojans mau feitos.
Continuando os feedbacks... (cuidado a linguagem agora será quase algorítmica)
Foco da janela e arrastar
Eu tirei muito código de fóruns e colei no corpo da WindowProcedure, prático e rápido mas pelo visto não respondia a tudo.
Consegui ver o problema na máquina virtual e estou localizando os suspeitos de fazer a janela ficar sempre no topo (não era para isso estar acontecendo) e eliminando por tentativa e erro.
Uma preocupação que parecia desnecessária no inicio foi quanto ao usuário poder arrastar e soltar a janela. Já que o código que tirei dos fóruns fazia isso fiquei despreocupado. No entanto esse código fazia que o usuário arrastasse a janela e ela só aparecesse na posição que ele soltava o mouse.
Mas isso não estava dando uma aparência natural e os usuários começaram a reclamar.
Agora ignorei o drag and drop natural e criei um novo temporizador dentro da janela que é ativado quando o mouse é pressionado sobre ela. Assim a janela segue o mouse ao arrastar. Ao invés de só aparecer quando você solta o mouse.
Nota: o temporizador esta marcado em 30 fps para não sobrecarregar o sistema.
Piscadela nas barras de progresso
Reclamaram de umas piscadelas nas barras de progresso, achei estranho pois vi algumas no texto e não nelas.
Suspeitei de alguma conta errada na hora de mandar os dados e adicionei umas variáveis extras, antes de mudar o tamanho da barra eu sempre verifico se o tamanho novo é maior que o anterior.
Velocidade das imagens
O deslizar das imagens também incomodou um pouco pois o pessoal não estava conseguindo ler e apreciar as imagens ao mesmo tempo, então reduzi a velocidade.
Imagens
Tive também reclamações curiosas, basta lembrar aqui que o estilo base é o mangá. Mesmo que no futuro eu consiga patrocínio para alguma coisa e consiga um desenhista fodão tudo será nesse estilo.
Finarsmentes
Por fim troquei o download do Wild.rar por um conjunto de media kit, já tinha gente querendo jogar!
Coisas legais que descobri
Outro teste pra reduzir o tamanho, como eu não sei tudo que um compilador faz resolvi fazer assim:
Tirei as definições estáticas como: unsigned char tela[WxHx3]; e troquei por um unsigned char* tela; onde eu crio o buffer na hora de iniciar o programa. O resultado foi NADA! O compilador já é bonitinho ^_^
Agora o golpe de misericordia: Compressão 7Z (LZMA)
Fiquei curioso com a economia usando o UPX, e no tempo livre baixei o source do 7Z.
7Z é realmente potente basta olhar a tabela de comparação de resultados:
O próprio UPX usa o 7Z, basta que você use --lzma no lugar de -9 na hora de comprimi.
Peguei o exemplo em C puro e desmontei, extraindo o mínimo que eu queria apenas para descompactar as coias e tirei os includes desnecessários. Na verdade dos quase 80 MB só 150KB é onde está o código propriamente dito.
Aconteceu uma coisa "bizonha" durante a incorporação no instalador, ao compilar o MinGW pirava parava na metade do processo pois perdia a referência aos arquivo principal mas não dava nenhuma mensagem de erro, só warnings!
Optei pela prática padrão nesses casos: chutei o balde, fui fazer café, coxilar, jogar joguinho... para depois voltar no dia seguinte com a cabeça fresca.
Não achei o motivo, e resolvi apelar para brutalidades: De novo montei uma lib estática.
Funcionou ^^
30Kb a mais que passam a ser 15.3Kb depois do UPX (compressão -9).
Pronto, era o ultimo elemento que faltava para esse modulo do projeto, e já deixo o extrator 7Z pronto, pois apartir da primaria instalação o usuário conta com updates apartir do próprio jogo.
Estou contente com a velocidade do feedback. Segue agora um relato do impacto disso tudo.
O usuário Jëff Leadmann da GameDeve me lembrou do UPX, destinado a aprimorar o empacotamento de softwares ele tem versões para Win, Linux e Mac.
Ele representou uma boa economia no produto final do instalador. tipo comeu 20% do total oque me permitiu passar para um passo mais ousado: incorporar compressão LZMA ao projeto. A imagem abaixo mostra o resultado do produto final com uma economia de 27%.
Vírus
O meu aplicativo em estado bruto também chegou a ser considerado vírus pelo Norton. Provavelmente pelo tamanho pequeno e pela capacidade de acessar a Internet e escrever no disco o mecanismo identificou características de vírus.
Para me assegurar fiz uma verificação extra com o ClanAV e nada. A maquina virtual que usei para a produção parece estar limpa.
Também ando ouvindo relatos do UPX ter sido identificado como vírus! Justamente por alguns usarem ele para compactar seus trojans mau feitos.
Continuando os feedbacks... (cuidado a linguagem agora será quase algorítmica)
Foco da janela e arrastar
Eu tirei muito código de fóruns e colei no corpo da WindowProcedure, prático e rápido mas pelo visto não respondia a tudo.
Consegui ver o problema na máquina virtual e estou localizando os suspeitos de fazer a janela ficar sempre no topo (não era para isso estar acontecendo) e eliminando por tentativa e erro.
WindowProcedure
Aqui que rola a maioria dos pepinos, essa é uma função do tipo "Gigante Guerreiro" que por mais que você subdivida seu fluxo com mais funções ela vai ser extensa e confusa. Para quem não conhece essa é a função base de uma janela do Windows e nela são tratadas todas as mensagens recebidas do sistema e dela própria. Por exemplo se o mouse passa perto ou se um Pendrive for inserido na USB alguma coisa passa por aqui. |
Uma preocupação que parecia desnecessária no inicio foi quanto ao usuário poder arrastar e soltar a janela. Já que o código que tirei dos fóruns fazia isso fiquei despreocupado. No entanto esse código fazia que o usuário arrastasse a janela e ela só aparecesse na posição que ele soltava o mouse.
Mas isso não estava dando uma aparência natural e os usuários começaram a reclamar.
Agora ignorei o drag and drop natural e criei um novo temporizador dentro da janela que é ativado quando o mouse é pressionado sobre ela. Assim a janela segue o mouse ao arrastar. Ao invés de só aparecer quando você solta o mouse.
Nota: o temporizador esta marcado em 30 fps para não sobrecarregar o sistema.
Piscadela nas barras de progresso
Reclamaram de umas piscadelas nas barras de progresso, achei estranho pois vi algumas no texto e não nelas.
Suspeitei de alguma conta errada na hora de mandar os dados e adicionei umas variáveis extras, antes de mudar o tamanho da barra eu sempre verifico se o tamanho novo é maior que o anterior.
Velocidade das imagens
O deslizar das imagens também incomodou um pouco pois o pessoal não estava conseguindo ler e apreciar as imagens ao mesmo tempo, então reduzi a velocidade.
Imagens
Tive também reclamações curiosas, basta lembrar aqui que o estilo base é o mangá. Mesmo que no futuro eu consiga patrocínio para alguma coisa e consiga um desenhista fodão tudo será nesse estilo.
Finarsmentes
Por fim troquei o download do Wild.rar por um conjunto de media kit, já tinha gente querendo jogar!
Calma que o primeiro beta esta saindo, já estou produzindo o roteiro da fase.
Coisas legais que descobri
Outro teste pra reduzir o tamanho, como eu não sei tudo que um compilador faz resolvi fazer assim:
Tirei as definições estáticas como: unsigned char tela[WxHx3]; e troquei por um unsigned char* tela; onde eu crio o buffer na hora de iniciar o programa. O resultado foi NADA! O compilador já é bonitinho ^_^
Agora o golpe de misericordia: Compressão 7Z (LZMA)
Fiquei curioso com a economia usando o UPX, e no tempo livre baixei o source do 7Z.
7Z é realmente potente basta olhar a tabela de comparação de resultados:
O próprio UPX usa o 7Z, basta que você use --lzma no lugar de -9 na hora de comprimi.
Peguei o exemplo em C puro e desmontei, extraindo o mínimo que eu queria apenas para descompactar as coias e tirei os includes desnecessários. Na verdade dos quase 80 MB só 150KB é onde está o código propriamente dito.
Aconteceu uma coisa "bizonha" durante a incorporação no instalador, ao compilar o MinGW pirava parava na metade do processo pois perdia a referência aos arquivo principal mas não dava nenhuma mensagem de erro, só warnings!
Optei pela prática padrão nesses casos: chutei o balde, fui fazer café, coxilar, jogar joguinho... para depois voltar no dia seguinte com a cabeça fresca.
Não achei o motivo, e resolvi apelar para brutalidades: De novo montei uma lib estática.
Funcionou ^^
30Kb a mais que passam a ser 15.3Kb depois do UPX (compressão -9).
Pronto, era o ultimo elemento que faltava para esse modulo do projeto, e já deixo o extrator 7Z pronto, pois apartir da primaria instalação o usuário conta com updates apartir do próprio jogo.
Comentários
Postar um comentário
Como fiquei sabendo que um pobre blogueiro foi processado por um comentário anonimo esses dias, so me resta me precaver contra a ineficácia da legislação em tratar o meio online. Mas eu prometo que libero rapido ^_~