Projeto novo: Quasar
Nos últimos dois meses estive trabalhando em quase total segredo num projeto novo para iPads jailbroken. Mais precisamente, estava trabalhando no meu maior projeto (até o momento) para iOS.
Ele se chama Quasar e é um gerenciador de janelas para iPad. É isso mesmo: com ele você pode rodar suas aplicações em janelas, assim como fazemos num sistema operacional de Desktop! É possível redimensionar, mover, fechar e colocar em full-screen uma janela.
É muito mais fácil vê-lo em ação do que tentar ficar descrevendo-o, então aqui segue uma vídeo-demonstração:
E algumas screenshots dele rodando:
O Quasar está disponível na Cydia Store por US$9.99, compra lá! :)
Siri em Português no iPhone 4S

Então a Apple lançou o Siri, o fantástico assistente de voz do iPhone 4S, mas mais uma vez esqueceu dos brasileiros. Conversando com alguns amigos, inclusive gringos, sobre a viabilidade de fazer um port do Siri para Português, a maioria achou que seria difícil, ou até impossível, visto que a Apple colocou bastante protocolos de comunicação em cima do Siri, para garantir a velocidade nos reconhecimentos. E muitos desses protocolos são privados.
Até que na terça-feira a noite, me veio uma idéia. O aplicativo Dragon Dictation, da Nuance, faz reconhecimento de voz, e muito bem feito, por sinal, do Português brasiliero. Por que então não temos o Siri na nossa língua? Talvez devido a uma questão burocrática, talvez devido a falta de agilidade da Apple Brasil, talvez ambos.
Então surgiu a questão: como fazer o Siri detectar áudio em Português, usando como base o reconhecimento de voz do Dragon Dictation?
Todo o trabalho do Siri em Português foi feito usando o SiriProxy, excelente proxy para o Siri desenvolvido pelo usuário plamoni, em Ruby, que redireciona todo o tráfego dos servidores do Siri para o seu computador, permitindo assim, modificá-lo. Mas antes de tudo, precisava conseguir transformar o áudio que o Siri envia para os servidores da Apple em um arquivo de áudio convencional.
Descobri que o áudio é enviado utilizando diversos codecs diferentes para otimizar o tamanho. Consegui transformar todos os bytes enviados para a Apple num arquivo de áudio, mas faltava um comando do ffmpeg ainda para poder torná-lo audível. Com a ajuda do Micael Silva, mestre do ffmpeg ( :P ), consegui fazer isso, e aqui ficam meus agradecimentos a ele! :)
Com o arquivo de áudio que o Siri envia para o servidor, “só” faltava reconhecer o conteúdo dele. Para isso, precisava reverter a API do Dragon Dictation. Liguei o Wireshark, mas devido ao HTTPS utilizado na comunicação, ele não me ajudou muito. Até que o@amagus me deu a idéia de decompilar a API do Dragon Dictation em Java e entender o protocolo, e aqui ficam meus agradecimentos a ele também por essa ideia! :)
Porém, mesmo entendendo a comunicação, ainda passei uma madrugada com problemas de reconhecimento por parte da Nuance. Faltava um certificado de segurança, único para cada aparelho. Mas no final, consegui obter a resposta do significado do áudio.
Com isso, bastava traduzir o áudio para inglês, regravá-lo em inglês, e enviar para a Apple. Mas ainda assim, nem sempre o áudio regravado em inglês, com a API de Text->Speech do Mac OS X, tinha um conteúdo aceitável pela Nuance (muitas vezes o áudio era incompreensível para o reconhecimento de voz).
Então foi necessário usar um pouco de matemática para isso. Primeiro eu gravava o áudio em inglês usando várias variáveis diferentes (velocidade, pitch, etc). Depois, rodava um algoritmo que eu bolei, baseado nas anotações abaixo, para comparar os padrões e calcular quais deles são estatisticamente mais confiáveis.
Basicamente, o algoritmo pega o sinal de áudio, aplica a Transformada de Fourier, faz uma ordenação progressiva das séries harmônicas e compara dois sinais utilizando o método da similaridade do cosseno em dimensão-N.

