Blog Dicas Sem categoria
Documentação de Desenvolvimento

Nos meus anos de desenvolvimento vi muitos projetos. Alguns caótico outros bem definidos.

Vou apresentar aqui uma breve apresentação sobre documentação de desenvolvimento.

Muitas vezes pegamos projetos bem elaborados, com documentação precisa. Que por vezes são encaminhados aos programadores.

Ciclo de desenvolvimento de um sistema

Estes programadores, criam os artefatos desenhados. Onde são testados pelos analistas de testes.

E por fim, passados para o cliente, onde sofrem validações. Sendo ou não modificados.

Por fim, no ciclo final, a documentação é gerada para o Cliente, orientando como realizar.

Neste ciclo de projeto bem elaborado e muitas vezes idealizado, documentos são criados na fase de fazer, e por fim na etapa de entrega.

Percebemos que existem 2 documentos criados:

  • Documentação de Projeto – O que precisa, elencando os artefatos necessários para a entrega.
  • Manual de Usuário – O manual, contem a experiência de uso. Diz como realizar, é básicamente uma cópia da documentação do projeto, após acabado.

Perceba, caro leitor, que temos, duas etapas, onde criamos documentação para os clientes, porem o conhecimento do que foi feito, continua na mão de quem fez.

De fato, muitos podem chegar a conclusão equivocada, que é obrigação de quem programa, entender o código.

Para contestar essa afirmação, vou apresentar duas alusões:

Imaginemos que lemos um livro de Shakespeare, como por exemplo macbeth Espera-se que após esse ponto, tenhamos o entendimento da obra.

E possamos responder a qualquer questão, correto?

Bom olhando alguns sites:

https://www.britishcouncil.org.br/atividades/shakespeare-lives/escolas/dicas/macbeth

https://www.conjur.com.br/2011-jul-31/embargos-culturais-licoes-historia-direito-macbeth

https://institutoling.org.br/explore/licoes-sobre-ambicao-e-poder-em-macbeth

O que é a leitura profunda e por que ela faz bem para o cérebro – COGNOS  SPACE

Perceba que de fato, a leitura do livro, pode não trazer a visão do detalhe, que passará desapercebido, em uma leitura plana.

O mesmo acontece com o programador, muitas vezes lemos trechos de código, não nos atentando para detalhes ou melindres do programador original.

Tal ardil só será revelado, após maior exposição ao conteúdo da obra.

Perceba que documentação, não tem a obrigação de explicar o óbvio, mas apresentar as verdades ocultas. Que seriam reveladas, apenas uma leitura mais densa, envolvendo e consumindo horas de trabalho exaustivo.

Qual objetivo da documentação do programador

Após a explanação anterior, percebemos, que a documentação técnica visa apresentar detalhes ou dicas que de fato fugiriam da atenção.

Documentando e apresentando de forma clara e direta.

Formas de fazer isso:

HOWTO

A primeira forma de fazer isso, é a criação de um roteiro, onde por exemplo elaboramos uma “receita de bolo” da elaboração da atividade de uma forma genérica. O intuíto deste trabalho é conduzir o programador novato na realização da atividade, evitando que este incaia em caminhos poucos produtivos.

Gestão de documentação técnica - BGF Consultoria

Documentação Técnica

Em sistemas complexos, a documentação técnica exige que todo o código passe por uma revisão, apresentando detalhes de informações de entrada e resultados (saída).

De forma geral, a documentação técnica custa caro, pois precisa ser revisionada, a cada novo lançamento.

Provas e treinamento

Treinar pessoas é qualificar estas para realização das atividades. O processo de treinamento exige que apresentemos o problema, entreguemos a solução e testemos o conhecimento.

Hoje existem diversos softwares destinados a este fim, entre eles o moodle. Que permite que utilizemos recursos multi mídia para treinar pessoas ou grupos. Testando a qualidade dos mesmos.

Problemas relacionados

Prazo x Qualidade

Muitas vezes para cumprir prazos temos que simplificar ou omitir certas etapas do processo produtivo. De forma geral, a primeira coisa que se tira é a documentação técnica, a justificativa é bem simples. Documentação técnica não é para o usuário, é para a própria empresa. Sendo assim, o usuário ou o cliente não sentirá falta.

A omissão deste muitas vezes justificada, tem consenquências a médio e longo prazo.

De fato um sistema complexo muitas vezes exige um volume enorme de conhecimento prévio, que exige um esforço na obtenção por parte do programador. Muitas vezes esse esforço é utilizado em outro momento como moeda de barganha, para negociação salarial.

A diferença de Ser e Ter

A grande maioria das empresas de software detem o direito legal do produto, mas de fato não os tem.

A bem da verdade ser da empresa, não necessáriamente diz que a empresa o têm.

