Todos os posts de Leandro Adriano

Como instalar Epoptes no Linux Educacional 4.0

Epoptes é um software open source para gerenciamento de laboratórios de informática. Ele permite o monitoramento de computadores, execução de comandos, envio de mensagens, bloqueio de tela, desligar, reiniciar e muitos outros recursos.

O Epoptes deve ser instalado no servidor e nos clientes que desejamos monitorar. Os passos seguintes devem ser feitos tanto no Servidor como nos Clientes.

Primeiramente execute o comando abaixo para instalar o patch

sudo apt-get install patch

Para o Linux Educacional devemos baixar uma versão otimizada do Epoptes.

Quem nunca trabalhou com PPAs no LE4 precisa baixar este patch antes de prosseguir:
http://redmine.c3sl.ufpr.br/attachments/download/106/distro.py-fix-linux-educacional.patch

Agora entre na pasta onde foi baixado o arquivo, extraia o arquivo, e depois execute o seguinte comando também dentro do diretório onde se encontra o arquivo:

sudo patch -p0 < distro.py-fix-linux-educacional.patch

Vamos então adicionar o PPA no Linux Educacional 4

sudo apt-add-repository ppa:oiteam/proinfo-83.2008

(substitua por 71.2010, dependendo do seu pregão)

Esses passos devem ser realizados tanto no Servidor como nos Clientes.

Agora somente no Servidor execute os comandos para instalar o Epoptes

sudo apt-get update && sudo apt-get install epoptes

Após instalar os pacotes, adicione o usuário professor ao grupo epoptes do seu servidor, executando o seguinte comando:

sudo gpasswd -a professor epoptes

Os passos abaixo devem ser feitos somente nos Clientes

sudo apt-get update && sudo apt-get install epoptes-client

Agora,  vamos usar o kate para editar o arquivo de configuração.

sudo kate /etc/default/epoptes-client

Na linha 7, retire o # da frente da palavra SERVER e substitua o valor depois do = pelo IP do servidor. Exemplo:

SERVER=192.168.0.114

Para descobrir o IP do Servidor digite o comando:

ifconfig

E, na saída, veja o valor do campo inet end da placa de rede desejada. No meu caso, é 192.168.0.114.

Após modificar o arquivo de configuração e salvá-lo vamos obter o certificado OpenSSL do servidor.

sudo epoptes-client -c 192.168.0.114

Substitua o valor 192.168.0.114, pelo IP do seu Servidor.

Para que o Epoptes inicie automaticamente quando ligarmos os Clientes vamos adicionar um script na pasta AutoStart do LE.

Crie um arquivo com o nome epoptes.sh com o conteúdo abaixo, no lugar do IP 192.168.0.114 você deve colocar o IP do seu Servidor encontrado anteriormente:

#!/bin/sh
epoptes-client 192.168.0.114

Agora pelo terminal entre na pasta onde foi baixado o arquivo e execute o comando abaixo para copiar o arquivo para a pasta Autostart de cada usuário, faça isso para cada usuário que você tiver no computador. Substitua aluno1 do comando abaixo, pelo nome de cada usuário, aluno2, aluno3, por exemplo.

sudo cp epoptes.sh /home/aluno1/.kde/Autostart/

Vamos dar permissão de execução ao arquivo copiado para a pasta Autostart, faça isso também para cada usuário, substituindo aluno1, por aluno2 etc.

sudo chmod 765 /home/aluno1/.kde/Autostart/epoptes.sh

Pronto, é só reiniciar os computadores e usar esse excelente programa.

 

 

 

 

 

 

Como excluir (definitivamente) perfil do Facebook

Nesse post será ensinado como excluir o perfil do Facebook, na maioria dos post na internet apenas ensinam a desativar o perfil, sendo que, digitando o usuário e senha, a conta volta como estava antes. O procedimento deste post é irreversível, você excluirá definitivamente o seu Facebook.

Para ficar mais simples eu já peguei o endereço da página para excluir o perfil, então com o Facebook aberto copie e cole no seu navegador o link abaixo, esse link já vai te direcionar à página para excluir o perfil.

https://www.facebook.com/help/delete_account

A página que vai aparecer é a seguinte:

Depois disso você receberá um email informando que a conta será excluída no prazo de 14 dias.

Injeção de Dependência: comparação de desempenho

No presente post procurar-se-á demonstrar uma comparação entre injeção de dependência de dois grandes Frameworks, o JSF e o Spring. Para efeito de comparação também foi testada uma versão do aplicativo web com JSF sem o uso de injeção de dependência.

No desenvolvimento Web, diferentemente do desenvolvimento de aplicativos para Desktop, os sistemas muitas vezes possuem dezenas de milhares de usuários simultaneamente, isso exige um grande desempenho das aplicações.

Sendo assim a verificação do desempenho de diferentes formas de implementações, utilizando JSF com e sem injeção de dependência, que é uma forma de IoC (Inversion of Control – Inversão de Controle), e Spring, é importante e aponta para possibilidades mais adequadas, considerando as diferenças de desempenho entre os frameworks citados.

Os sistemas serão submetidos a testes de stress e desempenho. Para realização desses testes foi utilizado a ferramenta JMeter, uma ferramenta que diante das crescentes necessidades por performance vem sendo muito utilizada. Apache JMeter pode ser usado para testar o desempenho tanto em recursos estáticos quanto dinâmicos (arquivos, Servlets, scripts Perl, Java Objects, Bases de Dados, Consultas SQL, servidores FTP e muito mais).

Para o presente trabalho foram realizados dois testes para cada sistema desenvolvido, primeiro com 1000 usuários e o segundo com 4000 usuários. Esses dois testes foram realizados da mesma maneira com os três sistemas desenvolvidos (Spring com IoC, JSF com e sem IoC). Foram realizados testes com o máximo de 4000 mil usuários pois, o sistema após esse número apresentava a exceção “java.lang.OutOfMemoryError: Java heap apace” tornando impossível a realização de testes com maior número de usuários.

Como pode ser visto logo abaixo, o JMeter permite entre outras características as seguintes:

Tempo da amostra – tempo de resposta da aplicação;

Desvio – dispersão dos valores em relação à média;

Porcentagem de erro – porcentagem de problemas nas respostas;

Vazão – o número de operações que o sistema é capaz de completar em um dado período de tempo;

Carga Máxima do servidor – uso do processador pelo servidor;

Memória Máxima do servidor – uso de memória pelo servidor.

Tabela 1: Comparativo de desempenho com 1000 threads

Item Spring JSF com IoC JSF sem IoC
Tempo da amostra 75ms 74ms 39ms
Desvio 49ms 40ms 19ms
% de erro 0 % 0% 0%
Vazão 19,8/seg 19,8/seg 19,8/seg
Carga Máx. servidor ~37% ~60% ~50%
Memória Máx. servidor ~75% ~100% ~98%

 

Tabela 2: Comparativo de desempenho com 4000 threads

Item Spring JSF com IoC JSF sem IoC
Tempo da amostra 41ms 39ms 39ms
Desvio 89ms 25ms 18ms
% de erro 0%  0% 0%
Vazão 18,1/seg 19,6/seg 19,8/seg
Carga Máx. servidor ~48% ~35% ~48%
Memória Máx. servidor 95% ~80% ~90%

