Feeds:
Posts
Comments

Archive for the ‘unix’ Category

The basic of the magic: Quilt

If you play with debian packages you probably know what is quilt. This nice tool makes the life of any developer easy. But what about if you don’t have a debian package and still want to play using such magic?
It’s quite simple, believe me :).

First thing you need to do is, of course, install quilt, if it wasn’t already there.

  • sudo apt-get install quilt

Once you done now is time to see what it does for you. But before it let’s configure a simple .quiltrc (this one need to be there in your /home/username/.quiltrc,  OK). Into it add those lines:

QUILT_PATCHES=debian/patches # change debian/patches for patches, by example
QUILT_NO_DIFF_INDEX=1
QUILT_NO_DIFF_TIMESTAMPS=1
QUILT_REFRESH_ARGS="-p ab"
QUILT_DIFF_ARGS="--color=auto" # this is for colors

This file says basically that your patches will be in your patches folder or debian/patches if it’s debian package and that’s the basic you need to know, but if you want dig more in those variables just type man quilt on your terminal, the explanation will be there for sure.

In your source directory, if you already has a patch folder and want to apply the patches are there type quilt push -a everything will be applied.

push_quilt

If you want to check just type quilt applied.

applied_quilt

Here are the main commands you’ll need to know:

  • quilt new name_of_your_patch.patch: create a new patch ‘session’ with the passed name
  • quilt add src/somecode.c: after create a patch you need to add what files you’ll change in order to create in fact the patch.
  • quilt refresh: when you finish to edit those files add into your patch ‘quilted’ you do a refresh. If you cat patches/name_of_your_patch.patch you will see your nice patch there :).
  • quilt pop: it’s used if you want to take off a patch of the stack of patches to be applied, as you can see bellow it also restore the changes you did in the file.

pop_quilt

I think quilt is that kind of tool that make things magic to you. Imagine that you have a lot of patches to apply or a lot of backport changes to do and apply. Quilt gives to you a easy way to manager this task in a quite beautiful mode. And if you are thinking to use it only in your .deb, well I pretty sure you have fun using it in any project/source you dev.

References:

[1] https://wiki.debian.org/UsingQuilt

Read Full Post »

Sometimes you need to delete a bunch of files that has a limit number of lines. One option is to see one by one and rm it. But you can make you day more agile using the follow commands together 🙂

find <directory> -type f -exec sh -c '[ $(wc -l < "$1") -lt 20 ] && rm -- "$1"' inline {} \;

Let’s explain what it does. <directory> is the folder where the files you want to delete are. I set 20 lines as minimum, just change it using your criteria.

find -type f, says that is a file we are looking for. -exec sh says we want to execute some command for each entry we find using find <dir> -type f. In our case  we exec a sh -c. The -c options says to sh<ell> that we will run a inline code without open a file with shell commands. The follows commands into ” says we want to count the number of line in entry file $1 and if it is less than 20 we’ll delete it. inline and {} \; are just some find command conventions.

References:

[1] http://stackoverflow.com/questions/935251/linux-delete-files-that-dont-contain-specific-number-of-lines

Read Full Post »

The magic of crontab

Sometimes you need to auto things, task, whatever. As an example I have access to a local network but first to get into it I need to reach the external network. What happens is that the PC I access via ssh sometimes changes its IP, since I don’t have any control to put it fixed I  need some how to know what is the current IP it has.

So, why not to use crontab in a new way and update my current IP :).

That’s all about the follow bash script

#!/bin/bash

# Gets my current ip and send it over ssh to the server that is also the entry point
# for local network
IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/'`
ssh -p 4422 user_name@server_ip "echo '$IP' > current_ip"

One thing to remember is to use ssh-copy-id, this way you don’t need to type passwd ok 😀

Now, the magic with crontab can be resumed by:

47 11 * * * bash /path_to_script_above/update_ip.sh

But what does mean those numbers and *?

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Easy right?
In order to add a new crontab just type: crontab -e, choice your favorite editor and add some line :v

Read Full Post »

