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.
Como funciona essa bateria?
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)
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:
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"
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
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
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
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:
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
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’));
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: