Últimos artigos

Padrão de Projeto – Adapter

Imagine um mundo bem simples, sem requisitos solicitando alteração da aplicação. Sem inovações. Programar seria simples, mas bem chato. Programadores continuarão a criar aplicativos em cima das melhores tecnologias de 10 anos atrás. Eles nunca terão de introduzir diferentes bases de dados, implementação de novas práticas, ou consumir APIs diferentes.
Mas isso foi só um sonho, ou melhor um pesadelo, as coisas mudam, e muito. Felizmente, os programadores têm o Adapter Design Patttern para ajudar a atualizar sistemas legado com o novo código e funcionalidade.

Nome: Adapter

O Design Patter Adapter simplesmente adapta interface entre um objeto para o que o outro objeto que espera.

Problema e Solução

Em um aplicativo, você pode ter uma aplicação estável e bem arquitetada. No entanto, a nova funcionalidade requer o uso de objetos existentes em uma maneira diferente do que eles foram originalmente concebidos. A alteração pode ser tão simples como alterar o nome da função para a nova  funcionalidade. Também poderia ser um pouco mais complexo cenário, onde a funcionalidade espera um comportamento ligeiramente diferente objeto original.

A solução é a construção de um outro objeto, usando o Adapter Design Pattern. Este objeto Adapter funciona como intermediário entre o aplicativo orignal e novas funcionalidades. O Adapter Design Pattern define uma nova interface para um objeto existente para corresponder ao que o novo objeto requer.

Para a maior parte do sistema, nenhuma funcionalidade existente está perdida, só será usada ou consumida de uma maneira diferente. Você pode comparar isso a um adaptador elétrico, que recebe uma ligação de três pinos aterrada e altera o padrão para um socket de dois pinos. O Adapter Design Pattern visa ajudar OPP, que cria as conversões para as interfaces do objeto. Embora possa ser tentador para modificar o código existente para trabalhar no modo que a nova funcionalidade espera, você deve criar um adaptador de objeto em seu lugar. Muitas vezes, sugere-se que um ajuste rápido de um objeto existente é a mais rápida e de custo efetivo para realizar essa tarefa. Defendo que a velocidade e os custos são raramente um problema ao criar o objeto do adaptador. Nenhuma nova funcionalidade real está sendo criado, até o momento o objeto original foi alterado e testado contra a regressão, uma classe do adaptador rápida com poucas linhas de código poderia ter sido criado sem possibilidade para a regressão.

A melhor solução ainda é a de criar um objeto adaptador. Esta favorece a possibilidade de evolução paralela de ambos e as novas funcionalidades da base de código existente. Se seu trabalho é integrar a funcionalidade nova, e você vai fazer isso editando a código existente, você provavelmente encontrará em desacordo com a equipe que está desenvolvendo novas funcionalidades nas classes originais. Eles podem ter adicionando outros métodos particulares e expecptions que  sejam chamados pelos métodos públicos que foram inicialmente disponível com a última versão estável. A última coisa que você quer é criar um cenário de fusão complexo ou uma base de código bifurcada.

Adaptador Design Pattern é também uma excelente solução para as alterações a uma fonte de dados. Dois problemas comuns alterações dizem respeito quando o bando de dados muda e arquivo de acesso são alterações:

– O projeto pode necessitar de alterar o mecanismo de banco de dados para N número de razões. Um cenário comum envolve uma aplicação criada com o MySQL a migração para um grande banco de dados como Oracle. Outro caso pode ser uma restrições de licença por conta dos custos consequentemente exige um banco de dados diferente, por exemplo, Postgres, e isso tudo quando o produto finalmente vai para produção. Se você não estiver usando uma camada de abstração de banco de dados, você precisará criar um objeto Adapter interceptar as chamadas de funções relacionadas a banco de dados legado e fazer aqueles compatíveis com o novo banco de dados. Curiosamente, se você examinar o código de algumas bibliotecas de abstração de dados, você vai vêr nada mais que uma coleção de adaptadores também.

– Ao trabalhar com uma terceira fonte de informação, os dados dessa fonte podem alterar o formato. Seu fornecedor pode estar trabalhando os dados no formato CSV durante anos, mas vai migrar para um documento XML. O adaptador pode ser criado e ele irá consumir o XML e retornar um formato do CSV já conhecido pelo sistema atual.

Basicamente, sempre que houver um problema que exige alterar o padrão da plataforma principal e não interromper o fluxo da aplicação existente, o Design Pattern Adapter pode ser usado no desenvolvimento da solução.

UML

Esta “Unified Modificado Language” (UML) que detalha um diagrama de classe do Design Pattern Adapter a partir de um exemplo de um rádio automotivo ser utilizado em dois tipos de automóveis, Civic e o Logan.

Design Pattern Adapter - Exemplo do Rádio AutomotivoExemplo de Design Pattern