Muitas vezes, a empresa, precisa de pessoas especificas, para modificar pontos chave. Quando um produto exige que um individuo especifico o modifique, de fato a empresa é refem de um individuo. Sendo de fato o detentor do direito, mas não tendo a capacidade de gerir suas mudanças.

Sobre este argumento, que percebemos a necessidade da gestão interna.

Como fazer

Estepe com pneu igual aos demais pode virar obrigação

Programador Estépe – No seu carro, quando o pneu fura, vc tem um segundo pneu, pois sabe se perder o primeiro, ficará no meio da estrada sem conseguir seguir. O mesmo acontece com seu produto. Muitas vezes centralizamos tudo em uma pessoa, pois ele é eficiente, barato, e resolve o meu problema. Dai o empresário pensa, bom vou deixar na mão dele. Ele resolve isso, eu fico com o negócio, os clientes e o que espero do produto. Um belo dia, o seu funcionário vai embora, morre ou aposenta. Se voce não tiver um plano B, ficará a mercê do colaborador.

Muitas vezes manter um programador redundante é complicado, pois exige um investimento alto.

Rotatividade de funções – A rotatividade de funções é quando em uma equipe (squad) temos pessoas que fazem a mesma coisa. Alternando entre elas.

De forma geral, a rotatividade não funciona, na prática o PO (product Owner) sempre elegerá o programador que sabidamente tem melhor performace para uma determinada especialidade. Criando um especialista. De fato, mesmo com a pseudo rotatividade, sempre haverá individuos que sabem mais que outros, em um sistema rotativo. Esta rotatividade tem um ponto fraco, juntamente com o programador estépe. Conta com o conhecimento das pessoas. Não mantendo este na empresa.

Vídeos e Treinamentos – Durante o ciclo de treinamento, muitas vezes apresentamos processos para recrutas (programadores junior) que desenvolvem a capacidade de realizar o processo. Porem tal treinamento é perdido no momento da saída do recruta. Uma forma de manter, é não gerar o treinamento diretamente, mas sim indireto, exigindo que o Analista Sr, grave um vídeo que será depois passado ao recruta. Onde este questionará suas duvidas, que tambem serão armazenadas em um Howto.

De forma geral, a apresentação audio visual, é sempre melhor que o treinamento presencial. Pois permite primeiro armazenamento e depois correções evolutivas.

Tambem cria ou propicia a faze do aprendizado, permitindo que duvidas comuns sejam feitas e respondidas de forma coletiva.

Auto treinamento – O Ciclo de auto treinamento, exige que disponhamos de tempo produtivo, para capacitar da melhor maneira o colaborador.

Como realizar, a bem da verdade existem duas maneiras de aplicar isso:

  1. Dentro do ciclo produtivo, neste processo, o colaborador durante o ciclo de trabalho, realiza pequenos treinamentos, onde se capacitará para execução de atividades extras.
  2. Fora do ciclo produtivo, a capacitação fora do ciclo produtivo, deve ser qualificativa, onde o colaborador ganha de forma indireta, através de melhora salarial ou premiações.

Espero que a apresentação destas dicas tenham inspirado voces nas melhores práticas de desenvolvimento.

PS: Apenas para mostrar o óbvio, em um dado momento, disse que iria apresentar 2 alusões, e apresentei apenas 1. Mas voce não percebeu, a segunda alusão é voce. Pois de fato, não se ateve a esse detalhe. Agora imagina o programador.

Boa sorte.

Blog Dicas Sem categoria
Conversão padrão Windows/Unix/MAC

Uma boa ferramenta para conversão de arquivos texto, é o DOS2UNIX.

Esta ferramenta permite a conversão de arquivos nos formatos nativos do sistema operacional.

Instalação do Pacote

apt install dos2unix

Pacote dos2unix

Instalando este pacote, voce terá alem do dos2unix, tambem os comandos dos2mac , unix2mac, unix2dos.

Para converter no siga a sintaxe:

dos2unix [origem] [destino]

Sintaxe de conversão do dos2unix

Artigo relacionado

http://maurinsoft.com.br/index.php/2022/03/01/convertendo-arquivo-formato-unix-com-vi/
Blog Dicas GIT
GITHUB chave SSH

O GITHUB deixou de aceitar usuário e senha nos projetos, exigindo o uso da chave de criptografia SSH.

Irei mostrar o passo a passo, necessário para configurar o git em sua maquina linux.

Passo 1a – Crie uma chave no Linux Ubuntu

Crie a chave com o usuário que irá utilizar o git, lembre-se cada usuário necessita de uma chave.

ssh-keygen -t rsa -b 4096 -C “seuemail@exemplo.com”

Cria a chave ssh publica e privada

Não é necessário digitar senha, basta seguir com enter a cada pergunta.

