arquivo

Arquivo da tag: dicas

Hello friends, I’ve been using KVM a lot of months until now and every new host server that I create I need to change the way of how Slackware seems to create cgroups, libvirt doesn’t function very good if you don’t create specific directories in ‘/sys/fs/cgroup’ tree. So, to do that for me I made this script below

# cat /etc/rc.d/rc.cgroup

#!/bin/sh
#
# /etc/rc.d/rc.cgroup: cgroups init script
# Alexandre Mulatinho <alex@mulatinho.net>
# Unmount /sys/fs/cgroup
umount /sys/fs/cgroup

# Mount cgroup_root in /sys/fs/cgroup
mount -t tmpfs -o mode=755,rw cgroup_root /sys/fs/cgroup/

# Mount all the subsystems available in /sys/fs/cgroup as individual directory
for i in $(lssubsys -a | sed -e 's/,/ /g');
do
    mkdir -pv /sys/fs/cgroup/$i
    mount -v -t cgroup -o $i $i /sys/fs/cgroup/$i
done

# chmod u+x /etc/rc.d/rc.cgroup

And now everytime my slackware system boot, my cgroups tree are build in right way that KVM and libvirt can use him to manipulate things like memory, cpu, io, disk, etc. Hope it helps someone else 🙂

Sempre acompanho a premiação dos melhores softwares do fórum LinuxQuestions.org e gosto de anunciar aqui no site pois permite que usuários que estejam indecisos com alguns softwares possam ter uma base para escolhê-los, gostei bastante dessa lista!

Desktop Distribution of the Year – Linux Mint/Slackware/Ubuntu (22.20%)
Server Distribution of the Year – CentOS (30.74%)
Mobile Distribution of the Year – Android (56.72%)
Database of the Year – MariaDB (34.21%)
NoSQL Database of the Year – MongoDB (44.74%)
Office Suite of the Year – LibreOffice (86.05%)
Browser of the Year – Firefox (57.79%)
Desktop Environment of the Year – KDE (33.57%)
Window Manager of the Year – KWin (20.30%)
Messaging Application of the Year – Pidgin (40.09%)
VoIP Application of the Year – Skype (46.06%)
Virtualization/Container Product of the Year – VirtualBox (49.26%)
Audio Media Player Application of the Year – VLC (30.85%)
Video Media Player Application of the Year – VLC (65.64%)
Graphics Application of the Year – GIMP (65.75%)
Network Security Application of the Year – Wireshark (22.54%)
Host Security Application of the Year – Rootkit Hunter (23.97%)
Network Monitoring Application of the Year – Nagios Core (35.45%)
IDE/Web Development Editor of the Year – Eclipse (17.46%)
Text Editor of the Year – vim (30.30%)
File Manager of the Year – Dolphin (27.70%)
Open Source Game of the Year – SuperTuxKart (12.39%)
Programming Language of the Year – Python (27.74%)
Revision Control System of the Year – git (72.63%)
Backup Application of the Year – rsync (42.75%)
Configuration Management Tool of the Year – Puppet (31.94%)
Open Source Web Framework of the Year – Django (30.00%)
X Terminal Emulator of the Year – Konsole (21.96%)
Privacy Solution of the Year – Adblock Plus (23.99%)
Open Source Cloud Solution of the Year – ownCloud (56.20%)
FTP Client of the Year – FileZilla (58.82%)
Game Distribution Service of the Year – Steam (73.86%)

Fonte: http://www.linuxquestions.org/questions/linux-news-59/2014-linuxquestions-org-members-choice-award-winners-4175532948/

About two or three years ago I met the SlackBuilds Project on a mail list and learned to love it! As all slack users know, the philosophy of our distribution is the principle of KISS (Keep It Simple Stupid) and the strong support for developers.

What I don’t understand is why some other slackwares don’t know and/or use the SlackBuilds git tree in his local system to build packages, one in twelve times that I look for some cool app I do not found there, so I decide to put here some of what I do to build at least 70% of my packages.

1. First download all the slackbuilds git tree to your local file system.

$ git clone git://slackbuilds.org/slackbuilds.git

2. Keep updated!

$ cd slackbuilds && git fetch origin && git pull

3. Browse your options by category

