artigo

Kirby, um herói não convencional

Bolo de aniversário no formato do Kirby

Um monstro assola a população, que não tem como se defender. Uma profecia fala de um guerreiro valoroso e corajoso que virá das estrelas para salvar o povo sofrido. Todos esperam e surpresa! É um balão cor-de-rosa.

Kirby com o poder do fogoKirby em essência é uma piada com as expectativas de heróis. Ao invés de um corpo definido, é uma bola; ao invés de transmitir confiança e imponência, é "fofinho"; e ainda é cor-de-rosa. Mas não subestimem esse herói, que tem poderes fabulosos.

Primeiro, que ele pode inflar o próprio corpo como um balão e voar por aí (devagarinho, mas voa). Segundo que ele é resistente pra caramba, como se seu corpo fosse feito de uma borracha especial. E terceiro, claro, que ele tem o poder de absorver os poderes de inimigos que ele engula.

Boa parte da diversão de jogar com esse carismático personagem da Nintendo está nessa última habilidade. Você enfrenta um espadachim e o absorve, Kirby ganha uma espada; absorve um monstrinho de fogo e Kirby ganha poderes de fogo também. Sempre mudando o visual um pouco. Foram diversos e diversos poderes que Kirby já teve graças a essa habilidade (quer ver? dá uma olhada na edição 25 da Revista Nintendo Blast). Sem contar que, se alguém conseguir fatiá-lo, ele se torna uma multidão de Kirbies (como no jogo mais recente para Nintendo DS: Kirby Mass Attack).

Kirby com a espadaKirby estrelou no Game Boy e já passou por diversos consoles, incluindo os recentes Nintendo DS e Wii (haverá versão para 3DS?), mas sua presença não está restrita aos seus próprios jogos: ele participa desde a primeira edição do Super Smash Bros, ainda para Nintendo 64. E é um competidor de peso. Sua habilidade de absorver poderes funciona também nesse jogo de luta (com a diferença de que o inimigo não é exatamente engolido, mas devolvido). Isso rende Kirby vestido de Link, Kirby-Mario, dentre outros.

Kirby, que hoje completa 20 anos, tem representado no universo Nintendo inovação e criatividade. Seja com o Canvas Course do Nintendo DS, onde o controle sobre o herói é indireto; ou com o altamente premiado Kirby Epic Yarn, que faz do jogo uma tela viva de bordado.

Veja o trailer desse belo jogo para Wii:

É isso aí! Parabéns! Feliz aniversário Kirby das Estrelas!

Special: 

UFAL + Presídio

Semana passada aconteceu um incidente na UFAL.Mais uma fuga de presidiários e mais uma vez tiros são disparados em direção aos prédios do Campus Arapiraca, durante o dia e em momento de aulas.

O resultado é esperado: caos. Correria, gente se machucando. Felizmente ninguém da comunidade acadêmica se machucou com os tiros, mas se machucaram com o caos gerado. Sem contar que os fugitivos sequestraram a besta que traz os professores que moram em Maceió. A besta e o motorista.

Para quem não sabe como são as coisas por aqui, um resumo: o campus oferece hoje em Arapiraca 14 cursos, 3 dos quais são noturnos. Inaugurada em 2006, desde aquela época, temos um bloco extra. O presídio fica dentro do terreno que foi cedido para construção da UFAL (há quem diga que o terreno já estava destinado à UFAL antes mesmo de o presídio chegar). Dentro mesmo. Dos quatro lados do prédio que é o presídio, 3 fazem fronteira com o terreno da UFAL.

Havia uma promessa de que os presos seriam transferidos para Maceió. Devido a essa promessa, colocaram o carro na frente dos bois e transferiram parte dos funcionários antes de assegurarem que a reforma necessária para viabilizar a transferência dos presos estivesse concluída. Resultado? A situação só piorou. Não há previsão para a reforma de lá e há menos funcionários hoje do que havia antes.

Devido a toda essa problemática, o Campus Arapiraca da UFAL está paralisado, cobrando que sejam tomadas ações de fato para solucionar o problema da segurança em nosso ambiente de trabalho (e estudo).

