quarta-feira, 30 de janeiro de 2013

Sifteo Virtual Chemestry Lab

Brief explanation about the Virtual Chemestry Lab using Sifteos

On this video we talk a little bit about how this project started and somethings that have been happening to it until now.

A brief explanation about Sifteo Chemistry Virtual Lab Project from Moleque de Ideias on Vimeo.

You can find our code at github

We discuss everything on a open facebook group

Our milestone releases presentations is in our vimeo channel.

The presentation of the project at "Festical de ideias"(Ideas Festival).

The photo album of the first real experiments.

The photo album of the first pH experiences and design studies.

The elf file.

If you don't wat to watch the video here is what we talked about:

Why siftteos?
We noticed that every virtual lab was SUPER boring, with no real interaction between people and chemistry. Sifetos was awesome because we could literraly move things around like "real life" but with power-ups.

Our idea was to make an full chemistry lab where people could do any experiment using different substances and instruments.

We imagine that we could have 1 sifteo for substances, 1 for recipients like becher or erlenmeyer and several for instruments like pH meter, bunsen burner, refrigerator coil, and stuff like this. So we can combine them togheter and make like a super chemistry lab in you house. 

Our first prototype was a very simple experiment using the old sifteos. We had 1 becher sifteo, 1 substance sifteo, 1 bunsen burner sifteo and 1 monitor sifteo.
The goal was to mix the substances by put them together at the becher sifteo and then shake it to mix the substance. But there was a catch, two of the substances only react if the temperature is higher than a specific value, so you have to use the bunsen burner sifteo to do that and monitor the temperature at the monitor sifteo. We have some footage of this. 

In order do start the idea we had to begin from somewhere, so we did a day with real experiments and real kids to see whats is the best way to begin and to have ideas about possible designs. We took a lot of pictures to document this awesome day. At the end we figured out that colors would be great to use.
So our first version was focused in pH metering.

Meanwhile we've been selected as one of the keynoters of "festival de ideias", in english, ideas festival. A 2 days festival where we had the opportunity to show to hundreds of people our demo. There we received a lot feedback and also commercial inquiries.

Not very long after this, Sifteo announced the new generation. So we had to start from scratch. This time focusing more on the graphics engine. As you can see in our new demo we just implemented some of animations and the backend to move substances from the substance sifteo to the bencher sifteo using the pipette sifteo.

Our code is on github

Our goal is to finish the pH experiment to start calling back those commercial inquiries we had at ideas festival so would be great to have more support from Sifteo staff.



segunda-feira, 16 de abril de 2012

Como extrair seus torrents e baixar legendas atuomaticamente usando o transmission

E ae galera,

Para fechar essa série de posts vou mostrar como eu integrei meus dois scripts anteriores, o de unrar automático e de baixar legendas automático com o transmission.

Eu vou usar o mesmo método que usei no primeiro post. Chamar um script ao final do download de um torrent. Da uma lida lá para lembrar como faz.

Bem, meu script é bem simples e nem coloquei no github:



source $HOME/Development/Autorar/post_unrar.sh
source $HOME/Development/Autosubs/search_and_destroy.sh `python $HOME/Development/Autosubs/get_sub_name.py $TR_TORRENT_NAME` $TR_TORRENT_DIR/$TR_TORRENT_NAME

O que ele faz é chamar meus outros scripts passando como paramêtro o nome do torrent certo e a pasta para onde ele foi descompactado. No meu caso coloquei para a mesma pasta do download, pois achei mais prático.

Vocês podem ver que eu uso um script python `get_sub_name.py` para pegar o nome certo da legenda. Esse script está uma merda, mas eu vou colocar ele aqui mesmo assim:

import sys

full_name = sys.argv[1]
short_name = ''
found = False

if full_name.find('.720p') != -1:
    short_name = full_name[:full_name.find('.720p')]
    found = True

if full_name.find('.HDTV') != -1 and not found:
    short_name = full_name[:full_name.find('.HDTV')]


print short_name

Ele simplesmente apaga o nome do torrent até onde tem escrito .720p ou .HDTV. Eu não fiz para o .1080p por que eu nunca baixo nada em 1080p, mas fiquem a vontade para adicionar isso e me mandem pull requests pelo github.

É isso ae, agora é só adicionar ao transmission esse script e curtir a sua preguiça!

