sexta-feira, 30 de maio de 2008

Firefox Download Day 2008

Download Day - Portuguese


O pessoal da Mozilla está querendo estabelecer um novo record mundial no Guinness: tornao o Firefox 3 o software mais baixado em 24h!

Nesse site você registra o seu e-mail e confirma a sua participação no Download Day. O Brasil está bem, mas ainda precisamos melhorar a nossa participação.

Agora pra falar um pouco mais sério, eu vou ajudar o Firefox 3 a ganhar o record mundial porque ele é um software open source, respeita os padrões internacionais e é multiplataforma.

Então vamos lá gente, todo mundo baixando o Firefox 3 no Download Day.

quinta-feira, 22 de maio de 2008

Aumentando a velocidade das aplicações gráficas do Ubuntu

Uma alteração muito simples no arquivo /etc/hosts do seu Ubuntu pode fazer seu Gnome melhorar bastante a performance.

Por algum motivo que eu ainda vou descobrir, o Gnome precisa resolver o nome da máquina (hostname), e o tempo de resposta dessa tarefa é vital para a performance dele.

O que precisamos fazer é bem simples mesmo:

Verifique o nome da sua máquina no terminal:
hostname

Abra o arquivo /etc/hosts:
sudo gedit /etc/hosts

Você provavelmente encontrará:
127.0.0.1 localhost
127.0.1.1 nome_do_host_que_o_comando_hostname_te_deu


Altere o arquivo para:
127.0.0.1 localhost nome_do_host_que_o_comando_hostname_te_deu
127.0.1.1 nome_do_host_que_o_comando_hostname_te_deu


Agora salve o arquivo e pronto, perceba a melhora do seu Gnome para abrir aplicações.

quarta-feira, 21 de maio de 2008

PermGen space

A JMV possui algumas áreas de memória para situações especificas. Uma dessas áreas é o PermGen space (Geração Permanente), nesse espaço da memória ficam os objetos que raramente são desalocados (código de classes, objetos de reflexão, pool de Strings). Essa área da JVM por padrão inicia com 64MB.

O problema recorrente é "java.lang.OutOfMemoryError: PermGen space" no Tomcat ele ocorre sempre que fazemos alguns "deploy" ou "redeploy" de aplicações.

Encontramos a solução aumentando o tamanho do "PermGen space"

-XX:MaxPermSize=256MB

Estamos monitorando com o lambda probe o tomcat e ate agora vem funcionando muito bem.

sexta-feira, 16 de maio de 2008

MyJavaServer, um ambiente de desenvolvimento

Desenvolvedores Java Enterprise Edition (JEE) encontraram no projeto MyJavaServer (MJS) um local para hospedar aplicações WEB. O MSJ foi lançado em 1999 com o nome de “mycgiserver”, aberto a varias tecnologias. Em 2001 o projeto adotou o nome atual, alem disso passou a oferecer suporte apenas as tecnologias JEE.

O projeto MJS atualmente conta com mais de 54.000 desenvolvedores ativos. O MJS oferece uma abordagem pratica para o desenvolvimento e a implantação de aplicações JEE. Para fazer uso dessa infra estrutura basta cadastrar-se no site (www.myjavaserver.com).

Como o MJS é um ambiente aberto esta sujeito a excessos no seu uso. Para dificultar o uso de forma inadequada é exigido no site que seja respondido um desafio simples que deve demonstrar a sua capacidade Java. Esse desafio vai requer algum conhecimento da linguagem de programação Java.

No desafio atual deve ser implementado o método public String getHandler(String [] config, String requestUri) da classe HandlerFactory o parâmetro config é um array que contem um padrões e manipuladores. Dois valores consecutivos formam um par padrão e manipulador. O parâmetro requestUri representa a chamada requisitada. O método de retornar o manipulador correspondente ao padrão que esta na chamada (requestUri). Caso a requisição não encontre nenhum padrão deve ser devolvido um “código” que é informado na questão.



Exemplo de entrada:
String[] config: { "/", "MainServlet", "/nav", "NavigationServlet" }
String requestUri: "/ nav / test"
Resultado correto: "NavigationServlet"
Verifica que se a requisição for para /nav/test.nav o padrão correto é o /nav que por sua vez esta ligado ao manipulador NavigationServlet.

Não é o intuito desse artigo divulgar a solução desafio. A idéia aqui é de difundir o projeto MJS. Tente resolver o desafio sozinho antes de olhar a solução. Estamos a disposição para ajudar tirar duvidas sobre o desafio e ajudar no que for possível.


Solução:




public class HandlerFactory
{
public String getHandler(String[] config, String requestUri)
{
String result="";
String temp="";
for(int i=0;itemp.length())
{
result=config[i+1];
temp=config[i];
}
}
}
if(!result.equals(""))
return result;
else
return "sQ95hl0"; //codigo que voce vai encontrar na pagina
}
}




[]'s

Tutorial Tray Icon no Java SE 6.0

O uso da nova funcionalidade de Tray Icon que esta no Java SE 6.0.


A versão do Java Platform, Standard Edition 6 (Java SE 6) permite o acesso a bandeja do sistema (adicionar os Tray Icons), em puro Java, com a ajuda de duas classes do pacote java.awt: SystemTray e TrayIcon. Essas classes tem a capacidade de adicionar icones na bandeja, menus pop-ups e flutuantes.



O que é a Bandeja do sistema?

Bandeja do sistema (Figura) é um local especializado, normalmente, na parte inferior da área de trabalho, onde os usuários podem acessar continuamente executando programas. Normalmente é chamado também de Notification Area ou System Tray. Em cada sistema, esta bandeja área é partilhada por todas as aplicações em execução no desktop.

Acessando a bandeja do sistema com java


O java.awt.SystemTray classe representa bandeja do sistema para o sistema operacional. Você pode acessar chamando o método estático SystemTray.getSystemTray (). No entanto antes devemos sempre verificar se o sistema suporta usando o método estático SystemTray.isSupported (). Se a bandeja do sistema não está presente ou não existe nesta plataforma, o isSupported () método retorna false. Se a aplicação tenta usar getSystemTray () sem suportar o método irá lançar um java.lang.UnsupportedOperationException.



Código de Exemplo:
O trecho seguinte código demonstra como acessar e personalizar bandeja do sistema:




public class TrayIconTeste {

/**
* Representa o tray icon
**/
private TrayIcon trayIcon;

public TrayIconTeste() {

//Verifica se o S.O. suporta tray icon
if (SystemTray.isSupported()) {
//Obtem a bandeja do S.O.
SystemTray tray = SystemTray.getSystemTray();
//Carregando a imagem tray.gif
Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");

//ação de executar
ActionListener actionListener = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Executar");
}
};

//ação de sair
ActionListener sairListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Sair");
System.exit(0);
}
};

PopupMenu popup = new PopupMenu();

//Opção executar
MenuItem executarItem = new MenuItem("Executar");
executarItem.addActionListener(actionListener);
popup.add(executarItem);

//submenu
PopupMenu submenu = new PopupMenu("sub-menu");
popup.add(submenu);

//checkbox
submenu.add(new CheckboxMenuItem("Check box"));

//Opção sair
MenuItem sairItem = new MenuItem("Sair");
sairItem.addActionListener(sairListener);
popup.add(sairItem);

// Criando o tray icon e colocando o popup para o
// clique com o botão direito
trayIcon = new TrayIcon(image, "Exemplo - tooltip ", popup);

//Auto-ajuste do tamanho
trayIcon.setImageAutoSize(true);
//Registrando o escutador para evento de clique com
// botao esquerdo
trayIcon.addActionListener(actionListener);

try {
tray.add(trayIcon);
//balão de aviso
trayIcon.displayMessage("Exempo", "Balao de Aviso!", TrayIcon.MessageType.INFO);
} catch (AWTException e) {
System.err.println("TrayIcon não pode ser adicionado no sistema.");
}
} else {
System.err.println("Bandeja do sistema não é suportado.");
}
}

public static void main(String[] args) {
TrayIconTeste exemplo = new TrayIconTeste();
}
}




Implementando TrayIcon

O objeto TrayIcon representa um ícone da bandeja. No entanto, a funcionalidade TrayIcon ultrapassa simplesmente o ícone que é mostrado na bandeja. Pode também ter um texto dica, AWT um menu popup, e um conjunto de ouvintes associados com ele.

A TrayIcon gera vários MouseEvents (pressionado, liberado, e clicado) e suporta a adição de correspondentes ouvintes para receber notificação desses acontecimentos. O TrayIcon por padrão, quando um direito do mouse ele exibe o especificado menu popup. Quando o mouse passa em cima do TrayIcon, a dica é exibida. A TrayIcon também pode gerar um ActionEvent. Em algumas plataformas, isso ocorre quando o usuário seleciona o ícone da bandeja usando o mouse ou teclado.


Espero que consigam dar mais vida a suas aplicações Desktop.

Nota: Para executar o código deste tutorial, você deve baixar e instalar o JDK 6.0

Projeto do netbeans ExemploTrayIcon.zip


[]'s

Laboratório de Asynchronous Javascript And XML (AJAX)

O Laboratório de Asynchronous Javascript And XML (AJAX) ocorreu na FIB em 17/03/2008.

Material usado:
Apresentação(pdf)
Código Fonte (zip)
Bibliotecas necessárias para o projeto:
dwr.jar (Versão 2)
commons-logging-1.0.4.jar


Duvidas ou sugestões sobre o assunto entre em contato.
[]'s

Netbeans e EEE PC ASUS

O Eee PC da ASUS já está sendo vendido aqui no Brasil. Encontrei a versão do Eee PC que roda o sistema operacional Linux, tem uma tela de 7 polegadas, 512 MB de memória RAM DDR2, um disco SSD de 2 GB, placa gráfica Intel UMA, bateria com duração de 2.8 horas e ele tem um leitor para cartões de memória MMC/SD (SDHC).

Em salvador encontrei ele por pouco mais de R$ 1.000,00.

O Eee PC pesa apenas 0,91 kg e é resistente a impactos, segundo a ASUS, por conta do hd solido.

Esse sim é um pc portátil (pequeno e leve), mas quanto a performance o que podemos esperar? Bom ainda não experimentei mas o fato é que esse video que mostra o netbeans rodando em uma das versões do Eee PC.

domingo, 11 de maio de 2008

Ubuntu + Active Directory: Um guia simples e definitivo

Tudo bem gente, eu já sei que essa história de colocar o linux para logar no Active Directory do Windows já está batida demais, só que mesmo assim eu vou postar essa informação, pois as pesquisas que eu fiz pela web não me mostraram tudo reunido, tive que catar informações em vários lugares e perdi um tempo grande.

Vou começar falando que no Ubuntu 8.04 vem uma ferramenta muito legal para conversar com o Active Directory, que é a Likewise-Open. Com essa ferramenta, praticamente acabou a necessidade de alterar arquivos na mão, ficou tudo muito fácil. Agora vamos deixar de enrolação e vamos pôr a mão na massa...

Instalando o Likewise-Open

Para instalar o Likewise-Open basta apenas digitar os comando abaixo:

sudo apt-get install likewise-open

Quando o Ubuntu terminar de instalar os pacotes ele vai exibir uma tela de configuração do Kerberos, referentes ao domínio. Essa tela vai te pedir o nome do domínio, os servidores de domínio e pronto, depois disso já podemos ingressar nossa máquina no domínio.

Domínio Utilizado como exemplo: JAVA.FARINHA
Servidor principal do Active Directory: 192.168.0.2


Ingressando a Máquina no Domínio JAVA.FARINHA

O Likewise-Open possui um comando para ingressar a máquina no domínio chamado domainjoin-cli e é através dele que vamos colocar nossa máquina no domínio:

sudo domainjoin-cli join JAVA.FARINHA Administrator


Administrator é o usuário "root" do Active Directory, e logo após a execução do comando acima, será necessário digitar corretamente a senha do usuário Administrador do Active Directory.

Depois disso é só estejar, pois só com isso já é possível que um usuário do domínio logue na máquina, da seguinte forma:

JAVA\usuário


Automatizando o serviço do Likewise-Open

No Ubuntu 8.04 o Likewise-Open não está sendo automaticamente executado como erviço, o que significa que toda vez que a máquina for reiniciada, o comando de ingressar a máquina no domínio deve ser executado novamente. Mas existe uma forma simples de colocar esse serviço na inicialização do Ubuntu, evitando esse problema. Basta executar os comando abaixo:

sudo update-rc.d likewise-open defaults
sudo /etc/init.d/likewise-open start



Logando usuário sem o prefixo do domínio

É possível também fazer uma configuração no arquivo de configuração do samba para que o usuáio não precise digitar JAVA\usuário para logar no domínio, bastando apenas digitar seu nome de usuário, sem o JAVA\ na frente:

sudo vim /etc/samba/lwiauthd.conf

e adicione a linha no arquivo:

winbind use default domain = yes



Configurando usuários de um grupo como sudo

Outra configuração interessante que é possível ser feita é colocar usuário de um determinado grupo como sudo, ou seja, usuário que podem administrar o sistema sem a necessidade de saber a senha de root. Esse grupo é criado e configurado pelo Active Directory e os usuário desse grupo vão ter acesso ao comando sudo. Vamos supor que o nosso grupo de administradores do servidor linux seja JavaAdmin:

sudo visudo -f /etc/sudoers

e no final adicionar a seguinte linha:

%JavaAdmin ALL=(ALL) ALL

Pronto, agora quano o serviço for reiniciado, todos os usuários que pertencerem ao grupo JavaAdmin lá no Active Directory pode utilizar o comando sudo sem problemas no seridor Ubuntu.



Espero que esse guia ajude vocês tanto quanto me ajudou, e até uma próxima...