Relógio
Relógio 2.3.11

Nesta nova atualização retiramos uma serie de operações para centralizar mais na função primordial.

O software passa apenas controlar o hardware proposto, sem marcação de ponto, que será implementado em outro software.

Blog
VIM Dividir tela

Uma das coisas mais interessantes no vim é a capacidade de incluir em uma mesma tela, dois fontes e comparar ambos.

Iremos verificar neste artigo como fazer isso.

Chame o vim

vim

Na console crie um artigo, para isso pressione ESC, em seguida, digite:

w teste1234.txt

Criando arquivo teste1234.txt

Pressione o i para inserir texto.

Digite o seguinte texto:

este é um teste

este é outro teste

este é um novo teste

Digitação de um texto no vim

Dividindo em duas janelas Horizontais

Entre no modo de comando , pressionando ESC.

Em seguida CTRL+W e depois o s.

Duas splits horizontalmente

Voltar a uma única janela

Entre no modo de comando, pressionando ESC, em seguida digite:

CTRL+W o

Modo padrão

Dividindo Lateralmente

Entre no modo de Comando, digitando ESC, em seguida digite:

CTRL +W v

Modo vertical

Ajustando tamanho

Para ajustar a largura da janela, pressione

CTRL + w seguido de < ou CTRL + w seguido de >

O < diminui a janela da direita, e o > aumenta.

O = deixa elas da mesma largura.

Os comandos CTRL+W (j e k) navegam verticalmente.

CTRL+w j – indo para cima

CTRL+w k indo para baixo

Referências

https://www.tecmint.com/split-vim-screen/#:~:text=To%20split%20the%20vim%20screen,been%20split%20into%20two%20workspaces.&text=To%20navigate%20to%20the%20bottom,by%20the%20letter%20’j’%20.

ETIQUETAS
Etiqueta versão 1.1

Foram feitas diversas melhorias nesta aplicação.

  • Inclusão de arquivo de gravação de contexto: setmain.pas
  • Criação de tela de configuração config.pas
  • Gravação de registro.pas
  • Correções no banco de dados
  • Correções no dmbase.pas

Tela

Tela de Configuração

Sem categoria
Monit

Monit é um projeto open source, destinado a monitorar sistemas Unix.

O monit permite visualizar serviços de forma fácil e intuitiva.

Site do projeto

https://mmonit.com/monit/

Documentação do Monit

O site possui documentação bem elaborada, que pode ser visto através do link

https://mmonit.com/monit/documentation/monit.html

Wiki do projeto

https://mmonit.com/wiki/

Git do projeto

https://github.com/arnaudsj/monit

Procedimento de Instalação do Ubuntu

O procedimento de instalação a partir do repositório é bem simples:

sudo apt install monit

Ao finalizar o monit, estará instalado, porem sem configuração.

Para isso é necessário editar o arquivo /etc/monitrc/monitrc como administrador.

Incluindo o seguinte fragmento, que ja deve estar comentado no arquivo.

set httpd port 2812 and

use address localhost

allow localhost

allow admin:monit

Após salvar o arquivo é necessário reiniciar o serviço.

systemctrl restart monit

Pronto agora basta entrar no browser e adicionar o url: http://localhost:2812/

O usuário e senha será o que definiu no arquivo monitrc, aqui admin/monit.

Ficando algo como apresentado a seguir.

Incluindo gestão de serviços no Monit

É possível gerenciar serviços através do monitor.

Para isso é necessário adicionar o script do serviço, conforme apresentado no fragmento, no arquivo monitrc.

check process httpd with pidfile /var/run/apache2/apache2.pid

start program = “/usr/bin/systemctl apache2 start”

stop program = “/usr/bin/systemctl apache2 stop”

Conforme apresentado a seguir:

Desta forma é possível configurar diversos serviços em seus equipamentos.

PHP
Web Service utilizando Verbos no PHP

Nesta longa jornada de aprendizado, mMais uma lição aprendida.

No exemplo a seguir, crio um web service, onde utilizo uma unica chamada para acionar todos os verbos do ws.


<?php
/*phpinfo();*/
/*Registra webservice para processamento de jobs*/
ini_set('display_errors', 'Off');
error_reporting(E_ALL);

include "connectdb.php";


function iif($cond, $arg_2, $arg_3)
{
    if($cond){
		return $arg_2;
	} else {
		return $arg_3;
	}
}

