6 de agosto de 2024

Instalar o WSL2 (Windows Subsystem for Linux 2) e configurá-lo para rodar o Docker no Windows é um processo relativamente simples. Siga os seguintes passos:

1. Verificar Requisitos do Sistema

Antes de começar, certifique-se de que seu sistema atende aos requisitos para o WSL2:

  • Windows 10 versão 1903 (build 18362) ou superior, ou Windows 11.
  • Hardware Virtualization (Virtualização de hardware) ativado na BIOS.

2. Habilitar Recursos do Windows

  1. Habilitar o WSL e a Plataforma de Máquina Virtual:
    • Abra o PowerShell como Administrador (pesquise "PowerShell" no menu iniciar, clique com o botão direito e selecione "Executar como Administrador").
    • Execute os seguintes comandos para habilitar o WSL e a Plataforma de Máquina Virtual:
      dism.exe /online /enable-feature /id:Microsoft-Windows-Subsystem-Linux /all
      dism.exe /online /enable-feature /id:VirtualMachinePlatform /all
  2. Definir o WSL2 como a versão padrão:
    • Ainda no PowerShell, execute o comando:
      wsl --set-default-version 2

3. Instalar o Kernel do WSL2

  1. Baixe o pacote de atualização do kernel do WSL2:
  2. Execute o instalador e siga as instruções para concluir a instalação.

4. Instalar uma Distribuição Linux

  1. Abra a Microsoft Store:
    • Pesquise por uma distribuição Linux, como Ubuntu, Debian, Kali Linux, etc.
  2. Escolha e instale a distribuição desejada:
    • Clique na distribuição e selecione "Instalar".
  3. Configure a distribuição:
    • Após a instalação, inicie a distribuição a partir do menu iniciar. Complete o processo de configuração (crie um usuário e senha).

5. Instalar o Docker Desktop

  1. Baixe o Docker Desktop para Windows:
  2. Instale o Docker Desktop:
    • Execute o instalador e siga as instruções.
  3. Habilite a integração com o WSL2:
    • Abra o Docker Desktop.
    • Vá para Settings (Configurações) e, em seguida, Resources (Recursos) > WSL Integration.
    • Ative a integração para a distribuição Linux que você instalou.
  4. Verifique a instalação:
    • Abra uma janela de terminal do WSL2 (como o Ubuntu).
    • Execute docker --version para verificar se o Docker está corretamente instalado e acessível.

6. Configurações Adicionais (Opcional)

Se precisar configurar o Docker para iniciar automaticamente ou ajustar outras preferências, você pode fazer isso através das configurações do Docker Desktop.

E pronto! Agora você deve ter o WSL2 e o Docker configurados e funcionando no seu Windows.

11 de dezembro de 2023

TDD é a sigla para Test-Driven Development, que significa Desenvolvimento Guiado por Testes em português.

Consiste em escrever testes automatizados antes do código da aplicação. 

É uma técnica de desenvolvimento de software que se baseia em um ciclo curto de repetições.

Os testes auxiliam na detecção e correção de falhas e bugs que possam comprometer a qualidade e o desempenho do software. Após a criação dos testes, o desenvolvedor elabora o código da aplicação e realiza a refatoração, que consiste em melhorar o código sem alterar sua funcionalidade. O TDD está inserido na metodologia ágil de desenvolvimento de software, que tem como objetivo entregar software de forma rápida e eficiente, com foco na satisfação do cliente e na flexibilidade às mudanças.

O teste de software pode envolver diversas fases.

Os testes Unitários testam cada módulo individualmente.

No teste de integração, o desenvolvedor integra e testa vários módulos do software em conjunto, para verificar se eles se comunicam bem entre si e se satisfazem os requisitos funcionais, de desempenho e de confiabilidade do sistema. O teste de integração também possibilita identificar e resolver erros de interface entre os módulos, que podem prejudicar a qualidade e o funcionamento do software. Existem diferentes estratégias de teste de integração, como bottom-up, top-down, sandwich e big bang, que estabelecem a ordem e a forma de integrar os módulos.

No teste de sistema, a ideia é testar o software como um todo em um ambiente que simula o ambiente de produção. 

