Dica Linux

Vou mandar uma dica aqui para quem resolveu instalar o Linux e volta e meia apanha quando instalando alguma coisa e ou compilando um pacote. Coisa simples, que eu gostaria muito que tivesse me ensinado quando comecei a mexer com Linux.

Abra o terminal e dê o seguinte comando:

sudo apt install build-essential 
re@re-VirtualBox:~$ sudo apt install build-essential Lendo listas de pacotes... Pronto Construindo árvore de dependências        Lendo informação de estado... Pronto Os NOVOS pacotes a seguir serão instalados:   build-essential 0 pacotes atualizados, 1 pacotes novos instalados, 0 a serem removidos e 0 não atualizados. É preciso baixar 4.664 B de arquivos. Depois desta operação, 21,5 kB adicionais de espaço em disco serão usados. Obter:1 https://atl.mirrors.clouvider.net/ubuntu focal-updates/main amd64 build-essential amd64 12.8ubuntu1.1 [4.664 B] Baixados 4.664 B em 1s (4.156 B/s)           A seleccionar pacote anteriormente não seleccionado build-essential. (Lendo banco de dados ... 203071 ficheiros e directórios actualmente instalados.) A preparar para desempacotar .../build-essential_12.8ubuntu1.1_amd64.deb ... A descompactar build-essential (12.8ubuntu1.1) ... Configurando build-essential (12.8ubuntu1.1) ... re@re-VirtualBox:~$
Instalando o pacote build-essential

O comando acima instala um conjunto de pacotes chamado “build-essentials”, que são um conjunto de pacotes necessários para compilar softwares no Linux.

Esse comando instala automaticamente o depurador GNU, os compiladores g++/GNU e mais algumas ferramentas e bibliotecas necessárias para compilar um programa.

Ao instalar os pacotes build-essential, alguns outros pacotes como G++, dpkg-dev, GCC e make, etc. também são instalados em seu sistema.

Não resolve tudo, mas na prática ter esse conjunto de ferramentas ajuda e muito na instalação de pacotes e eu considero uma boa pedida o ter instalado no sistema.

Autor: Renato de Pierri.
Publicado em 24/08/2022.

Qual é a diferença entre Heap e Stack?

Pergunta originalmente respondida no QUORA em 03/07/2019

Definição de Heap:

Heap é uma árvore binária com chaves em seus nós (uma chave por nó) conforme a seguir:

Ela é essencialmente completa, ou seja, todos os seus níveis são completos menos o último nível, onde somente a chave mais à direita pode eventualmente estar faltando.

*A chave de cada nó pai (acima) é maior ou igual à chave filho (que vem abaixo).

Observe: Os elementos de uma heap são ordenados de cima para baixo (junto com qualquer caminho abaixo de sua raiz), porém eles não são ordenados da esquerda para a direita.

Algumas propriedades de uma heap:

  • Dado n, há uma única árvore binária com n nós que é essencialmente completa com h=[log2n]
  • .
  • A raiz contém o maior valor chave
  • Uma sub árvore extraída de qualquer nó de uma heap também é uma heap
  • Uma heap pode ser representada como um array.

Fonte da definição de uma heap: https://cs.winona.edu/lin/cs440/…


Definição de Stack:

Stack ou pilha é um conjunto ordenado de itens no qual novos itens podem ser inseridos e a partir do qual podem ser eliminados itens um uma extremidade chamada topo da pilha.

Ao contrário do vetor, a definição de pilha abrange a inserção e remoção de itens o que a faz um objeto dinâmico, mutável.

Por definição somente uma extremidade é designada como topo da pilha. Novos itens podem ser adicionados no topo da pilha, consequentemente deslocando o topo da pilha para cima e os itens que estão no topo da pilha podem ser removidos, consequentemente deslocando o topo da pilha para baixo.

O topo da pilha é a extremidade em que os dados são inseridos e retirados da pilha e por essa razão uma pilha também é chamada de LIFO, last in first out, último a entrar, primeiro a sair.

A pilha, computacionalmente, sempre é vista pelo topo, de cima para baixo (somente pode-se observar o topo da pilha), embora para explicar seu funcionamento a pilha seja exibida em perfil.

Para acessar o último elemento de uma pilha é necessário desempilhar os elementos que estiverem por cima do último elemento para poder acessá-lo, conforme imagem abaixo (clique para ampliar).

Fonte da difinição de stack: TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGESNSTEIN, Moshe J.. Estruturas de Dados Usando C. São Paulo: Pearson, 2013. 884 p. ISBN 13: 978-85-346-0348-5.

Assim Nelson Zart disse

No começo de minha carreira eu tive o prazer de trabalhar com um técnico de computadores, senior, na antiga Burroughs Eletrônica. Isso foi nos idos de 1985 e muitos de vocês sequer pensavam em nascer kkkk.

Então, ele tinha um bordão que utilizava quando a gente se enrolava em consertar os mainframes que era o seguinte:

“Quando tudo o mais falhar, siga o manual”

Nelson Zart

Pois é. hoje me lembrei dele em dois momentos.

Um deles eu estava configurando o Apache Directory Studio para acessar o LDAP do Google Workspace Enterprise e tive de configurar o Stunnel seguindo o manual e em outro caso, meu colega estava se batendo para fazer o agente GLPI subir o status no servidor do GLPI.

Em ambos os casos, só conseguimos resolver esses problemas após lermos a documentação e proceder com a configuração, conforme indicado nos respectivos manuais.

Nada de fórum, Stack Overflow e adivinhação. Definitivamente foi a leitura do manual que resolveu o perrengue.

Obrigado Nelson!

Como eu faço para que uma impressora sempre pegue o mesmo endereço de IP, mas que a configuração de rede da impressora seja para ela sempre obter dinamicamente um endereço de IP do servidor de DHCP?

Resposta publicada no Quora em 16/10/2021

Fácil.

Se você precisa que um dispositivo de rede sempre obtenha dinamicamente o mesmo endereço de IP cada vez que for ligado, saiba que é possível fazer essa configuração direto no equipamento que fornece o serviço de DHCP.

Utilizar esse tipo de configuração pode ser interessante para impressoras, servidores, centrais telefônicas e demais equipamentos, que se mudarem o endereço de IP, as coisas podem eventualmente vir a parar de funcionar e também serve para evitar que usuários finais fiquem configurando endereços errados nos equipamentos.

Usuário: “Qual é a configuração da impressora?

Técnico: “Deixe o DCHP ON, tudo automático e não me enche o saco”

Técnico anônimo

Para instalações domésticas, normalmente quem fornece o serviço de DHCP é o roteador da casa ou do pequeno escritório.

Como é que faz?

Basta configurar no roteador, que um determinado endereço de IP seja associado com o endereço de MAC Address do equipamento que desejamos fixar seu endereço de IP.

Como exemplo, mostro uma fonte de alimentação que pode ser acessada pela rede, mas o mesmo é válido para outros equipamentos, incluindo impressoras.

O endereço que eu quero fixar para ela é 192.168.2.101

Eu entro nas configurações de rede da fonte de alimentação e procuro pelo endereço de MacAddres do equipamento conforme destacado com a seta.

Note também que o equipamento está configurado com o DHCP on, para sempre pegar o endereço de IP do provedor DHCP, que no caso é o roteador de casa.

Encontrando o Mac Address

Ainda conforme a foto acima, o MacAddress da fonte de alimentação é 00:27:00:00:15:26 e o DHCP ficou ligado, assim a fonte sempre irá se configurar automaticamente.

Configurando o roteador:

No roteador, temos que garantir que o serviço DHCP nunca irá utilizar o endereço que eu quero atribuir para a fonte.

Isso é feito, informando para o servidor DHCP qual é o endereço inicial que ele deve trabalhar.

No meu caso e conforme indicado abaixo, o meu roteador vai fornecer endereços de IP para os equipamentos da casa, a partir do endereço 192.168.2.150. Tudo o que vier abaixo disso, de 192.168.2.1 até 192.168.2.149, embora funcionais, são endereços reservados.

