C/C++ Sem categoria
Criando um driver linux

Iremos abordar neste artigo, como criar um device driver em linux.

Pré requisitos

Instale os seguintes pacotes:

sudo apt-get install linux-headers-generic

apt-get install linux-headers-`uname -r`

Instale o gcc:

sudo apt-get install gcc

sudo apt-get install build-essential

apt-get install linux-virtual

GIT do Projeto

https://github.com/marcelomaurin/devicedriver_sample

Compilando o projeto

Abaixo o vídeo explicativo do tópico que será abordado aqui:

Agora vamos ao nosso código, crie um programa hello.c, conforme o código abaixo:

/*
 *  hello.c - The simplest kernel module.
 */
#include <linux/init.h>
#include <linux/module.h>	/* Needed by all modules */
#include <linux/kernel.h>	/* Needed for KERN_INFO */

static int hello_init(void)
{
	printk(KERN_INFO "Hello world 1.\n");

	/*
	 * A non 0 return means init_module failed; module can't be loaded.
	 */
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_INFO "Goodbye world 1.\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("MARCELO MAURIN MARTINS");

Agora crie o Makefile:

obj-m += hello.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Carregando o Módulo do Kernel

Para carregar o módulo é necessário primeiro entender alguns comandos:

lsmod

Lista os módulos carregados do kernel.

Exemplo de lsmod

insmod

Carrega um módulo no kernel.

Carrega o módulo na memória

dmesg

Mostra mensagens do sistema

Retorno do modulo carregado em dmesg

rmmod

Remove um modulo da memória do kernel

Remove um módulo do kernel
Lista mensagens do kernel

Referências

Este artigo esta sendo baseado em vários artigos, o principal é esse:

https://tldp.org/LDP/lkmpg/2.6/html/x181.html

How to Write a Hello World Program in Linux Device driver

Linux Device Driver – Alessandro Rubini

Sem categoria
Site invadido

Portuguese

Pessoal, hoje sofri uma invasão, o cara não só roubou os dados com também tirou o site fora do ar.

Pessoal, este site é opensource, invadir o site, não vai agregar nada, porque todas as informações aqui disponibilizadas, são abertas.

Não há um programa aqui que já não esteja em meus gits ou nos projetos.

Então senhores, peço que não o façam, porque isso apenas prejudica quem precisa das informações aqui disponibilizados.

Estudantes e pessoas que buscam no google.

Tudo o que esta aqui, já é aberto.

E o conteúdo integral do site já pode ser baixado no git.

Estou fazendo esse trabalho de formiguinha, então colaborem não prejudicando outros.

Grato.

Blog Dicas Shell Script
Debugando Script em Shell Script

Ao criar um shell script em linux, por vezes ficamos na duvida quando este apresenta algum problema.

O debug, consiste em uma técnica utilizada para analisar e posteriormente identificar problemas.

Os scripts bash (shell script) tambem podem ser debugados, para tanto, usamos os parâmetros a seguir

Debug com impressão

Usa-se quando for necessário imprimir o resultado do processamento do script

#!/bin/sh

set -x

[comando]

set +x

argumento usado na execução do

Outros parâmetros

OpçãoSignificado
set -xImprime as declarações após interpretar metacaracteres e variáveis
set+xPára a impressão de declarações
set -vImprime as declarações antes de interpretar metacaracteres e variáveis
set -fDesativa a geração de nome de arquivo (usando metacaracteres)
Relação de parâmetros possíveis

Este artigo foi baseado na referencia:

https://www.thegeekdiary.com/how-to-debug-shell-scripts/

IA pós graduação Python
Uso de Pandas com Python

Instalação do Pandas

O processo de instalação é bem simples.

Basta entrar como su, e dar o seguinte comando:

pip3 install pandas

Segue o vídeo do processo.

Outro processo que pode ser usado é pelo apt

apt install python3-pandas python3-pandas-lib

Nada disso funcionou e agora?

Não se preocupe entre no seu jupyter, e digite o seguinte comando:

import sys

print(sys.executable)

Ele deve retornar um caminho no meu caso, foi:

/snap/jupyter/6/bin/python

Dai pegue esse caminho e instale

/snap/jupyter/6/bin/python pip install pandas –user

Tenho certeza que pelo menos uma destas técnicas irão funcionar com vc.

Definições

Series são arrays “unidimencional”

DataFrame são tabelas.

Criando uma Serie

Neste exemplo estarei mostrando como criar uma serie no pandas.

import pandas as pan

sr = pan.Series(['ele1','ele2','ele3'])

print(sr)

Resultado esperado:

0    ele1
1    ele2
2    ele3
dtype: object

Usando um dicionário

Usaremos uma série associado ao dicionario.

import pandas as pan

dic = {1:'elem1', 2:'elem2',3:'elem3'}
sr = pan.Series(dic)

print(sr)

O resultado esperado é como aparece a seguir:

1    elem1
2    elem2
3    elem3
dtype: object

Criando um DataFrame

Exemplo de criação de um dataframe

import pandas as pan

df1 = pan.DataFrame([[1,'item1','true'],[2,'item2','false'],[3,'item3','true']],columns=['ind','item','cond'])
print(df1)

Ao rodar esse exemplo fica conforme apresentado.

   ind   item   cond
0    1  item1   true
1    2  item2  false
2    3  item3   true

Como ler um arquivo no Pandas e concatenar arquivos.

import pandas as pd

df2 = pd.read_csv("2021-02-gasolina-etanol.csv",delimiter=";")

df3 = pd.read_csv("2021-03-gasolina-etanol.csv",delimiter=";")

df4 = pd.read_csv("2021-04-gasolina-etanol.csv",delimiter=";")

df5 = pd.read_csv("2021-05-gasolina-etanol-1.csv",delimiter=";")

df6 = pd.read_csv("2021-06-gasolina-etanol.csv",delimiter=";")

df7 = pd.read_csv("2021-07-gasolina-etanol.csv",delimiter=";")

frames = [df2,df3,df4,df5,df6,df7]

df = pd.concat(frames, sort=False)

print(df)

Gravando um DataFrame em disco

Para gravar um dataframe, usa-se a seguinte sintaxe:


df.to_csv("gasolina-etanol.csv",sep=';', encoding='utf-8')

dftotal = pd.read_csv("gasolina-etanol.csv",delimiter=";")

Comprimindo arquivo durante a gravação

Para gravar arquivos que voce processou em um dataframe, use a sintaxe abaixo.

df.to_csv("gasolina-etanol.cvs.gzip", sep=';', index=False,  encoding='utf-8', compression='gzip')

Lendo arquivos comprimidos

No exemplo a cima, gravamos um arquivo comprimido, agora iremos lê-lo.

dftotal = pd.read_csv("gasolina-etanol.cvs.gzip",delimiter=";",compression='gzip')
print(dftotal)

Vendo colunas do DataFrame

Aqui iremos mostrar como visualizar as colunas de um data frame carregado.

import pandas as pd

dftotal = pd.read_csv("gasolina-etanol.cvs.gzip",delimiter=";",compression='gzip')

dftotal.columns

O resultado é como demonstrado.

Index(['Região - Sigla', 'Estado - Sigla', 'Município', 'Revenda',
       'CNPJ da Revenda', 'Nome da Rua', 'Número Rua', 'Complemento', 'Bairro',
       'Cep', 'Produto', 'Data da Coleta', 'Valor de Venda', 'Valor de Compra',
       'Unidade de Medida', 'Bandeira'],
      dtype='object')

Seguindo o exemplo anterior, a visualização dos dados da Região – Sigla, fica conforme apresentado.

dftotal['Região - Sigla']

Apresentando um resultado, conforme indicado:

0          N
1          N
2          N
3          N
4          N
          ..
251415    SE
251416    SE
251417    SE
251418    SE
251419    SE
Name: Região - Sigla, Length: 251420, dtype: object

HEAD de data frame

A função head, mostra o cabeçalho das funções, conforme apresentado a seguir.

dftotal.head()

O exemplo apresenta um resultado conforme apresentado a seguir.

	Região - Sigla	Estado - Sigla	Município	Revenda	CNPJ da Revenda	Nome da Rua	Número Rua	Complemento	Bairro	Cep	Produto	Data da Coleta	Valor de Venda	Valor de Compra	Unidade de Medida	Bandeira
0	N	AC	RIO BRANCO	AUTO POSTO ISAURAO LTDA	04.594.586/0001-10	RUA ISAURA PARENTE	1412	NaN	ESTACAO EXPERIMENTAL	69918-216	GASOLINA ADITIVADA	02/02/2021	5,29	NaN	R$ / litro	PETROBRAS DISTRIBUIDORA S.A.
1	N	AC	RIO BRANCO	AUTO POSTO ISAURAO LTDA	04.594.586/0001-10	RUA ISAURA PARENTE	1412	NaN	ESTACAO EXPERIMENTAL	69918-216	ETANOL	02/02/2021	4,09	NaN	R$ / litro	PETROBRAS DISTRIBUIDORA S.A.
2	N	AC	RIO BRANCO	AUTO POSTO ISAURAO LTDA	04.594.586/0001-10	RUA ISAURA PARENTE	1412	NaN	ESTACAO EXPERIMENTAL	69918-216	GASOLINA	02/02/2021	5,29	NaN	R$ / litro	PETROBRAS DISTRIBUIDORA S.A.
3	N	AC	RIO BRANCO	COMDEPE COMERCIO DE DERIVADOS DE PETROLEO LTDA	01.198.443/0001-00	AVENIDA NACOES UNIDAS	23	NaN	AVIARIO	69909-720	GASOLINA ADITIVADA	02/02/2021	5,29	NaN	R$ / litro	PETROBRAS DISTRIBUIDORA S.A.
4	N	AC	RIO BRANCO	COMDEPE COMERCIO DE DERIVADOS DE PETROLEO LTDA	01.198.443/0001-00	AVENIDA NACOES UNIDAS	23	NaN	AVIARIO	69909-720	GASOLINA	02/02/2021	5,22	NaN	R$ / litro	PETROBRAS DISTRIBUIDORA S.A.

Média de preço do data frame

No exemplo a seguir usaremos uma média do campo Valor de Venda.

dftotal.mean()

#ou apenas em uma coluna

dftotal['Valor de Venda'].mean()

Contagem de elementos de uma coluna do data frame

dftotal['Data da Coleta'].value_counts()

O resultado fica conforme apresentado, a seguir:

02/06/2021    5882
01/06/2021    5230
05/07/2021    3489
09/06/2021    3420
15/06/2021    3306
              ...
25/06/2021      16
21/05/2021      15
07/05/2021      15
18/06/2021      10
26/03/2021       3
Name: Data da Coleta, Length: 150, dtype: int64

Ordenando um Data Frame

dfordenado = dftotal.sort_values(by='Data da Coleta')

dfordenado['Data da Coleta']

Ficando o resultado, conforme apresentado a seguir:


3836      01/02/2021
3173      01/02/2021
3174      01/02/2021
3175      01/02/2021
3176      01/02/2021
             ...
148518    31/05/2021
148517    31/05/2021
148516    31/05/2021
148514    31/05/2021
148524    31/05/2021

As informações acima, estão contidas no repositório do GIT.

https://github.com/marcelomaurin/Analise-de-Preco

Artigos relacionados

Blog Dicas treinamentos
Criando partição remota do SAMBA

Quando voce tem dois computadores, e precisa compartilhar pastas entre eles, existe 2 processos que precisam ser realizados.

Criação de servidor SAMBA

Neste tópico abordarei como criar um servidor samba, onde compartilharemos arquivos entre diversos computadores.

Este tópico esta incompleto, aguarde que em breve estaremos finalizando o mesmo.

Criação de Cliente SAMBA

Neste tópico abordarei como consumir um diretório compartilhado.

Para consumir um diretório compartilhado, é necessário primeiro adicionar o pacote:

apt install cifs-utils

O cifs-utils, é o pacote do protocolo cifs, sem este pacote, voce não conseguirá seguir o próximo passo.

Edite o arquivo fstab, adicionando a seguinte linha, com suas adaptações.

//10.154.20.8/pasta /mnt/pasta cifs uid=0,user=[user],password=[senha],iocharset=utf8

Exemplo de como consumir um volume no samba.

Substitua o ip pelo ip do servidor samba.

Entre na pasta, no diretorio /mnt/, e crie ele, conforme o nome da sua preferencia. Substituindo pasta pelo seu nome.

mkdir /mnt/pasta

Agora para finalizar, e verificar se deu certo, dê o comando de mount.

mount /mnt/pasta

Entre na pasta e verifique se a mesma contem os arquivos da pasta origem.

IA Python
Classes no Python

Não entrarei nos detalhes do que é classe ou objetos, entendo que isso já é de conhecimento do leitor.

Codificando classe em Python:

Arquivo class_prototipo.py

# Classe protótipo
class Class_Prototipo:
    # construtor
    # https://docs.python.org/3/reference/datamodel.html#object.__init__
    def __init__(self,param1):
        # codificacao
        return 0


    def metodo(self):
        # codificacao
        return 0

    # __dict__ serve em qualquer classe
    def printar(self):
        print(self.__dict__)

__init__ método construtor, conforme documentação.

https://holycoders.com/python-dunder-special-methods/

Herança

Arquivo class_filha.py, herda o class_prototipo.

import class_prototipo


class Class_Filha(class_prototipo.Class_Prototipo):
    # construtor
    def __init__(self,param1):
        # codificacao
        self.variavel = param1



    def metodo(self):
        # codificacao
        return self.variavel

    # __dict__ serve em qualquer classe
    def printar(self):
        print(self.__dict__)

Construção dos objetos

Código do programa principal, fonte: main.py


import class_prototipo
import class_filha




filha1 = class_filha.Class_Filha(1)
filha2 = class_filha.Class_Filha(2)
filha3 = class_filha.Class_Filha(3)

filha1.printar()
filha2.printar()
filha3.printar()


Blog Dicas
Apareceu CTRL-D no linux

O Linux é um sistema muito estável, porem as vezes quedas de energia fazem surgir a seguinte mensagem pressione CTRL-D.

Muitos erros podem gerar isso:

  • Serviço com problemas
  • Disco ruim
  • Scripts de inicialização

De forma geral, um usuário inadvertido pressiona CTRL-D e a maquina reboota mostrando o mesmo erro.

Para corrigir este problema é necessário realizar o seguinte procedimento:

1) Entrar a senha do root.