Agora eu vou montar um media center automático usando o Plex  que até minha mãe vai conseguir assistir o que quiser.

Como baixar legendas automaticamente do legendas.tv

Fala galera!

No meu último post eu mostrei como eu fiz para extrair meus torrents automaticamente para uma pasta logo após a conclusão dele. Também disse que ia fazer uma forma de automatizar minhas legendas. Então eu fiz e vou mostrar para vocês.

Baixar legendas é sempre muito chato, tenho que entrar no site, buscar o que eu quero, baixar, extrair e mover para onde eu quero. Automatizei essa porra logo! Quem quiser pode ir direto olhar os scripts no meu github. Forks são bem vindos para melhorar o que quiserem.

Vamos lá, vou mostrar como eu faço isso para que vocês entendam e possam fazer também.

Para começar meu arquivo principal é o search_and_destroy.sh. Vou marcar no código as partes e explicar depois:


#Primeira parte

curl -b $HOME/Development/Autosubs/cookies.txt --data "txtLegenda=$1&selTipo=1&int_idioma=1&btn_buscar.x=24&btn_buscar.y=7" http://legendas.tv/index.php?opcao=buscarlegenda > /tmp/legendas/html


#Segunda parte
/usr/bin/python  $HOME/Development/Autosubs/parse_html.py


sleep 1


#Terceira parte
rm -rf /tmp/legendas/legendas.tv
/usr/local/bin/wget --mirror --load-cookies $HOME/Development/Autosubs/cookies.txt -P /tmp/legendas/ http://legendas.tv/info.php?d=`cat /tmp/legendas/legenda_id.txt`&c=1


sleep 20


#Quarte parte
cd /tmp/legendas/legendas.tv
mv info\.php\?d\=`cat /tmp/legendas/legenda_id.txt`\&c\=1 legenda.rar


#Quinta parte
/usr/local/Cellar/unrar/4.0.7/bin/unrar x legenda.rar $2



Primeira parte:
Assim que o script roda ele faz a busca no legendas.tv por um nome passado por paramêtro. Depois ele salva o HTML gerado num arquivo em /tmp/legendas/.
Importante lembrar que é preciso ter o cookie da sessão para isso. Existem alguns plugins para o chrome/firefox que fazem isso, ou basta você usar o próprio curl para pega-lo:


curl --data "txtLogin=USERNAME&txtSenha=PASSWORD&entrar.x=20&entrar.y=6" http://legendas.tv/login_verificar.php -c cookies.txt


O que esse script faz é salvar o cookies num arquivo chamado cookies.txt na pasta onde está esse script
Todo dia você precisa pegar um cookie novo, então vc pode colocar isso no cron ou no próprio script. Eu prefiro no cron.

Segunda parte:
Agora que eu tenho o HTML da página de resultados eu posso "parsear" ele e pegar o primeiro resultado. Como eu pego o primeiro resultado é muito importante buscar pelo nome completo da sua legenda. Como por exemplo minha.serie.s01.e01.
Não inclua o 720p ou hdtv, pois isso confunde o legendas.tv
O código do parse é o parse_html.py:


from BeautifulSoup import BeautifulSoup


f = open('/tmp/legendas/html', 'r')
html = f.read()


soup = BeautifulSoup(html)
table = soup.find('table', {"class": "buscaDestaque"})
onclick = table['onclick']
subtitle_id = onclick[21:53]


f2 = open('/tmp/legendas/legenda_id.txt', 'w')
f2.write(subtitle_id)
f2.close
f.close()



Eu usei o BeautifulSoup para fazer o parse e simplesmente abro o arquivo HTML salvo, acho o id da legenda e salvo o id em /tmp/legendas/legenda_id.txt

Terceira parte:
Agora vem a magia negra. Como o legendas.php usa um redirect no PHP, o curl não consegue baixar o .rar direto, então eu baixo tudo que tem na página. Inclusive um arquivo com o nome de: `info.php?d=ID_DA_LEGENDA&c=1` que na verdade é o .rar que queremos.

Quarta parte:
Agora eu renomeio o arquivo `info.php?d=ID_DA_LEGENDA&c=1` para legenda.rar
Pode parecer loucura, mas funciona. Se alguém conseguir uma forma melhor por favor me mande um pull request!

Quinta parte:
Depois de esperar baixar tudo (sleep 20) eu extraio os arquivos para onde eu quiser.

Finalizando, eu rodo o comando assim:

$ ./search_and_destroy minha.serie.s01.e01 ~/minha/pasta/de/series


e pronto, tudo lá!

No próximo post vou mostrar como eu integrei isso ao Transmission para deixar tudo automático!

quinta-feira, 12 de abril de 2012

Como descompactar torrents automaticamente

Assim como todo bom programador sou muito preguiçoso, por isso tento automatizar tudo que consigo. Meu ultimo feito foi extrair meus torrents automaticamente para a pasta certa.

Já faz um tempo que eu tenho muita preguiça de toda vez que termina um download do torrent eu tenho que ir lá, descompactar e mover para uma pasta separada.

Bem, hoje eu dei um basta nisso. Usando o Transmission como gerenciador de torrent, o unrar e um script simples.

Se vocês também não tem tanta paciência quanto eu vale a pena seguir uns passos básicos e automatizar seus torrents.

Disclaimer: Eu fiz todo o processo no meu Mac, mas também deve funcionar no Linux.

O Script é bem simples e você pode baixa-lo no meu github.

Eis o script com comentários do que cada linha está fazendo. Lembrando que eu não sou muito fluente em shell script, então podem mandar sugestões de refatorações :D



1 #!/bin/sh
#Cria uma pasta em ~/Movies com o nome do seu torrent.
#Você pode mudar onde essa pasta vai ser criada.
2 mkdir ~/Movies/$TR_TORRENT_NAME
#Agora entramos na pasta onde tem o arquivo .rar
3 cd $TR_TORRENT_DIR/$TR_TORRENT_NAME
#Achaei o arquivo .rar
4 CURRENT_FILE=$(ls | grep rar | xargs echo)
#Extrai o arquivo para a pasta que você criou logo no inicio.
# Aqui é importante notar que é preciso usar o caminho completo para o unrar. Dica do Flávio Amieiro
5 /usr/local/Cellar/unrar/4.0.7/bin/unrar x $CURRENT_FILE ~/Movies/$TR_TORRENT_NAME

Essas variáveis TR_... são do Transmission te ajudam a gente a fazer tudo. Além dessas temos ainda:

  • TR_APP_VERSION
  • TR_TIME_LOCALTIME
  • TR_TORRENT_DIR
  • TR_TORRENT_HASH
  • TR_TORRENT_ID
  • TR_TORRENT_NAME

Agora que você já tem o script basta altera-lo caso ache necessário e salva-lo onde quiser.

Depois baixe o Transmission e o unrar e instale os dois.
Dica: Se você usa Mac, vale a pena olhar o brew.

Depois entre no Transmission em "Preferências" -> "Transferências" -> "Gerenciamento"
Lá vai ter um checkbox: "Chamar Script". Marque ele e selecione o script que você criou.

Pronto! Assim que os seus torrents terminarem eles serão descompactados para a pasta que você escolheu.

Uma outra dica irada é que o Transmission também pode ficar checando uma pasta por novoc torrents e adiciona-los sozinho. Basta ir em "Preferências" -> "Transferências" -> "Auto add"

Espero que ajude mais gente. Minha idéia agora é conseguir buscar as legendas sozinho também e depois posso montar um media center irado!!

sábado, 23 de abril de 2011

TO.DOs: Muito além de coworking

Depois de muitas conversas e discussões com diversas pessoas, finalmente a partir dessa 6ª feira ( 29/04 ) vai começar na UFF o TO.DOs. Que irá acontecer na mesma sala onde é o Dojo@UFF, ou seja, No campus da Praia Vermelha, Bloco D, sl 230b!!

A iniciativa começou por que precisavamos mudar como os alunos enxergam o mercado de trabalho e mostrar como a faculdade é importante nesse processo e deveria ser mais ainda! Atualmente, poucos alunos formados, dão algum retorno a faculdade.

A idéia do TO.DOs é mudar isso, criando um espaço novo, com uma dinâmica nova. Para mostrar aos alunos, começando pelos calouros, novas metodologias e oportunidades de trabalho. Além de abrir espaço para que os alunos já formados e que já tem suas próprias empresas possam voltar para a faculdade e ajudar quem ainda está lá.

Para que dessa forma, cada vez mais alunos criem seus próprios negócios ao invés de serem arrastados para trabalhar em grandes empresas, sem nenhum investimento em inovação. Onde não vao ser Ciêntistas e criar algo novo.

Então, junto com pessoal do UFForence, que já tinha uma idéia parecida e depois de uma ótima conversa na Cantareira, fomos a coordenação e conseguimos a sala todas as 6ª feiras!

Mas então, o que vai ser isso? O TO.DOs é um espaço Aberto, Colaborativo e Inclusivo, assim como o Dojo, #horaextra, openspace, etc.
Ele se baseia no Small Acts Manifesto, principalmente em:
  • Give, give, give! - you'll be impressed by how fast things will come back;

Hoje nós temos uma sala que estará a nossa disposição de 11hrs até 20hrs, podendo ir até as 22hrs! Sendo que, de 11hrs até 13hrs tem um Dojo organizado pelos calouros e de 14hrs o pessoal do UFForence vai dar uma palestra. Todos já estão convidados para participar!

Depois começa a novidade. A sala possui diversas mesas, cadeiras, ar-condicionado e internet, ou seja ambiente perfeito para trabalhar/estudar/codar/hackear e esse é o foco disso tudo. Você pode ir pra lá trabalhar em qualquer projeto, estudar algo novo ou apenas programar por diversão, num projeto Open-Source, por exemplo. Mas para ficar tudo mais interessante o TO.DOs tem uma dinâmica própria:
  • Todos que estiverem lá devem primeiramente pegar um post-it e escrever sobre o que estão fazendo, ou seja, "Python", "PHP", "Java", etc. E colar em seus notebooks
  • Com isso, você vai estar se disponibilizando a ajudar a Todos que estiverem ali.
  • E o mais legal, qualquer um pode parear com qualquer um, a qualquer momento!
Então, Todos vão estar o tempo Todo compartilhando idéias, conhecimento e é claro, muita diversão. Qualquer dúvida é só falar!

Então, fica aqui o convite:

Venham experimentar uma nova forma de trabalhar, que vai muito além do coworking. É grátis, só precisa aparecer lá e começar!

O Endereço completo é:

Rua Passo da Pátria, 156 – Boa Viagem – Niterói
Campus Praia Vermelha (campus de Engenharia da UFF)
Sala 230B – Bloco D (prédio novo)

Não esqueçam que lá só temos mesas e cadeiras, então cada um precisa trazer sua própria máquina.

sexta-feira, 15 de abril de 2011

Quer mudar de vida, pergunte-me como

Pra mim, esse deveria ser o título da palestra do Bernardo Fontes sobre o Dojorio, ao invés de "Quer aprender a programar? Pergunte-me como!". Por que apesar de ter melhorado muito minhas técnicas de programação, o que mais me marcou foi como tudo isso mudou a minha vida!

Para explicar isso é interessante mostrar o contexto das coisas. Fui ao meu primeiro Dojorio sem nem saber o que aconteceria ali. Vi um monte de calouros indo para uma sala, disseram que ia rolar programação, então eu fui. Não custava nada.

Naquele primeiro momento eu ainda não podia imaginar o quanto aquilo se tornaria importante pra mim. Achei a dinâmica interessante e tal. Como bom nerd, programar é sempre uma ótima forma de usar meu tempo. Mal sabia eu que naquela sala estavam pessoas com alto nível de conhecimento. Eram comuns, pareciam pessoas quaisquer. Afinal, por que alguém bem sucedido estaria numa faculdade, 19 horas de uma 5ª feira programando com uma bando de alunos?

Durante as conversas do pós-dojo que eu comecei a descobrir as "coisas". Naquela época eu estava prestes a ir trabalhar pela primeira vez como desenvolvedor e mal sabia eu que meu futuro "gerente" estava ali, no Dojorio, programando e bebendo uma cerveja no pós. Sem perceber, o Dojo me abriu portas para começar meu primeiro estágio num lugar sensacional, completamente diferente do que eu escutava sobre o mercado. Esta foi a primeira mudança feita pelo Dojorio na minha vida.

Assim que comecei a trabalhar, o Dojo começou a colocar suas garras de fora e mostrar como ele não era apenas uma dinâmica divertida. Comecei a reconhecer, no trabalho, diversos pontos do Dojo, como o TDD.

