Bash ‘must know’ tips
July 13, 2010, 1:08 am
Filed under: nerd, open source

Usually I read a lot of bash tips, codes, snippets, but some tips are hard to find, let see 2 tips:

Read Line

The ideia is, read each line of a file using bash, some people use terrible ways to do this job.

Bash has a simple way, $(< filename)

echo $(< file.txt)

Apparently the command did’n work, but the fact’s, the command worked, but printed line by line without ‘\n’.

This for show how to work with each line.

for i in $(<file); do echo $i; done

Rename only the extension

This is simple, some tasks need a in file and a out file, the two files can be different, if we need a ‘for’ we need create a good number of files.

Instead of create something like foo.txt and foo.txt.xml, you can create one foo.xml.

Let’s use ${//}  to improve your  work.

$variable =
echo ${variable/foo/bar}

Inside a for, is awesome:

for i in */*.xml; do xml2xsd $i ${i/xml/xsd}; done


Quick and Dirty: A Mercurial Server Under Snow Leopard
June 16, 2010, 4:05 am
Filed under: mac, mercurial, snow leopard, tutorial

This is a fast tutorial to set up, quick and fast, a mercurial server at Snow Leopard using Apache and cgi(the dirty party).

We need:

  1. One apache server, we’ll use the apache shipped with Snow Leopard
  2. Install the mercurial
  3. And the CGI script provide by Mercurial

First, install the mercurial, I used the macports version

sudo port install mercurial

Second, configure the httpd.

Create /etc/apache2/extra/httpd-hg.conf

ScriptAliasMatch        ^/hg(.*)        /var/hg/hgwebdir.cgi$1 #the last one is the the cgi file location
<Directory /var/hg>
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile /var/hg/.htpasswd # the user file
Require valid-user
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AllowOverride all
AddHandler cgi-script .cgi

Include at /etc/apache2/httpd.conf

Include /etc/apache2/extra/httpd-hg.conf

Third, create the repository, I’m using /var/hg.

sudo mkdir -p /var/hg/repos

Create the cgi configure file hgweb.config at /var/hg

repos/ = repos/
style = gitweb

Download the cgi file from and put at /var/hg

Uncomment the follow lines at hgwebdir.cgi and put the python location:

import sys
sys.path.insert(0, "/System/Library/Frameworks/Python.framework/Versions/2.6/bin")

Create the .htpasswd to authenticate users
htpasswd -c /var/hg/.htpasswd user

At /var/hg/repos, create a repository
hg init /var/hg/repos/<repository-name>

Edit the hgrc under /.hg
push_ssl = false #allow push using non-ssl connection
contact = user
description = teste
allow_push = user user2 #user allowed to push, must exist at .htpasswd

Do not forget to change the permissions at /var/hg to user _www and group _www

sudo chown -R _www:_www  /var/hg

Start the apache server

sudo apachectl -k start

Now you have one repository, you can access using

More info at

February 11, 2009, 2:52 am
Filed under: Uncategorized

Big changes, new city, strange job, nice coworkers, new stuff, old friends

The only problem, my girlfriend lives far, far way 😦

Como utilizar o Mascaramento de pacotes para descobrir as causas de um downgrade.
August 25, 2008, 12:33 am
Filed under: gentoo, gentoobr, nerd, open source

Uma das coisas mais comuns no uso do gentoo, principalmente quando mistura pacotes estáveis, testings e unstables (como eu costumo fazer), é o downgrade de algum pacote para alguma versão anterior sem uma razão aparente, como o downgrade de uma versão estável para uma antiga versão.

Isso ocorreu comigo quando fui realizar um emerge -NDuav word:

hellboy ~ # emerge -NDuav world

These are the packages that would be merged, in order:

Calculating world dependencies... done!
[ebuild     UD] dev-util/bzr-1.1 [1.5] USE="bash-completion -curl -emacs -sftp -test" 3,346 kB
[ebuild     U ] app-text/poppler-0.8.6 [0.8.5] USE="jpeg zlib -cjk" 1,435 kB
[ebuild     U ] app-text/poppler-bindings-0.8.6 [0.8.5] USE="cairo gtk -qt3 -qt4 -test" 0 kB

Total: 3 packages (2 upgrades, 1 downgrade), Size of downloads: 4,781 kB

Would you like to merge these packages? [Yes/No]

Vejam o caso do bazaar (dev-util/bzr), mas acontece que a versão 1.5 é uma versão estável como aponta o eix:

hellboy ~ # eix dev-util/bzr
[I] dev-util/bzr
Available versions:  0.17 1.1 ~1.3 ~1.4 1.5 [M]~1.6_rc5 {bash-completion curl emacs sftp test}
Installed versions:  1.5(07:43:31 PM 08/23/2008)(bash-completion -curl -emacs -sftp -test)
Description:         Bazaar is a next generation distributed version control system.

A razão deste comportamento é sempre por causa de algum pacote já instalado ou que vai ser instalado, eu acho que a maneira abaixo a mais simples para descobrir qual o pacote esta forçando o downgrade.

Primeiro eu mascaro o todas as versões abaixo da versão já instalada do programa que esta sendo forçado o downgrade, no caso, todas as versões do bazaar abaixo do 1.5.

sudo echo '<=dev-util/bzr-1.4' >> /etc/portage/package.mask

Feito isso, refaço o comando que originou o pedido de downgrade e vejo o resultado:

hellboy ~ # emerge -NDuav world

These are the packages that would be merged, in order:

Calculating world dependencies /
!!! All ebuilds that could satisfy "=dev-util/bzr-1.1*" have been masked.
!!! One of the following masked packages is required to complete your request:
- dev-util/bzr-1.1 (masked by: package.mask)

For more information, see MASKED PACKAGES section in the emerge man page or
refer to the Gentoo Handbook.
(dependency required by "dev-util/bzrtools-1.1.0" [installed])

!!! Problem resolving dependencies for dev-util/bzrtools
!!! Depgraph creation failed.

Dai eu observo que o responsável pelo downgrade é o pacote dev-util/bzrtools, que consta com todas as versões consideradas como instáveis:

hellboy ~ # eix bzrtools
[I] dev-util/bzrtools
Available versions:  ~0.17.1 (~)1.1.0 ~1.3.0 ~1.4.0 ~1.5.0
Installed versions:  1.1.0(02:34:38 AM 02/06/2008)
Description:         bzrtools is a useful collection of utilities for bzr.

Como é um caso de pacotes instáveis, uma maneira seria apagar o pacote instável ou utilizar a keyword, como eu estou querendo aprender mais do bazaar, prefiro arriscar utilizar o pacote instável.

sudo echo '=dev-util/bzrtools-1.5.0 ~*' >> /etc/portage/package.keywords

Com isso elimino a fonte do downgrade e refaço o meu comando sem medo de downgrades :-D.

hellboy ~ # emerge -NDuav world

These are the packages that would be merged, in order:

Calculating world dependencies... done!
[ebuild     U ] dev-util/bzrtools-1.5.0 [1.1.0] 82 kB
[ebuild     U ] app-text/poppler-0.8.6 [0.8.5] USE="jpeg zlib -cjk" 1,435 kB
[ebuild     U ] app-text/poppler-bindings-0.8.6 [0.8.5] USE="cairo gtk -qt3 -qt4 -test" 0 kB

Total: 3 packages (3 upgrades), Size of downloads: 1,517 kB

Would you like to merge these packages? [Yes/No]


What Color Is Your Mind?
April 24, 2008, 1:59 am
Filed under: nerd

Your Mind is Green

Of all the mind types, yours has the most balance.

You are able to see all sides to most problems and are a good problem solver.

You need time to work out your thoughts, but you don’t get stuck in bad thinking patterns.

You tend to spend a lot of time thinking about the future, philosophy, and relationships (both personal and intellectual).

What Color Is Your Mind?

batch scanning
April 21, 2008, 4:03 pm
Filed under: nerd, open source

As vezes é necessário copiar uma quantidade bizarra de arquivos, uma maneira simples de colocar em batch esta tarefa.

 1 #!/bin/bash
 3 device="hpaio:/usb/Photosmart_C3100_series?serial=BR73NGQ13X04KV";
 5 while true;
 7     do if [[ -a stop_file ]];
 8         then break ;
 9     fi;
11     echo "scanning" ;
12     name=`date +%s` ;
13     scanimage -d $device -p >$name.pnm;
15     convert $name.pnm $name.jpg;
16     rm $name.pnm;
18     echo "sleeping" ;
19     sleep 10s;
21     do if [[ -a stop_file ]];
22         then break ;
23     fi;
25 done

gtk and cedilla, a big brazillian problem
November 4, 2007, 4:00 pm
Filed under: gnome, open source

One of the mostly annoying thinks about gtk is ‘ç’, especially when you are a Portuguese speaker and use US keyboard + gtk, this is because someone on the past made this choice

at us-intl keyboards, acute+c = ć

I’m not arguing against Polish, Bosnian, Croatian or Serbian, but is a stupid choice when we compare the use of ç in the Latin World (Brazil, France, Spain, Portugal, etc) , even English has some ç.

My way to solve that is simple.

diff gtk.immodules.old /etc/gtk-2.0/gtk.immodules

< "cedilla" "Cedilla" "gtk+" "/usr/share/locale"
> "cedilla" "Cedilla" "gtk+" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa:en"

I hope that, some day, someone will fix that or put at the gtk ebuild a flag like us_latin_cedilla

180 millions of Brazilians will  love it.