Sistema de cadastro online de déficit habitacional revoluciona prefeituras

Publicado em 31/07/2018 | () comentários


Segundo o censo realizado pelo IBGE (Instituto Brasileiro de Geografia e Estatística), o Brasil possui mais de 11,4 milhões de pessoas (6% da população nacional) morando em favelas (denominados aglomerados subnormais pelo IBGE).

Como proposta de ação definitiva, o Governo Federal lançou em 2009 o programa Minha Casa Minha Vida, que passou a angariar recursos para a construção de moradias para famílias de diversas faixas salariais. O estado também possui programas de habitação, como o CDHU (Companhia de Desenvolvimento Habitacional e Urbano do Estado de São Paulo), sendo este o responsável pela construção e o cadastramento das famílias nos empreendimentos.

Apesar dos programas habitacionais, segundo Fernando Chucre (secretário de habitação do estado de São Paulo) , para resolver o problema do déficit habitacional somente em São Paulo, no ritmo atual, levaria mais de 100 anos (UOL). 

O problema se agrava ainda mais devido a falta de gestão e controle sobre o cadastro do déficit habitacional, que possibilita fraudes, beneficiando famílias que não se enquadram nos critérios do programa e ainda permitindo que uma mesma família seja beneficiada mais de uma vez pelo programa. Para impossibilitar o benefício, a família que já foi contemplada pelo programa Minha Casa Minha Vida é cadastrada no sistema CADMUT (Cadastro de Mutuários), porém isso nem sempre acontece devido a burocracia do processo de cadastro. 

O programa Minha Casa Minha Vida

Segundo IBGE (2010), pelo menos 323 municípios brasileiros possuem favelas instaladas. Geralmente estas favelas são cadastradas em um banco de dados municipal coletando-se informações sobre os domicílios, famílias e moradores. As famílias cadastradas fazem parte da lista de prioridades do programa Minha Casa Minha Vida, segundo a faixa da renda familiar.  Segundo a CAIXA ECONÔMICA FEDERAL (órgão que realiza o controle do programa MCMV), as famílias podem se beneficiar com subsídios que arcam com até 90% do imóvel e parcelas de financiamento de até R$ 80 mensais. As famílias precisam se enquadrar nas faixas de renda familiar de R$ 1800 a R$ 7000,00.

O problema do cadastro das famílias

A responsabilidade em indicar as famílias para o benefício da moradia pelo programa MCMV é do município, portanto, a base de cadastro familiar deve imprescindivelmente estar atualizada. Para as famílias que se enquadram na Faixa 1, o prazo para atualização é de 2 em 2 anos, conforme rege a portaria MC 163/2016.

Uma solução online

Com intuito de proporcionar controle, transparência e facilitadores para as prefeituras e munícipes foi lançado o sistema SISHAB (Sistema Inteligente de Habitação) com o primeiro módulo de automatização do processo de cadastro e gestão do programa Minha Casa Minha Vida.

Com o SISHAB é possível que a prefeitura lance o programa em todo município e permita que as próprias famílias se inscrevam online. É possível ainda que a prefeitura ofereça postos de inscrição presencial com atendentes que realizem as inscrições no sistema.

As famílias cadastradas ficam armazenadas em uma base de dados online e possuem um protocolo de inscrição com um código de autenticação único, garantindo a confiabilidade da inscrição.

Quando um novo conjunto habitacional é lançado no município, ele deve ser cadastrado no SISHAB e o processo de classificação das famílias inscritas pode ser realizado, permitindo que elas sejam chamadas para comprovação das informações prestadas na inscrição para a Caixa Econômica Federal.

Ao serem contempladas, as famílias e membros familiares cadastradas no SISHAB são publicadas, impedindo novas inscrições. 

Ainda é possível e opcional, que o município cruze o CPF dos inscritos com a base de dados de outros municípios que utilizam o SISHAB, impedindo fraudes. Conheça todas as vantagens do SISHAB.

Categoria: inovação sistema

Realizando backup automático do banco em servidor de hospedagem linux com PHP

Publicado em 15/05/2018 | () comentários


Servidores de hospedagem Linux possuem, geralmente, um painel de controle CPANEL para administração da hospedagem. Apesar da rotina de backup automático do servidor, que é executada automaticamente e semanalmente pelo serviço contratado, a mesma não garante a recuperação e segurança dos dados, assim como não garante a restauração caso alguma invasão ou problema tenha ocorrido no servidor.

É muito aconselhado que você realize periodicamente o backup do seu banco de dados e mantenha o seu código fonte seguro com controle de versão. Neste tutorial você aprenderá a garantir a segurança de seu banco de dados MySQL em um servidor Linux utilizando um simples código PHP e uma tarefa CRON.

