JRuby + Web: Por que usar Java com JRuby on Rails?

Tamanho: px
Começar a partir da página:

Download "JRuby + Web: Por que usar Java com JRuby on Rails?"

Transcrição

1 c a p a JRuby + Web: Por que usar Java com JRuby on Rails? Enta as vantagens de se usar Java para rodar código Ruby, inclusive aplicações JRuby on Rails. Fabio Kung é engenheiro da Computação pela Escola Politécnica da USP e possui experiência na Alemanha, onde trabalhou com Java para a Web. Palestrante em alguns eventos de tecnologia como o Conexão Java, JustJava, Falando em Java, WebMobile TechWeek, RejectConf e Rails Summit Latin America. Possui as certificações SCJP, SCBCD 5, SCEA 5 e Ruby Certified Programmer Silver. Também participa de alguns projetos opensource como o VRaptor, Waffle, GUJ, Caelum Stella e JettyRails, além de estar bastante envolvido com a comunidade de Ruby no Brasil. Trabalha na Caelum como instrutor, desenvolvedor e consultor. JRuby tem ganhado muita popularidade nos últimos tempos, por ser a única alternativa viável à implementação oficial da linguagem Ruby, conhecida como MRI. É considerada a implementação mais rápida da linguagem Ruby, chegando a ter performance média quatro vezes superior. Além disso, JRuby é o único que já implementa quase todas as mudanças introduzidas na versão 1.9 da linguagem Ruby, além da implementação oficial, a YARV. Como pode uma implementação que roda sobre a JVM (camada extra) ser a mais veloz? Quais são as vantagens de executar código Ruby na JVM e como podemos tirar proveito disso? Como e por que executar aplicações Web feitas com o Ruby on Rails usando tecnologia Java? Este artigo busca mostrar alguns detalhes de funcionamento do JRuby e porque ele está se tornando tão popular. 52

2 Desde o início, Yukihiro Matsumoto (Matz) teve como objetivo criar uma linguagem o mais legível e expressiva possível. Praticamente, nenhuma das decisões no projeto de Ruby favorece possíveis implementações da linguagem: interpretadores, parsers, compiladores e máquinas virtuais. Por causa disso, muitos consideram Ruby uma linguagem difícil de implementar de forma eficiente. Não foi projetada para ser rápida, mas sim legível; portanto estaria condenada a ser uma das linguagens mais lentas. Performance não é o foco, e para grande parte das aplicações ela é simplesmente suficiente. Mesmo assim, os implementadores da linguagem têm feito um trabalho excepcional. Hoje existem diversas implementações da linguagem como o IronRuby, MacRuby, Rubinius e MagLev. A maioria destas implementações ainda tem como foco a compatibilidade, ou seja, conseguir rodar as aplicações e código Ruby existentes; inclusive as que usam o Rails. O ciona como um grande divisor de águas para as implementações da linguagem Ruby: suportar aplicações escritas usando o Ruby on Rails é o grande indicativo de compatibilidade. Entre todas as implementações, a que tem mais destaque é o JRuby, a única que pode se dar ao luxo de não se preocupar mais tanto com compatibilidade. Já há mais de um ano que os seus desenvolvedores, liderados por Charles Nutter, têm trabalhado em melhorar a performance. O JRuby é atualmente a única implementação já compatível com a versão da linguagem Ruby e o suporte à versão está a todo vapor e quase completo. JRuby tem puxado a qualidade de todas as outras implementações para cima, estimulando a competitividade entre elas. Os problemas do interpretador MRI A implementação oficial do Ruby 1.8 é conhecida como Matz Ruby Implementation/Interpreter (MRI) ou CRuby, já que é escrita em C. Alguns também propõem que a sigla seja lida como Matz Reference Implementation. Como o foco do Matz sempre foi a legibilidade e expressividade da linguagem, nunca favoreco implementação, o interpretador é bem simples em diversos aspectos. Puro interpretador O interpretador MRI opera na forma mais lenta para execução de código hoje disponível: a pura interpretação. Isso significa que o interpretador vai andando pelo código e executando o código de máquina associado. As melhores implementações, para a maioria das linguagens de última geração, costumam ser baseadas em máquinas virtuais. Um bom motivo (discutiremos outros) é pensar na portabilidade: o interpretador precisa ter grande parte do seu código reescrito para cada nova plataforma que deseja ter uma implementação de Ruby, o que dificulta a difusão da linguagem em diversas plataformas. Threads, ou threads em espaço de usuário (user space), já que o próprio processo do interpretador as ativa e desativa (escalonamento), e não o Sistema Operacional (kernel space). A principal vantagem é que green threads são mais rápidas de serem criadas e destruídas do que threads nativas, gerenciadas pelo Sistema Operacional. Além disso, costumam consumir menos recursos da máquina (cpu, memória); ou seja, são mais leves do que as threads nativas. Por estarem confinadas dentro de um processo, green threads também estão confinadas a apenas uma CPU. Não conseguem se beneficiar de vários núcleos e/ou processadores disponíveis. Já threads nativas são gerenciadas pelo Sistema Operacional, que pode jogar cada uma delas em uma CPU diferente. Threads nativas aproveitam melhor a realidade atual do hardware, com cada vez mais núcleos e CPUs na mesma máquina. Por fim, outro grave problema no uso de green threads é que existem algumas operações chamadas bloqueantes, que causam o travamento do processo "chamador" até a operação terminar. Como exemplos podem ser citadas algumas chamadas de IO e algumas syscalls (chamadas ao Sistema Operacional), que são bloqueantes. Como é o processo do MRI que gerencia as threads, caso qualquer uma delas faça alguma chamada bloqueante ao Sistema Operacional, o processo inteiro é travado e consequentemente todas as threads ficam esperando a chamada bloqueante terminar, não apenas a thread que fez a chamada. Por este motivo, processos de background em aplicações Rails não costumam usar threads, mas sim processos separados, geralmente com o uso da gem BackgroundDRb. Threads nativas são mais pesadas, mas resolvem este problema. Caso uma thread nativa execute alguma operação bloqueante, o Sistema Operacional trava apenas a thread que fez a chamada. Gerenciamento de memória Collector), que é extremamente simples e ineficiente. De tempos em tempos, o coletor de lixo varre a memória (heap) de objetos à procura de objetos que não estão mais so referenciados. Sempre que passa, o coletor de lixo varre a memória toda! Quanto tempo a aplicação deve ficar travada esperando o coletor terminar de varrer 3Gb de memória? O interpretador MRI usa um algoritmo conhecido como Stop Outro problema é que depois de coletar alguns objetos, o coletor de lixo não compacta a memória. O resultado são alguns espaços vazios (buracos) na memória de objetos, como ilustra a figura 1. Green threads Por decisão de projeto, as threads da aplicação Ruby são gerenciadas pelo próprio interpretador MRI. Esta estratégia é conhecida como Green Figura 1. Espaços vazios não recuperáveis na memória de objetos. 53

3 O espaço só é preenchido quando um novo objeto que caiba neste espaço vazio for criado. Existe uma chance de novos objetos ocuparem apenas uma parte do buraco na memória, fazo com que sobre um pedaço de memória tão pequeno que nenhum objeto poderá mais ocupá-lo. Veja na figura 1 que os espaços vazios existentes não comportam mais objetos, por serem muito pequenos. Como o tempo, aparecem cada vez mais desses pequenos buracos na memória. Este é o efeito conhecido como Fragmentação da Memória. Em outras palavras, podemos dizer que o coletor de lixo do MRI, por ser muito simples, não desfragmenta a memória. As aplicações escritas em Ruby, que rodem no MRI, naturalmente vazam memória. Mesmo sem ter nada de errado. Este é um dos motivos pelos quais muitos dizem que Ruby não é uma boa linguagem para processos que rodam por muito tempo (long running processes), já que o uso de memória cresce sem parar. Mesmo em aplicações Rails, a solução é reiniciar os processos do MRI de tempos em tempos. Às vezes feito pelo próprio servidor, como no caso do Phusion Passenger, às vezes feito por um processo de monitoramento extra, como o Monit e o God. Este até foi um dos episódios da recente história polêmica do Twitter, que trocou o sistema de mensageria Starling, feito em Ruby e rodando no MRI, pelo Kestrel, feito em Scala e rodando sobre a Java Virtual Machine. Um dos argumentos mais fortes é que eles tinham problemas com os processos de mensageria rodando por muito tempo. Felizmente, o MRI não é a única implementação de Ruby existente. Avi Bryant, um famoso rubista, deu uma importante palestra na RubyConf de 2007, onde disse: Eu vim do futuro, sei como esta história termina. Todas as pessoas dizo que você não pode implementar Ruby em uma máquina virtual veloz estão erradas. Esta implementação já existe, é conhecida como Gemstone e poderia ser facilmente adaptada para Ruby. (...) Ele se referia a máquinas virtuais para a linguagem SmallTalk, que é a grande inspiração do Matz e muito parecida com Ruby. Desta palestra surgiram as ideias para outra implementação de Ruby, que viria a ser anunciada na RailsConf de 2008, poucos meses depois. MagLev, da empresa GemStone, é a implementação de Ruby baseada no produto GemStone/S, que é uma máquina virtual para SmallTalk madura e com muitos anos no mercado, servindo grandes aplicações. Na época, o JRuby ainda almejava compatibilidade e era pelo menos duas vezes mais lento que o MRI. Hoje, porém, a frase do Avi Bryant também serve para grande parte das outras implementações. Boa parte do fator de sucesso de muitas delas vem do fato de serem baseadas em outros projetos, que já resolvem muito dos problemas envolvidos na implementação de uma linguagem. Alguns exemplos: chine), que serve como base para construção de máquinas virtuais e contêm algoritmos prontos para coleta de lixo, gerenciamento de memória etc.; na virtual ABAP; Criar uma máquina virtual do zero é um trabalho imenso. Quantos anos de trabalho e melhorias existem sobre o gerenciamento de memória da máquina virtual Java? Quanto já foi otimizado nesse tempo todo? Quanto tempo demoraríamos para ter um bom coletor de lixo (geracional, adaptativo, compactador), no nível do que existe na JVM da Sun? Aproveitar as plataformas de execução de código que já existem, como a plataforma Java, a plataforma.net, LLVM e PyPy, é aproveitar o bom trabalho que já tem sido feito sobre estas plataformas. É poder se beneficiar de compiladores JIT adaptativos bastante avançados e focar no que realmente importa ao implementar uma nova linguagem, com grandes chances de sair uma implementação eficiente. Dado que cada linguagem tem as suas vantagens e desvantagens sobre outras, há bastante gente que acredita em um futuro onde não haverá mais polarização de linguagens (Java vs C#) e sim polarização de plataformas: Java vs.net? A ideia de poder escrever os programas na linguagem mais adequada para cada caso e rodar na plataforma de preferência é bastante tentadora. A técnica tem sido chamada de Programação Poliglota (Polyglot Programming) e trata sobre usar a ferramenta certa para cada tarefa. O Java como plataforma JRuby é a implementação da linguagem Ruby em Java. Começou como um simples interpretador escrito em Java, que ia percorro o código Ruby e chamando métodos Java associados a cada expressão. Hoje, é muito mais do que isso, incluindo até um completo compilador capaz de transformar código Ruby em bytecodes Java válidos; arquivos.class prontos para serem lidos pela JVM. A capacidade de rodar código Ruby sobre a plataforma Java, faz com que Ruby esteja automaticamente disponível em todas as plataformas onde Java é suportado. Quase todas as existentes! De gigantescos mainframes a celulares e televisores. Diversos tipos diferentes de hardware e opções de sistemas operacionais. Além disso, JRuby é considerado como a única alternativa completa ao MRI, para a versão da linguagem Ruby. Também é a mais rápida, superando na média o MRI em quatro vezes [1]. Mas como uma camada a mais de interpretação (a máquina virtual Java, figura 2) pode tornar a execução de código Ruby mais eficiente? Compilador JIT Não raramente, código escrito em Java consegue ser mais rápido do que a alternativa escrita em linguagens estaticamente compiladas, como C. 54

4 código que permitam o compilador AOT a cometer quase nenhum erro e produzir código muito próximo do melhor possível e código que em sua maioria apenas faz chamadas nativas, como IO, rerização de vídeo etc. O que podemos dizer é que geralmente um bom compilador JIT ultrapassa o código de compiladores AOT. Saber mais execução do código. A tência de tornar a plataforma Java melhor para outras linguagens é tão forte que a Sun criou o projeto MLVM (Multi Language Virtual Machine) ou Da Vinci Machine, no qual são testadas melhorias à JVM da Sun (Hotspot), que a façam executar melhor linguagens dinâmicas. As melhorias que fazem mais sentido são propostas ao JCP através da JSR-292, para entrar em futuras versões da plataforma Java. Algumas como a nova instrução invokedynamic já estão até agadas para fazer parte do Java SE 7. Espero aprofundar o assunto em um próximo artigo. Apesar de parecer um absurdo (como o bytecode, so interpretado, pode superar o código assembly nativo para o processador?), o responsável é o grande herói das máquinas virtuais: o compilador JIT. É o caso das máquinas virtuais Java mais famosas (Sun Hotspot, Oracle JRockit, IBM J9 etc.), que possuem alguns dos melhores compiladores JIT existentes no mercado. Ao rodar código Ruby sobre a plataforma Java, aproveitamos alguns dos melhores (se não os melhores) compiladores JIT existentes. Esse é um dos principais motivos que tornam JRuby a implementação mais rápida. Isto é enxergar Java como plataforma, não como linguagem. O compilador JIT da Sun Hotspot é adaptativo e pode até decidir que um código já compilado pode ser compilado de uma maneira melhor. Neste caso, pode até decidir jogar fora o código antigo e compilar de novo. Os compiladores JIT das principais máquinas virtuais Java costumam procurar por pontos quentes da aplicação para serem compilados durante a execução. Por exemplo, se um método já foi chamado 20 vezes, pode ser considerado como um ponto quente e, portanto, vale a pena gastar um tempinho a mais compilando o código para assembly nativo do processador. Na próxima chamada do método, o código nativo é executado diretamente. Por isso, o código executado pelas máquinas virtuais costuma ser mais lento no começo, se comparado a alternativas compiladas estaticamente (AOT), ou até puramente interpretadas, pois estas que não sofrem do custo inicial de carregamento da máquina virtual, como mostra a figura 3. Existem dois tipos principais de compilação: compilado antes de ser executado; pilado durante a execução. Dado um programa em uma linguagem qualquer, é possível provar que existem infinitas formas de compilá-lo em linguagem nativa dos processadores comuns. Se existem infinitas maneiras, como um compilador AOT (por exemplo, o gcc para a linguagem C) escolhe uma delas? O compilador chuta, portanto pode errar. A diferença entre compiladores AOT bons e compiladores AOT ruins é que os bons dão um chute inteligente, usando, por exemplo, heurísticas e análise estática do códigofonte. Por isso erram menos, mas mesmo assim ainda podem errar. Um compilador JIT pode amenizar bastante esse problema, porque vai compilando o código durante a execução. Portanto, não precisa chutar nada, caso colete informações de como o código está executando. Na hora de compilar um pedaço de código (por exemplo, um método que já foi chamado dez vezes), o compilador JIT usa a informação de como o código é executado no momento, e gera o melhor código de máquina possível para esse caso; sem precisar de chutes. Desta forma, o código de máquina produzido por um compilador JIT costuma ser mais eficiente do que a contrapartida produzida por compiladores AOT. Claro que isso ainda vai deper de muitos fatores, como a qualidade e sofisticação dos compiladores usados, características do Na figura 3 vemos um gráfico comparativo entre código so executado em uma máquina virtual com compilador JIT e código produzido por um compilador AOT, ou puramente interpretado. O eixo vertical (Y) representa o tempo de resposta da aplicação, já o eixo horizontal (X) o tempo de execução. Para a interpretação pura ou compilação AOT não importa quanto tempo a aplicação esteja so executada, cada requisição sempre executa o mesmo código e, portanto, leva o mesmo tempo. No caso da máquina virtual com JIT, o programa começa muito mais lento, pois além do tempo inicial de carregamento da máquina virtual, o programa é puramente interpretado no início. Depois de algum tempo de execução, o compilador JIT começa a compilar os pontos quentes e gerar código mais eficiente. Como já visto, o JIT usa informação de como a aplicação é utilizada para gerar código de máquina melhor. 55

5 No gráfico é possível perceber que máquinas virtuais valem a pena para aplicações que rodem por muito tempo, como as que rodam em servidores. Quanto tempo ficamos sem reiniciar o servidor? Basta dar tempo suficiente ao JIT para otimizar o código; tempo conhecido como esquentamento (warm-up) da máquina virtual. Gerenciamento de memória Você ficaria surpreso se eu disser que as máquinas virtuais Java possuem algumas das melhores implementações de Garbage Collection? Uma das grandes sacadas para fugir de coletores stop-the-world, que travam a aplicação por tempos grandes é a hipótese das gerações (generational hypothesis). Observações em diversos sistemas orientados a objetos concluíram que a maioria dos objetos tem vida curta, ou seja, se tornam inúteis (nãoreferenciados) pouco tempo depois de sua criação. Em outras palavras, diz-se que em um típico sistema orientado a objetos, a mortalidade infantil é alta. Quantas vezes você já viu um código como o seguinte, no qual um objeto é criado dentro de um método, mas assim que o método termina perdemos todas as referências a esse objeto? } public void operacaoqualquer() { Cachorro cachorro = new Cachorro(); //... // no fim deste método, todas as referências ao // objeto cachorro são perdidas Usando este fato, poderíamos tentar otimizar o gerenciamento de memória, criando novos algoritmos de coleção de lixo. A ideia é dividir a memória de objetos em setores, como mostra a figura 4. sabemos que a maioria dos objetos tem vida curta, portanto mesmo em uma passada rápida, o coletor já leva quase todos os objetos embora. Aqueles que sobrevivem são promovidos (copiados) à memória adulta (tenured). Já que sobreviveram a uma (e, em algumas situações, a algumas) passada(s) do coletor de lixo, provavelmente estes objetos não fazem parte do conjunto que tem vida curta. Não vale a pena gastar tempo analisando-os novamente na próxima coleta de memória jovem; provavelmente vão sobreviver. Por isso são promovidos. A simples ideia de dividir a memória em vários pedaços, a partir da mortalidade infantil dos sistemas orientados a objeto, faz com que a coleta de lixo seja extremamente eficiente e bloqueie muito pouco a aplicação. Cada parte da memória pode ser vista como uma geração de objetos (jovem, adulta). Por isso, o algoritmo é formalmente conhecido como generational copying. Mais uma enorme vantagem de usar a máquina virtual Java para rodar código Ruby: todos os problemas de gerenciamento de memória anteriormente vistos no MRI já foram bem resolvidos nas máquinas virtuais Java mais famosas. Isso é enxergar o Java como plataforma, e não como linguagem. Aproveitar tudo aquilo de bom que é construído há anos na máquina virtual. Existem outros diversos algoritmos para coleta de lixo disponíveis nas várias opções de máquinas virtuais Java. Nas últimas versões da Hotspot, máquina virtual Java da Sun, está disponível o novo coletor G1 (Garbage lixo mais avançado já existente. Por fim, a maioria dos coletores de lixo disponíveis na plataforma Java são compactadores e/ou desfragmentadores. O que significa que a memória de objetos não fragmenta com o tempo, como no MRI. Por isso, as aplicações que rodam no JRuby não vazam memória naturalmente. Se bem escritas, não precisam de restarts esporádicos e processos de monitoramento extras como o God e o Monit. Instalando o JRuby Figura 4. Divisão da memória de objetos em gerações. Todos os objetos criados vão para a primeira parte da memória, conhecida como memória jovem. Essa memória costuma ter um tamanho bem pequeno em relação ao total de memória heap. Tipicamente inicia com 2.2Mb [3] na máquina virtual da Sun, podo variar bastante já que a máquina virtual adapta o tamanho para a aplicação corrente. O tamanho da memória jovem também pode ser adaptativo. Quando a memória jovem vai ficando cheia, o coletor de lixo é ativado. Porém, ele passa apenas na memória jovem, que é muito pequena. Desta forma, a aplicação fica travada por um tempo bem pequeno. Além disso, O JRuby pode ser baixado no site oficial: e é necessário ter alguma máquina virtual Java instalada. A última versão, na data de fechamento deste artigo é a jruby-bin (cuidado para ad, basta descompactar em um diretório de sua preferência e colocar o subdiretório jruby/bin/ na variável de ambiente PATH. Como é feito em Java, funciona em qualquer plataforma e sistema operacional com bom suporte a Java. Para prosseguir, o comando jruby deve estar disponível no seu terminal pode ser salvo em um arquivo com extensão.rb e executado com o comando jruby nome-do-arquivo.rb. De preferência, no começo dos estudos, é interessante digitar o código ruby diretamente no jirb (JRuby Interactive Ruby) para ir vo o resultado intermediário do código. Basta usar o comando jirb no terminal, que está disponível logo após a instalação do JRuby. Além disso, é assumido neste artigo que o leitor já esteja familiarizado com a linguagem Ruby. Para uma boa introdução, leia o artigo Dinamis- 56

6 A nova geração de coletores de lixo da Sun, conhecida como Garbage First e apelidada de G1, leva o conceito de gerações ao extremo. O número de gerações é praticamente infinito e no G1 são chamadas de regiões. O coletor vai criando dinamicamente novas regiões, a medida do necessário. Mais detalhes de funcionamento do G1 sai do escopo deste artigo, porém outras informações podem ser encontradas em um paper, publicado no portal da ACM (requer acesso ao portal): Mais detalhes sobre as tecnologias envolvidas na máquina virtual Java da Sun (Hotspot) podem ser encontrados no white paper, no site da Sun: mo e Elegância na Parceria Java e Ruby, do Alexandre Gazola e do Alex Campos, nesta mesma edição. de código Ruby De todas as vantagens de usar o Java como plataforma, na minha sincera opinião, a maior é justamente poder usar a quantidade imensa de código e bibliotecas já escritas para a plataforma Java. Uma das maiores belezas do projeto JRuby é prover ao código Ruby executado sobre ele, a capacidade de chamar qualquer código Java (bytecodes) que esteja no LOAD_PATH (mesma ideia do classpath, já conhecido de programadores Java). Tudo isso de uma maneira extremamente simples. O primeiro passo é carregar o suporte a Java dentro de código Ruby: require java. A partir daí, todas as classes que estiverem em diretórios do LOAD_PATH do interpretador podem ser carregadas. Para descobrir qual é o LOAD_PATH, basta imprimir a constante LOAD_PATH, que é um array de diretórios a serem varridos. O código abaixo mostra como verificar e adicionar diretórios a esta constante: puts $LOAD_PATH # a constante $: é um alias para a $LOAD_PATH puts $: # adicionando um novo diretório ao $LOAD_PATH $LOAD_PATH << /lib/java/classes O diretório corrente está por padrão no LOAD_PATH, portanto, todas as classes que estiverem no diretório onde o script Ruby for executado, ou onde o jirb tenha sido iniciado, estão disponíveis. Ao chamar o método require java, fica disponível o módulo Java para ser usado dentro do código Ruby. Todas as classes Java que estiverem no LOAD_PATH podem ser acessadas dentro deste módulo, na convenção CamelCase. Ou seja, para usar a classe java.util.arraylist, usamos o código Ruby: Java::JavaUtil::ArrayList. Alguns exemplos: lla::cpfvalidator; JFrame. Aqui o JRuby usa alguns métodos Ruby para se aproximar mais da sintaxe de pacotes Java; o módulo Java e usar direto: java.util.list, javax.swing.jlabel ou org.w3c.dom.document. Mesma técnica de antes, criar métodos Ruby que imitam a estrutura de pacotes Java. Alguns exemplos de uso das classes do Java SE podem ser vistos na Listagem 1. Todas as classes e objetos Java se tornam objetos Ruby normais dentro de um programa rodando com o JRuby. Isto significa que o poder das linguagens dinâmicas pode ser usado com bibliotecas Java existentes! O JRuby faz ainda algumas coisas muito interessantes para melhorar o uso dos recursos da linguagem sobre bibliotecas Java existentes. Um ótimo exemplo é a adição dos métodos do módulo Enumerable (each, map, select, find, sort, entre outros) em todas as coleções Java. Listas e mapas de Java também ganham métodos como o << (app), que os tornam parecidos com listas e mapas Ruby. Algumas conversões como objetos Fixnum para números Java (int, long, wrappers etc.), objetos String Ruby para java.lang.string, Arrays Ruby para java.util.arraylist, objetos Hash Ruby para java. util.hashmap e vice-versa são feitas automaticamente pelo JRuby. Outra característica interessante é que, ao chamar métodos em classes Java, o JRuby também permite usar a convenção de código Ruby com tudo em minúsculo separado por underscore _. CamelCase só para constantes. Isso ajuda bastante a deixar bibliotecas Java so utilizadas com mais cara de Ruby. A convenção de propriedades em objetos Ruby também pode ser usada para invocar getters e setters. Para executar o exemplo da Listagem 3, primeiro compile a classe Java da Listagem 2 no mesmo diretório onde o código Ruby será executado. Todas as classes Java usadas dentro de código Ruby são abertas, como qualquer outra classe Ruby. Isso significa que podemos abrir e alterar qualquer classe Java; mas cuidado, as alterações só valerão para o código Ruby usando esta classe alterada, não para o resto do código Java comum que usa a classe. Além disso, classes Ruby podem herdar de classes Java normalmente. Para implementar alguma interface Java, basta tratar a interface como se fosse um módulo Ruby e incluí-la. Veja os exemplos na Listagem 4. Por fim, às vezes pode ser meio inconveniente ter que usar sempre o módulo Java para usar alguma classe Java, como em Java::Banco; ou usar o nome completo para classes dos pacotes java.*, javax.* e org.*. Existem duas formas de amenizar este problema (veja exemplos na Listagem 5): Exemplo: import Banco, faz com que possamos usar diretamente Banco.new ao invés de Java::Banco.new. Qualquer classe Java que 57

7 Listagem 1. Usando classes do Java SE. require java lista = Java::JavaUtil::ArrayList.new lista.add( um texto ) lista.add([:um, :array, :com, :objetos, :ruby]) lista << :metodo_app_em_java_collection lista[2] = estilo Ruby para Collections # coleções Java ganham os métodos do módulo Enumerable # each, map, find, select, filter, sort,... lista.each do item puts item java.lang.system.out.println( Strings Ruby viram java.lang.string quando necessário ) informacoes = java.util.hashmap.new # estilo simplificado para java.* informacoes.put :nome, Joao informacoes[:idade] = 31 puts informacoes[:nome] Listagem 2. Banco.java. public class Banco { private String nome; private Long codigo; banco = Java::Banco.new # getters e setters Java banco.setcodigo(12345) puts banco.getcodigo() # usando convencao Ruby para propriedades banco.nome = Banco do Povo puts banco.nome # parenteses são opcionais em Ruby # estilo Ruby para java.util.map # alternativa ao map.get( chave ) public void transferepara(string origem, String destino, Double valor) { System.out.println( executando transferencia... ); } // getters e setters } Listagem 3. Convenções Ruby ao chamar código Java. # chamando o método do jeito Java banco.transferepara( conta do Jose, conta da Maria, 300) # usando convencoes de nomes Ruby (parenteses sao opcionais) banco.transfere_para conta do Jose, conta da Maria, 300 Listagem 4. Herdando e implementando interfaces. # herdando de uma classe Java class SuperArrayList < Java::JavaUtil::ArrayList def size() puts sobrescrevo o metodo herdado lista = SuperArrayList.new lista << um item puts lista.size # implementando uma interface class Executavel # qualquer interface Java pode ser inclusa como módulo include java.lang.runnable # todos os métodos da interface devem ser implementados # não é obrigatório, mas ocorre um erro caso seja chamado e # não esteja implementado def run() puts executando metodo da interface Runnable 25.times { n puts n } primeira = java.lang.thread.new(executavel.new) segunda = java.lang.thread.new(executavel.new) # caso esteja no jirb, inicie as duas na mesma linha para comecar ao mesmo tempo primeira.start; segunda.start esteja no LOAD_PATH pode ser importada dessa maneira, bastando para isso passar o nome completo dela para o método import. Fica parecido com o import do Java; os métodos include_class e include_package. Assim, ao invés de fazer Java::JavaMath::BigDecimal, podemos fazer algo como Numbers::BigDecimal. Alguns exemplos estão na Listagem 5. Existem ainda outros detalhes sobre o uso de código Java dentro de Ruby, como callbacks usando blocos e mais conversões de tipos Ruby para Java. Uma ótima fonte de consulta é o wiki oficial do projeto JRuby [4]: É bem simples usar código de bibliotecas java na forma de jars. No MRI, quando carregamos alguma biblioteca com require nome_da_bibliohttp://wiki.jruby.org/wiki/calling_java_from_jruby O exemplo de uso do JRuby mais comum em tutoriais e palestras é a criação de interfaces gráficas com Swing. Que tal praticar um pouco e usar as classes do pacote javax.swing.* com código Ruby para criar uma pequena janela? Importando jars 58

8 Listagem 5. Simplificando o uso de classes Java. import Banco import java.math.bigdecimal # agora as classes podem ser usadas pelo nome simples banco = Banco.new banco.nome = Super Banco numero = BigDecimal.new # podemos também usar módulos para importar classes e pacotes inteiros module Lib include_class java.lang.system include_package java.util include_package java.math Lib::System.out.println classe incluida no modulo! itens = Lib::HashSet.new n = Lib::BigDecimal.new teca, o interpretador procura em todos os diretórios do LOAD_PATH o arquivo nome_da_biblioteca.rb. Como o MRI suporta código nativo escrito em C, caso não ache o.rb vai atrás do nome_da_biblioteca.dll, ou.so, ou.bundle depo do sistema operacional. O comportamento no JRuby é parecido, porém ele tenta carregar o.jar antes de tentar carregar código nativo. Quando chamamos require log4j em uma aplicação JRuby, primeiro será procurado o arquivo log4j.rb, depois o log4j.jar e por último o log4j.dll/so (nativo), em todos os diretórios do LOAD_PATH. Uma vez que o jar tenha sido carregado, qualquer classe que ele contenha pode ser usada normalmente, como visto nas seções anteriores. O código a de código Ruby. Para o exemplo funcionar, o log4j.jar deve estar no mesmo diretório do script Ruby (ou em qualquer diretório do LOAD_PATH). Além do log4j.jar, é necessário ter o arquivo de configuração do Log4J, log4j.properties para que o log seja corretamente exibido (caso contrário o Log4J solta um warning dizo que não encontrou nenhum apper): require java require log4j # log4j.jar deve estar no mesmo diretório deste arquivo # outra forma de não precisar usar o nome completo sempre Logger = org.apache.log4j.logger logger = Logger.getLogger( heyy ) logger.info "Usando o Log4J em codigo Ruby" # log4j.properties log4j.apper.stdout=org.apache.log4j.consoleapper log4j.apper.stdout.target=system.out log4j.apper.stdout.layout=org.apache.log4j.pattern- Layout log4j.apper.stdout.layout. ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%l - %m%n log4j.rootlogger=debug, stdout JRuby on Rails JRuby é a única implementação da linguagem Ruby que suporta o Ruby on Rails completamente, ou seja, é a única implementação capaz de rodar completamente aplicações Rails. A única exceção fica por conta das aplicações que usam gems com código nativo, específico do MRI, como discutido anteriormente. Neste artigo, vamos nos limitar ao uso do JRuby para criar e rodar aplicações Rails; não iremos a fundo no Ruby on Rails. Mais detalhes sobre o framework ficarão para um próximo artigo. Código Nativo no JRuby Todo código Java usado em programas que rodam no JRuby é considerado código nativo. Porém, o carregamento de código assembly de máquina (normalmente escrito em C) também é suportado. que permite o carregamento de código nativo (não bytecodes) pela máquina virtual Java, de uma forma mais simples que o seu princi- Apesar de suportar código nativo escrito em C, uma das grandes barreiras à adoção do JRuby são algumas bibliotecas (gems) com extensões nativas escritas em C, específicas para o MRI. Essas gems não são suportadas pelo JRuby por serem específicas ao MRI, não por terem código escrito em C, como muitos confundem. Existe uma iniciativa para especificar a interface de extensões nativas em C conhecida como Ruby FFI (Foreign Function Interface). O projeto foi iniciado pelos desenvolvedores do JRuby e do Rubinius, e toda extensão nativa escrita em C que for compatível com o Ruby FFI funcionará em qualquer implementação. Infelizmente, nem todas as gems com extensões nativas migraram ainda para serem compatíveis com o Ruby FFI. Até que isso aconteça, o grande problema do JRuby são gems com código nativo para o MRI. Nestes casos, ou alguém porta o pedaço de código nativo para Java, ou é necessário usar alguma biblioteca alternativa, em Java. É o caso da manipulação de gráficos, em que muitos têm substituído a gem image_magick por Java2D e/ou JFreeChart. 59

9 Para começar no mundo JRuby on Rails, o primeiro passo é adicionar o framework à sua instalação do JRuby, com a ajuda do RubyGems: jruby -S gem install rails O comando acima instala a última versão do Rails (2.3.2, nesta data) e as suas depências. É recomado deixar explícito que o comando gem a ser executado é o do JRuby, com o prefixo jruby -S, que significa: o que vier a frente deve ser executado de dentro do diretório bin/ da instalação do JRuby. Isso garante que estamos executando o comando gem do JRuby e não do MRI. É muito comum ter diversas implementações diferentes de Ruby na mesma máquina. Precisamos agora instalar o suporte ao banco de dados a ser usado. Para o nosso exemplo, usaremos o MySQL, que deve estar instalado antes de prosseguirmos. Com o MySQL funcionando, precisamos do seu driver JDBC, que também será instalado via RubyGems: jruby -S gem install activerecord-jdbcmysql-adapter O projeto ActiveRecord-JDBC provê suporte à maioria dos bancos suportados pelo JDBC. A documentação oficial com instruções para outros bancos pode ser encontrada em: Já temos o mínimo necessário! Para criar o projeto, basta executar o comando rails que acabamos de instalar no JRuby: jruby -S rails blog -d mysql O primeiro passo é configurar o banco de dados a ser utilizado. Edite o arquivo config/database.yml e acerte as configurações de usuário e senha para o seu banco. Caso tenha problemas de conexão no banco, ou esteja com o arquivo.sock do MySQL em outra pasta, também pode trocar a linha socket: <arquivo>.sock para host: IP_DO_BANCO caso ela exista. O mais importante é trocar o adapter: mysql dos três modos de execução (development, test e production) para: adapter: jdbcmysql Desta forma, instruímos o Rails a usar o adaptador ActiveRecord-JDBC que acabamos de instalar. Caso queira que o projeto Rails funcione ao mesmo tempo no JRuby e no MRI, o truque é usar um pouco de código Ruby embutido no arquivo de configuração database.yml, para que quando o JRuby for usado o adapter seja jdbcmysql, caso contrário só mysql: <% jdbc = defined?(jruby_version)? jdbc : %> development: test: adapter: <%= jdbc %>mysql... adapter: <%= jdbc %>mysql... production: adapter: <%= jdbc %>mysql... O projeto já está pronto para ser executado pelo JRuby. Criemos agora as bases no MySQL, um CRUD simples de posts para o Blog. Por fim, basta mandar o Rails criar as tabelas no banco e iniciar o servidor: jruby -S rake db:create:all jruby script/generate scaffold post title:string author:string content:text jruby -S rake db:migrate jruby script/server O comando rake e todos que estão na pasta bin/ do JRuby devem ser executados com jruby -S antes. Scripts Ruby como o script/generate e o script/server são executados como quaisquer outros scripts Ruby. Com isso, já deve ser possível acessar o sistema para ser testado na url: Parabéns e bem-vindo(a) ao universo JRuby on Rails! Rodando a aplicação em Servlet Conteiners Java projeto pronto para ser implantado em qualquer servlet contêiner ou servidor de aplicação Java com suporte à especificação Servlet 2.4. Os gic, entre outros. Receitas para os contêiners mais famosos podem ser encontradas no wiki do JRuby [4]. jruby -S gem install warbler Após a instalação do warbler, é importante criar o arquivo de configuração do warbler na pasta config. Podemos gerar este arquivo usando o comando warble, dentro do diretório da aplicação Rails: jruby -S warble config Abra o arquivo de configuração gerado em config/warble.rb, onde precisamos adicionar todas as gems que serão inclusas no arquivo.war gerado. Como usamos o adapter ActiveRecord-JDBC, adicione dentro comentadas): 60

10 config.gems << "activerecord-jdbcmysql-adapter" Além disso, o warbler criará um arquivo.war para rodar em modo production por padrão. Isto pode ser alterado no arquivo de configuração, mas no nosso caso apenas criaremos as tabelas no banco de produção (assegure-se de que ele já esteja criado!): jruby -S rake db:migrate RAILS_ENV=production Já podemos criar o arquivo.war, novamente com o comando warble, no diretório do projeto Rails: jruby -S warble Basta agora instalar o arquivo.war gerado em qualquer contêiner suportado. Outras formas de executar a aplicação Rails Durante o desenvolvimento de uma aplicação com JRuby on Rails, o grande problema que a equipe do projeto enfrentava era a falta de feedback instantâneo durante o desenvolvimento. Qualquer mudança, por menor deploy no servidor de aplicação e o tempo de restart do contexto. Feedback instantâneo é muito importante durante o desenvolvimento para garantir a produtividade. O ideal é que para ver as modificações bastaria salvar o arquivo e recarregar a página no navegador. Se a cada pequena mudança é preciso regerar o.war e esperar o contexto recarregar, a produtividade vai lá para baixo e a equipe começa a acumular muitas mudanças antes de testar (ou ficar muito tempo no Orkut enquanto o servidor reinicia). Um dos grandes apelos do desenvolvimento com Ruby on Rails é esse feedback instantâneo, que perdemos ao usar JRuby e fazer deploy em um servidor de aplicações Java. Por isso, muitas equipes preferem usar o MRI durante o desenvolvimento e só usar JRuby nos ambientes de produção, qualidade e pré-produção. Resolver estes problemas foge do escopo deste artigo, mas fica a dica de dois projetos que podem ajudar na tarefa. JettyRails e Glassfish Gem são dois projetos que visam prover uma forma simples de executar aplicações JRuby on Rails em servidores de aplicação Java (Jetty [7] e Glassfish [8]), em desenvolvimento e em produção. Mais detalhes em: (requer Java 6.0) Considerações finais Tudo o que foi apresentado neste artigo mostra como Java é uma excelente plataforma para executar código Ruby, além de ser a principal alternativa à implementação oficial, a MRI. Isso não vale apenas para código Ruby, já que existe uma tência forte de Java ser uma boa plataforma para outras linguagens. Projetos como o tência. Existem ainda diversas outras implementações de linguagens sobre a JVM e através do projeto MLVM (Multi Language Virtual Machine), do qual espero escrever mais em futuras edições, muitas melhorias têm sido propostas para tornar as próximas versões da plataforma Java ainda melhores para essas outras linguagens. JRuby é uma excelente maneira de introduzir a linguagem Ruby e a enorme produtividade do seu mais famoso framework, Ruby on Rails, em ambientes corporativos que já têm a plataforma Java homologada. Muitas empresas já têm infraestrutura montada com diversos servidores de aplicação Java; muitas vezes sem nem saber, já estão prontas para rodar aplicações Ruby on Rails! Referências com/docs/hotspot/gc5.0/gc_tuning_5.html net/projects/mlvm/ 61

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

Leia mais

2.1. Princípios de garbage collection Garbage Collector

2.1. Princípios de garbage collection Garbage Collector Capítulo 2 Java Virtual Machine Com a JVM no centro da Plataforma Java, conhecer seu funcionamento interno é essencial para qualquer aplicação Java. Muitas vezes, deixamos de lado ajustes importantes de

Leia mais

Alunos. Hudson Martins da Silva Laércio Pedro Hoppe

Alunos. Hudson Martins da Silva Laércio Pedro Hoppe Alunos Hudson Martins da Silva Laércio Pedro Hoppe Desenvolvida no Japão em 1995, por Yukihiro "Matz" Matsumoto. Linguagem de script. Mais poderosa do que Perl, e mais orientada a objetos do que Python.

Leia mais

Definições. Parte 02. Java Conceitos e. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto

Definições. Parte 02. Java Conceitos e. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto Java Conceitos e Definições Parte 02 Prof. Pedro Neto Aracaju Sergipe - 2011 Conteúdo 2 O que é Java i. Java ii. Máquina Virtual iii. Java lento? Hotspot e JIT iv. Versões do Java e a confusão do Java2

Leia mais

Em uma linguagem de programação como C e Pascal, temos a seguinte situação quando vamos compor um programa:

Em uma linguagem de programação como C e Pascal, temos a seguinte situação quando vamos compor um programa: 1 1. Introdução Este manual se propõe a dar uma visão inicial do Java e apresentar os primeiros passos para sua instalação, configuração e usabilidade pelo prompt de comando do Windows. O ideal é que este

Leia mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico Fundamentos de Java Prof. Marcelo Cohen 1. Histórico 1990 linguagem Oak; desenvolvimento de software embutido para eletrodomésticos S.O. para o controle de uma rede de eletrodomésticos o surgimento da

Leia mais

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 4 Ambiente de desenvolvimento Java QI ESCOLAS E FACULDADES Curso Técnico em Informática SUMÁRIO A LINGUAGEM JAVA... 3 JVM, JRE, JDK... 3 BYTECODE... 3 PREPARANDO O AMBIENTE

Leia mais

Ruby. Conceitos básicos. Prof. Ms. Leonardo Botega. Diego Gabriel Pereira

Ruby. Conceitos básicos. Prof. Ms. Leonardo Botega. Diego Gabriel Pereira Ruby Conceitos básicos Prof. Ms. Leonardo Botega Diego Gabriel Pereira Quem somos nós Leonardo Botega Bacharel em Ciência da Computação UNIVEM Mestre em Ciência da Computação UFSCar Doutorando em Ciência

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Introdução ao Derby. Version 10.2 Derby Document build: December 11, 2006, 7:16:07 AM (PST)

Introdução ao Derby. Version 10.2 Derby Document build: December 11, 2006, 7:16:07 AM (PST) Introdução ao Derby Version 10.2 Derby Document build: December 11, 2006, 7:16:07 AM (PST) Contents Direitos autorais reservados... 3 Introdução ao Derby...4 Opções de implementação...4 Requisitos do

Leia mais

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2 Estrutura de Repetição. Ex. 2 A ESTRUTURA Enquanto faça{} É MELHOR UTILIZADA PARA SITUAÇÕES ONDE O TESTE DE CONDIÇÃO (V OU F) PRECISA SER VERIFICADO NO INÍCIO DA ESTRUTURA DE REPETIÇÃO.

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 2 Introdução aos aplicativos Java Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 2.1 Introdução Programação de aplicativo Java. Utilize as ferramentas do JDK para compilar

Leia mais

Java Básico. Aula 1 por Thalles Cezar

Java Básico. Aula 1 por Thalles Cezar + Java Básico Aula 1 por Thalles Cezar + Histórico Green Project (1991) Desenvolver plataforma para eletrodomésticos inteligentes Tentaram usar C++ Mas resolveram desenvolver uma linguagem própria Oak

Leia mais

Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010

Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010 Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010 Primeira Dica Afirmação O que é Java? Características do Java Como Java Funciona Plataforma Java Edições Java Java SE Java EE Java ME

Leia mais

Java Linguagem de programação

Java Linguagem de programação NASA INFORMÁTICA Pág. 1 O ambiente Java Como foi comentado anteriormente, o Java é uma linguagem independente de plataforma. Tal característica torna-se possível com o uso de um formato intermediário,

Leia mais

Tutorial Básico. Instalando e testando o Ruby on Rails no Windows

Tutorial Básico. Instalando e testando o Ruby on Rails no Windows Tutorial Básico Instalando e testando o Ruby on Rails no Windows Ana Luiza Dias Organização do Tutorial: Passos para a instalação...pág 2 Passos para a criação de um projeto rails...pág 3 Passos para acompanhar

Leia mais

Começando com Ruby on Rails @gibsongabriel

Começando com Ruby on Rails @gibsongabriel Começando com Ruby on Rails @gibsongabriel Yukiriho 'Matz' Matsumoto http://ruby-lang.org/pt/ Ruby é uma linguagem de programação interpretada, com tipagem forte e dinâmica, que tem como foco a simplicidade

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

AULA 1 PHP O QUE É APACHE FRIENDS

AULA 1 PHP O QUE É APACHE FRIENDS O QUE É PHP Se você já programa PHP, aconselho que pule para o capítulo 7 desse livro. Pois até esse capitulo iremos abordar algoritmos em PHP até a construção de uma classe com seus métodos e atributos

Leia mais

Para continuar, baixe o linux-vm aqui: http://www.gdhpress.com.br/downloads/linux-vm.zip

Para continuar, baixe o linux-vm aqui: http://www.gdhpress.com.br/downloads/linux-vm.zip Se, assim como a maioria, você possui um único PC ou notebook, uma opção para testar as distribuições Linux sem precisar mexer no particionamento do HD e instalar o sistema em dualboot, é simplesmente

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL

BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL Deinf/Dine4 Versão 1.3 20/05/2013 Histórico de Revisão Data Versão Descrição Autor 06/11/2007 1.0 Elaboração da primeira versão

Leia mais

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos:

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos: Estruturas de Sistemas Operacionais Podemos analisar um sistema operacional sob diversos aspectos: Os serviços que o sistema operacional oferece. A interface que o sistema operacional torna disponível

Leia mais

Google Web Toolkit* Clério Damasceno Soares, Daniel da Silva Filgueiras e Fábio Figueiredo da Silva

Google Web Toolkit* Clério Damasceno Soares, Daniel da Silva Filgueiras e Fábio Figueiredo da Silva Google Web Toolkit* Clério Damasceno Soares, Daniel da Silva Filgueiras e Fábio Figueiredo da Silva Universidade Federal de Juiz de Fora UFJF-MG Campo Universitário Bairro Marmelos Juiz de Fora MG Brasil

Leia mais

V1.1 SITE EM UM SITE 11/2015 MINUTOS APRENDA A PROGRAMAR IMAGINE FAZER O SEU PRIMEIRO PROGRAMA EM 180 SEGUNDOS WWW.DESAFIO3MINUTOS.COM.

V1.1 SITE EM UM SITE 11/2015 MINUTOS APRENDA A PROGRAMAR IMAGINE FAZER O SEU PRIMEIRO PROGRAMA EM 180 SEGUNDOS WWW.DESAFIO3MINUTOS.COM. 11/2015 UM SITE SITE EM EM UM 3 APRENDA A PROGRAMAR IMAGINE FAZER O SEU PRIMEIRO PROGRAMA EM 180 SEGUNDOS MINUTOS V1.1 WWW.DESAFIO3MINUTOS.COM.BR ELIELBARONE RUBY ON RAILS O que é? Ruby on Rails é um framework,

Leia mais

2. O AMBIENTE DE PROGRAMAÇÃO EM C

2. O AMBIENTE DE PROGRAMAÇÃO EM C 2. O AMBIENTE DE PROGRAMAÇÃO EM C Este capítulo trata de colocar a linguagem C para funcionar em um ambiente de programação, concentrando-se no compilador GNU Compiler Collection (gcc). Mas qualquer outro

Leia mais

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br Java - Introdução Professor: Vilson Heck Junior vilson.junior@ifsc.edu.br Agenda O que é Java? Sun / Oracle. IDE - NetBeans. Linguagem Java; Maquina Virtual; Atividade Prática. Identificando Elementos

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: PROGRAMAÇÃO ORIENTADA A OBJETOS PROFESSOR: REINALDO GOMES ASSUNTO: REVISÃO DA INTRODUÇÃO A ORIENTAÇÃO

Leia mais

Tecnólogo em Análise e Desenvolvimento de Sistemas

Tecnólogo em Análise e Desenvolvimento de Sistemas Tecnólogo em Análise e Desenvolvimento de Sistemas O conteúdo deste documento tem como objetivos geral introduzir conceitos mínimos sobre sistemas operacionais e máquinas virtuais para posteriormente utilizar

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais

Primeiro programa em Java (compilação e execução)

Primeiro programa em Java (compilação e execução) Universidade Federal do ABC Disciplina: Linguagens de Programação (BC-0501) Assunto: Primeiro programa em Java (compilação e execução) Primeiro programa em Java (compilação e execução) Introdução Este

Leia mais

AULA 02. 1. Uma linguagem de programação orientada a objetos

AULA 02. 1. Uma linguagem de programação orientada a objetos AULA 02 TECNOLOGIA JAVA O nome "Java" é usado para referir-se a 1. Uma linguagem de programação orientada a objetos 2. Uma coleção de APIs (classes, componentes, frameworks) para o desenvolvimento de aplicações

Leia mais

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

Programação Concorrente Processos e Threads

Programação Concorrente Processos e Threads Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por

Leia mais

Memory Leak em Java?

Memory Leak em Java? 1 Memory Leak em Java? Saiba como memory leaks se manifestam em Java e como evitá-los Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Manual de Instalação e Configuração

Manual de Instalação e Configuração e Configuração MyABCM 4.0 Versão 4.00-1.00 2 Copyright MyABCM. Todos os direitos reservados Reprodução Proibida Índice Introdução... 5 Arquitetura, requisitos e cenários de uso do MyABCM... 7 Instalação

Leia mais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 05 Estrutura e arquitetura do SO Parte 2 Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC,

Leia mais

FAT32 ou NTFS, qual o melhor?

FAT32 ou NTFS, qual o melhor? FAT32 ou NTFS, qual o melhor? Entenda quais as principais diferenças entre eles e qual a melhor escolha O que é um sistema de arquivos? O conceito mais importante sobre este assunto, sem sombra de dúvidas,

Leia mais

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm.

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm. Autor José Jesse Gonçalves Graduado em Licenciatura em Matemática pela Universidade Estadual de São Paulo - UNESP, de Presidente Prudente (1995), com especialização em Análise de Sistemas (1999) e mestrado

Leia mais

Relatório do GPES. Descrição dos Programas e Plugins Utilizados. Programas Utilizados:

Relatório do GPES. Descrição dos Programas e Plugins Utilizados. Programas Utilizados: Relatório do GPES Relatório referente à instalação dos programas e plugins que estarão sendo utilizados durante o desenvolvimento dos exemplos e exercícios, sendo esses demonstrados nos próximos relatórios.

Leia mais

Performance Settings para ColdFusion MX 6.1 Alex Hubner, Novembro de 2004 http://www.cfgigolo.com

Performance Settings para ColdFusion MX 6.1 Alex Hubner, Novembro de 2004 http://www.cfgigolo.com Performance Settings para ColdFusion MX 6.1 Alex Hubner, Novembro de 2004 http://www.cfgigolo.com 1. Objetivos O presente documento tem como objetivo apresentar as configurações do servidor Macromedia

Leia mais

Manual de Instalação. Sistema de Gestão e Acompanhamento de Frotas SIGAFROTA. Versão 1.0 Francisco Edilson do Nascimento

Manual de Instalação. Sistema de Gestão e Acompanhamento de Frotas SIGAFROTA. Versão 1.0 Francisco Edilson do Nascimento Sistema de Gestão e Acompanhamento de Frotas SIGAFROTA Elaborado por: Revisado por: Aprovado por: Data modificação: Versão 1.0 Francisco Edilson do Nascimento André Mattei 25/10/2011 Prefeitura Municipal

Leia mais

Garbage Collection. Automatic Garbage Collection. Introdução. Fontes

Garbage Collection. Automatic Garbage Collection. Introdução. Fontes Fontes Garbage Collection Compiladores II 1 Modern Compiler Implementation in java: capítulo 13 Artigos : Garbage Collection in an Uncooperative Environment de Boehm e Weiser (Software Practice and Experience

Leia mais

Especificações Técnicas

Especificações Técnicas Visual COBOL é a solução líder da indústria para o desenvolvimento de aplicações COBOL e implantação em sistemas Windows, Unix e Linux. Ele combina as melhores ferramentas de desenvolvimento de sua classe

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura do

Leia mais

GEPLANES GESTÃO DE PLANEJAMENTO ESTRATÉGICO MANUAL DE INSTALAÇÃO DO GEPLANES EM UM AMBIENTE WINDOWS

GEPLANES GESTÃO DE PLANEJAMENTO ESTRATÉGICO MANUAL DE INSTALAÇÃO DO GEPLANES EM UM AMBIENTE WINDOWS GEPLANES GESTÃO DE PLANEJAMENTO ESTRATÉGICO MANUAL DE INSTALAÇÃO DO GEPLANES EM UM AMBIENTE WINDOWS JANEIRO 2015 1 Sumário 1. Introdução...3 2. Pré-Requisitos...4 2.1. Instalação do Java Development Kit

Leia mais

Tutorial de instalação do Java 7 no Windows 7.

Tutorial de instalação do Java 7 no Windows 7. Tutorial de instalação do Java 7 no Windows 7. Neste tutorial vamos instalar um ambiente de desenvolvimento Java JDK 7 no Windows 7. Quando falamos em ambiente Java, estamos nos referindo ao conjunto de

Leia mais

Linguagem de Programação Visual

Linguagem de Programação Visual Linguagem de Programação Visual Unidade 1 Ambiente de desenvolvimento Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 SOBRE O JAVA... 3 AMBIENTE DE DESENVOLVIMENTO... 5 RECURSOS DA FERRAMENTA NETBEANS...

Leia mais

PHP() é uma linguagem de integração de servidor que permite a criação de paginas dinâmicas. Como todas

PHP() é uma linguagem de integração de servidor que permite a criação de paginas dinâmicas. Como todas O que é PHP? Acrônimo de PHP: Hipertext Language PostProcessor Inicialmente escrita para o desenvolvimento de aplicações Web Facilidade para iniciantes e recursos poderosos para programadores profissionais

Leia mais

LINGUAGEM DE PROGRAMAÇÃO Material de apoio - Aula II (25/02/2008) - Profº Sidney Leal

LINGUAGEM DE PROGRAMAÇÃO Material de apoio - Aula II (25/02/2008) - Profº Sidney Leal AMBIENTE JAVA CONCEITO LINGUAGEM DE PROGRAMAÇÃO O ambiente de desenvolvimento Java é composto de ferramentas e utilitários para a realização de tarefas (depuração, compilação e documentação) relacionadas

Leia mais

Guia de Consulta Rápida. PHP com XML. Juliano Niederauer. Terceira Edição. Novatec

Guia de Consulta Rápida. PHP com XML. Juliano Niederauer. Terceira Edição. Novatec Guia de Consulta Rápida PHP com XML Juliano Niederauer Terceira Edição Novatec Copyright 2002 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida

Leia mais

JAVA VIRTUAL MACHINE (JVM)

JAVA VIRTUAL MACHINE (JVM) JAVA VIRTUAL MACHINE (JVM) Por Leandro Baptista, Marlon Palangani e Tiago Deoldoto, 11 de Abril de 2009 A linguagem de programação Java proporciona o desenvolvimento aplicações que podem ser executadas

Leia mais

Programação Orientada a Objetos (DPADF 0063)

Programação Orientada a Objetos (DPADF 0063) Programação Orientada a Objetos (DPADF 0063) Aula 2 Java como ferramenta de experimentação Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas

Leia mais

Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br

Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br Índice Como acessar o Moodle Editando seu PERFIL Editando o curso / disciplina no Moodle Incluindo Recursos

Leia mais

Introdução à Linguagem Java. Departamento de Informática Prof. Anselmo C. de Paiva

Introdução à Linguagem Java. Departamento de Informática Prof. Anselmo C. de Paiva Introdução à Linguagem Java Departamento de Informática Prof. Anselmo C. de Paiva Breve Histórico Sun Microsystems, 90/91: projeto de uma linguagem de programação pequena que pudesse ser usada em dispositivos

Leia mais

Suporte à Engenharia Reversa para o ambiente SEA

Suporte à Engenharia Reversa para o ambiente SEA Otavio Pereira Suporte à Engenharia Reversa para o ambiente SEA Orientador: Ricardo Pereira e Silva Universidade Federal de Santa Catarina - UFSC Departamento de Informática e Estatística - INE Florianópolis

Leia mais

1º passo: Instalando a rvm.

1º passo: Instalando a rvm. Tutorial de instalação de múltiplos ambientes Ruby 1.8.7 e 1.9.2, Ruby on Rails 2.3.11 e 3.0.7 e MySQL no Ubuntu 10.04. Nem sempre é fácil a preparação de um ambiente de desenvolvimento web completo. Às

Leia mais

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 03: Estruturas dos SOs Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com OBJETIVOS Descrever os serviços que um sistema operacional oferece aos usuários e outros sistemas

Leia mais

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Bruno Jurkovski Lucas Fialho Zawacki Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Por que Ruby? Sintaxe limpa e intuitiva: Por que Ruby? Fortemente orientada à objetos Note que não temos os tipos primitivos,

Leia mais

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 9-1. O KERNEL DO LINUX Nos sistemas GNU/Linux, todas as distribuições baseadas nos sistemas GNU/Linux existentes são compatíveis, graças ao uso de um kernel único desenvolvido por uma equipe de

Leia mais

Conceitos Básicos da Linguagem Java. Prof. Leonardo Barreto Campos 1

Conceitos Básicos da Linguagem Java. Prof. Leonardo Barreto Campos 1 Conceitos Básicos da Linguagem Java Prof. Leonardo Barreto Campos 1 Sumário Introdução; Histórico do Java; Características do Java; Compilação de um Programa em Java; Modificando o Primeiro Programa em

Leia mais

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4. Aula 2 Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4. Conceitos O software controla os computadores(freqüentemente conhecido

Leia mais

Linguagem de Programação Orientada a Objeto. Introdução a Orientação a Objetos Professora Sheila Cáceres

Linguagem de Programação Orientada a Objeto. Introdução a Orientação a Objetos Professora Sheila Cáceres Linguagem de Programação Orientada a Objeto Introdução a Orientação a Objetos Professora Sheila Cáceres Introdução a Orientação a Objetos No mundo real, tudo é objeto!; Os objetos se relacionam entre si

Leia mais

Instalação do ByYou ESB. Guia de Instalação e Atualização do ByYou ESB

Instalação do ByYou ESB. Guia de Instalação e Atualização do ByYou ESB Instalação do ByYou ESB Guia de Instalação e Atualização do ByYou ESB Instalação do ByYou ESB Copyright 2010 TOTVS S.A. Todos os direitos reservados. Nenhuma parte deste documento pode ser copiada, reproduzida,

Leia mais

Tecnologia Java. Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br

Tecnologia Java. Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br Tecnologia Java Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br Origem da Tecnologia Java Projeto inicial: Oak (liderado por James Gosling) Lançada em 1995 (Java) Tecnologia

Leia mais

1.1. Java como plataforma, além da linguagem

1.1. Java como plataforma, além da linguagem Capítulo 1 A plataforma Java Diversas plataformas de desenvolvimento possuem grande penetração no mercado. A plataforma Java atingiu a liderança devido a algumas características relacionadas ao seu processo

Leia mais

Este livro é dedicado a minha esposa Edna e a todos os desenvolvedores que fizeram do software livre um meio profissional levado a sério.

Este livro é dedicado a minha esposa Edna e a todos os desenvolvedores que fizeram do software livre um meio profissional levado a sério. EDSON GONÇALVES Este livro é dedicado a minha esposa Edna e a todos os desenvolvedores que fizeram do software livre um meio profissional levado a sério. AGRADECIMENTOS Primeiramente gostaria de agradecer

Leia mais

Estudo comparativo entre tecnologias Java: Applet e JWS.

Estudo comparativo entre tecnologias Java: Applet e JWS. Estudo comparativo entre tecnologias Java: Applet e JWS. Clara Aben-Athar B. Fernandes¹, Carlos Alberto P. Araújo¹ 1 Centro Universitário Luterano de Santarém Comunidade Evangélica Luterana (CEULS/ULBRA)

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Java e Banco de Dados: JDBC, Hibernate e JPA

Java e Banco de Dados: JDBC, Hibernate e JPA Java e Banco de Dados: JDBC, Hibernate e JPA 1 Objetivos Apresentar de forma progressiva as diversas alternativas de persistência de dados que foram evoluindo na tecnologia Java, desde o JDBC, passando

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel A linguagem JAVA A linguagem Java O inicio: A Sun Microsystems, em 1991, deu inicio ao Green Project chefiado por James Gosling. Projeto que apostava

Leia mais

Práticas de Desenvolvimento de Software

Práticas de Desenvolvimento de Software Aula 3. 09/03/2015. Práticas de Desenvolvimento de Software Aula 3 - Introdução à linguagem de programação Ruby Oferecimento Ruby (1) Ruby Ruby (2) Ruby Linguagem de programação dinâmica, de código aberto,

Leia mais

Objetivos: Entender o funcionamento dos programas Java via linha de comando

Objetivos: Entender o funcionamento dos programas Java via linha de comando Algoritmos e Programação I Aula de Laboratório Objetivos: Entender o funcionamento dos programas Java via linha de comando 1. A Linha de Comando: DOS ou Shell Apesar dos usuários geralmente não enxergarem

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

1ª QUESTÃO Linguagem C Vantagens: Desvantagens: Linguagem C++ Vantagens: Desvantagens:

1ª QUESTÃO Linguagem C Vantagens: Desvantagens: Linguagem C++ Vantagens: Desvantagens: 1ª QUESTÃO Linguagem C Vantagens: É uma linguagem simples que nos permite trabalhar com funções matemáticas, ficheiros, entre outras sendo necessário para tal a inclusão de bibliotecas padrão as quais

Leia mais

Integrando Eclipse e Websphere Application Server Community Edition

Integrando Eclipse e Websphere Application Server Community Edition 1 Integrando Eclipse e Websphere Application Server Community Edition Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado em Desenvolvimento

Leia mais

Linguagens de programação

Linguagens de programação Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s

Leia mais

Universidade Federal do Rio de Janeiro NCE/PGTIAE. Tutorial SweetHome3D

Universidade Federal do Rio de Janeiro NCE/PGTIAE. Tutorial SweetHome3D Universidade Federal do Rio de Janeiro NCE/PGTIAE Tutorial SweetHome3D Trabalho apresentado ao Prof. Carlo na Disciplina de Software Livre no curso Pós Graduação em Tecnologia da Informação Aplicada a

Leia mais

DESENVOLVIMENTO DE APLICATIVOS PARA CELULAR JAVA 2 MICRO EDITION

DESENVOLVIMENTO DE APLICATIVOS PARA CELULAR JAVA 2 MICRO EDITION DESENVOLVIMENTO DE APLICATIVOS PARA CELULAR JAVA 2 MICRO EDITION Robison Cris Brito Centro Federal de Educação Tecnológica do Paraná Unidade de Pato Branco robison@pb.cefetpr.br RESUMO Engana-se quem acha

Leia mais

Receita de bolo para instalar MinGW-GCC e Netbeans em Windows

Receita de bolo para instalar MinGW-GCC e Netbeans em Windows Receita de bolo para instalar MinGW-GCC e Netbeans em Windows Hae Yong Kim 13/08/2014 Este documento explica como fiz para instalar compilador MinGW-GCC e ambiente de desenvolvimento Netbeans em Windows.

Leia mais

INTRODUÇÃO A PROGRAMAÇÃO ESTRUTURADA DE COMPUTADORES EM C

INTRODUÇÃO A PROGRAMAÇÃO ESTRUTURADA DE COMPUTADORES EM C INTRODUÇÃO A PROGRAMAÇÃO ESTRUTURADA DE COMPUTADORES EM C Prof. Msc. Helio Esperidião PROGRAMAS Um computador nada mais faz do que executar programas. Um programa é simplesmente uma seqüência de instruções

Leia mais

Visão Geral da Plataforma Java. Robinson Castilho - JUGMS castilho@bacarin.com.br http://www.jugms.com.br

Visão Geral da Plataforma Java. Robinson Castilho - JUGMS castilho@bacarin.com.br http://www.jugms.com.br Visão Geral da Plataforma Java Robinson Castilho - JUGMS castilho@bacarin.com.br http://www.jugms.com.br Agenda Apresentação Motivação para a palestra História do Java A máquina virtual Java (JVM) Java

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Documento de Instalação e Configuração do InfoGrid

Documento de Instalação e Configuração do InfoGrid Documento de Instalação e Configuração do InfoGrid Tecgraf/PUC Rio infogrid@tecgraf.puc rio.br 1.Introdução O objetivo deste documento é podermos registrar em um único local todas as informações necessárias

Leia mais

Fatos e Mitos do Java EE. Fernando Lozano Consultor 4Linux lozano@4linux.com.br

Fatos e Mitos do Java EE. Fernando Lozano Consultor 4Linux lozano@4linux.com.br Fatos e Mitos do Java EE Fernando Lozano Consultor 4Linux lozano@4linux.com.br O Que É o Java EE? É um padrão de bibliotecas e componentes (APIs) para a criação de aplicações corporativas Também é um padrão

Leia mais

Dois clientes com a mesma data de pagamento não podem compartilhar instâncias

Dois clientes com a mesma data de pagamento não podem compartilhar instâncias Capítulo 3. Tópicos de Orientação a Objetos correr o risco de cair na armadilha da quebra de encapsulamento e alto acoplamento. Repare que, desta forma, o acoplamento é bem menor, nenhuma das classes precisa

Leia mais

Laboratório I Aula 2

Laboratório I Aula 2 Laboratório I Aula 2 Prof. Msc. Anderson da Cruz Fases da Programação Implementação de Linguagens de Programação Compilação geração de código executável dependente da plataforma de execução tradução lenta

Leia mais

Primeiro programa em Java (compilação e execução)

Primeiro programa em Java (compilação e execução) Universidade Federal do ABC Disciplina: Linguagens de Programação (BC-0501) Assunto: Primeiro programa em Java (compilação e execução) Primeiro programa em Java (compilação e execução) Introdução Este

Leia mais

STK (Start Kit DARUMA) Extensão PHP para DarumaFrameWork

STK (Start Kit DARUMA) Extensão PHP para DarumaFrameWork STK (Start Kit DARUMA) Extensão PHP para DarumaFrameWork A DarumaFramework está com suas funções nativas ao programador PHP devido a extensão de aplicativo php_darumaframework. Para usar esta extensão,

Leia mais

Integrando Java e VRML - Configuração Básica

Integrando Java e VRML - Configuração Básica Integrando Java e VRML - Configuração Básica 1 Jeferson Luiz Rodrigues Souza(1) Rubens Redel (2) Janine Kniess(3) 1-Bolsista PROBIC-UDESC, CCT-UDESC, dcc6jlrs@joinville.udesc.br 2-Bolsista PROBIC-UDESC,

Leia mais

2 Requisitos Mínimos... 2. 1 Visão Geral 2 Instalando o SDK... da Sun 3 Instalando o Tomcat... do Apache Jakarta Project 4 Instalando o WebIntegrator

2 Requisitos Mínimos... 2. 1 Visão Geral 2 Instalando o SDK... da Sun 3 Instalando o Tomcat... do Apache Jakarta Project 4 Instalando o WebIntegrator Conteúdo I Conteúdo Part I Introdução 2 1 Apresentação... 2 2 Requisitos Mínimos... 2 Part II Instruções de Instalação 2 1 Visão Geral... 2 2 Instalando o SDK... da Sun 2 3 Instalando o Tomcat... do Apache

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

Manual de Instalação PIMSConnector em Windows

Manual de Instalação PIMSConnector em Windows Manual de Instalação PIMSConnector em Windows Julho/2015 Sumário 1. Contexto de negócio (Introdução)... 3 2. Pré-requisitos instalação/implantação/utilização... 4 3. JBOSS... 6 3.1. Instalação... 6 3.2.

Leia mais

Laplink PCmover Express A Maneira Mais Fácil de Migrar para um Novo PC Windows. Guia do Usuário

Laplink PCmover Express A Maneira Mais Fácil de Migrar para um Novo PC Windows. Guia do Usuário Laplink PCmover Express A Maneira Mais Fácil de Migrar para um Novo PC Windows Guia do Usuário Serviço de Atendimento ao Cliente/ Suporte Técnico Site: http://www.laplink.com/index.php/por/contact E-mail:

Leia mais

Manual de Instalação PIMSConnector em Linux

Manual de Instalação PIMSConnector em Linux Manual de Instalação PIMSConnector em Linux Julho/2015 Sumário 1. Contexto de negócio (Introdução)... 3 2. Pré-requisitos instalação/implantação/utilização... 4 3. JBOSS... 6 3.1. Instalação... 6 3.2.

Leia mais

Faculdade de Computação Programação Orientada à Objetos 1 Laboratório de Programação Orientada à Objetos Prof. Fabíola Gonçalves Coelho Ribeiro

Faculdade de Computação Programação Orientada à Objetos 1 Laboratório de Programação Orientada à Objetos Prof. Fabíola Gonçalves Coelho Ribeiro Faculdade de Computação Programação Orientada à Objetos 1 Laboratório de Programação Orientada à Objetos Prof. Fabíola Gonçalves Coelho Ribeiro 1. Introdução O objetivo desta aula prática é apresentar

Leia mais