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.

O que é Design Patterns ?

Design Patterns

Design Patterns

Os Design Patterns ou Padrões de Projeto, como são conhecidos, são conceitos ou modelos orientados a objetos visando solucionar problemas no desenvolvimento de softwares. Estes padrões possuem finalidades particulares que podem ser aplicadas para controlar a estrutura, a criação e o comportamento das classes e dos objetos em uma aplicação. Dependendo da situação em que esses projetos forem aplicados, é possível notar uma redução considerável na complexidade do software em virtude da reutilização de código-fonte e de componentes.

Apesar de existir 23 padrões de projeto, é praticamente inviável implementar todos eles em uma única solução, afinal, utilizar padrões de projeto sem um propósito é uma má prática. É preciso haver um motivo real para a implementação, ou seja, uma situação em que se pode comprovar de que o padrão de projeto será uma solução adequada para o problema. Caso contrário, a implementação pode aumentar a complexidade do programa e afetar também o desempenho da aplicação.

Uma das dúvidas mais frequentes relacionadas a padrões de projeto é saber onde, quando e como utilizá-los. Em primeiro lugar, o engenheiro de software deve ter sólidos conhecimentos em Programação Orientada a Objetos e um bom nível de abstração, ou seja, a Orientação a Objetos é a base essencial para compreender os padrões de projeto. Em segundo lugar, é necessário conhecer o objetivo principal de cada padrão de projeto para que seja possível fazer um estudo da viabilidade para solucionar um problema no software. No entanto, mesmo com esse conhecimento técnico, é comum alguns engenheiros não conseguirem identificar as situações ou os módulos que devem receber a implementação dos padrões. Portanto, em terceiro lugar, o profissional também deve ter um domínio satisfatório da regra de negócio do cliente. A consolidação de todas essas experiências é o que permite a seleção e a aplicação consciente dos padrões de projeto no desenvolvimento do software.

Fonte: Profissionais TI

O que é Coprofagia e como tratar

CoprofagiaAlguns proprietários ficam horrorizados ao descobrirem que seus animais comem as próprias fezes ou a de outros animais. Realmente, para nós humanos esse não é lá um hábito muito bom de se apreciar, mas no reino animal não há qualquer preconceito. Fezes, para os cães, representam apenas alimento processado e se elas tiverem odor interessante e atrativo, não há por que rejeitar.

Claro que não é todo cão que come fezes, a maioria deles nunca apresentará esse tipo de comportamento, mas é importante entender o por quê de muitos animais agirem assim.

As fezes de outras espécies podem parecer extremamente apetitosas para os cães. Um exemplo disso são os cães saudáveis que adoram ingerir as fezes de gatos. É fácil entender a causa. Os felinos têm uma necessidade de proteína muito maior do que os cães. Por isso, as rações para gatos possuem altos teores proteicos. As fezes dos gatos, portanto, exalam odor de proteína que é altamente atrativa para os cachorros. Cocô de gato, pode ser uma ‘iguaria’ para muitos cães… E pode fazer mal para eles? Normalmente não, porém os cães podem adquirir vermes se o gato estiver infestado ou com toxoplasmose.

Da mesma forma, quando o cão não consegue digerir bem aquilo que come ou sua dieta possui teores muito altos de proteína, além do necessário ou de sua capacidade de digestão, as fezes apresentarão odor proteico. E isso será um grande estímulo para o cão comê-las. É necessário distinguir se faltam enzimas digestivas ou se a dieta está exagerada em proteínas. Uma forma de descobrir a causa é mudar a ração do animal para outra com menores teores proteicos. Claro que essa mudança só poderá ser prescrita pelo veterinário que atende o cão. Outra alternativa é adicionar enzimas que ajudem na digestão, presentes, por exemplo, no mamão.

Em animais mais jovens, a coprofagia pode estar ligada a problemas comportamentais. Um exemplo disso são os cães duramente repreendidos quando fazem suas necessidades fora do lugar. Para não apanhar, eles ingerem as fezes para esconder a prova do crime. Isso não quer dizer que você não deva repreender seu cãozinho quando ele fizer cocô no lugar errado, mas não exagere na bronca. Há filhotes que comem fezes por simples imitação, quando convivem com outros cãezinhos que têm esse hábito.

Quando a causa da coprofagia é comportamental, existem produtos que podem ser administrados ao animal que fazem com que as fezes se tornem repugnantes para ele. Há aqueles que adicionam pimenta ou outros condimentos às fezes do cão, para que ele seja desestimulado a comê-las. Esse último recurso tem pouca valia, a meu ver.

Antes de tentar instituir qualquer terapia, consulte o veterinário para tentar, junto com ele, determinar a causa exata e instituir o tratamento mais adequado.

Artigo de: Silvia C. Parisi

O que são Cron Jobs

Cron JobsO que são e como usar as Cron Jobs?

Hoje precisei criar uma rotina que em determinado horário ele executa um script em php automaticamente para mim todos os dias no mesmo horário, portanto em pesquisa descobri o Cron Job.

O que são as Cron Jobs?

As Cron Jobs são como as Tarefas Agendadas do Windows: são tarefas executadas automaticamente de X em X tempos… Fazendo uma analogia à vida real é quando você tira o lixo pra fora ou arruma seu quarto, provavelmente você faz isso seguindo sempre um mesmo intervalo de tempo… De 2 em 2 dias, de 1 em 1 semana e por ai vai.

O termo “Cron Job” (também só chamado de cron) está mais ligado a sistemas UNIX do que Windows mesmo… Por isso o que vou falar aqui só se encaixa no Linux. Se você usa Windows é só dar uma olhada nas tarefas agendadas que você vai ter uma interface completa para trabalhar com as Tarefas Agendadas.

Pra que usar uma Cron Job em um site/sistema online?

Acho que o propósito mais comum de uma Cron Job seja a rotina de backup… Scripts que rodam diariamente (ou até mais demorados) e que fazem o backup do site e do banco de dados.

Você pode criar uma cron para quase qualquer coisa, mas geralmente são para atualização, limpeza, backup e etc.

Como criar uma Cron Job?

Se o seu site roda em algum servidor especializado e você tem um painel de controle como o cPanel recomendo que dê uma olhada lá pois existe uma interface web prontinha para gerenciar as crons… se você não tem esse painel ou não tem acesso à ele vai ter que ir direto ao shell / terminal do seu servidor e começar a gastar o dedo.

A definição de uma cron job consiste em uma linha com 6 valores separados por espaço, assim:

minuto hora dia mes dia-da-semana linha-de-comando

Vamos a alguns exemplos de configuração de tempo antes de criar a cron em si:

Cron Job que rode todo dia as 06:00am

0 6 * * * linha-de-comando

Cron Job que rode as 12:30am de segunda e sexta

30 12 * * 1,5 linha-de-comando

Cron Job que rode a meia-noite de três em três dias

0 0 */3 * * linha-de-comando

Cron Job que rode todo dia a cada duas horas

0 */2 * * * linha-de-comando

A linha-de-comando

É um comando que você usaria normalmente para iniciar um script ou chamar um wget. :)

Instalando suas Cron Jobs

Agora é só salvar o conteúdo das suas crons, uma por linha em um arquivo chamado cron.txt e colocar uma linha assim no começo (primeira linha) do arquivo:

MAILTO=meuemail@meudominio.com

Isso fará com que os erros sejam enviados para o e-mail determinado.

Depois é só ir no terminal/shell e chamar o comando:

crontab cron.txt

Se nada der errado a cron foi instalada com sucesso e você pode vê-la na lista de crons que estão rodando:

crontab -l

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

 

Buldogue Francês – Características e Comportamentos

O Buldogue Francês é uma raça que encanta a todos, principalmente os fãs desses cãezinhos de nariz achatado.
 
País de origem: França
Ano: por volta de 1800
Função original: cão de colo
Função atual: cão de companhia
Pelagem: lisa, curta, macia e brilhante
Peso médio: 8kg a 14kg
Tamanho: aproximadamente 35cm
Expectativa de vida: 12 a 14 anos

História e Origem

Buldogue Francês

Buldogue Francês

O Buldogue Francês, também conhecido como Frenchie, é uma raça que deve sua existência a pelo menos três países: Inglaterra, França e EUA. A Inglaterra ajudou com a base da raça, que foi o antigo Buldogue. Criadores franceses transformaram esses pequenos Bulldogs em um tipo francês distinto, e criadores Americanos foram os primeiros a exigir as tão conhecidas orelhas de morcego.
 
Hoje, os Buldogues Franceses são excelentes cães de companhia, e um dos cães mais especiais que existe. Sua carinha engraçada e seu temperamento divertem as pessoas enormemente, então é difícil passear com um Frenchie sem chamar atenção.

