terça-feira, 25 de março de 2014


Ruby é...


      Uma linguagem dinâmica, open source com foco na simplicidade e na produtividade. Tem uma sintaxe elegante de leitura natural e fácil escrita.         

Ruby Em Linux

       Dependendo da distribuição que está a utilizar, existem inúmeras maneiras para instalar Ruby. A primeira opção é simplesmente fazer o download do código fonte (em baixo) e compila-lo manualmente. No entanto, em algumas plataformas, há gestores de pacotes que tornam a instalação do Ruby extremamente fácil.
Por exemplo, o Debian ou Ubunto apt-get providenciam uma solução simples e elegante:
$ sudo apt-get install ruby irb rdoc
Para o irb e rdoc vamos necessitar de activar o repositório universal.

INSTALAÇÃO DO RUBY NO LINUX (UBUNTU)

A instalação do Ruby no Linux é muito parecida com a instalação no Windows. A maior diferença é que você só precisa de alguns comandos no terminal e ele se encarrega de todo o resto (baixar e instalar no devido lugar).
1
$ sudo apt-get install ruby1.9.1-full
Pronto, Ruby instalado. Agora você pode fazer um teste rápido. Digite no terminal:
1
$ ruby -v

PRIMEIRA APLICAÇÃO RUBY NO LINUX

Você já deve saber que escrever um “Hello World” em Ruby é muito simples. Então vamos fazer um programa executá-lo. Para fazer isso iremos precisar de um editor de texto simples(Gedit, por exemplo) e o terminal para digitar alguns comandos. Agora vamos aos passos:
  • Abra o terminal (console) e vamos criar uma pasta para guardar o nosso programa, da seguinte forma:
1
2
3
$ cd ~
$ mkdir testeruby
$ cd testeruby
  • Abra o Gedit ou outro editor de sua preferência, escreva o texto abaixo:
1
puts "Hello world Ruby!"
  • Salve com o nome programa.rb na seguinte pasta: ~/testeruby
  • Volte para o terminal e execute o seu programa
1
$ ruby programa.rb
Se você fez tudo certinho verá o texto “Hello world Ruby!” sendo exibido no terminal (console).
Quando se usa o Linux, existem duas formas de você executar seus programas utilizando o Ruby. A primeira forma é utilizando o comando ruby + nome-do-arquivo.rb no terminal, como no exemplo anterior. A outra forma, é colocar o caminho para o interpretador Rubydentro do arquivo programa.rb como no texto abaixo:
1
2
#!/usr/bin/env ruby
puts "Hello world Ruby!"
Agora dê permissão de execução para o seu arquivo:
1
$ chmod +x programa.rb
E execute-o:
1
$ ./programa.rb
Perceba que a diferença entre as duas formas de execução de programas Ruby é apenas o comando no terminal. Na primeira forma você usa o comando “ruby” e na segunda você o executa como um arquivo qualquer do linux.
Pronto, programa escrito e executando!

Para Além do Básico

O Ruby é rico em outras características, entre as quais se destacam as seguintes:
  • Capacidade de tratamento de excepções, tal como o Java ou Python, por forma a facilitar o tratamento de erros.
  • Um verdadeiro mark-and-sweep garbage collector para todos os objectos Ruby. Não é necessário manter contadores de referência em bibliotecas de extensão (extension libraries). Tal como Matz diz, “Isto é melhor para a sua saúde.”
  • Escrever extensões C em Ruby é mais fácil do que em Perl ou Python, com uma API refinada para chamar Ruby desde o código C. Isto inclui chamadas para embeber Ruby em software externo por forma a ser utilizado como uma linguagem interpretada dentro do software. Uma interface SWIG também se encontra disponível.
  • O Ruby pode carregar bibliotecas de extensão (extension libraries) dinamicamente se um Sistema Operativo o permitir.
  • O Ruby tem um sistema de threading independente do Sistema Operativo. Portanto, para todas as plataformas nas quais o Ruby corre, temos multithreading, independentemente de o Sistema Operativo o suportar ou não, até em MS-DOS temos multithreading!
  • O Ruby é altamente portável: é desenvolvido principalmente em ambiente GNU/Linux, mas trabalha em muitos tipos de ambientes UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.
    Fonte: https://www.ruby-lang.org/pt/ 





      

