twitterfacebookgoogle pluslinkedinrss feedemail

quarta-feira, 15 de agosto de 2018

A Casa do Porco Restaurante

Grata surpresa na visita ao restaurante "A Casa do Porco".
Para quem gosta de carne suína, não irá se arrepender.
Comandado pelo Chef Jefferson Rueda, o mesmo do premiado Dona Onça, temos uma imensa variedade de cortes de porco.
Sendo um restaurante badalado, a fila de espera é grande. Como ele fica perto do edifico Copan, ficamos na rua esperando a mesa.
Seguranças do restaurantes ficam espantando os crakudos que vêem pedir dinheiro e sua caipirinha de caju.
O restaurante tem um balcão voltado para a rua onde podemos pedir petiscos e bebidas.
Pedi o menu degustação, 95 reais, preço justo pela variedade.
Somente achei muito exótico o sushi de porco, meu paladar não aceita muito essa fusion com comida japonesa.
Vale a pena conhecer esse restaurante, vão com paciência que irão se deliciar com variedades de pratos suínos.



Serviço:
Endereço: R. Araújo, 124 - República, São Paulo - SP, 01220-020, Brasil
Telefone: +55 11 3258-2578

* Valores confirmados na data de postagem.
** Reflete uma opinão pessoal, não sou especialista.

quarta-feira, 1 de agosto de 2018

Tartar&Co Restaurante

Estava ansioso em conhecer o restaurante Tartar&Co do chef Érick Jacquin, o jurado francês do Master Chef.
Em resumo: esperava mais do local e comida, não recomendo este restaurante.
Acho que pelo que vejo do Érick Jacquin, esperava um ambiente mais conservador, fiquei supreso em o Tartar&Co ser descolado.
A maioria dos ambientes são escuros, não conseguia ler o confuso cardápio, tive que me esforçar para encontrar luz para conseguir escolher.
São vários cardápios e os garçons atrapalhados sempre esquecem de um e você tem que ficar perguntando toda hora.
As mesas são bem pequenas, faltando um pouco de requinte, utilizando-se de um papel de bandeija menos divertido que o do Mac Donalds para acomodar os pratos.
O surpreendente da cozinha é a velocidade de entrega do serviço, os cozinheiros devem ter sido treinados na base da chatice do Jacquin.
Os ingredientes são frescos, tirando um pão artesanal duro (não colocaram no forno para amolecer) que veio junto com as ostras.
A comida é boa, nada surpreendente.
Vale como experiência e quem sabe um dia ele faça um episódio de "Pesadelo na Cozinha" no próprio restaurante.



Serviço:
Tartar&Co

Av. Pedroso de Morais, 1003 - Pinheiros, São Paulo - SP, 05419-000, Brasil
Telefone: +55 11 3031-1020

* Valores confirmados na data de postagem.
** Reflete uma opinão pessoal, não sou especialista.

terça-feira, 31 de julho de 2018

New Shin-la Kwan Restaurante

Churrasco... Samba, caipirinha, picanha... Nada disso!
O churrasco coreano é de pato e costela, com som de exaustor, com o delicioso fermentado de batata doce e arroz (Soju). Os acompanhamentos são deliciosos, como o kimchi que é um condimento de um tipo de acelga. Para Fortes!
Conhecer outras culturas, não precisamos sair de São Paulo.



Serviço:
New Shin-la kwan
Endereço: Rua Prates, 343 - Bom Retiro, São Paulo - SP, 01121-000, Brasil
Telefone: +55 11 3315-9021

sábado, 9 de junho de 2018

Hospedaria Restaurante

Definem a comida como sendo comida de Imigrante Italiano. Receitas simples, tendo como aliado um forno a lenha para finalização dos pratos.
Destaque para o ambiente e decoração que é um galpão fabril, como muitos na Mooca.
Preço justo para pratos que são de imigrantes: simples, rústicos e economia de ingredientes caros.
Cardápio com poucas opções e sobremesas que não empolgam.
Contudo, comida saborosa e vale uma visita para conhecer o restaurante.



Serviço:
Hospedaria Restaurante

Endereço: R. Borges de Figueiredo, 82 - Mooca, São Paulo - SP, 03110-010, Brasil