No meu emprego anterior eu tive a oportunidade de ‘brincar’ um pouco com assembly para power 8 e desde então minha curiosidade e vontade de aprender mais e mais asm tem crescido. Mas quais são as vantagens de se aprender asm? Eu diria que uma delas, a maior delas, é que quando você aprende asm você também revisa e aprende um bocado sobre arquitetura de computadores, senão aprende deveria.

Ao programar em asm você lida diretamente com aspectos de como a arquitetura foi desenhada. Em um resumo, em como a cpu é estruturada. E o que isso tem de bom? Bem, o bom de aprender tudo isso é que você se torna um programador mais consciente, eu diria. Além de te dar um background para projetos envolvendo desenvolvimento low level, seja através de embedded systems ou drivers, por exemplo.

Mas bem, deixando de bla bla bla, vou aqui mostrar um exemplo, bem simples, de programação para asm x86_64 onde um código em C faz uso de um função definida em um .s (asm file). Como compilador estou usando o gcc.

#include &amp;lt;inttypes.h&amp;gt;

int64_t soma(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t);

int main(void) {
int c;

c = soma(1,2,4,5,6,7,4,10,6);
return c;
}

No código acima definimos a função soma que recebe 9 parametros e a função main que faz uso dela. Mas, por que nove argumentos?  Acontece que até seis argumentos são naturalmente passados via registradores, em ordem de argumento: rdi, rsi, rdx, rcx, r8, r9. A partir do sétimo os argumentos são passados na stack (na pilha).

A título de exemplo de como codar o .s recebendo os argumentos passados na pilha eu vou exemplificar uma função que somente soma os argumentos passados na pilha.


.global soma

.text

soma:
push &amp;nbsp; &amp;nbsp; %rbp
mov      %rsp, %rbp
mov      0x10(%rbp), %eax
mov      0x18(%rbp), %edx
add      %edx, %eax
mov      0x20(%rbp), %edx
add      %edx, %eax
pop      %rbp
ret

Muito bem, o código acima é o nosso .s para a função soma. Agora vamos entendê-lo.

A linha 1 é basicamente a declaração da função.
A linha 3 determina a seção de código do programa, ou seja, toda vez que você encontrar um .S ou .asm essa seção é onde o código a ser executado começa.

A linha 5 é a nossa função soma. As linhas 6 e 7 são o que nós chamamos de prologo. Em detalhes o que elas fazem é basicamente salvar o stack frame/base pointer (rbp) na pilha e setar a pilha para o registrador do rbp. Assim a gente pode manusear a pilha como quisar, uma vez que o contexto do main vai estar salvo ao ser empilhado. As 8 e 9 pegam os argumentos passados na pilha. Diferente de variáveis locais que são colocados com decremento no rpb, por exemplo -0x8(%rbp), para argumentos nós somamos. O resto é repetição exceto pela linha 13 que retira o contexto salvo anteriormente da pilha.
Mas por que começamos na posíção 0x10 da pilha a pegar os argumentos? A explicação para isso é que na pilha já se encontra o endereço de retorno, na posição 0x0(%rsp)ou 0x0(%rbp), e após o push %rbp, teremos o %rbp na posição 0x8(%rbp). Logo, os demais valores serão acessados após eles, em outras palavras 0x8+8 = 0x10 (16 em decimal), 0x18 (24 decimal) e 0x20 (32 dec).

Para entender um pouco mais, vejamos como os dados são passados via main.

main

Perceba que os primeiros seis argumentos são passados nos registradores de edi até r9d, após isso são passados na pilha.

Lembra que em nosso main temos uma declaração de uma variável local c? Como disse as variáveis locais são armazenadas subindo na pilha, ou seja, subtraindo no %rbp. A linha mov %rax, -0x8(%rbp) salva o valor do registrador rax na posição menos 8 do stack frame, que é a posição do endereço de memória da variável c. Após isso faz uma operação de mover o valor desse endereço para o registrador de retorno rax.

Abaixo, para melhor exemplificar veja a anatomia da stack. Onde EIP é o registrador de retorno, EBP o stack frame salvo na pilha, var são as variáveis logais e param os parametros passados na função.

stack

Source: [4]

Como compilar tudo isso? Simples.:

$ gcc soma.c soma.s && ./a.out

$ echo $?

$ 20