Linguagem de programação Java

        
         Muito hoje em dia é falado sobre Java e toda a revolução que ela vem provocando no way-of-life de programadores, analistas e internautas. Mas o que é       Java, afinal? Quais são suas origens e seus propósitos? De onde vem todo esse sucesso?
         Java é uma linguagem de programação orientada a objetos, desenvolvida por uma pequena equipe de pessoas na Sun Microsystems. Inicialmente elaborada para ser a linguagem-base de projetos de software para produtos eletrônicos, Java teve seu grande boom em 1995, devido ao sucesso mundial da World Wide Web. Mas o que tem Java a ver com a WWW?
           Como foi dito, o propósito inicial do desenvolvimento de Java foi para funcionar em processadores de eletrodomésticos. Os projetistas de sistemas de controle desses processadores, descontentes com linguagens convencionais de programação, como C, propuseram a criação de uma linguagem específica para uso em processadores de aparelhos domésticos, como geladeiras e torradeiras. Todo o descontentamento dos projetistas residia no fato de que programas escritos e compilados em C são fortemente dependentes da plataforma para a qual foram desenvolvidos. 
            Como o ramo de eletro-eletrônicos está em constante evolução, a cada novo liquidificador lançado no mercado com um novo processador embutido, um novo programa deveria ser escrito e compilado para funcionar no novo compilador, ou então, na melhor das hipóteses, para reaproveitar o antigo programa, no mínimo ele teria de ser re-compilado para o novo processador.
 
Características do Java

      Java é uma linguagem de alto nível, com sintaxe extremamente similar à do C++, e com diversas características herdadas de outras linguagens, como Smalltalk e Modula-3. É antes de tudo uma linguagem simples (é mesmo!), fortemente tipada, independente de arquitetura, robusta, segura, extensível, bem estruturada, distribuída, multithreaded e com garbage collection. 

       SIMPLICIDADE: Java, é muito parecida com C++, mas muito mais simples. Java não possui sobrecarga de operadores, structs, unions, aritmética de ponteiros, herança múltipla, arquivos .h, diretivas de pré-processamento e a memória alocada dinamicamente é gerenciada pela própria linguagem, que usa algoritmos de garbage collection para desalocar regiões de memória que não estão mais em uso.

          ORIENTAÇÃO A OBJETOS: Ao contrário de C++, que é uma linguagem híbrida, Java é uma linguagem orientada a objetos que segue a linha purista iniciada por Smalltalk. Com a exceção dos tipos básicos da linguagem (int, float, etc.), a maior parte dos elementos de um programa Java são objetos. (A título de curiosidade, Smalltalk já é considerada puramente O.O. [orientada a objeto], pois absolutamente tudo em Smalltalk são objetos, não há tipos básicos em Smalltalk.) O código é organizado em classes, que podem estabelecer relacionamentos de herança simples entre si. Somente a herança simples é permitida em Java. (Há uma forma de "simular" herança múltipla em Java com o uso interfaces, que veremos em outros passos do curso).

        PROCESSAMENTO DISTRIBUÍDO: Chamadas a funções de acesso remoto (sockets) e os protocolos Internet mais comuns (HTTP, FTP, Telnet, etc.) são suportadas em Java, de forma que a elaboração de aplicativos baseados em arquiteturas cliente-servidor é facilmente obtida.

          MULTITHREADING: A maior parte dos sistemas operacionais hoje no mercado dão suporte à multitarefa, como o Windows, OS/2 e Unix, ou seja, o computador é capaz e executar diversas tarefas ao mesmo tempo. Cada um desses sistemas tem o seu tipo de multitarefa, preemptiva ou não, com ou sem multiprocessamento. Java tem o suporte a multitarefa embutido na linguagem: um programa Java pode possuir mais de uma linha de execução (thread). Por exemplo, cálculos extensos, que em geral demandam muito tempo do processador, podem ser escritos em uma thread, e a parte de interface com o usuário, que depende mais dos periféricos de I/O que do processador, pode ser executada em outra thread. Programação concorrente em geral é uma tarefa difícil, mas Java fornece diversos recursos de sincronização de processos que tornam a programação mais simples.

          EXCEÇÕES: Todo programador em geral está bastante acostumado com o computador "travando" por causa de um erro em um programa. Em C++, por exemplo, a simples tentativa de abertura de um arquivo inexistente pode obrigar ao programador a reiniciar o computador. Programas Java, contudo, não "dão pau" no computador, já que a máquina virtual Java faz uma verificação em tempo de execução quanto aos acessos de memória, abertura de arquivos e uma série de eventos que podem gerar uma "travada" em outras linguagens, mas que geram exceções em programas Java. Em geral, ao escrever programas Java utilizando-se de herança de classes predefinidas, força-se em geral ao programador escrever algumas rotinas de tratamento de exceção, um trabalho que, se de início pode parecer forçado, irá poupar o programador de bastante dor de cabeça no futuro.

       GARBAGE COLLECTOR: Em Java, os programadores não necessitam preocupar-se com o gerenciamento de memória como em C++. Em C++, todo bloco de memória alocado dinamicamente (com new, malloc ou função similar) deveria ser liberado quando não fosse mais usado (com free, delete e parentes próximos). Isso acarretava diversos problemas mesmo ao programador mais experiente, que tinha que manter sempre um controle das áreas de memória alocadas para poder liberá-las em seguida. Java, ao contrário, utiliza-se de um conceito já explorado por Smalltalk, que é o de garbage collection (coleta de lixo). Sua função é a de varrer a memória de tempos em tempos, liberando automaticamente os blocos que não estão sendo utilizados. Se por um lado isso pode deixar o aplicativo um pouco mais lento, por manter uma thread paralela que dura todo o tempo de execução do programa, evita problemas como referências perdidas e avisos de falta de memória quando sabe-se que há megas e megas disponíveis na máquina.
 
      MACHINE INDEPENDENT: Uma das características de Java que tornou-a ideal para seu uso na elaboração de aplicativos distribuídos foi a sua independência de plataforma. Afinal, a Internet é uma grande "salada" de computadores de todos os tipos, dotados dos mais diversos sistemas operacionais e ambientes gráficos que se possa imaginar. Java consegue essa independência devido ao fato de que o compilador Java não gera instruções específicas a uma plataforma, mas sim um programa em um código intermediário, denominado bytecode, que pode ser descrito como uma linguagem de máquina destinada a um processador virtual que não existe fisicamente. Na realidade, existe. A Sun está desenvolvendo, já com alguns resultados práticos, microprocessadores cuja linguagem nativa é o Java: o picojava, microjava e ultrajava. O código Java compilado pode então ser executado por um interpretador de bytecodes, a JVM - Java Virtual Machine, que é um emulador de processador.