* Valores confirmados na data de postagem.
** Reflete uma opinão pessoal, não sou especialista.

sexta-feira, 16 de fevereiro de 2018

Selenium WebDriver: Tempo de Espera Explícito e Implícito




Podemos utilizar um tempo de espera para mitigar erros ao tentar acessar elementos utilizando o Selenium WebDriver.
Como exemplo usamos a linguagem Java e levarei em consideração que já utiliza o WebDriver, apresentando este recurso avançado.

Imaginamos que você tenha um teste automatizado que acessa os elementos da página de login e no botão de "OK" é enviado a ação de clicar.
Depois é redirecionado para outra página do sistema, onde tenho que clicar em outro botão confirmando o meu login.
Por infelicidade do destino, apresenta um erro ao tentar acessar o elemento do botão da segunda página.
Para ilustrar, repare no código abaixo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class LoginPage {

 WebDriver driver;
 
 //Mapeamento dos Elementos da Página de Login
 @FindBy(id="Login")
 WebElement usuario;
 
 @FindBy(how=How.NAME,using="Senha")
 WebElement password;
 
 @FindBy(how=How.ID, using="BtnOK")
 WebElement botaoOK;
 
 @FindBy(how=How.ID, using="BtnConfirmaOK")
 WebElement confirmacaoBotaoSucess;
 
 
 public LoginPage(WebDriver driver) {
  super();
  this.driver = driver;
 }

 public void fazerLogin(String uid, String pass){
  
  // Define os valores de Login e Senha.
  usuario.sendKeys(uid);
  password.sendKeys(pass);
  
  // Envia ação de clicar no botão OK e redireciona para outra página.
  botaoOK.click();

  // Erro ocorre ao tentar acessar o elemento do botão que está em outra página.  
  confirmacaoBotaoSucess.click();
 } 
}

O erro é o bendito abaixo:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element

O erro é claro que não conseguiu localizar o elemento.
Acontece que quando redireciona de uma página para a outra, não temos um tempo de espera entre os passos (steps).
Este tempo seria o de renderizar a página, podendo neste tempo ocorrer lentidão na rede, servidores, etc.

Uma grande parcela de automatizadores utilizam o método Thread.sleep(), esta abordagem é errada, não sendo eficiente.
O sleep espera o tempo definido, assim podendo aumentar muito o tempo do seu teste e não evitando se tivermos uma demora maior na renderização da página.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 public void fazerLogin(String uid, String pass){
  
  // Define os valores de Login e Senha.
  usuario.sendKeys(uid);
  password.sendKeys(pass);
  
  // Envia ação de clicar no botão OK e redireciona para outra página.
  botaoOK.click();
  
  //Abordagem errada é definir um tempo de espera fixo, utilizando o método abaixo.
  Thread.sleep(3000);
   
  // Erro ocorre ao tentar acessar o elemento do botão que está em outra página.  
  confirmacaoBotaoSucess.click();
 } 
}

A documentação do WebDriver recomenda duas formas de definir um tempo de espera.
O "Explicit and Implicit Waits" tem duas abordagens distintas.
Primeiramente, vamos definir o que é Implícito e Explícito.
Nosso velho amigo dicionário diz:

Implícito
O adjetivo implícito indica algo que não está claramente expresso, que está subentendido.
É sinônimo de subentendido, subjacente, latente, tácito e velado.

Explícito
O adjetivo explícito indica algo que está expresso de forma clara e precisa, sem ambiguidades ou restrições. É sinônimo de claro, manifesto, patente, preciso, categórico, terminante, declarado e compreensível.

O implícito é o mais usual e simples.
Defininos um tempo de timeout para todo o escopo de nossos testes.
Conforme o código abaixo, definimos o tempo de 60 segundos de timeout.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 public void fazerLogin(String uid, String pass){
  
  //define um TimeOut para em caso de não encontrar elementos na página.
  driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);  

 
  // Define os valores de Login e Senha.
  usuario.sendKeys(uid);
  password.sendKeys(pass);
  
  // Envia ação de clicar no botão OK e redireciona para outra página.
  botaoOK.click();
   
  // Não irá occorer erro ao tentar acessar o elemento do botão que está em outra página.  
  confirmacaoBotaoSucess.click();
 } 