O Governo do Estado (que parece ser o maior causador de todo esse problema) pede à Prefeitura um terreno para a construção do presídio. O prefeito diz que não tem um terreno que atenda às especificações necessárias para um presídio e que o Estado tem com o Município uma dívida de mais de 1 milhão de reais e que, se a dívida for paga, todo esse valor será empregado na aquisição de um terreno para esse fim.

Enquanto uma solução não aparece, a Direção do Campus não se responsabiliza por uma volta às atividades antes que uma solução seja iniciada (e não apenas prometida. Não é a primeira vez que acontece uma fuga e que acontecem tiros e promessas já recebemos muitas); o Conselho da UFAL em Maceió votou em apoio à paralização e estão sendo feitas cobranças.

Enquanto isso, alunos ficam sem aula (mas estão ativamente envolvidos nessa causa)...

Special: 

Preparando o ambiente RenPy

RenPy é um engine para a criação de Visual Novels, aqueles jogos que funcionam como narrações visuais interativas. Já falei dele rapidamente em outra ocasião e agora vamos ver como preparar o ambiente para usá-lo.

Para começar - e creio que não deve causar nenhum espanto - você vai precisar do Python instalado. Enquanto a maioria das distribuições GNU/Linux já vem com Python (mesmo as distribuições pequenas), no Windows você precisará instalá-lo. Para isso, pode baixá-lo de Python.Org. O CyanPack inclui a versão mais recente do Python para Windows e se você tiver o CyanPack poderá instalar o Python a partir dele.

Se você usa Trisquel, Ubuntu, Debian ou algo parecido ou derivado, para instalar o RenPy basta procurar o pacote renpy via Synaptic e instalá-lo. Ou executar o comando apt-get install renpy (ou sudo apt-get install renpy). É bom instalar também o renpy-demo e o renpy-thequestion. Assim você terá exemplos completos de uso da ferramenta.

Pois bem, uma vez instalado o RenPy, a principal ferramenta que você vai utilizar - o que fará interface entre você e o RenPy propriamente - é o Launcher. Ele é feito em Python e tem rotina para criar e configurar os projetos, o que já ajuda muito e evita que você tenha que se preocupar com a criação dos diretórios e arquivos iniciais. O Launcher tem o seguinte aspecto:

RenPy Launcher

Nesta tela, você vê um projeto já criado (Agenda Mundial). As opções para o projeto aberto são:

  • Launch - executar o projeto (jogar)
  • Edit Script - editar o arquivo principal do projeto (o arquivo em que você vai efetivamente trabalhar) com o editor de textos padrão do RenPy (veremos sobre isso mais adiante)
  • Game Directory - abre a pasta do jogo no gerenciador de arquivos
  • Check Script (Lint) - checar o código-fonte do jogo em busca de erros, validar
  • Choose Theme - escolher a paleta de cores do projeto
  • Delet Persistent - tarefa de manutenção - remoção de arquivos persistentes do projeto
  • Archive Files - cria um arquivo compactado com tudo o que se encontra dentro da pasta de projeto
  • Build Distributions - parecido com Archive Files, mas já adiciona o script necessário para o Sistema Operacional desejado

As opções globais ficam na sessão Ren'Py e são:

  • Select Project - permite ecolher um projeto que exista no diretório padrão do RenPy
  • New Project - cria um novo projeto no diretório padrão do RenPy
  • Ren'Py Games List - vai para o site do projeto RenPy listar os jogos que estão lá cadastrados
  • Quit - dar o fora
  • Options - permite definir qual o editor de textos padrão do RenPy e qual o diretório padrão (onde estão os seus projetos de jogos)
  • Ren'Py Help - abre a documentação do RenPy no navegador

Bom, agora você já sabe do básico, mas isso não é tudo, pelo menos aqui na minha instalação do Trisquel não foi tudo.

O problema basicamente foi que o editorde textos não funcionou. Indo na configuração, vi que havia duas opções: Debian e jEdit. O problema é que o editor padrão do Debian é um editor sem interface gráfica e, por isso, não funciona direito aqui. Tudo bem, podemos escolher o jEdit, mas isso também não é uma solução por si, já que o jEdit não vem com o RenPy.

Bem, então vou apresentar duas soluções de editor de textos que funcionam em GNU/Linux.

Usando o jEdit

Não importa em que Sistema Operacional você vai usar o jEdit. Para usá-lo, obviamente, você precisará de suporte Java instalado.

Em Windows, você pode baixar o Java diretamente do site Java.com. O jedit você baixa de jEdit.org e de preferência o coloca dentro do diretório onde ficou instalado o RenPy. Isso deve funcionar.

Agora, se estamos utilizando uma distribuição GNU/Linux que use pacotes .deb, certamente queremos as coisas mais organizadas. Por isso, devemos instalar o pacote jedit via Synaptic. Ou, como antes, simplesmente executar o comando apt-get install jedit. Isso por si só instalará o Java - caso não esteja insatlado - e o jEdit.

Tá, mas não acabou. Isso muito bem instala o jEdit, mas o RenPy não vai encontrá-lo. Para que o RenPy o encontre, execute esta linha no terminal:

ln -s /usr/share/jedit /usr/games/renpy

Isso criará um link simbólico para toda a pasta do jedit, como se ele tivesse sido instalado dentro do RenPy. Assim, o RenPy vai chamar o jEdit sem problemas.

Usando o Geany

Uma opção mais atrativa talvez seja usar o editor Geany, especialmente para quem utiliza o Trisquel que é distribuído junto com o CyanPack, já que o Geany já vem instalado nesse caso.

Se você ainda não tem o Geany instalado, instale o pacote geany.

Para usar o Geany, você vai precisar adicionar um arquivo de sintaxe e alterar outro, ambos da instalação do próprio Geany, além de um do próprio RenPy. Todas essas operações devem ser feitas com privilégios administrativos (como usuário root ou com sudo).

Comece baixando este arquivo. Você vai descompactá-lo e jogar o arquivo geany.editor.py no diretório /usr/share/games/renpy/launcher. Pronto, isso basta para que o RenPy possa reconhecer o Geany como um editor de textos (para usá-lo de fato, você deve alterar o editor de textos padrão via interface Launcher - em Options. Ao reabrir o RenPy depois de colocado o tal arquivo lá, o RenPy já vai listar o Geany como opção de editor, junto com o Debian e o jEdit).

Bem, agora o RenPy já abre o Geany com os arquivos que queremos editar, mas o Geany não colore. Para que o destaque sintático do Geany funcione, você precisa adicionar o arquivo filetypes.Ren'Py source.conf ao diretório /usr/share/geany. O arquivo está dentro deste arquivo compactado.

Ok, falta pouco. Agora abra o arquivo /usr/share/geany/filetype_extensions.conf e adicione a linha:

Ren'Py source=*.rpy;*.rpym;

Pronto! Está feito! Agora você já tem o ambiente RenPy funcional e pode criar suas próprias histórias interativas! Claro, numa sintaxe própria derivada do Python. Uma sintaxe da qual falarei em uma outra oportunidade...

Special: 

Kingdom Hearts: 10 anos entre Disney e Final Fantasy

Em 28 de março de 2002 era lançado no Japão o jogo Kingdom Hearts para Playstation 2. Um jogo inovador idealizado e projetado por duas grandes empresas do mercado de entretenimento, misturando conceitos e personagens: Square (atualmente Square Enix), produtora de jogos famosa com sua série Final Fantasy; Disney, nome indiscutivelmente famoso na área de desenhos e animações. O novo título era um mistério para o público e trazia uma só pergunta a todos: isso vai dar certo?

Deu certo. Hoje Kingdom Hearts completa 10 anos de vida e continua tendo títulos lançados e fazendo sucesso em vários consoles. Os títulos mais importantes (sim, ainda há outros) da série são:

  1. Kingdom Hearts, para Playstation 2 (2002)
  2. Kingdom Hearts: Chain of Memories, para Game Boy Advance (2004)
  3. Kingdom Hearts II, para Playstation 2 (2005)
  4. Kingdom Hearts 358/2 Days, para Nintendo DS (2009)
  5. Kingdom Hearts Birth by Sleep, para Playstation Portable (2010)