Código PHP para realizar o backup

O código abaixo realiza uma cópia completa de seu banco de dados, gera um arquivo SQL em um diretório no servidor e em seguida compacta ele para economizar espaço. 

<?php

//define os parâmetros de conexão do banco
$dbname = ""; //nome do banco
$dbhost = ""; //geralmente localhost
$dbuser = ""; //usuário do banco
$dbpass = ""; //senha do banco

//define o nome do arquivo e onde será salvo o backup
$filename = date('Ymdhms').$dbname;
$path = "../bkp/";

//cria a pasta onde os backups serão salvos caso ela não exista
if(!is_dir($path)){
	mkdir($path, 0751); //cria a pasta
}

// conectando ao banco
$con = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname) or die(mysql_error());

// gerando um arquivo sql. Como?
// a função fopen, abre um arquivo, que no meu caso, será chamado como: nomedobanco.sql
// note que eu estou concatenando dinamicamente o nome do banco com a extensão .sql.
$back = fopen($path.$filename.".sql","w");

// aqui, listo todas as tabelas daquele banco selecionado acima
$query = mysqli_query($con,"SHOW TABLES");
while($dados = mysqli_fetch_row($query))
{
    $res[] = $dados[0];
}

//Em seguida, vamos, verificar quais são as tabelas daquela base, lista-las, e em um laço for, vamos mostrar cada uma delas, e resgatar as funções descriação da tabela, para serem gravadas no arquivo sql mais adiante.
// resgato cada uma das tabelas, num loop
foreach ($res as $key => $value) {

	$table = $value;
	// usando a função SHOW CREATE TABLE do mysql, exibo as funções de criação da tabela,
	// exportando também isso, para nosso arquivo de backup
	$res2 = mysqli_query($con, "SHOW CREATE TABLE $table");
	// digo que o comando acima deve ser feito em cada uma das tabelas
		while ( $lin = mysqli_fetch_row($res2)){

		// instruções que serão gravadas no arquivo de backup
		fwrite($back,"\n#\n# Criacao da Tabela : $table\n#\n\n");
		fwrite($back,"$lin[1] ;\n\n#\n# Dados a serem incluidos na tabela\n#\n\n");

		//Teremos então de pegar os dados que estão dentro de cada campo de cada tabela, e abri-los também para serem gravados no nosso arquivo de backup.
		// seleciono todos os dados de cada tabela pega no while acima
		// e depois gravo no arquivo .sql, usando comandos de insert
		$res3 = mysqli_query($con, "SELECT * FROM $table");
		while($r=mysqli_fetch_row($res3)){
			$sql="INSERT INTO $table VALUES (";
			//Agora vamos pegar cada dado do campo de cada tabela, e executar tarefas como, quebra de linha, substituição de aspas, espaços em branco, etc. Deixando o arquivo confiável para ser importado em outro banco de dados.
			// este laço irá executar os comandos acima, gerando o arquivo ao final,
			// na função fwrite (gravar um arquivo)
			// este laço também irá substituir as aspas duplas, simples e campos vazios
			// por aspas simples, colocando espaços e quebras de linha ao final de cada registro, etc
			// deixando o arquivo pronto para ser importado em outro banco

			for($j=0; $j<mysqli_num_fields($res3);$j++)
			{
				if(!isset($r[$j]))
				$sql .= " \"\",";
				elseif($r[$j] != "")
				$sql .= " \"".addslashes($r[$j])."\",";
				else
				$sql .= " \"\",";
			}
			$sql = preg_replace("~,$~", "", $sql);
			$sql .= ");\n";
			fwrite($back,$sql);
		}
	}

}

//E finalmente, vamos fechar (internamente, no servidor) o arquivo que geramos, dando um nome para o mesmo, e gerando o arquivo que será então disponibilizado para download.

// fechar o arquivo que foi gravado
fclose($back);

// gerando o arquivo para download, com o nome do banco e extensão sql.
$arquivo = $path.$filename.".sql";

ob_start();

//zipa o arquivo
$zip = new ZipArchive(); 
if( $zip->open( $path.$filename.".zip" , ZipArchive::CREATE )  === true){
    $zip->addFile( $path.$arquivo ) ;
    $zip->close();
}

//deleta o arquivo .sql e mantém somente o zipado
unlink($arquivo);

?>

Criando uma tarefa para executar o backup automático

A tarefa CRON do linux é semelhante ao Tarefas agendadas do Windows Microsoft. Você poderá agendar um dia, horário e periodicidade que um comando é executado automaticamente. Acesse o CPANEL e procure por TRABALHOS CRON (ou "cron", ou "Tarefas cron").


Será mostrada uma janela onde deverá ser agendada a execução de um comando. 