Cores da pelagem

Buldogue Francês

Buldogue Francês

A classificação das cores de Buldogues Franceses é objeto de estudo e de muitos debates de vários criadores no Brasil e no mundo. Infelizmente, o Padrão da Raça não é muito específico ao tratar de cores de pelagens e pode abrir margens às interpretações pessoais dos criadores.

De modo simples, as cores de pelagem de um Bulldog Francês podem ser simplesmente descritas como fulvo, com uma variedade de marcações e tons possíveis. O fulvo pode variar de tom desde o vermelho vivo e intenso ao café-com-leite e o dourado claro quase creme. As outras diferenças são devidas a variações de marcações, que variam desde o tigrado (listras negras em grau variável de repetição e grossura, que preenchem o fundo fulvo), até o pied (várias marcações tigradas com fulvo em um fundo branco) e o fulvo com máscara negra (fulvo, em suas tonalidades diferentes, com uma máscara negra clássica em sua face e, às vezes em algumas linhagens, em seu dorso também). São infinitas variações de tipos de marcação, de padrão, tamanho e localização nesses parâmetros.

Algumas cores como o azul, o cinza, o preto com marrom, o marrom e o fígado, não são reconhecidas pelo Padrão da Raça e são motivos de desclassificação em exposições de estrutura e beleza. Pequenas pintas escuras em cães pied são chamadas de ticking e não são almejadas. Não há uma tradução adequada para a palavra “pied” em português. Os exemplares completamente brancos sem marcações são classificados dentro dos “pieds” para fins de exposições caninas; mas seus cílios e contorno dos olhos devem ser pretos assim como os dos outros Buldogues Franceses.

Temperamento

Buldogue Francês

Buldogue Francês

O temperamento do Buldogue Francês também confere um tom especial à raça, são cães normalmente alegres, calmos, companheiros, brincalhões e muito inteligentes. Como todas as raças de companhia, eles necessitam, acima de tudo, de contato constante com humanos. Suas necessidades de exercícios são mínimas e variam de cão para cão. Sua natureza calma os torna grandes escolhas para aqueles que vivem em apartamento, assim como sua falta de interesse em latir.
 
Sendo uma raça de cara achatada, é essencial que seus futuros donos entendam que Buldogues Franceses não devem viver fora de casa. Seu sistema de respiração comprometivo não os permitem regular suas temperaturas eficientemente. Além do mais, os Bulldogs Franceses são bem pesados e podem ter dificuldade em nadar. Sempre cuidado quando exercitar seu Buldogue Francês no calor.
 
O nível de energia de um Buldogue Francês pode variar de hiperativo e energético até a relaxado e calmo. Mas geralmente é comum que o filhote seja mais ativo até os 12 ou 18 meses, quando ele se torna efetivamente um adulto e começa a acalmar.
 
O Buldogue Francês é uma raça essencialmente com sangue bull e sangue terrier. Portanto, não é nenhuma surpresa que os problemas podem surgir quando dois cães dessa raça se juntam, principalmente quando são do mesmo sexo. Donos que estão considerando adicionar um segundo cão à sua família são geralmente advertidos e aconselhados a escolherem cães de sexo oposto. A castração pode fazer muito a fim de ajudar a diminuir essas tendências antes mesmo delas começarem.

Com a família

Buldogue Francês

Buldogue Francês

Ele até escolhe um dono preferido, mas é festeiro com todos da casa. Adora colo, carinho e demonstrações de afeto em geral. Embora não seja particularmente absorvente, não perde uma oportunidade de se aproximar para ganhar um cafuné. Recebe as pessoas com alegria e, se não for desestimulado desde cedo, com muitas lambidas de amor. Também é de seguir os donos pela casa, oferecendo companhia em tempo integral.

Com pessoas estranhas

Salvo Buldogues que crescem enclausurados e afastados do convívio social, o que não é nada indicado, os cães da raça são simpatia pura com todo mundo. Podem dar três ou quatro latidos para avisar que as visitas chegaram, mas nada que represente hostilidade. Pelo contrário. Já recepcionam os visitantes abanando a cauda, que, aliás, de tão curta, ocasiona um típico rebolado geral na região posterior. Também pede carinho aos convidados e, volta e meia, os chama para brincar, levando seus brinquedos até eles.
 