As aventuras acontecem em um universo criado especialmente para a série. Sora, o personagem principal de grande parte da série, tem que partir a procura de seus amigos, interagindo com personagens da Disney e do universo de Final Fantasy, vagando por cenários variados (como o mundo da Pequena Sereia, a terra do Rei Leão e o mundo digital de Tron). Usando uma curiosa espada em formato de chave, a Keyblade, objeto mágico fundamental em toda a história.

É uma série que certamente deve ser apreciada por quem gosta de RPG ou da Disney. RPGs com qualidade Square Enix e o carisma de Mickey, Donald e outros. Inclusive, com as vozes oficiais dos personagens.

Estão por vir Kingdom Hearts III (para Playstation 3 e sem data prevista) e, comemorando os 10 anos da franquia, Kingdom Hearts 3D: Dream Drop Distance (para Nintendo 3DS). Esse último será lançado amanhã no Japão, com direito a kit especial comemorativo, com um 3DS temático mais o jogo. Com a popularidade cada vez mais crescente do 3DS não duvido que será outro sucesso. Veja um trailer:

Apesar de ser lançado amanhã no Japão, a versão americana só deve vir no final do ano. De qualquer forma, já está disponível em pré-venda no eStarLand.

Special: 

União Livre (de quem?)

"O objetivo desse projeto é descontinuar as atuais distribuições Linux do Brasil." É com essas palavras que o site do projeto União Livre começa a anunciar sua intenção: que o Brasil tenha uma distribuição GNU/Linux só.

Essa ideia de que existe um excesso de distribuições e que uma distribuição única seria a solução parece genial a um novato na área, mas se você analisar bem o cenário percebe facilmente o quanto é falha.

O grande problema dessa ideia é que o fato de haver muitas distribuições não é o problema. O problema acontece quando uma distribuição é criada e se mantém sem uma razão sólida. São duas situações distintas e que devem ser separadas.

Uma ideia de "unificar" ignora que distribuições tem seus motivos de existirem, não se resumem a "juntar usuários". Há distribuição que existe para atender a necessidades de certo perfil de usuários, outras que focam a divulgação de certas ferramentas ou ideais e por aí vai. É também frequente que os motivos de uma conflitem diretamente com os motivos de outra. Um exemplo simples? Uma distribuição quer facilitar ao máximo para os usuários enquanto outra quer se alinhar ao máximo com os conceitos de Software Livre. O que temos? "Facilitar ao máximo" exige abrir mão de certas liberdades, levando a equipe a embutir Adobe Flash, drivers fechados, dentre outras "facilidades". Isso não é conciliável com a outra meta.

Foi apenas um exemplo. Se considerarmos outras guerras como KDE versus GNOME (versus Unity versus GNOME 2 versus MATE versus...), por si só já justificaria divisões. Não adianta argumentar que elas podem entrar em concenso, pois as razões muitas vezes são complexas. Um dirá que adora a API do GTK+ e de todo o GNOME, enquanto outro dirá que a identidade visual do KDE é mais sólida; outro dirá que prefere o GNOME antigo, enquanto outro entende e aceita as vantagens que a Canonical defende para justificar seu Unity. Entendem? Geralmente não é só uma questão estética (só no caso de algumas ditas distribuições, que não passam de seleção de pacotes e criação de papéis de parede).

Você pode dizer: "Beleza, então faz uma distribuição que junte tudo num pacote só e fica todo mundo feliz." Será? O tamanho da distribuição resultante também pode ser um objetivo de algumas distribuições. Outras podem estar muito presas a certas distribuições internacionais específicas. Se uma distribuição quer "a melhor performance possível", não vai abrir mão de ser derivada do seu Arch Linux (suposição).