Note que flui sobre esta figura:
– A classe “RadioDoCivic” contém um método chamado alterarVolume(). “Civc” tem uma instância do “RadioDoCivic” e solicita alterarVolume() durante a chamada da função upSound().
– A classe “Logan” é o novo objeto que precisa utilizar o mesmo “RadioDoCivic”. Sua função variarSom() chama um método público da instância “RadioDoCivic” chamado maisVolume() durante a execução.
– O “RadioDoCivicAdapterParaLogan” é criado por estender a classe “RadioDoCivic”. Em seguida, ele fornece um método público chamado maisVolume() conforme o esperado pelo “Logan”. Neste exemplo simples, o maisVolume() faz é chamar alterarVolume().

Exemplo prático

Na base de código original do projeto, existe um objeto que manipula todas as mensagens de erro e códigos chamados errorObject. Os programadores originais não pensam que o código jamais iria gerar algum erro, por isso projetamos o sistema para enviar as informações de erro errorObjects diretamente ao console.

Neste exemplo, uma mensagem 404: Not Found de erro está sendo gerado. Eles estão supondo que o conteúdo da mensagem de erro e código pode mudar, mas o texto vai ficar sempre no mesmo formato.

<?php

class errorObject {

private $__erro;

public function __construct ($erro) {

$this->__erro = $erro;

}

public function getErro() {

return $this->__erro;

}

class logToConsole {

private $__errorObject;

public function __construct ($errorObject) {

$this->__errorObject = $errorObject;

}

public function escrever() {

fwrite(STDERR, $this->__errorObject->getError());

}

}

?>

Neste cenário, uma nova equipe de admin foi trazido ao projeto. As melhores práticas sugerem que um log de ​​rede para sftware monitorização devem ser instalados. O pacote requer que o administrador escolham os erros que devem ser registrados em um arquivo CSV com várias colunas. O formato CSV terá duas colunas, a primeira será o código de erro e a segunda a mensagem de erro.

Este novo pacote de software é parecido com a classe errorObject. O fornecedor disponibilizou o código que gera registra os logs no formato correto! Infelizmente, esse código foi criado a partir de uma versão diferente do errorObject que o projeto atual está usando. O errorObject novo tinha dois outros métodos públicos, a chamada getErrorNumber() e getErrorText() que a classe logToCSV espera para usá-los.

<?php

class logToCSV {

const CSV_LOCALIZACAO = ‘log.csv’;

private $__errorObject;

public function __construct ($errorObject) {

$this->__errorObject = $errorObject;

}

public function escrever (){

$linha = $this->__errorObject->getErrorNumber();

$linha .= ‘,’;

$linha .= $this->__errorObject->getErrorText();

$linha .= “\n”;

file_put_contents(self::CSV_LOCALIZACAO, $linha, FILE_APPEND);

}

}

?>

Existem duas soluções para esse problema:

  • Alterar o código original do errorObject
  • Criar um objeto Adaptet

Como precisamos manter as interfaces publicas do errorObject, a criação de um Adapter é a melhor solução.

No objeto adapter que iremos criar, precisamos manter todas as funções do errorObject e adicionar os métodos públicos gerErrorNumber() e o getErrorText() devem estar disponíveis. No sistema legado logToConsole, o método getError() é chamado para retornar a mensagem de erro. O Adapter deve fazer uso desse método para obter a mensagem de erro da classe herdada e , em seguida traduzir essa saída a ser usada pelos dois novos métodos getErrorNumber e getErrorText.

Design Pattern Adapter (errorObject)Exemplo de Design Pattern

<?php

class logToCSVAdapter extends errorObject {

private $__errorNumber, $__errorText;

public function __construct ($erro) {

parent::__construct ($erro) ;

$parts = explode(‘:’, $this->getErro());

$this->__errorNumber = $parts[0];

$this->__errorText = $parts[1];

}

public function getErrorNumber() {

return $this->__errorNumber;

}

public function getErrorText() {

return $this->__errorText;

}

}

?>

Finalmente, para implementar este Adapter, o novo código utiliza a instancia do Adapter ao invés do objeto original errorObject. Então a classe logToCSV pode conter a classe Adapter ao invés do errorObject original. A herança permite que o Adapter forneça o que o logToCSV necessite.

Um exemplo de como implementar utilizando o adapter pode ser visto logo abaixo:

<?php

$error = new logToCSVAdapter (“404:Not Found”);

$log = new logToCSV($error);

$log->write();

?>

Lembre-se de execução de um objeto Adapter é a melhor prática para evitar dor de cabeça quando a interface do objeto precisa ser traduzido para uso por outro.

Tranduzindo o Magento 1.5 para português (pt_BR)

Nem tudo é intuitivo, algumas coisas precisamos pesquisar e aplicar a tradução do magento é uma delas.

A instalação do pacote da para ser feita através do Magento Connect, no próprio site (http://connect.magentocommerce.com/) deles você encontra a tradução e diversos plugins.

A instalação do pacote disponível no MagentoConnect é beta, por conta disso a configuração padrão do Magento não permite instalar, você precisa de alterar a configuração do “Preferred State:” para “Beta”, conforme a imagem abaixo.

Magento ConnectApós essa alteração  basta instalar o plugin copiando a string do site do magento e colando no instalador da loja.

Se a tradução ainda continuar em Inglês, você precisará acessar os arquivos no servidor da pasta /app/locale/ Veja se nesta pasta tem somente pastas e não tem arquivos. Caso nela tenha arquivos, então crie a pasta “pt_BR” e mova todos os arquivos existente para esta pasta.

Após essa alteração vá no Menu “Sistema” -> “Gerenciador de Cache” e clique em “Flush Cache Storage”.

E ualááááááááá quase tudo em português… agora basta você finalizar com os detalhes…

Boa Sorte

Como criar um servidor básico Web com PHP e Mysql no Cloud da Amazon parte 2/2

Servidor no ar, custo já sendo debitado da nossa conta, então vamos usar a nossa máquina nas núvens…

O exemplo que vou mostrar para todos é a instalação de uma loja opensource Magento. Todos os “módulos” php serão listados conforme a necessidade do magento.

O primeir passo é encontrar as informações necessárias para acessar. Como o nosso servidor é uma maquina com Linux o processo é simples, basta clicar com o botão direito na instancia e selecionar o itens “Connect” conforme a imagem abaixo:

AWS EC2 - Como encontrar as informações de acesso ao servidor Linux

AWS EC2 - Como encontrar as informações de acesso ao servidor Linux

Ao clicar em “Connect” você terá um exemplo funcional de acessar a instância utilizando a chave e com o endereço correto. A única coisa que eles colocam de forma errônea é o nome do usuário, root. A chave e a configuração padrão da instância permite somente o acesso remoto pelo usuário ec2-user, então ao copiar a linha (ssh -i minhachavecirada.pem root@ec2-100-100-100-100.compute-1.amazonaws.com) altere o nome do usuário de root para ec2-user(ssh -i minhachavecirada.pem ec2-user@ec2-100-100-100-100.compute-1.amazonaws.com).

AWS EC2 - Dados de acesso ao servidor

AWS EC2 - Dados de acesso ao servidor

Os exemplos que vou abordar é como acessar o servidor da amazon a partir de um OSX ou Linux, em seu terminal digite o comando informado na página da amazon trocando o nome do usuário de “root” por “ec2-user” conforme já comentei. As informações como o nome da chave e a url devem ser alteradas para a sua e não usar simplismente o exemplo informado.

Para acessar o servidor:

ssh -i minhachavecirada.pem ec2-user@ec2-100-100-100-100.compute-1.amazonaws.com

Para conseguir previlégios de administrador do servidor:

sudo su – root

A partir deste ponto a cada comando de instalação o processo irá lhe questionar se você quer instalar ou não. Geralmente o modelo da pergunta é finalizado com [y/N] Se você simplismente precionar “Enter” a letra em maiuscula será mantida, logo será o N ( Not ), por isso preste atenção e nessa sequencia sempre que for questionado durante a instalação precione y (yes) e Enter em sequencia.

Instalar o apache (servidor web)

yum install httpd

Instalar o banco de dados Mysql

yum install mysql

Instalar o PHP, esse processo já configura seu Apache para trabalhar com o PHP

yum install php

Instalar todos os “módulos” necessários para nosso exemplo de aplicação funcionar

yum install php-dom

yum install php-gd

yum install php-mcrypt

yum install php-mysql

Instalar os módulos necessários para o servidor Mysql

yum install mysql-server

yum install mysql-devel

Agora vamos iniciar os serviços

Primeiro vamos iniciar o mysql:

service mysqld start

Precisamos definir o a senha de root do usuário root do mysql com o seguinte comando:

/usr/bin/mysqladmin -u root password ‘senhadoadministrador’

Vamos iniciar o servidor apache:

service httpd start

As configurações do apache que você deve fazer é no /etc/httpd/conf/httpd.conf

Procure pela TAG <Directory /> e altere o AllowOverride de “none'”  para “All” conforme as linhas abaixo:

<Directory />
AllowOverride All
</Directory>

Outra TAG que você precisa procurar é a especifica do diretorio onde estão os arquivos web:

<Directory /usr/local/httpd/htdocs>
AllowOverride All
</Directory>

Na TAG Directory podem ter muito mais elementos mas só listei o único que você deve alterar (AllowOverride)

Após alterar essas configurações do apache é necessário reiniciar o serviço, você pode fazer executando o seguinte comando:

service httpd restart

Um item que considero muito importante é configurar os serviços para serem iniciado toda vez que o servidor reiniciar. Para isso basta executar o “ntsysv” e selecionar o “httpd” e o “mysqld”.

Agora precisamos criar o usuário e a base de dados para instalar a aplicação.

Para acessar o banco de dados:

mysql -uroot -psenhadoadministrador

Agora os passos logado no mysql:
– Criar um banco de dados:
CREATE DATABASE banco_loja;
– Cria o usuario ‘lojauser’ com a senha ‘senhaloja’
CREATE USER ‘lojauser’@’localhost’ IDENTIFIED BY ‘senhaloja’;
– Permite o usuário ‘lojauser’ conectar no servidor mysql a partir do localhost com a senha ‘senhaloja’
GRANT USAGE ON *.* TO lojauser@localhost IDENTIFIED by ‘senhaloja’;
– Permissão para o usuario ‘lojauser’ acessar o ‘banco_loja’
GRANT ALL PRIVILEGES ON banco_loja.* TO lojauser@localhost ;

Com o nosso banco pronto, todos o arquivos prontos vamos para a fase de instalar os arquivos do magento.

Vamos acessar o diretório onde estarão localizados os arquivos publicos:

cd /var/www/html

Baixar o arquivo downloader, ele irá verificar a ultima versão estável do magento e irá baixar:

wget http://www.magentocommerce.com/downloads/assets/1.5.0.0/magento-downloader-1.5.0.0.tar.gz

Vamos descompactar o arquivo:

tar -zxvf magento-downloader-1.5.0.0.tar.gz

Para manter os arquivos necessário, remova o arquivo compactado:

rm -rf magento-downloader-1.5.0.0.tar.gz

Acesse o arquivo downloader.php pela url do seu servidor concatenado por downloader.php através do seu browser preferido:

http://ec2-174-129-180-84.compute-1.amazonaws.com/downloader.php

Na primeira tela pode clicar em continuar

Na segunda tela você verá uma lista de itens em verde, caso tenha algum item em vermelho tente instalar o modulo faltante com o “yum” antes de prosseguir. Abaixo da lista existe um pequeno formulário para informar os dados de acesso ao banco de dados para que as checagem teste também o tipo do banco dade dados.

No caso como o banco é o mesmo servidor que a aplicação WEB o valor padrão “localhost” pode ser mantido. O username é o usuário que criamos no mysql “lojauser” e a senha de acesso que nós definimos “senhaloja”.

Clique no botão “Check for InnoDB suport” e confira que duas novas linhas na lista de checagem apareceram:

– Database server version matches system requirements (required: 4.1.2, actual: 5.1.52)
– Database server supports InnoDB storage engine

Após validar esses itens clique em “Continue”…

Na próxima tela mantenha os valores padrões já definidos e clique novamente em “Continue”

Essa fase o instalador faz um teste de conexão para validar se o servidor onde estamos instalando o magento tem acesso aos arquivos fontes. Após finalizar o teste clique em “Continue” novamente.

Mantendo novamente as opções já selecionadas, clique em “Start the download process” e aguarde a finalização do download e instalação.

Quando o botão “Continue Mangento Installation” aparecer no final da página clique e continue com a instalação.

Nesta tela, selecione o checkbox “I agree to the above terms and conditions” para aceitar os termos e condições de uso e clique em “Continue”.

Na tela de configuração de Localização defina:
– “Locale” como “Português (Brasil) / português (Brasil)”
– “Time Zone” como “E. South America Standard Time (America/Sao Paulo)”
– “Default Currency” como “Real brasileiro”

E clique em “Continue”

Agora configure novamente as informações de conexão de banco e defina a url de acesso (ela já deve ser registrada e deve apontar para o servidor que esta instalando o magento). Pressione “Continue” e espere, isso pode demorar, ele vai criar o banco de dados.

Na próxima tela você deve configurar as informações de acesso. Como o nome do usuário e senha. Esse usuário é o usuário administrativo responsável pela administração da loja.

Todas as fases estão finalizadas, espero ter ajudado. Qualquer dúvida é só falar!!

Abraços a todos..

Namba

Problema na cloud da Amazon desativa sites Web populares

Fonte: computerworld.com.pt

Sites conhecidos da Web, incluindo o Quora e o HootSuite, teve dificuldades ou estão totalmente desativados por causa de problemas nos servidores dos centros de dados da Amazon.com que gerem os serviços de hospedagem Web da empresa.

A Amazon começou a reportar problemas no seu “Service Health Dashboard” durante a madrugada nos EUA, incluindo problemas de conectividade que a afetaram o seu “Relational Database Service”, que é usado para gerir bases de dados relacionais na nuvem, em várias zonas do leste dos EUA.

A Amazon também relatou problemas com o seu EC2, ou Elastic Compute Cloud, serviço que oferece capacidade de computação “pay-as-you-go” na nuvem. A empresa revelou ainda problemas com a EBS, ou Elastic Block Store, de armazenamento relativo ao serviço EC2.

“Um evento de networking esta manhã provocou uma grande quantidade de re-espelhamento [“re-mirroring”] de volumes da EBS”, disse a Amazon hoje. “Este re-espelhamento criou uma escassês de capacidade” e teve impactos na “criação de novos volumes EBS, bem como no ritmo ao qual poderíamos re-espelhar novamente e recuperar os volumes EBS afetados”.
A empresa também disse que um dos seus planos de controle interno para o EBS ficou sobrecarregado e, por isso, é difícil criar novos volumes EBS e instâncias EBS de apoio.

“Estamos a trabalhar o mais rápido possível para aumentar a capacidade para acelerar o re-espelhamento, e trabalhando para restaurar a questão do plano de controle”, acrescentou a empresa. “Estamos começando a ver progressos em todos estes esforços”, que ainda não estão finalizados, e “continuaremos a fornecer atualizações quando as tivermos”.

O problema teve alguns efeitos generalizados, especialmente alguns sites populares da Web 2.0 como o Quora, HootSuite, Foursquare ou Reddit.

Alguns utilizadores estão postando no Twitter as suas frustrações com a Amazon e com a fiabilidade dos serviços na cloud.


No dia 21 tive problemas com a criação de instancias nos servidores de Virginia. Quando se criava uma instância ela ficava com estatus pendente por muitas horas, ou em alguns minutos ela mudava para Terminada.

A minha maquina que já esta na nuvém em Virginia manteve-se totalmente estável. Ao saber deste acontecimento fiz o backup para amenizar qualquer surpresa indesejada.

O conceito de nuvém está enfraquencendo. Aqui no Brasil os serviços são caros e alguns até instáveis, agora que a empresa a que é referência no assunto passou por problemas tão graves quanto esse, será que isso vai ser só mais um modismo ou vai vir para ficar? Esse conceito é ótimo para quem fornece os serviços, pois é uma grande enconomia de infraestrutura, e para nós clientes, será que terá mesmo alguma vantagem?

Vamos fazer nossos backups, pois não sabemos se a tempestade será em Virginia ou no Brasil, transformando as núvens em pequenas gotas digitais espalhadas pelo chão.

Como criar um servidor básico Web com PHP e Mysql no Cloud da Amazon parte 1/2

Os passos não são tão complexos, mas são vários.

Vou partir do pressuposto que você já tem uma conta no AWS (http://aws.amazon.com/) e já tenha registrado o seu cartão de crédito. Sem o cadastro do cartão de crédito internacional, a Amazon não permite que você crie uma instância mesmo as elegíveis gratuitas (http://aws.amazon.com/free/).

O primero passo é acessar a sua conta na AWS – https://console.aws.amazon.com/s3/home

Login e Cadastro no AWS

Login e Cadastro no AWS

Nesta tela você pode tanto acessar a sua conta como criar.

Ao acessar sua conta clique na aba EC2, ela é a responsável por criar e gerenciar todas as instancias de servidores.

Painel AWS - EC2

Painel AWS - EC2

Na dashboard da EC2 você pode criar a sua instancia de servidor clicando no botão “Launch Instance”. Um detalhe importante é a Região (“Region” ou núvem) onde você irá criará seu servidor , fica do lado esquerdo superior em “Navigation”. Eu sugiro sempre criar em “US East (Virginia)” enquanto a Amazon não se estabele aqui na América do Sul, essa é a região com a menor latencia.

Agora vamos para os passos mais interessantes, vamos clicar no “Launch Instance”.

AWS - EC2 Escolha seu SO e o tipo 32 ou 64bits

AWS - EC2 Escolha seu SO e o tipo 32 ou 64bits

A Amazon disponibiliza a criação de instancias “gratuitas” a partir de duas imagens da própria Amazon, essas imagens são baseadas no Fedora, e possui as ferramentas (yum) necessárias para instalarmos nossas aplicações sem dores de cabeça.

A observação que faço nesse ponto é que a imagem de 64bits da amazon permite você criar um servidor básico ou as mais tops (relacionado ao número de core e memória Ram), enquanto o 32bits amazon permite você criar todo o range disponível. Logo se você quer avaliar qual o perfil de servidor que satisfaz sua aplicação você terá que optar por 32bits porque 64bit você não terá muitas opções.

Além do linux Fedora a Amazon disponibiliza o Suse e o algumas versões do Windows. Não vou listar quais versões e nem descrever muito as características porque amanhã essas informações já podem estar desatualizadas.

Para demonstrar a diferença das opções de tipo de instancia disponibilizadas para  “ Basic 32-bit Amazon Linux AMI 2011.02.1 Beta” e “Basic 64-bit Amazon Linux AMI 2011.02.1 Beta” veja nas próximas imagens

AWS EC2 32bits - Selecionar os detalhes da instancia do servidor

AWS EC2 32bits - Selecionar os detalhes da instancia do servidor

AWS EC2 64bits - Selecionar os detalhes da instancia do servidor

AWS EC2 64bits - Selecionar os detalhes da instancia do servidor

Existem outras opções nessa tela, mas vou focar no processo básico. No menu “Instance Type” o modelo de 64bits oferece todos esse modelos mas como o gratuito é o “Micro” eu vou escolher esse e manter as demais opções sem alteração !

A próxima tela também não requer nenhuma alteração, os valores Default são suficientes para que o seu servidor funcione sem problemas, em outros artigos eu detalho melhor o que é cada um desses itens.

Configurações extras para a instancia, mantenha os valores Default

Configurações extras para a instancia, mantenha os valores Default

Seguindo para a próxima tela, a AWS disponibiliza uma forma de identificarmos as instancias que iremos criar. O modelo de chave valor, é para tornar o mais flexível possível as formas de identificarmos uma instancia da outra. Imagina que você tenha 10 clientes e cada um tenha 5 servidores ativos, seja alguns com espelhamento com banco e outros espelhando a aplicação. Os arranjos de servidores podem ser o mais diversos possíveis, pensando nisso, essa tela é flexível para que você identifique a sua instancia. A única “Key” que sugiro que você não mude o termo e informe um “Value” é a primeira que ele já traz preenchida “Name”, esse será o único campo que a listagem de instancia trará para você, e será a primeira característica para identificar seu servidor.

AWS EC2 - Tela para identificar a instancia de servidor

AWS EC2 - Tela para identificar a instancia de servidor

Ao avançar para a próxima “fase”, vamos criar a nossa chave de acesso. Essa tela e essas opções é para a criação de um servidor linux, a criação de um servidor windows a AWS apresenta outra tela com outras opções para gerar outro tipo de chave.

Ao informar um nome e clicar em “Create & Download your Key Pair” você terá a chave (PEM) para acessar o seu servidor com o usuário ec2-user. O acesso a um servidor linux por padrão é feito através do protocolo SSH, existem diversos clientes para Windows, Linux e OSX, e caso não tenha idéia do que é SSH eu sugiro primeiro estudar comandos Linux antes de continuar essa aventura!! 🙂 Se você usa sftp para transferir arquivos e domina esse protocolo, não se esqueça que o servidor que a amazon irá lhe disponibilizar não tem nenhum serviço de web ou banco disponível.

Guarde bem sua chave, pois precisará dela daqui para frente para acessar esse servidor. Se perder terá como baixar a chave pública para regera-lá mas não é um processo trivial, caso nunca tenha feito.

AWS EC2 - Criando sua chave de acesso ao seu servidor

AWS EC2 - Criando sua chave de acesso ao seu servidor

 

O próximo passo e configurar as regras de firewall. Como o nosso objetivo é montar um servidor Web para que todos acessem, eu gerei as regras para SSH, HTTP e HTTPS. Através do selectbox “Create a new rule” você deve selecionar os três tipos: SSH, HTTP e HTTPS e adiciona-los (“Add Rule”). Não se preocupe com o valor “0.0.0.0/0” no campo “Source” isso significa que “qualquer origem”.

EWS EC2 - Criando as regras de Firewall

EWS EC2 - Criando as regras de Firewall

A próxima tela é finalmente a Review de todo o processo, a sua instancia de servidor está a um clique de iniciar.

AWS EC2 - Review do servidor a ser criado

AWS EC2 - Review do servidor a ser criado

O botão mágico “Launch” finalmente apareceu, basta clicar e aguardar o status “Pending”…

AWS EC2 - Visualização do status Pendente na instancia do servidor

AWS EC2 - Visualização do status Pendente na instancia do servidor

… se transformar em “running”

AWS EC2 - Visualização do status Executando na instancia do servidor

AWS EC2 - Visualização do status Executando na instancia do servidor

Maravilha, parabéns pelo seu primeiro servidor nas “núvens” da Amazon. Agora vamos para a segunda faze, como acessar esse servidor e configurá-lo.

Mas antes, quero dar algumas dicas das possíveis ações que você pode executar na sua instancia.

Cada instância tem diversas opções, basta clicar com o botão direito que você verá a pequena lista.

AWS EC2 - Opções disponíveis para instância de servidor

AWS EC2 - Opções disponíveis para instância de servidor

No item “Conect” você tem o exemplo de como conectar no servidor utilizando o serviço SSH. O exemplo serve para clientes SSH rodando Linux ou MacOS, caso o seu sistema operacional seja Windows, com certeza terá uma dificuldade em transformar o .PEM em .PPK caso o seu cliente de SSH seja o PUTTY, mas se tiver um cliente SSH que aceite o .PEM você é um garoto de sorte.

Os demais itens do “Instance Management” você pode ver e alterar, mas não tem nada a ser alterado para que a sua instancia funcione. O outro item importante é o grupo “Instance Lifecycle”, nele você pode parar (“Stop”), reiniciar (“Reboot”) e destrutir a sua instancia (“Terminate”). Cuidado se clicar em “Terminate”, pois seus dados serão removidos. Se parar uma instancia (“Stop”) os valores (custos) por hora são reduzidos e em alguns casos nem são cobrados, veja a tabela de preços. E a outra vantagem de se parar uma instancia que seu “Root Device” é “EBS”  é que os dados ou os serviços que configurou não serão perdidos. Mas preste atenção no seu IP e na URL de acesso, todo o ciclo Stop – Start a configuração de acesso a instancia é alterada.

Na próxima parte do “tutorial” vamos abordar a partir deste ponto e conectando no servidor, instalando e configurando os aplicações para transformar sua instancia de servidor em um servidor WEB.

 

Design Pattern por que estou falando tanto?

Algumas pessoas me perguntaram porque só falo sobre a minha opinião sobre Design Pattern. Quero abordar primeiro esse assunto mostrando a minha visão crítica com base na minha experiência. Em sequencia vou descrever cada Padrão de Projeto desenhando e exemplificando em PHP.

Sem essa introdução muitos poderiam pensar que sou fascinado em arquitetar uma aplicação relacionando sempre padrões, ou até refatorar um sistema inteiro só com padrões de projetos. Se os melhores pensassem assim hoje não existiria o clássico do Rock.

Os próximos assuntos serão focados em Padrões de Projetos escritos em PHP. Existe pouco material bom, que aborda o assunto Design Pattern + PHP esse será o meu desafio, traduzir os exemplos do mundo JAVA no mundo PHP.

Até imagino as próximas perguntas… porque PHP? PHP, nasceu como uma linguagem muito básica e estrutural (até a versão PHP3 ou PHP/FI), no mesmo período o Java apareceu com os jargões de portabilidade e o orientação a objeto. Muitas grandes empresas e consequentemente, muitos bons programadores começaram a se envolver com Java e fazer sua carreira, enquanto o PHP não era visto com tão bons olhos. Na época do PHP3 aplicar esses padrões em orientação a objeto era muito difícil e até em alguns casos impossível.

Mas como tudo nesse mundo muda, hoje o PHP tem todas as características necessárias para se aplicar todos os estilos de Design Pattern. Hoje grandes empresas (Yahoo!, Amazon e UOLHost) já estão adotando o PHP como linguagem serve-side em suas aplicações. E isso mostra que os poucos bons Arquitetos PHP devem se fortalecer para mostrar a potência que o PHP pode oferecer em uma refatoração visando performance e mantendo todas as melhores características das linguagens OO.

Design Patterns é o caminho mas não é o objetivo da refatoração

Uma grande distinção dever ser mantida quando se aborda Refatorar e Padrões de Projetos (Design Patterns).

Refatorar aborda tanto a criação de uma estrutura de código mais eficiente além de melhorar a durabilidade e clareza do código. Padrões de Projetos é um ótimo caminho para se refatorar, mas não é o objetivo principal.

Da mesma forma que sou a favor de iniciar um projeto altamento detalhado com um conjunto de especificações para arquitetar conforme alguns Padrões de Projeto, eu não quero forçar algo em um padrão só por cauda do padrão.

Imagine se as primeiras bandas de rock tivessem utilizado também pianos em suas composições só porque todo mundo estava fazendo. Hoje você não teria o rock clássico tocado com guitarras que tanto apreciamos.

Design Patterns são “Maintainable” mas nem sempre a solução mais perfomática

Padrões de projeto nem sempre favorecem a maior eficiência e velocidade para a aplicações. Os objetivos do Design Pattern é ajudar você a projetar uma solução de uma forma fácil para reproduzir e reutilizar​​. Ou seja, os padrões não podem ser especificamente adaptados à sua situação, mas promoverá a manutenção do código e uma melhor compreensão da aplicação.

Design Pattern não é Plug and Play

Se você espera que sempre existe um Design Pattern que vai modelar seu projeto ou sistema, você está enganado. Design Pattern não resolvem seus problemas simplismente escolhendo e aplicando em seu projeto.

Design Pattern não é a implementação atual ou mesmo o algoritmo que resolverá seus problemas. Por exemplo, ao criar o desenho da estrutura de uma casa, por padrão todas tem que ter janelas. Essa regra podemos definir como um Design Pattern, mas onde colocar a janela, qual o tamanho e modelo da janela vai depender da casa e da localização dela. Se a casa for em uma região fria as janelas devem ter preferencia para serem planejadas de forma a entrar o máximo de luz para favorecer o aquecimento, mas se a casa estiver em uma reigão de calor as janelas devem ser desenhadas para receber o mínimo de luz e favorecer o máximo a circulação de ar.

Outra maneira análoga ao modo Design Patterns é compará-los com as notas musicais em uma escala. Você pode conhecer todas as notas em uma escala menor, mas jogá-los exatamente na ordem e no mesmo ritmo não faz uma música agradável. Você não pode abrir um livro de escalas, pegar uma escala e simplismente toca-la na guitarra e esperar que cada um pense que você é um compositor incrível. Seria muito chato e não resolveria o problema, porque a música é feita para demonstrar um conjunto específico de emoções através da arte. Desta forma, Design Patterns são como aqueles escalas no livro. Enquanto eles são os blocos de construção de um grande solo, cabe a você aplicá-las, e criar uma grande canção.

Pagar pedágio é um roubo ou é direito?

Sempre fui do partido que é um roubo, pois já pago quase 50% de impostos no preço do combustivel e ainda tenho que pagar pedágio. Eu nunca soube argumentar conforme os termos na lei, mas recebi esse e-mail que aparentemente expressa exatamente o que eu penso e o que eu sou revoltado.

FIM AOS PEDÁGIOS E MELHORES ESTRADAS PARA TODOS É O DIREITO DE TODOS. TODOS OS MOTORISTAS JÁ PAGAM POR ISSO AO ABASTECER.

 

Entre os diversos trabalhos apresentados, um deles causou polêmica entre os participantes.
“A Inconstitucionalidade dos Pedágios”, desenvolvido pela aluna do 9º semestre de Direito da Universidade Católica de Pelotas (UCPel) Márcia dos Santos Silva chocou, impressionou e orientou os presentes.

A jovem de 22 anos apresentou o “Direito fundamental de ir e vir” nas estradas do Brasil. Ela, que mora em Pelotas, conta que, para vir a Rio Grande apresentar seu trabalho no congresso, não pagou pedágio e, na volta, faria o mesmo. Causando surpresa nos participantes, ela fundamentou seus atos durante a apresentação.
Márcia explica que na Constituição Federal de 1988, Título II, dos “Direitos e Garantias Fundamentais”, o artigo 5 diz o seguinte:

“Todos são iguais perante a lei, sem distinção de qualquer natureza, garantindo-se aos brasileiros e aos estrangeiros residentes no País a inviolabilidade do direito à vida, à liberdade, à igualdade, à segurança e à propriedade ” E no inciso XV do artigo: “é livre a locomoção no território nacional em tempo de paz, podendo qualquer pessoa, nos termos da lei, nele entrar, permanecer ou dele sair com seus bens”. A jovem acrescenta que “o direito de ir e vir é cláusula pétrea na Constituição Federal, o que significa dizer que não é possível violar esse direito. E ainda que todo o brasileiro tem livre acesso em todo o território nacional O que também quer dizer que o pedágio vai contra a constituição”.

Segundo Márcia, as estradas não são vendáveis. E o que acontece é que concessionárias de pedágios realiza contratos com o governo Estadual de investir no melhoramento dessas rodovias e cobram o pedágio para ressarcir os gastos. No entanto, no valor da gasolina é incluído o imposto de Contribuição de Intervenção de Domínio Econômico (Cide), e parte dele é destinado às estradas. “No momento que abasteço meu carro, estou pagando o pedágio. Não é necessário eu pagar novamente Só quero exercer meu direito, a estrada é um bem público e não é justo eu pagar por um bem que já é meu também”, enfatiza.

A estudante explicou maneiras e mostrou um vídeo que ensinava a passar nos pedágio sem precisar pagar. “Ou você pode passar atrás de algum carro que tenha parado. Ou ainda passa direto. A cancela, que barra os carros é de plástico, não quebra, e quando o carro passa por ali ela abre.
Não tem perigo algum e não arranha o carro”, conta ela, que diz fazer isso sempre que viaja. Após a apresentação, questionamentos não faltaram. Quem assistia ficava curioso em saber se o ato não estaria infringindo alguma lei, se poderia gerar multa, ou ainda se quem fizesse isso não estaria destruindo o patrimônio alheio. As respostas foram claras. Segundo Márcia, juridicamente não há lei que permita a utilização de pedágios em estradas brasileiras.
Quanto a ser um patrimônio alheio, o fato, explica ela, é que o pedágio e a cancela estão no meio do caminho onde os carros precisam passar e, até então, ela nunca viu cancelas ou pedágios ficarem danificados. Márcia também conta que uma vez foi parada pela Polícia Rodoviária, e um guarda disse que iria acompanhá-la para pagar o pedágio. “Eu perguntei ao policial se ele prestava algum serviço para a concessionária ou ao Estado.
Afinal, um policial rodoviário trabalha para o Estado ou para o governo Federal e deve cuidar da segurança nas estradas. Já a empresa de pedágios, é privada, ou seja, não tem nada a ver uma coisa com a outra”, Acrescenta.
Ela defende ainda que os preços são iguais para pessoas de baixa renda, que possuem carros menores, e para quem tem um poder aquisitivo maior e automóveis melhores, alegando que muita gente não possui condições para gastar tanto com pedágios. Ela garante também que o Estado está negando um direito da sociedade. “Não há o que defender ou explicar. A constituição é clara quando diz que todos nós temos o direito de ir e vir em todas as estradas do território nacional”, conclui. A estudante apresenta o trabalho de conclusão de curso e formou-se em agosto de 2008.
Ela não sabia que área do Direito pretende seguir, mas garante que vai continuar trabalhando e defendendo a causa dos pedágios.