function filtro($cond){
	//$cond = str_replace('"',"'");
	return $cond;

}

$typereq = $_SERVER['REQUEST_METHOD'];
//echo $typereq;

if ($typereq==='POST')
{
	//echo "POST";
    // The request is using the POST method
	$data = json_decode(file_get_contents("php://input"));
	if($data){
		$localguid = $dbhandle->real_escape_string($data->guid);
		$idbperguntas = $dbhandle->real_escape_string($data->idbperguntas);
		//echo var_dump(json_decode($foo, true));
	} else {
		$localguid = $dbhandle->real_escape_string($_POST['guid']);
		$idbperguntas = $dbhandle->real_escape_string($_POST['idbperguntas']);
		//echo "3";
	}
	//echo $localguid;
	//echo $idbperguntas;
}

if ($typereq==='PUT')
{
	//echo "PUT";
    // The request is using the POST method
	$data = json_decode(file_get_contents("php://input"));
	if($data){
		$localguid = $dbhandle->real_escape_string($data->guid);
		$idhistorico = $dbhandle->real_escape_string($data->idhistorico);
		$pergunta = $dbhandle->real_escape_string($data->pergunta);
		//echo var_dump(json_decode($foo, true));
	} else {
		$localguid = $dbhandle->real_escape_string($_POST['guid']);
		$idhistorico = $dbhandle->real_escape_string($_POST['idhistorico']);
		$pergunta = $dbhandle->real_escape_string($_POST['pergunta']);
		//echo "3";
	}
	//echo $localguid;
	//echo $idhistorico;
	//echo $pergunta;
	if(($pergunta)&&($pergunta!=''))
	{
		$query = "insert into bperguntas (pergunta) values ('".$pergunta."');";
	}
	//echo $query;
	$rs = $dbhandle->query($query);
}

if ($typereq === 'GET') {
	//echo "GET";
    // The request is using the POST method
	$data = json_decode(file_get_contents("php://input"));
	if($data){
		$localguid = $dbhandle->real_escape_string($data->guid);
		$idbpergunta = $dbhandle->real_escape_string($data->idbpergunta);
	} else {
		$localguid = $dbhandle->real_escape_string($_GET['guid']);
		$idbpergunta = $dbhandle->real_escape_string($_GET['idbpergunta']);
	}
}

if ($typereq === 'DELETE')
{
	//echo $typereq;
	$data = json_decode(file_get_contents("php://input"));
	if($data){
		$localguid = $dbhandle->real_escape_string($data->guid);
		$idbperguntas = $dbhandle->real_escape_string($data->idbperguntas);
	} else {
		$localguid = $dbhandle->real_escape_string($_GET['guid']);
		$idbperguntas = $dbhandle->real_escape_string($_GET['idbperguntas']);
	}
	if ($idbperguntas)
	{
		//$localguid = $data->guid;
		//$idbpergunta = $data->idbpergunta;
		$query = "delete from bperguntas where idbperguntas = ".$idbperguntas.';';
		if($dbhandle->query($query)==TRUE)
		{
			echo ($query);
			$strJSON =  '{"rs":[';
			$strJSON = $strJSON . '{';
			$strJSON = $strJSON . '"IDPergutas":'.$idbperguntas.',';
			$strJSON = $strJSON . '"resposta":"Registro excluido com sucesso!"';
			$strJSON = $strJSON . '}';
			$strJSON = $strJSON . ']}';
			echo($strJSON);
		}
		else
		{
			$strJSON =  '{"rs":[';
			$strJSON = $strJSON . '{';
			$strJSON = $strJSON . '"IDPergutas":'.$idbperguntas.',';
			$strJSON = $strJSON . '"resposta":"'.$dbhandle->error.'"';
			$strJSON = $strJSON . '}';
			$strJSON = $strJSON . ']}';
			echo($strJSON);

		}
	}
	else
	{
		$strJSON =  '{"rs":[';
	    $strJSON = $strJSON . '{';
		$strJSON = $strJSON . '"IDPergutas":'.$idbperguntas.',';
		$strJSON = $strJSON . '"resposta":"Registro não encontrado!"';
		$strJSON = $strJSON . '}';
		$strJSON = $strJSON . ']}';
		echo($strJSON);
	}
}

