Simple CGI MJPEG Streamer in Bash

Posted by – 30/06/2014

This is mainly just for personal reference; I’m posting here since it may help someone else. I am sending images captured in surveillance IP cameras via FTP to some hosting. This is for convenience, since any cheap surveillance IP camera has this facility. So, how to watch in near-real-time without having to refresh the browser or using some javascript trickery? Also, How to watch using common IPcam mobile clients?

Easy enough: just create a MJPEG stream and use a CGI-capable HTTP server for the job. Some quick hacking (and inotify abuse) gave me the following Bash script:

Now, I just have to figure-out how to kill the process afterwards :-)

Fork me on GitHub

O Movimento Software Livre Morreu. Longa Vida ao Movimento Software Livre!

Posted by – 09/06/2014

Assistindo ao debate “Morreu o Movimento Software Livre no Brasil?”, do FISL15, resolvi compilar diversos pontos que foram marginalmente abordados no debate e que flutuam na minha cabeça há algum tempo, merecendo um aprofundamento nesse contexto.

Movimento Software Livre e Ideologias Alienígenas

O Movimento Software Livre é uma expressão, no âmbito técnico, do anseio natural de liberdade do ser humano. Foi o precursor de diversos movimentos de cultura livre que, de certa forma são mais antigos ainda que o próprio Software Livre, mas que até então não possuiam ferramentas coerentes para se desenvolver. No entanto, como todo movimento, é habitado por pessoas que têm aspirações diferentes e muitas vezes essas pessoas confundem suas próprias e particulares aspirações com as do movimento, levando a uma “identificação ideológica cruzada”, que acaba associando ao movimento Software Livre diversas outras ideologias de maneira até equivocada.

Embora o próprio Stallman não seja um comunista (expresso por suas ações ao longo da vida, mas literalmente também escrito por ele mesmo), o Movimento Software Livre acabou, em diversos lugares – inclusive o Brasil – sendo capturado pelo espectro da esquerda política. E isso só fez mal ao Software Livre. (Seria igualmente ruim se fosse capturado pela direita política, veja bem.) Isso fica amplamente evidente quando fazemos o contraponto entre Open Source e Free Software e identificamos isso como um embate entre capitalismo e comunismo, como foi feito no debate em questão. Nenhuma discussão poderia ser menos produtiva e mais equivocada do que essa! Especialmente porque não existe nenhuma incompatibilidade entre as 4 liberdades que definem um Software Livre e os 10 pontos da definição de Software de Código Aberto.

Exatamente. Para que fique bastante claro vou colocar em um parágrafo separado: não existe nenhuma incompatibilidade entre as 4 liberdades que definem um Software Livre e os 10 pontos da definição de Software de Código Aberto. Portanto, não há um conflito conceitual entre Software Livre e Software de Código Aberto, muito menos um conflito semelhante ao embate capitalismo versus comunismo.


Goodbye Jorte, hello ownCloud

Posted by – 30/05/2014

After I migrated from Palm Treo to Android phones, I was very displeased with the Calendar application. I don’t use Google Apps (my phone is AOSP), which only leaves me with (argh!) Exchange for online-synced calendar. Besides, the first incarnations of the Calendar application in AOSP were barely usable.

So I just went for a standalone free (as in beer) Calendar application named Jorte, which is really good. Recently, I’ve been investigating ownCloud and CalDAV, and decided to review the state of current AOSP Calendar application. To my surprise, it have evolved a lot (to the point of being usable), but still no CalDAV sync.

So I found DAVdroid in F-droid repository, which is an interesting application that can register a CalDAV account that is usable by AOSP Calendar. So, now, I am able to use ownCloud calendaring, ownCloud CalDAV server and my phone, and, since free-as-in-speech software is much better than free-as-in-beer, I decided to ditch Jorte.