Caso esses três tipos de testes sejam utilizados num mesmo projeto, essa seria a ordem de execução:

1 - Testes Unitários

2 - Teste de integração

3 - Teste de sisema

O PHPUnit é um framework para testes unitários em PHP.

Esse framework segue a arquitetura xUnit para possibilitar o desenvolvimento de testes unitários automatizados que verificam o funcionamento e os requisitos esperados de cada unidade do código de forma isolada. O PHPUnit facilita a criação e a execução dos testes unitários, usando classes e métodos específicos para definir e executar os testes. Além disso, o PHPUnit conta com recursos para verificar os resultados dos testes, gerar relatórios de cobertura de código e integrar os testes com outras ferramentas de desenvolvimento.

Site Oficial: https://phpunit.de/

 Acesse o site oficial:

https://phpunit.de/

Clique em Take the first steps:



Copie o comando para instalar a versão mais atualizada do PHPUnit no seu projeto via Composer:


No caso do nosso exemplo:

composer require --dev phpunit/phpunit ^10

Após a instalação, a versão instalada deve contar no arquivo composer.json do seu projeto:

{
    "require-dev": {
        "phpunit/phpunit": "10"
    }
}

Para exemplificar o uso do PHP Unit na prática vamos ver o exemplo simples de uma classe chamada Pessoa:

// Classe Pessoa que representa uma pessoa com nome e idade
class Pessoa {
    // Atributos privados da classe
    private $nome;
    private $idade;
   
    // Construtor da classe que recebe o nome e a idade da pessoa
    public function __construct($nome, $idade) {
        $this->nome = $nome;
        $this->idade = $idade;
    }
   
    // Método público que retorna o nome da pessoa
    public function getNome() {
        return $this->nome;
    }
   
    // Método público que retorna a idade da pessoa
    public function getIdade() {
        return $this->idade;
    }
   
    // Método público que verifica se a pessoa é maior de idade
    public function isMaiorDeIdade() {
        return $this->idade >= 18;
    }
}

Agora vamos ver como seria sua classe de testes com o PHP Unit:

//Precisamos informar que a classe vai utilizar o PHP Unit
use PHPUnit\Framework\TestCase;

// Classe de teste herda de PHPUnit\Framework\TestCase
class PessoaTest extends TestCase {

        // Método de teste que verifica se o construtor da classe Pessoa funciona corretamente
        public function testConstrutor() {
        // Cria uma instância da classe Pessoa com o nome "João" e a idade 25
        $pessoa = new Pessoa("João", 25);
       
        // Verifica se o nome da pessoa é "João"
        $this->assertEquals("João", $pessoa->getNome());
       
        // Verifica se a idade da pessoa é 25
        $this->assertEquals(25, $pessoa->getIdade());
    }
   
    // Método de teste que verifica se o método isMaiorDeIdade da classe Pessoa funciona corretamente
    public function testIsMaiorDeIdade() {
        // Cria uma instância da classe Pessoa com o nome "Maria" e a idade 17
        $pessoa = new Pessoa("Maria", 17);
       
        // Verifica se a pessoa é menor de idade
        $this->assertFalse($pessoa->isMaiorDeIdade());
       
        // Cria uma instância da classe Pessoa com o nome "Pedro" e a idade 18
        $pessoa = new Pessoa("Pedro", 18);
       
        // Verifica se a pessoa é maior de idade
        $this->assertTrue($pessoa->isMaiorDeIdade());
    }
}

Note que o nome da classe de testes recebe o mesmo nome da classe testada com o final Test: PessoaTest.

Se você criar os arquivos Pessoa.php e PessoaTest.php num diretório contendo o PhpUnit e rodar o comando phpunit PessoaTest.php você deverá observar o seguinte resultado:





Confira o código nesse repositório do Github:

17 de janeiro de 2023

 



As urnas eletrônicas são dispositivos de votação que permitem aos eleitores escolher candidatos ou opções de voto usando um dispositivo eletrônico, em vez de usar cédulas de papel. Os eleitores geralmente escolhem seus candidatos ou opções de voto pressionando botões ou tocando em tela sensível ao toque na tela da urna. A urna eletrônica registra então o voto e armazena-o em uma memória interna. Ao final da votação, os votos são contabilizados eletronicamente e os resultados podem ser transmitidos para uma central de computação para análise e relatórios.