Definindo o endereço de IP inicial. O que vem antes, está reservado.

Conforme dito acima, irei utilizar o endereço 192.168.2.101, que é um endereço que é menor que o endereço inicial, portanto trata-se de um endereço reservado.

O servidor DHCP nunca irá atribuir esse endereço para qualquer equipamento, a menos que isso seja explicitamente indicado.

Toque final:

Para explicitamente indicar ao roteador para quem ele deve atribuir o endereço de IP 192.168.2.101, conforme figura abaixo, basta ir na aba “Reserva de Endereço” e associar o MacAddress da fonte de alimentação 00:27:00:00:15:26, com o endereço de IP 192.168.2.101 que a fonte deve sempre pegar.

Associando o Mac Address com o endereço de IP

Dessa forma o roteador irá saber que o endereço 192.168.2.101 está reservado para o MacAddress 00:27:00:00:15:26 e toda vez a fonte de alimentação for ligada e ela solicitar um endereço de IP na rede, ela sempre irá receber o mesmo endereço de IP.

E dessa forma, eu tenho paz e tranquilidade enquanto saboreio um delicioso sorvete de ouro, na costa do mediterrâneo:

https://pt.quora.com/Em-que-lugar-do-mundo-um-sorvete-custa-70-Euros/answer/W-Klein

Por que se usa tanto o hexadecimal na ciência da computação, quando decimal é mais fácil de entender?

Resposta publicada no Quora em 19/04/2021

Em computação, hexadecimal é muito mais fácil de entender.

Quando um programador que manja de hardware olha para um código hexadecimal, ele sabe exatamente como o hardware está se comportando, apenas fazendo contas de cabeça.

Por isso que o hexadecimal é utilizado.

Não leia o resto.

Modo nerdice on.

Computador trabalha com lógica binária.

Pensando em um computador de 8 bits, sabemos que ele consegue manusear 8 bits por vez em sua linha de dados.

No diagrama abaixo temos um computador simplificado:

  • Do lado esquerdo tem o processador e do lado direito tem a memória. Deixei de fora alguns detalhes para ficar mais fácil a explicação.
  • O processador e a memória são interligados pelo barramento de endereçamento, de dados e as linhas de controle.
  • O barramento de dados está detalhando os 8 bits que o compõe.
  • Cada seta no barramento de dados representa um bit de dados.
  • O processador consegue ler e escrever na memória, 8 bits de dados por vez, pois trata-se de um computador de 8 bits.

Os bits, são essas linhas que podem assumir valores binários de zero ou um.

Eletronicamente falando:

Essas linhas dos bits de dados podem estar energizadas ou não.

As linhas que estiverem energizadas terão o valor lógico VERDADEIRO (1 – um) e as que não estiverem energizadas terão o valor lógico FALSO (0 – zero).

Onde entra o hexadecimal:

Note que o barramento de dados foi separado em dois conjuntos de 4 bits.

  • Um conjunto de 4 bits engloba os bits de 0 a 3
  • O segundo conjunto de 4 bits engloba os bits de 4 a 7

A pergunta que a gente faz agora é: Quantas combinações a gente consegue fazer de bits ligados e desligados aqui?

Já dou a resposta, que são 256 combinações indo de todos os 8 bits com valor FALSO – desligados até termos todos os 8 bits com o valor VERDADEIRO – ligados.

Acompanhe, analisando os 4 primeiros bits:

https://qph.fs.quoracdn.net/main-qimg-85eaffbadd3963c04251e5859084f219

Os caras fizeram o seguinte, os quatro primeiros bits, dá para fazer 16 combinações indo do valor decimal zero até o valor decimal 15. Basta continuar com a tabela adicionando os bits que faltam e iremos chegar em 256 combinações, podendo representar os números de zero a 255..

Mais um detalhe: A posição do bit corresponde a um valor decimal. Se os bits zero e dois forem verdadeiros, significa que temos o número 5 nas notações decimal e hexadecimal, por exemplo.

