Hack e PHP: Usando as Linguagens em aplicações Web

Hack e PHP: Usando as Linguagens em aplicações WebO aprimoramento dos processos de desenvolvimento, a necessidade de otimização de recursos e a possibilidade de aumentar a influência e participação no mercado de software tem estimulado grandes companhias a lançar suas próprias linguagens de programação. Isso aconteceu com a Microsoft, o Google, a Apple e agora também o Facebook. Diante do rápido crescimento e a necessidade de uma tecnologia capaz de proporcionar eficiência no desenvolvimento e no processamento, mas ao mesmo tempo permitir a adoção de forma progressiva a companhia criou uma linguagem derivada e que mantém uma relação simbiótica com o PHP, por ser essa a base de seu software web responsável pela rede social de mesmo nome. A linguagem Hack apresenta vários recursos típicos de linguagens compiladas e com tipos estáticos, mas ao mesmo tempo permite o uso e convivência com variáveis, retornos e parâmetros com tipos dinâmicos, típicos de linguagens interpretadas. As técnicas para permitir essa convivência harmônica demonstram ser bastante eficazes, apesar da complexidade adicional que agregam. Realizaremos a comparação entre as linguagens PHP e Hack e analisamos as características, vantagens e desvantagens da novíssima linguagem, que foi anunciada em 2014.

Histórico

Em 2010 um tradutor e compilador PHP chamado HipHop Compiler (HPHPc, na abreviação em inglês) foi anunciado pela equipe do Facebook depois de dois anos de desenvolvimento. Essa ferramenta traduzia códigos em PHP para C++ e depois os compilava num processo que era executado de forma antecipada, em oposição ao comportamento usual do servidor PHP que realiza a compilação no momento que a página/funcionalidade é chamada. Ainda em 2010 uma extensão com pequenas mudanças na linguagem PHP foi criada pela equipe do Facebook para diminuir o tempo de desenvolvimento e permitir que o PHP fosse capaz de compreender fragmentos de documentos XML, conforme o exemplo da Listagem 1. Essa extensão foi chamada de XHP e além de facilitar o desenvolvimento e manutenção da camada de apresentação pelos desenvolvedores front-end também auxiliava em dificultar ataques cross-site scripting.

Listagem 1. Código XHP

 <?php

  if ($_POST[‘name’]) {

    ?><span>Hello, {$_POST[‘name’]}</span><?

  } else {

  ?> echo

      <form method=”post”>

        What is your name?<br />

        <input type=”text” name=”name” />

        <input type=”submit” />

      </form>;

  <?

  }

Todos esses esforços em desenvolver melhorias tanto para a linguagem quanto para o processo de compilação dos softwares em PHP do Facebook têm sido empregados com o intuito de reduzir o overhead derivados da ineficiência em relação ao custo de processamento da forma original de compilação das aplicações desenvolvidas em PHP. Continuando com esses esforços a equipe do Facebook trabalhou no desenvolvimento de um compilador nativo para o PHP, que fosse capaz de gerar binários a partir de código PHP, mas com eficiência superior ao processo de compilação tradicional da linguagem. Nesse sentido, a equipe anunciou em 2012 que estava realizando testes com uma nova máquina virtual chamada HipHop (HHVM, na sigla em inglês) e em 2013 completaram a migração do processo de compilação da HPHPc para a HHVM.

Apesar de ter demonstrado ganhos de eficiência de até 11, 6 vezes com o uso da máquina virtual HipHop dificuldades no processo de desenvolvimento e testes inerentes à ausência de tipos da linguagem PHP motivaram a equipe do Facebook a criar uma nova linguagem, baseada em PHP, que permitisse a inferência de possíveis falhas de programação ainda em tempo de desenvolvimento.

A linguagem Hack

A Hack é uma linguagem de programação lançada em 2014, de código aberto, sob licença BSD, para a máquina virtual HipoHop e que interopera sem problemas com PHP. A Hack concilia o ciclo de desenvolvimento rápido da PHP com a disciplina provida pela definição de tipos de forma estática e permite emprego gradual, adicionando muitas características comumente encontradas em outras linguagens modernas.

A Hack foi criada a partir da extensão da linguagem PHP, introduzindo tipos definidos estaticamente através do conceito de anotação de tipos (type annotation, em inglês). Devido aos tipos definidos o analisador da máquina virtual HipHop pode detectar erros de programação durante o processo de checagem de código ainda em tempo de desenvolvimento.

Essa etapa de checagem de código, conforme a Listagem 2, permite que o analisador verifique todas as dependências de um trecho do código em todos os arquivos do projeto que estão relacionados e permite que se saiba se uma alteração tem reflexos em outros trechos do código da aplicação e informa onde essas alterações impactaram e como.

Listagem 2. Código Hack

 <?hh

  class MinhaClasse {

    public function alpha(): int {

      return 1;

    }

   public function beta(): string {

      return ‘olá teste’;

    }

 }

 function f(MinhaClasse $minha_inst): string {

    //corrija-me!

    return $ minha_inst->alpha();// o analisador detecta um erro aqui

  }

Devido ao fato de a PHP ser uma linguagem com tipos definidos dinamicamente e a Hack ser uma proposta de conversão gradativa e evolutiva as premissas do projeto da linguagem definiram que seria necessário suportar características de PHP que não são comuns em linguagens de tipos definidos de forma estática. Se não fosse adotada essa premissa, os projetos atuais em PHP que fossem ser migrados para a linguagem Hack teriam de ter grande parte dos códigos existentes em PHP reescritos, e essa não é a proposta do Facebook.

Apesar de ser definida pelo Facebook como uma nova linguagem a Hack é uma mistura de extensão do PHP com adição de recursos e mudanças de paradigmas, mas mantendo a compatibilidade com código PHP nativo. A extensão dos arquivos de código continua sendo .php (opcionalmente podendo ser .hh) e o conceito de ligação entre os arquivos de código que compõem um projeto continua sendo através de inclusão (include e require).

