O presente ideal que as empresas podem dar às mães.

Recentemente me pediram uma sugestão de presente que a empresa poderia dar a nós mães. Minha resposta foi rápida e em tom de piada: “Um dia de folga”.

Eu não sou um gênio da comédia e ainda assim a piada me veio instintivamente. Sei que a vasta maioria das mães trocam mil flores e cem kits de cremes caros por mais uma hora de sono. E isso me fez pensar sobre o que falta às empresas oferecerem as mães.

Enquanto mãe/profissional há uma coisa que eu quero e preciso ter para desenvolver esses papéis. Parafraseando Tim Maia: “O que eu quero é sossego”. E tenho quase certeza que é o que todas as mães querem.

Não pense que queremos privilégios ou menos trabalho. Somos tão capazes quanto eramos antes de ser mães. Mas existe um desassosego e uma insegurança de que o nosso maternar antagoniza com a nossa carreira.

Mães precisam de sossego porque estamos sempre exaustas. E andei me perguntando o porquê eu estava sempre exausta: tenho um companheiro que exerce ativamente sua paternidade dividindo igualmente a carga comigo, tenho rede de apoio que cuida da minha filha enquanto trabalho, tenho horário flexível para trabalhar, colegas e líderes empáticos. Por que estou exausta????

A maioria das mães não tem nenhum desses privilégios e por isso, obviamente, estão exaustas. Junte a tudo isso mais dois motivos que compartilho com elas:

1- Estou exausta porque a nós mulheres é ensinado que o cansaço é sinal de uma mulher guerreira que está dando conta de tudo. Aprendemos que estar cansada é sinal que você está fazendo tudo certo. A lógica é fatal: não está cansada? Volte duas casas e faça mais.E faça melhor!

2 – Desde de bem pequenas já percebemos que a maternidade é uma ameaça constante a nossa carreira e não podemos baixar a guarda.

Aqui vale uma nota muito importante: a empresa em que trabalho ( o nome merece ser citado: Pipefy) é extremamente amigável com mães e pais, com vários benefícios voltados para a família e nos incentiva a ter tempo de qualidade com nossos filhos. Mas, infelizmente, empresas assim são exceção.

Em conversas com colegas de trabalho já comentei o quantos é bom estar em um ambiente em que me sinto segura mas o quão difícil é fazer o inconsciente baixar a guarda e entender que não estou em uma dinâmica tóxica. Então eu ainda carrego um aquela tensão que passei a vida toda acumulando.

Então eu me junto ao exército das mães que estão mentalmente e fisicamente cansadas (para ser justa: a maioria muito mais cansada do que eu).

E um dia de folga de presente resolve isso?

Claro que não. Todos gostamos de um dia de descanso (e agradecemos muito quando recebemos). Mas isso como “a solução” é sim uma piada!

Então o que dar às mães?

1 – Reconhecimento

Empresas devem reconhecer que sem mães não existe mão de obra e nem mercado consumidor.

É bem simples: se as mulheres percebem que a maternidade lhes traz muito peso, enormes restrições e isolamento não vão optar por ter filhos.

A maternidade não deve ser estigmatizada no ambiente de trabalho. Ela deve ser naturalizada e compreendida como imprescindível para uma sociedade saudável.

.

2 – Respeito

Respeite quem somos. Não somos apenas mães e não somos apenas profissionais. Somos um somatório de universos e esses dois citados é uma parte significativa do que somos.

Não pressuponha nada sobre uma mãe: sobre sua disponibilidade, sua capacidade e metas; ouça o que ela tem a dizer.

3 – Derrubar preconceitos dentro do ambiente de trabalho

Mães não carregam uma “aura maternal” por onde passam. Não queremos ser “a mãezona” do grupo e levar cargas mais pesadas porque “aguentamos mais”.

Mães não trabalham apenas para sustentar os filhos ou sair um pouco de casa. Queremos sim estar presentes no ambiente de trabalho, queremos crescer, desenvolver projetos e criar coisas novas!

4 – Ambiente seguro