No meu caso deixei programado para que o backup seja realizado todos os dias as 4 horas da manhã, pois considero um bom horário de maneira que este processo não sobrecarregue o servidor enquanto ele está sendo utilizado pelos usuários.

Portanto o agendamento ficou assim:

Minuto: 0 | Hora: 4 | Dia: * | Mês: * | Dia da semana: *

O comando é o caminho onde ficou hospedado o arquivo PHP que realiza o backup com o inicializador php e o parâmetro -f do shell. O caminho deve ser baseado na raiz do servidor:

Exemplo: 

php -f public_html/seu_site/cron/backup.php

Sillicon Valey Conference - grande evento sobre inovação trás gigantes ao Brasil

Publicado em 12/04/2018 | () comentários


StarSe realizará evento de inovação e tecnologia em Maio de 2018. Com palestrantes da Uber, Stanford University, Grabr, NASA, NVidia e da própria StarSe, o evento promete ser imprescindível para amantes da inovação.

Ingressos variam entre R$349 a R$499 por pessoa e as inscrições podem ser realizadas neste link.

Como compartilhar o calendário do Outlook online com o Google Agenda

Publicado em 12/04/2018 | () comentários


Controlar suas tarefas em agendas eletrônicas é um facilitador indispensável. A Microsoft possui um ótimo controle de agenda, o Outlook Calendário, assim como a Google possui um excelente e integrado controle de agendas, o Google Agenda. Caso você precise utilizar os dois recursos, mas queira gerenciar tudo a pertir de uma única agenda, sugerimos utilizar o Google Agenda, que possui integrações mais completas com o Android e Google Now.

Como gerar o link de agenda compartilhada no Outlook Calendar?

O Outlook lançou uma versão BETA com novos recursos e visual moderno, porém, para acessar diversos recursos você precisará acessar a versão antiga do Outlook.

1. Acesse o endereço: https://outlook.live.com/calendar/

2. Desabilite o teste da versão beta desmarcando a opção: Versão beta do Outlook (Caso esta opção não apareça, é porque seu Outlook já está na versão antiga).

3. Clique na engrenagem para acessar as opções e em seguida clique em Opções


4. No menu esquerdo acesse Calendários Compartilhados > Publicação de calendário

5. No campo Selecione um calendário, escolha o calendário que deseja compartilhar e na opção Mostrar disponibilidade, títulos e locais clique em CRIAR

6. O link do seu calendário será compartilhado e será mostrado em dois formatos: HTML e ICS.

7. Copie a URL da opção ICS

8. Acesse o Google Agenda em: https://calendar.google.com

9. Na coluna esquerda, clique em + Adicionar outras agendas e escolha a opção Do URL

10. Na janela que se abrirá, cole o URL copiado do Outlook e clique em ADICIONAR AGENDA

11. Sua agenda do Outlook será mostrada dentro do Google Agenda. Acesse as configurações da agenda e renomeie ela, adicione uma cor e pronto. Todos os eventos do seu Outlook aparecerão no Google Agenda.

Para saber mais sobre Outlook, clique aqui.

Removendo o Composer do menu de contexto do Windows 10

Publicado em 11/04/2018 | () comentários

Composer é uma ferramenta para gerenciamento de dependências para o PHP. Com algumas poucas linhas de configurações você define todas as bibliotecas de terceiros ou mesmo suas que deseja utilizar em seu projeto, porém, se você instalou e não se interessou pelo Composer, após desinstalar você terá uma surpresa: O menu de contexto do composer permanece no Windows 10.


Para remover definitivamente este menu, será necessário excluir um registro do Windows.

1. Acesse a janela de execução do Windows pressionando WINDOWS + R ou navegando pelo menu Iniciar

2. Escreva regedit e execute

3. Navegue até o seguinte caminho:

\HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\

4. Exclua o registro ComposerSetup


Categoria: php windows

Como remover extensão .php e criar URL amigável

Publicado em 04/04/2018 | () comentários

Se você deseja que suas páginas web sejam acessadas sem a extensão .PHP, basta seguir o seguinte procedimento:

1. Abra o bloco de notas e coloque seguinte conteúdo dentro:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
2. Salve o arquivo sem extensão (não utilize a extensão .txt) na raiz do seu site e pronto.

Ao acessar as páginas do seu site sem a extensão .php tudo funcionará normalmente.

Obs.: Este redirecionamento só funciona em servidor Linux.


Categoria: php desenvolvimento

Executando uma instrução INSERT, DELETE ou UPDATE SQL dentro do VBA

Publicado em 27/10/2017 | () comentários