slackbuilds# ls -l
total 416
-rw-r--r-- 1 root root 233080 Nov 11 20:24 ChangeLog.txt
-rw-r--r-- 1 root root 258 Sep 15 2013 README
drwxr-xr-x 189 root root 4096 Nov 11 20:24 academic/
drwxr-xr-x 15 root root 4096 Apr 13 2014 accessibility/
drwxr-xr-x 268 root root 12288 Oct 17 22:27 audio/
drwxr-xr-x 12 root root 4096 Oct 17 22:27 business/
drwxr-xr-x 286 root root 12288 Oct 17 22:27 desktop/
drwxr-xr-x 401 root root 12288 Nov 11 20:24 development/
drwxr-xr-x 374 root root 12288 Oct 17 22:27 games/
drwxr-xr-x 46 root root 4096 Oct 17 22:27 gis/
drwxr-xr-x 184 root root 4096 Nov 11 20:24 graphics/
drwxr-xr-x 41 root root 4096 Oct 17 22:27 ham/
drwxr-xr-x 87 root root 4096 Apr 13 2014 haskell/
drwxr-xr-x 728 root root 20480 Nov 11 20:24 libraries/
drwxr-xr-x 141 root root 4096 Nov 11 20:24 misc/
drwxr-xr-x 162 root root 4096 Nov 11 20:24 multimedia/
drwxr-xr-x 520 root root 20480 Nov 11 20:24 network/
drwxr-xr-x 146 root root 4096 Oct 17 22:27 office/
drwxr-xr-x 333 root root 20480 Nov 11 20:24 perl/
drwxr-xr-x 270 root root 12288 Nov 11 20:24 python/
drwxr-xr-x 14 root root 4096 Oct 17 22:27 ruby/
drwxr-xr-x 582 root root 20480 Nov 11 20:24 system/

4. Search and see the directory structure

slackbuilds# find . -iname '*vlc*'
./multimedia/vlc
./multimedia/vlc/vlc.info
./multimedia/vlc/vlc.SlackBuild
slackbuilds# cd multimedia/vlc/
slackbuilds/multimedia/vlc# ls
README doinst.sh.in patch-freerdp.diff patch-projectM-fontpath.diff slack-desc vlc.SlackBuild vlc.info

5. Install with just three commands

# source *info; wget -c $DOWNLOAD; sh *SlackBuild

And that’s it! It will generate a .t?z package of slackware on ‘/tmp’ directory to you run ‘installpkg’ permitting you to run the binary/script installed. Easy and cool way to find your packages quickly and compile them with your architecture optimized.

# upgradepkg --reinstall --install-new /tmp/SBo/*vlc*

And if I can’t find my package there!?
Can you build yourself this new package? Why not? A slackbuild is just a basic shell script and in this case have almost the same code of all others, you just need to change a few things to make your Slackbuild script too, and perhaps put they on github or something like that,

You just need four files! Like in the example below with ‘gmrun’:

$ README gmrun.SlackBuild gmrun.info slack-desc

Lets look a sample of ‘.info’ file

PRGNAM="gmrun"
VERSION="0.9.2"
HOMEPAGE="http://sourceforge.net/projects/gmrun/"
DOWNLOAD="http://downloads.sourceforge.net/gmrun/gmrun-0.9.2.tar.gz"
MD5SUM="6cef37a968006d9496fc56a7099c603c"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="Binh Nguyen"
EMAIL="binhnguyen@fastmail.fm"
APPROVED="rworkman"

Now take a look into ‘slack-desc’ file

# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in.  You must
# make exactly 11 lines for the formatting to be correct.  It's also
# customary to leave one space after the ':'.

     |-----handy-ruler----------------------------------------------------|
gmrun: gmrun (A simple program which provides a run program window)
gmrun:
gmrun: gmrun is a simple GTK program which provides a "run program" window.
gmrun: It features a bash-like TAB completion, Ctrl-R/Ctrl-S for searching
gmrun: through the history and URL handlers for any user defined prefix.
gmrun:
gmrun: Homepage: http://sourceforge.net/projects/gmrun/
gmrun:
gmrun:
gmrun:
gmrun:

And finally into an .SlackBuild file

#!/bin/sh

PRGNAM=gmrun
VERSION=${VERSION:-0.9.2}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i486 ;;
    arm*) export ARCH=arm ;;
       *) export ARCH=$( uname -m ) ;;
  esac
fi

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -eu

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION

chown -R root:root .
find -L . 
 ( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 
  -o -perm 511 ) -exec chmod 755 {} ; -o 
 ( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 
 -o -perm 440 -o -perm 400 ) -exec chmod 644 {} ;

