sexta-feira, 4 de maio de 2012

Conectando banco de dados mysql com node.js


Para o Node.js se comunicar com o mysql  existe o pacote 'mysql':

suaron@mordor$ sudo npm install mysql -g


No arquivo em node.js (o código está em coffeescript):

mysql = require('mysql').createClient();
mysql.host = 'localhost';
mysql.user = 'usuario';
mysql.password = 'senha';
mysql.database = 'nome_do_banco';


mysql.query "SELECT * FROM users WHERE id = '#{user_id}'", (error, results) ->
        if error
                sys.puts "Mysql Error: #{error.message}"
                        return
        else
                sys.puts results if results.length > 0
# mysql.query

Coffeescript: convertendo String em Date

O formato Date do javascript (e, por consequência, do coffeescript), só aceita alguns formatos da data no seu construtor. E entre esses formatos não está incluído o que usamos aqui no Brasil, que é dd/mm/yyyy.

Para instanciar uma nova data tendo uma string nesse formato utilizamos expressões regulares para fazer a conversão necessária:


date_from_string = (string) ->
date = string.match /// (\d{2})/(\d{2})/(\d{4}) ///
new Date("#{date[2]}/#{date[1]}/#{date[3]}")
# format_date


Exemplo de uso:

string = '04/05/2012' # 04 de Maio de 2012
date = date_from_string string

quinta-feira, 3 de maio de 2012

POST com curl

Para fazer uma requisição do tipo POST com a curl é muito simples, basta executar:

sauron@mordor$ curl -d "param1=value1&param2=value2" http://example.com/path

Enviando mensagens socket.io com ruby

Para comunicar o ruby com um servidor socket.io e enviar uma mensagem podemos utilizar a gem socketio-client

sauron@mordor$ gem install socketio-client

Exemplo de código do cliente (ruby):


require 'SocketIO'

client = SocketIO.connect 'http://localhost:8888' do
after_start do
emit 'event', {id: '5'}
end
end


Exemplo de código do servidor (coffeescript):


sys = require 'sys'
io = require('socket.io').listen 8888

sys.puts 'Starting node server...'

io.sockets.on 'connection', (client) ->
client.on 'event', (data) ->
                sys.puts data

node: cannot find module

Se o node não está conseguindo achar os módulos (cannot find module ...), pode ser que o path (caminho onde ele procura pelos módulos) não esteja configurado corretamente.
Para configurá-lo, coloque esta linha no final do arquivo ~/.bashrc (arquivo que é executado toda vez que você iniciar o sistema).

NODE_PATH=/usr/local/lib/node_modules/

Caso seus módulos estejam instalado em outro diretório que não seja /usr/local/lib/node_modules, faça as alterações necessárias.

Para recarregar o arquivo .bashrc execute:

sauron@mordor$ source ~/.bashrc

ORM CarrierWave do MongoDB

Para usar a gem carrierwave com mongodb, é necessário configurar o orm (orm/mongomapper).
Você pode encontrar esse orm aqui.
Baixe o arquivo (mongomapper.rb) e copie para o diretório orm do carrierwave.
A localização do diretório vai depender da versão do carrierwave e de onde estão instaladas as suas gems.

No meu caso, o diretório esté em:
~/.rvm/gems/ruby-1.9.2-p318/gems/carrierwave-0.5.8/lib/carrierwave/orm
e
~/.rvm/gems/ruby-1.9.3-p125/gems/carrierwave-0.6.1/lib/carrierwave/orm

Você deve colocar o orm no diretório que você está utilizando, fique atento à versão da gem (como no meu caso eu tenho as versões 0.5.8 e 0.6.1, e tive que colocar o arquivo nos dois diretórios).

Neste diretório também tem o orm para o activerecord, que é utilizado quando você usa um banco padrão (como o mysql ou sqlite).


sauron@mordor: $ pwd
/home/ricardo/.rvm/gems/ruby-1.9.3-p125/gems/carrierwave-0.6.1/lib/carrierwave/orm
sauron@mordor: $ ls
activerecord.rb  mongomapper.rb

quinta-feira, 15 de março de 2012

Permissões de arquivos no linux

No linux, todo arquivo possui suas permissões, que representam o nível de acesso para o dono do arquivo, para o grupo ao qual ele pertence e para os demais usuários.

As permissões são representadas por esse conjunto de letras na primeira linha da listagem vertical (ls -l):

-rw-------  1 sauron sauron     1675 2012-03-14 21:42 arquivo_1
-rwxr-xr-x  1 sauron sauron      396 2012-03-14 21:42 arquivo_2

r -> read, permissão de leitura do arquivo
w -> write, permissão de escrita no arquivo
x -> execute, permissão de execução do arquivo (no caso de um diretório, significa abrir/entrar o diretório)

Para alterar essas permissões utilizamos o comando chmod. Existem duas formas de alterar as permissões de um arquivo:

- Utilizando as letras que representam as operações (mais simples)
- Utilizando a representação octal (mais eficiente)

Utilizando as letras

Como foi mostrado antes, cada operação é representada por uma letra:

r -> read
w -> write
x -> execute

Cada usuário/categoria é, também, representado por uma letra:

u -> dono do arquivo. É a opção padrão.
g -> grupo ao qual o dono do arquivo pertence
o -> outros usuários (que não se encaixem nas opções anteriores)
a -> todos os usuários (aplica a permissão em todos os níveis: u, g e o)

Para alterar as permissões, utilizamos dois operadores:

+ -> adicionar permissão
- -> remover permissão

Exemplos:

sauron@mordor:~$ ls -l arquivo
-rw-r--r-- 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod u-w arquivo
sauron@mordor:~$ ls -l arquivo
-r--r--r-- 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod +w arquivo
sauron@mordor:~$ ls -l arquivo
-rw-r--r-- 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod a+x arquivo
sauron@mordor:~$ ls -l arquivo
-rwxr-xr-x 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod g-r,o-r arquivo
sauron@mordor:~$ ls -l arquivo
-rwx--x--x 1 sauron sauron 0 2012-03-15 20:10 arquivo


Utilizando o modo octal

Apesar de simples de aprentar, alterar as permissões utilizando as letras dá um pouco de trabalho. A maneira mais eficiente de fazer isso é utilizando o modo octal.
No modo octal, cada grupo de permissões possui uma representação octal, que é definida pela presença ou não de determinada permissão (bit ligado ou desligado).
Tabela representando o modo octal:

Permissão Bits ligados/desligados Representação octal
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117

Exemplos:

sauron@mordor:~$ ls -l arquivo
-rw-r--r-- 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod 666 arquivo
sauron@mordor:~$ ls -l arquivo
-rw-rw-rw- 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod 600 arquivo
sauron@mordor:~$ ls -l arquivo
-rw------- 1 sauron sauron 0 2012-03-15 20:10 arquivo
sauron@mordor:~$ chmod 777 arquivo
sauron@mordor:~$ ls -l arquivo
-rwxrwxrwx 1 sauron sauron 0 2012-03-15 20:10 arquivo