Tag Archives: cli

Simple backup using S3 Sync

Given that you have the AWS CLI installed and configured, here are a few examples of syncing directories with S3.

Sync your home directory:

aws s3 sync $HOME s3://homeof$USER

E.g. $USER is sil and $HOME is /home/sil, then this will copy all files from /home/sil to bucket homeofsil.

To download the files back to another directory:

mkdir $HOME/oldhome
aws s3 sync s3://homeof$USER $HOME/oldhome

More details about S3 Sync in the official documentation.

Bash Brace Expansion

photo by whiskeyandtears at https://www.flickr.com/photos/whiskeyandtears/2140154564

$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
$ echo b{a,e,i,o,u}
ba be bi bo bu
$ echo x{0..9}y
x0y x1y x2y x3y x4y x5y x6y x7y x8y x9y
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo {1..3} {A..C}
1 2 3 A B C
$ echo {1..3}{A..C}
1A 1B 1C 2A 2B 2C 3A 3B 3C
echo {a,b{1,2,3},c}
a b1 b2 b3 c
$ mkdir -p {project1,project2}/{src,tst,bin,lib}/
$ find .
.
./project1
./project1/tst
./project1/bin
./project1/lib
./project1/src
./project2
./project2/tst
./project2/bin
./project2/lib
./project2/src
$ echo {{A..Z},{a..z}}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
$ for i in {a..f} 1 2 {3..5} ; do echo $i;done
a
b
c
d
e
f
1
2
3
4
5

The examples below requires Bash version 4.0 or greater.

$echo {001..9}
001 002 003 004 005 006 007 008 009
$ echo {1..10..2}
1 3 5 7 9

OGG com qualidade

Para o controle de qualidade quando encondando vídeos com o FFmpeg use o parâmetro -qscale seguido de um número. Os número podem ir de 1 (melhor qualidade) até 31 (pior qualidade), sendo que 13 já é uma qualidade bem ruim.

Convertendo pro exemplo um vídeo chamado exemplo.flv para um arquivo ogg com a melhor qualidade seria:

ffmpeg -i exemplo.flv -qscale 1 saida.ogg

Sem usar esse parâmetro os arquivos encodados em OGG ficam com uma qualidade mediana. Uma opção bem útil é usar a mesma qualidade do arquivo de entrada, já que não é possível melhorar a qualidade do vídeo mesmo. Para isso existe o parâmetro -sameq. No exemplo anterior bastaria:

ffmpeg -i exemplo.flv -sameq saida.ogg

Com isso eu tenho reduzido os vídeos da minha câmera para arquivos que só ocupam cerca de 1/5 do tamanho original e ainda assim mantém a mesma qualidade.

Example of Unix commands implemented in Java

I created some illustrative and simple implementations of common Unix commands. For those who are familiar with Unix-like systems them make easier to understand Java. For those who are familiar with Java them make easier to understand Unix-like systems. :-)

1. PWD

The first one is pwd that show the current working directory.

public class Jpwd {
    public static void main(String[] args) {
        String pwd = System.getProperty("user.dir");
        System.out.println(pwd);
    }
}

Running this at /home/silveira directory gives us as output:

$ java Jpwd

/home/silveira

1. CAT

The command cat is usually utilized for displaying files.

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class Jcat {
    public static void main(String[] args) {
        if(args.length==1){
            try {
                FileReader fileReader = new FileReader(args[0]);
                BufferedReader in = new BufferedReader(fileReader);
                String line;
                while((line = in.readLine())!= null){
                    System.out.println(line);
                }
            } catch (FileNotFoundException ex) {
                System.out.println(args[0]+", file not found.");
            }
            catch (IOException ex) {
                System.out.println(args[0]+", input/output error.");
            }
        }
    }
}

$ java Jcat /etc/timezone

America/Fortaleza

3. LS

The command ls is to list files. The File API (java.io.File) is very flexible and portable, but in this example I want just list files and directories of the current directory.

import java.io.File;
 
public class Jls {
    public static void main(String[] args) {
        File dir = new File(System.getProperty("user.dir"));
        String childs[] = dir.list();
        for(String child: childs){
            System.out.println(child);
        }
    }
}

Usage:

$ java Jpwd

/home/silveira/example

$ java Jls

directoryA

fileA

.somefile

4. CD

The cd command changes the current working directory.

import java.io.File;
 
public class Jcd {
    public static void main(String[] args) {
        if(args.length==1){
            File dir = new File(args[0]);
            if(dir.isDirectory()==true) {
                System.setProperty("user.dir", dir.getAbsolutePath());
            } else {
                System.out.println(args[0] + "is not a directory.");
            }
        }
    }
}

Usage:

$ java Jpwd
/home/silveira
$ java Jcd /tmp
$ java Jpwd
/tmp

Câmera Microdia no Ubuntu 8.04

Eu já havia postando anteriormente como fazer funcionar câmeras Microdia usando um driver proprietário e cheio de restrições. Boas novas. Agora desenvolvedores se uniram para construir um driver livre para essa série de câmeras e o driver livre já está bem melhor que o proprietário!