O primeiro país a utilizar urnas eletrônicas em eleições gerais foi o Brasil, em 1989. Foi realizada a primeira eleição geral com urnas eletrônicas no estado de São Paulo, a mais populosa e rica região do país. O sistema utilizado foi desenvolvido pela empresa brasileira Procomp Informática.

Posteriormente, outros países começaram a utilizar urnas eletrônicas. Hoje, muitos países usam urnas eletrônicas em suas eleições, mas a data de implementação e a forma como elas são usadas variam de país para país:

  • Estados Unidos
  • México
  • Venezuela
  • Argentina
  • Chile
  • Colômbia
  • Costa Rica
  • Equador
  • El Salvador
  • Guatemala
  • Honduras
  • Nicarágua
  • Panamá
  • Paraguai
  • Peru
  • Uruguai
  • Índia
  • África do Sul
  • Coreia do Sul
  • Filipinas
  • Singapura
  • Japão
  • Taiwan
  • França
  • Alemanha
  • Países Baixos
  • Espanha
  • Portugal
  • Reino Unido
  • Grécia
  • Irlanda

Esta não é a lista completa e há muitos outros países que também usam urnas eletrônicas. Alguns países usam urnas eletrônicas em algumas eleições, mas não em outras. Alguns países usam urnas eletrônicas apenas em algumas regiões ou distritos eleitorais.

Muitos acreditam, que, nos Estados Unidos, o voto é unicamente feito por cédulas de papel, o que não é verdade.

O sistema de votação nos Estados Unidos é baseado em voto distrital, onde cada estado tem seus próprios regulamentos e leis de votação. A maioria dos estados usa urnas eletrônicas, mas alguns ainda usam cédulas de papel. Alguns estados permitem que os eleitores votem antecipadamente, seja por correspondência ou pessoalmente, antes do dia da eleição.

Os eleitores americanos votam em seus candidatos para cargos locais, estaduais e federais, incluindo o presidente dos Estados Unidos. O presidente é eleito através do Colégio Eleitoral, onde cada estado tem um número de eleitores correspondente ao número de membros do Congresso que o estado tem. Os eleitores votam em seus candidatos locais para o Colégio Eleitoral, e o candidato com a maioria dos votos no estado ganha todos os eleitores desse estado. O candidato que receber a maioria dos votos do Colégio Eleitoral (mais de 270) é eleito presidente.

Alguns estados também usam o sistema de voto distrital para eleger seus representantes no Congresso, onde os eleitores votam em seus candidatos para representá-los em seus distritos de votação.

Em geral, todos os cidadãos americanos com 18 anos ou mais têm o direito de votar, desde que estejam registrados para votar. O registro de eleitor é geralmente feito com as autoridades eleitorais do estado, e alguns estados requerem prova de cidadania ou residência.

As Urnas Eletrônicas São Seguras?

As urnas eletrônicas são projetadas para serem seguras, mas existem preocupações com a segurança desses sistemas devido a possíveis falhas no software, problemas de configuração, ou mesmo ações maliciosas.

Para garantir a segurança das urnas eletrônicas, os fabricantes devem seguir normas e padrões de segurança estabelecidos para garantir a integridade e a confiabilidade dos sistemas. Além disso, os sistemas devem ser submetidos a testes rigorosos para detectar quaisquer vulnerabilidades ou falhas antes de serem usados em eleições.

Qualquer sistema eletrônico é suscetível a ataques cibernéticos e violações de segurança, por isso é importante que haja medidas de segurança adicionais em vigor, como auditorias independentes, criptografia de dados, e etc.

Além disso, alguns países têm regulamentações e leis para garantir a segurança e a transparência das eleições eletrônicas. Essas regulamentações podem incluir requisitos para a transparência do código-fonte, a capacidade de auditoria dos votos e a garantia da privacidade dos eleitores.

Em geral, as urnas eletrônicas podem ser seguras se forem projetadas e implementadas corretamente, e se forem monitoradas e mantidas de forma adequada.