A despeito disso, "uma distribuição única" costuma ser algo pedido pelos usuários, por terem a percepção de que há desperdício de forças em um cenário tão amplo. Há mesmo? Muitas vezes sim, mas há outras soluções para isso. Os projetos podem se ajudar mais, trocar informações e ferramentas menores entre si, publicar mais o que é feito (muitas vezes ferramentas interessantes são criadas por pequenas distribuições e mantidas como "diferencial" ao invés de serem amplamente divulgadas como ferramentas para serem incorporadas por outros projetos).

Percebem como a multiplicidade de distribuições é algo complexo? Se ainda quiserem ver mais sobre a ideia de unificar distribuições, leiam uma discussão antiga minha com Sergio Tucano. Pois bem, vamos voltar ao caso específico da União Livre. O que vemos aqui? Um chamado anônimo aos mantenedores das milhares (?) de distribuições nacionais. Ao invés de assinar embaixo (identificando-se o/os autor/es da proposta perante a sociedade), ele(s) cria(m) um abaixo-assinado.

Por que não, ao invés de querer unificar, fazer uma consulta a cada distribuição, fazendo um levantamento das razões de sua existência? E a partir daí se tentar um MMC das distribuições (o que provavelmente não significaria uma distribuição única)? Não é preciso uma fundação para isso, nem é preciso unificar todas em uma só (e uma nova, ainda mais).

O que vejo é uma distribuição relativamente antiga no Brasil e uma mais nova: respectivamente, Big Linux e SimbiOS. As duas parecem ter os mesmos objetivos de agradar usuários leigos, agregando facilidades, de modo que não duvido que a ideia tenha surgido entre eles. E é uma boa ideia as duas integrarem esforços (mudando ou não de nome), só acho que não havia necessidade desse auê todo. Toda prepotência.

E ainda adotando o pomposo nome de União Livre (que adota drivers, browsers e outros aplicativos privativos). Quem vai entrar nessa canoa?

Convertendo centenas de imagens em alguns PDFs com Python

Se você não tem nada a ver com programação, nem tem interesse no assunto, simplesmente ignore este artigo.


Mike Driscoll tem um blog dedicado a Python chamado The Mouse vs. the Python e eventualmente há excelentes artigos por lá.

Esta é uma tradução livre do artigo Reportlab: Converting Hundreds of Images Into PDFs e modifiquei sutilmente algumas coisas, incluindo os exemplos. Agradeço ao Mike pelos excelentes artigos e me desculpo pelas liberdades que tomei na tradução (incluindo a mudança no nome do artigo). Vamos a ele!


Recentemente me pediram para converter algumas centenas de imagens em páginas de um PDF. Um amigo meu desenha comics e meu irmão queria poder lê-lo em um tablet. Acontece que se você tem um monte de arquivos nomeados assim:

'Jia_01.Jpg', 'Jia_02.Jpg', 'Jia_09.Jpg', 'Jia_10.Jpg', 'Jia_11.Jpg', 'Jia_101.Jpg'

o tablet Android vai reordená-los mais ou menos assim:

'Jia_01.Jpg', 'Jia_02.Jpg', 'Jia_09.Jpg', 'Jia_10.Jpg', 'Jia_101.Jpg', 'Jia_11.Jpg'

E se torna muito confuso ler com os arquivos fora de ordem desse jeito. Infelizmente, até mesmo o Python ordena os arquivos desse modo. Tentei usar o módulo glob diretamente e então ordenar o resultado e resultou no mesmo problema. Assim a primeira coisa que eu tinha que fazer era achar algum tipo de ordenação que organizasse os arquivos corretamente. Deve ser notado que o Windows 7 pode ordenar os arquivos corretamente no sistema de arquivos, mas o Python não.

Depois de uma pequena busca no Google, encontrei o seguinte script no StackOverflow:

import re
 
#----------------------------------------------------------------------
def sorted_nicely( l ):
    """
    Sort the given iterable in the way that humans expect.
    """
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
    return sorted(l, key = alphanum_key)

Funcionou perfeitamente! Agora eu só tinha que arrumar um jeito de colocar cada página da HQ em sua própria página dentro do arquivo PDF. Felizmente, a biblioteca reportlab torna essa tarefa muito fácil de realizar. Você só precisa percorrer as imagens e inserí-las uma a uma em uma página. É mais fácil dar uma olhada no código, assim vejamos:

import glob
import os
import re
 
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Image, PageBreak
from reportlab.lib.units import inch
 
#----------------------------------------------------------------------
def sorted_nicely( l ):
    """
    # http://stackoverflow.com/questions/2669059/how-to-sort-alpha-numeric-set-in-python
 
    Sort the given iterable in the way that humans expect.
    """
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
    return sorted(l, key = alphanum_key)
 
#----------------------------------------------------------------------
def create_comic(fname, front_cover, back_cover, path):
    """"""
    filename = os.path.join(path, fname + ".pdf")
    doc = SimpleDocTemplate(filename,pagesize=letter,
                            rightMargin=72,leftMargin=72,
                            topMargin=72,bottomMargin=18)
    Story=[]
    width = 7.5*inch
    height = 9.5*inch
 
    pictures = sorted_nicely(glob.glob(path + "\\%s*" % fname))
 
    Story.append(Image(front_cover, width, height))
    Story.append(PageBreak())
 
    x = 0
    page_nums = {100:'%s_101-200.pdf', 200:'%s_201-300.pdf',
                 300:'%s_301-400.pdf', 400:'%s_401-500.pdf',
                 500:'%s_end.pdf'}
    for pic in pictures:
        parts = pic.split("\\")
        p = parts[-1].split("%s" % fname)
        page_num = int(p[-1].split(".")[0])
        print "page_num => ", page_num
 
        im = Image(pic, width, height)
        Story.append(im)
        Story.append(PageBreak())
 
        if page_num in page_nums.keys():
            print "%s created" % filename
            doc.build(Story)
            filename = os.path.join(path, page_nums[page_num] % fname)
            doc = SimpleDocTemplate(filename,
                                    pagesize=letter,
                                    rightMargin=72,leftMargin=72,
                                    topMargin=72,bottomMargin=18)
            Story=[]
        print pic
        x += 1
 
    Story.append(Image(back_cover, width, height))
    doc.build(Story)
    print "%s created" % filename
 
#----------------------------------------------------------------------
if __name__ == "__main__":
    path = r"C:\Users\Mike\Desktop\Sam's Comics"
    front_cover = os.path.join(path, "FrontCover.jpg")
    back_cover = os.path.join(path, "BackCover2.jpg")
    create_comic("Jia_", front_cover, back_cover, path)

Vamos detalhar isso um pouco. Como sempre ocorre, você tem alguns imports necessários que são exigidos para que o código funcione. Você vai notar que nós também temos dentro do código a função sorted_nicely de que falamos anteriormente. A função principal se chama create_comic e recebe quatro parâmetros: fname, front_cover, back_cover, path. Se você já usou o reportlab antes, deve ter reconhecido o SimpleDocTemplate e o Story, que são mostrados no referido tutorial

De qualquer forma, você faz um laço (loop) nas imagens ordenadas e vai adicionando as imagens ao Story, sempre com um objeto PageBreak. A razão de haver um condicional dentro do laço é que eu descobri que se eu tentar construir o PDF com todas as 400+ imagens, termina ocorrendo um erro de memória. Assim eu quebrei o trabalho em uma série de documentos onde cada um tem 100 páginas ou menos. Ao final do documento, você tem que chamar o método build do objeto doc para criar o documento PDF propriamente.

Agora você sabe como eu converti um monte de imagens em alguns documentos PDF. Teoricamente, você pode usar o PyPdf para juntar todos os PDFs resultantes em um PDF único, mas eu não tentei fazer isso. Pode ser que apareça um outro erro de memória. Deixo esse teste como um exercício para o leitor.

P. S.: A foto deste post é de NobMouse.

Special: 

FreeDroid RPG: um Action RPG livre

FreeDroid RPG

Arthur HuilletEm 2002 Arthur Huillet (que parece, como eu, também gostar de usar um fedora preto) começou um projeto de um jogo de RPG eletrônico, a ser feito como um software livre. E assim foi que nasceu o FreeDroid RPG, um jogo que vem evoluindo cada vez mais (recendo até mesmo contribuições via projeto Google Summer of Code).

