Sem categoria
Pós graduação

Hoje comecei, minha pós graduação na uninove, no curso de Aprendizado de Máquina.

Minha primeira disciplina será python. Tivemos uma introdução sobre o curso.

Foi muito frutífera, gostei muito da aula do professor Dr. Jose Eduardo Storopoli.

Tenho muitas expectativas quanto ao curso.

Com quase 50 anos, eu estou voltando a estudar, quero aprender mais, e acredito ser uma ótima oportunidade de reciclar conceitos.

Acredito que aprendizado de máquina seja realmente o futuro, e que estamos ainda engatinhando nesse novo mundo de possibilidades.

Que venha o futuro.

Sem categoria
Criando VM com VirtualBox

VM é uma sigla para virtualbox, ou máquina virtual, em português.

Uma vm nada mais é que a emulação de uma maquina (computador).

Com a VM podemos instalar maquinas de teste, para simular situações ou ambientes que queremos testar.

Baixar o Virtualbox

O virtualbox pode ser baixado, através do seguinte site:

https://www.virtualbox.org/wiki/Downloads

No site é possível escolher a plataforma que deseja utilizar para rodar a vm, no meu caso, estarei instalando em uma maquina windows.

Porem a VM uma vez criada pode ser utilizada em qualquer plataforma, pois os arquivos da VM, independe do sistema operacional que a sustenta.

Instalar uma nova VM

Após instalado o virtualbox é necessário montar a máquina virtual, para tanto, criaremos uma máquina Linux.

Para isso, siga os passos a seguir:

Vamos criar uma nova VM, clicando no botão novo, conforme demonstrado acima.

Ao clicar, no botão, surge uma janela, conforme descrito abaixo:

Preencha um nome que diz respeito ao uso desta vm, no campo nome.

No campo pasta, indique a pasta que será incluída as informações da VM, lembrando que o HD da vm pode ser incluída em pasta separada.

No campo Tipo, contem a informação do sistema operacional que voce irá armazenar, preocupe-se com o seu tipo e na versão e revisão e principalmente arquitetura (32/64bits) deste.

Por fim, click no botão Próximo.

Agora iremos indicar o tamanho da memória RAM, para tanto:

Arraste a barra, até o tamanho da memória que deseja, ou digite a mesma, na caixa ao lado.

Por fim, click no botão Proximo.

Criação de Disco virtual

Iremos criar agora o disco virtual, que irá armazenar as informações da VM.

Selecione a opção Criar um novo disco rígido virtual agora, conforme figura abaixo:

Em seguida, click no botão criar.

Agora iremos selecionar o tipo do disco rígido, na imagem abaixo, vemos 3 tipos possíveis.

No nosso caso, selecionamento VDI, e clicamos no botão Próximo.

Agora, iremos alocar o espaço da VM, conforme figura abaixo:

Selecionamos o item dinamicamente alocado, pois queremos que o tamanho possa ser alocado a medida da necessidade e não fixo como na modalidade seguinte.

Selecionamos o botão Próximo.

Agora iremos, indicar o local do armazenamento do disco rígido.

Na caixa de texto digitaremos seu local+nome, também alocando seu tamanho, rolando até o valor desejado. No nosso caso colocaremos 65Gb.

Por fim, clicamos em Criar, para gravar as alterações.

Por conclusão será criada uma VM na aba lateral com o nome apresentado durante o treinamento.

Instalando o Sistema Operacional

Para instalação do sistema operacional, é necessário baixar uma imagem do linux, no nosso caso usaremos a ubuntu 20.04, conforme apontado na imagem:

Em seguida, na vm, click na vm que deseja configurar, e em seguida no botão configurações.

Conforme figura acima.

Agora, iremos indicar a imagem, para isso, selecione o grupo Armazenamento.

Em seguida selecione Em controladora IDE, na imagem do CD (Vazio).

Agora por fim, em atributos, click no botão do cd, e indique a imagem, anteriormente indicada.

Finalizando por Abrir.

Pronto sua VM esta pronta para ser instalada.

Rodando a VM

Agora para concluir, basta iniciar a mesma, para tanto, selecione a vm desejada, e click no botão Iniciar

Conforme figura acima.

Blog
Copiando arquivos via SSH

Estarei explicando como copiar arquivo via SSH.

FILEZILLA

O filezilla é um software de transferência de arquivos, voce pode baixar o cliente em:

https://filezilla-project.org/download.php?platform=win64

Para acessar via ssh, use as seguintes configurações:

Click em Arquivo > Gerenciador de sites, conforme figura abaixo:

Parametros de configuração no Filezilla

Selecione o protocolo SFTP.

