terça-feira, 23 de novembro de 2010

quinta-feira, 28 de outubro de 2010

SQL MERGE no MySQL

Hoje finalmente me deparei com uma feature cuja solução direta era fazer um MERGE no MySQL.

Para minha surpresa o MySQL não suporte MERGE [1].

Como assim ? Este comando existe desde 2008 no padrão SQL:2008 e ainda não foi implementado.
Enfim, é o custo de não pagar por uma licença.

Pesquisando um pouco descobri outro comando para fazer o trabalho do MERGE.
O ponto negativo é que terei que usar um comando específico do MySQL.

Depois se quiser trocar de banco de dados terei que reescrever todas as queries.
Foda né ? Posteriormente qual o custo disso ?
Não compensa pagar logo a licença de um BD decente ?
Pode ser que o custo de adaptação posterior em termos de desenvolvimento, testes, homologação seja muito mais caro que pagar a licença do Oracle ou DB2.

Enfim, uma coisa para se pensar...

Mas voltando a solução do problema.
A primeira solução com que me deparei foi o REPLACE [3].
Mas lendo a documentação me deparei com a seguinte frase.

REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for aPRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted.

Porque diabos ele faz um DELETE e depois um INSERT ao invés de fazer um simples UPDATE ?
Alguém pode me explicar isso ?

Isso inviabilizou o uso do REPLACE devido a restrições de chaves estrangeiras que todos conhecem. Não poderia apagar e escrever linhas referenciadas por outras tabelas.

Pesquisando com mais cuidado achei o salvado da pátria que é o

INSERT ... ON DUPLICATE KEY UPDATE [4]

Pois bem, ele resolve exatamente o que queria fazer com o MERGE.
O único problema é que isso é uma extensão do MySQL deixando a query fora do padrão.

Para referência segue um query com o KEY UPDATE

INSERT INTO USERS ( id, name, location)
VALUES
( 1, 'leonardo', 'mantena')
ON DUPLICATE KEY UPDATE
name = VALUES (name),
location = VALUES (location)


sexta-feira, 22 de outubro de 2010

Fazendo Post Get de um JSON com o curl



curl -d @create_user.json -H"Content-Type: application/json" -H"Aplication/json" http://teste.com:8080/rest/teste

Onde create_user.json é o arquivo local com o conteúdo JSON

Para fazer um GET faça:

curl -v -X GET -H"Accept: application/json" http://teste:9080/rest/teste

Sem mais...

segunda-feira, 18 de outubro de 2010

Como converter uma chave privada Linux PEM para o Putty PPK

Usuários Linux acostumados com o uso de certificados no formato PEM vão ter problemas ao utilizar o Putty no Windows.

Este guia vai ensinar como fazer a conversão para o formato apropriado do Putty.
Sei que a maioria não usa chaves privadas, mas quem usar o Amazon EC2 será obrigado a lidar com isso.

Todas as chaves privadas de acesso as máquinas virtuais do Amazon EC2 estão no formato PEM.
Para acessar do Windows usando o Putty por exemplo, estas devem ser convertidas para PPK.

Segue os passos:

1. Fazer o download do utilitário PuttyGen

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Link Direto: http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe

2. Executar o PuttyGen, clicar no menu em Conversions e depois Import Key.




2. Localizar o arquivo PEM a ser convertido




3. Clicar em Save Private Key



4. Confirmar e Salvar sem Passphrase. Clique em Yes


5. Escolher onde Salvar e o nome do arquivo PPK.




6. Configurar a chave em sua conexão no Putty












terça-feira, 5 de outubro de 2010

Habilitando Conexões Remotas no MySQL

Com a instalação default do MySQL não é possível conectar remotamente no banco de dados. Pela configuração default apenas localhost pode se conectar.

Neste cenário, ao tentar conectar remotamente no banco ele retorna o seguinte erro:

KHost '' is not allowed to connect to this MySQL serverConnect

Para permitir outros hosts basta fazer o seguinte:

1. Conectar no Banco

# mysql -uroot -p

mysql> grant all privileges on *.* to 'user'@'ip' identified by 'passwd';


Onde:
user: é o usuário que você que usar.
ip: a máquina remota que você quer permitir.
passwd: a senha do usuário

