Dica retirada do manual GNU AWK:
$ export POSIXLY_CORRECT=1 Force POSIX behavior
$ gawk 'BEGIN { printf "%g\n", 3.1415927 }'
-| 3.14159
$ LC_ALL=en_DK.utf-8 gawk 'BEGIN { printf "%g\n", 3.1415927 }'
-| 3,14159
$ echo 4,321 | gawk '{ print $1 + 1 }'
-| 5
$ echo 4,321 | LC_ALL=en_DK.utf-8 gawk '{ print $1 + 1 }'
-| 5,321
quinta-feira, 29 de dezembro de 2016
sexta-feira, 28 de outubro de 2016
Unzip + Gunzip
Se vários arquivos compactados no formato GZ estiverem depois agrupados em um único arquivo ZIP, você pode descompactá-los em um único arquivo:
Sintaxe
unzip -p <arquivo> | gunzip > <destino>
Exemplo;
unzip -p faturamento.zip | gunzip > faturamento.txt
Sintaxe
unzip -p <arquivo> | gunzip > <destino>
Exemplo;
unzip -p faturamento.zip | gunzip > faturamento.txt
terça-feira, 16 de agosto de 2016
MySQL - Information Schema - Referências
Para pesquisar informações sobre Tabelas, Colunas, Procedures, etc do MySQL pode-se usar as diversas tabelas do schema padrão INFORMATION_SCHEMA.
São elas:
Exemplos:
1) Para ver todas as tabelas de um determinado Schema:
SELECT t1.table_name
FROM information_schema.tables t1
WHERE lower(t1.table_schema) = 'information_schema';
2) Identificar quais tabelas referenciam uma determinada coluna:
SELECT t1.*
FROM information_schema.columns t1
WHERE upper(t1.table_schema) = 'information_schema'
AND upper(t1.column_name) = 'COLUMN_NAME';
São elas:
- CHARACTER_SETS
- COLLATIONS
- COLLATION_CHARACTER_SET_APPLICABILITY
- COLUMNS
- COLUMN_PRIVILEGES
- ENGINES
- EVENTS
- FILES
- GLOBAL_STATUS
- GLOBAL_VARIABLES
- KEY_COLUMN_USAGE
- PARTITIONS
- PLUGINS
- PROCESSLIST
- PROFILING
- REFERENTIAL_CONSTRAINTS
- ROUTINES
- SCHEMATA
- SCHEMA_PRIVILEGES
- SESSION_STATUS
- SESSION_VARIABLES
- STATISTICS
- TABLES
- TABLE_CONSTRAINTS
- TABLE_PRIVILEGES
- TRIGGERS
- USER_PRIVILEGES
- VIEWS
1) Para ver todas as tabelas de um determinado Schema:
SELECT t1.table_name
FROM information_schema.tables t1
WHERE lower(t1.table_schema) = 'information_schema';
SELECT t1.*
FROM information_schema.columns t1
WHERE upper(t1.table_schema) = 'information_schema'
AND upper(t1.column_name) = 'COLUMN_NAME';
MySQL - Identificar quais Procedures usam uma Tabela
Para identificar qual(is) PROCEDURE(S)/FUNCTION(S) utilizam uma tabela, pode-se fazer uma pesquisa usando o INFORMATION_SCHEMA, conforme abaixo:
SELECT t1.routine_name, t1.routine_type, t1.definer
FROM information_schema.routines t1
WHERE upper(t1.routine_schema) = <'schema|db'>
AND upper(t1.routine_definition) like '%<'TABELA'>%';
SELECT t1.routine_name, t1.routine_type, t1.definer
FROM information_schema.routines t1
WHERE upper(t1.routine_schema) = <'schema|db'>
AND upper(t1.routine_definition) like '%<'TABELA'>%';
Onde
<'schema|db'> - Schema/DB
<'TABELA'> - Tabela que será pesquisa. Deve estar em Maiúsculo para facilitar a pesquisa
Exemplo:
SELECT t1.routine_name, t1.routine_type, t1.DEFINER
FROM information_schema.routines t1
WHERE upper(t1.routine_schema) = 'db'
AND upper(t1.routine_definition) like '%ESTOQUE_PRODUTO%';
sexta-feira, 1 de julho de 2016
GIT - Comandos Básicos
Comandos básicos do GIT (para uso via prompt). Em todos os exemplos abaixo obedecem o seguinte padrão:
origin -> repositório no servidor
master -> repositório local
Lista de comandos:
origin -> repositório no servidor
master -> repositório local
Lista de comandos:
- git clone <user>@<servidor>:<path_to> - Copia os dados do servidor (<servidor>:<path_to>) no local e monta o repositório local (por default com nome master);
- git status - Mostra o status do repositório local
- git add . - Inclui no repositório local todos arquivos novos (inclusive em subdiretórios)
- git commit -asm '<comentario>' - Gera o pacote para atualização no repositório local
- git push origin master - Envia as atualizações do repositório local (master) para o repositório do servidor (origin)
- git pull - Atualiza o repositório local (master) com os dados do repositório do servidor (origin)
- git merge --stat origin/master - Mostra as diferenças existentes entre os repositório servidor (origin) e local (master)
sábado, 4 de junho de 2016
7zip via prompt - Windows
Exemplo de 7zip via prompt no Winfdows, com descompactação na saída padrão - redirecionamento. Preserva o arquivo original (compactado):
"c:\Program Files\7-Zip\7z.exe" e -so <arquivo> > <arquivos_descompactado>
Exemplo:
"c:\Program Files\7-Zip\7z.exe" e -so arquivo.gz > arquivo.txt
"c:\Program Files\7-Zip\7z.exe" e -so <arquivo> > <arquivos_descompactado>
Exemplo:
"c:\Program Files\7-Zip\7z.exe" e -so arquivo.gz > arquivo.txt
quarta-feira, 6 de abril de 2016
Instalação de Pacotes em "R" - CentOs/Fedora
Caso esteja recebendo a seguinte mensagem de erro na instalação de pacotes no "R":
--- Please select a CRAN mirror for use in this session ---
Error in download.file(url, destfile = f, quiet = TRUE) :
unsupported URL scheme
Warning: unable to access index for repository https://cran.rstudio.com/src/contrib:
unsupported URL scheme
Utilizar a sintaxe:
install.packages(<package_name>, dependencies=TRUE, repos='http://cran.rstudio.com/')
Exemplo:
install.packages('ggplot2', dependencies=TRUE, repos='http://cran.rstudio.com/')
--- Please select a CRAN mirror for use in this session ---
Error in download.file(url, destfile = f, quiet = TRUE) :
unsupported URL scheme
Warning: unable to access index for repository https://cran.rstudio.com/src/contrib:
unsupported URL scheme
Utilizar a sintaxe:
install.packages(<package_name>, dependencies=TRUE, repos='http://cran.rstudio.com/')
Exemplo:
install.packages('ggplot2', dependencies=TRUE, repos='http://cran.rstudio.com/')
quinta-feira, 10 de março de 2016
MySQL - ìndices
O uso de índices no MySQL é fantástico, mas vale aqui algumas observações.
Tab_1
cpo_a varchar(20) default null,
cpo_b int default 0,
cpo_c datetime default null,
cpo_d char(5) default null
Index indx01 (cpo_a, cpo_b, cpo_c);
Para esta tabela, usando o índice são válidas as seguintes pesquisas, para utilização do índice:
Caso o cpo_a NÃO seja utilizado em uma pesquisa, o índice NÃO será usado, como nos exemplos abaixo:
Outros exemplos de pesquisa, aonde o índice não será usado:
mysql> EXPLAIN SELECT * from tabela_a WHERE cd_reg = 1;
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | tabela_a | const | PRIMARY | PRIMARY | 4 | const | 1 | |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'a';
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 10 | const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd';
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 10 | const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd' and cpo_b = '2016-03-10' and cpo_c = 3;
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 24 | const,const,const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
1 row in set, 2 warnings (0.01 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd' and cpo_b = '2016-03-10';
+----+-------------+----------+------+---------------+--------+---------+-------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 15 | const,const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd';
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 10 | const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd' and cpo_c = '2016-03-10' and cpo_b = 3;
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 24 | const,const,const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_c = '2016-03-10' and cpo_b = 3;
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | tabela_a | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_b = 3;
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | tabela_a | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
Tab_1
cpo_a varchar(20) default null,
cpo_b int default 0,
cpo_c datetime default null,
cpo_d char(5) default null
Index indx01 (cpo_a, cpo_b, cpo_c);
Para esta tabela, usando o índice são válidas as seguintes pesquisas, para utilização do índice:
- cpo_a, cpo_b, cpo_c
- cpo_a, cpo_b
- cpo_a
Caso o cpo_a NÃO seja utilizado em uma pesquisa, o índice NÃO será usado, como nos exemplos abaixo:
- cpo_b, cpo_c
- cpo_b
- cpo_c
Outros exemplos de pesquisa, aonde o índice não será usado:
- cpo_a, cpo_c (falta o cpo_b)
- cpo_c, cpo_a (falta o cpo_b)
mysql> EXPLAIN SELECT * from tabela_a WHERE cd_reg = 1;
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | tabela_a | const | PRIMARY | PRIMARY | 4 | const | 1 | |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'a';
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 10 | const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd';
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 10 | const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd' and cpo_b = '2016-03-10' and cpo_c = 3;
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 24 | const,const,const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
1 row in set, 2 warnings (0.01 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd' and cpo_b = '2016-03-10';
+----+-------------+----------+------+---------------+--------+---------+-------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 15 | const,const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd';
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 10 | const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_a = 'd' and cpo_c = '2016-03-10' and cpo_b = 3;
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
| 1 | SIMPLE | tabela_a | ref | indx01 | indx01 | 24 | const,const,const | 1 | Using where |
+----+-------------+----------+------+---------------+--------+---------+-------------------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_c = '2016-03-10' and cpo_b = 3;
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | tabela_a | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * from tabela_a WHERE cpo_b = 3;
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | tabela_a | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
Linux - Permissão de Arquivos
chmod 400 file - Read by owner
chmod 040 file - Read by group
chmod 004 file - Read by world
chmod 200 file - Write by owner
chmod 020 file - Write by group
chmod 002 file - Write by world
chmod 100 file - execute by owner
chmod 010 file - execute by group
chmod 001 file - execute by world
Comuns:
777 - Liberado para todos para LER, GRAVAR e EXECUTAR
555 - Liberado para todos para LER e EXECUTAR
666 - Liberado para todos para LER e GRAVAR
444 - Liberado para todos para LER
222 - Liberado para todos para GRAVAR
111 - Liberado para todos para EXECUTAR
755 - Acesso completo para o Proprietário (owner) e aos demais permitido ler e executar;
775 - Acesso completo para o Proprietário (owner) e para membros do grupo; aos demais ler e executar;
750 - Acesso completo para o Proprietário (owner); para membros do grupo é permitido ler e executar e proibido acesso aos demais usuários;
chmod 040 file - Read by group
chmod 004 file - Read by world
chmod 200 file - Write by owner
chmod 020 file - Write by group
chmod 002 file - Write by world
chmod 100 file - execute by owner
chmod 010 file - execute by group
chmod 001 file - execute by world
Comuns:
777 - Liberado para todos para LER, GRAVAR e EXECUTAR
555 - Liberado para todos para LER e EXECUTAR
666 - Liberado para todos para LER e GRAVAR
444 - Liberado para todos para LER
222 - Liberado para todos para GRAVAR
111 - Liberado para todos para EXECUTAR
755 - Acesso completo para o Proprietário (owner) e aos demais permitido ler e executar;
775 - Acesso completo para o Proprietário (owner) e para membros do grupo; aos demais ler e executar;
750 - Acesso completo para o Proprietário (owner); para membros do grupo é permitido ler e executar e proibido acesso aos demais usuários;
quarta-feira, 24 de fevereiro de 2016
Incluir atalho para aplicativo no Menu do GNOME
Dicas válidas para o Gnome 2
- Estar como usuário root;
- Caminho /usr/share/applications/
- Criar arquivo com extensão .desktop
- Configuração do arquivo:
[Desktop Entry]
Name=<Aplicativo>
Comment=<Descrição>
Exec=<aplicativo> (deve estar ou ter link no /usr/bin)
Terminal=<false | true> (roda no terminal)
Type=<Application> Tipo
Icon=<icone> (deve estar em /usr/share/icons/)
MimeType=<arquivos associados a este aplicativo>
Categories=<categoria(s)> (submenu - se mais de um separar por ';')
Para maiores informações: https://developer.gnome.org/desktop-entry-spec/
Exemplo (arquivo : /usr/share/applications/mysql-workbench.desktop)
[Desktop Entry]
Name=MySQL Workbench
Comment=MySQL Database Design, Administration and Development Tool
Exec=mysql-workbench
Terminal=false
Type=Application
Icon=mysql-workbench
MimeType=application/vnd.mysql-workbench-model;
Categories=GTK;Database;Development;
sexta-feira, 5 de fevereiro de 2016
VM CentOS 6.6 32bits Minimal - Roteiro
install com 512 de ram / 8GB HD
alterar de 512 para 256 de ram após instalação
placa de rede na vm deve ser setada como bridge de uma das interfaces de rede do host
setenforce 0 (nao esquecer de desabilitar o selinux permanentemente)
vi ifcfg-eth0 -> on boot = yes
service network restart
yum update
yum install gcc kernel-devel make
yum install mysql-server
yum install httpd
yum install php php-mysql
chkconfig iptables off
chkconfig httpd on
chkconfig mysqld on
iptables -F
service iptables stop
diretorio compartilhado -> um diretorio no windows que será acessivel da VM
1-> Devices -> Shared Foldes -> crie um diretorio compartilhado
com a vm ativa:
Devices -> Install Guest Additions...
no linux:
mkdir /cdrom
mount /dev/cdrom /cdrom
/cdrom/VBoxLinuxAdditions.run
ll /media/sf_sua_pasta_compartilhada
pra montar em outro diretorio:
mount -t vboxsf sua_pasta_compartilhada /seudiretorionolinux
yum install vsftpd
alterar opcoes de acesso anonimo e chroot
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
chroot_local_user=YES
useradd webuser
passwd webuser
usermod --home /var/www/html/diretoriodosite webuser
service vsftpd restart
O eclipse possui plugins que permitem acessar e alterar arquivos diretamente via FTP
ps. Vc não precisa ficar olhando pra cara da VM enquanto ela está em execução:
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe startvm VSBPMS --type headless
starta a VM em background.
*** VSBPMS = nome da sua VM
--> Thanks JJ <--
alterar de 512 para 256 de ram após instalação
placa de rede na vm deve ser setada como bridge de uma das interfaces de rede do host
setenforce 0 (nao esquecer de desabilitar o selinux permanentemente)
vi ifcfg-eth0 -> on boot = yes
service network restart
yum update
yum install gcc kernel-devel make
yum install mysql-server
yum install httpd
yum install php php-mysql
chkconfig iptables off
chkconfig httpd on
chkconfig mysqld on
iptables -F
service iptables stop
diretorio compartilhado -> um diretorio no windows que será acessivel da VM
1-> Devices -> Shared Foldes -> crie um diretorio compartilhado
com a vm ativa:
Devices -> Install Guest Additions...
no linux:
mkdir /cdrom
mount /dev/cdrom /cdrom
/cdrom/VBoxLinuxAdditions.run
ll /media/sf_sua_pasta_compartilhada
pra montar em outro diretorio:
mount -t vboxsf sua_pasta_compartilhada /seudiretorionolinux
yum install vsftpd
alterar opcoes de acesso anonimo e chroot
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
chroot_local_user=YES
useradd webuser
passwd webuser
usermod --home /var/www/html/diretoriodosite webuser
service vsftpd restart
O eclipse possui plugins que permitem acessar e alterar arquivos diretamente via FTP
ps. Vc não precisa ficar olhando pra cara da VM enquanto ela está em execução:
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe startvm VSBPMS --type headless
starta a VM em background.
*** VSBPMS = nome da sua VM
--> Thanks JJ <--
Assinar:
Comentários (Atom)