Para suportar a característica de falta de escopo léxico a Hack implementou o conceito de tipo não resolvido (unresolved type, em inglês). Isso significa que o verificador adia o momento no qual deduzirá o tipo de uma variável ou do retorno de uma função. O momento no qual se deduzirá o tipo de uma variável será quando houver uma chamada de função ou algum tipo de anotação que determine especificamente que tipo é esperado.

A Máquina Virtual HipHop e a linguagem Hack

A HHVM é uma máquina virtual projetada para executar programas escritos em Hack e PHP e utiliza uma abordagem de compilação JIT para alcançar uma eficiência superior em quanto mantém a flexibilidade de desenvolvimento que o PHP provê. O Facebook alega que o objetivo dessa linguagem é adicionar novas características, mas manter a convivência com o PHP, assim como investir esforços para fazer com que a nova linguagem continue sendo compatível com sua predecessora, conforme as duas evoluam. Essa estratégia de compatibilidade foi implementada através de três conceitos importantes na avaliação do código pela HHVM: tipos por anotação (annotation types, em inglês), modo do hack (hack mode, em inglês) e na combinação de tipos não resolvidos (unresolved types, em inglês) e tracelet.

A HHVM infere sobre tipos latentes (ainda não resolvidos) através da estruturação do JIT vinculado ao conceito de tracelet, que é um bloco básico especializado para um conjunto particular de tipos descobertos em tempo de execução para os valores de entrada. O tracelet permite que a HHVM eficientemente conheça os tipos do programa através da observação do mesmo.

O tipo por anotação permite que seja acrescentada uma definição do tipo na assinatura do método ou na declaração de uma variável ou classe. Como essa definição de tipo é um recurso adicional, caso não seja definido o analisador considerará o código como um PHP tradicional. Entretanto, essa convivência pode gerar conflitos quando uma função define seu tipo de acordo com condições dinâmicas, mas o objeto ou função que venha a chamá-lo em algum momento espere um retorno de um determinado tipo. Para esses casos é invocado o conceito adiamento de definição (unresolved type, em inglês) e tracelet. O analisador continua com a verificação até que em algum trecho do código o tipo não resolvido seja utilizado como se fosse de um determinado tipo e nesse momento ele verifica a compatibilidade de tipos.

Para resolver questões como essa é possível ainda que o programador assuma o controle da verificação e determine que um trecho de código não deva ser analisado considerando tipos. Nesses casos é possível definir o modo da linguagem, informando o nível de análise crítica que a HHVM deve fazer do trecho do código. Com as definições, por exemplo, //partial ou //unsafe é possível criar exceções de blocos de código que fogem à regra geral de tipos definidos estaticamente da Hack.

Com o uso da HHVM o código continua sendo transformado em código nativo somente quando necessário, não sendo necessário um ciclo de compilação anterior, já que essa etapa é feita por um compilador em tempo de execução (JIT Compiler, em inglês).

A HHVM pode ser integrada a IDEs para que a checagem de tipos ocorra de forma automática e transparente para o usuário. Para a plataforma Linux já existem plug-ins para softwares de desenvolvimento (Emacs e Vim). Para permitir essa checagem a máquina virtual disponibiliza um serviço que pode ser chamado pelo comando hh_client, que varrerá o diretório especificado e analisará as dependências e tipos de todos os arquivos PHP do projeto. Esse serviço não só valida o código como aponta onde há erro e qual o erro que deve ser corrigido.

Arquitetura da Máquina Virtual

Foi concebida sabendo da necessidade de uma IDE que seja capaz de fazer a checagem de erros em tempo de desenvolvimento. A solução foi criar um servidor que funciona como um serviço, que mantém o rastreamento das dependências entre os arquivos, classes e métodos e faz checagem de tipo de todos esses arquivos, recalculando os tipos quando alguma coisa é alterada. O monitoramento das mudanças ocorre quando um arquivo é salvo, já que o processo escuta os eventos do kernel de alteração de arquivo em disco.

Os requisitos

Uma das grandes características do PHP é que o desenvolvedor poder alterar parte do código diretamente no servidor, pressionar F5 no navegador e visualizar a alteração imediatamente. A Hack e a HHVM mantêm essa característica e por isso foram determinadas restrições em relação ao desempenho da checagem, como uma latência muito baixa, sendo menos de 200 milissegundos para reavaliar o contexto quando houver mudança em arquivos num cenário de operação cotidiana e alguns segundos quando for feita uma operação de versionamento. Uma segunda premissa foi a de que a HHVM deveria ser capaz de funcionar com controle de versão e ser estável, e por isso testes consistentes foram conduzidos antes de migrar o sistema do Facebook para essa tecnologia, segundo a equipe que desenvolveu a tecnologia.

Outro aspecto importante que foi considerado como condição para o projeto foi a escalabilidade e isso foi resolvido empregando paralelismo de tarefas, cache e execução de tarefas de forma incremental. As checagens de tipo são feitas pontualmente de acordo com a mudança feita, sem verificar tudo novamente, mas sim o que foi alterado (que é monitorado constantemente).

Hack versus PHP

O principal argumento da equipe do Facebook para a criação da linguagem Hack foi a ausência de tipos estáticos e a consequente dificuldade para se automatizar testes de checagem de código. Já a criação da HHVM visou incrementar a eficiência, diminuindo o custo de processamento, e permitir que checagens de código automatizadas fossem feitas em tempo de desenvolvimento, aumentando a produtividade dos programadores através da identificação mais rápida de defeitos. O anúncio da linguagem Hack traz uma séria de recursos que auxiliam na identificação de erro, mas também um novo paradigma para o universo de desenvolvedores PHP, apesar de manter a compatibilidade com códigos legados através de um modelo de convivência entre as linguagens.