Muitos brasileiros acreditam que o voto impresso seria mais adequado, por se basearem no sistema Americano de votação, porém, além do sistema de votação Americano não ser totalmente realizado por cédulas de papel, como já vimos, existem vários casos históricos de fraude eleitoral nos Estados Unidos, em níveis tanto local quanto estadual e federal. Alguns desses casos envolvem manipulação de votos, manipulação de registros eleitorais, e até mesmo compra de votos. No entanto, é importante notar que a maioria dessas fraudes foram isoladas e não afetaram significativamente os resultados gerais das eleições.

Existem também casos de fraude eleitoral acusadas em eleições recentes, incluindo a eleição presidencial de 2020, mas essas acusações foram investigadas e não foi encontrado evidência substancial para apoiar as alegações de fraude em larga escala.

Em resumo, embora existam casos históricos e atuais de fraude eleitoral nos Estados Unidos, a maioria dessas fraudes foram isoladas e não afetaram significativamente os resultados gerais das eleições. Os sistemas de votação também incluem medidas de segurança para garantir a integridade e a transparência das eleições.

Como As Urnas São Auditadas No Brasil?

No Brasil, as auditorias das urnas eletrônicas são realizadas para verificar se os resultados registrados nas urnas eletrônicas correspondem aos votos reais.

As auditorias podem ser realizadas de várias maneiras. Algumas das formas mais comuns incluem:

Auditoria baseada nos boletins das urnas: cada urna eletrônica emite um comprovante físico do resultado da votação, o chamado Boletim de Urna (BU). Trata-se de um relatório impresso pelos mesários e tornado público logo após o encerramento da votação. Esse boletim possui o quantitativo de votos existentes que pode ser conflitado com o registro dos eleitores cadastrados naquela sessão que compareceram à votação.

Auditoria de código fonte: onde se verifica se o software usado nas urnas eletrônicas não contém quaisquer falhas ou vulnerabilidades.

Além dessas auditorias, também é comum que haja equipes de fiscalização, que acompanham o desenrolar das eleições, garantindo que todas as regras e regulamentos sejam seguidos.

Os partidos políticos no Brasil não têm acesso direto ao código-fonte das urnas eletrônicas utilizadas nas eleições. O código-fonte é considerado como informação confidencial e é mantido sob sigilo pelo Tribunal Superior Eleitoral (TSE) para evitar a possibilidade de fraudes ou ataques cibernéticos.

No entanto, os partidos políticos podem participar das auditorias realizadas no sistema eleitoral, incluindo a auditoria do código-fonte das urnas eletrônicas. Essas auditorias são realizadas por instituições independentes do governo e especializadas, como universidades e outras organizações interessadas. Além disso, os relatórios das auditorias são disponibilizados para acesso público, permitindo que os partidos políticos possam avaliar a segurança e integridade do sistema eleitoral.

É Possível Fraudar As Eleições No Brasil?

Como já vimos, nenhum sistema eletrônico é blindado de possíveis falhas, ataques e ações maliciosas. Você já reparou que o sistema operacional que você utiliza em seu computador ou celular te notifica regularmente sobre atualizações disponíveis? Muitas dessas atualizações são para corrigir erros e falhas de segurança detectados durante o uso desses sistemas. Ainda que alguma urna tenha sido alvo de fraude ou falha em alguma eleição no Brasil, não é possível alegar que esses casos pontuais tenham impactado no resultado final dessas eleições.

Em 2020, o presidente Jair Bolsonaro ordenou que o Ministério da Defesa realizasse uma auditoria nas urnas eletrônicas utilizadas nas eleições de 2018, com o objetivo de verificar a integridade e a confiabilidade do sistema eleitoral. A auditoria foi realizada pelo Exército Brasileiro e teve o objetivo de detectar possíveis vulnerabilidades ou ameaças à segurança do sistema eleitoral. De acordo com as informações disponíveis, a auditoria não detectou nenhuma vulnerabilidade crítica no sistema eleitoral e concluiu que as urnas eletrônicas utilizadas nas eleições de 2018 foram seguras e confiáveis. O relatório final da auditoria foi entregue ao Tribunal Superior Eleitoral (TSE) e ao Ministério Público Eleitoral (MPE).