Digite o Host desejado

Digite o usuário desejado.

Digite a senha.

Click em Conectar.

Bitvise

O bitvise é outro cliente de ssh, nele é possível baixar ou trocar dados, mas tambem interagir com o terminal.

O processo é o mesmo do Filezilla, ele pode ser baixado em:

https://www.bitvise.com/

Para conectar digite os dados conforme a imagem abaixo:

Em host selecione o seu host

Depois escolha o usuário, e a senha

Click em Log in, para conectar.

Sem categoria
Treinamento na Faixa

É isso mesmo, estou montando um treinamento na faixa para desenvolvedores Delphi.

O treinamento é voltado a programadores Delphi que tenham interesse em aprender as novidades sobre o uso de lazarus.

Assuntos abordados neste treinamento:

  • Instalação do Lazarus no Linux
  • Instalação Lazarus para compilação cruzada
  • Instalação no Windows
  • Laboratório técnico sobre instalação
  • Criando um programa de Exemplo
  • Criando Instalador no Linux
  • Conectando em Banco de Dados no Linux
  • Trabalhando ACBR no Linux
  • Trabalhando com Serial
  • Trabalhando com Socket
  • Integração Lazarus/C
  • Integração Lazarus/Python
  • Integração Lazarus/Raspberry PI
  • Integração Lazarus/Arduino

Não estarei abordando aspectos da base de programação, pois o intuito deste curso é aprimoramento apenas.

O Curso será apresentado em treinamentos semanais, onde a cada nova semana, entregarei uma nova aula.

Para participar deste treinamento, é necessário enviar um email para marcelomaurinmartins@gmail.com com o título do email: treinamento lazarus.

Serão aceitos apenas emails até o dia 20/09/2021.

O treinamento será ministrado em plataforma digital, da maurinsoft.com para EAD.

Blog C/C++
Trabalhando com arquivos em Linux com C

Neste artigo, irei descrever como trabalhar com arquivos em C no linux.

Segue o exemplo do Makefile do projeto:


all: compile

compile:
        gcc files.c -o files

Excluindo arquivos

Em programação, é comum manipularmos arquivos de diversas formas. Uma boa prática é sempre a limpeza da máquina, para evitar estouro de memoria de disco.

Para isso usaremos o comando abaixo:

int unlink(const char *pathname);

Para demonstrar isso, iremos apresentar e comentar um programa (files.c).

#include <unistd.h>
#include <stdio.h>



int ApagaArquivo(char *arquivo){
        return unlink(arquivo);
}

void main(void){
        char arquivo[50];
        sprintf(arquivo,"./teste.txt");
        if (ApagaArquivo(arquivo)==0){
                printf("Arquivo apagado\n");
        }
}

Inicialmente iremos utilizar a lib unistd.h do linux, conforme apresentado a cima.

A função ApagaArquivo, possui um unico comando, que é o unlink, que possui a seguinte sintaxe:

int unlink(const char *pathname);

O parâmetro pathname, é o nome do arquivo com seu respectivo caminho.

Link de arquivo

O Comando link cria uma referencia de um arquivo, com outro nome ou em outro local.

Para realizar isso usa-se o comando link.

int link( const char *oldpath, const char *newpath);

No exemplo abaixo, podemos ver a modificação do nosso exemplo files.c:

#include <unistd.h>
#include <stdio.h>



int ApagaArquivo(char *arquivo){
        return unlink(arquivo);
}

int Linkando(char *origem, char *arquivo){
        return link(origem,arquivo);
}

void main(void){
        char arquivo[50];
        sprintf(arquivo,"./teste.txt");
        if(ApagaArquivo(arquivo)==0){
                printf("Arquivo apagado\n");
        }
        char origem[50];
        sprintf(origem,"./teste.old");
        if(Linkando(origem,arquivo)==0){
                printf("Arquivo linkado!\n");
        }
}

A função Linkando, retrata a funcionalidade em si, nela temos dois parametros:

  • origem
  • arquivo

No origem, temos o arquivo que gerará um link (referência). Percebemos que indicamos o arquivo teste.old. Em seguida temos o arquivo, que é de fato o que será criado.

Podemos ver aqui, como foi montado nosso projeto.

Agora ao rodar nosso programa temos a seguinte diferença:

Percebam que o arquivo teste.old e teste.txt tem o mesmo tamanho, para ter certeza que é apenas um link, vamos mudar o tamanho do teste.old, e verificar se o teste.txt tambem modifica.

Apos a mudança de tamanho do arquivo original, verificamos que o seu link também modifica.

