11/27/13

Instalando gem mysql2 no Windows 7

Tentando usar Rails 4.0.0 com banco de dados MySQL (MariaDB, na verdade, mas meu Rails nunca saberá) num Windows 7, fui confrontado com o seguinte erro:

An error occurred while installing mysql2 (0.3.14), and Bundler cannot continue.

"Derp", pensei, "esqueci de instalar o DevKit". Baixei o DevKit, instalei, e tentei novamente:

> gem install mysql2
ERROR: Failed to build gem native extension.

Raios. Um Google depois, chego nesta resposta. Baixei o código-fonte do conector, passei os parâmetros, apertei Enter, e....
> ERROR: Failed to build gem native extension.
> Cannot find include dir at C:\dev\mysql-connector\include;C:\dev\mysql-connector\include;C:\dev\mysql-connector/include

"Estrupício!", quase falei alto, "a pasta existe!". Outro Google depois e encontro esta outra resposta. E, finalmente, o compilador se satisfaz:
> gem install mysql2 --platform=ruby -- ' --with-mysql-dir="C:/dev/mysql-connector/"'
> Successfully installed mysql2-0.3.14

Que sirva de lição aos que vierem depois!

10/12/11

Assistindo TV Digital do Brasil no VLC

Hoje comprei um adaptador (dongle) de TV digital Full-seg, com esperança de assistir ou gravar o Jornal da Globo e qualquer outro programa que eu quiser. Isso é especialmente útil para mim, pois trabalho o dia todo e não tenho como assistir Vale a Pena Ver de Novo. Mas agora, meus problemas se acabaram-se! :D
Comprei o Zagg EasyTV Fullseg, que vem com o ArcSoft TotalMedia para assistir e faz as vezes de DVR/PVR. Instalando no Windows 7 x64 não tive problemas, consegui pegar todos os canais disponíveis em Florianópolis com sinal bom.
Não tive a mesma sorte com o Windows Media Center. Ele reconhece o receptor, e inclusive baixa a programação (ou pelo menos diz que baixa), mas nada de achar os canais.
Curioso, abri o VLC e olhei as opções de recepção de fluxos, e eis que o bicho achou o receptor de TV digital! Testei com a Globo, e consegui pegar o sinal perfeitamente. Falta testar a gravação agendada, porque a interface do VLC é meio triste de usar (blast you, open source!).
Usando os dados da Wikipedia, e usando o formato DVB-T com largura de banda 6MHz, consegui recepção. Pra tirar dúvidas, vou desenhar:

  1. Abra o VLC, e vá no Menu "Mídia"-> "Abrir dispositivo de captura...";
  2.  Na aba "Dispositivos":
    1. escolha o modo de captura "DVB Directshow";
    2.  Selecione "Tipo de DVB" = "DVB-T";
    3. Escreva a frequência do canal no campo frequência;
    4.  Escolha "Largura de Banda"="6MHz" (achei por acaso, se tiveres uma explicação melhor favor contribuir nos comentários);
    5. Aperte o botão "Reproduzir";
    6. ??????
    7. Justin Bieber em todo seu esplendor rosa!

3/3/11

Richfaces e function rich:component not found

Imagine que você está usando richfaces e seguindo exemplos como o disponível em http://livedemo.exadel.com/richfaces-demo/richfaces/inplaceInput.jsf?c=inplaceInput&tab=usage, que usam funções úteis como rich:component('...'). Se você tiver sorte, como eu, e alguma lua não estiver alinhada corretamente, você poderá se deparar com o seguinte erro:

... function rich:component not found ...
Há várias soluções propostas para este problema, desde adicionar richfaces-ui.jar à pasta WEB-INF/lib do seu WAR, ou usar um managedBean da classe org.richfaces.function.RichFunction e usar as funções do modo richFunction.component.
Porém, uma rápida olhada no código-fonte da classe RichFunction revela o que o que o método component faz:
... return "document.getElementById('" + clientId + "')"; ...
Ou seja, o que o backing bean faz equivale a um simples document.getElementById('idDoComponente')".

Assim, no exemplo escolhido:
onmousedown="#{rich:component('inplaceInput')}.save();" vira
onmousedown="document.getElementByID('inplaceInput').save();".

Note que o ID do componente gerado pelo JSF normalmente inclui o ID do formulário no qual este está inserido. Se o formulário tiver ID="form", o ID do componente vira "form:inplaceInput".
tchem.

12/11/09

JSF e ValueChangeListeners que não funcionam

Um problema que vi vários encontrarem quando usam JSF é que os listeners do ValueChangeEvent tinham suas mudanças sobrescritas/não efetuadas sem motivo aparente. Eu mesmo tive este problema esta semana: usando um bean com escopo request, o método usado para tratar o ValueChangeEvent não conseguia alterar um valor na minha classe.

Na página JSF, o componente usado era um h:selectOneRadio, da seguinte maneira:

<h:selectOneRadio 
    value="#{bean.valor}" 
    valueChangeListener="#{bean.mudaTipo}" 
    onchange="submit();" 
    onclick="submit();">
O método a seguir é como eu o tinha feito originalmente no bean:
public void mudaTipo(ValueChangeEvent event) {
    this.setValor(!valor);
}
Embora o método fosse chamado, o valor atribuído na chamada não era preservado quando o resto do form era submetido. Mudar o bean para escopo session resolve o problema, mas não era uma solução ideal no meu caso.

Após um bom tempo procurando e batendo a cabeça encontrei este post salvador, e "meus pobrema se acabaram-se"! O autor fala sobre três soluções para o problema, mas a que resolveu meu problema foi a segunda: mover o evento ValueChangeEvent para a fase UPDATE_MODEL_VALUES.

Com o código atualizado, o método ficou assim:
public void mudaTipo(ValueChangeEvent event) {
  PhaseId phaseId = event.getPhaseId();
  //pega o novo valor
  boolean newValue = (Boolean) event.getNewValue();
  if (phaseId.equals(PhaseId.ANY_PHASE))
  {
    //agenda o evento para a fase que nos interessa
    event.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
    event.queue();
  }
  else if (phaseId.equals(PhaseId.UPDATE_MODEL_VALUES))
  {
    //aqui vai o método de antes (um pouco mudado)
    this.setValor(newValue);
  }
}
Assim, o setter do bean é chamado junto com os outros setters no envio da form, e tudo funciona como esperado.
De novo, o crédito da solução é do Dave.

10/18/09

Outro sorteio de jogo: Call of Duty Modern Warfare 2

É isso aí, o pessoal da Playfire está sorteando 5 cópias do CoD: Modern Warfare 2 pra quem responder um questionário (sobre o jogo).

Clique aqui para acessar o questionário

Como não quero ser egoísta (longe disso, heheheh), essas são as respostas do questionário:

1. Infinity Ward
2. PS3, Xbox 360 and PC
3. November 10th 2009
4. fourzerotwo
5. Dual-wield handguns
6. Modern Warfare 2: Ghost
7. False - it's one iteration on
8. Square Enix
9. Task Force 141
10. Sargeant Gary "Roach" Sanderson

Fonte: A internets (e o Takeshi).

1/20/09

Links atualizados!

Pro pessoal que vem parar aqui no blog por causa dos posts (quase nada chamativos :P ) oferecendo os jogos Command & Conquer Gold e Far Cry para download grátis, atualizei os links que agora funcionam apropriadamente:

Command & Conquer Gold Grátis (palavras-chave apropriadas são fundamentais heheh)
Far Cry Grátis (este precisa duma conta no site Ubi.com, e tem propaganda dentro do jogo)

Fato Curioso: toda semana, mais ou menos 50 pessoas chegam nesse blog vindas do google, procurando estes jogos.

11/10/08

Recuperando arquivos e partições perdidas no Ubuntu

Depois de muito fuçar com instalações alternativas do Windows XP (em pendrive, TinyXP, nLite....), acabei dando um jeito na tabela de partições do meu HD. Não foi a primeira vez que aconteceu isso (tenho experiência nessa situação de tentar instalar o OpenSolaris ¬¬), mas dessa vez achei que o HD tinha se suicidado de vez.
Mas nada a temer, saquei o livecd do Ubuntu do porta-cd e já instalei o testdisk, e pus o bicho para procurar minhas partições perdidas. Achou todas, gravou a nova tabela e uma nova MBR que o Vista havia dado cabo também, reiniciei, e pronto. (Houveram outras complicações mais bizarras, mas isso é assunto para um outro post).
Finalmente, quando fui reinstalar o Windows XP que 'tunei' com o nLite, pensei que seria legal pôr uns vídeos no iPod para assistir enquanto esperava a instalação terminar. Escolhi o último episódio do Mnemosyne, baixei o WinFF para converter os .mkv em algo mais familiar para o iTunes, adicionei à biblioteca, arrastei para o iPod e.... nada. Como o iTuna não queria copiar o vídeo pro iPod, comecei a fuçar nas funções dele.
"Sincronizar iPod=apagar tudo e copiar o que tem na biblioteca", não.
"Sincronizar músicas=apagar tudo (de músicas?) e copiar o que tem na biblioteca", não.
"Sincronizar vídeos=de novo, apagar tudo (de vídeos?) e copiar o que tem na biblioteca", pode ser. Como haviam duas caixas de seleção separadas, para sincronização de músicas e vídeos, selecionei só os vídeos, crente que o iTanso faria o que parecia que deveria fazer.
Após minutos de inatividade (e iTunes travado), diz o maldito que "não foi possível copiar o vídeo selecionado". Olho o iPod, vazio.

Minha expressão, neste momento.

Depois de várias homenagens à Sra. Mãe do Steve Jobs, e da instalação do XP terminada, entrei no Ubuntu (8.10) e abri o Synaptic para procurar algum programa de recuperação de arquivos apagados para partições FAT. Adivinha quem aparece? O testdisk. wtf? Junto do testdisk que está nos repositórios do Intrepid vem o PhotoRec, da mesma empresa que fez o testdisk. E ele, vejam só, recupera arquivos mesmo com o sistema de arquivos muito danificado, e inclusive pode ser configurado para procurar apenas por determinados tipos de arquivos (e ele procura de tudo mesmo, desde fotos e mp3 até fontes de c++ e arquivos de banco de dados do Access).
Minha expressão, após achar o PhotoRec.

E, pra pôr as músicas de volta no iPod, dá-lhe Rhythmbox.
Enfim, quem precisar recuperar arquivos/partições estrupiadas, recomendo o testdisk/PhotoRec. Quando tirar um tempo pra capturar as telas, posto um passo-a-passo aqui, embora seja desnecessário (pra isso que serve o blog, não?).
Great Success.







Also, moar rage.

10/25/08

Eternidade...

Como meu PC tava indo muito rápido, resolvi fazer um underclock.
E os resultados foram quase instantâneos:
Quem dera meu HD fosse tão grande.

9/10/08

Hoppe hoppe Reiter...


Olhando a letra do vídeo acima:

Spieluhr - Lyrics ©2001 Rammstein.

Ein kleiner Mensch stirbt nur zum Schein
wollte ganz alleine sein
das kleine Herz stand still für Stunden
so hat man es für tot befunden
es wird verscharrt in nassem Sand
mit einer Spieluhr in der Hand

Der erste Schnee das Grab bedeckt
hat ganz sanft das Kind geweckt
in einer kalten Winternacht
ist das kleine Herz erwacht

Als der Frost ins Kind geflogen
hat es die Spieluhr aufgezogen
eine Melodie im Wind
und aus der Erde singt das Kind

Hoppe hoppe Reiter
und kein Engel steigt herab
mein Herz schlägt nicht mehr weiter
nur der Regen weint am Grab
hoppe hoppe Reiter
eine Melodie im Wind
mein Herz schlägt nicht mehr weiter
und aus der Erde singt das Kind

Der kalte Mond in voller Pracht
hört die Schreie in der Nacht
und kein Engel steigt herab
nur der Regen weint am Grab

Zwischen harten Eichendielen
wird es mit der Spieluhr spielen
eine Melodie im Wind
und aus der Erde singt das Kind

Hoppe hoppe Reiter
und kein Engel steigt herab
mein Herz schlägt nicht mehr weiter
nur der Regen weint am Grab
hoppe hoppe Reiter
eine Melodie im Wind
mein Herz schlägt nicht mehr weiter
und aus der Erde singt das Kind

Hoppe hoppe Reiter
mein Herz schlägt nicht mehr weiter

Am Totensonntag hörten sie
aus Gottes Acker diese Melodie
da haben sie es ausgebettet
das kleine Herz im Kind gerettet

Hoppe hoppe Reiter
eine Melodie im Wind
mein Herz schlägt nicht mehr weiter
und auf der Erde singt das Kind
hoppe hoppe Reiter
und kein Engel steigt herab
mein Herz schlägt nicht mehr weiter
nur der Regen weint am Grab


Uma parte do refrão diz "Hoppe hoppe Reiter", ou "upa upa cavaleiro", que é uma rima enquanto se balança uma criança em cima da perna, subindo e descendo (como se estivesse andando a cavalo). A rima tem várias versões bastante similares entre si. Uma que eu achei diz:

Hoppe, hoppe ReiterUpa upa cavaleiro
wenn er fällt, dann schreit erquando ele cai, ele grita
hoppe, hoppe ReiterUpa upa cavaleiro
wenn er fällt, dann schreit erquando ele cai, ele grita
fällt er in den Sumpfcai no pântano
macht der Reiter plumpse faz tchibum (onomatopéia :P)
wenn er fällt, dann schreit erquando ele cai, ele grita
fällt er auf die Steinecai sobre as pedras
tun ihm weh die Beinemachuca as pernas
fällt er in den Sumpfcai no pântano
macht der Reiter plumpse faz tchibum
Hoppe, hoppe ReiterUpa upa cavaleiro
wenn er fällt, dann schreit erquando ele cai, ele grita
fällt er in den Grabencai na vala
fressen ihn die Rabencomem-no os corvos
fällt er in den Sumpfcai no pântano
macht der Reiter plumps
(Kind "fallen lassen")
e faz tchibum
(deixar a criança "cair" entre as pernas)

Não é exatamente "bonitinha", mas a maioria das historinhas, cantigas e contos de fadas têm uma parte mais... cruel, pelo menos em versões mais antigas. Semelhantemente, há outras cantigas populares alemãs e também em outros países europeus que são como essa. Procurando em sites sobre cuidados com crianças, encontra-se versões mais "amenas" dessa cantiga, mas sem tanta graça :P
E hoje, quando se olha para todas as leis e outras ações criadas para "proteger as crianças", provavelmente alguém que cantasse algo assim tomaria no mínimo um esporro (talvez não no Brasil, mas é uma idéia perfeitamente concebível nos EUA, baseado nas notícias que tenho lido de lá).
Eu só lembrava da primeira parte, que minha oma (avó) cantava pra mim quando me sentava na perna e começava a balançar.
Hoppe hoppe Reiter
Foto do álbum de família. Da esquerda pra direita: Isberga Schönrock (tia do meu pai), Gertrud Schönrock (nome de solteira: Gertrud Gerth) e um tio desconhecido (Hagen ou Bodo Schönrock).

Memórias :)

9/9/08

Ataque do salsichão

wtf
Imagine acordar no meio da noite coberto de tempero, enquanto o seu amigo leva linguiçadas na cama ao lado.

Por mais bizarro que pareça, aconteceu. Um morador de Fresno, CA (Estados Unidos), Antonio Vasquez Jr, invadiu uma casa e roubou cerca de $900. Pra aproveitar a viagem, resolveu passar tempero ("Pappy's Seasoning") em um dos moradores da casa e bater num outro com uma lingüiça de 20cm. Os dois acordaram assustados, e o ladrão fugiu vestindo aO Meliantepenas camisa, cuecas e meias, sendo encontrado pela polícia alguns minutos depois e levado preso.
Os policiais disseram que não tiveram problemas para identificar o ladrão, já que ele deixou sua carteira de identidade no local do crime. Também informaram que a arma do crime não pôde ser recuperada: o ladrão a jogou fora durante a fuga, um cachorro chegou antes e a comeu.
Agora a pergunta: será que era mesmo uma salsicha?

Fonte: FresnoBee