But Jorte doesn’t have an option to export its data to an Icalendar file (why make things easy, right?). All it spits is a csv-file as a backup. (As a side-note, Jorte seems to intentionally not provide an Icalendar-file export option… as the ‘rrule’ field they use in the csv follow the same rules Icalendar standard dictates, they might be using it internally). Since this is pretty trivial stuff, I just coded a Ruby script to do the job. I released it to my github repo, just in case anyone else finds it useful.

ConQuest DICOM Server

Posted by – 03/04/2014

I’ve been busy with Real Life™ lately, but I managed to get some time to work on ConQuest DICOM Server packaging for Debian. I’m almost reaching upload state. The work can be checked at GitHub.

It’s compiled for i386 in an unsigned APT repo, if anybody wants to play with it before I upload. These are the sources:

# Wheezy
deb spectra-wheezy/
# Sid
deb spectra-sid/
# Ubuntu Saucy
deb spectra-saucy/

Enjoy it.

Nostalgia time

Posted by – 03/12/2012

My parents will soon be moving to a smaller home, so they are digging up a lot of stuff of my sister and mine past. Among my stuff, they just sent me my first computer (which was, of course, the first computer of my father’s company I was using in the spare time). I couldn’t believe they kept that. It was an Unitron Apple ][ 64K!! I just had it cleaned and took this picture:

Due to the closed informatics market Brazilians were subject to at the time, it came with a full set of manuals in Portuguese which taught me how to code in Basic (I was too young to learn English at the time)… Interesting how a bad policy like that can result in a Good Thing™ sometimes. :-)

Is it just me or does this picture made you nostalgic also?

Decision-making by flipping a coin

Posted by – 20/11/2012

Yesterday I was discussing in an online board how to break a decision deadlock in life. There are real deadlocks, but I don’t think they are very frequent… most of the time, doing a pros and cons analysis is enough to decide what to do. Sometimes our judgement is impaired by lack of objectivity or by our inability to see things from a different point of view (it’s hard to think straight when everything seems to be falling apart around you); talking to a friend or relative can help in these situations.

But there are times when nothing helps. When you are really stuck and nothing seems to break the deadlock. At these times I give it one or two days, sleep on the issue and if I cannot come up with a decision I assume the alternatives are equivalent to me and just flip a coin.

Of course, this will do if you can postpone the decision, giving yourself (and your inner self) time to decide on a course-of-action. But is there some way to speed up the process? During the discussion, someone came up with a rather smart quote by Rothstein character in Boardwalk Empire TV series:

Flip a coin. When it’s in the air, you’ll know what side you’re hoping for.

I found it an interesting way to give your inner self an ultimatum: decide or luck will decide instead. I’ve never did it like that, for I would not flip a coin unless it’s my last resort. Being such a clever psychological idea, I doubted it originated in the TV series itself, so I went on pursue of the original idea. I found a Danish poet and mathematician called Piet Hein, who wrote a poem about it circa 1969:


Whenever you’re called on to make up your mind,
and you’re hampered by not having any,
the best way to solve the dilemma, you’ll find,
is simply by spinning a penny.
No — not so that chance shall decide the affair
while you’re passively standing there moping;
but the moment the penny is up in the air,
you suddenly know what you’re hoping.

And also, there are a Donald Duck comic called “Flip Decision” circa 1953 that introduces Flipism philosophy, which supports a rather radical anecdotal variant: make all decisions by flipping a coin.

Piet Hein or Rothstein character idea is much better than Flipism, of course. Does anyone knows any older sources of the same idea?

That’s a lot to do!

Posted by – 07/11/2012

Reading about Michael Stapelberg’s codesearch I bet a lot of people had the same idea. I just had to post a screenshot of it:

It seems we have a lot to fix :-)

Área Software Livre da Campus Party 2013 aceitando propostas de atividades

Posted by – 03/10/2012

CampuX - Mascote da Comunidade da Área SL da CPBREstá aberta a temporada de envio de propostas de atividades para a Área Software Livre da Campus Party do ano que vem. Esse que vos escreve finalmente deixou a curadoria da Área com alguém que entende no negócio e o Paulo Henrique já tratou de lançar uma chamada de propostas de atividade usando uma querida e conhecida ferramenta, o PapersPHP.