Estar constantemente exposto ao stress leva o ser humano a exaustão. Empresas devem criar um ambiente seguro para que as mães que ali trabalham mostrem a melhor versão de si mesmas.

A melhor forma de criar esses ambientes é através do diálogo e da informação.

Algumas ideias práticas de como fazer isso:

  • Promover rodas de conversas onde mães e pais possam compartilhar experiências.
  • Palestras sobre diversidade, tolerância e respeito.
  • Criar espaços para a livre amamentação e informar sobre os benefícios ao bebê e a mãe.
  • Incentivar funcionários homens a participar de modo ativo da criação de seus filhos.
  • Falar sobre rede de apoio à mães e seus benefícios sociais.
  • Convidar profissionais que ocupam cargos de liderança e que são mães para darem depoimentos de sua trajetória e oferecerem mentoria para outras mães. (Talvez seja difícil encontrá-la na sua empresa)

5 – Referências

É extremamente difícil encontrar profissionais que são mães em cargos de liderança. Isso só reforça para nós mulheres a ideia de que a maternidade é um teto na nossa ascensão profissional. Já passou da hora das empresas buscarem mais diversidade em suas lideranças.

6 – Humanidade

O mundo precisa das mães saudáveis. E mães precisam, têm o direito e querem trabalhar. Mas como garantir que a mãe tenha condições para maternar e cuidar de sua carreira?

  • Garantindo os diretos e benefícios previstos por lei para mães e pais.
  • Sendo empresa cidadã, estendendo licença maternidade e a licença paternidade.
  • Dispondo de auxílio creche/babá
  • Horários flexíveis de trabalho
  • Criando um espaço tranquilo e reservado para amamentação, extração e armazenamento de leite.
  • Oferecendo como opção o modelo de trabalho em home office.
  • Liberar mães e pais para acompanharem seus filhos no pediatra e reuniões de escola sem acarretar em punições ou descontos do salário.
  • Ter uma política de trabalho sensível às peculiaridades da realidade de cada funcionário.

Que tal um desses presentes?

Ser mãe me faz, todos os dias, querer ser a melhor versão de mim e isso se aplica ao meu trabalho. Faço isso por mim mas também faço pela bebezinha que insiste em me olhar com admiração e copiar tudo que eu faço. Sei que muitas outras mães vivenciam isso também.

Esses “presentes” não beneficiam apenas as mães mas toda a sociedade. Mães e pais saudáveis e equilibrados criando crianças saudáveis e equilibradas. Esse “presentes” nem deveriam ser chamados assim. Deveriam ser premissas para qualquer lugar onde existem seres humanos trabalhando e vivendo em sociedade. Como mães deveríamos nos sentir sossegadas que nossa maternidade será positivamente reconhecida e valorizada em todos ambientes.

Bônus

Agradecimentos

Como citei anteriormente, conto com colegas de trabalho e uma empresa que incentivam meu maternar.

Obrigada time de WordPress por todo apoio e ânimo que me dão todos os dias. Nunca fui tratada diferente ou subestimada. Vocês são incríveis!

Obrigada, time de Marketing que já consideram a Bia como membra do time e não me desrespeitam ou fazem minha opinião valer menos porque estou com uma criança no colo durante as reuniões.

Obrigada ao time de People por enxergarem nós pais e mais e buscarem novos benefícios. E sim!! Obrigada pelos presentes de dias das mães! Sei que são pensados com carinho e fico feliz em receber!

Obrigada a todos que durante meu processo de seleção foram extremamente respeitosos nunca fazendo perguntas pessoais e irrelevantes ao meu cargo.

O pessimismo como ferramenta de programação

O que é pessimismo?

Pessimismo é a tendência para ver e julgar as coisas pelo lado mais desfavorável. Mas como isso pode te ajudar a ser um programador(a) melhor?

Pessimistas planejam

Programação tem pouco a ver com sorte um muito a ver com planejamento. A dica de ouro antes de escrever a primeira linha de código é PLANEJAR! (Tem um post saindo sobre isso:  básico de planejamento para programação. EM BREVE). E nesse quesito os pessimistas tem vantagem!

