C/C++ Sem categoria
Teste de Permissão de arquivo

Um erro muito comum em códigos de programadores, é deixar de testar permissão de arquivos.

Muitas vezes programadores experientes usam arquivos para troca de dados ou informações.

Essa prática pode ajudar muito, porem há de se tomar alguns cuidados.

Permissão de arquivos e pastas são dados pelo sistema operacional, em alguns casos, o programador, tenta gravar em locais que exige permissão prévia deste local.

É uma boa prática, antes de ler um arquivo, ler as permissões sobre o mesmo.

Em algumas situações, tentamos escrever dados em arquivos, que possuimos permissão apenas para leitura.

Estarei postando aqui um exemplo simples de programa.

GIT do projeto

https://github.com/marcelomaurin/permissao

Explicação das funcionalidades

Criação de um arquivo

Neste fragmento, criamos um arquivo texto, que servirá de referencia ao nosso programa.

int cria_arquivo(char *arquivo){
  FILE *file;
  file = fopen(arquivo,"w");
  if(file==NULL){
      printf("Erro na criacao do arquivo\n");
      return(1);
  } else {
      fwrite("123456",6,1,file);
  }
  fclose(file);
  return 0;
}

A variavel file, é o descritor, que é um ponteiro do arquivo, que será usado como referência, toda véz que uma operação for realizada nele.

O fopen, cria o arquivo, pois tem o parametro “w” que é write, outro parametro util é o “a” de append, que adiciona no final do arquivo.

Lendo a permissão do arquivo

Neste fragmento apresento o processo de leitura da permissão.

char* permissao(char *file, char* modeval){
  struct stat st;

  memset(modeval,'\0',sizemodeval);
  if(stat(file, &st) == 0){
      mode_t perm = st.st_mode;
      modeval[0] = (perm & S_IRUSR) ? 'r' : '-';
      modeval[1] = (perm & S_IWUSR) ? 'w' : '-';
      modeval[2] = (perm & S_IXUSR) ? 'x' : '-';
      modeval[3] = (perm & S_IRGRP) ? 'r' : '-';
      modeval[4] = (perm & S_IWGRP) ? 'w' : '-';
      modeval[5] = (perm & S_IXGRP) ? 'x' : '-';
      modeval[6] = (perm & S_IROTH) ? 'r' : '-';
      modeval[7] = (perm & S_IWOTH) ? 'w' : '-';
      modeval[8] = (perm & S_IXOTH) ? 'x' : '-';
      modeval[9] = '\0';
      return (char*)modeval;
  } else{
     return strerror(errno);
  }
}

O comando stat, permite ler a permissão de um arquivo.

Alem do stat, temos outros:

stat() e fstatat() recuperam informações sobre o arquivo apontado pelo nome do caminho; as diferenças para fstatat() são descritas abaixo.

lstat() é idêntico a stat(), exceto que se pathname for um link simbólico, ele retornará informações sobre o link em si, não o arquivo ao qual o link se refere.

fstat() é idêntico a stat(), exceto que o arquivo sobre o qual a informação deve ser recuperada é especificado pelo descritor de arquivo fd.


fonte: https://man7.org/linux/man-pages/man2/lstat.2.html

Parte do código gerado neste exemplo foi baseado no artigo:

https://stackoverflow.com/questions/8812959/how-to-read-linux-file-permission-programmatically-in-c-c

Outra forma de testar permissão

Outra forma é o comando access, nele é possivel fazer o teste direto da permissão, sem necessidade de enrolação.

if(access("info.txt",R_OK) ==0{
  printf("Permite Leitura\n ");
}
if(access("info.txt",W_OK) ==0{
  printf("Permite Escrita\n ");
}
if(access("info.txt",X_OK) ==0{
  printf("Permite Execução\n ");
}

Dicas Sem categoria
Instalar o vnc no Ubuntu

Para instalar o vnc no ubuntu com interface gráfica já configurada, realize os seguintes passo:

Com o usuário root, realize a instalação do pacote:

apt install x11vnc

Pronto, agora vc tem o vnc.

Configurando e Acessando o VNC

Entre na interface X11Windows e digite o aplicativo vnc, conforme figura abaixo:

aplicação x11vncserver

Selecione X11VNCServer, e aguarde…


Pressione o botão OK, conforme figura acima.

Por fim, indique o check de Accept Connections, e digite sua senha na caixa Password.

Finalizando com o botão OK, conforme figura acima.

Pronto seu vnc esta pronto para ser conectado.

Acessando VNC

Instale o VNC Viewer, recomendo a versão do REALVNC. Conforme figura abaixo:

VNC Viewer em tela windows

Digite o IP da máquina que deseja conectar, e pronto.

C/C++ Dicas
Valgrind

Valgrind é uma ferramenta de analise de vazamento de memória.

Nele é possivel identificar e analisar o uso da memória, bem como encontrar problemas no programa.

Estarei apresentando a ferramenta, sendo eu mesmo, um estudante desta ferramenta.

Instalação

Para instalação no Ubuntu, basta digitar o comando a seguir:

apt install valgrind

Utilização

Para utilizar o valgrind, é muito simples, basta chamar o aplicativo através dele, usando a seguinte sintaxe:

valgrind –leak-check=full <programa>

A imagem abaixo, ilustra o uso deste programa.

O código deste programa, pode ser visto no link abaixo:

http://maurinsoft.com.br/index.php/2022/01/05/core-dump-em-c/

Neste exemplo, criamos uma aplicação que gera excessão, pois o ponteiro não foi inicializado.

No código, podemos ver a seguinte informação

Se olharmos no código:

Perceberemos que a menção a função main, na chamada memset, indicando que o sizeof não foi definido.

Vemos tambem que o valgrind acusa que o info não foi inicializado.

Esta é apenas uma pequena demonstração do valgrind, e como pode ser utilizado.

Existe muito a ser aprendido por mim, por esta importante ferramenta de depuração e analise.

Blog C/C++ Dicas
Core dump em C

Estaremos abordando aqui o que é um core dump, como trabalhar com ele.

O Core Dump é gerado através da saída anormal do programa.

O core dump, é criado, como um mapa de memória no momento da excessão, com isso é possivel debugar e identificar o problema no momento da excessão.

Iremos abordar um pouco deste processo.

Ativando o Core Dump

Em alguns sistemas operacionais, o core dump vem desativado.

Para ativa-lo, é necessário digitar o seguinte comando:

ulimit -c unlimited

comando ativa o core dump, com tamanho ilimitado.

Criando um programa exemplo

Para demonstrar isso criamos um programa que gera esta excessão.

Fonte teste.c, é conforme se segue:

#include<stdio.h>
#include<string.h>

void main(){
        char *info;
        memset(info,'\0',sizeof(info));
        printf("String:%s",info);

}

Como podemos ver a variavel, info, nunca foi inicializada, e quando chamada pelo memset, irá gerar o core dump.

Arquivo Makefile, é como se segue:

all: compile

compile:
        gcc teste.c -o teste

Ao realizar a operação, podemos verificar a geração do erro.

geração do arquivo core

Redirecionando arquivo core dump

Conforme o post deste site:

https://www.baeldung.com/linux/managing-core-dumps

Alias ótimo site, podemos redirecionar o caminho default do core, através do seguinte comando.

 sudo sysctl -w kernel.core_pattern="./%e_core_dump.%p"

Permitindo gerar o dump, no local que bem preferir.

Lendo arquivo Core Dump

O nosso amigo GCC é o programa que irá ler o core dump, para tanto é necessário, abrir o gcc com o core dump. Assim como se estivesse debugando um programa tradicional.

gcc -c <coredump file>

Para saber mais sobre o GCC leia este outro post.

http://maurinsoft.com.br/index.php/2021/08/20/criando-aplicacao-debugavel-no-linux/
Dicas IA pós graduação Sem categoria
Instalando NVIDIA GTX-1070 no Ubuntu

O processo abaixo descreve como instalar a placa de vídeo GTX-1070 no Ubuntu.

O objetivo deste tutorial é auxiliar programadores e estudantes de IA, pois a GTX1070 é recomendada para processamento de padrões.

Referências:

https://itectec.com/ubuntu/ubuntu-install-driver-for-gtx-1070/

https://gist.github.com/iSkore/ad043b64c8576d8eb818f7027da18b09

Pré requisitos

sudo apt remove nvidia*

sudo apt update


sudo apt install dkms build-essential linux-headers-generic vim gcc


Procedimentos

Primeiro será necessário baixar a versão do instalador do site da NVIDIA.

Para isso entre no site:

https://www.nvidia.com.br/Download/index.aspx?lang=br

Informe primeiro o tipo da sua placa, em seguida a série, e a família.

O sistema operacional vem em seguida. Algumas placas não tem todos os sistemas operacionais.

Ao clicar em procurar, surgirá a seguinte tela:

Click em baixar, e aceite os termos, nas telas subsequentes.

Por fim, irá comecar a baixar o arquivo NVIDIA-Linux-x86_64-470.94.run

sudo sh ./NVIDIA-Linux-x86_64-470.94.run

Rode conforme o comando acima.

O padrão de instalação é o enter, vc pode selecionar, outra opção ou usar enter sempre que perguntar, para selecionar opção padrão.

Por fim, reinicie o computador.

Confirmando a instalação

Dê reboot na maquina, em seguida, encontre o aplicativo:

Drivers Adicionais

Aplicativo Drivers Adicionais

Execute o mesmo, e vc verá conforme figura abaixo:

Na aba Drivers Adicionais, a gpu instalada, conforme figura acima.

Blog GIT
Leitor de Mesa MIFARE

O RFID, ou leitor de radio frequência com identificação unica, é muito utilizado em sistemas de automação, que faz-se necessário a leitura de identificação de 1 ou mais dispositivos de forma rápida.

O RFID pode ser utilizado em Postos de gasolina, mercados entre outros sistemas. Estando presente em Sistemas de PDV, Self Checkout entre outros.

De forma geral, o desenvolvedor do hardware, fornece um leitor para integração no PC. Porem os cartões de RFID são padronizados, e podem ser utilizados outros leitores.

Eu desenvolvi um leitor muito simples de rfid, utilizando arduino leonardo. Este leitor joga no pc, como se fosse digitação, não necessitando de hardware ou drivers adicionais.

Versão simples do leitor montado.

O Projeto esta no git e pode ser baixado e usado livremente.

https://github.com/marcelomaurin/RFID-Reader

Blog
Listando processos

Uma forma simples no linux, para saber quais os processos estão rodando no seu computador, é o uso do comando PS.

O PS lista os processos do sistema rodando na sua máquina.

Entende-se por processos, programas que rodam no computador, de forma aparente ou não.

No exemplo abaixo, podemos ver o uso do comando, na forma mais simples:

Ao rodar o ps sozinho, vemos apenas os processos do nosso usuário, ou seja, os processos que nosso usuário esta executando.

Documentação online

O comando ps, pode ser visto em detalhes, através do link abaixo:

https://man7.org/linux/man-pages/man1/ps.1.html

Vendo todos os processos

Uma forma simples de ver todos os processos que estão sendo executados na máquina, é através do comando:

ps -A

Conforme apresentado abaixo, o ps -A, lista todos os processos em execução.

Podemos usar um recurso comum, a associação com o grep, que é um filtro de resultado.

ps -A|grep -e post

Neste caso, podemos observar que o resultado é filtrado por ocorrencias que tem a palavra post.

Esta técnica é muito útil, para pesquisar processos que desejamos.

Informações acessórias do ps

No exemplo acima, podemos ver a primeira linha onde apresenta o nro 2141, este número é o pid do processo.

PID é o identificador do processo, é um numero que identifica unicamente o processo em execução. O PID é utilizado entre outras coisas, para matar o processo, exemplo:

kill 2141


No exemplo acima, o kill irá matar o processo 2141, encerrando o mesmo.

Em algumas situações é necessário ter permissão para fazer essa operação. De fato, se o processo não for do próprio usuário o kill só pode ser dado pelo usuario que o criou ou pelo administrador do sistema.

O tempo, que aparece a seguir 00:00:12, é o tempo que este processo esta ativo, ou o tempo de execução. Alguns processos, podem ficar por muito tempo em execução, outros tem uma vida muito curta. O tempo de execução de um processo, depende da forma que ele foi desenvolvido, e de sua finalidade.

Mais opções do PS

Outra opção muito útil, é o comando:

ps -ef

Neste exemplo, o ps, fornece uma lista mais detalhada de informações a cerca do processo.

Como podemos ver, alem do pid, temos o usuário do processo, o PID pai, a hora da execução, o tempo no ar, alem de informações mais detalhadas, a cerca da execução em si.

Documentação do Grep

https://linux.die.net/man/1/grep

Neste link podemos ver as informações da documentação de todos os paramentros associados ao grep.

Agradecimentos

Bom pessoal, espero que este post tenha ajudado voces na fantástica jornada ao mundo linux, quero agradecer ao Lucas Lima, que contribuíu com algumas dicas que tornaram viavel a realização deste artigo.

Feed Back

Se o artigo, foi útil, nos envie um feed back, para o email marcelomaurinmartins@gmail.com.

Grande abraço.

Blog
Custo do Turnover

O Turnover é um termo em Inglês, que significa mudança (rotatividade) de pessoal.

O Turnover tem se mostrado uma situação crítica, principalmente no Brasil, devido ao alto custo de recolocação.

Empresas de TI, estão brigando arduamente por recursos de tecnologia, colaboradores tem migrado, para outras empresas, devido a escasses do mercado, e a crescente valorização de seu trabalho.

Hoje profissionais, são cada vez mais escassos, e conquista-los mantendo motivados, é cada vez mais dificil.

Conforme artigo publicado em:

https://mittechreview.com.br/o-apagao-tecnologico-tem-preco-alto-como-segurar-os-seus-melhores-profissionais/

“Um colaborador recem contratado, precisa de 2 anos, para alcançar potencial maximo de produtividade.”

O preço da perda do funcionário, representa alem de maior morosidade na entrega de projetos, como aumento nos riscos e problemas associados a qualidade.

“Nos Estados Unidos, estima-se que o custo adicional devido ao turnover gire em torno de US$ 3,9 Milhões. “

Manter profissionais motivados, treinados e adequados, é cada vez mais importante para a empresa.

Outro fator importante é a documentação dos projetos, indicarei outro artigo que trato do assunto:

http://maurinsoft.com.br/index.php/2021/08/12/documentando-seu-negocio/
Blog Dicas Python Sem categoria
Capturando tela com Python

Neste procedimento, é possivel capturar a tela do PC.

Para tanto é necessário instalar

pip install opencv-python

pip install numpy

pip install pyautogui

Segue o fonte:

import cv2
import numpy as np
import pyautogui

SCREEN_SIZE = (1920,1000)

fourcc = cv2.VideoWrite_fourcc(*"XVID")
out = cv2.VideoWriter("gravacao.avi",fourcc,20.0,(SCREEN_SIZE))

while True:
   img = pyautogui.screenshot()
   frame = np.array(img)
   frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
   out.write(frame)

   if cv2.waitKey(1) == ord("q"):
      break

cv2.destroyAllWindows()
out.release()

Blog Dicas
Lembrando arquivos modificados

“Deus salva mas o backup recupera”

Esta famosa frase, lembrada por muitos programadores, pode ser tambem um suplicio quando voce não lembrar qual a pasta do ultimo backup.

Para issso, segue uma dica

find /directory/path/ -mtime -30 -ls

Este comando mostra em uma pasta, recursivamente os arquivos modificados nos ultimos 30 dias.

Esta informação foi obtida do seguinte link, e achei tão legal que resolvi propagar.

en_USEnglish