Quero convidar a todos a participar da comunidade da Área SL, a enviar propostas de atividade (fique atento, o envio encerra no dia 21-Out-2012) e a participar desse evento que representa uma das maiores oportunidades de misturar a filosofia do Software Livre com as diversas atividades de perfil inovador que somente esse encontro promove.

Zotero and note-taking

Posted by – 24/06/2012

I was looking for an excuse to try Zotero and the perfect opportunity appeared when I got a whole lot of references to group for a month of Magnetic Ressonance studies I am currently taking. I was also pleased to notice it is packaged to Debian.

I am used to note-taking software. Back when I used a Palm m130 (and a Treo 650), I managed a lot of Memos I eventually migrated to Note-Everything in my current Android phone. Zotero, unfortunatelly, is not interfaceable with my phone (or I was still unable to figure out how to do so), but it’s powerful in managing references… beyond simple note-taking.

Is anyone using Zotero in a more ambitious way? I’ve read about people using it to keep large researchs to support fiction and non-fiction book-writing… I also watched some YouTube videos on it. As far as I went with it, Zotero might become an important piece in my toolbox wrt reference keeping, so I was just trying to figure out how many other niches it can fill…

Feliz Dia da Toalha

Posted by – 25/05/2012

A todos os bons fãs de Douglas Adams, minha humilde participação nesse dia:

Soluções mágicas

Posted by – 29/04/2012

Todos somos fascinados por soluções mágicas. É da natureza humana acreditar em magia e existem diversas teorias versando sobre a causa desse fenômeno. Esse post não trata de nenhuma dessas teorias. Quero tratar de outro assunto no qual também parece que as soluções mágicas estão em voga durante muito tempo: a ideia de que, para melhorar a Saúde Pública no Brasil, precisamos de mais médicos.

Essa ideia só pode ser advinda de uma impressionante falta de informação. Já se foram os tempos em que o médico era um “lobo solitário”, que sozinho resolvia qualquer problema. Essa transformação da medicina de uma atividade individual para uma atividade coletiva deve-se a diversos fatores que, sozinhos, já renderiam um livro. Para encurtar a história, basta mencionar o ritmo galopante em que as coisas mudam na Medicina, a quantidade de informação necessária para que um médico esteja atualizado e o progressivo aumento da complexidade do tratamento das doenças. Adicione a isso a descoberta de um imenso “filão” de rendimentos representado pelos processos médicos e você tem a situação em que a Medicina se encontra hoje: nenhum médico quer praticar a Medicia sozinho e sem recursos.

Entendendo apenas superficialmente os motivos acima já é suficiente para compreender por que é tão difícil para um médico em início de carreira decidir praticar a Medicina longe das capitais. Coloque-se momentaneamente no lugar desse médico e imagine que você está indo para um ambiente com menos recursos do que os que você dispunha enquanto estava fazendo a sua formação; você dispõe de menos colegas com quem discutir um caso difícil (muitas vezes, no caso dos especialistas, você está indo para um local em que o único que entende de um dado assunto é você! – o que, de quebra, ainda garante uma quantidade de trabalho muito maior); e sobre cada decisão que você tomar nesse ambiente, você está se arriscando a perder tudo o que conseguiu – incluindo a sua reputação – por um processo desses propostos por “advogados de porta de hospital” (no mínimo perdendo a paz durante longos meses de briga judicial).

No lugar daquele médico, você iria para longe da capital?

No entanto, a população parece comprar a ideia que o governo vende de que faltam médicos no Brasil. Ora! Não faltam médicos! Eles estão, isso sim, mal-distribuídos. Concentrados onde sentem segurança de praticar a Medicina com o padrão de qualidade que a população merece.

Não é uma questão de mercado que se pode resolver aumentando a oferta de profissionais! Tudo o que estamos fazendo ao abrir ainda mais uma faculdade de Medicina é reduzir o ganho (já bastante reduzido) dos médicos que atuam nas capitais. Não se enganem! Ninguém vai sair da capital em busca de melhores salários no interior se isso representar ter de praticar uma Medicina de pouca qualidade ou se isso representar se expor aos riscos que descrevi acima.

