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 (fabio.kung@caelum.com.br): é 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

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

Desenvolvendo Websites com PHP

Desenvolvendo Websites com PHP Desenvolvendo Websites com PHP Aprenda a criar Websites dinâmicos e interativos com PHP e bancos de dados Juliano Niederauer 19 Capítulo 1 O que é o PHP? O PHP é uma das linguagens mais utilizadas na Web.

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

02 - Usando o SiteMaster - Informações importantes

02 - Usando o SiteMaster - Informações importantes 01 - Apresentação do SiteMaster - News Edition O SiteMaster foi desenvolvido para ser um sistema simples de gerenciamento de notícias, instalado em seu próprio computador e com configuração simplificada,

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

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 1 Sumário 1 - Instalação Normal do Despachante Express... 3 2 - Instalação do Despachante Express em Rede... 5 3 - Registrando o Despachante Express...

Leia mais

1. Quem somos nós? A AGI Soluções nasceu em Belo Horizonte (BH), com a simples missão de entregar serviços de TI de forma rápida e com alta qualidade.

1. Quem somos nós? A AGI Soluções nasceu em Belo Horizonte (BH), com a simples missão de entregar serviços de TI de forma rápida e com alta qualidade. 1. Quem somos nós? A AGI Soluções nasceu em Belo Horizonte (BH), com a simples missão de entregar serviços de TI de forma rápida e com alta qualidade. Todos nós da AGI Soluções trabalhamos durante anos

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

Introdução a Banco de Dados

Introdução a Banco de Dados Introdução a Banco de Dados Ricardo Henrique Tassi - Departamento de Replicação Índice 1- Introdução... 03 2- Quais são os bancos de dados mais conhecidos hoje em dia...04 3- Quais são os tipos de banco...05

Leia mais

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi 5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem

Leia mais

Dicas para usar melhor o Word 2007

Dicas para usar melhor o Word 2007 Dicas para usar melhor o Word 2007 Quem está acostumado (ou não) a trabalhar com o Word, não costuma ter todo o tempo do mundo disponível para descobrir as funcionalidades de versões recentemente lançadas.

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Softblue Logic IDE Guia de Instalação www.softblue.com.br Sumário 1 O Ensino da Lógica de Programação... 1 2 A Ferramenta... 1 3 Funcionalidades... 2 4 Instalação... 3 4.1 Windows...

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Parte I. Demoiselle Mail