Câmera integrada

Antes de mais nada, nesse post eu estou usando o Ubuntu 8.04, seguindo de perto os passos do blog de Indra Gunawan, um notebook Amazon PC FL 31, a minha câmera é essa da foto acima e ela é lista em um lsusb como:

Bus 005 Device 002: ID 0c45:624f Microdia

Os números 0c45: já indicam que essa é uma câmera Microdia. No momento em que eu escrevo, o driver livre suporta as câmeras Microdias 6242, 624e, 624f, 6270, 627b, 62bb, 145f:013d e 045e:00f4. Para uma lista mais atualizada dê uma olhada no site oficial do driver livre.

Então o primeiro passo é você abrir um terminal e dar um lsusb e observar a saída. Outra coisa importante para você saber é a versão do seu Kernel. Dê um uname -a no terminal e observe a saída. Essa é a minha:

2.6.24-16-generic

Se essa não é sua versão do Kernel, não há alarde, é possível que também funcione com você, mesmo se com outra versão do Kernel ou mesmo outro sabor de Linux.

Vamos precisar de alguns pacotes adicionais, use o seu gerenciador de pacotes (no meu caso o APT) para instalar alguns pacotes que vamos precisar. A partir daqui você precisará estar logado como root.

apt-get install git-core gitk git-gui git-doc curl ctags build-essential

Se você também quiser compilar a documentação do driver, adicione o doxygen à lista. Agora baixamos a última versão do driver usando o git. De preferencia execute esse comando no seu diretório home, pois ele vai criar um diretório microdia que você pode querer preservar.

git clone http://repo.or.cz/r/microdia.git

Se você não recebeu nenhuam mensagem de erro e todo o código-fonte foi baixado, entre no diretório microdia e simplesmente digite:

make

Se tudo deu certo o código-fonte será compilado e você encontrará entre outras coisas um arquivo microdia.ko. Se você teve algum erro, provavelmente foi por algum pacote que você não tinha, baixe esse pacote tente compilar novamente.

Vamos carregar o módulo, como root:

modprobe videodev
insmod microdia.ko

Depois disso, dê um dmesg |grep Microdia -i.

[   39.799824] microdia: Microdia USB2.0 webcam driver startup
[   39.799873] microdia: Microdia USB2.0 Webcam – Product ID 624F.
[   39.799876] microdia: Release: 0100
[   39.799878] microdia: Number of interfaces : 1
[   39.801100] microdia: Microdia USB2.0 Camera is now controlling video device /dev/video0
[   39.801133] usbcore: registered new interface driver usb_microdia_driver
[   39.801138] microdia: v0.0.0 : Microdia USB Video Camera

Se você teve uma saída assim, então as coisas vão indo bem. Você já pode testar sua câmera. Você pode usar um software específico para isso como o Camorama ou usar o próprio Mplayer:

mplayer tv:// -tv driver=v4l:width=640:height=480:device=/dev/video0 -vo x11

Eu sugiro testar primeiro o Camorama porque esses parâmetros do Mplayer funcionam comigo e eu não posso garantir que vão funcionar também com a sua câmera. Principalmente, por conta da resolução que eu usei.

Mas não vá embora agora, quando você reiniciar o computador tudo isso vai pelo espaço. Vamos fazer para que esse módulo seja carregado sempre que você ligar o computador. Vamos cópiar o arquivo .ko para o diretório de módulos do kernel.

cp microdia.ko /lib/modules/`uname -r`/kernel/drivers/media/video/usbvideo/

Se você executou a algusn passos atrás o insmod, então limpe o driver da memória com um rmmod microdia. Agora rode depmod -a para gerar um novo modules.dep e mapear os arquivos no diretório de módulos.

Para terminar, adicione o módulo ao kernel com um

modprobe microdia

Agora o módulo vai ser carregado sempre que você iniciar o computador.

Agora alguns outros e brincadeiras úteis para você fazer com sua webcam. :-D

Espelho: muito útil no dia-a-dia, vale a pena criar um atalho na barra de tarefas ou no seu Desktop. Para usar o Mplayer como um espelho:

mplayer tv:// -tv driver=v4l:device=/dev/video0:width=640:height=480:noaudio -x 800 -y 600 -vf-add pp=hb:a/vb:a,hqdn3d,mirror

Effectv: O effectv é o melhor brinquedo para quem tem uma webcam. E agora ele já está disponível nos repositórios do Ubuntu:

apt-get install effectv

Para usa-lo, aqui eu chamo assim:

effectv -device /dev/video0 -size 640×480

Use as teclas para baixo ou para cima para mudar os efeitos. A tecla espaço reseta o efeito. As teclas numéricas acionam variações. Tab inverte horizontalmente, como em um espelho. Aqui alguns efeitos legais.

Edgeblurtv

HolographicTv

OpTv

SimuraTv

MatrixTv