Definindo o driver.manage().timeouts().implicitlyWait(), o WebDriver irá demorar o tempo definido para gerar a exceção de erro.
Ele verifica a cada 500 milissegundo se o elemento referenciado foi criado.
Assim evitando o erro de NoSuchElementException e sendo uma forma eficiente, evitando de utilizar o Thread.sleep().
O valor do método implicitlyWait() pode ser definido logo após a criação do objeto driver, não sendo necessário definir esse valor toda hora.

A forma explícita é definida pelo tempo de espera para cada elemento.
No código abaixo, identificamos a criação do objeto WebDriverWait.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 public void fazerLogin(String uid, String pass){
  
  // Define os valores de Login e Senha.
  usuario.sendKeys(uid);
  password.sendKeys(pass);
  
  // Envia ação de clicar no botão OK e redireciona para outra página.
  botaoOK.click();
   
  //Segunda Tela onde é redirecionado depois do login.
  //===> Usando recurso de Wait, para evitar exception de encontrar elemento na tela.
  WebDriverWait wait = new WebDriverWait(driver, 10);
  WebElement btnConfirmarOK = wait.until(ExpectedConditions.visibilityOf(confirmacaoBotaoSucess));
  btnConfirmarOK.click();
 }

Utilizando o objeto WebDriverWait definimos o tempo de timeout e através do método until dizemos a condição que esperamos.
Em casos que a aplicação fica processando um lote por tempo indefinido, onde irá cair por timeout implícito, a utilização do tempo de espera explícito é necessário.

ATENÇÃO:
Não misture os tempos de espera implícito e explícito.
O tempo de espera fica imprevisível, assim não sendo possível dizer quanto tempo irá demorar.
Quando for necessário utilizar o tempo de espera explícito, defina como:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);

quarta-feira, 4 de outubro de 2017

A Odisseia do SSD


Querendo melhorar a performance do meu laptop, encontro uma série de técnicas que envolve o Hardware e Software.
O aumento de performance utilizando o SSD é perceptível já na inicialização do sistema operacional.
Em Software, utilizo o sistema operacional Linux Mint e as dicas descritas envolve na maioria das vezes em diminuir a escrita em disco, assim aumentando a vida útil do SSD.
Abaixo segue os diversos posts nesta odisseia do SSD.

Começando com a instalação do SSD no Laptop.

As dicas de configuração que podem ser aplicadas no Mint, Ubuntu e Debian.
Verifique as dicas abaixo:
- SSD - Outras dicas para aumentar a vida útil

SSD - Limitar o uso de Memória SWAP (Swappiness)


Este Post faz parte de uma série de dicas para melhorar a performance e vida útil do drive SSD. Vide o post "A Odisseia do SSD".

Esta dica é extremamente interessante.
Podendo otimizar a performance de servidores.
Vamos limitar o uso de memória virtual, alterando o valor para diminuir a utilização de memória swap e assim, diminuindo o acesso de escrita em disco.

O primeiro passo é verificar o valor que está limitado a utilização de memória swap.
Utilizando o seguinte comando:
cat /proc/sys/vm/swappiness
Swapp1.png
No meu caso, retornou o valor default que é 60.
A lógica é que quanto menor esse valor, na escala de 0-100, menor a utilização de memória swap.

Vamos editar o arquivo /etc/sysctl.conf.
sudo vi /etc/sysctl.conf

No final do arquivo, incluir as seguintes linhas:

# Limitar o SWAP
vm.swappiness=10

Swap2.png

Depois é só reiniciar o computador que a nova configuração estará produtiva.
Esta configuração é extremamente importante.
Imagine uma aplicação java, onde temos uma memória pré-alocada do servidor em 80%. Com a configuração default, sempre iremos fazer utilização de memória swap, onde irá degradar a performance do servidor e aplicação.
Limitando esse valor para 10, o Linux irá utilizar a memória swap quando o consumo de memória atingir 91%.

Depois de reiniciar, verificamos se a configuração teve efeito.
Swap3.png
 

Sobre o Blog

Neste blog irei compartilhar as minhas experiências e observações. Os temas serão variados, mas com ênfase em tecnologia. Inscreva-se nos nossos canais para receber atualizações.