CFLAGS="$SLKCFLAGS" 
./configure 
  --prefix=/usr 
  --libdir=/usr/lib${LIBDIRSUFFIX} 
  --localstatedir=/var 
  --sysconfdir=/etc 
  --build=$ARCH-slackware-linux

make
make install DESTDIR=$PKG

find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF 
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a AUTHORS COPYING ChangeLog INSTALL NEWS README $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

The variables PRGNAM, VERSION and BUILD are respectively the name of program, his version and perhaps a build number, you also need to understand the basic aspects of install to build your new package, be him a tar or zip file or a have a python setup, to put your own build scheme change lines 51-60 and if you want browse the source and know how the things happen on this software just move your mind to ‘/tmp/SBo’ 😉 Hope you enjoy it and share your builds with us!

Nowadays is really important for some people hide and/or protect some personal data of other people, I’ve already explained how to encrypt a LVM volume in other articles and in my first video using xvidcap

Links:
How to encrypt disk using cryptsetup
Criptografando seu disco no Linux

But sometimes is really pain using all of these commands to open and close my sensible data, so I made a shell script called ‘mltcrypt’ years ago to solve this:

#!/bin/bash
disk=/xdir/cryptdisk-50G.bin
rdir=/demo/.yeah
losetup="sudo /sbin/losetup"
cryptsetup="sudo /sbin/cryptsetup"

if [ "$1" = "init" ]
then
    if ! mount | egrep "$rdir"; 
    then
        from="dsk$$"
        if ! $losetup -a | egrep ${disk} 2&>1 >/dev/null
        then $losetup /dev/loop0 ${disk}; fi

        $cryptsetup luksOpen /dev/loop0 ${from}
        if [ $? -ne 0 ] ; then exit; fi
        sudo mount /dev/mapper/${from} $rdir
    fi
    cd $rdir
elif [ "$1" = "end" ]
then
    if ! $losetup -a | egrep ${disk} 2&>1 >/dev/null; then exit 1; fi
    dsk=`mount | grep "$rdir" | cut -d ' ' -f1 | awk -F '/' '{print $NF}'`
    sudo umount -l $rdir

    $cryptsetup luksClose ${dsk}
    $losetup -d /dev/loop0
else
    echo lol
    exit 0
fi

So when I need to open my things I just type two commands
$ mltcrypt init
Will open all my data in /demo/.yeah

And to close this I just type
$ mltcrypt end

To use that you just need to change the variable values: disk and rdir.

Hope it help someone! 🙂

Então galera, vez ou outra seja por alguma documentação ou outra coisa eu preciso manipular uma série de imagens, é complicado você abrir o GIMP uma por uma e fazer o que você quer, para evitar esse trabalho todo eu costumo usar um comando do pacote ImageMagick chamado ‘convert’. O convert é um canivete suíço na manipulação de imagens via linha de comando, aqui eu vou mostrar apenas algumas operações como: redimensionar, recortar e converter imagens.

Então vamos fazer um caso de uso básico, suponha que você tenha 50 imagens e precise editar cada uma delas, você vai fazer via console com dois ou três comandos ou editar um a um os cinquenta arquivos!? Eu tenho mais o que fazer, então vamos lá!

Imagem original pode ser vista clicando aqui.

mulatinho@forrest:~$ ls
gtkfingerprint-01.png gtkfingerprint-10.png gtkfingerprint-19.png gtkfingerprint-28.png gtkfingerprint-37.png gtkfingerprint-46.png
gtkfingerprint-02.png gtkfingerprint-11.png gtkfingerprint-20.png gtkfingerprint-29.png gtkfingerprint-38.png gtkfingerprint-47.png
gtkfingerprint-03.png gtkfingerprint-12.png gtkfingerprint-21.png gtkfingerprint-30.png gtkfingerprint-39.png gtkfingerprint-48.png
gtkfingerprint-04.png gtkfingerprint-13.png gtkfingerprint-22.png gtkfingerprint-31.png gtkfingerprint-40.png gtkfingerprint-49.png
gtkfingerprint-05.png gtkfingerprint-14.png gtkfingerprint-23.png gtkfingerprint-32.png gtkfingerprint-41.png gtkfingerprint-50.png
gtkfingerprint-07.png gtkfingerprint-16.png gtkfingerprint-25.png gtkfingerprint-34.png gtkfingerprint-43.png
gtkfingerprint-08.png gtkfingerprint-17.png gtkfingerprint-26.png gtkfingerprint-35.png gtkfingerprint-44.png
gtkfingerprint-09.png gtkfingerprint-18.png gtkfingerprint-27.png gtkfingerprint-36.png gtkfingerprint-45.png

