[Pesquisar este blog]

Carregando...

sábado, 7 de maio de 2016

Java 9::a nova versão demora um pouco mais

A plataforma Java continua como a mais utilizada no mundo, basta conferir no TIOBE Index de Maio/16, que mede a popularidade das várias linguagens de programação existentes, conforme o gráfico abaixo (metodologia do TIOBE index). Nestes últimos 15 anos, o Java ocupou a liderança deste ranking na maior parte do tempo, revezando o posto com a veterana C!

TIOBE Programming Community Index for May 2016
Fonte: http://www.tiobe.com/tiobe_index
Portanto nada mais natural que existir uma grande expectativa pela próxima versão, de número 9, que trará vários novos elementos. Uma lista com as principais características do Java 9 foi assunto de um post anterior (Java 9::o que esperar) que comentou sobre o shell Java integrado para experimentação de construções da linguagem no estilo read-eval-print loop; a API dedicada a microtestes (microbenchmark); o novo cliente para HTTP 2; o suporte para Unicode 7.0 e 8.0; a atualização das APIs de processo, concorrência e outras; o coletor de lixo G1 como default; além da modularização do código fonte e da biblioteca run-time.

Mas existem muitas outras novidades no Java 9 como imagens multi-resolução; tratamento para formato TIFF; melhorias diversas nos sistemas gráficos para Windows e Linux; suporte ao GTK3; aperfeiçoamentos no controle da compilação e depreciação de elementos; melhorias no JavaDoc; e outras tantas. No momento são 21 JEPs (Java Enhance Proposals) para a versão 9, como pode ser visto na página do OpenJDK sobre o projeto.

Na verdade, a versão 9 está atrasada! A previsão de sua liberação em setembro/16 foi adiada devido a atrasos no projeto Jigsaw, de modularização da API, como comentado no blog Takipi. Hoje o Java Runtime Enviroment tem estrutura quase monolítica, pois seu arquivo rt.jar contém quase 20000 classes, boa parte sem uso em muitos programas, tornando-se um peso. O objetivo do projeto Jigsaw é possibilitar a divisão do runtime em componentes que possibilitem a criação de versões otimizadas para atender necessidade específicas. Embora fácil de explicar, conseguir a flexibilidade e o desempenho almejados, dentro das premissas da linguagem e garantindo a necessária retrocompatibilidade é bem mais complicado, o que justifica o atraso.


O Plano Atual

Atualmente o cronograma da versão 9, conforme a página do projeto é este:


Isto significa que no final de maio/16 devem ser confirmadas todas as JEPs (melhorias propostas) que efetivamente comporão a versão 9. Segue uma fase de testes e depuração de maneira que no final de janeiro/17 esteja disponível um build candidato a primeira versão oficial do Java 9. Assim, no final de março/17 deve ocorrer o General Avaliability, ou seja, quando o JDK 9 para produção é liberado!

As versões preliminares do Java 9 podem ser experimentadas. Basta efetuar o download de uma versão early access no link indicado para JDK 9 Early Access Releases na seção Para Saber Mais. É só conferir!

Para saber mais


terça-feira, 23 de fevereiro de 2016

Virtualização Revisitada

No dicionário, o adjetivo virtual é explicado como "o que não existe como realidade, mas sim como potência ou faculdade" e também como "o que equivale a outro, podendo fazer às vezes deste, em virtude ou atividade".

Na área de Tecnologia de Informação o termo é frequentemente utilizado no sentido de indicar dispositivos de hardware, programas de computador ou uma combinação destes que substituem outros dispositivos ou programas, de maneira a obter-se seu funcionamento equivalente. Assim, virtualizar é o ato de criação de uma versão virtual de algo, como uma plataforma de hardware, um servidor, um sistema operacional, um dispositivo de armazenamento ou uma rede de computador.

Os softwares ou frameworks de virtualização podem, entre outras capacidades, atuar de duas maneiras distintas:
  • Dividir um recurso para prover seu uso em múltiplos ambientes de execução;
  • Consolidar múltiplos recursos de maneira que sejam tratados como algo único.
Cada um destes modos tem aplicações bastante convenientes e específicas.

Por exemplo, o simples particionamento de uma unidade de disco rígido pode ser considerado como uma operação de virtualização porque a unidade particionada dá origem a duas ou mais unidades lógicas (isto é, que não são físicas). Mas, em algum sistemas, também é possível fazer o oposto, ou seja, configurar duas ou mais unidades físicas para que operem como uma unidade lógica dotada de maior capacidade. Então divisão e consolidação são estratégias que se aplicam a um grande número de situações.

Muitos ambientes de desenvolvimento voltados para a construção de aplicativos móveis incluem emuladores de modelos genéricos ou específicos para possibilitar o teste destes softwares em um ambiente semelhante onde serão utilizados, mas sem a necessidade do programador dispor de um dispositivo físico.

A configuração de uma Virtual Private Network (VPN) é também uma operação de virtualização, pois com o uso de uma infraestrutura pública de comunicação (a internet, por exemplo) é possível a construção de uma rede privativa, que oferece grande segurança para o tráfego de seus dados, que opera transparentemente na rede pública. O efeito de uma rede privada "dentro" da infraestrutura pública de comunicação é a virtualização de uma rede.

Um framework de virtualização pode também ofertar um ambiente composto de diversos dispositivos, simulando um sistema completo por meio de outro. Assim, dispositivos, aplicações e usuários são capazes de interagir com recursos virtuais, isto é, providos pela plataforma de virtualização, como se fossem recursos reais. Técnicas de virtualização muitas vezes são empregadas na emulação e na simulação (a primeira procura representar exatamente um sistema ou dispositivo - como os emuladores de telefones, enquanto a segunda pode oferecer um subconjunto específicos de funcionalidades associado a um ou mais sistemas e dispositivos).

Hoje são relativamente comuns os frameworks de virtualização que empregam uma ou mais metodologias de divisão dos recursos de um computador em múltiplos ambientes de execução por meio da aplicação de conceitos e tecnologias de particionamento de hardware e software, compartilhamento de tempo (time-sharing), simulação de máquina parcial ou completa, emulação, qualidade de serviços (QoS) e muitas outras.

Origem

As técnicas de virtualização surgiram na década de 1960 para prover a operação mais eficiente de mainframes, pois devido a seu altíssimo custo, todos os recursos sistêmicos deveriam ser intensamente utilizados para tornar seu uso mais competitivo.

Inicialmente possibilitava a divisão lógica dos recursos físicos do mainframe em múltiplos sistemas lógicos, os quais podiam ser usados para aplicações distintas e com operação independente. Além de flexibilizar a utilização do sistema, um mesmo mainframe poderia até ser compartilhado por organizações distintas quando tecnologias de acesso remoto eram empregadas para conectar os terminais de usuário ao computador principal.

Um caso de sucesso foi o IBM CP (Control Program) um dos primeiros software comerciais de virtualização e também o IBM VM (Virtual Machine), uma evolução do CP de enorme sucesso, ambos voltados para operação de mainframes.

Na última década a virtualização tornou-se uma estratégia fundamental para organizar os datacenters (as novas versões dos antigos centros de processamento de dados). Um servidor tradicional trabalha com grande ociosidade na maior parte do tempo, pois é dimensionado para atender os horários de pico. Assim o consumo de energia é maior do que efetivamente necessário. Com a virtualização, um servidor de capacidades maiores pode hospedar vários servidores (máquinas) virtuais, o que é denominado consolidação de servidores, explorando melhor os recursos disponíveis, reduzindo a ociosidade e o consumo total de energia, além de requisitar menos espaço físico e esforço de manutenção. Tudo sem redução do desempenho fornecidos aos aplicativos dos servidores, de maneira imperceptível para os usuários destas aplicações.

Visão conceitual

Sua organização tipicamente envolve três camadas:

  • Camada de hardware
    Composta dos dispositivos do hardware que, de fato, existem no sistema. Pode agregar um sistema operacional (SO).
  • Camada de virtualização
    Sistema/programa de virtualização, que particiona e administra a camada de hardware para prover serviços de virtualização ou suporte para máquinas virtuais. É o hipervisor, hypervisor ou Monitor das Máquinas Virtuais (Virtual Machine Monitor).
  • Camada de aplicaçãoPartições que constituem as máquinas virtuais específicas para operação de diversos SO e aplicações isoladas.
 O próprio hipervisor pode ser de dois tipos:
  • Bare Metal (ou Nativo)
    Situação onde o hipervisor é instalado diretamente sobre o hardware do sistema, controlando-o, sem necessidade de um sistema operacional previamente instalado. O papel dos bare metal hypervisor é particionar o hardware em múltiplas máquinas virtuais onde serão configurados as aplicações hospedeiras (guests). Oferecem o melhor desempenho possível.
  • Hosted (ou Hospedado)
    Caso onde o hipervisor é instalado sobre um sistema operacional, tal como uma aplicação qualquer. Também permite a criação de máquinas virtuais, com diferentes configurações de hardware, mas que competirão por recursos do sistema, incluindo outras aplicações existentes além do próprio hipervisor. Oferece grande flexibilidade, principalmente na constituição de ambientes de teste e simulação.
A ilustração que segue mostra a organização de hipervisores bare metal (Type 1) e hosted (Type 2).
 

Aplicações da Virtualização

A virtualização tem inúmeras aplicações. Algumas das mais comuns são:
  • Virtualização de armazenamento, onde múltiplas unidades de armazenamento, locais e remotas, são operadas de maneira combinada e distribuídas dinamicamente como unidade virtuais reconfiguráveis.
  • Virtualização de servidores, na qual um servidor físico pode ser particionado em vários servidores virtuais de menor capacidade.
  • Virtualização de sistemas operacionais, que é um tipo de virtualização, ocorrida no kernel do SO, para prover múltiplas instâncias de um mesmo ou diferentes sistemas operacionais numa mesma máquina.
  • Virtualização de redes, onde torna-se possível o uso seletivos dos recursos de uma rede física por meio de sua segmentação lógica, por exemplo, numa VPN.
  • Virtualização de aplicativos, na qual a operação de sistemas de software ocorre em sistemas virtualizados e cujo acesso se dá por meio de redes, como na computação em nuvem (cloud computing).

Vantagens e Desvantagens

A virtualização é uma tecnologia que tem potencial para proporcionar um grande conjunto de vantagens.

Exemplos clássicos são a possibilidade de uso de múltiplos SOs simultaneamente num mesmo host; e a consolidação de servidores subutilizados num menor número de máquinas, proporcionando economia no hardware, no espaço físico, na operação, na gerência, nos custos e também permitindo a redução dos impactos ambientais.

O uso da virtualização permite a continuidade de aplicações legadas que requerem hardware antigo; pode prover ambientes seguros e isolados (sandboxes) para operar aplicações não confiáveis ou constituir ambientes de teste e depuração; permite configurar ambientes com limitações específicas de recursos, sendo conveniente para sistemas habilitados para QoS (Quality of Service). A recuperação de desastres é grandemente facilitada pela re-instalação de sistemas virtualizados, ao invés de re-instalação e reconfiguração tradicional de sistemas.

Outros aspectos positivos do emprego da virtualização são: a possibilidade de empacotar e distribuir instalações ou aplicações complexas; facilitam a migração de software; facilitar o balanceamento de carga de trabalho; sem contar que pode constituir um infraestrutura mais adequada para atendimento flexível das demandas de sistemas de computação em nuvem.

Mas como toda e qualquer tecnologia, também existem desvantagens. Uma delas é que o hardware requisitado é, de fato, mais sofisticado, pois deve ser bastante mais robusto para suportar, sem comprometimento de desempenho e disponibilidade, a consolidação de servidores. Também existe mão de obra especializada, por requer novos conhecimentos e experiência na condução das etapas de adoção de tecnologia, migração de sistemas e operação contínua. Os custos adicionais de licenças de produtos específicos é outra consideração que não pode ser esquecida.

Conclusões

A virtualização é, do ponto de vista técnico, uma alternativa muito interessante e flexível para operação de sistemas sofisticados, mas também pode ser empregada com vantagens no âmbito pessoal. Uma análise cuidadosa do cenário de sua adoção pode determinar sua conveniência e viabilidade econômica em qualquer segmento de negócio. Mas a considerar-se sua larga adoção, por companhias de todos os tamanhos e em todos os ramos de atividade, constitui a maior prova que seu uso cuidadoso permite alcançar grandes ganhos.

Para Saber Mais



domingo, 13 de dezembro de 2015

Desenvolvimento Profissional e Carreira

Você sabia que existem tipos diferentes de carreiras profissionais? Carreira linear, em Y e até mesmo em W? O pensar e planejar a carreira são importantes, pois todos almejam a plena realização pessoal e profissional!

Uma carreira é um percurso rumo a um objetivo profissional, mas determinado por razões pessoais, em geral motivados pelos desejos de realização e de sentido para vida. É parte da busca de nossa felicidade. Embora não possamos prever o futuro, o planejamento da carreira e a preparação antecipada contribuem muito, pois passamos boa parte de nossas vidas no trabalho.

Uma carreira linear é uma sucessão de ocupações considerada natural. No início os aprendizes e estagiários, que evoluem para funções de natureza júnior, onde as pessoas trabalham com menor independência e sob supervisão. Com o passar do tempo, o amadurecimento profissional conciliado com mais educação formal, permitem galgar posições ditas plenas e depois seniores, sempre com maior autonomia. Nestas últimas é comum que o profissional passe, progressivamente, a coordenar, supervisionar e, finalmente, gerenciar, ascendendo a posições formais de comando, de cunho executivo e de maiores encargos. A cada uma dessas transições para funções de maiores responsabilidades espera-se a conquista de maiores remunerações e, eventualmente, outros benefícios. Uma carreira assim é vista como uma trajetória de sucesso.

Mas nem todos desejam ou querem tais posições de comando, a despeito dos ganhos ou da ideia de sucesso ali contida. É aqui que surge a carreira em Y, que contém uma bifurcação para a evolução em termos de superespecialização técnica ou de gestão organizacional. Mas isto é assunto para uma próxima conversa!

Este texto marca o lançamento do capítulo O Y da Carreira, no livro Competências Profissionais no dia 12/12/2015 em Jundiaí-SP, publicado também no Em Foco, informativo semanal do Grupo Anchieta.

Para Saber Mais

sexta-feira, 27 de novembro de 2015

TCC::Como apresentar?

Fim de semestre. Época de provas, entrega de trabalhos e o famigerado Trabalho de Conclusão de Curso. Para reduzir o stress, segue uma pequena apresentação com orientações e dicas para tudo dar certo no dia de sua apresentação.
Partindo do princípio que você (e seu grupo) deu um duro danado para concluir seu projeto de TCC, após a entrega da monografia ou do artigo final, é hora de preparar uma boa apresentação para banca que avaliará o trabalho e os resultados obtidos.

Segue uma apresentação que você pode usar como material de apoio. Ela contém:
  • as regras típicas das bancas de apresentação de TCC;
  • como organizar e elaborar os slides da apresentação;
  • como se preparar e ensaiar;
  • como apresentar no grande dia.
Destaco que é um material de orientação geral, ou seja, não contempla especificades do regulamento de sua instituição, pode ser diferente da sugestão de seu orientador e, (infelizmente) não cobre todas as perguntas e dúvidas possíveis que você ter. Mas ainda assim, pode lhe ajudar!

Desejo muita sorte em sua apresentação!



quinta-feira, 5 de novembro de 2015

Java 9::o que esperar da próxima versão

Faz pouco mais de um ano e meio que o Oracle Java 8, última versão oficial, foi liberado para o público. Mas o trabalho de aperfeiçoamento e ampliação da plataforma está a pleno vapor! Depois dos métodos de extensão para interfaces, das expressões lambda, das operações em massa para coleções e da nova API para Data e Hora, dentre várias outras adições e melhorias da versão 8, o que esperar da próxima versão?

Blog Takipi

A plataforma Java continua em evidência, e não é por conta dos 3 bilhões de dispositivos que utilizam Java ao redor do mundo, conforme advertising da Oracle ao longo da instalação do Java, mas pelos números de sua utilização apurados pelo TIOBE Programming Community Index, uma apuração da popularidade das linguagens de programação feita há mais de 15 anos, mostra a hegemonia do Java neste período, com uma frequente primeira colocação, tendo sido superada pela veterana linguagem C em alguns momentos, como mostra a ilustração que segue que reflete os resultados de Outubro/2015. A diferença para o terceiro colocado é igualmente significativa.


Assim, o interesse na plataforma Java é plenamente justificado!

Novidades da Versão 9

A lista de novas features pretendidas para a versão 9 é razoavelmente ambiciosa. Citando apenas as JEP (JDK Enhancement Proposal) mais significativas temos:
  • jshell: The Java Shell (Read-Eval-Print Loop) [JEP 222]
  • Microbenchmark Suite [JEP 230]
  • Novo cliente para HTTP 2 [JEP 110]
  • Suporte para Unicode 7.0 e 8.0 [JEP 227 & 267]
  • Atualização da Process e da Concurrency API [JEP 102 & 266]
  • Coletor de lixo G1 como default [JEP 248]
  • Modularização do código fonte e da biblioteca run-time [JEP 201 & 220]
Com isso, o Java 9 trará o novo console jshell que permitirá testar, sem necessidade de construção de um programa completo, comandos e expressões diretamente, o que se denomina REPL (read-evaluate-print-loop). O jshell  já está disponível na versão de testes (ainda incompleta) do JDK9.

A pequena suite para microbenchmark facilitará, e muito, a construção e realização de testes de desempenho e análises comparativas com o código Java. Com isso, o programador poderá, de fato, determinar quais otimizações são realmente necessárias, sem necessitar de ferramentas externas de profiling.

O novo cliente HTTP 2 (assim como o suporte para Datagram Transport Layer Security - DTLS - e para TLS Application-Layer Protocol Negotiation Extension) são necessidades nestes novos tempos da internet, possibilitando a substituição de HttpURLConnection pelos novos websockets.

O suporte para as versões 7 e 8 do Unicode refletem a extrema maturidade do Java quando se consideram as necessidades de internacionalização e localização de aplicações, uma exigência para o desenvolvimento de software para empresas multinacionais e aplicativos globais.

As atualizações nas APIs de processos e concorrência deverão trazer um significativo ganho de performance (a se confirmar) para as aplicações envolvento múltiplos processos e threads, além de maior e melhor controle sobre processos do sistema operacional.

O coletor de lixo (garbage collector) G1 provavelmente se tornará o padrão da JVM. Isto significa um papel mais preponderante para o G1, visto ter sido introduzido no Java 7, sem contudo substituir os demais, pois a JVM continuará utilizar quatro coletores de lixo distintos, para diferentes aspectos da gerência de memória.

A modularização do código fonte e dos módulos runtime é uma característica, algo controversa, que pretende dividir o código binário, tanto do JRE como da aplicação do cliente em módulos, otimizando o uso de memória. O arquivo rt.jar (o runtime da JRE) contém hoje algo como 20.000 classes, algo bem inconveniente em termos de performance. A divisão em componentes menores e interoperáveis pode oferecer ganhos de performance e eventual redução do consumo de memória. Como deve ser garantida a compatibilidade com aplicações existentes, a questão é como esta modularização será indicada e obtida para novas aplicações. Um novo formato, diferente do jar (java archive) está em pauta aqui.

Além disso existem mais de 40 outros JEP a serem incorporados na versão 9, cujos impactos são bem mais específicos, embora todos importantes. A lista completa das JEP pode ser consultada no site do OpenJDK.

Também existem modificações comentadas e desejadas pela comunidade que não serão contempladas nesta versão, como uma nova API para moeda, uma API para JSON, entre outras.

Considerações finais

Do ponto de vista da linguagem de programação, a versão 9 não trará um conjunto de novidades tão expressivo como na versão 8, mas, de fato, isto é adequado. Java é uma plataforma madura, utilizada por milhões de desenvolvedores, portanto sua evolução deve ser contínua e muito bem planejada e executada.

Em resumo, uma nova versão, melhor do que a atual, em 22/09/2016. O plano é esse!

Em tempo, para experimentar as versões preliminares do Java 9 veja o link Oracle Java Early Access Downloads na seção Para Saber Mais.

Para saber mais


quinta-feira, 15 de outubro de 2015

MiniCurso::Novidades do Java 8

A versão 8 do Java é muito importante, pois introduziu um número substancial de novas características, o maior em uma única atualização da plataforma desde a versão 5.

Conforme o cronograma publicado no OpenJDK, a versão 9 está prevista para ser lançada no segundo semestre de 2016, assim, é necessário que os programadores Java explorem as novidades do Java 8, incorporando-as ao desenvolvimento de novo código, permitindo aproveitar estas novidades e as que virão em breve.

Este minicurso, agora com novos conteúdos, faz parte da programação da Semana de Tecnologia 2015 da FATEC de Jundiaí e foi originalmente ministrado no IV Workshop de Tecnologia de Informação - WTI2015 - do UniAnchieta.

Os tópicos principais são cobertos por artigos separados disponíveis neste blog. Os slides usados no minicurso estão disponíveis aqui.

Os exemplos também estão disponíveis para download.