Naquela época me indicaram o livro sobre XP do Vinicius Teles, frequentador assíduo dos Dojorio's na UFF. Rapidamente me toquei de que o Dojo ia muito além do que eu podia imaginar. Ele era uma imersão completa em metodologias ágeis. A principio isso parecia muito legal, afinal de contas eu estava vivendo, no Dojo tudo que vinha lendo sobre XP. Mas então tudo começou a "dar errado".

No Dojo eu vivia as experiências do Agile, no pós-dojo discutia e trocava ideias sobre como desenvolver melhor, conhecia melhor a comunidade de desenvolvimento do Rio de Janeiro, muito foda diga-se de passagem. Mas no trabalho não era assim e com isso eu tive a triste decepção ao descobrir que nem tudo eram flores. Mesmo tentando, eu não conseguia levar o "dojo-experience" para meu trabalho, não rolava lá a mesma "paudurecência " que tinha no dojo.

No início eu não entendia por que isso acontecia na empresa. Lá tinha SCRUM com todas as suas reuniões, retrospectivas e papéis, tinha TDD, usávamos Ruby on Rails para desenvolver para web, mas mesmo assim. Cadê o tesão de desenvolver? Confesso que só respondi esta pergunta à pouco tempo. Dai a criação desse blog, com esse nome.

Como bom Dojeiro eu segui fazendo testes e marretando até entender exatamente qual era meu problema, tudo em baby-steps. Nesse meio tempo acabei mudando de empresa. No início, achei que tivesse achado a solução para meus problemas. Tudo parecia melhor do que eu havia feito antes.

Bem, o sonho não demorou muito para começar a acabar, de alguma forma eu voltei para o inicio, tínhamos TDD, SCRUM, pessoas legais e ar condicionado, mas e dai? Ainda faltava alguma coisa.

Mais uma vez, comecei de novo. Junto com Everton Moreth construímos do zero o StartupBase. Lá eu vi outros pontos, como Lean Startups, o Geting Real e vivi a experiência de desenvolver seu próprio produto. Mas mesmo com todos os métodos "Pica das galaxias" de agile que usávamos, ainda não era como Dojo. Novamente, como se fosse um carma em minha vida, as coisas começaram muito bem e terminaram muito mal.

Comecei a pensar que talvez o problema fosse comigo, 3 empresas e 3 decepções. Algo estava errado, e eu continuava em busca da mesma experiência do Dojo.

Enfim, eu consegui responder a minha pergunta: Porque por mais que os métodos ágeis como SCRUM e XP estivessem presentes nas empresas, não tinha o "Dojo-experience"?

A resposta é simples, os métodos são apenas regrinhas escritas. Não são precisos métodos e siglas que só focam no produto. É preciso compaixão entre as pessoas, pois todo o foco do bom desenvolvimento devia ser as pessoas e como elas se sentem. O métodos são ferramentas auxiliares e não devem ser usados como a base de tudo.

Em todos os lugares por onde passei eu sempre vi muitos métodos e pouca compaixão, faltava o atenção em quem está de fato na linha de frente, nós desenvolvedores, e por mais que eu já tivesse lido isso em muitos lugares foi preciso muito tempo, porrada e quedas para realmente compreender o que é isso.

Por isso o dojo mudou a minha vida, graças a ele eu descobri o que são metodos ageis, descobri que não basta só eles para ser feliz onde você trabalha. Descobri que o dojo só é o dojo por que todos que estão ali estão preocupados, uns com os outros, sem medos e preconceitos. Por isso que tanta gente FODA vai ao dojo. Idependente se são os caras pica-das-galaxias. Mas foi preciso que eu passasse por tudo isso, não adiantou tentar pular os degraus, no final das contas é preciso, passar cada teste um a um, vermelho -> verde -> refatora; sempre com baby-steps para conseguir chegar ao objetivo.

Hoje eu trabalho como sempre quis, e espero conseguir trazer cada vez mais pessoas para essa nova forma de desenvolvimento, onde a compaixão entre as pessoas é o melhor metodo ágil de todos!

Venham ao Dojo e como muitos falam, tomem a pílula vermelha e se deixem levar por tudo que ele pode te trazer de bom. Vale a pena sair da sua zona de conforto e mudar, mesmo que isso possa ser muito dolorido no inicio.

Conheçam melhor o Small Acts. E o mais importante Do it, do-it NOW!