Arquitetura e Ferramentas
Como compilar e executar um programa Java?

        O processo de compilação de um programa Java é feito de acordo com os seguintes passos: o código fonte (extensão .java) é compilado e armazenado em um arquivo de extensão .class. De cara, percebe-se a impossibilidade de utilizar-se de DOS como sistema operacional para a elaboração de aplicativos Java, uma vez que o mesmo tem um suporte limitado a nomes de arquivos. Mas essa limitação quanto ao nome dos arquivos é somente a razão aparente da não-portabilidade de Java para DOS. A grande razão reside no fato de que Java foi projetada para sistemas de 32 bits, e só foram escritas Máquinas Virtuais Java para ambientes de 32 bits.
        A portabilidade de Java depende fortemente da existência de JVMs que rodem em diversas plataformas. Um programa Java rodará em um computador se existir uma JVM que nele rode. Ao contrário de programas Java, as JVMs devem ser programas feitos e compilados para máquinas específicas, de forma que serão as JVMs as responsáveis pela tradução de bytecodes Java para as linguagens nativas das máquinas.
         O conjunto de instruções da Máquina Virtual Java é otimizado para ser pequeno e compacto, tendo sido elaborado para ser uma espécie de processador RISC virtual: a rapidez da interpretação às vezes é sacrificada para garantir esse reduzido conjunto de instruções.
       O compilador mais utilizado para a transformação de arquivos-fonte java (.java) em arquivos de bytecodes é o javac da Sun (há diversos outros compiladores no mercado, mas o javac foi o primeiro e é o mais popular ainda hoje).
        Uma vez gerado o arquivo .class, ele deve ser passado à JVM instalada no computador. No caso mais comum, a JVM utilizada é a distribuída pela Sun em seu JDK (Java Developers Kit), denominada java. Isso no caso de aplicativos. No caso de Applets, os browsers que suportam Java já contêm em si uma JVM que interpreta os bytecodes das Applets.