Parte I. Demoiselle Mail Parte I. Demoiselle Mail Para o envio e recebimento de e-s em aplicativos Java, a solução mais natural é usar a API JavaMail [http:// www.oracle.com/technetwork/java/java/index.html]. Ela provê um framework

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas Operacionais Prof. Marcelo Sabaris Carballo Pinto Gerenciamento de Dispositivos Gerenciamento de Dispositivos de E/S Introdução Gerenciador de Dispositivos Todos os dispositivos

Leia mais

FACULDADE SENAC-RS PELOTAS RODRIGO ALMEIDA PEREIRA. Sistemas de Informação

FACULDADE SENAC-RS PELOTAS RODRIGO ALMEIDA PEREIRA. Sistemas de Informação FACULDADE SENAC-RS PELOTAS Analise e Desenvolvimento de Sistemas RODRIGO ALMEIDA PEREIRA Sistemas de Informação Pelotas/RS Maio de 2013 Sumário 1. Introdução 1 2. Um pouco de sua história 1 3. Requerimentos

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

Curso de Instalação e Gestão de Redes Informáticas

Curso de Instalação e Gestão de Redes Informáticas ESCOLA PROFISSIONAL VASCONCELLOS LEBRE Curso de Instalação e Gestão de Redes Informáticas PROCESSADORES DE 64 BITS X PROCESSADORES DE 32 BITS José Vitor Nogueira Santos FT2-0749 Mealhada, 2009 Introdução

Leia mais

Instalando o WordPress em localhost

Instalando o WordPress em localhost Instalando o WordPress em localhost WordPress sem Mistério LEE ARAUJO htto://wordpresssemmisterio.com.br Sumário Instalando o WordPress em Localhost... 2 O Servidor web... 3 Iniciando o servidor... 6 Criação

Leia mais

Criando um script simples

Criando um script simples Criando um script simples As ferramentas de script Diferente de muitas linguagens de programação, você não precisará de quaisquer softwares especiais para criar scripts de JavaScript. A primeira coisa

Leia mais

Microsoft Access XP Módulo Um

Microsoft Access XP Módulo Um Microsoft Access XP Módulo Um Neste primeiro módulo de aula do curso completo de Access XP vamos nos dedicar ao estudo de alguns termos relacionados com banco de dados e as principais novidades do novo

Leia mais

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania Sumário Objetivos do Blog... 2 Log-in... 3 Esqueci minha senha... 4 Utilizando o Blog... 5 Encontrando seu Blog... 5 Conhecendo o

Leia mais

Lazarus pelo SVN Linux/Windows

Lazarus pelo SVN Linux/Windows Lazarus pelo SVN Linux/Windows Sei que não faltam artigos sobre como obter e compilar o Lazarus e o FPC pelo SVN, mas sei também que nunca é de mais divulgar um pouco mais e talvez escrever algo diferente.

Leia mais

Operador de Computador. Informática Básica

Operador de Computador. Informática Básica Operador de Computador Informática Básica Instalação de Software e Periféricos Podemos ter diversos tipos de software que nos auxiliam no desenvolvimento das nossas tarefas diárias, seja ela em casa, no

Leia mais

Sistema de Instalação e Criação da Estrutura do Banco de Dados MANUAL DO INSTALADOR. Julho/2007. Ministério da saúde

Sistema de Instalação e Criação da Estrutura do Banco de Dados MANUAL DO INSTALADOR. Julho/2007. Ministério da saúde Sistema de Instalação e Criação da Estrutura do Banco de Dados MANUAL DO INSTALADOR Julho/2007 Ministério da saúde SUMÁRIO Módulo 1. Instalação... 4 Introdução... 4 Configurações de equipamentos para instalação

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

Este tutorial está publicado originalmente em http://www.baboo.com.br/absolutenm/anmviewer.asp?a=30405&z=300

Este tutorial está publicado originalmente em http://www.baboo.com.br/absolutenm/anmviewer.asp?a=30405&z=300 WinRAR: Conheça este excelente compactador de arquivos Introdução: É fato que a Internet está mais rápida com a popularização da banda larga, mas os compactadores de arquivos ainda apresentam muita utilidade

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

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

Resolvendo problemas de conexão de rede wireless no pregão 83/2008

Resolvendo problemas de conexão de rede wireless no pregão 83/2008 Resolvendo problemas de conexão de rede wireless no pregão 83/2008 Recentemente forma instalados em minha cidade novos laboratórios do pregão 83/2008 mas em nenhum deles os terminais acessavam a rede.

Leia mais

Como escrever melhor em 5 passos simples

Como escrever melhor em 5 passos simples Como escrever melhor em 5 passos simples Escrever um artigo para seu blog pode ser um processo estressante e tomar bastante tempo, especialmente se você não é um escritor. Mas quando você está determinado

Leia mais

2 echo "PHP e outros.";

2 echo PHP e outros.; PHP (Hypertext Preprocessor) Antes de qualquer coisa, precisamos entender o que é o PHP: O PHP(Hypertext Preprocessor) é uma linguagem interpretada gratuita, usada originalmente apenas para o desenvolvimento

Leia mais

Unidade 7: Panes no Excel

Unidade 7: Panes no Excel Unidade 7: Panes no Excel 7.0 Introdução A maioria das pessoas que usam o Excel já deve ter passado por redução no desempenho, congelamento e aquelas temidas palavras "O Microsoft Excel encontrou um problema

Leia mais

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5. Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5. Ele considera que você já tem o Joomla! instalado no seu computador. Caso você queira utilizá lo em um servidor na web,

Leia mais

Processos e Threads (partes I e II)

Processos e Threads (partes I e II) Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa

Leia mais

Como instalar uma impressora?

Como instalar uma impressora? Como instalar uma impressora? Antes de utilizar uma impressora para imprimir seus documentos, arquivos, fotos, etc. é necessário instalá-la e configurá-la no computador. Na instalação o computador se prepara

Leia mais

EDITORES DE TEXTO Capítulo 1: Avaliação técnica e econômica dos principais editores de texto do mercado.

EDITORES DE TEXTO Capítulo 1: Avaliação técnica e econômica dos principais editores de texto do mercado. Nome: Nº Série: EDITORES DE TEXTO Capítulo 1: Avaliação técnica e econômica dos principais editores de texto do mercado. Habilidades: Pesquisar novas ferramentas e aplicativos de informática para a área

Leia mais

3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis

3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis 3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis O que é um e- mail bem sucedido? É aquele e- mail que você recebe o contato, envia o e- mail para o cliente e ele te responde. Nós não estamos

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

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

O papel do CRM no sucesso comercial

O papel do CRM no sucesso comercial O papel do CRM no sucesso comercial Escrito por Gustavo Paulillo Você sabia que o relacionamento com clientes pode ajudar sua empresa a ter mais sucesso nas vendas? Ter uma equipe de vendas eficaz é o

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

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando

Leia mais

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER V14 de BricsCAD vem com um novo sistema de licenciamento, com base na tecnologia de licenciamento de Reprise Software. Este novo sistema oferece um ambiente

Leia mais

Na tela dele, clique no sinal de + ao lado do nome do seu computador, para expandi-lo. A seguir, expanda também o item "Sites da web".

Na tela dele, clique no sinal de + ao lado do nome do seu computador, para expandi-lo. A seguir, expanda também o item Sites da web. Servidor WEB Desenvolvedores de sites que querem aprender ou testar ASP, ou mesmo profissionais que precisam desenvolver páginas ASP ou ASP.Net, não precisam necessariamente ter um servidor na web com

Leia mais

Aspectos técnicos do desenvolvimento baseado em componentes

Aspectos técnicos do desenvolvimento baseado em componentes Aspectos técnicos do desenvolvimento baseado em componentes Um novo processo de desenvolvimento O uso de componentes traz mudanças no processo de desenvolvimento Além de desenvolver um produto, queremos

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

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões Prof. MSc. Hugo Souza Se você precisar manter informações sobre seus usuários enquanto eles navegam pelo seu site, ou até quando eles saem

Leia mais

1 de 7 11/04/2011 10:35

1 de 7 11/04/2011 10:35 1 de 7 11/04/2011 10:35 2 de 7 11/04/2011 10:35 QUARTA-FEIRA, 10 DE FEVEREIRO DE 2010 JAVA_HOME, CLASSPATH e PATH. O que são, para que servem e como configura-los Algumas vezes quando estamos iniciando

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

Como instalar o Ocomon passo a passo.

Como instalar o Ocomon passo a passo. Como instalar o Ocomon( Ferramenta Help Desk) passo a passo. Pessoal tudo bem? Já uso esta ferramenta há muito tempo e acho fantástica, quero compartilhar com vocês, pois ela é uma boa para quem quer gerenciar

Leia mais

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO Antes de criarmos um novo Banco de Dados quero fazer um pequeno parênteses sobre segurança. Você deve ter notado que sempre

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Professor: João Fábio de Oliveira jfabio@amprnet.org.br (41) 9911-3030 Objetivo: Apresentar o que são os Sistemas Operacionais, seu funcionamento, o que eles fazem,

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

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

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2

Leia mais

Os desafios do Bradesco nas redes sociais

Os desafios do Bradesco nas redes sociais Os desafios do Bradesco nas redes sociais Atual gerente de redes sociais do Bradesco, Marcelo Salgado, de 31 anos, começou sua carreira no banco como operador de telemarketing em 2000. Ele foi um dos responsáveis

Leia mais

SCPIWeb. SCPIWebDespRec Aplicação Web para Consulta de Despesas e Receitas ( Lei Complementar nº 131 de 27 Maio de 2009 )

SCPIWeb. SCPIWebDespRec Aplicação Web para Consulta de Despesas e Receitas ( Lei Complementar nº 131 de 27 Maio de 2009 ) 2010 SCPIWebDespRec Aplicação Web para Consulta de Despesas e Receitas ( Lei Complementar nº 131 de 27 Maio de 2009 ) SCPIWebCotacao Aplicação Web para Cotação de Preços via Internet Resumo de Instruçõ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

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

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerenciamento de Memória Norton Trevisan Roman Marcelo Morandini Jó Ueyama Apostila baseada nos trabalhos de Kalinka Castelo Branco, Antônio Carlos Sementille, Paula Prata e nas transparências

Leia mais

Omega Tecnologia Manual Omega Hosting

Omega Tecnologia Manual Omega Hosting Omega Tecnologia Manual Omega Hosting 1 2 Índice Sobre o Omega Hosting... 3 1 Primeiro Acesso... 4 2 Tela Inicial...5 2.1 Área de menu... 5 2.2 Área de navegação... 7 3 Itens do painel de Controle... 8

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

Módulo e-rede VirtueMart v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Módulo e-rede VirtueMart v1.0. Manual de. Instalação do Módulo. estamos todos ligados Módulo e-rede VirtueMart v1.0 Manual de Instalação do Módulo estamos todos ligados 01 02 03 04 Introdução 3 Versão 3 Requerimentos 3 Manual de instalação 4 05 06 4.1 Permissões 4 4.2 Instalação e ativação

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

JSP - ORIENTADO A OBJETOS

JSP - ORIENTADO A OBJETOS JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...

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

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014.

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014. Faculdade de Tecnologia SENAC Goiás Disciplina: Gerenciamento de Rede de Computadores : Goiânia, 16 de novembro de 2014. Faculdade de Tecnologia SENAC Goiás Professor: Marissol Martins Alunos: Edy Laus,

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

Instalando servidor Apache com MySQL e as linguagens ColdFusion e PHP. XAMPP 1.6.7 (xampp-win32-1.6.7-installer.exe), veja aqui.

Instalando servidor Apache com MySQL e as linguagens ColdFusion e PHP. XAMPP 1.6.7 (xampp-win32-1.6.7-installer.exe), veja aqui. Instalando servidor Apache com MySQL e as linguagens ColdFusion e PHP. Escrito por Marcio Nakano (marcionakano.com.br) Data: 29/09/2008 Disponível em http:///blog/post/instalando-apache-mysql-coldfusionphp.pdf

Leia mais

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1 TUTORIAL PRÁTICO SOBRE Git por Djalma Oliveira Versão 1.1 "Git é um sistema de controle de revisão distribuida, rápido e escalável" (tradução rápida do manual). Basicamente é

Leia mais

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO. Motor Periférico Versão 8.0

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO. Motor Periférico Versão 8.0 MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO Motor Periférico Versão 8.0 1. Apresentação... 3 2. Instalação do Java... 3 2.1 Download e Instalação... 3 2.2 Verificar Instalação... 3 3. Download do Motor Periférico...

Leia mais

Instalando e configurando o Java Development Kit (JDK)

Instalando e configurando o Java Development Kit (JDK) Tutorial elaborado pelo professor José Gonçalo dos Santos Contato: jose.goncalo.santos@gmail.com Instalando e configurando o Java Development Kit (JDK) 1.1 Obtendo o JDK + JRE Para obter o JDK e o JRE

Leia mais

edirectory ios / Android Plataforma

edirectory ios / Android Plataforma edirectory ios / Android Plataforma Criando lindos aplicativos com edirectory Uma revolução no espaço de diretórios mobile, bem vindo ao novo aplicativo do edirectory. Mobile Completamente reestruturado

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

INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF

INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF Guilherme Macedo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil guilhermemacedo28@gmail.com, jaime@unipar.br Resumo.

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread. 5 THREADS Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread. 5.1 VISÃO GERAL Uma definição mais abrangente para threads é considerá-lo

Leia mais

Comparativo de desempenho do Pervasive PSQL v11

Comparativo de desempenho do Pervasive PSQL v11 Comparativo de desempenho do Pervasive PSQL v11 Um artigo Pervasive PSQL Setembro de 2010 Conteúdo Resumo executivo... 3 O impacto das novas arquiteturas de hardware nos aplicativos... 3 O projeto do Pervasive

Leia mais

Introdução a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Online Help StruxureWare Data Center Expert

Online Help StruxureWare Data Center Expert Online Help StruxureWare Data Center Expert Version 7.2.7 Appliance virtual do StruxureWare Data Center Expert O servidor do StruxureWare Data Center Expert 7.2 está agora disponível como um appliance

Leia mais

Para funcionamento do Netz, alguns programas devem ser instalados e alguns procedimentos devem ser seguidos. São eles:

Para funcionamento do Netz, alguns programas devem ser instalados e alguns procedimentos devem ser seguidos. São eles: Instalação do Netz Para funcionamento do Netz, alguns programas devem ser instalados e alguns procedimentos devem ser seguidos. São eles: Instalação do Java SE 6, que pode ser instalado através da JDK.

Leia mais

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS Servidor: O servidor é todo computador no qual um banco de dados ou um programa (aplicação) está instalado e será COMPARTILHADO para outros computadores,

Leia mais

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2. 1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2. Editando um Artigo 4.3. Excluindo um Artigo 4.4. Publicar

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. Manual de Instruções ECO Editor de Conteúdo Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. O ECO é um sistema amigável e intui?vo, mas abaixo você pode?rar eventuais dúvidas e aproveitar

Leia mais

Como funcionam os comandos de SQL no Logic Basic Por Alan Oliveira

Como funcionam os comandos de SQL no Logic Basic Por Alan Oliveira Como funcionam os comandos de SQL no Logic Basic Por Alan Oliveira www.linksinfo.com.br Tutorial versão 1.0 Sobre o Logic basic: Parte 1 Sobre o Logic Basic e o SQL O Logic Basic é uma linguagem de programação

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

TRABALHO COM GRANDES MONTAGENS

TRABALHO COM GRANDES MONTAGENS Texto Técnico 005/2013 TRABALHO COM GRANDES MONTAGENS Parte 05 0 Vamos finalizar o tema Trabalho com Grandes Montagens apresentando os melhores recursos e configurações de hardware para otimizar a abertura

Leia mais

GUIA INTEGRA SERVICES E STATUS MONITOR

GUIA INTEGRA SERVICES E STATUS MONITOR GUIA INTEGRA SERVICES E STATUS MONITOR 1 - Integra Services Atenção: o Integra Services está disponível a partir da versão 2.0 do software Urano Integra. O Integra Services é um aplicativo que faz parte

Leia mais

Manual Administrador - Mídia System

Manual Administrador - Mídia System Manual Administrador - Mídia System Logo após cadastrarmos sua Empresa em nosso sistema, será enviado um e-mail confirmando as informações de acesso do Administrador do sistema. Obs: Caso não tenha recebido

Leia mais

Autor: Marcelo Maia http://infoempreendedorismo.com

Autor: Marcelo Maia http://infoempreendedorismo.com Nesse ebook você irá aprender como gerar uma renda mesmo que do zero rapidamente na internet, se você já tem um produto irá aprender como aumentar suas vendas agora mesmo de forma garantida. Crie um sistema

Leia mais

Nesse artigo abordaremos os principais aspectos de instalação e uso do NTOP no Fedora Core 4.

Nesse artigo abordaremos os principais aspectos de instalação e uso do NTOP no Fedora Core 4. Diego M. Rodrigues (diego@drsolutions.com.br) O NTOP é um programa muito simples de ser instalado e não requer quase nenhuma configuração. Ele é capaz de gerar excelentes gráficos de monitoramento das

Leia mais

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO 10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO UMA DAS GRANDES FUNÇÕES DA TECNOLOGIA É A DE FACILITAR A VIDA DO HOMEM, SEJA NA VIDA PESSOAL OU CORPORATIVA. ATRAVÉS DELA, ELE CONSEGUE

Leia mais