if($localguid!=GUID)
{
	//echo $localguid;
	//echo "  - - ";
	//echo GUID;
	$strJSON =  '{';
	$strJSON = $strJSON . '"mensagem":"Acesso negado"';
	$strJSON = $strJSON . '}';
	echo $strJSON;
	exit();
}


if (($typereq === 'GET')){
	if(($idbperguntas)&&($idbperguntas!='0'))
	{
		$query = "select idbperguntas, pergunta from bperguntas where (idbpergunta = ".$idbperguntas.");";
	} else {
		$query = "select idbperguntas, pergunta from bperguntas ;";
	}
	$rs = $dbhandle->query($query);

	$cont = 0;
	//echo $query;
	$strJSON =  '{"rs":[';
	//while($row=$rs->fetch_assoc())
	while($row=$rs->fetch_assoc())
	{

		if($cont!=0)
		{
			$strJSON = $strJSON . ',';
		}
		$strJSON = $strJSON . '{';
		$strJSON = $strJSON . '"idbperguntas":'.filtro(iif(($row['idbperguntas']!=''),$row['idbperguntas'],'[vazio]')).',';
		$strJSON = $strJSON . '"pergunta":"'.filtro(iif($row['pergunta']!='',$row['pergunta'],'[vazio]')).'"';
		$strJSON = $strJSON . '}';
		$cont ++;
	}
	$strJSON = $strJSON . ']}';
	if ($cont>0)
	{
		echo($strJSON);
	}
}
?>



Na chamada REQUEST_METHOD, captura qual o verbo do html associado a aquela requisição.

$typereq = $_SERVER[‘REQUEST_METHOD’];

Desta forma podemos criar ações especificas para determinados verbos.

if (($typereq === ‘GET’)||($typereq === ‘POST’)){

MNote2 Mysql Postgres
MNote 2.15

Na versão 2.15, realizamos uma série de ajustes no MQuery.pas, onde refinamos o código das tabelas, e incluímos o nome do database, abaixo das demais informações.

Alinhamento das tabelas

Houve poucas mudanças visuais no código, porem muitas mudanças internas.

Implementação do código de registro.

Foram criados as versões para Plataformas windows, linux e ARM Linux nesta release.

C/C++
SCons – Entenda oque é

SCons é um projeto open source, criado para auxiliar na compilação e montagem de projetos.

Uma definição simples sobre SCons é que é um utilitário de montagem de software (Compilação), criado em python, pode ser utilizado para montar aplicações C/C++ de forma rápida e dinâmica.

Pré requisitos

Python 3.7.1 ou superior

Instalação do SCons

Para instalar o SCons basta rodar o script abaixo:

python -m pip install scons

A instalação tem resultado final como apresentado.

Exemplo de SCons

Documentação

A documentação oficial do SCons pode ser vista em:

https://www.scons.org/doc/production/HTML/scons-user.html#idm46358283013728

Criando um Hello World

Primeiro crie seu programa hello.c, conforme fonte abaixo:

int main()
{
    printf("Olá, mundo!\n");
}

Em seguida crie o arquivo SConstruct, conforme o fonte abaixo:

Program('hello.c')

Agora executa o construtor, conforme o comando abaixo:

scons

A execução fica conforme execução abaixo:

Compilando hello.c com scons

Compilando um programa com multiplos fontes

Para compilar um fonte com multiplos fontes pode-se realizar o procedimento abaixo no SConstruct:

Program('programa', ['prog.c', 'arquivo1.c', 'arquivo2.c'])

ou adicionar os objetos, depois uni-los.

Object('hello.c')

Criando bibliotecas

Para construção de uma biblioteca, segue-se o script no SConstruct:

Library('foo', ['f1.c', 'f2.c', 'f3.c'])

Para biblioteca estática, substitua o nome Library por StaticLibrary e para dinâmica use SharedLibrary.

MNote2
MNote2.14

Nossa primeira betha, onde os comandos básicos foram desenvolvidos.

Mudanças realizadas:

  • Correção no MessageHint – Com alteração da forma de execução e reajustes nas chamadas
  • Tela Folder foi corrigida em diversos bugs
  • frmMNote – função perguntar antes de sair foi corrigida, para não apresentar erro ao sair da tela
  • frmFolder – Criação de pasta implementado.
  • frmFolder – Posicionamento e salvamento da posição da tela após o fechamento.

Instalador

Liberada versão Windows no git

maurinsoft.com.br