Adaptação de uma bateria real para o Rock Band

March 11, 2011

Há alguns dias, eu (@adrianobacha) e o Otávio (@otaviosalomao) estamos trabalhando na adaptação da bateria do @porkaria para funcionar 100% no Rock Band.
Eu tinha uma bateria do Guitar Hero 4 que estava apresentado problemas de sensibilidade, ai resolvemos abri-lá pra ver o que poderia ser feito, foi ai que surgiu a idéia da adaptação visto que o funcionamento da bateria era bem simples.
bateria do Guitar Hero 4
Como funciona essa bateria?
sensor piezo-elétrico
Cada parte da bateria possui um sensor piezo-elétrico que detecta as batidas através da deformação do instrumento.
O efeito piezo-elétrico acontece quando um cristal sofre uma pressão e com isso é gerada uma certa voltagem elétrica, essa voltagem é proporcional a pressão aplicada.
O sensor é feito de um disco de metal com um disco de cerâmica à base de zirconato de chumbo, quando esse disco de cerâmica é deformado, ele gera uma tensão, uma deformação no campo eletromagnético, que induz o disco de metal a conduzir uma pequena quantidade de corrente.

A dificuldade que pensamos seria a vibração dos pratos, como se pode ver no vídeo a seguir o prato se deforma completamente várias em milésimo de segundos

Porém depois de vários testes, percebemos que todas as partes tem essa vibração em intensidades diferentes

Como o Otavio já havia feito algumas coisas com o arduino (simplificando: plataforma open-source de prototipagem de hardware) resolvemos utilizá-lo para controlar esse problema da vibração através de código.
A nossa idéia era dividida em 2 partes:
1. Definir uma força mínima que caracterizasse uma batida
2. Definir um intervalo mínimo que cada parte da bateria pode ser tocada

Como o arduino não possui multi-thread, precisamos pensar em uma forma de simular esse intervalo de leitura sem paralisar totalmente o sistema.
A solução encontrada foi utilizar contadores para criar timers fictícios.

Fizemos a ligação dos piezos nas entradas analógicas do arduino e as saídas digitais diretamente no circuito antigo da bateria (que fazia a comunicação entre os sensores e o controle do Wii)

0

Importando um arquivo CSV para o MySql

May 11, 2010
Tags: , ,

Para importar uma planilha do excel para um banco de dados MySql basta salvar o arquivo como CSV, criar a tabela com as determinadas colunas e executar o seguinte comando em sql:

0

Configurando sua placa de vídeo no Ubuntu 10.04

May 10, 2010

Atualizei o meu ubuntu para a 10.04 e o meu monitor secundário (ligado por VGA, 1360×768) parou de funcionar.
Meu notebook é um ACER 5670, com a placa de vídeo ATI Radeon x1600 MOBILITY.
Depois de 3 dias batalhando, consegui finalmente corrigir o problema.
1. Abra o arquivo ‘/etc/default/grub’:
sudo gedit /etc/default/grub

2. Altere a linha:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
para
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

3. Atualize o grub
sudo update-grub

4. Reinicie o computador

0

Cobertura de código por console no CakePHP

April 27, 2010

Estava tendo problemas para utilizar a cobertura de código via console no CakePHP 1.3, ao iniciar os testes com cake testsuite app all cov, recebia a seguinte mensagem de erro:
Fatal error: Class ‘CodeCoverageManager’ not found in …/cake/tests/lib/reporter/cake_base_reporter.php on line 131
Para corrigir esse problema basta adicionar a seguinte linha
require_once CAKE . ‘tests’ . DS . ‘lib’ . DS . ‘code_coverage_manager.php’;
na linha 28 do arquivo /cake/tests/lib/reporter/cake_base_reporter.php

0

Como instalar fontes do windows no Ubuntu

April 20, 2010
Tags: ,

Para instalar as fontes do windows como por exemplo Verdana, Arial, Times New Roman etc.
é só instalar o pacote msttcorefonts:
sudo apt-get install msttcorefonts
Depois disso basta reiniciar que as fontes já estarão disponíveis, se preferir não reiniciar basta reindexar as fontes do sistema com o comando:
$sudo fc-cache -fv

