Em 31/01/2012
Tags: setProperty must be overridden by all subclasses of SOAPMessage
Criou um webservice com o JBossWS e ao consumir recebeu a seguinte mensagem?
"setProperty must be overridden by all subclasses of SOAPMessage""
Utilizando o JBoss 4.2, você pode mover jboss-saaj.JAR de pasta e tudo estará resolvido...
De: [PASTA DO JBOSS]/cliente para: [PASTA DO JBOSS]/lib/endorsed
mais em:
http://javafree.uol.com.br/topic-870082-WebService-Client.html
http://rafaelliu.net/2008/05/08/setproperty-must-be-overridden-by-all-subclasses-of-soapmessage/
Em 17/01/2012
Tags: Nginx, Debian, VPS, PHP, FPM
Continuando os posts sobre como configurar um VPS, vamos instalar o NGINX.
http://ericmaicon.com.br/blog/3/configure-seu-vps-parte-1-instalando-o-postgres
http://ericmaicon.com.br/blog/4/configure-seu-vps-parte-2-instalando-o-mysql
http://ericmaicon.com.br/blog/5/configure-seu-vps-parte-3-instalando-o-php
Para baixar o fonte do NGINX, basta ir no seguinte link:
http://nginx.org/en/download.html
Acessando a pasta de source:
cd /usr/src
Baixando, descompactando e acessando a pasta:
wget http://nginx.org/download/nginx-1.1.6.tar.gz
tar -zxf nginx-1.1.6.tar.gz
cd nginx-1.1.6
Rodando o configure:
./configure --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module
Significado das opções acima:
--with-http_ssl_module = Com o Módulo SSL
--without-mail_pop3_module = Sem o módulo MAIL
--without-mail_imap_module = Sem o módulo IMAP
--without-mail_smtp_module = Sem o módulo SMTP
--with-http_stub_status_module = Módulo de captura de status do nginx (mais em http://wiki.nginx.org/HttpStubStatusModule).
Rodando o make e o make install:
make && make install
Criando o arquivo de configuração do NGINX, já preparado para utilizar com o FPM e PRINCIPALMENTE COM O YII Framework!!
vim /usr/local/nginx/nginx.conf
worker_processes 1;
error_log logs/error.log;
events {
use epoll;
multi_accept on;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
error_log /var/log/nginx/error.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 3;
server_tokens off;
access_log off;
client_max_body_size 32m;
client_body_timeout 60;
client_header_timeout 60;
send_timeout 60;
reset_timedout_connection on;
gzip on;
gzip_disable "MSIE [1-6].(?!.*SV1)";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 9;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
server_name localhost;
root /var/www;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php;
}
location $document_root/protected/ {
deny all;
}
location ~* \.(gif|jp(|e)g|png|mp(|e)g|avi|flv|swf)$ {
expires 30d;
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 360;
fastcgi_read_timeout 360;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
}
Criando o arquivo para iniciar o servidor:
vim /etc/init.d/nginx
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
pid=/var/lock/subsys/nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
. /lib/lsb/init-functions
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile $pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
kill `ps -A|awk '/nginx/{print $1}'`
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
stop
start
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
stop
start
echo "$NAME."
;;
status)
status_of_proc -p $pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
exit 1
;;
esac
exit 0
Setando a permissão e iniciando o servidor:
chmod +x /etc/init.d/nginx
/etc/init.d/nginx start
No próximo artigo veremos como instalar o Varnish Cache!
Em 16/01/2012
Tags: jquery, hover, over, javascript
Como fazer um hover simples em jquery? Precisei disso ontem, e resolvi compartilhar um script simples que eu fiz e ajuda nesse momento.
Supondo que você tenha o seguinte menu:
<ul>
<li>
<a href="#">
<img src="/images/vendas.png" alt="Vendas" title="Vendas" border="0" />
</a>
</li>
<li>
<a href="#">
<img src="/images/contato.png" alt="Contato" title="Contato" border="0" />
</a>
</li>
</ul>
Supondo que todas as imagens são PNG, e seu hover é uma imagem com o mesmo nome, porém acrescentado de _hover, exemplo:
contato.png
contato_hover.png
O Script abaixo irá pegar o src default e substituir pelo src concatenado de hover:
<script language="javascript"> $("#topo ul li img").hover(function()
{
$(this).attr("src", $(this).attr("src").replace(".png", "_hover.png"));
},function()
{
$(this).attr("src", $(this).attr("src").replace("_hover.png", ".png"));
});
</script>
Simples assim!
Em 29/12/2011
Tags: SCP, Linux, Stalled
Já utilizaram os comandos de envio/recebimento de arquivos do Linux SCP?
Envio:
scp /ArquivoFonte usuário@host:/diretório/ArquivoAlvo
Recebimento:
scp usuário@host:/diretório/ArquivoFonte /ArquivoAlvo
Utilizo muito eles. Hoje quando fui enviar um arquivo, ele não enviava NENHUM byte e do lado estava escrito: STALLED
Pesquisando, descobri que é porque a banda estava carregada demais. Se utilizarem o NTOP, será fácil descobrir o aplicativo que está consumindo muita banda, no meu caso, o MySQL!
Outro programa bom de utilizar é o bwm-ng, que vai lhe dar um consumo GERAL e SIMULTÂNEO da banda, para instalar:
apt-get install bwm-ng
Links auxiliares:
http://www.aixmind.com/?p=1371
http://pt.wikipedia.org/wiki/Unix_SCP
Em 29/12/2011
Tags: Ntop, source, Linux
Hoje precisei instalar o NTOP pelo source para acompanhar o tráfego de um servidor. Segue abaixo os comandos necessários:

Como eu instalei em um Debian já configurado, vou postar abaixo as bibliotecas que eu precisei (pode ser que você precise de outras):
apt-get install libtool build-essential autoconf libpcap-dev libgdbm-dev zlib1g-dev librrd-dev python-dev libgeoip-dev
Você pode baixar o NTOP pelo link:
http://sourceforge.net/projects/ntop/files/ntop/
Para baixá-lo no Linux, use o seguinte comando:
wget http://downloads.sourceforge.net/project/ntop/ntop/ntop-4.0.1/ntop-4.0.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fntop%2Ffiles%2Fntop%2F&ts=1325176158&use_mirror=ufpr
Por causa da URL do sourceforge, ele vai baixar com um nome um pouco estranho. Vamos mudar o nome desse arquivo e extrair o source:
mv ntop-4.0.1.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fntop%2Ffiles%2Fntop%2F ntop.tar.gz
tar zxvf ntop.tar.gz
Acessando a pasta e executando o autogen (checa as dependências necessárias pela instalação. Caso você não tenha executado o apt-get citado anteriormente, ele vai acusar erro aqui!):
cd ntop-4.0.1
./autogen.sh
Problemas possíveis:
You must have libtool installed to compile ntop.
Download the appropriate package for your distribution, or get the
source tarball from ftp://ftp.gnu.org/pub/gnu/libtool
We require version 1.4 or higher
We recommend version 1.5 or higher
você vai resolver instalando a libtool (indicando no primeiro apt-get desse tutorial).
You must have automake installed to compile ntop.
Download the appropriate package for your distribution, or get the
source tarball from ftp://ftp.gnu.org/pub/gnu/automake
We recommend version 1.6.3 or higher
você vai resolver instalando o zlib1g-dev (indicando no primeiro apt-get desse tutorial).
You must have autoconf installed to compile autogen.sh.
Download the appropriate package for your distribution, or get the
source tarball from ftp://ftp.gnu.org/pub/gnu/autoconf
We recommend version 2.53 or higher
você vai resolver instalando o autoconf (indicando no primeiro apt-get desse tutorial).
checking for pcap_lookupdev in -lpcap... no
*** FATAL ERROR ***
It looks that you don't have the libpcap distribution installed.
Download, compile and, optionally, install it.
você vai resolver instalando o libpcap-dev (indicando no primeiro apt-get desse tutorial).
*******************************************************************
*
* ERROR: gdbm header or library routines are missing
* (yes means it was found, no means it was not found)
*
* gdbm.h...no
* gdbm_open() in -lgdbm...no
*
*>>> No way to proceed.
*
*??? 1. Install libgdbm
*??? and Rerun ./configure
*??? or 2. Use the --with-gdbm-xxxxx= options
*
*******************************************************************
você vai resolver instalando o libgdbm-dev (indicando no primeiro apt-get desse tutorial).
Error! You need to have zlib.
você vai resolver instalando o libgdbm-dev (indicando no primeiro apt-get desse tutorial).
configure: error: Unable to find RRD at /usr/local: please use --with-rrd-home=DIR
você vai resolver instalando o librrd-dev (indicando no primeiro apt-get desse tutorial).
checking for python-config... no
Please install python-dev and rerun configure
você vai resolver instalando o python-dev (indicado no primeiro apt-get desse tutorial).
checking for GeoIP_record_by_ipnum in -lGeoIP... no
checking for GeoIP_name_by_ipnum_v6 in -lGeoIP... no
Please install GeoIP (http://www.maxmind.com/)
você vai resolver instalando o libgeoip-dev (indicado no primeiro apt-get desse tutorial).
Compilando:
make && make install
Pronto! pode usar seu NTOP a vontade agora!
Se depois de instalado, na hora de utilizar der o seguinte erro:
ntop: error while loading shared libraries: libntopreport-4.0.1.so: cannot open shared object file: No such file or directory
execute:
ldconfig
Links utilizados:
http://agacho.blogspot.com/2010/08/how-to-install-ntop-401-on-debian.html
http://www.cyberciti.biz/faq/howto-install-ntop-on-rhel-centos-fedora-linux/
Em 22/12/2011
Tags: VPS, Debian, PHP, fonte
Para quem está lendo esse artigo pela primeira vez, pode acompanhar também a instalação do MySQL e do PosgreSQL através dos links:
http://ericmaicon.com.br/blog/3/configure-seu-vps-parte-1-instalando-o-postgres
http://ericmaicon.com.br/blog/4/configure-seu-vps-parte-2-instalando-o-mysql
Nesse artigo irei mostrar como instalar o PHP e algumas bibliotecas essenciais para o seu funcionamento, tal como o GD.
Para instalar o GD, temos que instalar duas bibliotecas, a JPEG e a PNG.
Para instalar a JPEG, você poderá baixar os fontes no seguinte link:
http://code.google.com/p/quirkysoft/downloads/detail?name=jpegsrc.v6b.tar.gz&can=2&q=
Acessando a pasta de sources:
cd /usr/src
Baixando, descompactando e acessando a pasta:
wget http://quirkysoft.googlecode.com/files/jpegsrc.v6b.tar.gz
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
Preparando o ambiente:
./configure --prefix=/usr/local
Significado da opção acima:
--prefix: Pasta de destino dos objetos instalados
Executando as tarefas do arquivo Makefile e executando a tarefa install-lib:
make && make install-lib
Agora, vamos instalar a biblioteca PNG. Você pode baixar os fontes do seguinte link:
http://sourceforge.net/projects/libpng/files/
Acessando a pasta de sources:
cd /usr/src
Baixando, descompactando e acessando a pasta:
wget http://downloads.sourceforge.net/project/libpng/libpng15/1.5.6rc03/libpng-1.5.6rc03.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flibpng%2Ffiles%2Flibpng15%2F1.5.6rc03%2F&ts=1319819624&use_mirror=ufpr
tar zxvf libpng-1.5.6rc03.tar.gz
cd libpng-1.5.6rc03
Preparando o ambiente:
cp scripts/makefile.linux makefile
Executando as tarefas do arquivo Makefile e executando a tarefa install:
make && make install
Depois de todas as libs necessárias pelo GD instalada, vamos instalar o GD baixando o source desse link:
https://bitbucket.org/pierrejoye/gd-libgd
Acessando a pasta de sources:
cd /usr/src
Baixando, descompactando e acessando a pasta:
wget https://bitbucket.org/pierrejoye/gd-libgd/get/GD_2_0_33.tar.gz
tar zxvf GD_2_0_33.tar.gz
cd pierrejoye-gd-libgd-GD_2_0_33/src
Preparando o ambiente:
./configure
Executando as tarefas do arquivo Makefile e executando a tarefa install:
make && make install
Como podem perceber, as instalações são bem semelhantes. Vamos repetir o processo, porém para instalar o tão sonhado PHP, que pode ser baixado no link:
http://www.php.net

Acessando a pasta de sources:
cd /usr/src
Baixando, descompactando e acessando a pasta:
wget http://br2.php.net/distributions/php-5.3.8.tar.gz
tar zxvf php-5.3.8.tar.gz
cd php-5.3.8
Preparando o ambiente:
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-gd --with-zlib --with-curl=/usr/src/curl --with-zlib-dir --with-pdo-pgsql --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-pear --with-openssl --with-memcached --enable-fpm --enable-soap --enable-calendar --enable-sockets --enable-zip --disable-debug
Se quiser ter acesso a lista de opções de configuração: http://www.php.net/manual/en/configure.about.php
Executando as tarefas do arquivo Makefile e executando a tarefa install:
make && make install
Criando o arquivo de configuração:
cp php.ini-production /usr/local/php/etc/php.ini
Definindo o PATH com a pasta bin do PHP:
echo export PATH=/usr/local/php/bin:$PATH >> ~/.bash_profile
source ~/.bash_profile
A Partir de agora, vamos configurar uma nova ferramenta, o PHP-FPM. No site do aplicativo, o seu significado é PHP FastCGI Process Manager, ele tem como tarefa substituir o FastCGI.
CGI: Tecnologia capaz de gerar páginas dinâmicas.
FastCGI: Extensão do CGI que promove a alta performance para todo o tipo de aplicação WEB.

Por que o PHP-FPM?
Dentre vários benchmarks na internet, podemos pegar o seguinte link e tirar como base que o FPM tem um melhor aproveitamento:
http://vpsbible.com/php/php-benchmarking-phpfpm-fastcgi-spawnfcgi/
Para configurar o PHP-FPM.conf, vamos editar o seguinte arquivo /usr/local/php/etc/php-fpm.conf:
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
emergency_restart_threshold = 5
emergency_restart_interval = 2
process_control_timeout = 2
daemonize = yes
[www]
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
user = nobody
group = nobody
pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 10
pm.max_requests = 0
pm.status_path = /fpmstatus
ping.path = /ping
ping.response = pong
request_terminate_timeout = 10
request_slowlog_timeout = 10
slowlog = /var/log/$pool.log.slow
catch_workers_output = yes
env[HOSTNAME] = localhost
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
php_admin_value[date.timezone] = Europe/London
php_value[upload_max_filesize] = 10M
php_value[max_execution_time] = 120
Caso queiram analisar melhor cada tag, pode usar o seguinte link: http://php-fpm.org/wiki/Configuration_File
Para a inicialização do PHP-FPM, faremos o seguinte arquivo /etc/init.d/php-fpm:
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/usr/local/php/sbin/php-fpm
php_fpm_CONF=/usr/local/php/etc/php-fpm.conf
php_fpm_PID=/usr/local/php/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;
'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop)
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-exit"
exit 1
else
echo " done"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;
esac
Setando as devidas permissões e rodando o PHP-FPM:
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
Com isso, finalizamos a instalação do PHP. Lembre que ele não irá rodar sem um servidor de aplicação, quer será o próximo tutorial: Como instalar o NGINX.
Em 22/12/2011
Tags: VPS, Debian, MySQL, fonte
Dando sequência aos artigos de "Configure seu VPS", (caso não tenha visto, verifique clicando aqui a parte 1) vamos instalar o MySQL.
MySQL é um Banco de Dados muito utilizado em sites. Mesmo sendo simples, existe muitos usuários grandes, tais como Nasa, Banco Bradesco, HP, Nokia, Sony e outros.

Antes de começar a instalação do MySQL, precisamos instalar o CMake. Ele tem uma característica similar ao Make, porém é cross-plataform. Vamos à instalação:
Acessando a pasta de sources:
Baixando, descompactando e acessando a pasta:
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
tar -xzf cmake-2.8.4.tar.gz
cd cmake-2.8.4
Preparando e Executando as tarefas:
./configure
make && make install
O Cmake já está instalado. Vamos agora começar a instalação do MySQL. Você pode baixar o source do seguinte link:
http://dev.mysql.com/downloads/mysql/5.0.html#source
Acessando a pasta de sources:
Baixando, descompactando, acessando a pasta e preparando o ambiente:
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.19.tar.gz/from/http://mysql.cce.usp.br/
tar -zxvf mysql-5.5.19.tar.gz
cd mysql-5.5.19
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_TCP_PORT=3306 -DWITH_INNOBASE_STORAGE_ENGINE=1 .
Significado das opções acima:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql: diretório de todos os arquivos de instalação.
-DMYSQL_TCP_PORT=3306: porta de instalação.
-DWITH_INNOBASE_STORAGE_ENGINE=1: Instala o Engine Innobase.
Atente ao ponto no final do comando!
Executando as tarefas do arquivo Makefile e executando a tarefa install:
make && make install
Vamos agora configurar o usuário do banco (NÃO É O USUÁRIO QUE IRÁ ACESSAR O BANCO):
groupadd mysql
useradd -g mysql mysql
Definindo o PATH com a pasta bin do MySQL:
echo export PATH=/usr/local/mysql/bin:/usr/local/mysql/scripts:$PATH >> ~/.bash_profile
source ~/.bash_profile
Vamos instalar o banco de dados (os dados em sí):
mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
Significado das opções acima:
--basedir=/usr/local/mysql: diretório base do MySQL
--datadir=/usr/local/mysql/data: diretório de data do MySQL
--user=mysql: usuário do MySQL
vamos criar um my.cnf na pasta /usr/local/mysql/ com o seguinte conteúdo:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
server-id = 1
skip-external-locking
bind-address = 127.0.0.1
thread_stack = 192K
max_binlog_size = 100M
bulk_insert_buffer_size = 8M
connect_timeout=10
interactive_timeout=50
join_buffer=1M
key_buffer=16K
max_allowed_packet=1M
table_cache = 4
max_connect_errors=10
max_connections=100
max_heap_table_size = 8M
myisam_sort_buffer_size=8M
query_cache_limit = 4M
query_cache_size = 250M
query_cache_type = 1
query_prealloc_size = 65K
query_alloc_block_size = 128K
read_buffer_size=1M
read_rnd_buffer_size=768K
skip-networking
sort_buffer=64K
thread_cache_size=1024
thread_concurrency=8
tmp_table_size = 32M
wait_timeout=500
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
Caso queira conhecer cada comando acima, entre no link: http://dev.mysql.com/doc/refman/5.1/en/option-files.html
Chegou a parte de setar a senha do root. Nesse momento eu tive problema na instalação, pois era para ter registros na tabela user do banco mysql, porém a minha estava vazia. Veja a minha solução:
Iniciei o mysql em modo skip-grant-tables (ele não solicita senhas de acesso):
mysqld_safe --skip-grant-tables &
Loguei e acessei a database mysql:
mysql -u root
use mysql;
Inseri um novo root:
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv , Reload_priv, Shutdown_priv, Process_priv, File_priv , Grant_priv , References_priv, Index_priv , Alter_priv , Show_db_priv, Super_priv , Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, Event_priv , Trigger_priv, Create_tablespace_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) VALUES ('localhost','root',password('SUASENHAAQUI'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y' ,'','','','',0,0,0,0);
Repare bem para o texto SUASENHAAQUI, é aqui que deve colocar sua senha, entre aspas!
Renovando os acessos e saindo do banco:
flush privileges;
exit;
Depois, mate o processo do MySQL e inicie de modo normal:
mysqld_safe &
Finalizamos a instalação do MySQL. No próximo artigo, veremos a instalação do PHP e algumas bibliotecas necessárias!
Links que foram de grande ajuda:
http://community.webfaction.com/questions/3838/compiling-a-private-mysql-installation-in-your-home-directory
http://laffers.net/howtos/howto-install-mysql/
Em 22/12/2011
Tags: VPS, Debian, Postgres, fonte
Para colocar esse site no ar, eu contratei um VPS da Webbynode e decidi instalar tudo pelo fonte.
Utilizei o plano mais barato, de $15/mo, que dá somente 384mb de ram: http://webbynode.com/signup/

A Experiência foi excelente, instalei todos os aplicativos necessários, tais como banco MySQL e PostgreSQL, PHP com várias bibliotecas, PHP-FPM, NGINX, Memcached e ontem finalizei a instalação do Varnish. O Site está bem rápido (se acharem lento, comentem por favor).
O Primeiro aplicativo instalado foi o PostgreSQL, um dos bancos que mais gosto de trabalhar. Para instalar ele (e todos os outros aplicativos) vamos instalar alguns aplicativos e libs necessárias:

Vamos solicitar ao aptitude para que ele verifique todos os repositórios disponíveis e baixe a lista de pacotes:
Instalando os aplicativos/libs necessários para compilação e instalação dos aplicativos (esse comando vai servir para TODOS os artigos: "Configure seu VPS"):
aptitude install build-essential libxml2-dev curl libpcre3-dev libzzip-dev libssl-dev libcurl4-openssl-dev vim libncurses5-dev autoconf
Depois que a instalação finalizar, vamos baixar o fonte do PostgreSQL, compilar e instalar. Para isso, acesse o site:
http://www.postgresql.org/ftp/source/
No momento em que fiz esse artigo, utilizei a seguinte URL (lembrando que pode mudar):
http://wwwmaster.postgresql.org/redir/198/h/source/v9.1.1/postgresql-9.1.1.tar.gz
Acessando a pasta aonde ficará todos os fontes:
cd /usr/src/
Baixando, extraindo e acesso os fontes:
wget http://wwwmaster.postgresql.org/redir/198/h/source/v9.1.1/postgresql-9.1.1.tar.gz
tar zxvf postgresql-9.1.1.tar.gz
cd postgresql-9.1.1
Vamos preparar o source para ser compilado:
./configure --without-readline --prefix=/usr/local/postgres --bindir=/usr/bin --sysconfdir=/etc/postgres --without-zlib
Significado das opções acima:
--without-readline: Não irá instalar o readline, essa opção desabilita as linhas de comando e o histórico do psql, a documentação do PostgreSQL não recomenda.
--prefix=/usr/local/postgres: diretório de todos os arquivos de instalação.
--bindir=/usr/bin: diretório dos executáveis.
--sysconfdir=/etc/postgres: diretório dos arquivos de configuração.
--without-zlib: Não irá instalar o zlib, essa opção desabilita as compressões na utilização dos comandos pg_dump e pg_restore.
você pode conhecer melhor os comandos aqui: http://www.postgresql.org/docs/8.4/static/install-procedure.html
Executando as tarefas do arquivo Makefile e executando a tarefa install:
make && make install
A partir daqui, o postgreSQL já está instalado. Agora vamos criar o usuário, pasta de data e iniciá-lo.
Criando o usuário:
adduser postgres
Detalhe super importante dessa etapa: a senha cadastrada no usuário acima, será a senha de acesso ao banco de dados.
Criando a pasta aonde será armazenado os dados e dando permissão ao usuário:
mkdir /usr/local/postgres/data
chown postgres:postgres /usr/local/postgres/data
Logando com o usuário postgres e inicializando um cluster do PostgreSQL:
su - postgres
initdb -D /usr/local/postgres/data
Por fim, vamos iniciar o postgres e deslogar do usuário:
postmaster -D /usr/local/postgres/data >> /usr/local/postgres/data/logfile &
exit
O comando acima será utilizado toda vez que você quiser iniciar o banco de dados!
Seu postgres está instalado e funcionando perfeitamente. Vale lembrar que não foi uma instalação levando em consideração tunning. Para isso, teriamos que levar em consideração o hardware, modo de distribuição das partições e parâmetros de instalação e inicialização do banco de dados.
No próximo artigo, veremos como instalar o MySQL.
Links interessantes: http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Instala%C3%A7%C3%A3o/No_Linux
Tunning Postgres: http://www.varlena.com/GeneralBits/Tidbits/perf.html
Mudando a senha do postgres: http://cachina.wordpress.com/2008/05/02/mudando-senha-do-postgresql/
Liberando conexões remotas: http://www.oficinadanet.com.br/artigo/2101/liberando_conexoes_remotas_ao_postgresql
Em 17/12/2011
Tags: YII, Framework, PHP, Orientado a Objeto, Agilidade
Estou estudando muito sobre a seguinte questão: "Até que ponto podemos utilizar o PHP ou Java em grandes projetos". Com isso, comecei a estudar algum framework "descente" em PHP para conseguir equiparar com o Java.
Certo tempo atrás o YII Framework surgiu como uma alternativa ao Zend e ao CodeIgniter. Não tive preguiça de desenvolver quando comecei (o que geralmente acontece quando estou aprendendo algo novo e complexo).

O YII Framework tem uma comunidade excelente, ótimos screencasts para iniciantes e sabe aquela história de que nunca existiu um gerador de código bom? MENTIRA! O GII é um code Generation baseado em templates, ou seja, você pode gerar os códigos do jeito que VOCÊ QUISER!
Já criei 2 sites com o YII e cada dia ele me supreende cada vez mais. O sistema de Plugins e módulos dele é perfeito, fora o controle de permissões, integração com javascript e outras coisinhas mais.
Widgets! Anote essa palavra. No YII você será nada sem Widgets!

Vou utilizar esse espaço para falar de YII e muitas outras tecnologias! Aguardem.
Em 17/12/2011
Tags: hello world, tecnlogia

Depois de muito tempo que esse site estava só "em construção", resolvi colocar em prática o que aprendi com o YII Framework e construir um site para mim.
Não foi feito em Wordpress! Não detesto o Wordpress, só acho que para um programador WEB seria vergonha usar algo pronto. Aproveitei e juntei com a vontade de utilizar o YII e fiz esse site!
Em breve algumas coisas melhores! =)