Pessimistas vão sempre considerar os piores cenários e terão que pensar em soluções para cada um deles.

Pensando como um pessimista

Pessimistas trabalham com a Lei de Murphy: O que pode errado? Então dará errado! E no pior momento possível…
Melhor é precaver!
 
E quando adicionamos o comportamento dos usuários mediante ao nosso código é impossível prever qual será seu comportamento. Então tente imaginar todos cenários possíveis. Não usaremos nenhuma linguagem específica, apenas uma ideia geral de programação.
 

O caso do formulário

Vamos exemplificar pense em um código simples de preenchimento e envio formulário. Você consegue listar o que pode dar errado?
Esses são os ítens que consegui pensar:
  • O usuário não preenche todos os campos. E isso pode ocorrer por dois motivos:
    • O usuário esqueceu de preencher um campo. 
    • O usuário não quer preencher um campo.
  • O usuário preenche alguns campos de forma inadequada (Ex: Coloca texto no campo de telefone)
  • O formulário é utilizado em uma tentativa de SQL injection
  • O envio do formulário falha
  • O usuário não percebe que o formulário foi enviado e continua enviando repetidamente
  • Bots estão utilizando o seu formulário para enviar spam

Lembrou de mais algum? Coloque nos comentários !

Como podemos ver os problemas estão relacionados com diferentes frentes, tais como:

  • Comportamento do usuário: quais são os comportamentos possíveis (e não apenas os esperados)?
  • Segurança: quais são as vunerabilidades?
  • Funcionalidade: o que pode não funcionar ou quebrar? (Ex: servidor, API) 
  • Verificação / Checagem de dados: quais dados são vitais? O que acontece se eles não forem enviados e/ou recebidos?
Concentrando-se no que pode dar errado em cada uma dessas áreas você garantirá um código mais profissional e menos suscetível a bugs. Coloque sempre em seu checklist as questões de Comportamento do usuário, Segurança, Funcionalidade e Verificação de dados. 
Pode parecer trabalhoso pensar nessas questões e imaginar todos estes cenários. Porém trata-se de um exercício rotineiro que torna-se mais fácil e intuitivo com tempo e experiência.
Isso pode poupar tempo precioso e evitar retrabalho, inspecionar e debugar um código 
 

E quais seriam as soluções para os problemas levantados?

 

Você conseguiu elaborar possíveis soluções?

  1. Comportamento do usuário:
    1. Especifique no código quais são os campos obrigatórios e  quais são opcionais, deixe isso visível no formulário.
    2.  Dispare avisos ao submeter o formulário apontando são os campos obrigatórios não preenchidos.
    3. Alerte se o formulário foi enviado com sucesso ou se houve falha.
  2. Campos preenchidos erroneamente
    1. Especifique o tipo de cada campo (Ex: telefone, e-mail)
    2. Limite quais tipos de caracteres cada campo aceita.
    3. Dispare avisos ao usuário sobre campos preenchidos erroneamente.
  3. Tentativas de invasão ou SPAM
    1. Sanitize e escape todos os input de seu formulário
    2. Utilize o captcha para evitar a ação de bots.

Não deixe o pessimismo ir além do planejamento!

Eu gostaria de deixar um incentivo para você com um clichê: 

Muita coisa pode dar errado (E dará! mesmo com o seu planejamento). Mas mantenha uma atitude positiva quando estiver enfrentando algum bug ou falha. Uma mente calma vai te ajudar a chegar na solução com mais facilidade. Trabalhe e respire, as coisas vão melhorar. E você ainda cometerá outros erros, mas sempre pode aprender com eles e ensinar os outros. Talvez você até escreva um post sobre isso. 😏

Como usar Controles de Conditions no Elementor

Garanta uma boa experiência e um código mais limpo

Widgets customizados possuem a vantagem de serem extremamente versáteis e gerantem um conteúdo diversificado (texto, imagem, vídeo) com apenas um Widget.

O uso desses controles pode deixar seu código mais limpo e garantir uma experiência melhor ao utilizar o Widget em uma página.

