IA pós graduação
Comandos do Jupyter
AtalhoO que faz?
SHIFT + ENTERFinaliza criando nova célula
%%htmlcria um espaço p execução de html page
%%jscria um espaco java script
%%writefile <nomefile>Cria um arquivo que será salvo
CTRL+ENTERExecuta código
CTRL+DDeleta linha
CTRL + /Comenta linha
# Titulo 1
##Titulo 2
###Titulo 3
####Titulo 4
* item de lista
[texto]: urlhiperlink
![texto]:urlimagem
“`javascript bloco “`bloco de javascript exemplo de código
“`python bloco “` Bloco de python exemplo de código
|Marcação de tabela | elemento | elemento2| etc
>Comentário
<a href="/wp/en/””/"></a>inclui html direto no projeto
IA Python Sem categoria
Instalando o jupyter notebook no raspberry pi

Siga os passos abaixo:

sudo su -
apt-get update
apt-get install python3-matplotlib
apt-get install python3-scipy
apt-get install python3-pip3
pip3 install --upgrade pip
reboot
sudo pip3 install jupyter

Outro processo que pode ser feito é a forma direta, através do comando:

sudo su

apt-get install jupyter

Porem recomendo a primeira maneira, por ser na minha opinião a mais correta.

Referência:
https://www.instructables.com/Jupyter-Notebook-on-Raspberry-Pi/

Instalando o NBCONVERT

Para instalar os módulos de documentação, será necessario rodar os seguintes programas:

pip install nbconvert

Outra maneira de realizar esse procedimento é:

conda install nbconvert

Segue o exemplo do programa sendo rodado:

instalando o nbconvert

Referencias deste artigo:

https://nbconvert.readthedocs.io/en/4.2.0/install.html

Instalando o PANDOC

O pandoc é necessário para converter markdown para formatos como html, o nbconvert usa o pandoc.

Para sua instalação:

apt-get install pandoc

Exemplo de instalação realizada:

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.

en_USEnglish