Tudo isso serve para mascarar o problema e vender uma solução mágica: ao invés de investir em proporcionar recursos para que os médicos assumam com qualidade postos de trabalho fora das capitais é muito mais fácil colocar a culpa na “falta de médicos” e abrir mais uma faculdade de Medicina (e lucrar todos os benefícios eleitorais que tal atitude certamente trará).

Por isso quero fazer eco ao artigo do ex-Ministro da Saúde Dr. Adib Jatene: abrir mais vagas nas faculdades de Medicina, ou criar novas faculdades, não vai resolver o problema da Saúde Pública no Brasil.

Será que não aprendemos com nossos erros? Por quantos planos econômicos heterodoxos o Brasil teve de passar até adotar o caminho da ortodoxia com o plano Real? Nossos governantes têm uma inegável inclinação pelas soluções mágicas… “basta cortar alguns zeros”… “vamos confiscar as poupanças que a inflação vai cair”. Ora! como disse Mário Henrique Simonsen: “o que só tem no Brasil, e não é jaboticaba, é besteira!”. Essa solução de abrir mais vagas de Medicina é exatamente isso: mais do mesmo. Mais uma solução mágica para um problema real.

Por favor! Vamos tentar ser realistas. Admitir que o problema real pelo qual a Saúde Pública passa precisa de uma solução real é um bom primeiro passo.

Timeout a process in Bash > v4

Posted by – 19/04/2012

Just for reference, this is really useful:

( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec some_command )

Update Apr 20, 2012 @ 16:54: As pointed in a comment by Timo Juhani Lindfors, if “some_command” exits early and the interval is long, another process can reuse its process number and get killed once the sleep runs out. Does anybody know a better way of doing that without using timeout from coreutils (better yet: using just bash)?

Key Signing Party at FISL13

Posted by – 16/04/2012

You know the drill. Official announcement is here (or here in portuguese). Anybody planning to drop by FISL13 should submit a key.

Tem coisas que nem a Philco faz pra você

Posted by – 04/04/2012

Como vocês sabem, troquei de laptop recentemente e descobri que o sistema de recuperação empregava uma partição Debian rodando Partclone Clonezilla, ambos Softwares Livres. Constatei, também, que o código-fonte desses softwares livres não era fornecido junto com a partição, nem era documentado nos manuais que vieram junto com a máquina ou no site da Philco. Na ficha técnica do produto, não há nem menção sobre esses softwares.

Inicialmente não achei nada de mais… Afinal, imaginei que quando contatasse a Philco ela ou iria me fornecer o código-fonte, ou iria me apontar para o site original (segundo bem lembrou o Antonio Terceiro, isso seria insuficiente, mas eu até estava preparado para aceitar isso). Se eles me apontassem para o site do Clonezilla, eu já estaria feliz. Pois bem… nada disso.

Entrei em contato pelo formulário do site… sem resposta. O SAC da Philco não tem email publicado no site, então, entrei em contato com o 0800. O atendente me segurou por 45 minutos antes que eu desistisse. Com o velho e bom whois, descobri um email da Britânia (A Britânia é de fato a fabricante, uma vez que comprou a marca Philco no Brasil), para o qual enviei a seguinte mensagem no dia 28/03/2012:


No dia 07/03/2012 comprei um Notebook Philco 14E-P686WP da Ricardo Eletro (NF n. XXXXXX). Deixe-me adiantar que estou achando uma excelente maquina e estou muito satisfeito com a compra. No entanto, eu naum uso Windows (o sistema operacional que vem por padrao na maquina), e usei a particao principal para instalar o sistema operacional que eu uso regularmente.