O Facebook adotou a linguagem PHP para o desenvolvimento do software da sua rede social e a utiliza desde a sua criação em 2003. Com o crescimento a rede social tem relatado problemas de eficiência e produtividade ao atingir larga escala em desenvolvimento e uso da tecnologia e talvez por isso venha trabalhando no que considera um aperfeiçoamento do PHP, seguindo no sentido de tornar a tecnologia menos flexível para atingir uma melhor eficiência e produtividade. Mesmo o modelo de transição apresentado pela linguagem sendo necessário para a migração gradual de softwares existentes e trazendo flexibilidade e liberdade ao desenvolvedor a convivência entre os paradigmas de tipos dinâmico e estático na mesma linguagem traz complexidade adicional, tanto para o desenvolvedor que deseja aprender a tecnologia quanto para a máquina virtual, que tem de lidar com múltiplos cenários (tipos estáticos, dinâmicos e uma mistura entre os dois em alguns casos). Outro aspecto importante a ser considerado é a falta de suporte ao sistema operacional Windows e a ambientes de desenvolvimento integrado (IDEs) populares no mercado, como PhpStorm, Sublime e NetBeans, já que somente estão disponíveis plug-ins para as ferramentas de desenvolvimento Emacs e Vim, ambas disponíveis somente para Linux e Mac OS.

Apesar de a linguagem PHP suportar oito tipos primitivos (boolean, integer, float, string, array, object resource e null) não é possível definir o tipo de retorno de um método, de uma variável ou de um parâmetro. A exceção ocorre a partir da versão 5.0 e 5.1, nas quais é possível utilizar o conceito de indução de tipo definido pelo usuário ou de um vetor, respectivamente. Entretanto, nos dois casos, a linguagem aceita, nesses casos, receber um parâmetro com valor nulo. Já na linguagem Hack é possível definir os tipos de membros de classe, parâmetro de funções e retorno de funções. Todos os outros tipos são inferidos pela HHVM.

Para permitir a convivência com código PHP tradicional a linguagem Hack introduz o conceito de modo (hack mode, em inglês), que é a definição do nível de rigor ou flexibilidade que deve ser aplicado à checagem. Os modos disponíveis são:

  • strict – Todo o código deve ser no padrão Hack (com tipos anotados) e tudo deve ser checado pela HHVM.
  • partial – O verificador deve checar tudo que for possível, decidindo isso de forma automática e ignorando o que não for possível checar.
  • decl – Nada deve ser checado. Significa que o desenvolvedor deseja usar o PHP nativo.
  • UNSAFE – significa que deve ser criada uma exceção no modo de checagem até que termine o bloco seguinte.

O modo strict não permite o uso de funções que não sejam declaradas/importadas pelo arquivo que está sendo checado. Isso significa que funções que deveriam ser visíveis devido aos includes e requires realizados em etapas anteriores não serão analisadas e consideradas válidas. É possível ainda que haja trechos de códigos (retorno de método, parâmetro ou membro de classe) sem tipo definido. Para isso deve ser usado o modo partial ou decl ou ainda definir um bloco com UNSAFE.

A falta de tipos estáticos em PHP demanda que o desenvolvedor conheça detalhes da implementação ou leia comentários do código (que eventualmente pode não existir ou estar desatualizado) para ter ciência exata dos tipos aceitos e retornados por classes e métodos. Essa questão torna-se ainda mais importante quando vários desenvolvedores trabalham em paralelo no mesmo projeto. Isso pode gerar maior necessidade de comunicação e documentação ou facilitar a inserção de códigos com defeito. Essas demandas, no entanto, podem ser compensadas pelo fato de ser necessário se escrever menos código para executar as mesmas funções do que se escreveria em linguagens com tipos estáticos.

A inferência de tipos realizada pela HHVM, conforme o exemplo da Listagem 3, ocorre através da verificação do uso dos valores de um objeto ou variável e não necessariamente da declaração. Esse conceito é aplicado, por exemplo, a vetores. É possível criar um vetor somente com valores inteiros e adicionar um uma string na posição seguinte. O verificador permitirá isso por que na verdade esse não é um vetor de inteiros, como poderia parecer, mas um vetor de inteiros ainda não resolvido, que parece ser de inteiros, mas ainda não é. Na Hack há um tipo chamado mixed, e nesse caso o verificador infere que esse é o tipo do vetor em questão. Entretanto no momento que for tentado usar o vetor citado como um vetor de inteiros (por exemplo, retornando-o numa função que está declarada tendo como retorno um vetor de inteiros) o verificador vai invalidar o código. Na Tabela 1 comparamos os tipos suportados por cada linguagem.

Listagem 3. Inferência de tipos em Hack

 <?hh

 class MinhaClasse {

    public function fazer_algo():

        Vector<int> {    $v = Vector {1, 2};

        $v[] = “a”;   

         return $v; //neste ponto o verificador aponta erro

    }

 }

Tipo PHP Hack
Boolean sim sim
Integer sim sim
Float sim sim
String sim sim
Array sim sim
Object sim sim
Resource sim sim
Null sim sim
(deve ser definido explicitamente)
Nullable (?int, ?myclassname) não sim
Mixed não sim
Touples não sim
Closures não sim
Collections não sim
Generics não sim
Constraints não sim
Type não sim
Aliasing não Sim

Tabela 1. Tipos suportados pelo PHP e Hack

