Postagens

Comentários no Facebook via Graph API

Estou com uma pequena tarefa de replicar a funcionalidade de comentários do Facebook para páginas sem utilizar o plugin social do mesmo. A parte de listar os comentários para uma determinada URL foi relativamente fácil de encontrar , a parte obscura mesmo é conseguir adicionar um comentário. Depois de muito garimpar, encontrei uma gem para ruby chamada Koala que faz boa parte do trabalho pesado (Autenticação e Manutenção dos requests). Essa gem possui um método put_comment  que teóricamente inclui um comentário em um objeto a partir do id, mas como saber o id de uma url no Facebook? Complicando mais ainda, como criar um registro desta url caso não exista no Facebook? Acabei chegando na seguinte receita: Encontrar o id de uma url: FQL : "select comments_fbid from link_stat where url ='[URL]'" Criar um objeto no Facebook quando o id não existir: POST em https://graph.facebook.com com os parâmetros id = [URL], scraper = true Ainda estou procurando uma...

Elasticsearch e Mac OSX Mountain Lion

Minha combinação de Elasticsearch 0.17.7 e Java 1.6.0_37 não se deram muito bem e pararam de funcionar. Depois de encontrar este post do Matthew Deiters  http://coderwall.com/p/aphwwq , compreendi o problema. A versão do Java requerida para o ES 0.17 é 32 bits e o OSX esta rodando a versão 64 bits. Para forçar o Java a rodar na versão 32 bits sem possuir o painel Java Preferences é necessário passar a opção -d32 para o executável do java. Como possuo uma instalação utilizando brew, editei o arquivo /usr/local/Cellar/elasticsearch/0.17.7/bin/elasticsearch.in.sh e adicionei a seguinte linha: JAVA_OPTS="$JAVA_OPTS -d32" E tudo voltou ao normal :-)

CFTV com Zoneminder e Linux

Imagem
Resolvi a algum tempo instalar um sistema de vigilância para minha casa. Por acaso acabei encontrando no DealExtreme uma placa de captura para câmeras de vigilância que, pelos comentários, era facilmente configuravel no Linux. Tomei então a iniciativa de pesquisar um pouco e montar meu próprio sistema de monitoramento e gravação utilizando o Zoneminder . Uma das primeiras dúvidas foi qual sistema utilizar, qual *nix flawor, qual hardware, quanto de espaço para armazenamento, qual a necessidade real de processador, etc. Muitas dessas perguntas ainda não possuo uma resposta ou regra básica para determinar, mas neste texto vou descrever os passos que tomei para deixar o sistema funcional. HARDWARE: Como motor do sistema, após ver diversos comentários do tipo "utilize seu velho pc", resolvi adotar uma motherboard de "baixo consumo". Por não ser algo comum foi um pouco problemático escolher, mas acabei encontrando uma VIA PC1 da Phitronics na loja da JNE Info...

Diretórios vazios com o Git

