Blog do Neis

Dezembro 13, 2007

Ordenando a saída do ‘ls’

Arquivado em: dicas, linux — danielneis @ 6:45 pm

Queria saber como ordenar a saída do ‘ls’ de forma que eu pudesse ver facilmente quais os mais recentes.
Pensei que teria que fazer alguma mágica com o shell para conseguir algo desse tipo, mas antes de sair
fazendo as coisas na unha resolvi dar uma olhada, mais uma vez, no manual do [ls](http://linux.about.com/od/commands/l/blcmdl1_ls.htm).
E, como era de se esperar, lá estava:

-r, –reverse
reverse order while sorting
–sort=WORD
extension -X, none -U, size -S, time -t, version -v
status -c, time -t, atime -u, access -u, use -u

Huum… muito bom, vamos tentar:

`ls -hl –sort time /var/log/`

E aí temos a listagem do diretório de logs, com o mais novo “em cima” e o mais velho “em baixo”.
Para inverter a ordem, basta fazer

`ls -hlr –sort time /var/log`

Agora, se quiser mais fácil ainda, o segundo exemplo pode ser escrito como

`ls -hlrt /var/log`

Sendo que o `-h` é para imprimir os tamanhos de forma legível (monstrando K, M, G), `-l` para exibir detalhes na lista,
`-r` para inverter a ordem de ordenação (ordem de ordenação? tá…) e `-t` para ordenar por data.
Uma idéia interessante, se você precisar de (ou quiser) uma saída mais limpa é substituir o `-l` por `-go` que,
respectivamente, evitam a impressão do dono e do grupo dos arquivos.
Desse modo, o comando acima, ficaria:

`ls -hgort /var/log`

E é isso aí. Não espero que eu, nem vocês, lembrem de todos esses parâmetros pra sempre, mas alguns deles são bastante úteis
e as combinações podem ser transformadas em aliases para o seu shell.
Então fica a dica. =oD

Samsung SCX-4200 no Ubuntu Gutsy

Arquivado em: howto, linux — danielneis @ 8:51 am

Adaptei esse how-to [desse outro](http://www.elijahlofgren.com/linux/ubuntu/#scx-4100).
Vamos lá.
Você comprou este [belo multifuncional](http://www.samsung.com/br/products/impressoras/multifuncional/scx_4200.asp) e quer instalá-lo no seu Ubuntu, certo? Certo.
Antes de qualquer coisa, certifique-se que você tem as bibliotecas necessárias. Caso o contrário, instále-as.
`sudo apt-get install libstdc++2.10-glibc2.2 libsane-dev sane sane-utils`

Depois disso (ou enquanto isso), vá até o site da samsung e baixe o ‘unified driver’ para linux. [Link direto](http://www.samsung.com/at/support/productsupport/download/FileView.aspx?cttfileid=828690&type=Fax+%26+Multifunctional+Devices&typecode=&subtype=Multifunctional+Devices&subtypecode=&cmssubtypecode=&model=SCX-4200&filetype=DR&language=&LSSI=/at/module/ssi/left/lmenu_faxmultifunctionaldevices_multifunctionaldevices.sec&RSSI=/at/module/ssi/right/rmenu_faxmultifunctionaldevices.sec).
Descompactando o arquivo (com `tar xf nome-do-arquivo`) será criado um diretório cdroot. “Entre” nele e execute o autorun com permissão de root.
`sudo ./autorun` deve funcionar…

Se tudo correu bem, um instalador gráfico será mostrado. Aí é só “Next -> Next -> Next”. Ou melhor, escolher o modelo, dar um nome e uma descrição.
Após você receber a mensagem que tudo foi instalado com sucesso, abra o arquivo **/etc/cups/printers.conf** com seu editor de textos favoritos com permissão de root.
`sudo vi /etc/cups/printers.conf` é uma boa…

Na sessão da sua impressora (provavelmente a única e a default) altere o **DeviceURI** de modo que fique desse jeito:
`DeviceURI file:/dev/usblp0`

Em seguida, reinicie o cups:
`sudo /etc/init.d/cupsys restart`

Se tudo deu certo, você pode imprimir a página de testes da impressora indo no menu **System -> Administration -> Printing**.

Agora vamos ao scanner:
Adicione as seguintes linha ao arquivo **/etc/udev/rules.d/45-libsane.rules**:

# Samsung|SCX-4100
SYSFS{idVendor}==”04e8″, SYSFS{idProduct}==”341b”, MODE=”664″, GROUP=”scanner”

Certifique-se de adicionar essas linhas antes de **LABEL=”libsane_rules_end”**

No artigo original existe um próximo passo que adiciona uma regra de criação de links para o UDEV.
No Ubuntu Gutsy essa regra já existe e adicioná-la mais uma vez causará um erro de ‘Too many levels of symbolic links’.
Então, só adicione a regra a seguir caso ela ainda não exista.
No arquivo **/etc/udev/rules.d/60-symlinks.rules**, adicione ao final:

# Create symlink for usb printer to /dev/usb/lp*
BUS==”usb”, KERNEL==”lp[0-9]*”, SYMLINK+=”usb/%k”
E reinicie o udev:
`sudo /etc/init.d/udev restart`

Se tudo correu certo, as opções de aquisição/importação de imagem tanto no [Gimp](http://www.gimp.org/) quanto no [OpenOffice](http://www.openoffice.org/) devem estar disponíveis.

ps.: no ubuntu dapper funcionou direitinho e de primeira, já no ubuntu gutsy estou tendo problema com o scanner. Assim que conseguir arrumar posto um update.

**!!!update!!! (15/07/2008)**
achei essa solução, já no Ubuntu 8.04. fonte: http://ubuntuforums.org/showthread.php?t=762159
Segue a tradução livre:

O problema é que o driver da SAMSUNG busca por dispositivos USB em `/proc/bus/usb/00*/00*`, porém o Ubuntu 8.04 encerrou o suporte a este diretório e passou a usar o `/dev/bus/usb/00*/00*`. Para corrigir isso, basta editar o arquivo `/etc/init.d/mountdevsubfs.sh` e “descomentar” o seguinte bloco:

#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs “” /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount –rbind /dev/bus/usb /proc/bus/usb

na próxima inicialização do sistema, o scanner deve estar funcionando. Aqui só funcionou como root, no post original foi citado [um patche](http://jacobo.tarrio.org/Samsung_SCX-4200_on_Debian) para o arquivo `/usr/lib/libmfp.so.1.0.1` que permite rodar o `xsane` como usuário comum.

Dezembro 9, 2007

RSpec e rcov: testes e cobertura de código

Arquivado em: ruby — danielneis @ 10:37 pm

Como comentei no post anterior, atualizei meu [Ubuntu](http://www.ubuntu.com) esta semana.
Tentei instalar o [RSpec](http://rspec.rubyforge.org), como é indicado no site, com o simples
`sudo gem install -r rspec`
e tudo correu bem. Ou melhor, quase tudo. A gem estava lá instalada, mas o comando ’spec’ não ficou disponível.
Problemas no PATH? Não… simplesmente o link simbólico que deveria ser criado não foi… e agora, como eu corrijo isso?
Bom, pelo que eu vi, todas as gems estão sendo guardadas no diretório `/var/lib/gems/1.8` que já não é onde ficavam no ubuntu dapper.
De qualquer forma, lá temos o diretório chamado `bin` e, dentro dele, nosso camarada spec.
Então vamos ao que interessa, que é fazer com que o RSpec fique globalmente disponível:
`sudo ln -s /var/lib/gems/1.8/bin/spec /usr/bin`
E voilá!!! Temos o RSpec funcionando mais uma vez…

No meio das minhas buscas por essa simples solução, vi em algum lugar do qual já não me recordo, a existência de uma ferramenta de [Code Coverage](http://en.wikipedia.org/wiki/Code_coverage) para [Ruby](http://www.ruby-lang.org)
chamada [rcov](http://eigenclass.org/hiki.rb?rcov).
Code coverage é uma técnica que mede quanto do código produzido está sendo coberto por testes. Uma boa ferramenta para identificar
código morto. Mesmo com TDD (ou BDD), acabamos produzindo algum código supérfluo e esse tipo de ferramenta ajuda a determinar quais linhas de código
não são executadas quando rodamos os testes.
Sabendo disso, podemos instalar o rcov.
`sudo gem install -r rcov`
Dessa vez tudo certo com os links… pude rodar o rcov sem problemas e ver como andava um dos projetos…
Para rodar apenas os meu testes, e gerar os relatórios em texto plano na tela, usei

daniel@ramona:$ rcov –spec-only -T *_spec.rb
……………………….

Finished in 0.687538 seconds

28 examples, 0 failures
+—————————————————-+——-+——-+——–+
| File | Lines | LOC | COV |
+—————————————————-+——-+——-+——–+
|/var/lib/gems/1.8/gems/rcov-0.8.1.2.0/lib/rcov.rb | 988 | 602 | 3.5% |
|…pec-1.0.8/lib/spec/dsl/composite_proc_builder.rb | 33 | 32 | 62.5% |
|…ems/1.8/gems/rspec-1.0.8/lib/spec/dsl/example.rb | 135 | 110 | 56.4% |
|…0.8/lib/spec/dsl/example_should_raise_handler.rb | 74 | 69 | 27.5% |
|…1.0.8/lib/spec/expectations/extensions/object.rb | 66 | 17 | 64.7% |
|…pec/expectations/extensions/string_and_symbol.rb | 17 | 15 | 40.0% |
|…ems/rspec-1.0.8/lib/spec/expectations/handler.rb | 43 | 38 | 55.3% |
|…b/gems/1.8/gems/rspec-1.0.8/lib/spec/matchers.rb | 166 | 43 | 39.5% |
|…ems/1.8/gems/rspec-1.0.8/lib/spec/matchers/be.rb | 206 | 144 | 29.9% |
|…spec-1.0.8/lib/spec/matchers/operator_matcher.rb | 72 | 55 | 23.6% |
|…ems/rspec-1.0.8/lib/spec/matchers/raise_error.rb | 105 | 71 | 59.2% |
|…ems/1.8/gems/rspec-1.0.8/lib/spec/mocks/space.rb | 28 | 24 | 54.2% |
|….0.8/lib/spec/runner/formatter/base_formatter.rb | 76 | 33 | 6.1% |
|…lib/spec/runner/formatter/base_text_formatter.rb | 130 | 107 | 5.6% |
|…/spec/runner/formatter/progress_bar_formatter.rb | 31 | 27 | 14.8% |
|…1.8/gems/rspec-1.0.8/lib/spec/runner/reporter.rb | 125 | 103 | 10.7% |
|…ems/rspec-1.0.8/plugins/mock_frameworks/rspec.rb | 18 | 17 | 70.6% |
|column.rb | 15 | 12 | 83.3% |
|column_spec.rb | 33 | 27 | 96.3% |
|converter_spec.rb | 242 | 229 | 12.7% |
|index.rb | 23 | 19 | 89.5% |
|index_spec.rb | 34 | 27 | 96.3% |
|table.rb | 39 | 33 | 87.9% |
|table_spec.rb | 84 | 68 | 98.5% |
+—————————————————-+——-+——-+——–+
|Total | 2783 | 1922 | 27.4% |
+—————————————————-+——-+——-+——–+
27.4% 24 file(s) 2783 Lines 1922 LOC

Se omitirmos o `-T`, será criado um diretório chamado coverage e lá alguns gráficos com as informações acima.
Mas espere um pouco, o que são todos esse arquivos aí? Vamos dar um jeito de deixá-los de lado.

daniel@ramona:$ rcov -x gems –spec-only -T *_spec.rb
……………………….

Finished in 0.693775 seconds

28 examples, 0 failures
+—————————————————-+——-+——-+——–+
| File | Lines | LOC | COV |
+—————————————————-+——-+——-+——–+
|column.rb | 15 | 12 | 83.3% |
|column_spec.rb | 33 | 27 | 96.3% |
|converter_spec.rb | 242 | 229 | 12.7% |
|index.rb | 23 | 19 | 89.5% |
|index_spec.rb | 34 | 27 | 96.3% |
|table.rb | 39 | 33 | 87.9% |
|table_spec.rb | 84 | 68 | 98.5% |
+—————————————————-+——-+——-+——–+
|Total | 470 | 415 | 49.2% |
+—————————————————-+——-+——-+——–+
49.2% 7 file(s) 470 Lines 415 LOC

A opção `-x` serve para que o rcov não gere arquivos de informação para os arquivos que fecharem com o padrão especificado, no caso `gem`.

E por hoje é só, pessoal…
Fica aí a dica de um software legal de CodeCoverage para Ruby.

Dezembro 6, 2007

Ubuntu gutsy: fim do xmms, vida longa ao exaile

Arquivado em: linux — danielneis @ 8:24 pm

Essa semana consegui, finalmente, estragar meu [Ubuntu](http://www.ubuntu.com/) [Dapper Drake](https://wiki.ubuntu.com/DapperDrake).
Já passou mais de um ano desde a instalação dele.
Realmente emocionante servir apenas de espectador nos lançamentos do [Edgy](http://www.ubuntu.com/getubuntu/releasenotes/610) e do
[Feisty](http://www.ubuntu.com/getubuntu/releasenotes/704). Resistir até por algum tempo à instalação do
[Gutsy](http://www.ubuntu.com/getubuntu/releasenotes/704),
achando divertido ainda conseguir levar um sistema por tanto tempo, quando hoje temos distribuições que lançam major updates até
mensalmente, e totalmente incompatíveis.
![Ubuntu girl]( http://blogs.floriparug.org/neis/wp-content/uploads/2007/12/ubuntu-girl.jpg)
http://static.flickr.com/108/297395803_dd9856dc42_m.jpg

Bom, instalei o Gutsy facilmente e em menos de 40 minutos tinha o sistema rodando. 2 horas baixando as 138 atualizações, e eu estava de volta.
Um pouco perdido e desinteressado nas novidades já conhecidas do sistema, lembrei do que tinha me feito ainda relutar às atualizações: o xmms não estaria mais lá.
Será preciso vender-se ao comodismo? Finalmente? Vamos ver….
`sudo apt-get install exaile`
- Ok, sim, aham, sim (quem vê parece até windows, Next -> Next -> Next)
Alt+F2 exaile
- Você quer importar algum diretório?
- Sim, por favor
- Quais os diretórios você deseja importar?
- (HUum.. que interface fácil) esse, esse e esse….
- Obrigado, importando músicas
Minutos depois
- Obrigado por aguardar, senhor. O senhor possui 13462 músicas na coleçao”
- Ok, só não conta pros donos do copyright … (pelo menos o [disco do radiohead](http://www.inrainbows.com/) eles não me tiram…)

Bom… eu sinceramente ainda preferia o [XMMS](http://www.xmms.org/) pela simplicidade de ter tudo ‘na cara’ do indivíduo e ser rapidinho. Mas sou obrigado a dizer que o [Exaile](http://www.exaile.org/) é mais organizado, promete mais. E eu ainda não sabia dos atalhos de teclado…
- Que b&%$ , essa budega não tem atalho de teclado
(Para o mouse sobre o botão play)
- AAhh!! &&$@#$ , eu sei que isso é um play, pq não me diz o atalho de teclado dessa joça?
- Huum… tá, vamos pros menus …
(Edit -> Plugins -> Available Plugins – > Global Hot Keys -> *check the box* -> Install/Upgrade)
(-> Installed Plugins -> *check the box* -> Apply)
(-> Configure)
- Opa, peraí…. os atalhos padrão são “zxcvb” pra “previous, start, play/pause, stop, next” igual no XMMS!! Wow, ganhou o cliente…

Agora eu aperto a tecla que tem a “janelinha torta” e uso os atalhos em qualquer lugar do gnome! Só isso já salva o caboclo.
E ainda tem ‘i’ e ‘d’ pra aumentar e baixar o volume, ainda… uma beleza!!! ubuntu-girl

Blog no WordPress.com.