Em 2022, o ex-presidente Jair Bolsonaro, na época ainda presidente e candidato à reeleição, convocou fiscais para acompanhar as eleições no Brasil. Esses fiscais eram voluntários e foram designados para acompanhar o processo de votação e contagem de votos em diferentes locais do país. O objetivo era garantir a transparência e a integridade do processo eleitoral. Além disso, a mando do ministério da defesa, sob o comando do então presidente Jair Bolsonaro, as eleições também foram fiscalizadas pela equipe de técnicos militares das Forças Armadas.

O relatório do ministério da defesa sobre a fiscalização das urnas nas eleições de 2022, não apontou nenhuma prova contundente sobre fraudes que pudessem ter causado impactado no resultado final das eleições e, pra resumir, o relatório apontou que "dos testes de funcionalidade, realizados por meio do Teste de Integridade e do Projeto-Piloto com Biometria, não é possível afirmar que o sistema eletrônico de votação está isento da influência de um eventual código malicioso que possa alterar o seu funcionamento".

É importante destacar essa parte "eventual código malicioso que possa alterar seu funcionamento". Como é possível realizar uma acusação de fraude se embasando nesse tipo de argumento? Na minha opinião pessoal, essa conclusão é equivalente às seguintes afirmações:

"Fui furtada dentro do ônibus. Pode ter sido a pessoa que estava do meu lado."

"Vou trabalhar todos os dias de carro. Pode ser que amanhã eu me envolva em alguma colisão."

"Meu filho não pode frequentar a escola. Pode ser que alguma outra criança implique com ele."

16 de janeiro de 2023
A inteligência artificial (IA) é uma das áreas mais empolgantes da tecnologia atualmente. Desde assistentes virtuais até carros autônomos, a IA está sendo implementada em uma variedade de campos e está mudando a forma como vivemos e trabalhamos.

A IA é a capacidade de um sistema de computador de simular a inteligência humana. Isso inclui a capacidade de aprender, raciocinar e se adaptar a novas situações. A IA é alcançada através de algoritmos de aprendizado de máquina, que permitem que um sistema aprenda com dados e melhore suas habilidades ao longo do tempo.

Uma das aplicações mais populares da IA é o assistente virtual. Assistência como o Google Assistente e o Amazon Alexa são capazes de entender e responder a comandos de voz e realizar tarefas para os usuários, como reproduzir música, definir lembretes e responder perguntas. Além disso, as empresas estão usando a IA para melhorar a experiência do cliente, por exemplo, no atendimento ao cliente, a IA é utilizada para fornecer respostas automatizadas e resolver problemas rapidamente.

Outra área em que a IA está tendo um impacto significativo é na segurança. Sistemas de reconhecimento facial e de reconhecimento de voz estão sendo usados ​​para autenticar usuários e impedir acesso não autorizado. Além disso, a IA está sendo usada para monitorar redes e detectar ameaças de segurança em tempo real.

A IA também está sendo usada para melhorar a eficiência em muitas indústrias. Por exemplo, os carros autônomos estão sendo desenvolvidos para melhorar a segurança nas estradas e os robôs estão sendo usados ​​em fábricas para automatizar tarefas repetitivas. Além disso, a IA está sendo usada para analisar grandes quantidades de dados e ajudar as empresas a tomar decisões melhores.

Embora a IA tenha muitos benefícios, também há preocupações sobre seus impactos no mundo do trabalho e na privacidade. Como a IA está sendo usada para automatizar tarefas, há preocupações de que ela possa substituir muitos empregos humanos. Além disso, há preocupações sobre o uso indevido de dados pessoais coletados pelos sistemas de IA e a falta de regulamentação adequada para garantir a privacidade dos usuários. É importante que essas preocupações sejam levadas em consideração e abordadas de forma proativa enquanto a IA continua a evoluir.

Enquanto isso, a IA continua a se desenvolver e a se tornar cada vez mais presente em nossas vidas. É importante que as empresas e indivíduos estejam cientes dos benefícios e desafios da IA e estejam preparados para aproveitar ao máximo suas vantagens enquanto trabalham para mitigar seus riscos. Como a tecnologia continua a avançar, é emocionante ver como a IA irá mudar o mundo e o que ela trará no futuro.
8 de maio de 2021
Oi, pessoal! Ainda não conhecia essa feature do sublime, que me foi apresentada por um novo colega de trabalho e eu achei o máximo.