Ferramentas para desenvolvimento em Java

A Sun, ao lançar a linguagem Java, pôs à disposição gratuitamente o pacote JDK - Java Developer's Kit, que inclui, entre outros:
Javac - o compilador de arquivos .java para bytecodes .class;
Java - a JVM específica para a plataforma;
      Appletviewer - visualizador de applets, sem a necessidade de execução das mesmas num browser.
          Diversas empresas desenvolveram ambientes para programação em Java, mas por enquanto nenhum deles firmou-se no mercado. Alguns IDEs (Integrated Development Environments) disponíveis para shareware ou para compra são mostrados a seguir:

Microsoft Visual J++ - A Microsoft, que de início menosprezou todo o potencial da Internet, e que subestimou Java como uma linguagem promissora, agora "retomou o bonde" e tenta, com o seu VJ++, estabelecer um padrão para IDEs Java. Contudo, o VJ++ tem mecanismos intrincados de instalação, consome muito espaço em disco e exige a presença do Internet Explorer no computador. 

Symantec Visual Café - A Symantec foi uma das poucas a acertarem em ambientes para Java. O seu Symantec Café fez grande sucesso em 1996, e o Visual Café parece ser bastante promissor. O ambiente de programação lembra o de Visual Basic. 

Asymetrix SuperCede - Na tentativa de desenvolver um compilador para Java, a Asymetrix desenvolveu o SuperCede, que peca por ferir um dos principais conceitos de Java: a portabilidade. SuperCede possui um compilador próprio que não gera bytecodes, mas sim código executável, na tentativa de ganho de performance.
Java e a Internet

     Como sabemos, a Internet é uma gigantesca "rede" (conceitualmente falando) que liga "zilhares" de computadores entre si. É uma rede heterogênea, já que diversos tipos de computadores estão ligados a ela. Todos esses computadores utilizam-se do protocolo TCP/IP para comunicarem-se. Como eles são distintos, eles precisam de uma linguagem que não esteja necessariamente amarrada a uma plataforma de hardware/software específica. Como já vimos, Java mostra-se ideal quanto a esse fator.
       Uma vez que os programa Java são transmitidos como bytecodes, eles podem rodar em qualquer computador sem necessitar uma nova recompilação, independente da plataforma na qual ele será executado. Programas Java sempre são carregados no computador cliente e nele executado.
         Há dois tipos básicos de programas Java: Aplicativos, que são programas como outros quaisquer, e Applets, programas especialmente confeccionados para executarem dentro de uma página HTML. Ao abrir uma página HTML que tenha inserida em si uma applet Java, esta é automaticamente descarregada para seu computador e executada. Daí vem a pergunta: há riscos de um vírus infectar o seu computador cliente??? Isso não ocorre, devido a uma série de limitações que os projetistas de Java impuseram às applets, por razões de segurança puramente, de forma que nenhuma applet Java seja capaz de "roubar" informações ou danificar dados do computador. A razão de toda essa segurança reside no fato de que programas Java são compilados em bytecodes que são verificados. Instruções bytecode são muito similares a outros conjuntos de instruções projetados para plataformas específicas, com a diferença de que bytecodes são conferidos através de informações adicionais que eles carregam em si informando a legitimidade ou não do arquivo.
      Programas C++ em geral chamam funções por endereço. Como o endereço é um número simples que pode ser construído de qualquer forma, o programa pode utilizar-se de qualquer número para executar uma função. Java, ao contrário, tem uma abordagem muito diferente. Métodos e variáveis não são acessados por endereço, mas sim por nomes. É a esse processo de verificar quais métodos e variáveis que serão realmente usados e que chamamos verificação, que é necessário para garantir que os bytecodes não sofram qualquer adulteração e que continuem obedecendo às restrições de Java. Uma vez verificado o bytecode, a JVM irá traduzir enfim os nomes de funções para endereços.
Escrito por I. F. Silveira - Publicado em 30/06/2003