terça-feira, 11 de janeiro de 2011

Mudança de endereço do blog e novos membros

Olá, amigos.

Peço desculpas por passar tanto tempo sem postar. Eu ainda estou de aula lá na UECE e por causa disso o tempo estava bastante curto, mas estou voltando a ativa. Devido à escassez de tempo (e também de conteúdo) pedi a ajuda para 3 amigos de faculdade me ajudarem com o blog. São eles:

  • Anderson Couto
  • Fred Freitas
  • Rodrigo Bastos
Os três são muito bons e se respondem. Podem aguardar por excelentes posts e muita coisa interessante. Um detalhe essencial é que estamos nos mudando para o wordpress. Sim, adeus blogspot. O nome do blog é o mesmo e o conteúdo que tem aqui está também lá no blogspot. Este vai ser o meu último post aqui.

Para continuar vendo sobre as novidades, dicas, tutoriais e muito mais, acesse:



Att,
Rafael Pessoa

sexta-feira, 31 de dezembro de 2010

Criando um executável em Java com duplo clique

Olá, pessoas!


Eu, particularmente, sou grande fã de Java. Fiquei um tempo frustrado ao ver que Java não tinha um executável fácil. Existe a opção de criar um arquivo .jar (java archive), e ainda assim, além de tudo, não funcionava com duplo clique. Tinha que executar o .jar pelo terminal ou prompt. Além disso, ainda tinha que configurar o manifesto e todo aquele blablablá. Felizmente, descobri uma maneira interessante de "criar" um executável para Java. O truque é bem simples, vamos criar o nosso arquivo em Java normal, compilamos e vai gerar o nosso arquivo .class. Ao invés de irmos ao terminal (ou DOS, depende do seu SO) e digitarmos o comando para executar o arquivo .class: java nomedoarquivo, nós simplesmente vamos encapsulá-lo em um arquivo .c ou .cpp e executá-lo neste arquivo usando a função system(); . Legal, né? Ótimo, vamos tentar colocar em prática:

Vamos criar um arquivo em Java que abre uma GUI (Graphics User Interface) desejando a você um "Feliz Ano Novo! Boas festas!", é bem simples, mas vai demonstrar o que eu quero.


Segue o código do nosso arquivo gui.java:


import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;

public class gui extends JFrame {
    JPanel painel;
    JLabel msg;
    public gui() {
        super("UECEANO");
    }
    public void criaJanela() {
        painel = new JPanel();
        msg = new JLabel("Feliz ano novo! Boas festas!");

        painel.add(msg);

        getContentPane().add(painel, BorderLayout.CENTER);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        gui janela = new gui();
        janela.criaJanela();
    }
}



Pronto, até aqui temos o nosso arquivo em java. Para compilar e executar, abra o terminal e digite: javac gui.java && java gui  (Certifique-se que você tem o JDK e a JVM instalado no seu computador. Você poderá encontrá-los para download no site oficial). Certo, agora vamos ao segundo passo, criar o nosso executável de duplo clique:

Crie um arquivo em C ou C++ (ou qualquer outra linguagem compilada que crie um executável). Eu vou escolher C. Chamarei o meu arquivo C de AnoNovo.c. O código dele é bastante simples:


int main() {
    system("javac gui.java && java gui");
    return 0;
}

Pronto, só isso. Simples, não? Mas calma, agora vamos gerar o nosso executável em C que irá executar o nosso arquivo Java. Para criar, abra o terminal e digite make AnoNovo (certifique-se que você tem um compilador C instalado. Caso não o tenha, poderá baixá-lo com um sudo apt-get install gcc). Com isso, teremos o nosso arquivo AnoNovo.exe. Pronto, basta dar 2 cliques, e ele irá executar o nosso arquivo Java. :)

Antes, algumas observações:
  • Os arquivos precisam estar na mesma pasta.
  • Caso os arquivos estejam em uma pasta, e você crie um link, você precisará colocar o caminho da pasta na função system do AnoNovo.c ( Por exemplo: system("cd MeusDocumentos && javac gui.java && java gui");
  • Caso você esteja no Linux, você está dando 2 cliques e ele não está executando, faça os seguintes procedimentos:
  1. Clique no executável com o botão direito e em seguida, no menu, clique em Propriedades ;
  2. Abrirá uma janelinha com as guias "Básico", "Emblemas", "Permissões", "Abrir com" e "Notas". Clique na guia Permissões
  3. Marque a opção "Permitir execução do arquivo como um programa" e feche a Janela.


Sem mais, o seu executável agora já está funcionando corretamente. Desejo um feliz ano novo, boas festas, muita paz, saúde, amor e sucesso a todos!

Um grande abraço,

quarta-feira, 29 de dezembro de 2010

Padrões de Projeto de Software

Olá gente!

Você já ouviu falar de Padrões de Projeto? Ou o termo em inglês, Design Patterns? Bem, vamos formular umas perguntas e respostas:

1) O que é Padrões de Projeto?
2) Para que servem os Padrões de Projeto?
3) Como escolher o Padrão de Projeto do meu software?