Através dos dados obtidos com os testes é possível identificar onde cada abordagem de desenvolvimento obteve um melhor desempenho com respeito à performance. Na tabela 1 e 2, foram agrupados os principais quesitos com respeito ao desempenho da aplicação para que pudéssemos analisar de forma mais clara.
Tempo da Amostra – Com relação a tempo, que seria o tempo de resposta da aplicação, na tabela acima temos a média de cada um. Observamos que o JSF sem Injeção de Dependência obteve resultados um pouco melhores, sendo em média mais rápido.
A porcentagem de erro ou problemas ao acessar a aplicação foi de zero por cento em todas as abordagens apresentadas.
A Vazão não foi muito diferente entre um e outro ficando novamente o JSF sem IoC um pouco à frente dos demais, mas apenas no teste com 4000 usuários, sendo praticamente insignificante a diferença haja vista que a própria rede pode apresentar oscilações na transferência de dados.
Agora com relação ao servidor de aplicações Tomcat, a carga do sistema obteve resultados na faixa de 35% a 60%, entretanto, não somos capazes de inferir nada com relação, pois em todos os testes houve oscilações durante o intervalo observado, sendo, que o Spring conseguiu se manter mais estável. Com relação ao uso da memória também não houve muita diferença.
Os testes foram realizados com o grupo máximo de 4000 usuários devido a estouro de memória no sistema quando utilizado por um grupo maior de usuários, apresentando a seguinte exceção: “java.lang.OutOfMemoryError: Java heap apace”. Com o número de usuários máximo utilizado nos testes, embora tenha havido algumas diferenças nos resultados, os sistemas se comportaram bem, não gerando gargalos nem indisponibilidade. Podemos perceber diante disso que com a melhora cada vez maior das técnicas de desenvolvimento de Frameworks e linguagens de programação o nível de qualidade se mantém quase igual, claro havendo algumas metodologias e facilidades diferenciadas em cada um.

CONCLUSÃO

Com todas as metodologias e técnicas utilizadas atualmente no desenvolvimento de ferramentas para auxílio dos programadores de sistemas, e até mesmo a maior especialização e estudo por parte das pessoas envolvidas nesse processo de desenvolvimento, tornou-se possível, excluindo algumas especificidades, que os níveis dessas ferramentas, como já dito anteriormente, quanto a desempenho se tornem muito parecidas, não havendo uma diferença muito grande.

O presente trabalho mostrou exatamente que as funcionalidades básicas, como é o caso da injeção de dependência, já estão bem consolidadas na maior parte dos Frameworks, logo, salvo funcionalidade muito específica, que seja provida por apenas um Framework, qualquer um dos Frameworks demonstrados aqui seria muito importante para um sistema em desenvolvimento e não haveria grandes problemas por adotar um ou outro, notando apenas que a injeção de dependência é um padrão de projeto e como tal já foi provado por anos de experiência em desenvolvimento de software, que é a forma mais indicada para desenvolvimento de sistemas complexos por facilitar muito o trabalho, tendo sido utilizada uma versão sem injeção de dependência no trabalho apenas por questões comparativas (mesmo que fosse muito mais eficiente não seria indicada por muitos outros fatores).

 

Injeção de Dependência no JSF 2

Como  já  é  do  conhecimento  de  qualquer  desenvolvedor,  cada  classe  em  Java  possui características  específicas  possuindo  seus  atributos  próprios  e  métodos  relacionados  com  suas características e funcionalidades  que precisará realizar. Em  qualquer  aplicação  Orientada  a  Objetos  muitas  vezes  é  necessário  que  uma  classe  use serviços de outras classes. Para que ocorra essa troca de funcionalidades é preciso que uma classe possua a referência da outra classe que deseja usar. Normalmente faríamos isso instânciando a classe ou seja daríamos um ‘new’ no nosso objeto, entretanto hoje será mostrada uma forma para se fazer isso através da Injeção de Dependência do JSF.

Um bom motivo para usarmos Injeção de Dependência em nosso projeto é o desacoplamento do nosso código,  facilidade para reuso e também facilidade para realizar testes.

A  partir  do  JSF  2  isso  ficou  muito  mais  simples  de  ser  feito,  podemos  usar  a  Injeção de Dependência  disponibilizada  por  ele  apenas  utilizando  anotações  em  cima  das  nossas  classes,  abaixo segue uma exemplificação de como podemos fazer isso:

@ManagedBean(name="veiculo")
@ApplicationScoped
public class VeiculoDaoImpl implements VeiculoDao{

//Atributos
//Métodos

//Gets e Sets

}

Primeiramente, damos um nome para no ManagedBean, no exemplo chamamos de veiculo mas pode ser qualquer nome. Esse ManagedBean é a classe que queremos usar, ou seja, queremos injetar essa classe para que a outra classe possa se utilizar de suas funcionalidades.
Note que VeiculoDao é apenas uma interface nela apenas colocamos as assinaturas dos métodos que vamos posteriormente implementar na classe VeiculoDaoImpl, é extremamente importante de criarmos uma interface para cada classe, pois o JSF injeta apenas as os métodos que estão declarados nas interfaces.
Por fim precisamos apenas injetar a classe VeiculoDaoImpl, para isso procedemos da seguinte forma:

@ManagedBean(name="vendaController")
@ApplicationScope
public class VendaController implementes Serializable{

@ManagedProperty(value="#{veiculo}")
private VeiculoDao veiculoDao;

//Gets e Sets

}

Esse segundo ManagedBean é onde nós iremos injetar a nossa classe VeiculoDaoImpl, para fazer isso apenas utilizamos a anotação @ManagedProperty e na propriedade value colocamos o nome dado anteriormente ao nosso ManagedBean, ou seja, “veiculo” outro detalhe importante é criar os Gets e Sets para a classe a ser injetada. Pronto com apenas algumas linhas acabamos de realizar a injeção de dependência do JSF 2.

Personalizar Tema PrimeFaces

logo-jquery

 

 

 

 

 

 

Uma dica muito interessante para quem usa PrimeFaces. Navegando, hoje no site do Jquery, encontrei um recurso para personalizar os temas do PrimeFaces, com ele é possível editar desde fonte, as cores dos temas e até mesmo mudar o formato dos cantos dos componentes de acordo com o seu gosto e depois de criado o novo tema é só realizar o download e usar em seus projetos.

Para quem interessar segue o link do Jquery.

RAID 1 via software no Windows Server 2003

Nesse post é descrito como configurar RAID 1 no Server 2003. RAID 1 é usado para replicação de dados. Exitem três maneiras de se implementar Raid:

  1. A primeira é via hardware;
  2. Fake RAID utilizado pela maioria das controladoras baratas;
  3. Via Software.

Para configurar via software primeiro acesse o menu Iniciar->Ferramentas Administrativas->Gerenciamento do Computador.

Agora, na tela que abrirá expanda o nó de armazenamento e clique em “Gerenciamento de disco”.

Em seguida clique no menu Exibir , aponte para o superior e, em seguida, clique em Lista de volumes

No menu Exibir , aponte para inferior e, em seguida, clique em Exibição gráfica .

Atualizar para discos dinâmicos

Sistemas RAID exigem discos dinâmicos no Windows Server 2003.

Observação Você deve fazer logon como administrador ou como membro do grupo Administradores para concluir este procedimento.

Para atualizar um disco básico para um disco dinâmico, execute estas etapas:

  1. Antes de atualizar discos, feche os programas que estão em execução nesses discos.
  2. Clique com o botão direito no painel de descrição de disco cinza e, em seguida, clique em Atualizar para disco dinâmico.
  3. Se o segundo disco não é um disco dinâmico, siga estas etapas para atualizá-lo para um disco dinâmico.

Espelhar o volume de inicialização e de sistema

Nesse cenário, o disco 1 é o disco em que a imagem do disco 0 será espelhada.

  1. Disco 1 deve estar como espaço não alocado antes de continuar com o espelhamento.
  2. Clique com o botão direito disco 0 (que contém os arquivos de inicialização e sistema) e clique em Adicionar espelho .
  3. Uma caixa de diálogo se abre na qual qualquer disco no sistema que está disponível para espelhamento é exibido. Selecione o disco de sua escolha (neste exemplo, é o disco 1) e em seguida, clique em Adicionar espelho .

Pronto, se você seguiu os passos certo, agora você já possui um sistema RAID 1 funcionando em seu Sistema.

 

Spring IDE no Eclipse

Nesse Post mostrarei duas formas de ter o plugin Spring IDE no Eclipse:

Primeira forma é baixando a IDE já com suporte nativo:

SpringSource Tool Suite (STS) é uma IDE baseada no Eclipse com plugins pré-instalados que fornece recursos valiosos para os desenvolvedores Spring. Além do suporte para o framework Spring core, STS também oferece editores visuais, validadores, Painel do Spring para outros projetos como Spring ROO, Grails, Groovy, Gradle, tcServer, e Insight Spring.