Ateh aqui naum temos problema algum. No entanto, percebi que existe uma particao de recuperacao que tem a imagem do Windows 7. Eu decidi manter essa particao (em um futuro, caso eu queira me desfazer da maquina, essa particao pode ser util). Qual naum foi a minha surpresa quando percebi que nessa particao estah instalado um sistema operacional livre (Debian) que executa um aplicativo livre (Partclone) que, por sua vez, recupera o Windows. Aqui eh que comeca o problema…

Tanto o sistema operacional Debian quanto o aplicativo Partclone saum softwares livres. O Debian, possuindo diversas partes licenciadas sob a GPL, assim como o Partclone inteiro eh licenciado sob a GPL. Essa licenca obriga aos distribuidores que fornecam o codigo-fonte, de preferencia junto com a distribuicao (no caso, o codigo deveria vir na particao de recuperacao), ou sob solicitacao do cliente.

Em 15 de marco de 2012, entrei em contato atraves do formulario no site da Philco e naum obtive nenhuma resposta. Hoje, entrei em contato com o SAC atraves do 08006458300, aproximadamente as 14:20, e falei com o Cristian. Esse atendente naum soube me responder e me deixou na espera por 45 minutos (antes que eu proprio desligasse). Como naum encontrei nenhum email da Philco, estou entrando em contato atraves desse email para solicitar o codigo-fonte das ferramentas em software livre que estaum embarcadas na particao de recuperacao, em cumprimento com a licenca sob a qual esses softwares livres saum distribuidos.


Imaginando que algum MUA aceitasse me avisar da leitura, adicionei os headers Return-Receipt-To, X-Confirm-Reading-To, Disposition-Notification-To, Delivery-Receipt-To. Sei que murilo…… a recebeu no mesmo dia e que paulo…… a recebeu no dia seguinte. No entanto, até agora nada! Eles poderiam me responder simplesmente: “é um Clonezilla padrão, só que usamos como imagem a do Windows 7″ (ainda assim eu ia pedir o código)… mas preferiram me deixar sem resposta.

Aparentemente, tem coisas que nem a Philco faz pra você.

Using Gmail anti-spam with mutt

Posted by – 29/03/2012

OK, this is not another post on how to use Mutt and Gmail. This is just to comment on a feature I found in Mutt that was not obvious, and that helped me to stop running my own anti-spam tool.

So, for a number of reasons, my company stop filtering spams. I was setting up dspam to take over that job when I decided that it was just too much pain for a single account. Besides, although I am spammed a lot, I would never possibly be more efficient than Gmail anti-spam, given the load of emails their users classify everyday.

I am not migrating my old emails over to Gmail, though. And I am pretty comfortable with my current email work-flow… I am simply not going to use a webmail (even one as powerful as Gmail). OK, I am using GNOME 3 after being a Fluxbox and Bluetile user, but everything has a limit…

But how to keep the best of both worlds? And, more important, how to do that with minimum disruption of what I already have (my own IMAP server and Mutt managing my account there as spoolfile)? The answer is a little known trick using the “mailboxes” directive in .muttrc.

This directive accepts a fully-qualified imap mailbox address. So I just added something like:

mailboxes 'imaps://[Gmail]/Spam'

and added some shortcuts to save email from my inbox to that mailbox (the same as train-as-spam) and to rescue email from it (the same as train-as-ham):

macro index <F3> ";Wo;Wn;simaps://[Gmail]/Spam\n" "Train as SPAM"
macro index <F4> ";Wo;Wn;simaps://\n" "Train as HAM"

and that was it. In my IMAP machine I got a fetchmail downloading emails from Gmail’s INBOX so I can get trained-as-ham and new emails (all emails arrive first in my Gmail account) into my IMAP server. All my sieve rules are in place and nothing changed in my email work-flow.

It’s been working flawlessly for a week now. The only drawbacks are (1) Gmail knowing everything that arrives to me (not a big deal, since unencrypted emails aren’t private anyway), and (2) not getting the spam-count once Mutt is run: I have to change into that mailbox to log-in to Gmail.

Update: Mar 30, 2012 @ 18:15: I just found out that drawback number (2) above can be fixed by adding the following to .muttrc:

unset imap_passive