Sabendo o áudio mais confiável, bastava enviar o novo áudio, agora gravado em inglês, para a Apple, e enviar o resultado para o aparelho, simulando uma requisição normal do Siri.
O resultado é esse:
O hack, no momento, não tem como ser disponibilizado para o público por questões técnicas. Existem umas 10 integrações com diferentes APIs e modelos matemáticos para obter esse resultado, e é muito difícil encontrar uma forma de disponibilizar isso no momento.
Porém, assim que o Jailbreak do iPhone 4S estiver disponível, trabalharei arduamente para fazer o Siri em Português brasileiro funcionar no iPhone 4S, não dependendo assim da Apple para isso! :)
Projeto novo: FaceTrash
De uns tempos pra cá o Facebook vem se tornando mais uma filial do 9gag.com do que uma rede social. As pessoas só postam memes engraçadinhos, piadinhas e coisas do gênero. E isso vem irritando muita gente que acredita que o Facebook é uma rede social. Ponto. Se eu quero ver rage comics, entro no 9gag, se eu quero saber como estão meus amigos, entro no Facebook. E essa diferença tem cada vez mais sumido.
Inspirado pelo post de sucesso que o amigo Izzy Nobre fez no Hoje é Um Bom Dia, resolvi deixar de ficar sentado assistindo a tudo isso e resolvi fazer alguma coisa. E foi no que eu trabalhei na última madrugada: o FaceTrash.
O FaceTrash é um bookmarklet em Javascript que se acopla a interface web do Facebook e elimina grande parte dos posts envolvendo rage comics, 9gag, Jo Suado, Risos no Face, Melhores do Mundo e afins. Dessa forma, você pode focar no que interessa: os seus amigos.
O algoritmo por trás dele procura por padrões nos nomes dos usuários e no conteúdo dos posts. Depois de encontrar esses possíveis posts detestáveis, o script pergunta se o usuário quer excluí-los da página, marcando os posts em vermelho. Então é possível confirmar a ação, removendo os posts da sua página, ou então cancelá-la, fazendo voltar ao Facebook normal.

Para instalar o FaceTrash no seu browser, basta arrastar o link abaixo para o menu de bookmarklets.
Aproveite e ajude a combater essa praga do Facebook ensinando aos seus amigos como limpar o Facebook também.
Observações:
- O FaceTrash não coleta nenhum tipo de conteúdo do seu Facebook. Ele roda somente no seu browser, e nada sai dele.
- Ele não é perfeito. É impossível de detectar certos tipos de conteúdo (como por exemplo uma rage comic que o usuário faz o upload da imagem, logo, não tem nenhum padrão de número de shares/conteúdo)
- O FaceTrash é melhorado o tempo todo. O script foi desenvolvido de forma que possa ser atualizado remotamente, de forma que a medida que eu encontrar novas formas de bloquear conteúdos indesejáveis, a sua “instalação” do FaceTrash já vai conter essa melhoria sem que você faça nada :)
Projeto novo: PhyScroll
Nas últimas semanas desenvolvi um novo projeto para o iPhone, iPod touch e iPad chamado PhyScroll. O PhyScroll é um tweak para iOS que permite ao usuário dar scroll em qualquer aplicativo usando o acelerômetro do aparelho (inclinando-o) ou através dos botões de volume.
É complicado fazer uma descrição exata de como ele funciona, então nada melhor do que uma vídeo-demonstração:
O PhyScroll está disponível na Cydia Store por US$1,99. Compra lá! :)
Designers: I want YOU for my new project!
Acredito que muitos de vocês que me acompanham no Twitter saibam que eu tenho uma porrada de alguns projetos pessoais. No momento, estou trabalhando num projeto interessante e que tem grandes possibilidades de sucesso.
Sobre o projeto em si, posso adiantar que é um potencial concorrente a uma ferramenta que é praticamente única no mundo do Jailbreak e que todos os aparelhos jailbrokens tem. Tire suas próprias conclusões sobre o que é o projeto. :P
Acontece que desenvolvimento não é nada sem uma interface gráfica decente. E é por isso que eu estou escrevendo esse post: estou a procura de designers para fazerem a parte gráfica do meu projeto novo de iOS. Já tenho todos os wireframes prontos. Só preciso de alguém que crie a interface real, de preferência com uma palheta de cores/texturas interessantes.
Quem tiver interesse, mande o portfolio para pedrohfranceschi@gmail.com e eu darei uma resposta oficial.
Obrigado.