Para ilustrar esse exemplo vamos utilizar um widget bem simples que conta com os seguintes itens:

  • Titulo
  • Texto
  • Imagem ou Vídeo (nunca ambos)

Esse é o visual do Widget:

O vídeo e a imagem abaixo ilustram um exemplo de Controle Condicional  aplicado a um Widget do Elementor.

Ao aplicar o Controle de Condicional é dado ao usuário o poder de escolher qual tipo de mídia será usado, não havendo a necessidade de mostrar ambos os campos (vídeo ou imagem), sendo que apenas um será usado. E o no código surge a possibilidade de renderizar o conteúdo escolhido pelo usuário. 

Mas como utilizar uma condition?

Primeiro, entenda o que é um control

Ao criar um novo Widget para o Elementor (aprenda como fazer isso aqui) você deve registrar controls para isso. 

Exemplo de um control que usamos em nosso widget, o Título (TEXT)

$this->add_control(
		'titulo',
		[
			'label' => __( 'Título', 'plugin-domain' ),
			'type' => Controls_Manager::TEXT,
			'placeholder' => __( 'Insira o título aqui', 'pipefy-2020-admin' ),
		]
    ); 

E isso resultará em:

Note que utilizamos vários parâmetros dentro do control: label, type e placeholder. Para usarmos o parâmetro de condition basta inseri-lo dentro do de um control.

Já sabe o que é um control? Vamos seguir!

Passo a passo

Agora que você já está familiar ao conceito de control podemos começar a inseir o parâmetro de condition em um exemplo real.

Passo 1

Primeiro vamos criar um control de CHOOSE (veja mais sobre aqui), para que o usuário possa escolher entre imagem ou vídeo.

$this->add_control(
			'imagem_ou_video',
			[
				'label' => __( 'Usar imagem ou vídeo?', 'plugin-domain' ),
				'type' => \Elementor\Controls_Manager::CHOOSE,
				'options' => [
					'imagem' => [
						'title' => __( 'Imagem', 'plugin-domain' ),
						'icon' => 'fa fa-image',
					],
					'video' => [
						'title' => __( 'Vídeo', 'plugin-domain' ),
						'icon' => 'fa fa-video',
					],
				],
				'default' => 'imagem',
				'toggle' => true,
			]
		); 

Passo 2

Vamos criar o um control para a imagem e já inserir uma condition (condição) para que ela apareça para o usuário. E a condição é que o control ‘imagem_ou_vídeo’ seja igual a opção ‘imagem’.

$this->add_control(
		'selecionar_image',
		[
			'label'   => __( 'Imagem', 'plugin-domain' ),
			'type'    => \Elementor\Controls_Manager::MEDIA,
			'default' =>
			  [
				'url'  => \Elementor\Utils::get_placeholder_image_src(),
			  ],
			  'condition' => 
			  [
			    'imagem_ou_video' => 'imagem',
			  ],
		]
	); 

Passo 3

Agora vamos criar o um control para o vídeo e também inserir uma condition (condição) para que ela apareça para o usuário. Dessa vez a condição é que o control ‘imagem_ou_vídeo’ seja igual a opção ‘video’.

$this->add_control(
		'selecionar_image',
		[
			'label'   => __( 'Imagem', 'plugin-domain' ),
			'type'    => \Elementor\Controls_Manager::MEDIA,
			'default' =>
			  [
				'url'  => \Elementor\Utils::get_placeholder_image_src(),
			  ],
			  'condition' => 
			  [
			    'imagem_ou_video' => 'imagem',
			  ],
		]
	); 

 Pronto!

Ao selecionar o ícone “Imagem”, logo abaixo o campo de imagem aparecerá para que o usuário insira a imagem de sua preferência. E ao selecionar o ícone “Vídeo” é possível inserir o vídeo desejado.

🎉 Bônus!

Você pode utilizar o parâmetro de condition de modo mais avançado. Nesse modo utilizaremos no plural condiitons. 