Se ele crescer longe do convívio com a garotada, pode se assustar quando for apresentando à típica energia ruidosa dos baixinhos humanos. Sua tendência, contudo, é manifestar seu receio procurando um recanto escondido e não se mostrando agressivo. Já exemplares acostumados com crianças tendem a ser tolerantes com elas e receptivos às suas brincadeiras. Vale lembrar que o Buldogue Francês, por ser pequeno, pode sair machucado se a folia passar dos limites. Por isso, supervisione a relação caso os pimpolhos sejam muito pequenos ou estejam muito agitados.

Com outros cães e animais

Nem sempre o convívio entre exemplares machos – seja dois Buldogues ou um Buldogue e um cão de outra raça – funciona. Há vários relatos de conflito. Por outro lado, há também diversos casos de amizade harmoniosa. O sucesso ou fracasso dessa relação parece regido pelo espírito de liderança dos cães envolvidos: é importante que haja no máximo um líder na história. Já entre fêmeas, embora haja exceções, o convívio tende a ser pacífico. E com outros animais, desde que o Buldogue tenha crescido com eles, o dia-a-dia é promessa de paz e união. De forma geral, no entanto, os exemplares da raça tendem a aceitar os bichos com os quais convivem e não os desconhecidos. Por isso, se a idéia é introduzir um novo colega do reino animal no território de um Buldogue adulto, recomenda-se um período de adaptação devidamente supervisionado.

O Buldogue Francês late muito?

Discreto por natureza, o Buldogue Francês late pouco e, quando o faz, é em tom rouco e baixo. Só se manifesta com latidos quando chegam visitas ou diante de acontecimentos que fujam da rotina. Mesmo assim, histeria não é com ele. Dá o seu aviso e logo se aquieta novamente. A vizinhança agradece.

Destrutividade

Na infância, especialmente na fase de troca dos dentes, ele até apronta suas travessuras. Mesmo assim, nada de excepcional nem que não seja facilmente contornado com a devida orientação da família e com oferecimento de brinquedos apropriados. Quanto aos adultos, o mais comum é que não desapontem a família. Os raros casos de exemplares destruidores estão associados a donos significativamente ausentes e a ambientes desestimulantes, sem brinquedos nem qualquer tipo de atração para os cães.

Obediência

Ele não é dos mais obedientes. Mas, graças à natureza bem-comportada e pouco destruidora, as teimosias da raça não costumam se transformar em problemas de convívio. No conhecido ranking de obediência canina publicado no livro A Inteligência dos Cães, do psicólogo Stanley Coren, o Buldogue Francês obteve a 58a colocação entre as 79 estabelecidas. A avaliação do resultado detalha: os exemplares da raça tendem a repetir um mesmo exercício de adestramento por mais de 25 vezes até que demonstrem compreendê-lo. E geralmente só o assimilam totalmente após expostos a ele de 40 a 80 vezes. No dia-a-dia, contudo, quando a questão principal é seguir as normas domésticas e respeitar as vontades dos donos, o estilo desobediente exige apenas uma dose extra de paciência dos familiares para repetir duas ou três vezes alguns dos chamados e das ordens que o Buldogue insistir em ignorar.

O Buldogue Francês é muito agitado?

O Buldogue Francês é medianamente ativo. Gosta de brincar com pessoas, com outros cães e até sozinho. Também nunca dispensa convites para atividades mais enérgicas. O focinho achatado, no entanto, que interfere na respiração, impede que tenha grande resistência. Os donos, por sua vez, devem evitar que ele extravase sua energia. Há relatos de exemplares que, por terem se agitado demais, acabaram com graves complicações cardiorespiratórias. O lado sossegado da raça também se manifesta com freqüência. O Buldogue é daqueles que ficam horas assistindo à TV ao lado da família.

Inteligência

Ele se destaca quando o assunto é associar causa e efeito dos acontecimentos. É do tipo que sabe quando os donos estão de saída só por vê-los se arrumando e que reconhece a hora do passeio porque alguém pegou a coleira. Também resolvem alguns probleminhas por conta própria. Como são calorentos, não é raro que, em dias quentes, virem a vasilha de água para deitar sobre o chão molhado ou mesmo que entrem nela para uma refrescada mais caprichada. Justamente por isso, os criadores experientes recomendam cautela. Há casos de exemplares que optaram por mergulhar nas piscinas da casa. Acabaram afogados por não conseguir sair delas.O Buldogue é o 58º no ranking de inteligência.

FONTE: Tudo sobre Cachorros