Como diria Jack, o estripador, vamos por partes. Vou contar para vocês uma historinha que o meu orientando do laboratório que estou estudando, o Dr. Jerffeson Teixeira, contou em uma palestra sobre PP (Padrões de Projeto). Suponha que um alienígena veio estudar Engenharia de Software aqui na Terra. Mais especificamente, na UECE. O alienígena, vendo que todos iam para às aulas de roupa, perguntou a mim com que roupa ele deveria ir para as aulas (Aqui nós encontramos um problema: Como o alien deve ir para a aula). Eu, então, respondi: olha, estamos no Ceará, normalmente os alunos vão de bermuda ou calça e uma camisa (Uma solução. Uma solução USUAL).

Ok, vamos pensar. Bermuda ou calça + camisa. É a melhor solução? Bem, talvez sim, talvez não, mas de qualquer forma, é uma ótima solução, afinal, a grande maioria vai vestido assim, não é mesmo? Então voltando às perguntas:

1) Padrões de Projetos são boas ou até ótimas soluções para determinado software orientado à objeto a ser desenvolvido. Complementando um pouco mais com o Wikipédia: "os padrões de projeto visam facilitar a reutilização de soluções de desenho - isto é, soluções na fase de projeto do software, sem considerar reutilização de código. Também acarretam um vocabulário comum de desenho, facilitando comunicação, documentação e aprendizado dos sistemas de software."

Antes de continuar com o restante das respostas das perguntas, devo lhes confessar que há 2 tipos de PP: Padrões GoF (Trataremos um exemplo aqui) e Padrões GRASP (General Responsibility Assignment Software Patterns). GoF é um acrônimo de Gang of Four, formado por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Vale lembrar o que GoF pode ser subdivido em três tipos de padrões:
  • Padrões de criação;
  • Padrões estruturais;
  • Padrões comportamentais.
Quem tiver realmente interessado no assunto, que vale a pena aprender, há diversos livros para download e para vender também.

2) Para que servem os Padrões de Projeto? Alguns exemplos já foram citados, tais como: criar um vocabulário comum entre desenvolvedores de software; são, geralmente, ótimas soluções; além disso, os padrões nos dão generabilidade, uma maior abstração, e os padrões têm sempre um contexto, um problema e uma (ou mais) soluções.

3) E qual o melhor Padrão de Projeto? Cada caso é um caso, já diz o ditado. Vai depender de que tipo de software você está desenvolvendo. Alguns aspectos a serem observados para lhe auxiliar na escolha do seu PP:
  • Conheça bem os Padrões de Projeto;
  • Considere como os padrões de projeto solucionam problemas de projeto;
  • Examine as seções de descrição do problema de cada padrão;
  • Estude como os padrões se interrelacionam;
  • Estude padrões de finalidades semelhantes;
  • Examine uma causa de reformulação de projeto;
  • Olhe exemplos dos padrões;
  • Considere o que deveria ser variável no seu projeto.

Para finalizar, eu gostaria de mostrar um exemplo de uma classe do Singleton, que é um Padrão de Criação do GoF, que garante a existência de apenas uma instância da classe. Você pode usar quando você necessitar de somente uma instância da classe, por exemplo, uma conexão com banco de dados. Suponha que você terá que chamar diversas vezes a conexão com o banco de dados em um código na mesma execução. Se você instanciar toda vez a classe de banco, haverá grande perda de desempenho. O singleton irá garantir para você que há apenas uma instância daquela classe. Enfim, vamos partir para o nosso exemplo da nossa classe em Java:

public class MySingleton {
     /* Instancia privada que será acessada */
     private static MySingleton myInstance;
     /* Construtor privado. Suprime o construtor público padrao. */
     private MySingleton() {
          /* Operações de inicialização da classe */
     }
     /* Método público de acesso único ao objeto! */
     public static MySingleton getInstance(){
           if(myInstance == null) {
                myInstance = new MySingleton();
           }
           return myInstance;
     }
 }


É isso. Quem tiver dúvidas, críticas, sugestões, por favor, comentem!
Abraços e até a próxima!

segunda-feira, 27 de dezembro de 2010

Seriados sobre Nerds

Olá!

Quem gosta de seriados de nerds e nunca ouviu falar de The Big Bang Theory?
Eu particularmente sou fã ("BAZZINGA"). Apesar do nerdismo de The Big Bang Theory, ele não é um seriado voltado para a comunidade da computação.