Relação AND/OR:

  'conditions' => 
  [
    'relation' => 'and', //podemos usar 'and' ou 'or'
    'terms' => 
    [
        [
            'name' => 'imagem_ou_video',
            'operator' => '==',
            'value' => 'imagem'
        ],
        [
            //vamos imaginar que criamos um control SWITCHER para mostrar ou não o título, chamado 'mostrar_titulo'
            'name' => 'mostrar_titulo',
            'operator' => '==', //aqui podemos utilizar outros operadores do php ex: >= , !==, < . etc
            'value' => 'sim'
        ]
    ]
  ] 

Post photo by Justin Luebke on Unsplash

Crie Widgets personalizados no Elementor

Saiba como criar Widgets personalizados no Elementor.

Por que criar plugins personalizados?

  • Maior controle sobre o seu código
  • Evita a necessidade de instalar novos plugins
  • Atender sua demanda com apenas um Widget

Passo a passo

1- Instale o Elementor

Caso não tenha o plugin do Elementor instalado você pode fazê-lo diretamente na sessão de plugins do WordPress. Ou se preferir faça o download aqui.

 

2- Crie um arquivo de listagem de widgets

Na pasta do seu tema (preferencialmente no tema filho) crie os seguintes arquivos:

  1. listagem-widgets.php
  2. Crie uma pasta chamada “widgets”
  3. Dentro da pasta widgets crie um arquivo chamado meu-primeiro-widget.php
  4. Adiocione no arquivo function.php a linha:
    require_once ‘listagem-widgets.php’;

Estrutura:

  • Tema do WordPress
  • Tema filho
    • listagem-widgets.php
      • file_folder  widgets
      • meu-primeiro-widget.php

Estrutura do arquivo de listagem (listagem-widgets.php):