Conforme dito, se pegar o segundo conjunto de 4 bits, também dá para fazer essas dezesseis combinações.

Juntando o primeiro e o segundo conjunto de 4 bits, dá para fazer 16 X 16 combinações, ou seja, dá para fazer 256 combinações, que é capaz de representar os valores decimais indo de zero a 255.

No fim de tudo é isso o que realmente importa:

Para simplificar isso aí, os bits são separados em grupos de 4 bits que são representados pelos símbolos indo de “0” até “F”.

Um código indicando quais linhas de cada conjunto de 4 bits estão ligadas ou desligadas.

Simples e brilhante.

Desenvolvendo computadores:

Agora, se coloque no lugar do desenvolvedor de computadores.

O cara tem que lidar com o circuito elétrico. Tem que olhar para um código e decodificar de cabeça quais linhas do barramento de dados estão energizadas ou não.

É muito mais fácil para um engenheiro de hardware:

  • Separar a linha de dados em grupos de 4 bits.
  • Trabalhar com a notação hexadecimal, 3A por exemplo.
  • Converter esse número, de cabeça para o binário “0011 1010”.
  • E identificar no barramento quais linhas de dados que estão energizadas ou não…

Do que fazer a conversão do número 58 (decimal) para seu correspondente binário, que é bem mais complicado.

É por isso que se utiliza o hexadecimal.

Hexadecimal é para humanos falarem com máquinas, enquanto que decimal é para máquinas falarem com humanos.

Recomendo que seja lido o livro do Tocci, que já indiquei em outras respostas por aqui.

Fontes:

Livro do Tocci:https://loja.grupoa.com.br/sistemas-digitais-principios-e-aplicacoes-12ed9788543025018-p1005546?tsid=34

Demais tabelas e infográficos: Acervo pessoal.

Como é que o Led acende

Olha, a teoria de como um led acende está escrita por ai, aos montes.

O que eu faço aqui é complementar toda a teoria, mostrando uma sequência de fotos de led, nas cores azul, verde e vermelho, com diferentes voltagens, mostrando o aumento do brilho à medida que aumenta a corrente circulando no mesmo.

O resistor do led vermelho é de 180 ohms e o dos outros leds é 120 ohms e cada “led – resistor” foram alimentados com uma tensão que foi ajustada entre 2 e 3 volts.

As fotos foram tiradas com uma Nikon D3200, lente macro 85mm, focando a objetiva do estereoscópio. Temos, no final, a foto do setup utilizado.

Quando não especificado, foi utilizada abertura f/5.6, tempo de exposição 1/40, ISO 800.

Clique nas fotos para ampliar ou botão direito -> ver imagem.

Divirta-se:

Publicado em 28/03/2021, por Renato de Pierri

Como fazer pudim de Leite Moça?

O que tem a ver uma tradicional receita de pudim e a contagem binária de 8 bits, indo de zero a 255?

Pergunta respondida originalmente no Quora em 25/02/2021

Pudim de 8 bits:

Foto: Acervo pessoal

Ingredientes:

  • 1 lata de leite moça
  • 2 medidas de leite da lata de leite moça.
  • 4 ovos (tire a pele da gema).
  • 8 colheres de sopa, bem cheias de açúcar.

Modo de preparo:

  • Por 16 minutos aqueça o açúcar em uma forma de pudim até formar o caramelo de açúcar. Cuidado para não queimar o açúcar. Espalhe esse caramelo pela forma até ela ficar bem amarelinha.
  • Por no máximo 32 minutos, bata em um liquidificador a 1 medida de leite moça, as 2 medidas de leite e os 4 ovos.
  • Coloque, na forma caramelizada, o conteúdo previamente batido no liquidificador.
  • Asse o pudim em Banho Maria por 64 minutos em um forno pré aquecido a 128°C, assim que colocar a forma no forno, ajuste a temperatura do forno para que fique em torno de 255°C.

Programadores entenderão a receita.