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.
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.
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

Pressione o i para inserir texto.
Digite o seguinte texto:
este é um teste
este é outro teste
este é um novo teste

Entre no modo de comando , pressionando ESC.
Em seguida CTRL+W e depois o s.

Entre no modo de comando, pressionando ESC, em seguida digite:
CTRL+W o

Entre no modo de Comando, digitando ESC, em seguida digite:
CTRL +W v

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
Nesta versão realizei:
Foram feitas diversas melhorias nesta aplicação.

Foi atualizado o programa temperatura para versão 0.3, nele foi feito uma pequena correção na tela do registro.
Foi lançado a versão 0.3.
Fonte do projeto:
Monit é um projeto open source, destinado a monitorar sistemas Unix.
O monit permite visualizar serviços de forma fácil e intuitiva.
O site possui documentação bem elaborada, que pode ser visto através do link
https://mmonit.com/monit/documentation/monit.html
https://github.com/arnaudsj/monit
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.

É 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.
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’)){
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.

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.
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.
Python 3.7.1 ou superior
Para instalar o SCons basta rodar o script abaixo:
python -m pip install scons
A instalação tem resultado final como apresentado.

A documentação oficial do SCons pode ser vista em:
https://www.scons.org/doc/production/HTML/scons-user.html#idm46358283013728
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:

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')
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.
Nossa primeira betha, onde os comandos básicos foram desenvolvidos.
Liberada versão Windows no git