Lição 1: Recortando imagens.

mulatinho@forrest:~$ convert gtkfingerprint-01.png -crop 800x600+150x300 gtkfingerprint-01_cut.png
(recorte básico da imagem pegando apenas o quadro que desejamos.)

mulatinho@forrest:~$ for i in `ls gtkfingerprint-*png`; do 
convert $i -crop 800x600+150x300 `echo $i | sed -e 's/.png/_cut.png/'`; done
(recortando todas as imagens na mesma posição e do mesmo tamanho com um pouquinho de shellscript)

Abaixo podemos ver o resultado da saída de todas as imagens recortadas.

mulatinho@forrest:~$ ls *cut*png
gtkfingerprint-01_cut.png gtkfingerprint-11_cut.png gtkfingerprint-21_cut.png gtkfingerprint-31_cut.png gtkfingerprint-41_cut.png
gtkfingerprint-02_cut.png gtkfingerprint-12_cut.png gtkfingerprint-22_cut.png gtkfingerprint-32_cut.png gtkfingerprint-42_cut.png
.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ....
gtkfingerprint-10_cut.png gtkfingerprint-20_cut.png gtkfingerprint-30_cut.png gtkfingerprint-40_cut.png gtkfingerprint-50_cut.png

Imagem recortada, depois de manipulada pode ser vista aqui.

Lição 2: Redimensionando imagens.

Muitas vezes também precisamos redimensionar imagens, neste caso eu precisei de imagens com 75% do tamanho (que eu criei com sufixo ‘_med.png’) para colocar dentro de umas tabelas num documento LaTeX afim de descrever o funcionamento da ferramenta e também precisei de thumbnail’s com cerca de 50% do tamanho original (que eu criei com o sufixo ‘_min.png’) das imagens para mostrar em um website. Ficou assim:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png -resize 75% gtkfingerprint-01_med.png
(redimensionando apenas uma imagem em torno de 75%)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 75% `echo $i | sed -e 's/_cut.png/_med.png/'`; done
(novamente fazendo o mesmo com todas as imagens, redimensionando-as com apenas um comando)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 50% `echo $i | sed -e 's/_cut.png/_min.png/'`; done
(e redimensionando todas as imagens com 50% do tamanho adicionando o sufixo 'min')

mulatinho@forrest:~$ for i in *pdf; do 
convert -thumbnail x200 $i[0] -flatten $i.jpg; done
(converte primeira pagina de pdfs em uma imagem)

Então galera, vez ou outra seja por alguma documentação ou outra coisa eu preciso manipular uma série de imagens, é complicado você abrir o GIMP uma por uma e fazer o que você quer, para evitar esse trabalho todo eu costumo usar um comando do pacote ImageMagick chamado ‘convert’. O convert é um canivete suíço na manipulação de imagens via linha de comando, aqui eu vou mostrar apenas algumas operações como: redimensionar, recortar e converter imagens.

Então vamos fazer um caso de uso básico, suponha que você tenha 50 imagens e precise editar cada uma delas, você vai fazer via console com dois ou três comandos ou editar um a um os cinquenta arquivos!? Eu tenho mais o que fazer, então vamos lá!

Imagem original pode ser vista clicando aqui.

mulatinho@forrest:~$ ls
gtkfingerprint-01.png gtkfingerprint-10.png gtkfingerprint-19.png gtkfingerprint-28.png gtkfingerprint-37.png gtkfingerprint-46.png
gtkfingerprint-02.png gtkfingerprint-11.png gtkfingerprint-20.png gtkfingerprint-29.png gtkfingerprint-38.png gtkfingerprint-47.png
gtkfingerprint-03.png gtkfingerprint-12.png gtkfingerprint-21.png gtkfingerprint-30.png gtkfingerprint-39.png gtkfingerprint-48.png
gtkfingerprint-04.png gtkfingerprint-13.png gtkfingerprint-22.png gtkfingerprint-31.png gtkfingerprint-40.png gtkfingerprint-49.png
gtkfingerprint-05.png gtkfingerprint-14.png gtkfingerprint-23.png gtkfingerprint-32.png gtkfingerprint-41.png gtkfingerprint-50.png
gtkfingerprint-07.png gtkfingerprint-16.png gtkfingerprint-25.png gtkfingerprint-34.png gtkfingerprint-43.png
gtkfingerprint-08.png gtkfingerprint-17.png gtkfingerprint-26.png gtkfingerprint-35.png gtkfingerprint-44.png
gtkfingerprint-09.png gtkfingerprint-18.png gtkfingerprint-27.png gtkfingerprint-36.png gtkfingerprint-45.png