Após criar um namespace (que chamei de Meus_Widgets você deverá adicionar basicamente duas funções:

  • include_widget_files() – para anexar o arquivo do widget
  • register_widgets() – para registrar os widgets na listagem do Elementor
<?php
namespace Meus_Widgets;

// use Elementor\Plugin;
class Widget_Loader {

	private static $_instance = null;

	public static function instance() {
		if ( is_null( self::$_instance ) ) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}


	private function include_widgets_files() {
		require_once __DIR__ . '/widgets/meu-primeiro-widget.php';
	}

	public function register_widgets() {

		$this->include_widgets_files();

		\Elementor\Plugin::instance()->widgets_manager->register_widget_type( new Widgets\Meu_Primeiro_Widget() );

	}

	public function __construct() {
		add_action( 'elementor/widgets/widgets_registered', array( $this, 'register_widgets' ), 99 );
	}

}

// Instantiate Plugin Class
Widget_Loader::instance();
 

3- Começando a trabalhar no widget

Criar um widget para o Elementor não é muito diferente de criar um widget para o WordPress. Basta criar uma classe que faça a extensão do Widget_Base e preencher os métodor necessários.

Cada widget prescisa de alguns itens básicos tais como:

  1. Nome único que será identificado pelo nome
  2. Título para o catálogo do Elementor
  3. Ìcone para o catálogo do Elementor
<?php 
class Meu_Primeiro_Widget extends \Elementor\Widget_Base {
    public function get_name(){}
    public function get_title() {}
    public function get_icon() {}
    public function get_categories() {}
    protected function _register_controls() {}
    protected function render() {}
    protected function _content_template() {}
} 

Detalhando:

  • Nome do widget – O método get_name()  é simples, você só precisa retornar o nome do widget que será usado no código.
  • Título do widget – O método get_title (), que, novamente, é muito simples, você precisa retornar o título do widget que será exibido como o rótulo do widget.
  • Ícone do widget – o método get_icon () é um método opcional, mas recomendado, pois permite definir o ícone do widget. você pode usar qualquer um dos ícones eicon ou font-awesome, basta retornar o nome da classe como uma string.
  • Categorias de widget – o método get_categories permite definir a categoria do widget e retornar o nome da categoria como uma string.
  • Controles de widget – O método _register_controls permite definir quais controles (campos de configuração) seu widget terá.
  • Render Frontend Output – O método render (), que é onde você realmente renderiza o código e gera o HTML final no frontend usando PHP.
  • Render Editor Output – O método _content_template (), é onde você renderiza a saída do editor para gerar a visualização ao vivo usando um modelo Backbone JavaScript.

Vamos começar a juntar as peças:

Para colocar todas as peças juntas, vamos criar um widget Elementor simples que usará a funcionalidade nativa oEmbed do WordPress.

Widget Class

Primeiro crie a classe que estenda a Widget_Base class:

class Meu_Primeiro_Widget extends \Elementor\Widget_Base {
} 

Widget Data

Agora vamos começar a preencher os métodos:

<?php
class Elementor_Test_Widget extends \Elementor\Widget_Base {

	public function get_name() {
		return 'meu-primeiro-widget';
	}

	public function get_title() {
		return 'Meu primeiro widget';
	}

	public function get_icon() {
		return 'fa fa-trophy';
	}

	public function get_categories() {
		return [ 'meus widgets' ];
	}

} 

Widget Controls

Em seguida, precisamos adicionar os controles do widget usando o método _register_controls (). Optei por utilizar o controle de texto.
Aqui você pode visualizar todos os controls do Elementor e suas aplicações.

<?php
class Elementor_Test_Widget extends \Elementor\Widget_Base {


protected function _register_controls() {

		$this->start_controls_section(
			'secao_conteudo',
			[
				'label' => 'Conteúdo',
				'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
			]
		);

		$this->add_control(
			'titulo',
			[
				'label' => __( 'titulo', 'plugin-domain' ),
				'type' => \Elementor\Controls_Manager::TEXT,
				'default' => 'Título padrão',
				'placeholder' => 'Insira o título aqui',
			]
		);

		$this->end_controls_section();

	}


} 

Visualização no Frontend

E, por último, precisamos implementar nosso método render() que obtém o text que o usuário insere no controle de TEXT acima e obtém o conteúdo.

<?php 
class Meu_Primeiro_Widget extends \Elementor\Widget_Base {
    //PHP Render
    protected function render() {
        $settings = $this->get_settings_for_display();
        ?>
        <div><?php echo $settings['titulo']; ?></div>;
    }
} 

Bônus: Visualização em tempo real no Elementor

Adicionando a função_content_template() é possível observar as alterações em tempo real no editor, permitindo recriar o método render () em JavaScript.

<?php
    //JS RENDER
    protected function _content_template() {
    ?>
		<div>{{{ settings.titulo }}}</div>
	<?php
	} 

O widget está pronto! Você pode adicionar diversos controles no mesmo widget e obter algo mais complexo, veja aqui a lista. Ou Consulte meu GitHub para widgets com maior variedade.

Código completo

<?php

namespace Meus_Widgets;

use Elementor\Widget_Base;
use Elementor\Controls_Manager;

if (!defined('ABSPATH')) exit; // Exit if accessed directly


class Meu_Primeiro_Widget extends Widget_Base{

  public function get_name(){
    return 'meu-primeiro-widget';
  }

  public function get_title(){
    return 'Meu primeiro widget';
  }

  public function get_icon(){
    return 'fa fa-trophy';
  }

  public function get_categories(){
    return ['meus widgets'];
  }

  protected function _register_controls(){
    $this->start_controls_section(
			'secao_conteudo',
			[
				'label' => 'Conteúdo',
				'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
			]
		);

		$this->add_control(
			'titulo',
			[
				'label' => __( 'titulo', 'plugin-domain' ),
				'type' => \Elementor\Controls_Manager::TEXT,
				'default' => 'Título padrão',
				'placeholder' => 'Insira o título aqui',
			]
		);

		$this->end_controls_section();
  }

  //PHP Render
  protected function render() {
		$settings = $this->get_settings_for_display();
  ?>
    <div><?php echo $settings['titulo']; ?></div>
  <?php
  }
  
  //JS RENDER
  protected function _content_template() {
		?>
		<div>{{{ settings.titulo }}}</div>
		<?php
	}
}