No estilo Diablo, FreeDroid RPG mostra um mundo pós-apocaliptico dominado por uma megacorporação, que espalhou seus robôs por todo lugar, subjugando a humanidade. O personagem principal é ninguém menos que o Tux, que tem como missão descobrir como pará-los.

O jogo está bem avançado e é estruturalmente bacana. O que me causou estranheza e fez com que eu não me interessasse tanto por ele de início foi justamente o fato de a história girar em torno do Tux. Apesar de eu defender Sofware Livre, o Tux não me atrai. Preferências à parte, o fato de o RPG ainda servir como conscientizador para a causa do Software Livre é muito bacana e vou jogar de novo quando tiver um tempinho livre.

Segundo a apresentação mais recente no FOSDEM, o FreeDroid RPG rende 12 horas de jogo, tem 60 personagens para interagir, uma trilha sonora composta por 14 músicas originais e traz diálogos somando mais de 60.000 palavras. Pena não ter em português ainda (tradutores são bem-vindos).

O jogo está disponível para Windows, MacOS e GNU/Linux (inclusive já tem pacotes nos repositórios oficiais do Trisquel). Então, recomendo que teste o FreeDroid RPG! Jogue e tire suas conclusões (comentando aqui no Bardo WS, se desejar, o que seria também bem-vindo).

FreeDroid RPG talvez seja o mais perto que temos de "um open Diablo", pena que não seja multiplayer. Seria bom também termos um "open Castlevania", "Open Zelda" e, por que não, um "open Pokémon". E mais importante ainda: com enredos, personagens e mundo próprios e não apenas réplicas genéricas.

Tela do jogo FreeDroid RPG

Se quiser conhecer mais sobre o FreeDroid RPG, inclusive sobre como ele foi feito, dá uma olhada na apresentação do Arthur no FOSDEM (estão liberados os slides, além de video e audio da palestra).

Emuladores e ROMs

 

Emulador é um enganador. É um tipo de programa que "faz-de-conta" que você está usando um outro ambiente (que não o ambiente que realmente está usando). Está confuso?

Se você usa algum Unix (como o GNU/Linux), certamente já viu atalho para um programa chamado Terminal, xterm, gnome-terminal ou algo do tipo. O terminal propriamente dito é aquele modo de uso do computador onde vemos só letras monoespaçadas, a famosa tela preta. Esses programinhas que tem no modo gráfico na verdade são emuladores de terminal, pois permitem que programas feitos para executar apenas em terminal executem neles como se eles próprios fossem terminais, mas eles não são.

Ainda está confuso? Tá bem, tá bem, então vamos ao ponto onde eu quero chegar hoje: videogames. Um emulador de videogame é um programa que faze de conta que você está em um videogame. E aí? Como se joga? Você precisa de imagens dos jogos. Não falo de imagens gráficas como JPEG ou PNG, estou falando de cópias exatas do conteúdo de um cartucho ou CD de jogo. Quando você transforma um CD-ROM em um arquivo (sem conversões e compressões), o arquivo ISO é a imagem do CD. Quando estamos falando de videogames e cartuchos, essa imagem é o que a gente costuma chamar de ROM.

Vamos a um exemplo mais específico: você quer jogar Super Mario Bros no computador, aquele jogo para Nintendinho (também chamado de NES ou Famicom; ou, no Brasil, de Turbo Game, Dynavision, Phantom System...). Você precisa de um emulador de NES e de um ROM do Super Mario Bros.

Ao executar o emulador com o ROM, o emulador utilizará os recursos do seu computador e criará um comportamento similar ao do NES, imitando o do NES. Assim, ele pega o ROM e consegue executá-lo para você poder jogar. O jogo, que não passa de um software feito especificamente para a arquitetura do NES, encontrará todos os recursos de que precisa e funcionará na boa, achando que ele próprio está dentro de um cartuxo e que está sendo executado verdadeiramente por um videogame NES.

Legal, não é? Esta técnica permite imitar vários ambientes e videogames. Claro que para uma arquitetura de videogames diferente (entenda como um "console" diferente), você precisará de um emulador diferente. Claro, há casos de emuladores muito bem projetados, capazes de emular vários hardwares diferentes sozinho, mas estes funcionam na prática como vários emuladores fundidos em um.

Aí você que não conhece emuladores vai perguntar: E isso funciona direitinho? A resposta é: depende! A arquitetura dos videogames não é publicada, nem emuladores são necessariamente desejados ou autorizados pelos fabricantes de videogames. Então, o que temos são equipes que de boa vontade tentam fazer o melhor que podem para que o emulador engane adequadamente os jogos para esse ou aquele console. Às vezes conseguem resultados maravilhosos, às vezes nem tanto.

Curioso é que a Nintendo tem abusado do uso de emuladores. O Nintendo Wii é capaz de emular todos os consoles anteriores dela (exceto pelo GameCube, mas o Wii roda jogos do GameCube em mídia) e mais outros (como os da Sega, por exemplo). Os jogos são comprados em sua loja virtual e instalados no videogame. O Nintendo 3DS também oferece funcionalidade semelhante, mas aplicável aos videogames portáteis antigos.

Falando-se de computadores, o mundo dos softwares livres tem vários emuladores, para as mais variadas arquiteturas. Aqui listo alguns:

  • ZSNES - Emulador de Super-Nintendo
  • FCEUX - Emulador de Nintendo 8 bits
  • Gens - Emulador de Mega Drive
  • Yabause - Emulador de Sega Saturn
  • DeSmuME - Emulador de Nintendo DS
  • Mupen64plus - Emulador de Nintendo 64
  • Stella - Emulador de Atari

Todos estes são softwares livres para emular consoles de videogame, inclusive estão no repositório do Trisquel (Sistema Operacional baseado em GNU e Linux, distribuído também no CyanPack). Lembrando que emulação de videogames é um assunto controverso. Recomenda-se emular apenas jogos pelos quais você tenha pago.

P. S.: Foto original do post é de barité.

Special: 

Klavaro - curso de Digitação

Há algumas décadas era fundamental para qualquer sujeito cursar datilografia. O tempo foi passando e a datilografia foi sendo substituída pouco a pouco pelos cursos de digitação. O princípio prevalecia: o usuário praticava para ter familiaridade com o teclado, tornando-se capaz de atingir alto desempenho com um teclado alfabético na frente.

O tempo foi passando mais um pouco e os cursos de informática foram ofuscando os de digitação. Hoje não se faz mais cursos de digitação. Resultado é que é comum leigos se admirarem quando veem alguém da outra geração digitando mais do que três caracteres por segundo ou digitando sem olhar para o monitor. Foi uma das perícias que se perderam com a evolução.

Mas se você perdeu o bonde e não teve oportunidade de fazer um curso de digitação, não tem problema! Existem softwares que viabilizam um curso autodidata de digitação. Um deles é o Klavaro.

Você pode obter o Klavaro a partir do site do projeto. Ele tem suporte a português (além de vários outros idiomas) e tem versão para GNU/Linux, MacOS X e Windows, além de vir junto no CyanPack, caso você o tenha baixado.

O Klavaro (cujo nome significa teclado, em Esperanto) apresenta cinco modos:

  1. Introdução: explicando como dispor os dedos no teclado e boas práticas na digitação.
  2. Curso Básico - treinamento inicial
  3. Adaptabilidade - prática com teclas aleatórias
  4. Rapidez - prática com palavras aleatórias
  5. Fluidez - prática com textos inteiros

Quem não tinha acesso a um curso de digitação agora não tem mais desculpa: basta instalar esse excelente software e mandar ver!

Curiosidade: o Klavaro também oferece curso e práticas com o teclado Dvorak ao invés do QUERTY-ABNT2.

Special: 

Páginas

Subscribe to RSS - artigo

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo.so' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_odbc.dll' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_odbc.dll: cannot open shared object file: No such file or directory in Unknown on line 0