terça-feira, 25 de setembro de 2012

Bumblebee no Fedora 17 64 bits - Dell XPS 15z

Eu estava configurando a aceleração gráfica do meu dell xps no Fedora 17 e comecei a estudar qual seria a melhor forma de resolver. Durante a minha pesquisa, encontrei diversos artigos mencionando a utilização de uma solução da NVidia denominada Optimus para controlar quando utilizar a placa de video com memória dedicada e quando utilizar a alternativa com memória integrada.

Mas como assim? Seu notebook têm duas placas de vídeo? Sim, e esta estratégia é utilizada para economia de energia. Quando a máquina entra em "modo econômico", utiliza uma placa intel compartilhada e quando precisa de poder gráfico, utiliza a placa de vídeo NVidia (no meu caso uma 540m).

Tentei configurar o Bumblebee/Optimus de diversas formas diferentes, sendo que todas elas solicitavam que eu alterasse o xorg.conf, instalasse o akmodnivdia, etc. Dentre as minhas pesquisas acabei encontrando um processo bem simples para resolver o problema com poucos comandos. Inicialmente precisamos adicionar alguns repositórios ao yum, através do seguinte comando:

sudo yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora17/noarch/bumblebee-nonfree-release-1.0-1.noarch.rpm

sudo yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora17/noarch/bumblebee-release-1.0-1.noarch.rpm

Após executarmos os comandos descritos acima, precisamos instalar o bbswitch, o bumblebee e o bumblebee-nvidia, conforme demonstrado abaixo:

sudo yum -y install bbswitch bumblebee

sudo yum -y install bumblebee-nvidia

Reinicie sua máquina e pronto! Para testar, basta executar os comandos demonstrados abaixo:

glxgears

A execução acima não utiliza aceleração gráfica, e no meu caso apresentou o seguinte número de FPS:

302 frames in 5.0 seconds = 60.276 FPS
300 frames in 5.0 seconds = 59.818 FPS

E para testar a execução com aceleração gráfica, vamos executar o comando:

optirun glxgears

Este caso apresentou o seguinte FPS, melhorando considerávelmente a execução, como podemos ver:

2696 frames in 5.0 seconds = 539.101 FPS
2761 frames in 5.0 seconds = 552.123 FPS
2778 frames in 5.0 seconds = 555.365 FPS


sexta-feira, 21 de setembro de 2012

Preparando o Fedora 17 64 bits para instalar o Oracle Service Bus 11g

Nesta postagem, instalaremos todos os componentes necessários para, futuramente, o Ofacle Fusion Middleware OSB 11.1.1. Este procedimento também instala os softwares necessários para gerar um ambiente de desenvolvimento baseado em Oracle Weblogic Server e Oracle Database. Inicialmente necessitamos instalar alguns softwares/Middlewares que serão referenciados ou utilizados pelo OSB, que são:

- JDK 1.6.0_35
- Oracle Database XE 11g
- Oracle Enterprise Pack for Eclipse
- Oracle Weblogic Server 11g (10.36)

Após instalarmos e e configurarmos estes softwares, partiremos para a instalação do OSB.

Para executar esses comandos, precisamos adicionar nosso usuário no grupo dos sudoers. Para isso basta executar o seguinte comando como root:

echo 'loginname ALL=(ALL) ALL' >> /etc/sudoers

Lembre-se de substituir "loginname" pelo nome do usuário que deseja adicionar.

Configurando a JDK 1.6.0_35

Baixe o instalador (no meu caso, usei o arquivo jdk-6u35-linux-x64.bin) do site da Oracle. Abra um terminal, vá até a pasta de download e execute os seguintes comandos:

chmod +x jdk-6u35-linux-x64.bin
./jdk-6u35-linux-x64.bin

Após executar estes comandos, uma pasta contendo a JDK será gerada no diretório corrente. Vamos movê-la para a pasta /usr/java e então configurar o sistema para utilizar a JDK:

sudo mkdir /usr/java
sudo mv jdk1.6.0_35 /usr/java

Agora vamos configurar o JDK no sistema. Inicialmente temos que exportar as variáveis de CLASSPATH e JAVA_HOME, porém, para que estas sejam exportadas automaticamente na inicialização do sistema, adicionaremos estas variáveis ao arquivo /etc/environment:

sudo vi /etc/environemt

Insira o seguinte conteúdo no arquivo:

CLASSPATH=/usr/java/jdk1.6.0_35/lib/
JAVA_HOME=/usr/java/jdk1.6.0_35/

Salve o arquivo (ESC, wq) e então execute o seguinte comando para disponibilizar as variáveis no ambiente:

source /etc/environment

Agora execute os seguintes comandos para criar diretórios necessários, links simbólicos e adicionar a JDK como alternativa java para o sistema:

sudo mkdir -p /usr/lib/jvm /usr/lib/jvm-exports

sudo alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_35/bin/java 15000 \
--slave /usr/lib/jvm/jre jre /usr/java/jdk1.6.0_35/jre \
--slave /usr/lib/jvm-exports/jre jre_exports /usr/java/jdk1.6.0_35/jre/lib \
--slave /usr/bin/keytool keytool /usr/java/jdk1.6.0_35/jre/bin/keytool \
--slave /usr/bin/orbd orbd /usr/java/jdk1.6.0_35/jre/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/java/jdk1.6.0_35/jre/bin/pack200 \
--slave /usr/bin/rmid rmid /usr/java/jdk1.6.0_35/jre/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/java/jdk1.6.0_35/jre/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/java/jdk1.6.0_35/jre/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/java/jdk1.6.0_35/jre/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/java/jdk1.6.0_35/jre/bin/unpack200 \
--slave /usr/share/man/man1/java.1 java.1 /usr/java/jdk1.6.0_35/man/man1/java.1 \
--slave /usr/share/man/man1/keytool.1 keytool.1 /usr/java/jdk1.6.0_35/man/man1/keytool.1 \
--slave /usr/share/man/man1/orbd.1 orbd.1 /usr/java/jdk1.6.0_35/man/man1/orbd.1 \
--slave /usr/share/man/man1/pack200.1 pack200.1 /usr/java/jdk1.6.0_35/man/man1/pack200.1 \ --slave /usr/share/man/man1/rmid.1.gz rmid.1 /usr/java/jdk1.6.0_35/man/man1/rmid.1 \
--slave /usr/share/man/man1/rmiregistry.1 rmiregistry.1 /usr/java/jdk1.6.0_35/man/man1/rmiregistry.1 \
--slave /usr/share/man/man1/servertool.1 servertool.1 /usr/java/jdk1.6.0_35/man/man1/servertool.1 \
--slave /usr/share/man/man1/tnameserv.1 tnameserv.1 /usr/java/jdk1.6.0_35/man/man1/tnameserv.1 \
--slave /usr/share/man/man1/unpack200.1 unpack200.1 /usr/java/jdk1.6.0_35/man/man1/unpack200.1


sudo alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 15000 \
--slave /usr/lib/jvm/java java_sdk /usr/java/jdk1.6.0_35 \
--slave /usr/lib/jvm-exports/java java_sdk_exports /usr/java/jdk1.6.0_35/lib \
--slave /usr/bin/appletviewer appletviewer /usr/java/jdk1.6.0_35/bin/appletviewer \
--slave /usr/bin/apt apt /usr/java/jdk1.6.0_35/bin/apt \
--slave /usr/bin/extcheck extcheck /usr/java/jdk1.6.0_35/bin/extcheck \
--slave /usr/bin/jar jar /usr/java/jdk1.6.0_35/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/java/jdk1.6.0_35/bin/jarsigner \
--slave /usr/bin/javadoc javadoc /usr/java/jdk1.6.0_35/bin/javadoc \
--slave /usr/bin/javah javah /usr/java/jdk1.6.0_35/bin/javah \
--slave /usr/bin/javap javap /usr/java/jdk1.6.0_35/bin/javap \
--slave /usr/bin/jconsole jconsole /usr/java/jdk1.6.0_35/bin/jconsole \
--slave /usr/bin/jdb jdb /usr/java/jdk1.6.0_35/bin/jdb \
--slave /usr/bin/jhat jhat /usr/java/jdk1.6.0_35/bin/jhat \
--slave /usr/bin/jinfo jinfo /usr/java/jdk1.6.0_35/bin/jinfo \
--slave /usr/bin/jmap jmap /usr/java/jdk1.6.0_35/bin/jmap \
--slave /usr/bin/jps jps /usr/java/jdk1.6.0_35/bin/jps \
--slave /usr/bin/jrunscript jrunscript /usr/java/jdk1.6.0_35/bin/jrunscript \
--slave /usr/bin/jsadebugd jsadebugd /usr/java/jdk1.6.0_35/bin/jsadebugd \
--slave /usr/bin/jstack jstack /usr/java/jdk1.6.0_35/bin/jstack \
--slave /usr/bin/jstat jstat /usr/java/jdk1.6.0_35/bin/jstat \
--slave /usr/bin/jstatd jstatd /usr/java/jdk1.6.0_35/bin/jstatd \
--slave /usr/bin/native2ascii native2ascii /usr/java/jdk1.6.0_35/bin/native2ascii \
--slave /usr/bin/policytool policytool /usr/java/jdk1.6.0_35/bin/policytool \
--slave /usr/bin/rmic rmic /usr/java/jdk1.6.0_35/bin/rmic \
--slave /usr/bin/schemagen schemagen /usr/java/jdk1.6.0_35/bin/schemagen \
--slave /usr/bin/serialver serialver /usr/java/jdk1.6.0_35/bin/serialver \
--slave /usr/bin/wsgen wsgen /usr/java/jdk1.6.0_35/bin/wsgen \
--slave /usr/bin/wsimport wsimport /usr/java/jdk1.6.0_35/bin/wsimport \
--slave /usr/bin/xjc xjc /usr/java/jdk1.6.0_35/bin/xjc


Para confirmar que o comando foi executado corretamente, verifique através da execução dos seguintes comandos:

java -version
javac -version

Seu sistema Fedora está configurado para trabalhar com a JDK 1.6.0_35 da Oracle.

Configurando o Oracle Database 11g XE

Primeiramente devemos baixar o Oracle Database Express Edition 11g Release 2 for Linux x64. Após o fim do download, devemos abrir um terminal e navegar para a pasta na qual o arquivo oracle-xe-11.2.0-1.0.x86_64.rpm.zip foi armazenado e executar os seguintes comandos:

unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
sudo rpm -iv oracle-xe-11.2.0-1.0.x86_64.rpm

Após finalizar a instalação, o seguinte comando deve ser executado como root:

/etc/init.d/oracle-xe configure

Um processo de configuração da database será inicializado e solicitará uma porta para execução do Oracle Application Express. A porta padrão é a 8080, e eu gosto de mudar (por exemplo, 7787) pois esta porta é amplamente utilizada por servidores java. Depois o processo solicitará uma porta para rodar o listener do oracle, e nesse caso, mantenho a porta padrão (basta não inserir nenhum valor e pressionar enter para que seja mantida a porta 1521). O sistema solicitará uma senha para o usuário SYS e SYSTEM. Digite a senha, digite novamente para confirmar e pressione enter. O processo de configuração, perguntará então, se você deseja inicialiar o Oracle XE durante o boot da máquina, eu costumo deixar na inicialização, então digito "y". Finalmente seu oracle express está instalado e configurado.
Agora é necessário adicionar um script para exportar as variáveis de ambiente do Oracle, e para isso devemos alterar o .bashrc. Para isso lembre de não estar logado como root. Você deve abrir o .bashrc com seu usuário.

cd ~
vi bashrc


E insira o seguinte código no final do arquivo:

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=localhost.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=DB11G; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/xe; export ORACLE_HOME
ORACLE_SID=XE; export ORACLE_SID
NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`; export NLS_LANG
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
     if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
fi

Para testar basta digitar no terminal:

sqlplus system

e abrir um browser (firefox ou chrome) e entrar na tela inicial do Oracle Application Express através do endereço:

http://localhost:7787/apex

Instalando o Oracle Enterprise Pack for Eclipse

Efetue o download do OEPE, e neste caso é muito importante que sua versão do OEPE seja a mesma do Oracle Service Bus a ser instalado. Eu estou usando o OEPE Indigo 11.1.1.8.0 64 bits nesta instalação. Após o término do download, descompacte o arquivo em uma pasta de sua vontade. Eu costumo criar uma estrutura que considero intuitiva para minhas ferramentas Oracle Fusion Middleware, conforme demonstrada a seguir:

mkdir /home/meuusario/Oracle/Tools/oepe-indigo-11.1.1

E descompacto lá dentro.

Instalando o Oracle Weblogic Server

Para instalar o Oracle Weblogic Server 11g em uma máquina contendo SO Linux 64 bits (com uma vm 64 bits, como é o nosso caso), devemos baixar o arquivo de instalação generic, empacotado em um JAR. Este arquivo está disponível em uma tabela, abaixo das releases atuais (Oracle WebLogic Server Previous Releases). A coluna que contém o arquivo é denominada "Additional Platforms (For 64-bit JVM Support, See Note Above)" e a linha possui o rótulo "Oracle WebLogic Server 11gR1 (10.3.6) + Coherence - Package Installer". O nome do arquivo que será baixado é wls1036_generic.jar. Após o término do download, abra um terminal, navegue para a pasta na qual o arquivo foi salvo e execute o seguinte comando:

java -jar wls1036_generic.jar

Siga o wizard de instalação com os valores padrões e, quando este processo for terminado, você possuirá o Oracle Weblogic Server 11g instalado em seu sistema (em artigos posteriores cobriremos a execução do RCU para criar os objetos necessários na base de dados, instalação do Oracle Service Bus e a criação de um domínio para utilização).

Referências:

http://blog.mclaughlinsoftware.com/2011/09/27/oracle-11g-xe-on-fedora/
http://www.rackspace.com/knowledge_center/article/how-to-install-the-oracle-jdk-on-fedora-15-16
http://www.mjmwired.net/resources/mjm-fedora-fc6.html#sudo

terça-feira, 4 de setembro de 2012

Instalando o JDK 6 e JDK 7 no Ubuntu 12.04 32 bits

Ontem formatei minha máquina e resolvi instalar o JDK diretamente do reposistório. Quando tentei utilizar o apt para instalar, me deparei com a surpresa de que o JDK e as JREs da Oracle foram removidas do repositório por questões de licensa. Vou descrever os passos que executei para auxiliar aqueles que se depararam com o mesmo problema.

Primeiramente baixei os arquivos de instalação da página da Oracle. No meu caso, baixei o jdk-6u35-linux-i586.bin e o jdk-7u7-linux-i586.tar.gz. Primeiro vamos instalar o JDK 6, após o término, vamos instalar o JDK 7 e por fim vamos atualizar o sistema para utilizar um ou outro (e implantar um jeito fácil de alternar entre eles).

Para instalar o JDK 6, abra um terminal, navegue para a pasta que contém os arquivos baixados e execute os seguintes comandos:

chmod +x jdk-6u35-linux-i586.bin

Esse comando criará uma pasta denominada (no meu caso) jdk1.6.0_35 e descompactará os arquivos do JDK. Agora precisamos mover essa pasta para dentro do local padrão de JVMs do Ubuntu:

sudo mv jdk1.6.0_35 /usr/lib/jvm

Agora vamos fazer um procedimento semelhante com o JDK 7. Primeiramente devemos descompacta-lo, o que criará uma pasta denominada (no meu caso) jdk1.7.0_07. devemos mover esta pasta para o mesmo diretório mencionado anteriormente:

sudo mv jdk1.7.0_07 /usr/lib/jvm

Agora deveríamos atualizar o sistema todo para pegar a configuração do JDK que desejamos utilizar, porém, ao invés de executar os update-alternatives manualmente, recomendo a utilização do script update-java-0.5b. Para utilizar este script, primeiramente devemos baixá-lo:

wget http://webupd8.googlecode.com/files/update-java-0.5b

Após o término do download, devemos dar permissão de execução ao script:

chmod +x update-java-0.5b

E por fim, executá-lo:

./update-java-0.5b

Uma janela será exibida oferecendo as JVMs disponíveis no sistema e então basta selecionar uma delas e clicar em OK. Agora basta aguardar alguns segundos para que o sistema seja atualizado. Quando a atualização for finalizada, caso queira verificar a versão de java instalado, basta executar o comando:

java -version

O sistema exibirá a versão do java em uso, e caso queira mudar para a outra versão, basta executar o update-java-05b novamente e selecionar a versão do java necessária. Essa solução permite que você tenha várias JDKs coexistindo e mude de acordo com suas necessidades de forma prática e rápida.

Adobe Flex - Contornando o erro #2032 relacionado ao textLayout_1.1.0.604.sw

Faço parte de um projeto e recentemente tivemos que reviver um sistema implementado no passado para extrair algumas regras de negócio e entender alguns comportamentos. O sistema foi feito em Adobe Flex, tecnologia que não está mais sob forte atualização (eu diria que não está mais sendo atualizada se tivesse como provar). Ninguém mexia no sistema legado já haviam meses (desde dezembro do ano passado) e eu havia configurado uma cópia local para executar na minha máquina em fevereiro.

Tudo parecia normal, porém, quando o deploy foi feito, antes de carregar qualquer tela, aparecia uma barra de progresso que parava em 100% e então, logo abaixo aparecia a mensagem:
error #2032
Depois de pesquisar sobre o problema por um dia, descobri que era erro de configuração das RSLs do projeto. Não trabalhei com Flex e não tenho experiência em Flash, porém, o tempo estava correndo contra e não havia tempo para aprender.

Utilizando o Fiddler, interceptei as requisições que minha máquina estava fazendo para servidores externos e descobri que um erro era retornado quando minha aplicação tentava validar um componente denominado textLayout_1.1.0.604.sw contra o FTP da adobe. Após pesquisar um pouco nos fóruns da Adobe encontrei uma solução (que não é a mais indicada) para contornar esse problema.

Para resolver o problema devemos adicionar -static-link-runtime-shared-libraries
aos parâmetros de compilação.

Dessa forma conseguimos executar novamente o sistema e entender os comportamentos e fluxos de navegações necessários. No meu ponto de vista, esse problema mostrou a atenção que a Adobe está dando ao Flex devido ao advento do HTML 5.