2) Digitar na console:

fsck /dev/sda1

fsck /dev/sda1 ou o volume que esta mostrando com erros.

Para finalizar o processo digite:

exit

Desta forma, a maquina irá dar reboot.

Outros problemas podem gerar este tipo de ocorrência. Porem o desligamento inapropriado, é o mais comum dos problemas

R
Instalando R no raspberry PI

Ensinarei nesse tutorial o procedimento de instalação do R para Raspberry PI.

O R, é uma linguagem de programação estatística, orientada a objeto. Sendo uma linguagem aberta (Open Source) permite a criação de gráficos e analise de dados.

Estarei apresentando o processo de instalação no Raspberry PI e tambem em outras distribuições linux.

Instalação Tradicional

Para instalar o R é bastante simples:

Entre em uma máquina raspberry pi, usando um terminal.

sudo apt-get install r-base r-base-core r-base-dev

Para mostrar que funciona em outras distros realizei também a instalação no ubuntu 21, conforme segue:

Instalação em ubuntu 21, em uma VM

Agora iremos verificar se o mesmo esta rodando, primeiro buscaremos na lista de nossos aplicativos.

R instalado com sucesso

Pronto, o R esta rodando no terminal conforme apresentado na figura abaixo:

Interface console do R

Instalação dos fontes