Por exemplo:

mysql> grant all privileges on *.* to 'root'@'192.168.2.60' identified by 'teste';

Para habilitar toda a rede classe C do exemplo basta usar o wildcard %
(ex 192.168.2.%)

O ultimo passo é fazer o flush da configuração:

mysql> flush privileges;

ScreenShot da operação



[]'s

Leonardo

quarta-feira, 15 de setembro de 2010

Equivalente do LDD no HPUX


Temos 2 opções:

1. chatr [binario]
2. odump -sllibload [binario]

Onde binario pode ser um programa ou uma shared library.

Exemplo de outputs para uma shared library.


bash-3.2# chatr release_pic/swpfs.sl
release_pic/swpfs.sl:
shared library
shared library dynamic path search:
SHLIB_PATH disabled second
embedded path disabled first Not Defined
shared library list:
static /opt/company/lib/libstdcpp.sl
dynamic /opt/gcc-3.4.4/lib/libstdc++.sl.6
dynamic /usr/lib/libm.2
dynamic /opt/gcc-3.4.4/lib/libgcc_s.sl



bash-3.2# odump -sllibload release_pic/swpfs.sl

Shared Library Load List for release_pic/swpfs.sl:

Order Name

0 release_pic/swpfs.sl
1 ^ /opt/company/lib/libstdcpp.sl
2 ^ /opt/gcc-3.4.4/lib/libstdc++.sl.6
3 ^ ^ /usr/lib/libm.2
4 ^ ^ /opt/gcc-3.4.4/lib/libgcc_s.sl
5 ^ ^ ^ /usr/lib/libc.2
6 ^ ^ ^ ^ /usr/lib/libdld.2
7 ^ ^ /usr/lib/libc.2
8 ^ ^ ^ /usr/lib/libdld.2
9 ^ /usr/lib/libm.2
10 ^ /opt/gcc-3.4.4/lib/libgcc_s.sl
11 ^ ^ /usr/lib/libc.2
12 ^ ^ ^ /usr/lib/libdld.2

terça-feira, 1 de junho de 2010

Google recomenda que funcionários não usem Windows

O Google sempre foi liberal em relação ao Sistema Operacional que seus funcionários usavam. Todos podiam escolher se queriam Windows, Linux, Mac, etc.

No entanto, desde que sofreu os famosos ataques provenientes da China essa política começou a mudar e novos funcionários precisam pedir permissão caso queiram usar Windows.



Referência



http://www.ft.com/cms/s/2/d2f3f04e-6ccf-11df-91c8-00144feab49a.html

Comitê do GCC libera o uso do C++

Comitê do GCC libera o uso do C++

Mark Mitchell anunciou hoje que o comitê do GCC liberou o uso do C++ no desenvolvimento do GCC.

Mas na prática eles vão usar C com objetos. Isso porque o uso de templates (com exceção do STL), múltipla herança e exceções serão proibidas. A idéia é usar apenas recursos que sejam fáceis de programadores C entenderem e reduzir a probabilidade dos desenvolvedores C++ menos experientes fazerem merda.

Referências

http://gcc.gnu.org/ml/gcc/2010-05/msg00705.html

quinta-feira, 18 de março de 2010

quarta-feira, 17 de março de 2010

Aumentando o tamanho do filesystem no HP-UX

Neste postirei exemplificar como aumentar o tamanho do /home

Primeiro deve-se desmontar qualquer pasta NFS que esteja montando no /home.
Depois fechar todos os arquivos que estejam referenciando arquivos do /home.

# fuser -k /home (manda um sigkill para todos os processo usando arquivos em /home)
# cat /etc/fstab (verificar o volume logico e o tipo do filesystem)

No meu caso a entrada de /home tem a seguinte linha:

/dev/vg00/lvol5 /home vxfs delaylog 0 2

Que significa que meu /home é do tipo vxfs e esta montado no volume lógico /dev/vg00/lvol5

# umount /home (desmonta o /home)

# lvextend -L 512 /dev/vg00/lvol5 (aumenta o tamanho do LV para 512 MB)

# extendfs -F vxfs /dev/vg00/rlvol5 (faz com que o filesystem use todo o espaco)

# mount /home

Neste momento seu home esta com 512 MB