Older blog entries for ebf (starting at number 36)

16 Oct 2010 (updated 25 Oct 2010 at 23:12 UTC) »

Notes on GridFS and MongoDB

Today we made several tests with MongoDB’s GridFS. And, as simple as it is, we had a hard time trying to find detailed documentation and samples on C++ of this monster (on a good way ;) ).

After brushing some bits, groking headers and a very thorough analysis of the C++ driver source code, we got a simple code snippet that stores an arbitrary file on GridFS, and changes its metadata. This is the sample that worked – if you have any suggestions, please comment! :)

Enjoy!

<br />
...<br />
#include "mongo/client/dbclient.h"<br />
#include "mongo/client/gridfs.h"</p>
<p>using namespace mongo;</p>
<p>...<br />
// The file's full path<br />
m_NomeArquivo = ...;<br />
QFileInfo   info(m_NomeArquivo);</p>
<p>...<br />
DBClientConnection  c;<br />
// local connection to MongoDB.<br />
c.connect("localhost");</p>
<p>// Here we "map" GridFS with the prefix we desire<br />
GridFS      gfs     = GridFS(c, "gridfs", "myfiles");<br />
BSONObj  ret    = gfs.storeFile(m_NomeArquivo.toStdString(), info.fileName().toStdString());<br />
BSONObjBuilder  b;<br />
b.appendElements(ret);<br />
// Here we can add any additional information we want<br />
b.append("fileInserted", "0001");<br />
BSONObj o   = b.obj();</p>
<p>// And now we update the document on MongoDB.<br />
c.update("gridfs.myfiles.files", BSON("filename" << retorno.getField("filename")), o, false, false);<br />
16 Oct 2010 (updated 25 Oct 2010 at 23:12 UTC) »

Notas sobre GridFS e MongoDB

Durante o dia de hoje efetuamos vários testes com o GridFS do MongoDB. E, por mais simples que seja, achar documentação e exemplos desse monstro em C++ foi bem complicado.

Depois de escovar bits, analisar headers e analisar o código fonte do driver C++ do MongoDB, chegamos a um exemplo simples de armazenamento de arquivos genéricos no GridFS, alterando o Metadata do arquivo em questão. Esse é o exemplo que deu certo – se tiver alguma sugestão, comment! :)

Aproveitem!

...
#include "mongo/client/dbclient.h"
#include "mongo/client/gridfs.h"

using namespace mongo;

...
// pega o caminho completo do arquivo a ser salvo
m_NomeArquivo = ...;
QFileInfo   info(m_NomeArquivo);

...
DBClientConnection  c;
// conexão com o MongoDB, local.
c.connect("localhost");

// Mapeamos o GridFS com o prefixo que queremos
GridFS      gfs     = GridFS(c, "gridfs", "arquivos");
BSONObj  retorno    = gfs.storeFile(m_NomeArquivo.toStdString(), info.fileName().toStdString());
BSONObjBuilder  b;
b.appendElements(retorno);
// Aqui incluímos qualquer informação que quisermos
b.append("arquivoInserido", "0001");
BSONObj o   = b.obj();

// E atualizamos o registro do metadata no MongoDB
c.update("gridfs.arquivos.files", BSON("filename" << retorno.getField("filename")), o, false, false);
14 Oct 2010 (updated 16 Oct 2010 at 00:13 UTC) »

Back to subversion…

Almost a month ago, I started an experiment here at A&D. We use Subversion (svn) for 5 years already and never thought about switching to something else. But reading so much on the web about git, I decided that we should test it and feel the advantages in person.

As everyone around me knows, my tests usually involve a “deep dive” inside the solution. :) So, we migrated all of our code repository from svn to git. My conclusion: git is great! A formidable tool that helps the developer rethink the work cicle.

But (always a but!), its distributed nature has caused some problems for us, mainly when someone (err, me!) forgets to issue a git push. That’s why we are starting a painfully migration back to subversion.

This does mean we are stopping using git, right? Wrong. With git-svn, we can have the best from both worlds, using git for a local management, and svn for our main repository.

Oh… I really recommend Redmine. I think it’s much better than Trac for project coordination.

Syndicated 2010-10-14 14:25:05 (Updated 2010-10-16 00:09:53) from #include "ebf.h"

De volta a subversão…

A mais ou menos 30 dias iniciei um experimento aqui na A&D. Utilizamos o Subversion (svn) a quase 5 anos e nunca tínhamos pensado em trocar. Mas com tanto burburinho na internet sobre o git, decidi testar a solução e ver quais eram as vantagens.

Como todos que me conhecem, meus testes normalmente envolvem usar totalmente a solução “testada”. :) Migramos todos nossos projetos para git. Minha conclusão: o git é fenomenal. Realmente uma ferramenta que ajuda o programador a repensar seu ciclo de trabalho.

Porém, sua natureza distribuída causou alguns problemas para gente, principalmente quando alguém (leia-se eu) esquecia de dar um git push. Por isso vamos começar uma dolorosa migração de volta para o subversion.

Isso significa que vamos parar de usar o git, certo? Errado. Com o git-svn vamos ter o melhor dos dois mundos, usando o git para um gerenciamento “local” e o svn para o repositório central.

Ah… recomendo muito o Redmine. Muito melhor que o Trac para organização de projetos.

Syndicated 2010-10-14 13:21:17 (Updated 2010-10-14 13:21:18) from #include "ebf.h"

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

Syndicated 2010-09-09 00:51:39 from #include

And we are back…

Antiga marca Maximus

Antiga marca Maximus

Depois de alguns meses ausente (7 para ser exato), voltei ao meu blog. Estive mais atuante no Twitter ultimamente, mas acho que agora passou :)