O VBA possui nativo várias funções que executam operações prontas de obtenção (SELECT) de dados, podendo estas funções somar, obter, contar valores de um campo em uma tabela com determinado critério. Estas funções nativas do VBA basicamente são: DLOOKUP, DCOUNT, DSUM, etc, porém, para executar operações de modificação (INSERT, DELETE, UPDATE) nos registros, é necessário criar instruções em SQL agregada ao VBA.

Criando uma instrução SQL dentro do VBA

Para criar a instrução SQL dentro do VBA basta utilizar o comando:

CurrentDb.execute()

Este comando executa uma instrução SQL no banco de dados atual. A maneira correta de se declarar a instrução é declarando uma variável que define o banco desejado (pois é possível executar esta ação em um banco externo) e a função execute

Dim banco As DAO.Database
Set banco = CurrentDb
banco.Execute ("AQUI VAI O SQL")

Dentro do argumento EXECUTE, deverá ser colocado o SQL.

Exemplo prático

No exemplo abaixo iremos realizar um INSERT na tabela cad_pessoa, inserindo nas colunas dataRegistro, ativo e nome. Cada um destes campos conterá um conteúdo diferente e deve ser declarado corretamente dentro do SQL:

CampoTipo de conteúdoOrigem do valor
dataRegistroData (Date)Valor dinâmico, informado através da função Now() do VBA. A data deve ser envolvida com aspas simples e hashtag.
ativoNúmero (Integer)Valor fixo. No caso é o número 1. Números podem ser declarados sem aspas dentro do SQL
nomeTexto (String)

Valor coletado a partir de um campo no formulário. O campo se chama txtNome. Como o campo é texto, deve ser envolvido com aspas simples dentro do SQL.

A instrução SQL ficará da seguinte maneira:

banco.Execute ("INSERT INTO cad_pessoa (dataRegistro, ativo, nome) VALUES  ('#" & Now() & "#', 1, " & Nz(Me.txtNome.value) & ")")

No código acima, o trecho em cinza corresponde ao corpo da declaração da função EXECUTE. Os trechos em azul correspondem ao SQL e os trechos em vermelho são declarações VBA. Concatene o valor de origem VBA com SQL através do símbolo &, lembrando de fechar e abrir com aspas duplas. 

Categoria: access vba sql

Obtendo caminho completo (path) de uma tabela no banco de dados ACCESS

Publicado em 06/10/2017 | () comentários

Considerando que sua aplicação ACCESS está vinculada em apenas um banco de dados (tabelas separadas da aplicação), a função CurrentDb possui um recurso extra para se obter o caminho completo das tabelas. Pegando o caminho de uma tabela, saberemos o caminho de todas.

Coloque a linha de código abaixo dentro de qualquer evento do ACCESS e ela retornará o caminho da tabela. Este caminho será exatamente onde as tabelas da sua aplicação estão salvas.

Obs: substitua o trecho destacado pelo nome de qualquer uma de suas tabelas.

Obtendo caminho completo

A função CurrentDb referencia ao banco atual e a instrução TableDefs referencia a tabela específica do banco atual. Em seguida a instrução Connect retorna o path da tabela

CurrentDb.TableDefs("nome_tabela").Connect

Obtendo parte do caminho

A função Mid retorna parte de uma string. No caso, estamos retornando a partir do caractere 5, contado da esquerda pra direita.

Mid(CurrentDb.TableDefs("nome_tabela").Connect, 10)

Categoria: access vba função

Criando validação de formulário com VBA

Publicado em 26/07/2017 | () comentários

A validação do preenchimento de campos de um formulário no ACCESS utilizando VBA é muito simples.

No evendo AO CLICAR do botão SALVAR, insira o seguinte código:

'validação dos campos
'caso um dos campos não esteja preenchido, a ação para dentro do sub
If Nz(Me.campo1) = "" Then
    MsgBox "Preencha o campo", vbCritical
    Exit Sub
ElseIf Nz(Me.campo2) = "" Then
    MsgBox "Preencha o campo", vbCritical
    Exit Sub
ElseIf Nz(Me.campo3) = "" Then
    MsgBox "Preencha o campo", vbCritical
    Exit Sub
ElseIf Nz(Me.campo4) = "" Then
    MsgBox "Preencha o campo", vbCritical
    Exit Sub
Else

    'salva data e usuario de alteração/registro
   DoCmd.RunCommand acCmdSaveRecord
 
End If

Funcionamento

Ao clicar no botão SALVAR, a validação passa por todos os campos (destaque em azul). Caso um dos campos esteja vazio, a mensagem dentro de MSGBOX é apresentada e o código para de ser executado com EXIT SUB.

Caso nenhum dos campos obrigatórios esteja vazios, o IF passa direto para o ELSE e salva o registro com o comando: DoCmd.RunCommand acCmdSaveRecord


Categoria: vba access