Lição 1: Recortando imagens.

mulatinho@forrest:~$ convert gtkfingerprint-01.png -crop 800x600+150x300 gtkfingerprint-01_cut.png
(recorte básico da imagem pegando apenas o quadro que desejamos.)

mulatinho@forrest:~$ for i in `ls gtkfingerprint-*png`; do 
convert $i -crop 800x600+150x300 `echo $i | sed -e 's/.png/_cut.png/'`; done
(recortando todas as imagens na mesma posição e do mesmo tamanho com um pouquinho de shellscript)

Abaixo podemos ver o resultado da saída de todas as imagens recortadas.

mulatinho@forrest:~$ ls *cut*png
gtkfingerprint-01_cut.png gtkfingerprint-11_cut.png gtkfingerprint-21_cut.png gtkfingerprint-31_cut.png gtkfingerprint-41_cut.png
gtkfingerprint-02_cut.png gtkfingerprint-12_cut.png gtkfingerprint-22_cut.png gtkfingerprint-32_cut.png gtkfingerprint-42_cut.png
.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ....
gtkfingerprint-10_cut.png gtkfingerprint-20_cut.png gtkfingerprint-30_cut.png gtkfingerprint-40_cut.png gtkfingerprint-50_cut.png

Imagem recortada, depois de manipulada pode ser vista aqui.

Lição 2: Redimensionando imagens.

Muitas vezes também precisamos redimensionar imagens, neste caso eu precisei de imagens com 75% do tamanho (que eu criei com sufixo ‘_med.png’) para colocar dentro de umas tabelas num documento LaTeX afim de descrever o funcionamento da ferramenta e também precisei de thumbnail’s com cerca de 50% do tamanho original (que eu criei com o sufixo ‘_min.png’) das imagens para mostrar em um website. Ficou assim:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png -resize 75% gtkfingerprint-01_med.png
(redimensionando apenas uma imagem em torno de 75%)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 75% `echo $i | sed -e 's/_cut.png/_med.png/'`; done
(novamente fazendo o mesmo com todas as imagens, redimensionando-as com apenas um comando)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 50% `echo $i | sed -e 's/_cut.png/_min.png/'`; done
(e redimensionando todas as imagens com 50% do tamanho adicionando o sufixo 'min')

https://mulatinho.files.wordpress.com/2015/04/softlivrev2-140610222148-phpapp02.pdf

Você pode ver o resultado da imagem com 75% do seu tamanho original clicando aqui.
Você pode ver o resultado da imagem com 50% do seu tamanho original clicando aqui.

As vezes temos situações em que uma imagem está numa qualidade muito grande, isso acontece com as fotos dos celulares mais modernos hoje em dia, e aí fica difícil da gente enviar pros nosso amigos e familiares um álbum cheio de imagens imensas por e-mail ou numa rede social, para facilitar isso a gente geralmente reduz a qualidade da imagem ou até mesmo a redimensiona como vimos acima.

Lição 3: Convertendo imagens.

Existem vezes em que simplesmente desejamos converter um formato de imagem, isso também é muito fácil de fazer com o convert que suporta vários formatos como: JPEG, GIF, PNG, BMP, etc. Vejamos alguns exemplos de conversão de imagens:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.bmp
(converte a imagem para o formato BMP, pior compressão, windows suqz)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.gif
(converte a imagem para o formato GIF, ótima compressão)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.jpg
(converte a imagem para o formato JPG, compressão legal)
mulatinho@forrest:~$ ls -l gtkfingerprint-01_cut.*
-rw-r--r-- 1 mulatinho mulatinho 673338 Feb  7 21:49 gtkfingerprint-01_cut.bmp
-rw-r--r-- 1 mulatinho mulatinho  25005 Feb  7 21:46 gtkfingerprint-01_cut.gif
-rw-r--r-- 1 mulatinho mulatinho  42447 Feb  7 21:50 gtkfingerprint-01_cut.jpg
-rw-r--r-- 1 mulatinho mulatinho  30433 Feb  7 21:19 gtkfingerprint-01_cut.png
mulatinho@forrest:~$ file -bi gtkfingerprint-01_cut.*
application/octet-stream; charset=binary
image/gif; charset=binary
image/jpeg; charset=binary
image/png; charset=binary

Links com alguns extras.