O plugin principal para STS é Spring IDE, que fornece as características fundamentais de ferramentas Spring.  STS  vem pré-configurado com muitos outros plugins, como M2Eclipse  para  Maven,  Web Tools Platform (WTP), Data Tools Platform (DTP), AspectJ  Development Tools (AJDT) e ferramentas JUnit. Já vem incluso também a edição de desenvolvedor do vFabric tc Server, o substituto para o Apache Tomcat, que vem otimizada para Spring.
STS está disponível a partir do site SpringSource:
http://www.springsource.com/developer/sts

Após o download é só proceder à instalação:

Mac OS:

É preciso montar a imagem de disco, clicando duas vezes sobre o arquivo dmg baixado. Abra o volume chamado ‘SpringSource’ e ​​dê um duplo clique no instalador para iniciar a instalação. Siga as instruções na tela para concluir a instalação.

Windows:

Dê um duplo clique no instalador para iniciar o processo de instalação. Siga as instruções na tela para concluir a instalação.
Se você baixou o arquivo ZIP, não use o utilitário de extração que vem com o Windows isso está causando problemas durante a extração. Em vez disso,use o utilitário livre 7-Zip, recomendado no próprio site.

Linux:

Uma vez baixado, iniciar a instalação, executando o seguinte comando em um terminal:

sh nomeDoArquivoBaixado.sh

Maiores informações referentes à instalação podem ser encontradas no próprio site.

Segunda forma, baixando o plugin Eclipse IDE:

O plugin prove facilidades para o uso de Spring. Possui auto complete para os xmls de configuração do Spring, módulo visual para o Spring Web Flow, navegação entre os beans do Spring, e visualização de recursos AOP.

Instalação:

No Eclipse, clique em “Help –> Install New Software…”para abrir a caixa de diálogo de instalação do plugin.

No segundo passo clique no botão Add. da imagem acima, na tela que abrirá digite “Spring IDE” sem as aspas no campo name, e “http://springide.org/updatesite” no campo Location e clique em OK.

 

Aguarde o Eclipse buscar os softwares, depois selecione apenas os campos acima e clique em Next, após isso basta aceitar os termos e aguardar pelo fim da instalação.

Para gerenciar os sites dos plugins clique em Help -> Install New Software …  Clicando no link “Available Software Sites” você vai ver os sites dos plugins configurados no momento.

Fonte: http://www.springsource.com/developer/sts

Ubuntu com visual de Mac OS

Para você que usa linux e adora o visual do Mac OS existe o Macbuntu um tema que deixará seu linux igual ao Mac OS sem muito esforço.
Basta apenas executar o Macbuntu que ele fará todo o trabalho, mudará o tema, tela de login e até mesmo o som padrão do seu linux, é um tema fácil de instalar e muito bonito. Você pode fazer o download aqui.
Agora que você já fez o download, extraia o arquivo baixado. Para instalar vamos executar no terminal o arquivo install.sh, para isso entre pelo terminal na pasta que foi criada após a extração e execute o comando abaixo:

./install.sh

Se aparecer alguma mensagem de erro ou incompatibilidade você poderá usar o comando

./install.sh force

que irá forçar a instalação, depois é so confirmar a instalação com um enter e seguir as instruções na tela.

O Macbuntu também possui temas para o Thunderbird https://addons.mozilla.org/en-US/thunderbird/addon/leopard-mail-default-aqua/ e para o Firefox https://addons.mozilla.org/en-US/firefox/addon/macosx-theme-12782/

É isso ai, até a próxima!

Configurar Projeto CodeIgniter

Para iniciarmos o desenvolvimento com CodeIgniter precisamos, é claro, fazer o download no site http://www.codeigniter.com. Antes de iniciar um novo projeto sempre baixe a última versão disponível no site. Assim você estará trabalhando sempre com a versão mais recente do framework. Após o download você deve extrair o arquivo que virá no formato .zip, veja abaixo a estrutura do CodeIgniter:

As duas principais pastas são: system, onde estão armazenados os arquivos do framework e a pasta application, que é onde vamos salvar nossos arquivos PHP. Abaixo você pode ver a estrutura da pasta application, onde nós vamos trabalhar:

As pastas que nos interessam no momento são:
pasta config
Contém os arquivos de configuração da aplicação, como banco de dados e rotas.
pasta controllers
Ela armazenará os controladores da aplicação, que são os primeiros arquivos a serem chamados quando uma URL é digitada.
pasta models
Onde nós criaremos nossos arquivos de modelos. São os arquivos que se comunicam com o banco de dados.
pasta views
Esta pasta contém todos os códigos HTML, utilizados para exibir as informações no navegador.
Obs: As outras pasta não devem ser alteradas nem excluídas.
Depois dessas pequenas explicações já podemos ir ao que interessa, crie um projeto no IDE que você preferir e descompacte os arquivos na pasta do projeto. No Eclipse ficaria com a estrutura abaixo:

Agora mande rodar o seu projeto e se tudo ocorrer como esperado deverá ver a página abaixo em seu navegador:

Endereço: http://localhost/post

Nesse primeiro post iremos construir o clássico Hello World para compreendermos melhor o funcionamento do framework. Altere o arquivo de configuração config.php na pasta application/config. Altere a variável

$config['base_url']='';

para

$config['base_url'] = 'http://localhost/post';

onde “post” é o nome do projeto. Essa variável define o endereço base do site.

O próximo passo é alterar as rotas do CodeIgniter, para isso vamos mexer no arquivo routes.php na mesma pasta que o config.php, encontre e mude a linha abaixo:

$route['default_controller'] = "welcome";

para

$route['default_controller'] = "olamundo";

Essa variável é o controlador padrão do nosso site.

Vamos, então, criar o controlador olamundo que foi referenciado em

$route['default_controller'] = "olamundo";

 

Dentro da pasta application/controllers/ crie um arquivo chamado olamundo.php com o conteúdo abaixo:

application/controllers/olamundo.php

<?php
class Olamundo extends CI_Controller{

	function index(){
                /*carrega a nossa view */
		$this->load->view('olamundo');
 	}
}
?>

Obs: tome cuidado ao criar os seus arquivos pois o PHP é case sensitive, ou seja, distingue minúsculas de maiúsculas. O nome do arquivo deverá ser em minúsculas e a classe será o mesmo nome que o arquivo só que a primeira letra em maiúscula.

Agora que temos nosso controlador precisamos criar nossa view que será responsável por exibir as informações na tela. Essa view deve ser criada na pasta /application/views/ com o nome olamundo.php:

/application/views/olamundo.php

<html>
<head>
<title>Ola Mundo!</title>
</head>
<body>
<h1>Ola Mundo!</h1>
</body>
</html>

Para testar se tudo funcionou corretamente digite a url http://localhost/post/index.php/olamundo uma tela como a seguinte deverá aparecer:

Ok, note agora que estamos digitando o index.php antes do nosso controller olamundo como isso fica estranho e pouco amigável para usuários leigos no assunto, vamos habilitar no CodeIgniter, URL’s limpas, o que significa dizer que no nosso exemplo a URL ficará assim: http://localhost/post/olamundo.
Faremos essa configuração através do arquivo .htaccess. Esse arquivo contêm informações sobre como o Apache deverá comportar-se a respeito de uma pasta ou arquivos. O arquivo deverá ser criado na raiz do nosso projeto, certificando-se de não salvar como .htaccess.txt, pois se isso acontecer, a configuração não funcionará.

A seguir, veja o código do arquivo .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Este arquivo contém três partes. A primeira linha informa ao servidor que se não estiver habilitado o RewriteEngine, ele deverá ser acionado. A segunda e terceira linhas informam ao Apache em que condições deverá ser aplicada a regra contida na quarta linha. E por último, a regra de reescrita. Essa linha contém uma expressão regular que substitui tudo o que encontrar na URL pelo seu próprio conteúdo acrescido de index.php.

Depois dessa configuração já podemos acessar a nossa página pelo endereço:

http://localhost/post/olamundo

É isso ai pessoal espero que seja útil pra quem está iniciando com esse excelente framework, até a próxima!