Diversas vezes eu precisei manter um diretório vazio na árvore do projeto mas como o Git é um gerenciador de conteúdo, um diretório vazio não pode existir no repo. Uma solução simples é criar um arquivo .gitignore dentro de cada diretório que você queira manter e depois adicionar todo o conteúdo da pasta, com excessão dos arquivos .gitignore, ao .gitignore padrão. Exemplo: Digamos que você quer manter a pasta public/uploads/images vazia no repo. Crie um arquivo .gitignore no caminho public/uploads/images/.gitignore Edite o arquivo .gitignore padrão (na pasta raiz do projeto) e adicione as seguinte linhas: public/uploads/images/* !.gitignore A ordem das regras é importante. Efetue um commit destas alterações adicionando os arquivos .gitignore e pronto. *Nota: Caso já existam arquivos no diretório que tenham sido comitados anteriormente, exclua os mesmos com o comando: git rm --cached /caminho/do/arquivo Happy Coding!!!

Arduino - Teste 1

Imagem
Seguindo a listinha de simples projetos para ir me familiarizando com o Arduino, o primeiro projetinho é bem simples, um botão, um led e dois resistores. A idéia é utilizar o Arduino para ler o estado do botão e dependendo do mesmo ligar ou desligar o led. Dei um pequena incrementada para fazer o led piscar enquanto o botão estiver precionado. Incrivelmente, demorei mais para tirar as fotos e fazer este post do que para montar o esquema eletrônico, o código e colocar o mesmo para rodar no Arduino.

Arduino

Imagem
Eletrônica sempre me chamou a atenção. É um pouco trabalhoso dependendo do que se vai fazer, mas como no desenvolvimento de software, com um pouco de emprenho consegue-se construir algo interessante. Em 1994 eu estudava eletro-eletrônica, mas acredito que desde 1996 eu não estudava ou construia qualquer coisa utilizando componentes eletrônicos e ferro de solda. Mais ou menos por acaso, li alguns artigos na web sobre um produto chamado Arduino . O Arduino é um projeto de eletrônica que visa facilitar o desenvolvimento de projetos de eletrônica digital e o estudo da mesma. Existem diversas vantagens em utilizar uma placa como o Arduino para estudar, e as possibilidades são inúmeras, dependendo apenas da imaginação de quem constrói. Tanto que um dos projetos mais interessantes que já vi feito com o mesmo é uma impressora 3D . A lista de projetos que se pode encontrar é grande, com uma variedade espantosa, como pode ser visto na lista de videos do Vimeo que se encontra na url http://vimeo....

Zend_Filter_Hashpath

No passado, tive alguns problemas com o armazenamento de muitos arquivos de imagens em apenas um diretório. Quando o volume ficava muito grande, não era sequer possível listar o conteúdo pelo console. Depois desse episódio, passei a gravar os arquivos em subpastas, mas quase sempre acabava reescrevendo o código que fazia isso. Para solucionar esse problema criei um filtro que denominei Zend_Filter_Hashpath . Ele foi baseado na lógica do filtro Zend_Filter_File_Rename e em parte do código do Zend_Cache_Backend_File. Bom, mais info no repo e no código fonte: https://github.com/renatoaquino/Zend_Filter_Hashpath

Humor de Programador

Quem disse que programadores não tem senso de humor? O comentário abaixo foi retirado de uma resposta do stackoverflow: // // Dear maintainer: // // Once you are done trying to 'optimize' this routine, // and have realized what a terrible mistake that was, // please increment the following counter as a warning // to the next guy: // // total_hours_wasted_here = 16 // Mais no stackoverflow .

TED x SP

A um tempinho eu escrevo ou adiciono links de videos que assisto do TED que acho interessantes. Desta vez estou escrevendo a respeito para avisar que será realizada uma das convenções do em São Paulo . Os palestrantes, como se espera do TED, fazem parte das mais diversas áreas. Entre eles temos Regina Casé atriz e apresentadora, Ronaldo Lemos diretor de Técnologia e Sociedade na escola de direito da FGV, entre outros . Para participar está sendo feita uma triagem questionando sobre o que o "Brasil pode oferecer ao mundo" e "O que o inscrito tem a oferecer ao Brasil", entre outras. Você pode também acompanhar via Twitter em http://twitter.com/tedxsp . Espero que seja tão interessante quanto os demais vídeos que já assisti deste projeto.

A parábola do Git

Resolvi fazer uma tradução livre do texto The Git Parable do Tom Preston-Werner. Boa leitura.... A parábola do Git Git é um sistema simples mas extremamente poderoso. A maioria das pessoas tentam ensinar Git pela demonstração de alguns comandos chegando a um "tadaaaaa.", acredito que este método seja ineficiente. Esta abordagem vai ensiná-lo a usar Git para realizar tarefas simples, mas os comandos irão sempre parecer encantamentos mágicos. Fazer qualquer coisa além do trivial será aterrorizador. Enquanto não compreender os conceitos nos quais o Git é feito você se sentirá perdido. A seguinte parábola vai levá-lo através da criação de um sistema similar ao Git a partir de sua base. Entender os conceitos apresentados aqui é a melhor preparação para alcançar o poder total do Git. Os conceitos em si são bastante simples, mas criam uma imensa gama de funcionalidades. Leia esta parábola do começo ao fim e deverá ter poucos problemas para tornar-se um mestre nos vários comandos do...

Git - entendendo a lógica

Muito bem, git é uma ferramenta fantástica, mas as vezes ficava curioso com o como as coisas funcionavam internamente. Procurando na net, encontrei a The Git Parable , uma historinha sobre o mecanismo interno e como chegou ao que é. Elucidativo demais. Git is a simple, but extremely powerful system. Most people try to teach Git by demonstrating a few dozen commands and then yelling “tadaaaaa.” I believe this method is flawed. Such a treatment may leave you with the ability to use Git to perform simple tasks, but the Git commands will still feel like magical incantations. Doing anything out of the ordinary will be terrifying. Until you understand the concepts upon which Git is built, you’ll feel like a stranger in a foreign land. Para ler com paciência: http://tom.preston-werner.com/2009/05/19/the-git-parable.html

Conficker

O Conficker é um Worm para Windows que está rodando na rede desde outubro de 2008 e tem se tornado a praga da internet. Se seu computador tem dado muitas falhas de conexão sem motivo aparente, pode ser que você esteja sendo hospedeiro do mesmo. Maneira rápida de descobrir? Acesse http://www.confickerworkinggroup.org/infection_test/cfeyechart.html É só observar quantas imagens aparecem na parte superior e comparar com a descrição que vem abaixo. Descobriu que está infectado? Aqui tem links para atualizações da Microsoft: http://en.wikipedia.org/wiki/Conficker#Removal Boa sorte!

mooUrl Ubiquity Command

Brincando com a API do Ubiquity , acabei fazendo este comando para utilizar o moourl de forma similar ao tinyurl. Vamos então ao código: /* * mooUrl command for Firefox Ubiquity extension. * date: 03/04/2009 * author: Renato Aquino <renato.aquino@gmail.com> * add with <link rel="commands" href="mooUrl.js"/> to your page */ C mdUtils. C reateCommand({ name : "moourl" , takes : { "url to shorten" : noun_type_url} , icon : "http://moourl.com/favicon.ico" , description : "Replaces the selected URL with a <a href=\"http://moourl.com\">MooUrl</a>" , author : {name : "Renato Aquino" , email : "renato.aquino@gmail.com" } , license : "GPL" , baseUrl : "http://moourl.com/create/?source=" , preview : function ( pblock , urlToShorten ){ pblock.innerHTML = "Replaces the selected URL with " , jQuery.get( this .baseUrl + urlT...

Linux counter

Imagem
Já havia me esquecido que o Linux Counter continua funcional!!! Quem mais tem?

Zend Framework

Como trabalho bastante com PHP, já havia postado anteriormente minha opinião sobre o framework Codeigniter e Symfony , agora é a vez do Zend Framework . Tal qual o esperado de uma empresa como a Zend, este framework é bastante maduro e amplo. Um dos pontos distintos que notei é o acoplamento fraco entre as classes do mesmo, ou seja, uma parte não depende necessáriamente da outra para ser utilizada. Caso o programador opte por seguir a estrutura padrão e o modelo mvc do mesmo, as classes devem ser conectadas para realizar as tarefas que o mesmo deseja. Como destaque de classes totalmente independentes cito o Zend_Validate e o Zend_Form . Você pode utilizar as classes do Zend_Form e do Zend_Validate em qualquer script PHP, mesmo que este não utilize mais nada do Framework. As desvantagens que encontrei começaram pela documentação. As APIs estão pouco descritas e o guia de referência não cobre todo o pacote de classes. Quanto ao design do projeto, acredito que o único problema que en...

Linux e o mundo das versões

Neste tempo que estou desenvolvendo com C++ tenho trabalhado com diversas versões de software e, ultimamente, a palavra "versão" tem sido um problema para quase tudo. Apenas para citar um exemplo, vou comentar sobre o sqlite . Estou desenvolvendo um software para uma base CentOS5 , ou seja, estou limitado a atualizar algumas coisas que a base do sistema depende. Como o yum é dependente do sqlite, não posso atualizar a versão do mesmo da 3.3 para a atual 3.6.11 . O que eu perdi com isso já que ambas são da versão 3? Suporte a mutexes , prepared statements melhorados e tempo de desenvolvimento. Agora coloque na lista outras bibliotecas como libvmime , libarchive , libsmbclient , google-ctemplate , gtest , etc. Ainda bem que para facilitar minha vida, tenho utilizado ferramentas como autoconf , automake e libtool ... mas dessas eu falo depois. ;)

Wrapper para SQLite em C++

Tenho codificado uma série de pequenas bibliotecas para um produto e como BD para as configurações estamos utilizando o SQLite . O maior problema encontrado foi utilizar a API propria do SQLite , que embora até relativamente simples, mostrou-se complexa na hora de fazer uma simples consulta. Para facilitar as coisas estive pesquisando por classes wrappers e encontrei o CppSqlite . O site tem um exemplo bastante completo do uso. Assim que eu testar o mesmo com mais profundidade vou postar aqui minhas impressões a respeito.

News

Report um pouco atrasado mas lá vai. Deixei meu cargo de "Analista de Suporte" na Rádio Panamericana S/A para ingressar na equipe de desenvolvimento da BluePex Security Solutions . Essa mudança não foi apenas de empresa e cargo, mas inclui uma mudança de cidade também. Deixei a loucura de São Paulo para tentar a vida na cidade de Limeira . Acredito que terei uma série de desafios novos, com o tempo vou reportando.

Projeto 10^100 do Google

Tudo bem, eu não tenho que anunciar porquê daqui a uma semana todo mundo vai estar falando disso, mas lá vai. Para comemorar 10 anos o Google está lançando o projeto 10^100 (10 para os 100?). Basicamente a idéia é pedir a sua idéia do que pode ser benéfico para ajudar os outros e com os esforços conjuntos de todos, após selecionar as melhores idéias, implementar o mesmo. O tema é amplo demais, e nem sei se consigo explicar direito a idéia. Para ler mais a respeito: http://googleblog.blogspot.com/2008/09/project-10100.html Site oficial do projeto: http://www.project10tothe100.com

Curso de Metodologia de Programação

Andei perdendo um tempinho para baixar e colocar em execução no meu iPod os vídeos do curso de metodologia de programação publicados pela universidade de Stanford , mas está valendo a pena. O curso tem o foco em metologias e não em uma linguagem em sí, embora ensine Java para usar como ferramenta no desenrolar do mesmo. Logo no primeiro vídeo o professor Mehran Sahami explica muito bem o nível de conhecimento necessário para assistir as aulas e resume-se a identificar se o computador está ligado. Até onde assisti, o curso explica de forma bastante intuitiva vários conceitos de programação. Cobre rápidamente diversos tópicos, incluíndo um pouquinho de história, programação Top-Down, conceitos de OO , etc. Tudo de forma muito simples, fazendo parecer algo trivial e causando vários insights. Quem deseja aprender Java ou melhorar seu conhecimento teórica sobre programação pode perder um tempinho que não vai se arrepender. Infelizmente não encontrei legendas para os vídeos, senão poderia f...