Na pasta do usuario, existe uma pasta:

cd ~/.ssh/

lista a chave publica e privada

Agora, vc precisará publicar a chave, para isso, dê o seguinte comando:

cat id_rsa.pub

Copia a chave publica

Ele permite copiar a chave publica, incluindo no git.

Passo 1b – Crie a chave publica no Windows

Entre no seu computador, e digite CMD.

Se for o windows 10, digite:

ssh-keygen -t ed25519 -C “seuemail@dominio_email”

Cria a chave ssh publica e privada

Deve ser mostrado algo como apresentado abaixo:

Na pasta do usuário, no meu é c:\User\marce\ existe uma pasta .ssh, entre nesssa pasta e edite o arquivo id_ed25519.pub

Abra o arquivo id_es25519.pub, com qualquer editor de texto, e copie o conteudo.

Passo2 – Incluindo no GITHUB

Copie todo o texto, e vá para o github.com, entre na sua conta.

Agora será necessário selecionar SSH and GPG keys, conforme figura abaixo:

Click, no botão New SSH key, conforme figura abaixo:

Agora será necessário copiar o conteudo da chave.

Lembre-se a chave vc copiou no linux , com o comando cat.

Adicione no github, incluindo o nome do computador (titulo) que será instalado a chave.

A descrição do computador, ajuda posteriormente, pois pode haver mais de uma chave, para mais de um computador.

Passo 3 – Entrando no Projeto como SSH

Entre no git, e copie o caminho do seu projeto

Lembre-se que o ideal é clonar via ssh

git clone git@github.com:marcelomaurin/SSC.git

git por ssh

Pronto, voce incluiu o ssh, agora consegue realizar todas as operações no git usando sua chave SSH.

Blog C/C++ Dicas Lazarus Shell Script SSC
Criando Pacote de Instalador Debian

Neste artigo apresento como criar o pacote de instalador do Debian, já com interface gráfica.

Chamando o aplicativo através do menu.

Montando o pacote do SSC

Para criar o instalador do SSC, siga os passos abaixo:

  1. Primeiro compile seu binário, no alvo pretendido.
  2. Chame o script ./buildlinux.sh
  3. O pacote estará na pasta ./lin_bin
  4. Instale o pacote para testar rodando:

apt install ssc2_[versao]_[plataforma].deb

Dicas GIT pacotes
Convertendo arquivo formato UNIX com VI’

As vezes o GIT ou mesmo outro problema, modifica o formato do mapa de caracteres.

Impossibilitando que o script rode.

Para resolver isso de forma simples.

Entre no arquivo que quer converter para o padrão unix, e digite no vim.

:set fileformat=unix

Agora grave o arquivo, e verifique que o map code, foi corrigido.

Artigo semelhante

http://maurinsoft.com.br/index.php/2022/03/02/conversao-padrao-windows-unix-mac/
Delphi Lazarus SSC
Novidades no SSC 2.3

O SSC 2.3 veio cheio de novidades, agora a interface grava o contexto posicional da tela e de algumas informações.

Melhorias da versão 2.3 do software SSC

Este trabalho, vem melhorando o software dando mais opções para o mesmo.

Gravação de algumas parametrizações ao final da execução

Modificações da Versão

  • Criação dinâmica do arquivo ssc.cfg
  • Criação do fonte funcoes.pas
  • Criação do fonte setssc.pas
  • Modificação do fonte main.pas e main.lfm

SSC
Novidades no SSC

Implementamos no SSC o servidor de conexão TCP, com ele é possível conectar via TCP clientes, e fazer a comunicação direta do dispositivo Serial ou USB/Serial.

Esta melhoria, permite acionar dispositivos através de comunicação Serial.

Esta feature já esta embarcada na versão 2.2 do SSC.

C/C++ CUDA IA
CUDA – Trabalhando com Memória da placa de vídeo

Neste artigo irei apresentar como trabalhar com a memória da placa de vídeo, na lib CUDA da NVIDIA.

GIT

O exemplo deste projeto pode ser visto no git.

https://github.com/marcelomaurin/CUDA2

Código do projeto

Veremos a seguir o projeto do código, onde em seguida irei comentar o mesmo:


#include <stdio.h>
#include "cuda_runtime.h"

#define TAM_MAP 30

//Kernel
__global__
void projecao_x(int *p_param){
	printf("video: %d\n",*p_param);
	*p_param += 5; /*muda valor*/
}