0

Testes com redirect no CakePHP

April 16, 2010

Quando precisei testar controllers que faziam redirect, tive problemas pois no meio do teste acabava redirecionando a tela.
Consegui achar a solução para isso no grupo de email do cakephp sobrescrevendo a função redirect no app/app_controller:

com isso, ao chamar a função redirect é verificado o valor da constante CAKE_UNIT_TEST, se for true é porque a função foi chamada no ambiente de teste e não pode redirecionar, se não ela é usada normalmente.
Para definir essa constante ainda no app_controller adiciono:

E no ambiente de testes, defino:

No caso de testes rodados pelo browser, adiciono no inicio do arquivo app/webroot/test.php,
já para testes no console, é necessário modificar o arquivo cake/console/libs/testsuite.php

0

Gerar um código único e não-sequencial

April 13, 2010
Tags: , ,

Estava precisando gerar um código que fosse único e não sequencial para um sistema que estou desenvolvendo, junto com o Saulo Arruda, montei o algoritmo a seguir.

Além disso criei a tabela a seguir no banco:

No meu caso, um código de 5 dígitos atende bem (60.466.176 possibilidades) mas é simples adaptar essa função para gerar códigos maiores.
Esse algoritmo simplesmente incrementa uma posição a cada novo registro.
Utilizando esse registro primário do exemplo, os 6 próximos códigos seriam:

  • B1B2C
  • B2B2C
  • B2C2C
  • B2C3C
  • B2C3D
  • C2C3D
0

Criação de thumbnail com CakePHP

April 3, 2010

Adaptei o componente class.upload.php da verot para funcionar com o cakephp, a seguir irei explicar como usá-lo.

Primeiramente, baixei o componente e salvei em /app/controllers/components/upload.php
e fiz as seguintes modificações no código do meu projeto:
View: Apenas criei um campo tipo file para fazer o upload da imagem, no caso a capa de um livro

Controller: Na função que recebe o submit do form, assim que o meu objeto for salvo eu chamo a função de gerar o thumbnail.
Eu preciso salvar o objeto antes para poder gerar o id e renomea-lo para o padrão thumb_id

Model: No modelo eu criei a função para gerar o thumbnail

$dir = “img/covers/”;: diretório pra onde a imagem vai
$file = $this->id.”.”.$extension;: renomeio o arquivo para o id
$upload->image_x = 90;: defino a nova largura da imagem
$upload->image_ratio_y = true;: defino a altura proporcional a nova largura

0

CakePHP: Rotas customizáveis

March 31, 2010
Tags: , , ,

Uma dica bem simples porém muito útil!
Já quis setar uma action como default, acessando assim apenas com controller e o id?
Por exemplo, no meu caso para visualizar produtos de uma categoria, deveria acessar o controller “categorias”, a action “view” e passar o nome da categoria (ficando assim: /categorias/view/Water)
Mas para ficar mais “user friendly”, gostaria de acessar assim: /categorias/Water.
Para fazer isso, basta alterar o arquivo de rotas (app/config/routes.php) e adicionar algo como:
Router::connect(‘/categorias/*’, array(‘controller’ => ‘categorias’, ‘action’ => ‘view’));

1

Vai testar? Use fixtures!

March 31, 2010
Tags: , , ,

Uma prática necessária na hora de trabalhar com testes é trabalhar com fixtures.
Mas o que são fixtures? Fixtures são dados que são usados para se ter um controle total dos testes.
Com fixtures, não precisamos nos preocupar se um teste altera dados do banco por que a cada teste esses dados são renovados.
A implementação de fixtures no cakephp é muito simples, basta criar o arquivo app/tests/fixtures/nome-do-modelo_fixtures.php com a seguinte estrutura:

Pelo bake, o usuário pode gerar esse arquivo automaticamente, e se já existir a tabela povoada, pode importar os registros facilmente

Agora, no arquivo do teste basta incluir essa fixture com o prefixo 'app.', como por exemplo:

0