Em breve publicarei outros comandos relacionados a manipulação de arquivos no linux, para que eu possa continuar tralhando, envie-nos seus feedbacks sobre os artigos.

Mande-nos um email para marcelomaurinmartins@gmail.com passando o que deseja que eu escreva.

Vida longa e prospera a todos!

Moodle
Mudando Moodlebox de dominio

Uma das coisas que você logo precisa ao rodar o seu servidor moodle, é mudar ele para um dominio externo.

No meu caso, http://maurinsoft.com.br:88

Vou explicar detalhadamente como fazer neste post.

Este post foi baseado nas informações apresentadas neste link:

https://moodlebox.net/en/help/domain-name-change/

Passo 1: Edite seu hosts

Entre no link /etc/hosts

Com o editor pico, digite o seguinte comando:

sudo pico /etc/hosts

Com isso voce deverá incluir seu dominio, como fiz com o meu:

Passo 2: Mude o nginx web server

Agora devemos mudar o nginx web server para responder no endereço e porta corretas.

No meu caso, irei colocar o meu dominio e a porta 88, o arquivo é o /etc/nginx/sites-available/default, para tanto edite o arquivo, conforme a sintaxe abaixo:

sudo pico /etc/nginx/sites-available/default

Realize as seguintes modificações,

Modificação do web server

Modifique a porta do servidor no meu caso para 88, onde aparece o listen

Modifique o server_name para seu url, não esqueça o ponto e virgula.

Passo 3: Mude seu URL

Agora iremos editar o arquivo /etc/dnsmasq.conf, para tanto rode o seguinte comando:

pico /etc/dnsmasq.conf

Neste arquivo, voce deve mudar o txt-record, conforme figura abaixo:

Passo 4: Mude o site

Agora por fim iremos mudar as configurações do site, para isso, edite o arquivo config.php, localizado em /var/www/moodle/, através do seguinte comando:

sudo pico /var/www/moodle/config.php

A mudança deve ser conforme apresentada:

Passo 5: Ative as mudanças no seu roteador

Agora, é necessário criar um servidor virtual no seu roteador, para visualizar a porta, e permitir que conexões externas acessem seu servidor.

Essa parametrização muda de modelo para modelo de servidor. Por isso irei apresentar o que deve ser feito, sem entrar em detalhes, pois seria útil apenas para quem possuísse o mesmo roteador que eu.

Em modo avançado, geralmente existe uma opção de servidores virtuais, crie uma regra, para que quando alguem solicitar um acesso na porta externa seja direcionada para o ip do raspberry (precisa pegar qual é) na porta que vc quer bater.

No meu caso ficou assim:

Pronto agora é só entrar dar o comando reboot como sudo:

sudo reboot

Segue resultado final:

Tela administrativa
C/C++
Como verificar grupo no linux com C

Este artigo é uma continuação do treinamento apresentado no artigo abaixo:

http://maurinsoft.com.br/index.php/2021/08/27/como-verificar-user-no-linux-com-c/

Agora iremos falar um pouco sobre as informações dos grupos no linux.

O arquivo /etc/group, é um banco de dados de grupos de usuários, os grupos são usados para permissões de acesso, pois em geral, estabelecemos permissões para o usuário, para os membros de seu grupo e depois para os outros usuários.

lista de grupos da minha maquina.

Ao olharmos o grupo mmm, percebemos que tem o mesmo nome e codigo do usuario (/etc/passwd). Ao criarmos um usuário, o linux automáticamente cria um um grupo para este.

Tabela das informações do /etc/group

Número de CAMPODados de exemploDescrição
1mmmO nome do grupo
2xA senha do grupo (se existir)
31000O numero de id do grupo
4A lista de nomes de usuários que pertencem a esse grupo

Vamos ao código em C

Agora vamos estudar o código abaixo, que é basicamente uma continuação do código do primeiro artigo.

#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>

void main(){
	long uid = getuid();
	long gid = getgid();
	char nomegrupo[40];

	printf("\nMeu id %ld\n",uid);
	printf("Meu group id %ld\n",gid);
	struct group *gp= getgrgid(gid);
	printf("Meu nome do grupo %s",gp->gr_name);
	struct passwd *ppw;
	int erro = 0;
	ppw = NULL;
	printf("Listagem de usuarios\n=======================\n");
	//pww = getpwent( ); /*Obtem a senha*/
	while((ppw = getpwent())!=NULL){
		if(erro !=0) {
			printf("Falhou\n ");
			//abort();
		} else {
			printf("Usuario:%s\n",ppw->pw_name);
			printf("senha:%s\n",ppw->pw_passwd);
			printf("id de usuario:%d\n",ppw->pw_uid);
			printf("id do grupo:%d\n"a,ppw->pw_gid);

			/*Pega as informações do grupo*/
			gid = ppw->pw_gid; /*Pega o grupo do usuario*/
			gp = getgrgid(gid);

			/*Mostra os grupos*/
			printf("Nome do grupo %s",gp->gr_name);
			printf("Senha do grupo %s",gp->gr_passwd);
			printf("id do grupo %d",gp->gr_gid);
			for( int cont= 0; gp->gr_mem[cont]!=0;++cont) {
				printf("membros do grupo %s", gp->gr_mem[cont]);
			}

			/*O resto das informações do usuario*/
			printf("comentario:%s\n",ppw->pw_gecos);
			printf("diretorio:%s\n",ppw->pw_dir);
			printf("shell:%s\n", ppw->pw_shell);
		}
		printf("\n");

	}

}