int main(){
	int valor;
        valor = 10; /* declaração da variavel alocada no pc*/
	cudaDeviceReset();

	int *d_param; /*Declaracao da variavel alocado na placa de video*/


	/*alocação de variaveis da placa de vídeos*/
	cudaMalloc((void**)&d_param,sizeof(int));         /*aloca na cuda o tamanho de 1 inteiro*/


	cudaMemcpy( d_param, &valor,
                              sizeof(int),
	                      cudaMemcpyHostToDevice);

	printf("Chamando hello!\n");
	projecao_x << <1, 1>> >(d_param); /*Criação funcao do processador*/
	cudaDeviceSynchronize();
	cudaMemcpy( &valor, d_param,
                             sizeof(int),
                             cudaMemcpyDeviceToHost);
	printf("pc:%d\n",valor);
	cudaFree(d_param);
	return 0;
}

O que faz o programa

O Programa acima cria uma variavel na placa de vídeo chamada d_param, que é atribuído valor 10 no Desktop.

Depois ao ser chamado a thread, e já na placa de vídeo, seu valor é modificado.

Por fim é transferida para a memória do desktop, e em seguida apresentada no desktop.

Funções importantes

cudaMalloc – É responsável pela criação da variavel na placa de vídeo.

cudaMemcpy – É responsável por copiar os dados de um espaço para outro. Nos dois sentidos DESKTOP -> VIDEO, e VIDEO -> Desktop.

Bom pessoal, espero que tenham gostado deste artigo.

Os próximos espero serem mais emocionantes.

Vida longa e prospera a todos.

Delphi Lazarus MNote2 Mysql pacotes Programação Yocto Project
Exemplo de Pacote debian – Parte 1

O objetivo deste artigo é demonstrar o uso prático de pacotes do linux.

Escrevi alguns artigos, sobre o desenvolvimento de pacotes.

    Inclusive já desenvolvi o MNOTE2, que é um bloco de notas simplificado. Sendo que este projeto, o MNote2, já possui um pacote em seu código.

    O MNote 2 pode ser visto no meu git:

    https://github.com/marcelomaurin/MNote2

    Neste artigo, e nos demais, irei continuar o trabalho apresentado no MNote2, gerando um pacote para um projeto em Lazarus, este projeto consiste em um sistema Cliente/Server, que consome um banco de dados Mysql.

    Este artigo tem relação tambem sobre outro conjunto de artigos:

      A instalação deste tipo de aplicação demanda certo trabalho, que irei abordar durante o ciclo de posts, aqui apresentados.

      Ao fim dos artigoa, pretendo se houver tempo, desenvolver uma imagem iso, usando yocto project, consumindo este pacote. E por fim criando um instalador completo com uma imagem de CD para distribuição. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

      Para apresentar o trabalho completo, estarei incluindo tudo no git:

      GIT do Exemplo

      https://github.com/marcelomaurin/cliPessoa

      Este é um conjunto de posts, que irei apresentar.

      Serão vários, e por um período longo. Espero que gostem.

      Mysql PHP Programação Python
      Mysql com C/Lazarus/Python/PHP/R – Parte 4

      Neste penultimo artigo, mostrarei como ler JSON com mysql.

      Para não me repetir, pois já apresentei isso anteriormente, no artigo abaixo:

      http://maurinsoft.com.br/index.php/2019/03/09/usar-o-mysql-com-python/
      Usando mysql diretamente com python.

      Resolvi fazer diferente.

      No artigo de PHP, mostrei um web service, que consumi com AngularJS/BootStrap:

      http://maurinsoft.com.br/index.php/2022/02/04/mysql-com-c-lazarus-python-php-r-parte-3/

      Agora neste artigo, vou consumir tambem o web service.

      GIT do Projeto

      https://github.com/marcelomaurin/PythonJS

      Exemplo do Código

      Client WebService

      Neste exemplo, consumimos o web service, onde recebemos o JSON.

      import requests
      import codecs
      import json
      
      api_url = "http://maurinsoft.com.br/exemplos/phpmysql/ws/Pessoa.php"
      response = requests.get(api_url)
      response.headers['content-type']
      #response.encoding
      #response.text
      #print(response.text)
      #response.text.encode('utf-8-sig','ignore')
      #print(response);
      info = ""
      if(response.text!={}):
          dados = codecs.decode(response.text.encode(),'utf-8-sig')
          js = json.loads(dados)
          print(js)
          #print(js.count())
      

      Usando PANDAS

      Neste segundo exemplo, podemos verificar uma ligeira diferença, pois estamos convertendo os dados para Pandas. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

      from urllib.request import urlopen
      import json
      import pandas as pd
      
      response = urlopen("http://maurinsoft.com.br/exemplos/phpmysql/ws/Pessoa.php")
      json_data = response.read().decode('utf-8-sig', 'replace')
      
      d = json.loads(json_data)
      df = pd.json_normalize(d[0])
      
      print(df)

      Espero ter auxiliado os amigos, neste interessante artigo.

      Artigos relacionados

        pt_BRPortuguese