http://www.imagemagick.org/Usage/photos/
http://www.imagemagick.org/script/convert.php#usage

Bom, essa é a dica do mulato da semana rapaziada! Espero que aproveitem! 😉

Você pode ver o resultado da imagem com 75% do seu tamanho original clicando aqui.
Você pode ver o resultado da imagem com 50% do seu tamanho original clicando aqui.

As vezes temos situações em que uma imagem está numa qualidade muito grande, isso acontece com as fotos dos celulares mais modernos hoje em dia, e aí fica difícil da gente enviar pros nosso amigos e familiares um álbum cheio de imagens imensas por e-mail ou numa rede social, para facilitar isso a gente geralmente reduz a qualidade da imagem ou até mesmo a redimensiona como vimos acima.

Lição 3: Convertendo imagens.

Existem vezes em que simplesmente desejamos converter um formato de imagem, isso também é muito fácil de fazer com o convert que suporta vários formatos como: JPEG, GIF, PNG, BMP, etc. Vejamos alguns exemplos de conversão de imagens:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.bmp
(converte a imagem para o formato BMP, pior compressão, windows suqz)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.gif
(converte a imagem para o formato GIF, ótima compressão)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.jpg
(converte a imagem para o formato JPG, compressão legal)
mulatinho@forrest:~$ ls -l gtkfingerprint-01_cut.*
-rw-r--r-- 1 mulatinho mulatinho 673338 Feb  7 21:49 gtkfingerprint-01_cut.bmp
-rw-r--r-- 1 mulatinho mulatinho  25005 Feb  7 21:46 gtkfingerprint-01_cut.gif
-rw-r--r-- 1 mulatinho mulatinho  42447 Feb  7 21:50 gtkfingerprint-01_cut.jpg
-rw-r--r-- 1 mulatinho mulatinho  30433 Feb  7 21:19 gtkfingerprint-01_cut.png
mulatinho@forrest:~$ file -bi gtkfingerprint-01_cut.*
application/octet-stream; charset=binary
image/gif; charset=binary
image/jpeg; charset=binary
image/png; charset=binary

Links com alguns extras.

http://www.imagemagick.org/Usage/photos/
http://www.imagemagick.org/script/convert.php#usage

Bom, essa é a dica do mulato da semana rapaziada! Espero que aproveitem! 😉

Se você gosta de utilizar o terminal de comandos do linux sabe que é necessário gastar alguns minutos o personalizando, também é muito útil usar o recurso de abas screen00para poder fazer várias atividades ao mesmo tempo, o que muitas pessoas não sabem é que existe o recurso do comando ‘screen’ criado pelo projeto GNU que fornece o recurso de múltiplas janelas sem a necessidade da intervenção de um terminal com suporte a abas.

– O que é o screen?

O screen é um multiplexador de terminais que permite ao usuário em uma mesma sessão abrir várias janelas e realizar atividades paralelas, este recurso é um pouco subestimado pois a maioria das atividades de usuários comuns são feitas na sua máquina local e então basta utilizar um terminal com suporte a abas para se obtêr o mesmo efeito: vários terminais com diferentes sessões e atalhos que permitem a movimentação entre si afim de se realizar várias atividades;

A diferença do GNU screen é que as janelas que ele cria são dentro de uma mesma sessão e isso é muito útil por exemplo numa sessão remota via SSH, em vez de o usuário acessar várias vezes o servidor para realizar atividades paralelas como faria normalmente, o GNU screen permite um único acesso e várias janelas diferentes onde é possível realizar várias atividades em conjunto na mesma sessão.

– Parece bom! Como uso o GNU Screen?

É fácil, basta digitar ‘screen’ e ele já começa a rodar, abaixo veremos alguns argumentos interessantes que tornam ainda mais eficiente essa solução.

screen01$ screen
(inicia a sessão multiplexada, praticamente você recebe um novo prompt)

$ screen -ls
There is a screen on:
31248.pts-2.sf064515 (Attached)
1 Socket in /var/run/screen/S-mulatinho.
(pode ser visto acima o nome da sessão ‘31248.pts-2.sf064515’ screen rodando)

$ screen -r NomeDaSessao
(puxa uma sessão que está solta para a tela atual)

– Ótimo! Funcionou, mas onde está a multiplexação?

Apartir do momento em que você está dentro do multiplexador screen as coisas mudam um pouco de figura e todo o gerenciamento de janelas e comandos é feito utilizando a sequência de caracteres “CTRL + A + <OPÇÃO>”, abaixo nós veremos algumas opções e sua descrições mas elas só se tornarão de fato entendíveis para o usuário final com a prática, vejamos:

