VidaGeek.net2015-02-10T19:07:10-02:00http://www.vidageek.net/Breno, Ceci, Fabs, Jonas e Luizcontato@vidageek.netAprenda Html2015-02-10T00:00:00-02:00http://www.vidageek.net/2015/02/10/aprenda-html
<p>Depois de bastante tempo (e algumas tentativas frustradas) finalmente colocamos no ar o jogo para <a href="http://aprenda.vidageek.net/aprenda/html">Aprender Html</a>.</p>
<p>Ele segue a mesma linha da ferramenta para <a href="http://aprenda.vidageek.net/aprenda/git">aprender Git</a> e <a href="http://aprenda.vidageek.net/aprenda/regex">RegEx</a>, com a vantagem que ele renderiza o html
que você digita e verifica quase que instantâneamente algum erro que você tenha cometido.</p>
<p>Ainda é necessário melhorar bastante ele (o último grupo de exercícios não está nem terminado), faltam muitos
exercícios, as mensagens de erro precisam ser melhoradas (em especial apontar a linha do erro), e muito mais.</p>
<p>Mas isso não impede que você comece a usar ele. Além de aprender html você ainda irá nos ajudar muito a ver outras
coisas que precisam ser melhoradas nele.</p>
<p>Enfim, se você não conhece html, dê uma olhada. Se conhece, indique para alguém que ainda não conhece :)</p>
<p>P.s.: <a href="https://github.com/vidageek/games">Pull Requests são muito bem vindos!</a></p>
<br />
Como configurar teclas de atalho no fluxbox2014-05-23T00:00:00-03:00http://www.vidageek.net/2014/05/23/teclas-atalho-fluxbox
<p>Uma coisa que acho sensacional no fluxbox é <a href="http://fluxbox-wiki.org/index.php/Keyboard_shortcuts">configurar teclas de atalho</a>. Simplesmente
é um arquivo que você coloca a combinaçãod e teclas e o que tem que acontecer. Normalmente
esse arquivo é o <code>~/.fluxbox/keys</code>. A parte personalizada do meu é mais ou menos assim:</p>
<pre><code>#Custom
#Gnome Do
Mod4 space :exec /usr/bin/gnome-do
# Keyboard Layout Change
Mod4 1 :exec /usr/bin/setxkbmap -layout us -variant altgr-intl
Mod4 2 :exec /usr/bin/setxkbmap -layout us -variant alt-intl
Mod4 3 :exec /usr/bin/setxkbmap -model abnt2 -layout br -variant ,abnt2
# Volume Control
None XF86AudioLowerVolume :Exec amixer sset Master,0 5%-
None XF86AudioRaiseVolume :Exec amixer sset Master,0 5%+
None XF86AudioMute :Exec amixer sset Master,0 toggle
</code></pre>
<p>Super fácil de entender. <code>Mod4</code> é tecla com o logo do windows no meu teclado. Se eu aperto
<code>Mod4</code> seguido de <code>espaço</code>, ele abre o <a href="https://launchpad.net/do">Gnome-Do</a> (sim. Gnome-Do rola muito bem no fluxbox).</p>
<p>Se eu apertar <code>Mod4</code> seguido de 1, 2 ou 3, ele muda o teclado para alguma das variações que eu
uso.</p>
<p>Por fim, se eu apertar as teclas de controle de áudio do meu teclado, ele roda o <a href="http://linux.die.net/man/1/amixer">amixer</a>
para aumentar, diminuir ou mutar o som.</p>
<p>Unica coisa que você precisa lembrar quando for configurar atalhos, é que esse arquivo só é lido
na inicialização do fluxbox, então você precisa se re-logar para ver as modificações.</p>
<br />
Como escolher o layout de teclado no Fluxbox2014-05-20T00:00:00-03:00http://www.vidageek.net/2014/05/20/escolha-layout-teclado-fluxbox
<p>É bem simples. No <a href="">arquivo de inicialização do Fluxbox</a>, você simplesmente usa o comando
<code>setxkbmap</code> para setar o layout de teclado.</p>
<pre><code>setxkbmap -layout layout -variant variant
</code></pre>
<p>Existem diversos <code>layout</code> e <code>variant</code> que você pode escolher e não encontrei uma lista
que tenha vários deles. Eu uso três combinações diferentes depedendo do que faço:</p>
<pre><code>setxkbmap -layout us -variant altgr-intl
</code></pre>
<p>Esse é o modo padrão do meu teclado. É uma variação do us international, que uso para
programar. O legal dessa variação é que se eu precisar de alguma letra com acento,
consigo colocar usando o <code>altgr</code>.</p>
<pre><code>setxkbmap -layout us -variant alt-intl
</code></pre>
<p>Essa combinação eu uso para escrever em potuguês (como esse post). Eu não gosto do padrão
abnt, que é o dos teclados brasileiros. Basicamente esse é o teclado us international com
deadkeys (sabe você apertar a tecla com o acento e ele só aparecer quando você apertar
a letra que você quer acentuar? Pois é. Isso se chama deadkeys).</p>
<pre><code>setxkbmap -model abnt2 -layout br -variant ,abnt2
</code></pre>
<p>Por fim, tem o abnt2 para quando alguém for usar o computador no meu lugar (minha namorada,
alguém pareando, etc). É a combinação que reflete o que está escrito nos teclados brasileiros
e tem deadkeys.</p>
<br />
Como rodar programas na inicialização do Fluxbox2014-05-16T00:00:00-03:00http://www.vidageek.net/2014/05/16/fluxbox-inicializacao
<p>Uma das coisas mais legal do <a href="http://fluxbox.org/">Fluxbox</a>, é que você configura ele inteiro via
arquivos de texto bem simples.</p>
<p>Um desses arquivos simples é o <a href="http://fluxbox-wiki.org/index.php?title=Editing_the_startup_file">~/.fluxbox/startup</a>, que é rodado logo antes da inicialização
do fluxbox (na verdade, ele é quem invoca o fluxbox).</p>
<p>Como você faz para rodar um programa na inicialização do fluxbox? Você simplesmente
coloca o comando lá. O <code>startup</code> é um arquivo shell. A única coisa que você precisa
tomar cuidado é de não colocar nada depois da linha</p>
<pre><code>exec fluxbox
</code></pre>
<p>porque quando essa linha é rodada, o fluxbox sobe e nada mais é rodado, porque ele não
é um comando que rode em background.</p>
<p>No meu caso, só carrego o dropbox na inicialização, então o fim do arquivo fica mais
ou menos assim:</p>
<pre><code>/usr/bin/dropbox start
exec fluxbox
</code></pre>
<br />
Mirror Display com projetor usando Fluxbox2014-05-13T00:00:00-03:00http://www.vidageek.net/2014/05/13/fluxbox-projetor-mirror-display
<p>Um pequeno problema que tive tempos atrás foi, em uma palestra, não conseguir colocar
os displays em modo mirror.</p>
<p>Me preparando para outra palestra, resolvi resolver isso bem antes e encontrei a ferramentar
<a href="http://christian.amsuess.com/tools/arandr/">arandr</a>, que é um frontend para o <a href="https://wiki.archlinux.org/index.php/xrandr">xrandr</a>. Com ela você consegue ajustar os displays
do jeito que quiser. Ela inclusive é bem mais poderosa do que o gerenciador de displays do
Gnome, permitindo que você coloque apenas parte da sua tela compartilhada.</p>
<p>Para instalá-la</p>
<pre><code>sudo apt-get install arandr
</code></pre>
<br />
Como criar um projeto ruby2014-05-09T00:00:00-03:00http://www.vidageek.net/2014/05/09/criar-projeto-ruby
<p>Quem me conhece sabe que não sou muito fã de ruby, mas uso <a href="http://www.vidageek.net/2012/04/04/jekyll/">jekyll</a> em vários sites que
mantenho. Um problema que tenho encontrado é que se você instala ruby via <code>apt-get</code>,
basicamente você está preso (ok. nem tanto mas você entendeu) à uma versão de ruby.
Pra evitar isso, existe uma ferramenta chamada <code>rvm</code>.</p>
<h2>RVM</h2>
<p>O RVM é uma ferramenta de gerenciamento de versões de ruby. Simples assim. Para instalá-lo
basta ir ao <a href="http://rvm.io/">site do rvm</a> e rodar o comando de instalação dele.</p>
<p>Mas, se você usa gterm (como eu), ele exige que você faça uma mudança no seu terminal se
não quiser receber uma mensagem bem clara de que fez algo errado ("RVM is not a function" -
realmente muito claro).</p>
<p>Basicamente você precisa mudar o seu terminal para que ele carregue o bash como uma login
shell. Você faz isso marcando <code>Edit > Profile Preferences > Title and Command > Run
command as login shell</code>.</p>
<p>E se você por acaso modificou o seu <a href="http://www.vidageek.net/2009/07/20/como-exibir-branch-atual-do-git/">terminal colocando variáveis</a> e comandos no seu
<code>~/.bashrc</code>, suas modificações simplesmente vão parar de funcionar, porque o .bashrc
não é carregado em uma login shell. Para resolver isso, coloquei no meu <code>~/.bash_profile</code>
a seguinte linha:</p>
<pre><code>source ~/.bashrc
</code></pre>
<p>Que força a carga do <code>.bashrc</code>.</p>
<h2>Dependências do projeto</h2>
<p>Agora que o RVM está instalado e seu terminal está funcionando normalmente, falta descrever
quais são as dependências do projeto. Crie um arquivo chamado <code>Gemfile</code> e coloque</p>
<pre><code>source "https://rubygems.org"
ruby '2.1.0' # versão de ruby que seu projeto usa
gem 'sua_gem1', 'versão da gem 1'
gem 'sua_gem2', 'versão da gem 2'
gem 'sua_gem3', 'versão da gem 3'
gem 'sua_gem4', 'versão da gem 4'
</code></pre>
<p>Feito isso, basta rodar <code>bundle install</code> e tudo estará disponível quando você estiver
dentro da pasta (ou alguma sub-pasta) do seu projeto.</p>
<p>A sintaxe completa do arquivo você encontra no <a href="http://bundler.io/v1.3/gemfile.html">site do bundler</a></p>
<h2>Coisas chatas</h2>
<p>Tirando o problema com a instalação do rvm que comentei, alguns outros pontos chatos:</p>
<ul>
<li>O RVM funciona mexendo no seu path, mas não apenas isso. Quando você entra na pasta
usando o comando <code>cd</code>, ele muda o seu path para usar o ruby certo. Isso significa que
ele mudou o meu comando <code>cd</code>, o que não me parece muito razoável (é um mokey patching
na shell...)</li>
<li>Sempre lembre de atualizar o seu RVM com <code>rvm get stable</code>. Eu tinha uma instalação
antiga e quando pedi para instalar o ruby <code>2.1.0</code>, ele instalou o <code>2.1.0-preview1</code>.</li>
<li>Ele não instala o ruby sozinho. Se você coloca um ruby que ainda não tenha instalado,
vai ter que rodar <code>rvm install VERSAO</code> para que ele instale.</li>
</ul>
<br />
Livro - Coletânea Front End2014-04-01T00:00:00-03:00http://www.vidageek.net/2014/04/01/livro-coletanea-front-end
<p>Foi lançado hoje o livro <a href="https://casadocodigo.refersion.com/l/701.5703">Coletânea Front End</a>. E, apesar de ser 1 de abril, <strong>não é mentira</strong>! :)</p>
<p>Tive o prazer e a honra de ter trabalhado nesse projeto como um dos autores, junto com grandes nomes dessa área que cresce cada vez mais!</p>
<p>Participei desta coletânea escrevendo um capítulo sobre <em>Progressive Enhancement</em>, um tema que, apesar de não ser novo, ainda precisa ser mais divulgado e aplicado pelos desenvolvedores front-end mundo afora, dada sua importância para a criação e a manutenção de sites. Além disso, é um tema que ganha cada vez mais importância com a diversidade de dispositivos que acessam a web crescendo a cada dia.</p>
<p>Além do meu artigo, você ainda pode conferir os seguintes temas:</p>
<ul>
<li>Responsive Design, Adaptive e Fault Tolerance</li>
<li>Criação de um framework front-end</li>
<li>AngularJS</li>
<li>Diretrizes de acessibilidade</li>
<li>WAI-ARIA</li>
<li>APIs modernas da web</li>
<li>Debug de aplicações web</li>
<li>Teste de códigos Javascript</li>
</ul>
<p><a href="https://casadocodigo.refersion.com/l/701.5703">Confira mais sobre o livro</a>, compre e divulge para seus colegas com a hashtag #coletaneafrontend!</p>
<br />
Data URIs2014-01-31T00:00:00-02:00http://www.vidageek.net/2014/01/31/data-uri
<p>Eu conheço <a href="https://developer.mozilla.org/en/docs/data_URIs">Data URIs</a> faz algum tempo e cheguei a usar para inline de pequenas imagens,
mas eu ainda não tinha me tocado de quão flexível elas são.</p>
<p>Eu tinha o seguinte problema para resolver.</p>
<p>Na minha página eu tinha um pdf (encodado em base64) dentro de uma variável <code>pdf</code> e queria
disponibilizar isso para o usuário (fazer um download ou algo assim).</p>
<p>Depois de bater a cabeça um pouco e não conseguir, perguntei ao <a href="http://www.lambda3.com.br/">Victor Cavalcante</a> se
ele sabia como fazer isso. A resposta, como vocês já devem saber, foi Data URIs.</p>
<p>No meu caso, a data uri ficou assim:</p>
<pre><code>var uri = "data:application/pdf;base64, " + pdf;
</code></pre>
<p>Com isso, você pode colocar como o <code>href</code> de um link ou dar um <code>window.open</code> na uri. Mas o
mais legal é que isso funciona para <strong>quaquer</strong> media type! Isso significa que você pode
gerar qualquer coisa em javascript e disponibilizar para o usuário.</p>
<br />
Como criar uma Applet Java assinada por um certificado auto-assinado2014-01-28T00:00:00-02:00http://www.vidageek.net/2014/01/28/applet-self-signed
<p>Para uma <a href="https://en.wikipedia.org/wiki/Java_applet">Applet Java</a> conseguir interagir com hardware a partir de um browser, é necessário
que ela esteja assinada por um certificado digital. Mas certificados digitais não são muito
práticos para serem usados em desenvolvimento.</p>
<p>Mas existe um tipo de certificado que nós mesmos podemos criar nas nossas máquinas em alguns
segundos. São chamados de certificados auto-assinados porque não foram assinados por nenhuma
Autoridade Certificadora.</p>
<h2>Antes de mais nada, declarando applet no seu html</h2>
<p>Eu demorei um tempo considerável para conseguir carregar a applet na página simplesmente
porque eu não queria usar a tag <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/applet"><code><applet></code></a>, pois ela é obsoleta e foi abandonada.</p>
<p>Para fazer isso com a tag <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object"><code><object></code></a>, eu demorei bastante porque não existiam exemplos
funcionando em todos os sites que passei. Mas é bem simples:</p>
<pre><code><object type="application/x-java-applet;version=1.7" id="seuId">
<param name="code" value="nome.completo.da.sua.Classe" />
<param name="archive" value="/jar-com-a-sua-classe.jar" />
</object>
</code></pre>
<p>Os parâmetros são:</p>
<ul>
<li>type: Determina que esse objeto é uma applet java. O <strong>version</strong> estabele a menor versão
que o browser precisa ter instalado para rodar a sua applet.</li>
<li>id: serve para você utilizar a sua applet via javascript, o que é bem interessante.</li>
<li>code: a sua classe que será carregada e que <code>extends JApplet</code> ou <code>extends Applet</code>.</li>
<li>archive: é o caminho para o seu jar acessível pela internet.</li>
</ul>
<h2>Criando um certificado auto assinado (self signed certificate)</h2>
<p>Você poderia gerar um certificado X509 usando openssl e depois importá-lo para usar com Java,
mas para o que precisamos, apenas gerar uma keystore com um certificado já é o suficiente.</p>
<p>Se você tem o jdk instalado, provavelmente tem o <a href="http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html"><code>keytool</code></a> no seu path:</p>
<pre><code>keytool -genkeypair -alias alias -keyalg EC -keysize 571 -keystore keystore.jks
</code></pre>
<p>Esse comando vai pedir um monte de informações. Você não precisa preencher nenhuma
exceto a senha e <strong>yes</strong> para a última pergunta.</p>
<pre><code>Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes
</code></pre>
<p><code>keyalg</code> e <code>keysize</code> são opcionais. Por padrão será gerada uma chave RSA. Por uma razão
aleatória eu queria uma que usasse curvas elípticas :)</p>
<p><code>alias</code> é o nome do seu certificado <strong>dentro</strong> da keystore. Uma keystore pode ter vários
certificados. <code>keystore.jks</code> é o nome da keystore que será gerada.</p>
<p>Para verificar a sua keystore, você pode rodar o comando:</p>
<pre><code>keytool -list -keystore keystore.jks
</code></pre>
<h2>Fatjar</h2>
<p>Sua applet provavelmente terá dependências, afinal você não quer ter que implementar tudo
do zero.</p>
<p>Para resolver esse problema, quase toda ferramenta de automação (ant, maven, gradle) tem
um plugin que pega todas as dependências e coloca elas em um só jar. Em geral, o nome
desse plugin é <a href="https://github.com/musketyr/gradle-fatjar-plugin"><strong>fatjar</strong></a> ou <strong>uberjar</strong>. Como estou usando gradle, acrescentei as
seguintes linhas no meu build.gradle:</p>
<pre><code>buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'eu.appsatori:gradle-fatjar-plugin:0.2-rc1'
}
}
apply plugin: 'fatjar'
</code></pre>
<p>Agora meu build tem uma task chamada <code>fatJar</code> que faz a mágica acontecer.</p>
<h2>Adicionando permissões de execução para a sua applet</h2>
<p>Em algum update do Java 7, passou a ser necessário acrescentar ao MANIFEST.MF as permissões para
que a Applet pudesse acessar mais recursos. Basicamente você precisa acrescentar as seguintes
linhas ao seu MANIFEST.MF:</p>
<pre><code>Permissions: all-permissions
Codebase: http://seu-dominio.com https://seu-outro-dominio.com:8088
</code></pre>
<p>Basicamente, se você não colocar as permissões ela nem roda. E se o domínio a partir de onde
o usuário acessar a sua applet for diferente dos que estão no <strong>Codebase</strong>, sua applet
também não será carregada.</p>
<p>No meu <strong>build.gradle</strong> ficou mais ou menos assim:</p>
<pre><code>fatJar {
manifest {
attributes("Permissions": "all-permissions", "Codebase": "http://dev.local:8000")
}
}
</code></pre>
<h2>Removendo assinaturas antigas</h2>
<p>Uma das dependências da minha applet era um jar assinado (do Bouncy Castle). Normalmente isso
não é um problema, mas como o fatJar juntou tudo em um único jar, quando você assinar o jar
ele ficará em um estado inconsistente (por causa dos arquivos da assinatura anterior). Com
certeza existe uma forma simples e elegante de fazer isso (assinar um jar que tem assinaturas
de outros jars), mas eu preferi simplesmente remover as assinaturas antigas e reassinar todo
o conteúdo:</p>
<pre><code>JAR=NOME_DO_SEU_JAR
jar xvf $JAR # extrai o conteúdo do fatJar
rm -rf $JAR # apaga o arquivo original
rm -rf META-INF/*.SF # apaga assinaturas
rm -rf META-INF/*.DSA
rm -rf META-INF/*.RSA
jar cvmf META-INF/MANIFEST.MF $JAR * # gera um novo jar, mantendo o MANIFEST.MF
</code></pre>
<p>Um erro que demorei para resolver foi manter o MANIFEST.MF. Eu achava que o comando <code>jar</code> iria
manter o MANIFEST.MF que estava na pasta, mas ele simplesmente sobrescreve. Especificando dessa
forma funcionou bem.</p>
<h2>Assinando applet usando jarsigner</h2>
<p>Agora que você já tem o jar com as suas dependências e as permissões no MANIFEST.MF, assinar
o jar é bem simples usando o <code>jarsigner</code>:</p>
<pre><code>jarsigner -keystore keystore.jks SEU_JAR.jar alias
</code></pre>
<ul>
<li><code>keystore.jk</code> é a sua keystore</li>
<li><code>alias</code> é o alias do seu certificado dentro da keystore (que geramos lá no começo do post)</li>
</ul>
<h2>Verificando o seu jar com o jarsigner</h2>
<p>Um passo muito importante é verificar que o seu jar foi assinado corretamente. Eu perdi algum
tempo tentando rodar um applet com uma assinatura inválida (o jarsigner pode gerar assinaturas
inválidas silenciosamente...).</p>
<pre><code>jarsigner -verify SEU_JAR.jar
</code></pre>
<p>Deve gerar algo como:</p>
<pre><code>jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains entries whose signer certificate will expire within six months.
This jar contains signatures that does not include a timestamp. Without a timestamp,
users may not be able to validate this jar after the signer certificate's expiration
date (2014-04-22) or after any future revocation date.
Re-run with the -verbose and -certs options for more details.
</code></pre>
<p>A parte importante é aquele <strong>jar verified</strong> no começo. Os warnings são relativos à nossa
keystore, que geramos sem nos preocuparmos muito (tranquilo para desenvolvimento. Ruim para
produção.)</p>
<h2>Baixando o nível de segurança do seu browser</h2>
<p>A última coisa que precisamos fazer é reduzir o nível de segurança do browser para que
ele rode a applet auto-assinada. Hoje nenhum browser roda uma applet como essa por padrão.</p>
<p>Para fazer isso é só entrar no <strong>Plugin Control Panel</strong> do seu java, ir para a aba
<strong>Security</strong> e reduzir para <strong>Medium</strong>.</p>
<h2>Usando applet a partir do JavaScript</h2>
<p>Uma coisa muito legal que descobri é que é possível interagir com uma applet via javascript.</p>
<p>Mas isso tem alguns problemas. Dentro do modelo de segurança dos browser, javascript é
considerado como código que deve rodar dentro da sandbox (ou seja, não pode acessar
muitos recursos fora do browser). A nossa applet foi assinada exatamente para acessar
recursos fora do browser. Se javascript acessa a applet, temos uma interação entre um
ambiente restrito com um sem restrições. Quando isso acontece o browser assume que a
applet está sendo acessada de forma indevida e remove as permissões de acesso dela.</p>
<p>Para contornar esse problema, nós devemos executar o código da applet dentro de um block
<strong>doPrivileged</strong>:</p>
<pre><code>AccessController.doPrivileged(new PrivilegedAction<String>() {
@Override
public String run() {
// Código que precisa de permissões elevadas
}
});
</code></pre>
<p>Outra coisa meio chata de interagir com applet via javascript é que quando algo dá errado,
você somente recebe uma exceção genérica (Error: Error calling method on NPObject.) no
javascript.</p>
<p>O que fiz para contornar esse problema foi fazer com que o meu método devolvesse a mensagem
de erro da exception lançada quando algo desse errado. Meio ruim, mas consegui debuggar dessa
forma.</p>
<h2>Reduzindo o tamanho com ProGuard</h2>
<p>Um último detalhe que preciso melhorar da applet que criei é que ela ficou com 5Mb. Colocar
uma applet de 5Mb para um usuário baixar com conexão inconsistente não é algo muito
razoável. Para resolver isso, estou pensando em usar o <a href="http://proguard.sourceforge.net/">ProGuard</a> para remover as classes
que não estou usando. Como uso muito pouco (acho) das dependências, acredito que somente isso
já seja suficiente. Se não for, o ProGuard ainda suporta redução do bitecode trocando as
Strings de identificação de classes, métodos e campos. É só tomar cuidado com o que usa
reflection (que daí esses nomes passam a ser importantes).</p>
<br />
Conversa Rápida - Juliano Alves - Por que há poucas mulheres trabalhando com software?2014-01-20T00:00:00-02:00http://www.vidageek.net/conversa-rapida/8-juliano-alves-por-que-h-poucas-mulheres-trabalhando-com-software
<iframe width="560" height="315" src="//www.youtube.com/embed/YyxaSBIfrXM" frameborder="0" allowfullscreen></iframe>
<br />
Conversa Rápida - William Grasel - Por que eu pratico artes marciais?2014-01-20T00:00:00-02:00http://www.vidageek.net/conversa-rapida/7-william-grasel-por-que-eu-pratico-artes-marciais
<iframe width="560" height="315" src="//www.youtube.com/embed/mY7UsSCvPO8" frameborder="0" allowfullscreen></iframe>
<br />
Conversa Rápida - Breno Ferreira - Minhas resoluções de ano novo2014-01-20T00:00:00-02:00http://www.vidageek.net/conversa-rapida/6-breno-ferreira-minhas-resolu-es-de-ano-novo
<iframe width="560" height="315" src="//www.youtube.com/embed/3rYPDg5NVw0" frameborder="0" allowfullscreen></iframe>
<br />
Conversa Rápida - Raphael Molesim - Extented Hapiness Radar2014-01-20T00:00:00-02:00http://www.vidageek.net/conversa-rapida/5-raphael-molesim-extented-hapiness-radar
<iframe width="560" height="315" src="//www.youtube.com/embed/WB_T-v2hM7A" frameborder="0" allowfullscreen></iframe>
<br />
Conversa Rápida - Claudio Kerber - Para Onde Vai o Seu Lixo?2014-01-20T00:00:00-02:00http://www.vidageek.net/conversa-rapida/4-claudio-kerber-para-onde-vai-o-seu-lixo
<iframe width="560" height="315" src="//www.youtube.com/embed/u4V8Js9HXXc" frameborder="0" allowfullscreen></iframe>
<br />
Conversa Rápida - Manoel Pimentel e Dairton Bassi - Agile Alliance Brazil2014-01-20T00:00:00-02:00http://www.vidageek.net/conversa-rapida/3-manoel-pimentel-e-dairton-bassi-agile-alliance-brazil
<iframe width="560" height="315" src="//www.youtube.com/embed/3oBkaHCzsdE" frameborder="0" allowfullscreen></iframe>
<br />