Neste código, podemos ver 2 fragmentos importantes:

#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>

void main(){
	long uid = getuid();
	long gid = getgid();
	char nomegrupo[40];

	printf("\nMeu id %ld\n",uid);
	printf("Meu group id %ld\n",gid);
	struct group *gp= getgrgid(gid);
	printf("Meu nome do grupo %s",gp->gr_name);
	struct passwd *ppw;
	int erro = 0;
	ppw = NULL;

Neste pequeno fragmento, a lib responsável pelo gerenciamento do grupo, é

#include <grp.h>

Funções de gestão de grupo

Para comecarmos, vamos apresentar a estrutura de um grupo:

struct group {
   char *gr_name; /* nome do grupo */
   char *gr_passwd; /* senha do grupo */
   gid_t gr_gid; /* id do grupo */
   char **gr_mem; /* membros do grupo */
}

GETGRENT

Abre a listagem e pega a primeira ocorrencia do grupo. Funcionando como um cursor, para capturar todos os registros do grupo.

while ( ( gp = getgrent())!=0){
   printf("%s", gp->gr_name);
}
endgrent();

No caso do exemplo acima, só para quando o ultimo registro for encontrado.

ENDGRENT

É usado em conjunto com a função getgrent, ela faz voltar para a posição inicial.


while ( ( gp = getgrent())!=0){
   printf("%s", gp->gr_name);
   endgrent();
}

Nesta sutil variação do código, será mostrada sempre o primeiro registro.

GETGRGID

Pesquisa o grupo, pegando a estrutura identificada pela chave gid (Group ID).

printf("\nMeu id %ld\n",uid);
printf("Meu group id %ld\n",gid);
struct group *gp= getgrgid(gid);
printf("Meu nome do grupo %s",gp->gr_name);

No fragmento acima, podemos ver que funciona, inclusive acompanhar sua sintaxe.

GETGRNAM

Função semelhante a anterior, porem em vez de pegar o id, ela procura o grupo que contenha o nome do grupo.

SIntaxe:

char nome[20];
sprintf(nome,"mmm");
struct group *gp = getgrnam(nome);
printf("ID grupo: %d",gp->gr_gid); 

Bom pessoal, por enquanto isso é tudo!

Espero ve-los em breve.

E se curtiu o texto, ou acha que poderiamos melhorar, envie-nos um email

marcelomaurinmartins@gmail.com

Até breve e vida longa e prospera.

C/C++ Dicas Sem categoria
Como verificar user no Linux com C

A linguagem C é uma linguagem dinâmica, ainda mais com Linux, que foi feito nesta linguagem.

Iremos começar a navegar nas interações da linguagem C com o linux.

Nesta nossa primeira jornada, iremos explorar como descobrir o usuário conectado.

Ao criarmos um usuário, o linux registra este na pasta /etc/, mais especificamente no passwd.

Exemplo do arquivo passwd

No exemplo a cima, podemos ver que o usuario mmm, tem a representação, conforme apresentado abaixo:

mmm:x:1000:1000:mmm,,,:/home/mmm:/bin/bash

Se olharmos a estrutura deste podemos identificar, a seguinte ordem:

user:x:1001:1001:user,,,:/home/user:/bin/bash
[–] – [–] [–] [—–] [——–] [——–]
| | | | | | |
| | | | | | +-> 7. Login shell
| | | | | +———-> 6. Home directory
| | | | +——————–> 5. GECOS
| | | +————————–> 4. GID
| | +——————————-> 3. UID
| +———————————–> 2. Password
+—————————————-> 1. Username

estrutura do arquivo passwd

Os principais componentes deste fragmento, são o UID e o GID.

O UID é o User Identification – Que é um número único, que identifica o usuário

O GID é o Group Identification – Que identifica o grupo pertencente aquele usuário, este arquivo, esta associado ao arquivo /etc/groups, que auxilia na criação de permissões.

Lendo o UID e o GID do usuário conectado

Quando voce loga no linux, utiliza as suas credenciais, login e senha. Desta forma sua aplicação precisa saber como pegar tal informação.

As informações do usuário logado, podem ser obtidas através da biblioteca unistd.h, entre suas várias funções estão duas:

  • gid_t getgid(void)
  • gid_t getegid(void)

Abaixo, traremos o main.c, que é um exemplo bem simples do uso da biblioteca.

#include <unistd.h>
#include <stdio.h>

void main(){
        printf("\nMeu id %i\n",getuid());
        printf("Meu group id %i\n",getgid());
}

No exemplo capturamos de forma direta o getuid e o getgid, onde mostramos os mesmos em uma mensagem.

all: compile

compile:
        gcc main.c -o ex01

No fragmento acima, temos o arquivo Makefile, ja nosso amigo de longa data, responsável pela compilação propriamente dita.

Listando as informações /etc/passwd

Este segundo programa, é um pouco mais complicado, ele varre a listagem de todos os usuarios, apresentando o conteúdo do passwd, e relacionando, conforme a estrutura do passwd.

#include <unistd.h>
#include <unistd.h>
#include <unistd.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>

void main(){
        long uid = getuid();
        long gid = getgid();
        printf("\nMeu id %ld\n",uid);
        printf("Meu group id %ld\n",gid);
        struct passwd *ppw;
        int erro = 0;
        ppw = NULL;
        printf("Listagem de usuarios\n=======================\n");
        //pww = getpwent( ); /*Obtem a senha*/
        while((ppw = getpwent())!=NULL){
                if(erro !=0) {
                        printf("Falhou\n ");
                        //abort();
                } else {
                        printf("Usuario:%s\n",ppw->pw_name);
                        printf("senha:%s\n",ppw->pw_passwd);
                        printf("id de usuario:%d\n",ppw->pw_uid);
                        printf("id do grupo:%d\n",ppw->pw_gid);
                        printf("comentario:%s\n",ppw->pw_gecos);
                        printf("diretorio:%s\n",ppw->pw_dir);
                        printf("shell:%s\n", ppw->pw_shell);
                }
                printf("\n");

        }

}

Temos como saída o exemplo que se segue:

estrutura do passwd

Outras funções semelhantes

A função getpwuid retorna a estrutura passwd, igual a anterior, porem, ela pega apenas a de um uid especifico, utilizado para pesquisar a informação de user id.

struct passwd *getpwuid(uid_t uid);

Pesquisa por login,

struct passwd *getpwnam(const char* name);

Blog C/C++ CUDA IA pós graduação Python
Install CUDA toolkit em xubuntu 18.04

CUDA Toolkit é um conjunto de ferramentas desenvolvidas para programação em GPU.

Este processo tambem foi testado em uma máquina Ubuntu 20.04.02.

Informações relacionadas ao Toolkit:

https://developer.nvidia.com/cuda-toolkit

Para instalação é necessário verificar a sua distribuição, no caso do ubuntu ou xubuntu 18.04.

Siga os passos abaixo:

Baixe o arquivo pin

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin

Mova para o repositório de pacotes

sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600

Baixe agora o pacote cuda.

wget https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda-repo-ubuntu1804-11-4-local_11.4.1-470.57.02-1_amd64.deb

Instale o pacote conforme o comando abaixo:

sudo dpkg -i cuda-repo-ubuntu1804-11-4-local_11.4.1-470.57.02-1_amd64.deb

Adicione a chave do repositório

sudo apt-key add /var/cuda-repo-ubuntu1804-11-4-local/7fa2af80.pub

Por fim atualize a lista de pacotes:

sudo apt-get update

sudo apt-get upgrade

Baixando o pacote cuda, e suas dependencias.

sudo apt-get -y install cuda

Etapas intermediarias de instalação do CUDA
Processo final baseado no apt do pacote.

As informações aqui fornecidas, foram retiradas do site:

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=18.04&target_type=deb_local

Procedimento Ubuntu 20.04

Referencia:

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_local

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin

sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600

wget https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda-repo-ubuntu2004-11-5-local_11.5.1-495.29.05-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu2004-11-5-local_11.5.1-495.29.05-1_amd64.deb

sudo apt-key add /var/cuda-repo-ubuntu2004-11-5-local/7fa2af80.pub

sudo apt-get update

sudo apt-get -y install cuda

Tela da instalação do CUDA em UBUNTU 20.04
Finalização da Instalação do CUDA

Outros artigos

    maurinsoft.com.br