Você sabia que dá pra criar um bloco de código que você utilize muito e criar uma chamada específica para que ele possa ser inserido, de maneira prática, no seu código enquanto você está escrevendo?

Bom, como exemplo, vamos criar um snippet de debug para códigos PHP.

(clique nas imagens para ampliar)

1 - Para começar, acesse as seguintes opções do menu:



2 - Após acessar a opção de criação, vai se abrir a seguinte janela:



3 - O código que aparece é composto por:



4 - O nosso snippet de debug ficará assim:

<snippet>

<content><![CDATA[

echo "<pre>";

print_r(${1:this});

die("</pre>");

]]></content>

<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->

<tabTrigger>debug</tabTrigger>

<!-- Optional: Set a scope to limit where the snippet will trigger -->

<!-- <scope>source.python</scope> -->

</snippet>


5 - Pressione CTRL + S para salvar seu snippet e o local de salvar já abrirá corretamente pra você. Será algo como: \Sublime Text 3\Packages\User

6 - Salve o nosso snippet como Debug.sublime-snippet

Agora toda vez que você estiver programando em PHP, escrever a palavra debug e pressionar a tecla TAB, o seguinte código será impresso na tela pra você:

echo "<pre>";
print_r(this);
die("</pre>");

Esse código facilita a exibição de estruturas, como arrays, por exemplo, no navegador sempre que você está debugando um código. 

Legal, não é? Espero que, como esse novo conhecimento tem sido útil no meu dia-a-dia, também possa ser útil pra você que também não conhecia. Até a próxima!
Oi, pessoas! 

Como uma extensão desse post que criei em 2019 >> Sublime - Como Programar Atalho Para Identar O Código gostaria de apresentar a vocês dois atalhos que utilizo para comentar o código.

São os atalhos: 

{ "keys": ["ctrl+1"], "command": "toggle_comment", "args": { "block": false } }, 

{ "keys": ["ctrl+2"], "command": "toggle_comment", "args": { "block": true } } 

O primeiro atalho, ctrl + 1, é utilizado para comentar apenas uma linha de código. 

O segundo atalho, ctrl + 2, é utilizado para comentar blocos de código. 

Lembrando que, você sempre pode personalizar as teclas ao seu gosto. Gosto dessa praticidade pois, facilita o meu dia-a-dia. 

Quem sabe também pode facilitar o seu? 

Abraços!
22 de junho de 2020
Ei, pessoas! Estava de férias por agora e vou compartilhar um projetinho que fiz. Uma galeria de fotos em Laravel. O Layout é responsivo (Bootstrap) e a galeria possui painel administrativo com opção de criação e exclusão de álbum.


Faça o download do projeto no link:

https://github.com/keniaferreira/PhotosGallery

Crie a pasta albuns dentro da pasta /public

Rode os comandos:

composer install

php artisan key:generate

Copie o conteúdo do arquivo .env.example e cole no arquivo .env que foi gerado.

Crie o banco: photos_gallery e não se esqueça de inserir o nome dele no arquivo .env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=photos_gallery
DB_USERNAME=root
DB_PASSWORD=

Rode o comando php artisan migrate para construir as tabelas do banco.

Para criar um novo usuário, acesse a rota /login e clique em Register.

Para ativar um usuário, acesse a tabela users e coloque 1(true) no campo active:



Ao efetuar login, utilize os links os seguintes links para criar e gerenciar os álbuns:



Ao criar um álbum, a foto de capa não aparecerá junto com as fotos do álbum. Decidi criar assim para o caso de alguém querer criar uma imagem somente para a capa. Caso queira que a foto da capa também seja listada no álbum, selecione ela novamente junto com as outras fotos que farão parte do álbum na opção 'Escolher Demais Fotos':



Principais Controllers:

IndexController - Listagem dos álbuns e das fotos de cada álbum.
UploadController - Criação e upload de fotos em cada álbum.
AdmAlbumController - Listagem e exclusão de álbuns criados.

Request:

UploadFotosRequest - Regras de validação do upload.

Comentários

Perfil

Kênia Ferreira
Formada em Sistemas de Informação e pós-graduada em Engenharia de Software.