Pra finalizar, queria deixar claro que não sou um programador asm expert, que se algum dos conceitos passados aqui estiverem errados, por favor comenta ai para que eu possa corrigir :).

Referencias:

[1] http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/
[2] http://cs.lmu.edu/~ray/notes/gasexamples/
[3] http://0xax.blogspot.com.br/2014/08/say-hello-to-x64-assembly-part-1.html

[4] http://www.cs.princeton.edu/courses/archive/spr11/cos217/lectures/15AssemblyFunctions.pdf

Read Full Post »

Você acabou de fazer a sua instalação do Archlinux e sente falta de um window manager de responsa? Você assim como eu e a torcida do flamendo odeia o unity do ubuntu?Ah, você está no lugar certo, vamos instalar o i3 no archlinux e ser feliz.

Por ser leve e só precisar de um X11 o i3 é a coisa mais rápida e fácil de se instalar que você vai ver em sua vida.

1) Primeiro passo: no seu arch recém instalado $sudo pacman -S i3

2) Depois de instalar o i3, configure o arquivo .xinit na sua home adicionando dentro dele: exec i3

3) Só com isso você não terá a mágica do i3, você vai precisar de toda parafernalha do xorg. Agora instale os seguintes pacotes (obs: ele vai te pedir pra escolher algumas opções, dê enter e instale todos se estiver com preguiça como eu) : $ sudo pacman -S xorg libgl mesa mesa-demos

4) Agora instale os pacotes: $sudo pacman -S xorg-utils xorg-xclock xorg-server xorg-server-utils xorg-xinit xterm

Se tudo deu certo você poderá rodar o comando: $ startx.  e vê um lindo i3 na sua tela ;).

Viu rápido como quem rouba, hahaha (frase manjada aqui em Natal). Seja feliz e liberte-se do unity+ubuntu!

 

 

 

Read Full Post »

Primeiro de tudo, queria dizer o quanto o novo Ubuntu+unity está ruim. Terrível! Mas agora graças ao i3wm estou satisfeito e feliz. O que me faz perguntar, não seria melhor eu instalar uma distro de vergonha e continuar a usar o i3wm? Sim, seria, e é o que espero fazer em breve. Embora os apt-get faça tudo pra mim são legais atrelados a leveza e ‘fodicidade’ do i3wm – Experimentem!

De volta ao post, hoje ao tentar baixar filmes usando magnet links tive essa surpresa chata de ver o chromium enviando o link para o Opera (wtf  o Chromium fez isso) e lógico bugando e não abrindo nada.

Primeiro, vamos ver como solucionar via Chromium para que isso não aconteça. Depois veremos como o  Opera é foda e não precisa dos mi mi mi do Chromium.

Abrindo o terminal…

  • gconf-editor

2012-12-02-190302_1280x800_scrot

Seguindo o que a imagem demonstra, edite a entrada para magnet. Depois disso, cruze os dedos e seja feliz =).

Já no Opera você vai precisar ir em configurações->preferências->avançado->adicionar. Acrescentar o magnet.  Procurar o aplicativo que você vai usar para abrir os magnetics links e Txraammm, Btw, você não vai precisar setar mais nada além do aplicativo, apenas ele é o suficiente para o seu Opera abrir os links e o trasmission (no meu caso) sozinho.

Então é isso, enjoy it =)

Read Full Post »

Você acordou agora, não tem coisa melhor pra fazer, gosta de super mário, usa ubuntu, ou algo que use grub2? Então, que tal definir um toque para o seu grub. Isso mesmo, e esse toque não é qualquer um, é o do super mário. Eu já defini o meu, você está esperando o que pra brincar também, hehe.

Veja como é fácil, basta digitar isso  aqui no seu terminal:

terminal@user:~$ echo "GRUB_INIT_TUNE=\"1000 334 1 334 1 0 1 261 1 334 1 0 1 392 2 0 4 196 2\"" 
| sudo tee -a /etc/default/grub > /dev/null && sudo update-grub

Agora reinicie sua máquina e veja por si, ou melhor escute, :P.

Fonte: http://www.commandlinefu.com/commands/view/8275/grub2-set-super-mario-as-startup-tune


Read Full Post »