A instalação do R baseado nos fonte é necessário primeiramente baixar os mesmos.

GIT

O git do repositório fica neste link.

https://github.com/rstudio/rstudio

Iremos instalar em meu servidor raspberry.

Para tanto irei baixar ele através do comando:

git clone https://github.com/rstudio/rstudio

baixa dos fontes

Entre na pasta do projeto rstudio, que foi criado.

Em seguida crie a pasta build

mkdir build

cd build

Agora será necessário, preparar a compilação

cmake .. -DRSTUDIO_TARGET=Server -DCMAKE_BUILD_TYPE=Release

cmake .. -DRSTUDIO_TARGET=Desktop -DRSTUDIO_PACKAGE_BUILD=1

Depois, basta dar

make install

Neovim

Permite editar o R

apt install neovim

Blog
Repositórios no linux

O Linux possui um processo bem complexo de instalação de pacotes.

Básicamente os repositórios são alocados em web services, e baixados quando necessários.

O endereço destes repositórios fica na pasta:

/etc/apt/sources.list.d

Entendendo o sources.list.d

Ao criar um repositório é comum criarmos um arquivo contendo a seguinte sintaxe:

[tipo] [repositorio] [distribuicao] [[componente1] [componente2] … [componenteN]]

TIPO

A primeira referencia, indica o tipo do arquivo, podendo ser de duas formas.

  • deb – responsável pela instalação de componentes
  • deb-src – Responsável pela instalação de fontes dos pacotes.

Repositório

O repositório é o endereço do url que será indicado, para ser pesquisado pelo instalador. Chamamos isso de espelho de repositório.

Existe uma lista mundial:

https://www.debian.org/mirror/list

Distribuição

A distribuição é uma lista de entrega, que tem um nome, ela pode apresentar em 4 estados, ou condições de uso.

  • oldstable – distribuições antigas e fora de uso.
  • stable – distribuições atualmente em uso
  • testing – distribuições de validação
  • unstable – Betas sem garantias.

Para entender mais sobre esses pacotes, o ideal é ler o wiki que foi baseado este artigo:

https://wiki.debian.org/SourcesList

maurinsoft.com.br