Na Listagem 4 vemos o uso do aliasing para redefinir o tipo existente (semelhante a função alias no PHP) e dos tipos genéricos (parecido com o que acontece nas linguagens Java e C#) que o PHP não suporta.

Listagem 4. Uso de aliasing e tipos generics

  // Uso de aliasing

  <?hh

 type MyInt = int;

  function foo(MyInt $mi): void {

   //fazer alguma coisa

  }

 //exemplo de uso do tipo generics

  <?hh

  class Box<T> {

    protected T $data;

    public function __construct(T $data) {

      $this->data = $data;

    }

    public function getData(): T {

      return $this->data;

    }

  }

  Box<int> $my_box = new Box<int>();

Características da PHP não suportadas na Hack

Apesar da linguagem Hack ser uma extensão da PHP há características nativas da linguagem original não suportadas na nova linguagem. Entretanto a máquina virtual HipHop suporta todos os recursos nativos do PHP e por isso se o código for aberto pela tag <?php tais recursos podem ser utilizados, mas não estará em uso a linguagem Hack e por consequência nenhum dos recursos da nova linguagem estará presente. Entre os recursos desativados alguns dos mais significativos são o uso de variáveis globais, passagem de valores por referência e marcação para silenciar erros que poderiam ser lançados por uma função.

A linguagem Hack traz características típicas de linguagens com tipos estáticos aliadas a um modelo de convivência com códigos PHP tradicionais, que visivelmente foi mantido para permitir uma transição gradual dos softwares do Facebook. Esse novo paradigma demanda projetos de software e implementações distintas da que a comunidade de desenvolvedores PHP está habituada.

A característica de conceito de tipos definidos em tempo de desenvolvimento requer mais linhas de código e estrutura arquitetural mais rígida e devido à consequente disciplina requerida pode fazer com que haja uma resistência por parte dos programadores pelo fato disso exigir que se abra mão de certa flexibilidade. Por outro lado, acrescenta grande capacidade de automatização de testes e ajuda a evitar erros durante a programação. Devido a incompatibilidades específicas vários softwares livres e proprietários devem demonstrar serem incompatíveis com a nova linguagem no seu modo strict, apesar de poderem ser executados usando a máquina virtual HipHop.

O fato de ser desenvolvida, apoiada e testada por uma empresa de destaque a área de software facilita no convencimento da sua viabilidade e confiabilidade, mas por ser muito recente requer acompanhamento para averiguar se será adotada em larga escala, pela comunidade em geral. Por se tratar de uma mudança de paradigma e apesar do modelo de convivência e das opções de modos da linguagem a mesma aponta mais para uma ruptura gradual com o PHP do que uma evolução em conjunto. A possibilidade de se programar “misturando” as duas linguagens é adequada para permitir uma maior aceitação da mesma no início, mas mesmo o Facebook afirmando que empreenderá esforços para fazer com que a nova linguagem continue sendo compatível com sua predecessora essa convivência tende a ser abandonada a logo prazo e o modo strict tende a se tornar padrão, dada as vantagens que a definição de tipos de forma estática apresenta.

Esperamos que esse artigo tenha lhe ajudado na compreensão das novas tecnologias propostas pelo Facebook e provoque uma reflexão sobre o futuro da linguagem PHP quando confrontada com suas vantagens e desvantagens considerando produtividade, eficiência e o paradigma de tipo que é adicionado pela Hack.

Retirado de:  Hack e PHP: Usando as Linguagens em aplicações Web

Anúncios

O que são Gateways de Pagamentos ?

Lógica de uma compra Web

Lógica de uma compra Web

Gateways de Pagamento são interfaces utilizadas por empresas de e-commerce que servem para a transmissão de dados entre clientes, comerciantes e seus bancos. Os Gateways de Pagamento são utilizados pelas empresas que fazem negócios online para processar pagamentos com cartão de crédito, e também podem ser equipados para serem utilizados em pagamentos via telefone. Um grande número de companhias oferecem tais serviços, a taxas que podem variar dependendo das políticas da empresa e os tipos de serviços que oferecem.

Um Gateway de Pagamento funciona basicamente como um terminal de cartão de crédito visto em lojas tradicionais de varejo. Quando um cliente envia informações de seu cartão de crédito, a informação é codificada e transmitida através do Gateway de Pagamento. A interface envia as informações para o banco do cliente, confirmando se o cartão é válido e se existem fundos suficientes disponíveis ou de crédito para que se processe o pagamento, enviando a aprovação caso tudo esteja correto. Esta informação é armazenada, permitindo que o comerciante apresente uma listagem de todas as transações realizadas a seu banco, para posteriormente receber os fundos.

Os Gateways de Pagamento permitem que os comerciantes processem cartões de crédito com segurança e praticidade. Ele protege os comerciantes contra cartões roubados, falsificados ou sem fundos suficientes para realizar uma transação. Eles também oferecem segurança aos consumidores, uma vez que os comerciantes não têm acesso aos dados financeiros, como o número do cartão, protegendo-os de criminosos que atuam na internet.

Ao utilizarem Gateways de Pagamento, os comerciantes geralmente almejam segurança, que seja compatível com sua plataforma de e-commerce e bancos, e que haja um suporte ágil e eficiente em caso de necessidades. Há diversos pacotes que incluem o Gateway de Pagamento junto com outras soluções para empresas de e-commerce.

Desenvolvimento de Software AD HOC

Quem gerencia projetos, ou já contratou empresas para executar projetos, sabe que uma das maneiras de se diminuir custos e prazos de entrega é diminuir a qualidade do produto, não utilizar processos definidos, não gerar documentação, não executar fases previstas no desenvolvimento de software e não planejar e executar testes apropriados.

É justamente aqui que se está se armando uma grande armadilha. Os envolvidos podem não estar cientes das consequências geradas da entrega do sistema desenvolvido sem ter sido dada a devida atenção à qualidade. Todo numerário economizado no desenvolvimento poderá e será gasto na geração de novas versões corrigidas que deverão ser entregues ao cliente, além de termos um custo imensurável ligado a imagem do produto e da própria empresa.

Outro efeito da falta da utilização de processos definidos e da engenharia de software é a geração de sistemas não amigáveis para uso, apresentando informações consideradas não fidedignas e com erros de funcionamento. Neste cenário, nenhum usuário se interessará em utilizar o sistema desenvolvido, fazendo que o projeto fracasse e que seja perdido todo o investimento realizado.

Imagine o cenário de um sistema de cobrança bancária, para o qual você poderia estar participando de um processo de manutenção corretiva, sem ter documentação do sistema e sem ter conhecimento das regras de negócio implementadas. Imagine também que está manutenção está relacionada à correção de informações, que estão sendo geradas incorretamente. Agora, para finalizar, imagine que o sistema possui milhares de linhas de código e você é novo na equipe, sendo que os programadores que implementaram o sistema não estão mais na empresa.

Por mais que este cenário seja assustador, podemos encontrá-lo neste exato momento em diversos lugares, enquanto você lê este artigo.

O que faltou no projeto de desenvolvimento deste tipo de sistema?

Tecnicamente, poderia citar:

  • Engenharia de Software e utilização de processos definidos
  • Utilização de metodologia de desenvolvimento de sistema alinhado ao paradigma associado ao projeto
  • Utilização de Design Patterns quando apropriado
  • Documentação adequada
  • Planejamento e execução de testes adequados

Do lado humano, poderia citar:

  • Participação no projeto de profissionais com conhecimento dos itens técnicos acima relacionados
  • Falta de percepção do patrocinador do projeto, do valor e benefícios de se utilizar os itens acima relacionados
  • Falta de conhecimento dos envolvidos no projeto, das melhores práticas de mercado para desenvolvimento de software e de seus benefícios

Já tive a oportunidade de presenciar de empresários e executivos, o seguinte comentário:

Prefiro o desenvolvimento de software sem utilizar Orientação a Objetos e processos de desenvolvimento, pois é mais barato e mais rápido de se disponibilizar o sistema para os usuários.

Desenvolver código baseado nesta ideia pode gerar as seguintes consequências:

  • Implantação de sistemas cheios de erros, constantemente entrando em manutenção;
  • Sistemas que podem não atender às expectativas dos Stakeholders;
  • Softwares com alto custo de manutenção;
  • Softwares difíceis de serem utilizados, não atendendo às necessidades dos StakeHolders;
  • Grande insatisfação dos usuários;
  • Fracasso do projeto.

O desenvolvimento de sistema sem utilizar processos, AD HOC, acaba custando muito mais caro, gerando insatisfação.

Já presenciei várias vezes, pessoas que simplesmente não queriam e não utilizavam sistemas disponibilizados pela empresa, por pelo menos um dos seguintes motivos:

  • Não confiavam nos dados por eles apresentados
  • Porque não atendiam a suas expectativas e necessidades do dia a dia
  • Porque tinham usabilidade ruim
  • Porque viviam apresentando problemas de funcionamento

O detalhe mais triste é que as empresas onde estas pessoas trabalhavam, investiram dinheiro e tentaram disponibilizar sistemas para melhorar a produtividade e diminuir custos das mesmas. O resultado foi exatamente o contrário, além de não diminuir custos, nem aumentar a produtividade, as empresas perderam todo o investimento realizado e o sistema caiu em desuso, literalmente, sendo jogado fora.

Bibliografia

Artigo Retirado de Profissionais TI

 

Chamada VOIP com servidor SIP Redirect: Entenda como funciona este modelo

Chamada VOIP com servidor SIP Redirect: Entenda como funciona este modelo

Chamada VOIP com servidor SIP Redirect: Entenda como funciona este modelo

Estou trabalhando em uma empresa de Telefonia VOIP e sempre escuto por aqui sobre o servidor sip entre outros termos. Como sou um pessoa bem curiosa fui procurar saber mais sobre como é feito redirecionamento das ligações e alguns termos. Achei legal estar disponibilizando essas curiosidades com vocês.

As ligações VOIP, assim como qualquer informação que trafega na Internet, também se baseiam em tráfego de pacotes que utilizam um protocolo (regras que regulamentam a comunicação entre duas máquinas).

O protocolo utilizado nas ligações VOIP pode ser SIP, IAX, h.323, MGCP, XMPP, ou outros, porém, atualmente o protocolo SIP tem sido melhor aceito pelas empresas de telecom tendo uma boa difusão no mercado de telefonia.

Hoje falaremos um pouco sobre o funcionamento deste protocolo e abordaremos diálogo SIP com um servidor proxy interligando dois ramais.

No diagrama SIP abaixo podemos observar o funcionamento de uma ligação VOIP entre dois ramais cadastrados no mesmo servidor SIP:

Ligação VOIP entre: Ramal SIP A <=> Servidor SIP <=> Ramal SIP B

Neste exemplo de chamada usando o protocolo SIP é possível observar facilmente as mensagens trocadas para estabelecer a chamada. Abaixo o passo a passo do diagrama:

1 – O usuário Lucien discou para o usuário Carlos, neste momento o ramal do Lucien encaminhou o INVITE para o servidor.sip (servidor em que está registrado);

2 – O servidor encaminhou o INVITE para o ramal do usuário Carlos que está registrado no mesmo servidor (ligação interna), e respondeu ao Lucien “100 Trying” informando que está tentando efetuar a ligação;

3 – O ramal do Carlos quando recebe a solicitação da chamada envia o “180 Ringing” para o servidor, informando que recebeu o INVITE e está chamando;

4 – O servidor repassa para o ramal do Lucien a mensagem informando que o telefone está chamando;

5 – O Carlos atende o telefone, neste momento o ramal dele envia “200 OK” informando que o telefone foi atendido e já é possível estabelecer o fluxo de mídia;

6 – O servidor repassa o “200 OK” para o ramal originador da chamada (Lucien) que responde com “ACK” (Acknowledge) confirmando que recebeu o “200 OK”;

7 – O servidor repassa o “ACK” para o ramal do Carlos que ao receber a confirmação abre a sessão de mídia diretamente entre os dois ramais, dando inicio a conversação entre os dois usuários.

8 – O usuário Carlos encerra a chamada, nesse momento o ramal envia a mensagem de BYE, informando o sinal de desligamento.

9 – O servidor repassa o BYE para o ramal do Lucien, que responde com 200 Ok, confirmando o encerramento da chamada.

Através desta mesma imagem podemos fazer algumas observações:

Sempre que o ramal destino estiver disponível e receber a requisição de chamada (INVITE) ele retorna o Ring (180 Ringing) informando que está chamando. Caso este ramal esteja ocupado, não esteja registrado ou por algum outro motivo não possa atender ele irá retornar um código de erro.

O fato de a mídia estar passando diretamente de um ramal para o outro (ponto-a-ponto), é um forte indicativo do Servidor.sip estar atuando como um SIP Proxy.

Em uma chamada com o áudio passando ponto-a-ponto o servidor não tem como fazer controle de mídia ou gravar as chamadas, porém o consumo de banda é muito menor, afinal só trafegam os pacotes Sip (puramente texto) para o controle da chamada no Servidor.sip .

Neste caso a ligação VOIP está sendo feita entre dois ramais cadastrados no mesmo servidor SIP, mas a realidade da telefonia nem sempre é esta. Como funciona uma chamada entre dois servidores SIP ou ainda para a rede pública é algo que abordaremos em outro post.

No caso de haver algum problema no envio do encerramento da chamada (BYE) geralmente ocorrem as “chamadas presas”, que continuam ativas por não terem recebido o sinal de desligamento.

Pacote SIP (INVITE):

abaixo podemos ver no pacote SIP do tipo INVITE as informações básicas contidas nele e o campo que indica a mensagem:

U 2013/01/30 11:01:57.455004 192.168.0.50:1024 -> 192.168.0.150:5060
INVITE sip:4031@servidor.sip SIP/2.0.
Via: SIP/2.0/UDP 192.168.0.50:1047;branch=z9hG4bK188800439.
From: “Lucien <4030>” <sip:4030@servidor.sip>;tag=738994358.
To: <sip:4031@servidor.sip>.
Call-ID: 1287077758@192.168.0.43.
CSeq: 1 INVITE.
Contact: <sip:4030@192.168.0.50:1047>.
Content-Type: application/sdp.
Max-Forwards: 70.
Content-Length: 293.

INVITE: Nesta linha são enviados os comandos que estabelecem o diálogo SIP. A mensagem INVITE é a solicitação de uma nova chamada. Note que neste campo também é possível observar o número destino (número de B).

From: Este campo identifica o originador da chamada (número de A).

Fonte: Blog Sippulse

Perspectivas para o e-commerce em 2014

Ecommerce

Um novo ano começa, e agora é o momento ideal para quem possui (ou pretende iniciar) um negócio ligado ao comércio virtual analisar quais foram as melhores práticas e estratégias em 2014, além de ficar por dentro das tendências apontadas por especialistas como aquelas que vão trazer crescimento e lucro para o segmento.

Confira quais são as principais dicas do PagSeguro para o e-commerce em 2014:

Novos mercados

Existem muitos nichos ainda inexplorados, como o comércio voltado para crianças que sabem escolher o que querem, apaixonados por artigos retrô e produtos de beleza para homens. Quem investir neles vai sair na frente.

Facilite o pagamento


O receio de fornecer dados e até mesmo dificuldade em efetuar o pagamento continuam sendo um fator que afasta o consumidor do e-commerce. Com PagSeguro na sua loja, ele pode escolher entre mais de 23 maneiras de pagar com segurança.

Curtindo e compartilhando

As redes sociais continuam sendo uma ótima vitrine para sua loja virtual. Com a possibilidade de interação do usuário, é possível tirar dúvidas sobre os produtos e serviços. O social commerce, no qual o cliente compra diretamente pela rede social, também está ganhando seu espaço.

Foco no mobile

Considerando que grande parte dos internautas brasileiros usam seus celulares para acessar a rede, investir num site pensado também para estes usuários faz todo sentido. Assim, o consumidor pode – mais do que nunca – comprar a qualquer hora e lugar.

Troca com desconto

Cliente que trouxer seu produto antigo/usado ganha desconto na hora de adquirir um novo. Essa prática é tendência em grandes lojas dos Estados Unidos, e além de atrair o público consumidor, ainda é sustentável.

Black Friday

Em 2013, a sexta-feira dos megadescontos tomou proporções nunca antes vistas. A previsão é que neste ano, ainda mais lojas (virtuais e físicas) participem do evento. Por isso, o ideal é já incluir a data no planejamento do ano.

Entrega barata e eficiente

Quando alguém compra algo pela internet, fica na expectativa de receber seu produto o quanto antes. Com o Envio Fácil do PagSeguro, você pode oferecer frete barato por Sedex (que entrega rapidamente) para todo o Brasil.

Fonte: http://blogpagseguro.com.br

Como escolher um bom Domínio

Como escolher um domínioAntes mesmo de você escrever uma linha de código, pintar um pixel no Photoshop ou traçar uma linha no Corel, seu site começou como uma ideia. E essa ideia precisa de um nome que corresponda.

Infelizmente, na maioria das vezes não dá para pegar o domínio que você queria tanto. A World Wide Web já está aí tem uns vinte anos e todos os nomes bons já foram pegos por empresas sérias ou aproveitadores. Será?

Sites de leilão de domínios como o Sedo podem ser uma boa alternativa se você está disposto a investir pesado para angariar um bom nome. No Brasil, nomes disputados pode ficar amarrados em problemas jurídicos ou congelados por anos a fio sem uma solução.

Mas se você não tem paciência, nem verba, é melhor pensar em alternativas. Prestando atenção a algumas dicas:

A maioria absoluta dos usuários só conhece os TLDs .com, .net e .org e mesmo esses dois últimos não são tão populares quanto o primeiro. O ICANN pode liberar centenas de alternativas, milhares talvez, mas o público vai continuar preferindo os tradicionais. Qual foi a última vez em que você entrou em um site .info ou .hotel?

Em contrapartida, se você deseja preservar a sua marca, é bom adquirir, pelo menos, os três mais famosos. É muito comum você registrar meusitebacana.com e tempos depois um oportunista registrar meusitebacana.net ou meusitebacana.org. Você constrói sua marca com trabalho pesado, divulgação e publicidade e o malandro fatura uns trocados com aqueles usuários que se confundirem na hora de digitar o endereço ou tentando se passar pelo site legítimo. Resolver um conflito desses pode ser mais complicado do que você gostaria e o valor do domínio alternativo ficará mais caro na mão do aproveitador.

Evite utilizar hifens no seu domínio: eles confundem o usuário e também abrem brecha para oportunistas.

Domínios confusos como del.icio.us podem ter feito sucesso no passado, mas certamente mais pela qualidade do serviço do que pela URL. Erros de digitação são inevitáveis nestes casos. E não se iluda: o próprio Delicious acabou comprando o domínio delicious.com e abandonando a grafia estranha. Agora, tente digitar tumbler.com para ver se você vai cair no site da rede social Tumblr (dica: não vai).

Se você deseja atingir uma audiência localizada, vale a pena investir em um ccTLD (country-code Top Level Domain) nativo. Em alguns países, é obrigatório ter um endereço físico local. Não tente forjar informações ou haverá um sério risco de ter seu domínio revogado.

Mas escolher o domínio não encerra essa fase do projeto. Com o seu servidor configurado para apontar para aquele endereço, não se esqueça de permitir o acesso quer o visitante digite ou não o WWW. Não é incomum ver sites profissionais que se esquecem deste detalhe trivial e acabam servindo uma mensagem de servidor não encontrado se o usuário não digita WWW.

Outra boa ideia seria deixar preparado o subdomínio “m“. Nesta era de dispositivos móveis conquistando cada dia mais espaço, já se tornou quase um padrão que um site tenha uma versão móvel em m.meusitebacana.com, por exemplo. É uma alternativa relativamente óbvia para o usuário, mais popular e muito mais barata que o TLD .mobi, que ninguém está usando por enquanto.

Banco de dados MySQL e PostgreSQL

PostgreSQL VS MYSQLIntrodução

É muito fácil encontrar serviços de hospedagem de sites que oferecem em seus planos os Sistemas Gerenciadores de Banco de Dados (SGDB) MySQL e PostgreSQL, embora isso seja mais comum com o primeiro. Como esses SGBD não são usados apenas na internet, talvez seja de seu interesse utilizá-los em seus projetos de software, uma vez que cada um é dotado de vantagens interessantes, como a gratuidade de uso. Para ajudá-lo a escolher o melhor para sua aplicação, este artigo apresenta as principais características de ambos, começando com o MySQL. Para tanto, é recomendável que você tenha algum conhecimento sobre os conceitos de bancos de dados.

Alguns termos

Mesmo aquelas pessoas que já trabalham com banco de dados podem ficar “perdidas” no meio de tantos nomes de recursos. Assim, para facilitar a compreensão, segue uma lista com uma breve explicação sobre os recursos mais importantes:

– Referential integrity: também conhecido como “integridade referencial”, esse recurso consiste em restrições ou regras existentes para uma correta inserção de dados, por exemplo, para impedir que uma tabela seja preenchida sem que isso ocorra em outra;

– Schemas: recurso que permite cruzar informações em um mesmo banco de dados, mas em estruturas diferentes;

– SQL: sigla para Structured Query Language, é uma linguagem utilizada em bancos de dados relacionais;

– SSL: sigla para Secure Sockets Layer, consiste em um protocolo para a troca segura de informações;

– Stored procedures: esse recurso consiste em comandos SQL “guardados” no servidor para, por exemplo, executar tarefas repetitivas, evitando que um cliente tenha que executá-las constantemente;

– Transactions: também conhecidas como transações, as transactions são instruções executadas em um bloco designado por parâmetros que indicam seu início e seu fim;

– Triggers: também chamados de gatilhos, os triggers são recursos que permitem o acionamento de uma seqüência de comandos logo em seguida ou logo após um evento;

– Views: os views consistem em um tipo de tabela virtual formada por campos extraídos de uma tabela “verdadeira”, facilitando o controle sob os dados acessados.

O banco de dados MySQL

O MySQL é um dos sistemas de gerenciamento de banco de dados mais populares que existe e, por ser otimizado para aplicações Web, é amplamente utilizado na internet (inclusive aqui no InfoWester). É muito comum encontrar serviços de hospedagem de sites que oferecem o MySQL e a linguagem PHP, justamente porque ambos trabalham muito bem em conjunto.

Outro fator que ajuda na popularidade do MySQL é sua disponibilidade para praticamente qualquer sistema operacional, como Linux, FreeBSD (e outros sistemas baseados em Unix), Windows e Mac OS X. Além disso, o MySQL é um software livre (sob licença GPL), o que significa que qualquer um pode estudá-lo ou alterá-lo conforme a necessidade.

Entre as características técnicas do SGBD MySQL, estão:

– Alta compatibilidade com linguagens como PHP, Java, Python, C#, Ruby e C/C++;

– Baixa exigência de processamento (em comparação como outros SGBD);

– Vários sistemas de armazenamento de dados (batabase engine), como MyISAM, MySQL Cluster, CSV, Merge, InnoDB, entre outros;

– Recursos como transactions (transações), conectividade segura, indexação de campos de texto, replicação, etc;

– Instruções em SQL, como indica o nome.

Até o momento em que este artigo era escrito, o MySQL estava na versão 5.0 (mais precisamente, 5.0.26). Em relação à versão 4.0, houve acréscimo de vários recursos e melhorias importantes, como:

– Triggers;
– Stored procedures;
– Sub-selects;
– Suporte total ao Unicode;
– INFORMATION_SCHEMA (para armazenamento do dicionário de dados);
– Server side cursors;
– Suporte a SSL;
– Melhoria no tratamento de erros.

O MySQL surgiu na Suécia pelas mãos de três colegas: Allan Larsson, David Axmark e Michael Monty Widenius. Trabalhando com base de dados, eles sentiram a necessidade de fazer determinadas conexões entre tabelas e usaram o mSQL para isso. Porém, não demorou para perceberem que essa ferramenta não lhes atendia conforme o necessário e passaram a trabalhar em uma solução própria. Surgia então o MySQL, cuja primeira versão foi lançada no ano de 1996.

Um fato importante a ser destacado sobre o MySQL é que esse SGBD também possui uma licença comercial, isto é, paga. Neste caso, é possível obter suporte diferenciado dos desenvolvedores.

Vale ressaltar também que, em fevereiro de 2008, o MySQL foi comprado pela Sun Microsystems, que pagou a quantia de 1 bilhão de dólares pela aquisição. Mais informações sobre essa transação neste link (em inglês).

O banco de dados PostgreSQL

O sistema gerenciador de banco de dados PostgreSQL teve seu início na Universidade de Berkeley, na Califórnia, em 1986. À época, um programador chamado Michael Stonebraker liderou um projeto para a criação de um servidor de banco de dados relacionais chamado Postgres, oriundo de um outro projeto da mesma instituição denominado Ingres. Essa tecnologia foi então comprada pela Illustra, empresa posteriormente adquirida pela Informix. Porém, mesmo diante disso, dois estudantes de Berkeley (Jolly Chen e Andrew Yu) compatibilizaram o Postgres à linguagem SQL. Este projeto recebeu o nome de Postgres95.

Em 1996, quando o projeto estava estável, o banco de dados recebeu o nome de PostgreSQL. No entanto, enquanto ainda possuía o nome Postgres95, o banco de dados teve várias mudanças. O seu código foi totalmente revisado e a linguagem SQL foi definida como padrão.

Tecnicamente falando, o PostgreSQL é um banco de dados relacional e orientado a objetos. Um de seus atrativos é possuir recursos comuns a banco de dados de grande porte, o que o deixa apto a trabalhar, inclusive, com operações de missão crítica. Além disso, trata-se de um banco de dados versátil, seguro, gratuito e de código aberto (disponível sob uma licença BSD).

Entre suas características, tem-se:

– Compatibilidade multi-plataforma, ou seja, executa em vários sistema operacionais, como Windows, Mac OS X, Linux e outras variantes de Unix;

– Compatibilidade com várias linguagens, entre elas, Java, PHP, Python, Ruby, e C/C++;

– Base de dados de tamanho ilimitado;

– Tabelas com tamanho de até 32 TB;

– Quantidade de linhas de até 1.6 TB ilimitada;

– Campos de até 1 GB;

– Suporte a recursos como triggers, views, stored procedures, SSL, MVCC, schemas, transactions, savepoints, referential integrity e expressões regulares;

– Instruções em SQL, como indica o nome.

No momento em que este artigo era escrito, o PostgreSQL estava na versão 8.1.

MySQL x PostgreSQL

MySQL ou PostgreSQL, qual usar? Ambos são muito bons e não fazem feio diante das alternativas pagas. Além disso, possuem recursos e vantagens em comum, o que significa que, para a maioria das aplicações, ambos podem ser usados. Na verdade, o correto não é tentar descobrir qual é o melhor, mas em que situação um ou outro deve ser utilizado.

O PostgreSQL é otimizado para aplicações complexas, isto é, que envolvem grandes volumes de dados ou que tratam de informações críticas. Assim, para um sistema de comércio eletrônico de porte médio/alto, por exemplo, o PostGreSQL é mais interessante, já que esse SGBD é capaz de lidar de maneira satisfatória com o volume de dados gerado pelas operações de consulta e venda.

O MySQL, por sua vez, é focado na agilidade. Assim, se sua aplicação necessita de retornos rápidos e não envolve operações complexas, o MySQL é a opção mais adequada, pois é otimizado para proporcionar processamento rápido dos dados e tempo curto de resposta sem exigir muito do hardware. Se você precisa, por exemplo, de um banco de dados para armazenar o conteúdo do seu site, de seu fórum ou necessita manter um cadastro de usuários de um portal, o MySQL “serve como uma luva”, pois tais aplicações não necessitam dos recursos avançados que o PostgreSQL oferece.

Para escolher um destes dois SGBD, procure entender bem quais recursos sua aplicação precisa. Tente estimar o volume de dados, avalie o hardware disponível, certifique-se das funcionalidades necessárias e, posteriormente, procure por informações mais detalhadas do MySQL e do PostGreSQL. Se sua aplicação for simples – principalmente se for algo ligado à internet -, não é preciso pensar muito: o MySQL é uma escolha satisfatória, pois é facilmente encontrado em serviços de hospedagem.

Livros Sugeridos:

PostgreSQL – Técnicas avançadas

PostgreSQL – Guia do programador

MySQL – Guia programador

Aprendendo MySQL

Finalizando

Um banco de dados pode ser a diferença entre ter e não ter um negócio, seja ele de qualquer porte. Por isso, a escolha deve ser bem feita e aspectos como desempenho, recursos, documentação e suporte devem ser considerados. Em todos esses pontos o MySQL e o PostgreSQL são excelentes, por isso, a escolha entre um deles só depende de sua aplicação.

Para saber mais sobre o PostgreSQL, visite: http://www.postgresql.org (em inglês) e http://www.postgresql.org.br.

Para saber mais sobre o MySQL, visite: http://www.mysql.com (em inglês) e http://www.mysqlbrasil.com.br.

Escrito por Emerson Alecrim – Publicado em 21_11_2006 – Atualizado em 20_04_2008

Fonte: InfoWester