Isso provavelmente já aconteceu com você, se não aconteceu um dia vai acontecer! Comigo ao menos , isso é uma constante, eu mal uso o MySql, e quando vou usar já não lembro qual é a senha de root. Por segurança, crio uma senha completamente diferente do meu root no linux, ai a desgraça tá feita. Mas como diria Seu Creysson, seus problemas acabaram-se, vou mostrar como você vai fazer caso tenha esquecido de tomar o seu remedinho para memória.

  1. Você fez : terminal@user$ mysql -u root -p, e recebeu a mensagem “ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)”, acalme-se e não se desespere você ainda vai ter acesso ao seu servidor BD;
  2. No seu terminal: terminal@user$ cd /etc/mysql ,depois dê um ls , e procure por um arquivo chamado my.cnf. Entre nele com privilégios de super usuário e procure por algo como [mysqld]. Agora acrescente  linha skip-grant-table, saia do arquivo e restart seu servidor mysql sudo /etc/init.d/mysql restart;
  3. Entre no seu servidor mysql, sem especificar user ou password, terminal@user$ mysql. Entrando lá faça conforme  imagem abaixo.
  4. Pronto, agora tenta novamente com seu usuário e não esqueça mais sua senha =].

Read Full Post »

Hi there,

In few days we will have the new Ubuntu in the area, 11.04 Natty Narwhal. Browsing out  in web I found this picture that is update when the days go and it shows us how many days are left to  the new ubuntu.All you have to do is pasting  this code: [url=http://picomol.de/2010/12/23/der-weg-zu-natty-narwhal/][img]http://picomol.de/counter/i.png[/img][/url] in your blog or site and. Just this and is done. Not just this, in picomol.de web site you can found the  same image countdown to Ubuntu 11.11. So, what are you waiting for?

 

Untill the next.

 

Sample:
Ubuntu 11.04 days to go

P.S: I really need improve my english so always that I can I will write in english here. So, please dudes correct my flaws anytime you can.

 

Read Full Post »

Volte e meia encontro nas listas de discussões o assunto: “Qual editor usar para programar em Python?”.  A discussão sempre termina com uns 70 e-mails, e nenhum acordo no final.  Isso acontece porque é bem particular de cada programador achar IDE x ou y melhor para codar.   Eu por exemplo já usei o SPE, mas quando ele resolve bugar não tem quem o aguente. Então fiz esse post para brincar um pouco e mostrar que programador bom mesmo programa é no VIM.  Mas por que usar o VIM, que é em modo texto se eu posso usar uma  IDE bonitinha?  Como eu disse, macho que é macho programa é no VIM!!

Brincadeiras a parte o VIM é tão poderoso quanto essas IDE’s javistas espalhadas por ai, e o melhor de tudo você pode personalizar ele todinho do jeito que você quiser.  Até mesmo programar algo para ele.  Eu vou  falar apenas do basicão.  Mas para maiores informações vejam as referências para materiais sobre o VIM.

VIM o basicão:

1) Abrir arquivos ou cria-los : vim nome_do_arquivo

2)Abrir arquivo de dentro do vim: ESC : Vex. ou ESC: e .                                     (o ponto no final existe  e faz parte do comando)

3)Dividindo a tela em duas horizontalmente: ESC : split ou sp ou  CTRL+w+s

4)Dividindo a tela em duas verticalmente: ESC: vsplit ou vs ou CTRL+w+v

5) Mudando de janelas:

CTRL + w + w Alterna entre janelas (salta de uma para outra)
CTRL + w + j desce uma janela j
CTTL + w + k sobe uma janela k
CTRL + w + r Rotaciona janelas na tela

6)Colocando o python pra ser chamado dentro do VIM

Dentro do vimrc adicione a linha: map <F3> <esc>:!python %<cr>

Depois que essa linha for adicionada ao vimrc, quando você estiver dentro do vim com um arquivo .py e quiser rodá-lo basta digitar ESC: !python arquivo.py.

Abaixo uma imagem só para vocês terem uma ideia de como ele fica bonito para você codar. (=

vim


Referências:

http://pt.wikibooks.org/wiki/Vim/Dividindo_a_janela

tutorial book

Read Full Post »

Older Posts »