screen02

c [create] cria uma nova janela
n [next] modifica a janela para a próxima da lista
X [delete] deleta uma janela
A [rename] renomeia uma janela
S [split] divide janelas na mesma tela (várias janelas na tela atual)
TAB [split next] alterna entre as janelas dividas
[ [scrollback] permite subir a tela para vêr mais acima e copiar dados
ESC [cancel] cancela alguma opção
: [two points] permite digitar comandos (man screen)
:resize [resize] permite redefinir o tamanho da janela

 

figura 4 Então ao rodar o comando ‘screen’ você receberá um novo prompt de comando e só então poderá digitar no seu teclado a sequência ‘CTRL + A + c’ e vêr que uma nova janela foi criada e depois ‘CTRL + A + n’ para navegar entre as janelas e poder realizar várias atividades. Você verá que utilizando as opções acima e com um pouco de prática o uso do GNU Screen te tornará muito mais eficiente no terminal. Tente um pouco e veja você também!!

Descrição das figuras:
Figura 1: Mostra o screen rodando e o usuário listando as sessões ativas; Figura 2: Mostra duas sessões rodando embaixo do screen e as janelas divididas; Figura 3: Mostra a sessão rodando com o comando ‘top’ mostrando e outra disponível; Figura 4: Mostra o seletor de janelas na primeira, e o comando de print da tela na segunda;

Fiquem ligados que em breve sairá um artigo sobre como se tornar mais eficiente editando arquivos e escrevendo códigos utilizando o GNU Screen e o VIM. 🙂

Para quem desenvolve ou acompanha um projeto livre e precisa estar sempre atualizado com os últimos commits segue um script que ajuda bastante no processo, por enquanto só deve funcionar no git e no subversion.

Se você tem uma pasta apenas para os repositórios como eu (/home/mulatinho/repo) basta adicionar o script abaixo e definir as variáveis $subdir (caso tenha subdiretórios com repositórios) e a $nodir (caso não queira incluir arquivos e/ou diretórios na atualização). Segue os exemplos:

$ cat updaterepo.sh
#!/bin/bash
basedir=${HOME}/repo
subdir="github"
nodir="codigolivre.org.br|update.sh"

function do_update()
{
	echo "entrando em '${1}'.."
	cd ${1} 2>/dev/null

	repositorio=`echo ${1} | awk -F'/' '{print $NF}'`
	if git status >/dev/null 2>&1;
	then
		echo "atualizando git repositorio '${repositorio}'"
		git pull
	elif svn status | egrep -i 'not a working copy' >/dev/null 2>&1;
	then
		echo "atualizando svn repositorio '${repositorio}'"
		svn update
	else
		echo "'${repositorio}' nao eh um repositorio git ou svn"
	fi

	echo
	echo
}

#principal
for workdir in ${basedir}/*; 
do
	if echo ${workdir} | egrep "${subdir}" >/dev/null 2>&1
	then
		rdir=${workdir}
		for workdir in ${rdir}/*;
		do
			do_update "${workdir}"
		done
	elif echo ${workdir} | egrep "${nodir}" >/dev/null 2>&1
	then
		continue
	else
		do_update "${workdir}"
	fi

done

cd ${basedir}

Rodando o script e vendo o resultado de todos os repositórios listados em (${HOME}/repo) sendo atualizados!

$ ./update.sh 
entrando em '/home/mulatinho/repo/gcc'..
atualizando git repositorio 'gcc'
remote: Counting objects: 91, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 42 (delta 34), reused 0 (delta 0)
Unpacking objects: 100% (42/42), done.
From git://gcc.gnu.org/git/gcc
   3cef9c1..23c6c8a  master     -> origin/master
   0afe1df..03e935b  gcc-4_7-branch -> origin/gcc-4_7-branch
   fe4904a..4ef7667  gcc-4_8-branch -> origin/gcc-4_8-branch
   3cef9c1..23c6c8a  trunk      -> origin/trunk
Updating 3cef9c1..23c6c8a
Fast-forward
 gcc/ChangeLog                           |  28 +++++++++++++
 gcc/DATESTAMP                           |   2 +-
 gcc/config/rs6000/linux64.h             |  30 +++++++-------
 gcc/config/rs6000/rs6000.md             |  34 ++++++++++------
 gcc/config/rs6000/sysv4.h               |  49 +++++++++++------------
 gcc/config/sh/iterators.md              |   3 ++
 gcc/config/sh/predicates.md             |  28 +++++++++++++
 gcc/config/sh/sh.c                      |  16 ++++++++
 gcc/config/sh/sh.md                     | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gcc/testsuite/ChangeLog                 |   7 ++++
 gcc/testsuite/gcc.target/sh/pr55303-1.c |  87 ++++++++++++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.target/sh/pr55303-2.c |  35 ++++++++++++++++
 gcc/testsuite/gcc.target/sh/pr55303-3.c |  15 +++++++
 13 files changed, 417 insertions(+), 51 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-1.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-2.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-3.c
 13 files changed, 417 insertions(+), 51 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-1.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-2.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-3.c

entrando em '/home/mulatinho/repo/geany'..
atualizando git repositorio 'geany'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/bacuri'..
atualizando git repositorio 'bacuri'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/docs'..
atualizando git repositorio 'docs'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/pub'..
atualizando git repositorio 'pub'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/sfm'..
atualizando git repositorio 'sfm'
Already up-to-date.

entrando em '/home/mulatinho/repo/gus-pe'..
atualizando git repositorio 'gus-pe'
Updating '.':
A    teste
A    teste/teste.txt

entrando em '/home/mulatinho/repo/keymouse'..
atualizando git repositorio 'keymouse'
Already up-to-date.

entrando em '/home/mulatinho/repo/linux-stable'..
atualizando git repositorio 'linux-stable'
Already up-to-date.

entrando em '/home/mulatinho/repo/slapt-get'..
updating git repository 'slapt-get'
From http://software.jaos.org/git/slapt-get
   9617037..d1a5737  master     -> origin/master
 * [new branch]      slack13.37 -> origin/slack13.37
Updating 9617037..d1a5737
Fast-forward
 ChangeLog                  |   6 +
 default.slapt-getrc.i386   |  10 +-
 default.slapt-getrc.x86_64 |  10 +-
 example.slapt-getrc        | 116 ++++++++-------
 example.slapt-getrc.i386   | 122 +++++++--------
 example.slapt-getrc.x86_64 | 124 ++++++++--------
 po/bg.po                   |  78 ++--------
 po/cs.po                   |  71 ++-------
 po/{cz.po => da.po}        | 350 +++++++++++++++++++------------------------
 po/de.po                   |  86 ++---------
 po/el.po                   | 105 ++++---------
 po/es.po                   |  96 +++---------
 po/es_AR.po                |  95 +++---------
 po/es_ES.po                | 104 +++----------
 po/fr.po                   | 303 +++++++++++++++----------------------
 po/{en.po => he.po}        | 370 +++++++++++++++++++++-------------------------
 po/hu.po                   |  60 ++++----
 po/id.po                   |  82 ++--------
 po/it.po                   |  78 ++--------
 po/ja.po                   |  84 ++---------
 po/nl.po                   |  76 ++--------
 po/no.po                   |  78 ++--------
 po/pl.po                   |  83 ++---------
 po/pt.po                   | 607 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 po/pt_BR.po                |  95 +++---------
 po/pt_PT.po                |  85 ++---------
 po/ro.po                   |  77 ++--------
 po/ru.po                   |  44 ++----
 po/sk.po                   |  71 ++-------
 po/sl.po                   |  80 ++--------
 po/sv.po                   | 136 ++++++-----------
 po/tr.po                   |  79 ++--------
 po/uk.po                   | 150 ++++++-------------
 po/vi.po                   |  80 ++--------
 po/zh_CN.po                |  66 ++-------
 src/action.c               |   2 +-
 src/main.c                 |   1 +
 37 files changed, 1678 insertions(+), 2482 deletions(-)
 rename po/{cz.po => da.po} (51%)
 rename po/{en.po => he.po} (52%)
 create mode 100644 po/pt.po

entrando em '/home/mulatinho/repo/xf86-video-intel'..
atualizando git repositorio 'xf86-video-intel'
Already up-to-date.

entrando em '/home/mulatinho/repo/xfce4-notes-plugin'..
atualizando git repositorio 'xfce4-notes-plugin'
Already up-to-date.

Okay, mas eu tenho que ficar rodando esse lance toda hora!? Não!

$ crontab -e
0 * * * * /home/mulatinho/repo/updaterepo.sh

Pronto! Agora a toda hora que passa todos os seus repositórios serão atualizados sem bronca! É isso, continue acompanhando!

%d blogueiros gostam disto: