Cinco principais dúvidas sobre cloud

cloud
Cloud computing

Nos últimos tempos, tenho me debruçado sobre cloud computing. Há algumas semanas, respondi às perguntas de um jornalista para uma matéria sobre o tema. Acabei gostando do resultado e resolvi dar uma modificada no conteúdo (perguntas e respostas) e publicar por aqui, esperando que seja útil para um número maior de pessoas.

O resultado poder ser conferido abaixo:

1. A computação em nuvem ainda é algo “novo” no Brasil? Qual a realidade desse mercado hoje?

A computação em nuvem é uma tecnologia que já tem mais de cinco anos no mercado. Cinco anos é pouco historicamente, mas é bastante tempo quando se fala de tecnologia. Lá fora, o termo já está bem consolidado, e boa parte das empresas já entende o que é e quais os benefícios associados à computação em nuvem. No Brasil, sempre estamos um pouco atrás em relação a países como os EUA, mas aos poucos, com o aumento da oferta de serviços em nuvem no País, as pessoas e os profissionais vão adquirindo uma melhor compreensão do tema e de como tirar proveito da tecnologia por aqui também.

2. Quais as principais vantagens da computação em nuvem?

O grande foco da computação em nuvem é associar diversas tecnologias que já existiam anteriormente ao seu surgimento e que se encontravam suficientemente amadurecidas (como virtualização, provisionamento e o processamento e armazenamento distribuídos) para gerar uma maior eficiência computacional, diminuindo o desperdício e consequentemente os custos associados à aquisição de hardware. Dessa forma, é possível hoje, através de tecnologias de computação em nuvem, fazer mais com muito menos. Isso significa um drástico aumento de produtividade e disponibilidade em um mundo que não para de exigir um crescimento contínuo de poder computacional, na medida em que as mídias tradicionais seguem seu processo de “digitalização” e outras já surgem nesse novo contexto digital, como foi o caso das plataformas móveis.

3. Qualquer empresa, independentemente de porte e segmento, pode adotar o sistema de computação em nuvem? Quais são os tipos de negócios que mais se beneficiam desse tipo de serviço?

Como falei anteriormente, a essência da computação em nuvem é uma maior eficiência no uso dos recursos computacionais. Junte isso ao modelo de serviço e você tem uma arquitetura escalável, na qual cada um paga apenas pela fatia equivalente aos recursos que utiliza. Dessa forma, uma empresa não precisa mais desembolsar uma grande quantia para adquirir um servidor que ficará boa parte do tempo ociosa, simplesmente para começar um novo negócio na rede. Em vez disso, ela compra “uma fatia” dos recursos de um grande data center e paga apenas por essa fatia, dividindo assim os custos. Na medida em que o negócio for crescendo, ela vai aumentando a sua participação nessa fatia.

Mas não é só isso, pois esse contexto traz ainda a vantagem extra de garantir que mais recursos estarão disponíveis sempre que houver a necessidade de aumento, pois é possível realocar recursos dentro da “nuvem” de maneira “fluida”. Por isso a analogia com a nuvem se faz pertinente. Com isso, a empresa tem a tranquilidade de saber que poderá crescer sem gargalos de infraestrutura que, por ventura, possa atrasá-la em seus projetos.

Por todas essas razões, esse é um modelo mais sustentável, na medida em que os gastos aumentam proporcionalmente a um aumento da receita do cliente. Tudo isso com muito mais segurança, pois há formas de isolar os recursos, impedindo que eventuais problemas ou picos de um usuário específico afetem outros usuários que compartilham da mesma infraestrutura.

4. Qual a economia proporcionada pela computação em nuvem?

O custo é um fator fundamental para a explosão de uso da computação em nuvem, porém não se trata apenas disso. Outras vantagens bastante atrativas são a facilidade de administração, a previsibilidade dos custos, a facilidade de integrar ambientes de desenvolvimento, testes e produção, e a possibilidade de adequar os gastos da infraestrutura ao “sobe e desce” do uso do serviço, fazendo com que seja possível economizar em momentos de baixo tráfego e evitar problemas (como lentidão ou indisponibilidade) durante os picos de uso.

A economia dependerá muito do cenário que se tem em uso, mas é possível afirmar que ela é substancial. Se pensarmos que a infraestrutura é condição “sine qua non” para qualquer projeto de tecnologia, é possível ter uma ideia. Além disso, é preciso colocar na equação os custos com energia elétrica, resfriamento (ar condicionado) e administração dos sistemas, que ficam a cargo do fornecedor do serviço.

5. Como é a questão da segurança no armazenamento de dados em nuvem? É esse ainda o principal receio dos clientes?

Talvez esse seja um dos principais receios dos profissionais. Entretanto, a situação não é muito diferente daquilo que tínhamos anteriormente. Se você precisa que seu serviço esteja disponível 24 horas por dia, 7 dias por semana, em qualquer lugar do mundo, será preciso disponibilizá-lo na Internet e controlar o acesso ao serviço, e isso sempre representa um risco potencial, independentemente de os dados estarem em uma nuvem pública ou privada, simplesmente pelo fato de eles estarem acessíveis via Internet. Nesse caso, o melhor a fazer é se cercar de todas as políticas e ferramentas de segurança para que apenas aquelas que devem ter acesso ao serviço o tenham de fato, evitando assim acesso não autorizado ou malicioso.

Uma regra que pode ajudar é a seguinte: se os dados não podem, não devem ou não precisam ser acessados por pessoas de fora da empresa, não há a necessidade de colocá-los numa nuvem pública. Mas se você precisa desses dados ou serviços disponíveis o tempo todo em qualquer lugar, a decisão de colocá-los numa nuvem pública ou privada deve levar em conta as vantagens e desvantagens de ambos os modelos.

Contudo, as revelações da NSA no ano passado revelaram uma preocupação que estava longínqua no radar da maior parte das empresas: o fato de que alguns provedores de serviço estrangeiros sejam forçados por seus governos a revelar os dados de seus clientes, motivados por interesses políticos ou comerciais. Nesse caso, uma nuvem pública hospedada dentro do Brasil oferece uma segurança a mais para os brasileiros, principalmente depois da entrada em vigor do Marco Civil da Internet, que garante a confidencialidade legal das informações dos clientes perante os provedores de serviço.

—–

Artigo de Kemel Zaidan, publicado originalmente no iMasters.

Conhece o DialCloud? A solução em cloud computing com estrutura de alto desempenho por um preço acessível!

Mosh, um substituto para o SSH

 

mosh
Mosh

Se você usa SSH constantemente, provavelmente alguma vez você já deve ter se irritado quando sua conexão estava lenta. Seja na demora das respostas dos comandos enviados ou até mesmo digitando algo.

Para resolver problemas com conexões e outros, surgiu o Mosh (mobile shell). O Mosh é uma ferramenta utilizada para se conectar a partir de um computador cliente para um servidor através da Internet, para executar um terminal remoto.

Mosh é semelhante ao SSH (entenda como aplicação para linha de comando e não como protocolo) com recursos adicionais destinados a melhorar a usabilidade. Mais robusto e ágil, especialmente através de Wi-Fi e celulares.Você consegue usar no xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen, tmux e outros.

Você pode começar uma conexão SSH de casa no seu laptop, ir trabalhar e voltar como se nada tivesse acontecido. Ou seja não há conexão de sessão, você pode colocar seu laptop em modo sleep e quando retornar a conexão fica intacta.

Se você ficar sem acesso a internet, o Mosh vai te alertar. Porém quando a internet voltar, a conexão irá funcionar tranquilamente e ainda de onde você estava.

Excelente em conexões lentas, também como rápidas. Talvez a maior vantagem do Mosh seja evitar e fugir de problemas com lag. Sabemos queo SSH aguarda a resposta do servidor antes de te mostrar sua própria digitação.

O Mosh é diferente: ele dá uma resposta instantânea a digitação, exclusão e edição. Ele faz isso de forma adaptativa, funcionando tranquilamente em programas que usam tela cheia como recurso (ex: vim e emacs). Em uma conexão ruim, digitações pendentes são sublinhadas, assim você não será enganado.

Outra vantagem é o famoso Control-C funcionar perfeitamente.

Diferente do SSH, o Mosh é um protocolo baseado em UDP, logo ele lida muito bem com a perda de pacotes e define a taxa de quadros com base nas condições de rede.

Sim, o Mosh é incrível e você provavelmente deve estar se perguntando: “Como eu começo a usar o mosh?” Basta acessar o site oficial do Mosh. Lá tem toda documentação de instalação até usabilidade.
O melhor de tudo é o Mosh ser software livre, disponível para GNU/Linux, FreeBSD, Solaris, Mac OS X, and Android.

—–

Artigo de Raphael Amorim, publicado originalmente no iMasters.

CSS vs Animação JS: qual é o mais rápido?

Animação
Imagem ilustrativa

Como pode a animação baseada em JavaScript ser secretamente sempre tão rápida – ou mais rápida – do que as transições CSS? E como é possível que Adobe e Google lancem, consistentemente, sites mobile com rich-media que rivalizam com o desempenho dos apps nativos?

Este artigo serve como um passo a passo de como as bibliotecas de animação DOM baseadas em JavaScript, como Velocity.js e GSAP, são mais eficazes do que jQuery e bibliotecas de animação baseadas em CSS.

jQuery

Vamos começar com o básico: JavaScript e jQuery são falsamente confundidos. A animação de JavaScript é rápida. A do jQuery é mais lenta. Por quê? Porque nunca fez parte dos objetivos de design do jQuery ser um motor performático para animação:

 

Note-se que layout thrashing é o que causa travamento (stuttering) no início das animações, a coleta de lixo é o que causa stuttering durante as animações, e a ausência de RAF é o que geralmente produz baixa taxas de frames.

Exemplos de implementação

Evitar o layout thrashing consiste simplesmente em juntar as consultas e as atualizações DOM:


1var currentTop,
2    currentLeft;
3
4/* With layout thrashing. */
5currentTop = element.style.top; /* QUERY */
6element.style.top = currentTop + 1; /* UPDATE */
7
8currentLeft = element.style.left; /* QUERY */
9element.style.left = currentLeft + 1; /* UPDATE */
10
11/* Without layout thrashing. */
12currentTop = element.style.top; /* QUERY */
13currentLeft = element.style.left; /* QUERY */
14
15element.style.top = currentTop + 1; /* UPDATE */
16element.style.left = currentLeft + 1; /* UPDATE */

As consultas que ocorrem após uma atualização forçam o navegador a recalcular os dados de estilo computadorizado da página (enquanto levam efeitos da nova atualização em consideração). Isso produz uma sobrecarga significativa para animações que estão sendo executadas ao longo de pequenos intervalos de apenas 16ms.

Da mesma forma, implementar RAF não precisa de uma reformulação significativa de sua base de código existente. Vamos comparar a implementação básica de RAF contra a de setInterval:


1var startingTop = 0;
2
3/* setInterval: Runs every 16ms to achieve 60fps (1000ms/60 ~= 16ms). */
4setInterval(function() {
5    /* Since this ticks 60 times a second, we divide the top property's increment of 1 unit per 1 second by 60. */
6    element.style.top = (startingTop += 1/60);
7}, 16);
8
9/* requestAnimationFrame: Attempts to run at 60fps based on whether the browser is in an optimal state. */
10function tick () {
11    element.style.top = (startingTop += 1/60);
12}
13
14window.requestAnimationFrame(tick);

 

RAF produz o maior boost possível para o desempenho de animação que você pode fazer com uma única alteração em seu código.

Transições CSS

As transições CSS superam jQuery ao descarregar a lógica de animação para o próprio navegador, que é eficiente em 1) otimizar a interação DOM e o consumo de memória para evitar stuttering, 2) alavancar os princípios de RAF nos bastidores e 3) forçar a aceleração de hardware (aproveitando o poder da GPU para melhorar o desempenho da animação).

A realidade, contudo, é que essas otimizações também podem ser realizadas diretamente no JavaScript. GSAP vem fazendo isso há anos. Velocity.js, um novo mecanismo de animação, não só alavanca essas mesmas técnicas, mas também vai vários passos além – como veremos em breve.

Chegar a um acordo com o fato de que a animação JavaScript pode rivalizar com bibliotecas de animação CSS é só o primeiro passo em nosso programa de reabilitação. O segundo passo é perceber que a animação JavaScript pode realmente ser mais rápida do que eles.

Vamos começar analisando os pontos fracos das bibliotecas CSS de animação:

  • As transições forçam as taxas de aceleração do hardware do GPU, resultando em stuttering e banding em situações de alto estresse. Esses efeitos são agravados em dispositivos móveis (em específico, o sttutering é um resultado da sobrecarga que ocorre quando os dados são transferidos entre a thread principal do navegador e a thread do compositor. Algumas propriedades CSS, como transforms e opacidade, são imunes a essa sobrecarga). A Adobe fala sobre esse assunto aqui.
  • As transições não funcionam para versões abaixo do Internet Explorer 10, causando problemas de acessibilidade para sites de desktop, já que IE8 e IE9 continuam sendo muito populares.
  • Pelo fato de as transições não serem nativamente controladas pelo JavaScript (elas só são desencadeadas por JavaScript), o navegador não sabe como otimizar em sincronia as transições com o código JavaScript que as manipula.

 

Em contrapartida, as bibliotecas de animação baseadas em JavaScript podem decidir por si mesmas quando permitir a aceleração de hardware, elas funcionam inerentemente em todas as versões do IE, e são perfeitamente adequadas para otimizações de animação em lote.

Minha recomendação é usar as transições brutas de CSS quando você estiver desenvolvendo exclusivamente para celular e suas animações forem compostas exclusivamente de mudanças de estado simples. Em tais circunstâncias, as transições são uma solução nativa de alto desempenho e que lhe permitem manter toda a lógica de animação dentro de suas folhas de estilo e evitar inchaço da sua página com bibliotecas JavaScript. Entretanto, se você estiver projetando uma interface de usuário complexas, cheia de floreios, ou se estiver desenvolvendo uma aplicação com informações de estado, sempre utilize uma biblioteca de animação para que as suas animações continuem com bom desempenho e seu fluxo de trabalho permaneça controlável. A Transit é uma biblioteca que faz um trabalho fantástico na gestão das transições brutas de CSS.

Animação em JavaScript

Ok, então o JavaScript pode levar vantagem quando se trata de desempenho. Mas quão mais rápido exatamente ele pode JavaScript ser? Bem, para começar, rápido o suficiente para construir uma intensa demonstração de animação em 3D que você normalmente só vê construída com WebGL. E rápido o suficiente para construir um teaser multimídia que você costuma ver construído com Flash ou After Effects. E também rápido o suficiente para construir um mundo virtual que você normalmente só ver construído com canvas.

Para comparar diretamente o desempenho das principais bibliotecas de animação, incluindo Transit (que usa transições CSS), tenha em mente a documentação do Velocity em VelocityJS.org.

A dúvida continua: como exatamente o JavaScript atinge seus altos níveis de desempenho? Abaixo está uma pequena lista do que as otimizações baseadas em animação JavaScript são capazes de realizar:

  • Sincronizar o DOM entre a pilha de toda a cadeia de animação para minimizar o layout thrashing.
  • Fazer cache nos valores de propriedade entre as chamadas encadeadas, a fim de minimizar a ocorrência de consulta de DOM (que é o calcanhar de Aquiles do desempenho de animação DOM).
  • Fazer cache de taxas de conversão de unidades  (por exemplo, px a%, em, etc.) por meio de elementos irmãos na mesma chamada.
  • Ignorar a atualização do estilo quando as atualizações seriam imperceptíveis visualmente.

 

Revendo o que aprendemos anteriormente sobre o layout thrashing, o Velocity.js aproveita essas melhores práticas para armazenar em cache os valores finais de uma animação para serem reutilizados como os valores de início da animação subsequente, evitando assim fazer um novo query do DOM para os valores iniciais do elemento:


1$element
2    /* Slide the element down into view. */
3    .velocity({ opacity: 1, top: "50%" })
4    /* After a delay of 1000ms, slide the element out of view. */
5    .velocity({ opacity: 0, top: "-50%" }, { delay: 1000 });

 

No exemplo acima, a segunda chamada do Velocity sabe que deve iniciar automaticamente com um valor de opacidade de 1 e um valor superior a 50%.

O navegador, em última instância, poderia realizar ele mesmo muitas dessas otimizações, mas fazer isso implicaria agressivamente em reduzir as maneiras pelas quais o código de animação poderia ser trabalhado pelo desenvolvedor. Assim, pela mesma razão que jQuery não usa RAF (veja acima), os navegadores nunca impõem otimizações que têm uma pequena chance de quebrar a especificação ou de se desviar do comportamento esperado.

Finalmente, vamos comparar as duas bibliotecas de animação JavaScript (Velocity.js e GSAP) uma contra a outra.

  • GSAP é uma plataforma de animação rápida e rica em recursos. A velocidade é uma ferramenta leve para melhorar drasticamente o desempenho de animação UI e o fluxo de trabalho.
  • GSAP exige uma taxa de licenciamento para vários tipos de empresas. Velocity é gratuito e open source por meio da licença MIT ultrapermissiva.
  • Em termos de performance, GSAP e Velocity são indistinguíveis em projetos do mundo real.

 

Minha recomendação é usar GSAP quando você necessitar de um controle preciso sobre over timing (por exemplo remapeamento, pausa/resumo/procurar), movimento (por exemplo, caminhos da Curva de Bezier), ou agrupamento/sequenciamento complexos. Essas características são fundamentais para o desenvolvimento do jogo e certos aplicativos de nicho, mas são menos comuns nas UI de web apps.

Velocity.js

Fazer referência ao rico conjunto de recursos do GSAP não quer dizer que o Velocity é fraca em recursos. Pelo contrário. Em apenas 7Kb quando compactados, Velocity não só reproduz todas as funcionalidades do $.animate() do jQuery, mas também empacota em animação colorida, transforms, loops, easings, animação classe e rolagem.

Em suma, Velocity é o melhor do que jQuery, jQuery UI e as transições CSS combinadas.

Além disso, do ponto de vista de conveniência, Velocity usa internamente o método do jQuery $.queue(), e assim interage perfeitamente com as funções $.animate(), $.fade() e $.delay do jQuery. E, uma vez que a sintaxe do Velocity é idêntica à do $.animate(), nenhum código da sua página precisa mudar.

Vamos dar uma rápida olhada em Velocity.js. Em um nível básico, Velocity funciona de forma idêntica ao $.animate():


1$element
2    .delay(1000)
3    /* Use Velocity to animate the element's top property over a duration of 2000ms. */
4    .velocity({ top: "50%" }, 2000)
5    /* Use a standard jQuery method to fade the element out once Velocity is done animating top. */
6    .fadeOut(1000);

 

Em seu nível mais avançado, podem ser criados cenários de rolagem complexos com animações 3D – com apenas duas linhas simples de código:

1$element
2    /* Scroll the browser to the top of this element over a duration of 1000ms. */
3    .velocity("scroll", 1000)
4    /* Then rotate the element around its Y axis by 360 degrees. */
5    .velocity({ rotateY: "360deg" }, 1000);

 

Conclusão

O objetivo do Velocity é permanecer líder no desempenho de animação do DOM. Dê uma olhada em VelocityJS.org para saber mais sobre o último.

Antes de terminarmos, lembre-se de que uma interface performática vai além de escolher a biblioteca de animação certa. O resto da sua página também deve ser otimizado. Saiba mais a partir destas palestras fantásticas do Google:

—–

Artigo de Julian Shapiro, publicado originalmente no iMasters.