Felizmente, fiquei sabendo da existência recentemente (apesar da 1a temporada do seriado ter sido lançada em 2006 na Inglaterra) de um seriado muito engraçado sobre nerds. Chama-se IT Crowd. Sim, um seriado voltado para a área de Computação. Já assisti o primeiro episódio e tenho que confessar: é muito engraçado. O vídeo abaixo contém a abertura e uma das primeiras cenas. Não é à toa que o seriado já venceu os prêmios BAFTA e Emmy Internacional de melhor sitcom.


Quem tiver interesse e quiser baixar o seriado, poderá encontrá-los para download no:
Abraços,


domingo, 26 de dezembro de 2010

Gosta de programar? Teste seus conhecimentos!

Olá!

Não sei se todos são como eu, mas um dos meus passatempos favoritos é programar. Programar para mim é como um daqueles joguinhos casuais que a gente joga no celular quando estamos esperando numa fila, sempre que dá, a gente tá lá. Pois bem, existem sites com diversas questões de todos os tipos de dificuldade e variedade que você possa imaginar. O meu favorito é o SPOJ (Sphere Online Judge) http://br.spoj.pl. Nesse post vou explicar um pouco como funciona, criando uma conta no SPOJ e resolvendo um problema do site. Vamos lá:  

1) Como funciona? O site dá a sua tarefa (o que o seu programa deve fazer), as especificações da entrada, dá o limite da entrada (Por exemplo, o problema pede para calcular se um numero é primo ou não. Portanto ele dirá, por exemplo, que o maior número que ele vai testar é 2²¹), como deverá ser a formatação da saída* e dará um ou mais exemplo de entrada/saida.

2) Legal. Como crio minha conta?
    2.1) Clique onde tem escrito "register" no menu do lado esquerdo da tela.

    2.2) Escolha um nome de usuário

     2.3) Preencha o formulário do jeito que você achar mais conveniente para você. Depois, clique no botão "Atualizar".

    2.4) Confirme a sua inscrição no seu e-mail

    2.5) Clique onde tem escrito "status" para ver as submissões mais recentes que pessoas do brasil inteiro mandam. Lá você poderá ver o ID / Dia e hora da submissão / Usuário / Problema / Resultado / Tempo / Gasto de memória / Linguagem de Programação

    2.6) Clique em problemas e abrirá um banco de problemas para você se divertir. Note que embaixo de problemas abrirá um submenu com as opções "obi", "regionais", "seletivas", "sulamericana". Aviso de antemão que as questões da obi (olimpiada brasileira de informática) são as questões mais fáceis, no geral, mas não se enganem, há questões razoáveis lá. =)

3) Vamos resolver um problema simples: https://br.spoj.pl/problems/PRIMO/ em C++. Caso você não tenha um compilador de C++, uma boa opção é o CodeBlocks (http://www.codeblocks.org/downloads/26).

#include <iostream> /* Biblioteca onde tem
funções de entrada e saida */
#include <stdlib.h> /* Para usar a função abs() */

using namespace std;

/* Uma função que nos retornará true,
 se primo, false caso contrário */
bool eprimo(int n) {
    int aux = true;
    /* Verifica se existe algum número que
     seja divisivel por n, tal que 
    esse número é maior do que 1 e menor do que n */
    for ( int i = n - 1 ; i > 1 ; i-- ) {
        /* Se existir um número divisível por n,
       então ele não é primo */
        if ( n % i == 0 ) {
            /* aux recebe o valor falso e sai do laço, 
            pois não precisa mais testar outros casos */
            aux = false;
            break;
        }
    }
    return aux;
}

int main() {
    int n;
    /* Leio um número */
    cin >> n;
    /* n vai receber o módulo de n. Ou seja,
    se n = -4, n passa a ser 4 */
    n = abs(n);
    /* Se n for primo, 
    diferente de 1, -1 e 0, então imprima "sim" */
    if (eprimo(n) && n != 1 && n != -1 && n != 0)
       cout << "sim" << endl;
    else
    /* Caso contrário imprima "não" */
       cout << "nao" << endl;
    return 0;
}


E foi aceito com sucesso!

Obs: Os sinais de /*  */ são comentários de múltiplas linhas. Tudo que está
entre esses sinais será ignorado pelo compilador.


Por hoje é só. Qualquer dúvida, crítica, sugestão, por favor, comente.

Abraços e divirtam-se!

sábado, 25 de dezembro de 2010

Preocupado com o firesheep? Conheça o FireShepherd

Olá!

Como prometido no post anterior, fiquei de mostrar para vocês uma ferramenta que combatesse o FireSheep. Eis que lhes apresento o FireShepherd! Como ele funciona? Ele é um executável bem simples que apenas fica mandando uma série de pacotes sem sentido para o invasor. Parece simples demais, mas funciona bem. Quem quiser fazer o download do FireShepherd, baixe-o aqui:

http://notendur.hi.is/~gas15/FireShepherd/FireShepherd.exe

Basta executar e deixar o programa minimizado. Note que os pontinhos que ficam aparecendo no console são os pacotes sendos enviados. E assim, com tamanha simplicidade termino o post de hoje. De qualquer forma, é sempre bom ficar esperto quando estiver usando uma rede pública.

Um grande abraço e até a próxima!

sexta-feira, 24 de dezembro de 2010

Sequestro de conexões fácil: Firesheep

Olá!

Vendo as estatísticas de visitas do blog, vi que 48% dos usuários usam Windows e 1% usa Macintosh e o navegador mais usado é o Mozilla Firefox com esmagadores 80%. De fato, o firefox é, também, o meu navegador favorito. Para quem usa Windows e Mac, o firefox tem uma extensão bastante interessante. Trata-se do Firesheep, uma ferramenta de sniffing. Antes de explicar como instalar e usar o Firesheep, vamos falar um pouco de sniffing? Em redes de computadores, sniffing é um procedimento realizado por um sniffer. Simples, não? Definição pobre demais, vamos completar um pouco mais. Sniffer é uma ferramenta constituida de um software ou hardware que é capaz de interceptar e registrar o tráfego de dados em uma rede.

Como o firesheep funciona? Bem, pelo pouco que eu testei e li, ele sequestra sessões abertas numa mesma rede (wi-fi ou não). Aparentemente, quando estamos numa rede wi-fi privada ele não consegue capturar com sucesso as sessões. Imagino que por causa de protocolos etc. Mas ele funciona bem (segundo li, e que ainda vou testar pessoalmente) numa rede pública. Já imaginou que interessante você deixa o seu roteador sem senha e deixa seus vizinhos acharem que estão sendo espertos e usarem sua conexão e você roubar a sessão deles no twitter, facebook, dropbox etc? Ou então em um shopping cujo wi-fi é público? Bem, dá para brincar um pouco, hehe! Vamos ao que interessa, instalando o firesheep:

1) Seu SO precisa ser Windows ou Mac (não tem para Linux, ainda);
2) Instale, caso não tenha, o Mozilla Firefox da versão 3.6.12 ou mais nova, mas não funcionará com Mozilla 4.x beta. Você poderá encontrá-lo para download no site oficial (http://br.mozdev.org/download/);
3) Caso seu SO seja o Windows, baixe o Wincap (http://www.winpcap.org/install/bin/WinPcap_4_1_2.exe);
4) Baixe o firesheep (https://github.com/downloads/codebutler/firesheep/firesheep-0.1-1.xpi);
5) Para instalar basta arrastar o arquivo .xpi em cima de um ícone do Firefox e seguir as instruções;

Pronto, após esses passos o firesheep deverá ter sido instalado corretamente. Como usá-lo? Abra o navegador Firefox e clique em Exibir > Painel > Firesheep ou simplesmente segure CTRL + SHIFT + S e abrirá um painel do lado esquerdo do navegador. Na parte inferior do painel você verá dois botões. Clique e explore o conteúdo. Verá que em Preferences > Websites o firesheep consegue fazer uma captura de sessões de sites tais como:
  • Amazon.com
  • Basecamp
  • bit.ly
  • Cisco
  • CNET
  • Dropbox
  • Enom
  • Evernote
  • Facebook
  • Flickr
  • Foursquare
  • GitHub
  • Google
  • Gowalla
  • Hacker News
  • Harvest
  • Windows Live
  • New York Times
  • Pivotal Tracker
  • ToorCon: San Diego
  • Slicehost SliceManager
  • Tumblr.com
  • Twitter
  • Wordpress
  • Yahoo
  • Yelp
Beleza, e agora, como faço para sequestrar as sessões? Bem, é simples, clique no botão Start  Capturing.
    É uma variedade bem grande de sites. Você pode estar pensando que as pessoas que criaram o firesheep estavam mal intencionadas. Mas na verdade, o intuito deles era mostrar ao mundo que vários sites, especialmente os de redes sociais, tem uma criptografia fraca e não dá segurança nenhuma ao usuário. O firesheep, na verdade, foi criado com uma boa intenção para que a segurança de informações cresça e fortaleça, garantindo uma tranquilidade a mais aos usuários. Aproveitando o papo de redes sociais, quem quiser me seguir no twitter: http://www.twitter.com/_rbpessoa.

    E assim, termino o post. Desejo a todos um feliz natal, uma festa repleta de alegrias e de Deus! E nunca esqueçam o verdadeiro significado do natal.

    Ei, espera, e agora? Como faço para me defender do firesheep? Aguarde o próximo post. :)


    Abraços,