Nos últimos meses estive completamente imerso nas novidades que a A&D (ex-Soluções, agora Tecnologia) lançou na Exposec 2009. O Maximus 4.0 está sendo um grande marco para a empresa e simboliza uma mudança tecnológica que vai ecoar por um bom tempo no futuro da A&D.

A primeira grande mudança da linha Maximus é sua marca. Antigamente representado pela “estrela”, agora ela é representada pelo “escudo”:

A nova marca nasceu do desejo de revigorar o nome e a identidade da linha Maximus, trazendo visualmente, a nova direção que estamos traçando. Antigamente, algo voltado apenas a segurança eletrônica e detecção, a linha agora seguirá novos direcionamentos. E o que mostramos na Exposec é só o primeiro passo.

Nova Marca Maximus

Nova Marca Maximus

Outra grande diferenças da versão 4.0 para a série 3.X foi o revamp do Maximus Client. A primeira vista tem-se a impressão de uma mudança cosmética, mas é puro engano. Todo o Maximus Client foi redesenvolvido utilizando novas técnicas e frameworks, não sendo aproveitado nenhum código da versão antiga. Some isso com uma interface matadora criada por um dos maiores especialistas em GUI design do mundo, o meu grande amigo Everaldo Coelho e teremos um software não só mais robusto, como mais fácil de usar e extremamente agradável aos olhos:

Interface Mx4 (Mac)

Interface Mx4 (Mac)

E as novidades não param por aí. Pretendo continuar mostrando mais nos próximos dias. Qualquer coisa, estou a disposição.

Abraço!

Eduardo.

Syndicated 2009-05-18 16:26:42 from #include

Uma breve discussão sobre tempo perdido…

Eu gosto muito do John Hodgman (não só por causa da Apple, mas por causa do Daily Show). Ele fez uma apresentação na TED muito boa… assistam! Muito inspiradora.

Abraço!

Eduardo.

Syndicated 2008-10-24 22:09:35 from #include

24 Oct 2008 (updated 25 May 2009 at 14:14 UTC) »

Mais um final de ano!

PS: Estou com esse Post pronto a quase 1 mês… mesmo assim, lá vai!

Depois de 4 meses sumido deste weblog, venho aqui desejar a todos os amigos, familiares, clientes e distribuidores um grande obrigado!

A um ano atrás (mais ou menos) eu estava muito contente. O projeto que começamos em 2001 (na verdade começou muito antes, porém…) estava crescendo muito acima das expectativas e previsões. Sinceramente não acreditava que 2007 seria ainda melhor. E foi.

  • Estamos 12x maiores do que éramos em 2006.
  • Começamos 2007 com 5 distribuidores. Continuamos com o mesmo número, porém vários foram substituídos e a qualidade e dedicação dos atuais superaram qualquer previsão minha. Principalmente por se tratarem de distribuidores de equipamentos, e não de software.
  • Final de 2006: Maximus versão 3.1. Final de 2007: Maximus versão 3.5. Tivemos mais de 140 atualizações, sendo quase 35 novas funcionalidades no sistema. E …
  • 2006: Promessa da nova Intranet. 2007: Nova Intranet já é passado :)
  • A carteira de clientes aumentou muito esse ano. Queria pelo menos dobrar a de 2006. Conseguimos aumentá-la em 4x.
  • Nosso corpo técnico aumentou ainda mais. Continuamos investindo bastante na capacitação de escala internacional de nossos técnicos.
  • E eu achava que estava interoperável em 2006… caramba. Hoje já temos suporte a GPRS/IP de mais 4 marcas, suportamos mais 6 receptoras (inclusive diretamente por IP) e quase 10 novas soluções de monitoramento de imagem. É mole? :)
  • Ganhamos o prêmio TOP GUS 2007.
  • Terminei 2007 com 1 computador. Hoje estou com um Notebook Core2 Duo Intel e uma workstation Core2 Quad Intel, totalizando 6 processadores só pra mim ;) hehehe….
  • Nossa sede literalmente está dobrando de tamanho!

No lado pessoal, comecei a estudar algo que sempre quis: Aviação. Pretendo, em 2008, concluir o curso de Piloto Privado e em 2009, Piloto Comercial. Não pretendo seguir carreira, mas sempre quis pilotar um avião “de fato”. Nos simuladores (principalmente X-Plane e o FSX) estou quase lá. Quero ver no avião de verdade…

Um forte abraço e que venha 2008!

Syndicated 2008-01-16 14:45:36 (Updated 2009-05-24 19:31:13) from #include

25 Jul 2007 (updated 24 Oct 2008 at 23:05 UTC) »

Viagem para POA: Cancelada

Pois é.

Como muitos hoje em dia pelo Brasil, meu vôo foi cancelado. Cheguei ao aeroporto as 06h30 da manhã de ontem, com destino a Porto Alegre. Somente as 11h fomos informados que não iríamos mais. Complicado.

O interessante foi ver o vai e vem do aeroporto. Um vôo em particular deu pena de ver ser cancelado. TAM Curitiba -> Natal. Como disse a Aline: o pessoal já devia estar de roupa de banho por debaixo das roupas de frio e leva um balde de água fria desses. De fato.

Repórteres caçando histórias… Pessoal que devia ter chegado ontem, chegando hoje… histórias de como os aeroportos estão um caos… é isso a aviação comercial hoje no Brasil.

Mas mesmo assim, mesmo assim, quero tirar meu brevê um dia ;)

Um ótimo dia a todos!

Powered by ScribeFire.

Syndicated 2007-07-25 10:33:31 (Updated 2007-07-25 10:33:57) from #include

27 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!