mysql 5.6 low memory config for 512MB boxes

to the posterity:
[mysqld]
# memory, so precious
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
# reclaim a lot (A LOT) of precious memory, we are on a t1.micro
performance_schema = off

You’ve forgot one file out of your last commit, didn’t ya?

And now you’ve got 2 commits that were supposed to be one. Fear not!

Add this to your Alias section of ~/.gitconfig:


squash = "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f"

Now you can simply do a git squash 2 to join these last 2 commits together.

homestead 2.0 nfs mounts

So you are using homestead, all fancy with it, to discover later that its slow, really slow.

After some googling around you discover that you can use NFS instead, and a few solutions involve changing homestead code. Not true. You only need to add a “type: nfs” in your mount point config in Homestead.yaml:

folders:
  - map: ~/src
    to: /home/vagrant/src
    type: nfs

batchcropresize

We’ve resuscitated an old, slow and crappy (640×220 (!!!) in 16:9 9″) digital photo frame these days and my wife selected a bunch of photos from various trips we made to put it there, 654 images.

My old experience with that frame was warning me that 10M photos was a NONO, so I searched for a batch resize and crop utility. The batch resize is really easy to find, but not the crop part, so I’ve wrote my little utility for that, with python and PIL.

Testing it with the TV Ive come with another need, the TV doesnt do slideshows with multiple directories so a output format that puts all image files in the same directory preserving the original order in the tree is needed, so this utility have his 1.0 initial public version already working (my photo frame is happily showing photos now) but with a TODO.

Published in github, batchcropresize in https://github.com/sdbruder/batchcropresize. Enjoy.

streaming de áudio ao vivo

Faz vários anos que a IPI Maanaim realiza uma maratona de leitura bíblica, e como a vários anos fazemos, esse ano também vamos transmitir a maratona ao vivo via internet pelo site da igreja, e o assunto do post é a infra-estrutura de transmissão.

A alguns anos que usamos shoutcast no servidor e darkice/darksnow. Esse ano eu atualizei o shoutcast para a última versão estável, 1.9.8. Além disso abandonamos a dupla darkice & darksnow e estou pendente entre 2 soluções: butt ou Nicecast. Butt é multi-plataforma, Windows, Linux e Mac OS X e gratuito, Já Nicecast é somente Mac OS X e comercial (US$ 40). Todos os 2 são garantidamente compatíveis como geradores de stream para o shoutcast, já devidamente testados. A vantagem do Nicecast é o suporte a plugins de filtro para processamento do som: highpass, lowpass, compressores, reverb, etc. AUDynamicsProcessor é excelente para cortar o ruído de fundo entre-palavras, por exemplo. A melhora na qualidade de áudio é significativa com a aplicação racional de poucos filtros.

Caso adotemos Butt, provavelmente usaremos Linux (Ubuntu) na geração do áudio e a máquina Mac OS X fica como plano B. O problema do Nicecast é que não teremos plano B daí :p

Caso alguém tenha interesse em mais detalhes da configuração das 2 pontas (shoutcast no server e o gerador de streaming live na Maanaim), é só avisar, já vi gente batendo cabeça com isso.

UPDATE: No final das contas usamos a solução butt @ ubuntu, com um player flash no site, wavestreaming. No final das contas a solução inteira (butt, shoutcast, wavestreaming) é gratuita, mas não aberta.

UPDATE2: Um pequeno retoque no site com o player flash, desisti do popup (popups are so 90’s) e coloquei o player direto na página. Acabada a Maratona, tiramos o player. Nesse instante 8 clientes simultâneos, com pico de 11.

python 2.6 e concatenação de strings

Nerdeando no Python Brasil [6], alguém comentou que concatenação de strings é um caso que foi otimizado, e resolvemos testar. Não é que foi otimizado, mesmo?


concatena.py:
s = ''
for a in range(1000000):
s += 'a'

lista.py:
s = ''
lista = []
for a in range(1000000):
lista.append('a')
s = ''.join(lista)


python -V
Python 2.6.1

time python lista.py ; time python concatena.py

real 0m0.298s
user 0m0.248s
sys 0m0.046s

real 0m0.292s
user 0m0.250s
sys 0m0.039s