Validação de Form com JQuery

Question: Sou iniciante em jQuery e estou com dificuldade em fazer uma validação de formulário com jQuery para o CRM de uma igreja que é o seguinte:
Tenho um código HTML que faz parte de um CRM que eu estou desenvolvendo. Nesse HTML eu tenho um formulário com apenas uma linha e várias colunas, porém, existe a opção de adicionar mais linhas com o botão que fica logo ao lado das colunas. Até esse ponto, tudo OK.
O problema acontece na hora em que eu vou fazer a validação desses campos para poder gerar um arquivo bean do próprio CRM seguindo os passos para que a validação dê certo. Aconteceria da seguinte forma:

Validar se o primeiro campo do form está preenchido (pois esse
possui um id). Caso estiver, ele segue percorrendo as demais
colunas e salvando em algum array ou coisa do tipo em jQuery.
Se houver mais linhas, ele seguirá para a próxima linha e repetirá o
processo (fiz um foreach, mas não sei se está certo) e esse
processo vai acontecer até a última linha, onde, caso a última linha
estiver totalmente sem preenchimento, ela será ignorada e será gerado
o bean depois.
A outra validação é que se no meio do form a primeira coluna, em
qualquer linha, que estiver vazia, ele irá emitir uma mensagem de
erro dizendo que o campo é obrigatório.

Abaixo vou deixar o código que fiz até o momento para ficar melhor o entendimento:

function addRow(element) {
    var ln = $('#countLine').val();
    ln++;

    $linha = $('#tabela tr:last').clone();
    $('input', $linha).val('');
    $('div.yui-ac-container', $linha).attr('id', 'EditView_Membro_results' + ln);
    $('ul.list-data', $linha).attr('id', 'UserAutoCompleteContent' + ln);

    $('.membro_id', $linha).attr('id', 'membro_id' + ln);
    $('.dizimo_id', $linha).attr('id', 'dizimo_id' + ln);
    $('.oferta_id', $linha).attr('id', 'oferta_id' + ln);
    $('.oferta_especial_id', $linha).attr('id', 'oferta_especial_id' + ln);
    $('.missoes_id', $linha).attr('id', 'missoes_id' + ln);
    $('.cesta_basica_id', $linha).attr('id', 'cesta_basica_id' + ln);
    $('.ana_nazareno_id', $linha).attr('id', 'ana_nazareno_id' + ln);
    $('.outros_id', $linha).attr('id', 'outros_id' + ln);

    $('.membro_autocomplete', $linha).attr('id', 'Membro' + ln);
    $('.dizimo_autocomplete', $linha).attr('id', 'Dizimo' + ln);
    $('.oferta_autocomplete', $linha).attr('id', 'Oferta' + ln);
    $('.oferta_especial_autocomplete', $linha).attr('id', 'OfertaEspecial' + ln);
    $('.missoes_autocomplete', $linha).attr('id', 'Missoes' + ln);
    $('.cesta_basica_autocomplete', $linha).attr('id', 'CestaBasica' + ln);
    $('.ana_nazareno_autocomplete', $linha).attr('id', 'AnaNazareno' + ln);
    $('.outros_autocomplete', $linha).attr('id', 'Outros' + ln);

    $('#tabela tr:last').after($linha);
    bind();

    $(element).attr('onclick', 'DeleteRow(this)');
    $(element).html('Remover');

    $('#countLine').val(ln);
}

function DeleteRow(element)
{
    var row = $(element).closest('tr');
    row.remove();
}

//adiciona classe css quando for feito o click
$(document).ready(function(){
    $("button").click(function(){
        $("td").addClass("tabe");
    });
});

function HideDivsOnBlur()
{
    $(".yui-ac-content").hide();
    $(".yui-ac-hd").hide();
}

function autoCompleteMembro(nomeMembro, idInput, divResults)
{
 var parametro = $(nomeMembro).val();
 var id_input = nomeMembro.attr('id');
 var row = id_input.match(/\d+/)[0];

 var dados = new Object();
 dados.form = "EditView";
 dados.method = "query";
 dados.modules = ["Accounts"];
 dados.field_list = ["name", "id"];
 dados.populate_list = ["account_name", "account_id_c"];
 dados.required_list = ["account_id_c"];
 dados.conditions = [{"name" : "name", "op" : "like_custom", "end" : "%", "value" : ""}];
 dados.limit = "10";
 dados.no_match_text = "Nada foi Encontrado";

 var dadosJson = JSON.stringify(dados);

 var dataJson = { to_pdf : "true", module : "Home", action : "quicksearchQuery", data : dadosJson, query : parametro}
 $.ajax({
 url: "index.php",
 data: dataJson,
 type: "post",
 success: function(resp){
  console.log(resp);
  var resposta = $.parseJSON(resp);
  if(resposta.fields.length > 0)
  {
   // remove a lista buscada apos selecionar o membro
   $("#UserAutoCompleteContent"+ row + " li").remove();

   $("#EditView_Membro_results"+ row + " .yui-ac-content").show();
   $("#EditView_Membro_results"+ row + " .yui-ac-hd").show();

   $(divResults).show();
   $(divResults).children(0).show();
   $(divResults).children(0).css("z-index", "10000");
   $(divResults).children(1).show();

   $(resposta.fields).each(function(index, item){
                        $("#UserAutoCompleteContent"+row).append(
                                '
'
                                + item.name.toUpperCase() + '
');

   });
   $("#EditView_Membro_results"+row+" li").hover(
                function(){
                    $(this).css("background-color", "#426FD9")
                    $(this).css("color", "#fff")
                },
                function(){
                    $(this).css("background-color", "#fff")
                    $(this).css("color", "#000")
                });
            }
        }
    });
}

function changeAssignedUserId(Id, Name, MembroIdInputId, ProdNomeInputId, UlId)
{
    console.log(MembroIdInputId);
    $("#" + MembroIdInputId).val(Id);
    $("#" + ProdNomeInputId).val(Name);

    // remove a lista buscada apos selecionar o item
    $("#" + UlId + " li").remove();

    // esconde o bloco do resultado da busca
    $(".yui-ac-content").hide();
    $(".yui-ac-hd").hide();
}

function bind()
{
    $('.membro_autocomplete').unbind('keyup').keyup(function(){
 $inputMembro = $(this).closest('input');
 $inputMembroId = $(this).closest('td').find("input[class='membro_id']");
 $divResultados = $(this).closest('td').find("input[class='yui-ac-container']");

 autoCompleteMembro($inputMembro, $inputMembroId, $divResultados);
    });
}
bind();

function sendToPhp()
{
    /* Verificar validação */
    var linha  = [];
    $('#tabela tr').each(function(){

        $(this).find("input[type=text]").each(function() {
//            if($('#Membro0').val() !== ''){
////                $('#Membro0').closest("td");
//                console.log($('#Membro0').val());
//                return true;
//            }
//            else{
//                console.log('Chegou aqui Valor Nulo');
//                return false;
//            }
            linha = [ $(this).val() ];
            console.log(linha)
        });

        // loop no array linha

    });
//        if($('.membro_id').val() !== null)
//        {
//            //foreach verificando se o proximo de cada posição na coluna possui valor
//            //setar com false e em caso de valor mudar para true
//        }
//        else if($('.membro_id').val() === null)
//        {
//            //foreach verificando se o proximo de cada posição na coluna possui valor
//            //setar com false e em caso de valor mudar para true
//        }
}

function check()
{
    var ok = 1;
    $('#Membro0').blur(function()
        {
            if($(this).val().length === 0)
            {
                ok = 0; $(this).css('border-color','red');
                alert('Campo MEMBRO deve ser preenchido');
            }
    else{ $(this).css('border-color',''); }
    });
}

            <form id="formRelatorio" method="POST" action="index.php?module=culto_relatorio_dizimo&action=gravaRelatorio">
                <input type="hidden" name="module" value="culto_relatorio_dizimo">
                <input type="hidden" name="record" value="">
                <input type="hidden" id="action" name="gravaRelatorio">
                <input type="hidden" name="return_module" value="culto_relatorio_dizimo">
                <input type="hidden" name="return_action" value="relatorioDizimo">

                        Membro
                        Dizimo
                        Oferta
                        Oferta Especial
                        Missões
                        Cesta Básica
                        ANA Nazareno
                        Outros

                           <input id="membro_id0" class="membro_id" type="hidden" value="">
                           <input id="Membro0" class="larg membro_autocomplete" type="text">

                            <input id="dizimo_id0" class="dizimo_id" type="hidden" value="">
                            <input id="Dizimo0" class="larg dizimo_autocomplete" type="text">

                            <input id="oferta_id0" class="oferta_id" type="hidden" value="">
                            <input id="Oferta0" class="larg oferta_autocomplete" type="text">

                            <input id="oferta_especial_id0" class="oferta_especial_id" type="hidden" value="">
                            <input id="OfertaEspecial0" class="larg oferta_especial_autocomplete" type="text">

                            <input id="missoes_id0" class="missoes_id" type="hidden" value="">
                            <input id="Missoes0" class="larg missoes_autocomplete" type="text">

                            <input id="cesta_basica_id0" class="cesta_basica_id" type="hidden" value="">
                            <input id="CestaBasica0" class="larg cesta_basica_autocomplete" type="text">

                            <input id="ana_nazareno_id0" class="ana_nazareno_id" type="hidden" value="">
                            <input id="AnaNazareno0" class="larg ana_nazareno_autocomplete" type="text">

                            <input id="outros_id0" class="outros_id" type="hidden" value="">
                            <input id="Outros0" class="larg outros_autocomplete" type="text">

                         <button type="button" onclick="addRow(this)">Adicionar</button>

            </form>

                <button type="button" class="buton" id="sendBtnEnviar" onclick="sendToPhp()">Inserir</button>
                <input id="countLine" class="countLine" type="hidden" value="1">

Comment: O famoso `console.log()` traz algum resultado?
Comment: Para os campos obrigatórios você pode usar o "required" do HTML5. Para percorrer os campos e validar os valores, pode usar o .each() do jQuery:

$( "#tabela input" ).each(function( ) {
  var texto = $.trim($(this).val());
});

trim remove os espaços em branco no início e fim.
Comment: sim ele traz o nome do membro no primeiro campo
Comment: Sobre a função que você usa ao clicar o botão de envio (claro, isso não é usado, sendo que no próprio jQuery pode capturar o evento do botão [como você é iniciante, é bom dar uma olhada]), onde você declarou a variável `$linha` ?
Comment: verei isso sim, a variável $linha esta declarada logo no inicio da function addRow
Comment: Para a validação, achei isso aqui (ainda não testei): https://jqueryvalidation.org/documentation/
Comment: @user53602 qual nome da igreja? Ainda precisa de ajuda ?
Answer: Segue a validação com resultado final em JSON jsonResultado:

function addRow(element) {
    var ln = $('#countLine').val();
    ln++;

    $linha = $('#tabela tr:last').clone();
    $('input', $linha).val('');
    $('div.yui-ac-container', $linha).attr('id', 'EditView_Membro_results' + ln);
    $('ul.list-data', $linha).attr('id', 'UserAutoCompleteContent' + ln);

    $('.membro_id', $linha).attr('id', 'membro_id' + ln);
    $('.dizimo_id', $linha).attr('id', 'dizimo_id' + ln);
    $('.oferta_id', $linha).attr('id', 'oferta_id' + ln);
    $('.oferta_especial_id', $linha).attr('id', 'oferta_especial_id' + ln);
    $('.missoes_id', $linha).attr('id', 'missoes_id' + ln);
    $('.cesta_basica_id', $linha).attr('id', 'cesta_basica_id' + ln);
    $('.ana_nazareno_id', $linha).attr('id', 'ana_nazareno_id' + ln);
    $('.outros_id', $linha).attr('id', 'outros_id' + ln);

    $('.membro_autocomplete', $linha).attr('id', 'Membro' + ln);
    $('.dizimo_autocomplete', $linha).attr('id', 'Dizimo' + ln);
    $('.oferta_autocomplete', $linha).attr('id', 'Oferta' + ln);
    $('.oferta_especial_autocomplete', $linha).attr('id', 'OfertaEspecial' + ln);
    $('.missoes_autocomplete', $linha).attr('id', 'Missoes' + ln);
    $('.cesta_basica_autocomplete', $linha).attr('id', 'CestaBasica' + ln);
    $('.ana_nazareno_autocomplete', $linha).attr('id', 'AnaNazareno' + ln);
    $('.outros_autocomplete', $linha).attr('id', 'Outros' + ln);

    $('#tabela tr:last').after($linha);
    bind();

    $(element).attr('onclick', 'DeleteRow(this)');
    $(element).html('Remover');

    $('#countLine').val(ln);
}

function DeleteRow(element)
{
    var row = $(element).closest('tr');
    row.remove();
}

//adiciona classe css quando for feito o click
$(document).ready(function(){
    $("button").click(function(){
        $("td").addClass("tabe");
    });
});

function HideDivsOnBlur()
{
    $(".yui-ac-content").hide();
    $(".yui-ac-hd").hide();
}

function autoCompleteMembro(nomeMembro, idInput, divResults)
{
 var parametro = $(nomeMembro).val();
 var id_input = nomeMembro.attr('id');
 var row = id_input.match(/\d+/)[0];

 var dados = new Object();
 dados.form = "EditView";
 dados.method = "query";
 dados.modules = ["Accounts"];
 dados.field_list = ["name", "id"];
 dados.populate_list = ["account_name", "account_id_c"];
 dados.required_list = ["account_id_c"];
 dados.conditions = [{"name" : "name", "op" : "like_custom", "end" : "%", "value" : ""}];
 dados.limit = "10";
 dados.no_match_text = "Nada foi Encontrado";

 var dadosJson = JSON.stringify(dados);

 var dataJson = { to_pdf : "true", module : "Home", action : "quicksearchQuery", data : dadosJson, query : parametro}
 $.ajax({
 url: "index.php",
 data: dataJson,
 type: "post",
 success: function(resp){
  console.log(resp);
  var resposta = $.parseJSON(resp);
  if(resposta.fields.length > 0)
  {
   // remove a lista buscada apos selecionar o membro
   $("#UserAutoCompleteContent"+ row + " li").remove();

   $("#EditView_Membro_results"+ row + " .yui-ac-content").show();
   $("#EditView_Membro_results"+ row + " .yui-ac-hd").show();

   $(divResults).show();
   $(divResults).children(0).show();
   $(divResults).children(0).css("z-index", "10000");
   $(divResults).children(1).show();

   $(resposta.fields).each(function(index, item){
                        $("#UserAutoCompleteContent"+row).append(
                                '
'
                                + item.name.toUpperCase() + '
');

   });
   $("#EditView_Membro_results"+row+" li").hover(
                function(){
                    $(this).css("background-color", "#426FD9")
                    $(this).css("color", "#fff")
                },
                function(){
                    $(this).css("background-color", "#fff")
                    $(this).css("color", "#000")
                });
            }
        }
    });
}

function changeAssignedUserId(Id, Name, MembroIdInputId, ProdNomeInputId, UlId)
{
    console.log(MembroIdInputId);
    $("#" + MembroIdInputId).val(Id);
    $("#" + ProdNomeInputId).val(Name);

    // remove a lista buscada apos selecionar o item
    $("#" + UlId + " li").remove();

    // esconde o bloco do resultado da busca
    $(".yui-ac-content").hide();
    $(".yui-ac-hd").hide();
}

function bind()
{
    $('.membro_autocomplete').unbind('keyup').keyup(function(){
 $inputMembro = $(this).closest('input');
 $inputMembroId = $(this).closest('td').find("input[class='membro_id']");
 $divResultados = $(this).closest('td').find("input[class='yui-ac-container']");

 autoCompleteMembro($inputMembro, $inputMembroId, $divResultados);
    });
}
bind();

function addJson(campo, texto){
   jsonResultado.push({
      guia: campo,
      texto: texto
   });
}

function sendToPhp()
{

   jsonResultado = [];

   var validado = true;

   var linha_class = ".conteudo";
   var linhasTabela = $(linha_class);
   var num_linhas = linhasTabela.length;

   linhasTabela.each(function(){
      var campos = $(this).find("input[type=text]");
      var num_campos = campos.length;

      campos.each(function(i,e){
         linha_idx = $(e).closest(linha_class).index(linha_class);

         if($(this).val() == "" && i == 0){
            alert("Primeira coluna não pode ter campo vazio!");
            validado = false;
         }else{
            var guia =
            i == 0 ? "membro" :
            i == 1 ? "dizimo" :
            i == 2 ? "oferta" :
            i == 3 ? "oferta_especial" :
            i == 4 ? "missoes" :
            i == 5 ? "cesta_basica" :
            i == 6 ? "ana_nazareno" :
            i == 7 ? "outros" : null;
            addJson(guia, $(this).val());
         }
      });

   });

   if(validado){
      alert("Formulário está ok!");
      jsonResultado = JSON.stringify(jsonResultado);
   }

}

function check()
{
    var ok = 1;
    $('#Membro0').blur(function()
        {
            if($(this).val().length === 0)
            {
                ok = 0; $(this).css('border-color','red');
                alert('Campo MEMBRO deve ser preenchido');
            }
    else{ $(this).css('border-color',''); }
    });
}

            <form id="formRelatorio" method="POST" action="index.php?module=culto_relatorio_dizimo&action=gravaRelatorio">
                <input type="hidden" name="module" value="culto_relatorio_dizimo">
                <input type="hidden" name="record" value="">
                <input type="hidden" id="action" name="gravaRelatorio">
                <input type="hidden" name="return_module" value="culto_relatorio_dizimo">
                <input type="hidden" name="return_action" value="relatorioDizimo">

                        Membro
                        Dizimo
                        Oferta
                        Oferta Especial
                        Missões
                        Cesta Básica
                        ANA Nazareno
                        Outros

                           <input id="membro_id0" class="membro_id" type="hidden" value="">
                           <input id="Membro0" class="larg membro_autocomplete" type="text">

                            <input id="dizimo_id0" class="dizimo_id" type="hidden" value="">
                            <input id="Dizimo0" class="larg dizimo_autocomplete" type="text">

                            <input id="oferta_id0" class="oferta_id" type="hidden" value="">
                            <input id="Oferta0" class="larg oferta_autocomplete" type="text">

                            <input id="oferta_especial_id0" class="oferta_especial_id" type="hidden" value="">
                            <input id="OfertaEspecial0" class="larg oferta_especial_autocomplete" type="text">

                            <input id="missoes_id0" class="missoes_id" type="hidden" value="">
                            <input id="Missoes0" class="larg missoes_autocomplete" type="text">

                            <input id="cesta_basica_id0" class="cesta_basica_id" type="hidden" value="">
                            <input id="CestaBasica0" class="larg cesta_basica_autocomplete" type="text">

                            <input id="ana_nazareno_id0" class="ana_nazareno_id" type="hidden" value="">
                            <input id="AnaNazareno0" class="larg ana_nazareno_autocomplete" type="text">

                            <input id="outros_id0" class="outros_id" type="hidden" value="">
                            <input id="Outros0" class="larg outros_autocomplete" type="text">

                         <button type="button" onclick="addRow(this)">Adicionar</button>

            </form>

                <button type="button" class="buton" id="sendBtnEnviar" onclick="sendToPhp()">Inserir</button>
                <input id="countLine" class="countLine" type="hidden" value="1">

Comment: @LeoCaracciolo Essa pergunta tem mais de 1 ano e foi abandonada... eu fui fuçar perguntas abandonadas e consegui resolver... como é um caso particular, não achei necessário explicar... a pergunta em si já explica, ou seja, queria apenas ver se o primeiro campo de cada linha está vazio ou não. Não creio que isso seja útil a ninguém no futuro ou no passado rs... se quiser dá downvote por esse detalhe, mesmo a resposta resolvendo o problema, fique à vontade.
Comment: Minha pontaria está ruim, acertei a seta errada :D

Validação de Form com JQuery


Temporary disconnect of HDD in RAID 0 array

Question: I have a blade server on Rocky Linux 8 with 5 18TB WD Gold HDDs in a software RAID0 built with mdadm.  I will accept all the lectures on this and change my ways if you all can help. I needed coffee while I was investigating what appeared to be an empty HD slot (the LED was off) and I popped out one of the drives in the RAID.  I quickly put it back in and did a reboot.. to find that I am booting into emergency mode.
Emergency mode
The /var/log/messages file indicates that the NTFS filesystem on the RAID is unavailable, and the system cannot open the RAID component /dev/sde. Checking fdisk also reports that the backup GPT table is not on the end of dev/sdf.
cat /var/log/messages
fdisk -l
The output of cat /proc/mdstat shows the following configuration. I recall that I had md126 and md127 mounted. However, md127 shows status inactive.
cat /proc/mdstat
When I examine /dev/md127 with mdadm, it gives the following output:
mdadm --examine /dev/md127
I haven't taken any steps to resolve the issue as I would like to understand what happened first.  I am concerned about losing the data, but not concerned enough to pay for data recovery.  I just don't know enough about RAID and particularly software RAID to feel confident taking action.  So how bad is this and what is the safest way to proceed?
EDIT: I see the title of this post has been edited by a user from "Temporary disconnect of HDD in RAID 0 array" to "Destroyed RAID 0 array".  Is the RAID definitely destroyed?  Any insights would be appreciated.
Comment: it's against all standard ways to run a raid 0 without a backup. no business related environmental will run like this, do basically offtopic. If the data are really important contract some kind of data restore professional
Comment: Best way is to create an image of all disks that are part of the array. Usually I save them as an image on a BTRFS or ZFS volume that has ZSTD compression, take a snapshot and then try to recover the data from the snapshoted images.
Answer: Well, this story has a happy ending!
After using ddrescue to copy all of the 18Tb disks, I used the ntfs equivalent of fsck (ntfsfix) on /dev/md0.  The utility was able to restore the filesystem and all of the data has been recovered.
In the first hours of this post, a mod changed the title from "Temporary disconnect of HDD in RAID 0 array" to "Destroyed RAID 0 array and no backups". As it turns out, that was not the case.  I have now restored the original title of the post.


Como instanciar uma model dentro da outra na view?

Question:
Erro: Property [id] does not exist on this collection instance.

MIGRATION DIVIDA
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateDividasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('dividas', function (Blueprint $table) {

            $table->increments('id');
            $table->string('numdoc')->nullable();

            $table->integer('cliente_id')->unsigned();
            $table->foreign('cliente_id')->references('id')->on('clientes');

            $table->integer('devedor_id')->unsigned();
            $table->foreign('devedor_id')->references('id')->on('devedors');

            $table->date('data_emissao');
            $table->date('data_debito');

            $table->integer('meses_atraso')->default(0);
            $table->integer('multa')->default(0);
            $table->double('valor_multa')->default(0);

            $table->double('taxa')->default(0);
            $table->double('valor');
            $table->double('valor_recebido')->default(0);
            $table->double('valor_aberto')->default(0);
            $table->double('valor_total_corrigido')->default(0);

            $table->integer('user_id');
            $table->string('status')->default('pendente');
            $table->timestamps();

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('dividas');
    }
}

MIGRATION TITULO
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTitulosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('titulos', function (Blueprint $table) {

            // cadastro padrão
            $table->increments('id');
            $table->string('referencia');

            $table->integer('tipo_id')->unsigned();
            $table->foreign('tipo_id')->references('id')->on('titulo_tipos');

            $table->integer('divida_id')->unsigned();
            $table->foreign('divida_id')->references('id')->on('dividas');

            $table->integer('user_id');

            $table->date('vencimento_titulo')->nullable();
            $table->double('valor')->nullable();
            $table->timestamps();

            // fim cadastro padrão

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('titulos');
        Schema::dropIfExists('devedors');
        //Schema::dropIfExists('clientes');

    }
}

MODEL DIVIDA
 public function titulo()
    {
        return $this->hasMany('App\Models\Titulo');
    }

MODEL TITULO
public function divida()
    {
        return $this->belongsTo('App\Models\Divida', 'divida_id');
    }

Comment: Pode explicar melhor?
Comment: Gostaria de acessar campos da tabela titulo em divida
Comment: Ex.: $divida->titulo->valor
Comment: Coloque os Model na pergunta
Answer: Te aconselharia a não utilizar chaves estrangeiras no banco, é uma responsabilidade do front manter a integridade, além disso caso planeje escalar horizontalmente seu banco isso inviabilizaria e muito essa tarefa. utilie direto no seu model e não no banco.
Faça sua migration apenas assim:
$table->integer('tipo_id');

E no seu model de titulos faça:
 public function tipos()
    {
        return $this->belongsTo('App\Models\Tipo', 'id', 'tipo_id);
    }

Creio que seu titulo possua apenas um tipo, e um tipo poderá ter vários títulos ai no model de tipo faça:
 public function titulos()
    {
        return $this->hasMany('App\Models\Titulos', 'tipo_id', 'id');
    }

Alguns bons artigos sobre:
https://medium.com/@hernandev/sempre-use-chaves-estrangeiras-no-mysql-e24b4e2187f5
https://medium.com/@lemesdaniel/o-porqu%C3%AA-de-eu-n%C3%A3o-usar-chave-estrangeira-no-mysql-2e0179af4b2c
Answer: O  relacionamento hasMany, representa uma relacionamento de um para muitos.
Ver
https://laravel.com/docs/5.8/eloquent-relationships#one-to-many
No seu caso uma dívida muitos títulos.
Nota:
O método no modelo Divida devia chamar-se  titulos e não titulo porque representa uma colecção de títulos e não  um título.
Neste caso está  tentar obter "valor" a partir da colecção, o que não vai funcionar.
Os relacionamentos são devolvidos sob a forma  de uma Collection
Ver
https://laravel.com/docs/5.8/collections
Exemplo para obter o primeiro item da colecção pode fazer.
$divida->titulos->first()->valor

Exemplo para  verificar se existem títulos associados à dívida.
$divida->titulos->isEmpty()

Última nota, consulte a documentação sobre Eager Loading para evitar problemas com com consultas à base de dados do  tipo  N+1
Ver
https://laravel.com/docs/5.8/eloquent-relationships#eager-loading


Normalização de tabela para 2a Forma Normal

Question:
Uma relação encontra-se na 2FN se e somente se estiver na 1FN e não
  contém dependências parciais.

A partir desta definição estou normalizando um BD para 2FN. Esse BD possui 2 tabelas, qual ilustra a figura com seus respectivos atributos:

A chave candidata cpf da tabela cliente, está causando dependência parcial nesse formato, certo? Pois apenas id já o referência.
Reorganizando a tabela cliente de acordo com a 2FN acabei por defini-la assim, a ideia central do meu pensamento de normalização está correta?
Há alguma outra forma melhor para que eu possa normalizá-la?
Comment: "Gostaria de"... ?
Comment: Relacionado: https://pt.stackoverflow.com/q/151323/64969
Comment: Opa, acabei por editar o final. Então estou querendo saber se o cpf deixa a a tabela desrespeitando a transitividade, pois apesar de ver desta forma, alguns de meus amigos de equipe tem opinião contrária a minha. A partir disso gostaria de entender então se eu estou errado e quem está errado e o porque. Obrigado pelo compartilhamento do link, ajuda como um material adicional de estudos, mas preciso da ajuda nesse caso em específico.
Answer: Normalização existe essencialmente para resolver redundâncias. Vê alguma redundância aí?
Endereço
Nenhuma mostrada. É possível o cliente ter mais de um endereço? É possível mais de um cliente ter o mesmo endereço? Se puder, talvez faça sentido aplicar a normalização neste caso. Com apenas um endereço não faz sentido fazer esta separação. Não se aplica nem a segunda, nem nenhuma forma normal.
Note que no segundo exemplo criou uma tabela chamada Cliente Endereço. Porque está colocando o endereço de uma agência nele? Não faz sentido.
Vamos supor que na verdade ela é uma tabela de endereços em geral. Aí até caberia colocar o endereço ali. Mas para que?
Nada impede de ter uma tabela só para endereços, mas se não há repetição do dado não está fazendo isto por normalização. Isto faz sentido se as entidades puderem ter mais de um endereço ou mais de uma delas ter o mesmo endereço.
Não entrei na normalização da tabela de endereço porque não parece ser o foco da pergunta e na forma apresentada pode até estar normalizada, não tem dados indicando o que estão as colunas, nem mesmo os tipos, poderia muito bem ser ids dos dados normalizados. Também pode ser que não se queira normalizar isto.
Agência
Foi criada uma tabela para separar a agência que ele pertence. Novamente, tem mais de uma agência que o cliente pode ter? É a mesma questão do endereço. Qua ganho acho que teve fazendo isto? Que problema acha que resolveu? Normalização precisa resolver problemas, não causar novos. Não vi vantagem.
Melhor modelo
Mesmo esses casos podem ser questionados em bancos de dados modernos. Não custa tão caro assim manter espaço para mais de um endereço na própria entidade. Nem sempre é problema ter uma muito eventual repetição de cadastro do endereço quando duas entidades estão no mesmo endereço. É uma questão de pragmatismo.
Se puder ter esses casos, estritamente falando, deveria normalizar, mas um desenvolvedor experiente vai analisar o quanto vale o esforço porque complica o modelo dificultando todo o código e performance. Então tem que pensar se compensa, se é tão necessário assim.
Por outro lado todo o modelo pode estar errado. Essa ideia de separar entidades em cliente, fornecedor, banco, etc. é errada por natureza. Pelo menos na forma apresentada.
Entidades são pessoas físicas e jurídicas (separadas). Cliente, fornecedor, banco, transportadora, vendedor, funcionário, etc. são papeis que essas pessoas exercem nessa organização. Nestas tabelas só deveriam ter dados sobre os papéis. Os dados da pessoa em si deveriam estar nas tabelas de pessoas física e jurídica. Isto é o mais correto, mas novamente é possível pragmaticamente fazer de outra forma se fizer sentido. Mas precisa escolher outra forma porque é o melhor e não porque é a única forma que conhece. Nem todos os casos fazem sentido separar assim, mas em geral é o mais correto.
Eu poderia apontar outros possíveis erros nesse modelo. Mas seria especulação porque só é certo ou errado sabendo todos os requisitos. Os erros que eu vejo seriam de acordo com minha experiência, não com o caso real, estão poderia estar certo ou não.
Normalização
Para saber como normalizar precisa saber dos objetivos. Ser o mais correto formalmente, ser o mais rápido de desenvolver, ser o mais fácil de dar manutenção, ser o mais performático, ser o que o professor ensinou ou o chefe mandou mesmo que não seja o melhor, ou o que for. Não dá para normalizar cegamente. Até onde normalizar e onde parar é algo que aprenderá com o tempo.

Pode ser considerada uma má prática de modelagem armazenar todas as pessoas (clientes, funcionários, fornecedores) em uma mesma tabela?
O que fazer se cliente pode ser tanto PF quanto PJ?
Herança e Polimorfismo
Modelagem de lançamentos usando clientes e fornecedores

Coloquei no GitHub para referência futura.
Comment: Mineiro, então irei refazer. Eu tinha resolvido normalizar dessa forma pois não consigo enxergar o CPF de cliente não criando dependência parcial com numAgencia, você não enxerga desta forma? Eu até compreendi todo o resto que me explicou, mas essa relação, (id, numAgencia > cpf) ainda está complicada, sendo que com  (id > CPF), poderia me ajudar entender isso, obrigado pelos link
Comment: Eu não consigo enxergar uma relação entre essas duas coisas. CPF é do cliente, agência nada tem a ver com isso.
Answer: As suas tabelas Cliente e Agência estão na primeira forma normal porque nenhum campo é multivalorado, então vamos focar na segunda forma normal.
Há duas chaves candidatas na tabela Cliente: id e cpf. Claramente a partir do id, podemos obter qualquer outro campo e a partir do cpf também. E também não podemos utilizar apenas uma parte do id ou do cpf para esse fim.
Já na tabela Agencia, a única chave candidata é o id e os demais campos são definidos com base no id e não apenas em parte do id.
Entretanto, os campos estado são determinados pelos campos cidade que por sua vez são determinados pelo campos rua na tabela Cliente e cep na tabela Agencia. Ou seja, os campos cidade e estado são violações da segunda forma normal porque eles não depende da chave primária, e sim de algum outro campo. A sua tentativa de normalizar não corrige esse problema completamente, mas já é um passo em alguma direção.
A solução seria:

Crie uma tabela Estado com os campos codigo e nome.
O codigo é a chave primária, enquanto que o nome é uma outra chave candidata porque não podemos ter dois estados com o mesmo nome.
Crie uma tabela Cidade com os campos codigo_estado, codigo_cidade e nome.
O codigo_cidade é a chave primária, o codigo_estado é a chave estrangeira para a tabela Estado.
Os campos codigo_estado e nome também são uma chave candidata porque não podem haver duas cidades com o mesmo nome no mesmo estado.
O campo nome sozinho não é chave candidata porque podem haver cidades com o mesmo nome em estados diferentes (tal como Cascavel, nome de uma cidade no Paraná e uma no Ceará).
Crie uma tabela Logradouro com os campos cep, codigo_cidade, bairro e nome.
cep é a chave primária.
codigo_cidade é a chave estrangeira para a tabela Cidade.
Seria de se imaginar que codigo_cidade e nome juntos fossem uma chave candidata, e em quase todas as cidades isso seria verdade, mas nem sempre é. Em São Paulo, por exemplo, existem três ruas diferentes chamadas de "Rua Piracicaba". Assim sendo, a chave candidata é codigo_cidade, nome e bairro.
Crie uma tabela Endereco com os campos id, cep, numero_logradouro e complemento.
id é a chave primária.
cep é a chave estrangeira para a tabela Logradouro.
Curiosamente, o número do logradouro nem sempre é numérico. Por exemplo: "Rua João da Silva, 148-B, casa dos fundos".
Nas tabelas Agencia e Cliente, coloque uma chave estrangeira para Endereco e retire os demais campos referentes a endereços.

Esse modelo ainda não está perfeito, pois uma mesma rua pode ter diferentes CEPs e talvez fosse o caso de ter uma tabela de bairros e também uma tabela de tipos de logradouros (avenida, rua, praça, alameda, travessa, rodovia, quadra, etc.). Entretanto, para o seu propósito, isso deve ser o suficiente.
Comment: @GustavodosSantosSorati O processo de normalização sempre gera uma inflação no número de tabelas. E se o seu exercício pede para normalizar isso, você vai ter que realizar o processo quantas vezes forem necessárias até eliminar as dependências funcionais, e em cada etapa vai ter ao menos uma tabela a mais. Assim sendo, pode se acostumar com isso, ver um grande número de tabelas novas surgir a partir da normalização é comum.
Comment: Isso não geraria uma excessiva quantidade de tabelas? Como não estou no mercado ainda, esse seria um procedimento correto para se normalizar e implementar?
Answer: Baseado nos exemplos de conversão do livro, segue abaixo um exemplo de 1FN para 2FN e 2FN para 3FN.

Baseado no desenho do livro, Fiz um desenho para tentar ajudar na sua pergunta.

Como a sua pergunta se limitou a conversão apenas até a 2FN , eu não fiz a conversão da 2FN para 3FN como mostra o exemplo do livro.

Considere as chaves primárias as palavras com sublinhado total , EX: (CPF) e as chaves estrangeira como (_CEP) com o underline antes da palavra.

Acrescentei alguns atributos não chave na tabela de relacionamento CLIENTE_AGENCIA somente para ficar mais coerente a ilustração, já que você não citou nenhum atributo relevante para compor essa tabela.
fonte: Sistemas de Banco de dados 6ª edição, autores: Elmasri, Ramez Navathe, Shamkant B. Ano: 2011


virtualized windows 2003 domain with CentOS 5.3 and poor connectivity

Question: I have a test lab set up running a virtualized windows 2003 domain on a CentOS 5.3(xen) host and am experiencing connectivity problems with guests running on other hosts that are part of the same domain.
Here's the setup:
On Computer A I have CentOS 5.3 running as the host and have virtualized windows 2003 servers for a primary domain controller, a backup domain controller and an exchange server. The primary domain controller also acts as a WINS and dns server. The windows domain appears on a separate subnet from my company's corporate network. Connectivity to any of the virtualized guests on Computer A is fine (remote desktop, ping, what have you).
I have another host computer (Computer B) that also has a virtualized Windows 2003 server guest that is part of the same domain. However, connectivity to that guest is flaky at best. I continuously get at least 60% packet loss when I try to ping the guest, and due to that flakiness I can not access any of the services that it runs (remote desktop, web).
Now here's the interesting part. It seems to affect only machines running on a different computer than the domain controller that are in the same domain. On Computer B there is another Windows 2003 guest that is not part of the test domain and is on my corporate network. There's no connectivity issues with that guest machine.
The problem does not seem to be specific to Computer B either. I created a test VM on my local computer within the test domain and it exhibits the same behaviour as the guest in Computer B.
A couple of items to note:
- Host OS on both Computer A and B are the same CentOS 5.3 64 bit
- Guest OS is Windows 2003 64 bit and 32 bit (the guest on Computer B is 32 bit)
- Guest OSes are all up to date (as of Monday)
- Host OS on Computer A was upgraded from CentOS 5.2 to 5.3
Update:
Sorry I did not follow up with the comments from below. Computer A and B have been moved to their own dedicated switch and the problem has gone away. I'm not sure what the underlying problem(s) were though
Comment: When you ping a computer that you are seeing packet loss with, does it look normal?  I've seen clock issues with VMs that cause bad networking behavior.
Comment: Are there incrementing collisions or errors on your ethernet interfaces?
Comment: Just to be clear - Does the non-domain guest machine on host B have any problems communicating with the guest DC on host A?
Answer: Have install xenpv driver from redhat
BUGZILLA : https://bugzilla.redhat.com/show_bug.cgi?id=469767
Errata : http://rhn.redhat.com/errata/RHEA-2009-1583.html ( Package: xenpv-win-1.1.0-2.el5.noarch.rpm) .
its need restart to your server win2k3 server it will install para virtual driver for your win 2k3 server.
Answer: Based on your success when you moved to a single switch, I'd suggest that you have not yet fixed the problem, just hidden the symptoms.
Whilst on your private switch, I suggest running wire shark and looking carefully at the network traffic, and then attempt to explain every single packet you see on the wire.
The end result will be a much better understanding of Microsoft's use of ports 135, 137-139 and port 445 which are used in file sharing, and you are likely to see packets that explain why you had problems before hand.


Template suggestions for file_entity.tpl.php

Question: Short version
My aim is to theme a file field in a view of node fields. In the view configuration, the field formatter is set to Rendered file and a view mode is selected. How do I suggest a template file?
Long version
What I see is, theming of a file entity is done through file_entity.tpl.php in file_entity module. I copied this file to my theme folder and tried following names:
file_entity--my-view-mode.tpl.php
file-entity--my-view-mode.tpl.php
file_entity--views--my-view-mode.tpl.php
file-entity--views--my-view-mode.tpl.php

None worked. So I tried to hook in some suggestions like below as view_mode_templates.module also does.
<?php
MYTHEME_preprocess(&$vars){
  $vars['theme_hook_suggestions'][] = 'file_entity__views__my_view_mode';
}
?>

This ends up loading that file-entity--views--my-view-mode.tpl.php but funnily I get an error like this:

Fatal error: Only variables can be passed by reference in
  blah/blah/file-entity--views--my-view-mode.tpl.php on line 71

Which is actually this line:
hide($content['links']);

Funnier thing is if I comment that line out, I get a fatality masterkill WSOD with no error message.
If I try to do it like below, again as view_mode_templates.module does, it doesn't see the suggestion.
<?php
function MYTHEME_preprocess(&$vars) {
  if (array_key_exists('file_entity', entity_get_info())) {
    $vars['theme_hook_suggestions'][] = 'file_entity__views__my_view_mode';
  }
}
?>

So, does it maybe not suggest the theme suggestion in the correct place? Do I need to suggest this in something like template_preprocess_file_entity(&$variables) or template_preprocess_entity(&$variables)? Which don't have the appropriate $vars['theme_hook_suggestions'] array as far as I couldn't see.
Any comment is hardcore appreciated, thanks.
Comment: 1.Are you trying to change the template of file-field (from Field module) or FileEntity default template (from File Entity module)? 2.If you are trying to override the default template of FileEntity, then did you clear the cache after you've copied it?
Comment: U need to follow http://drupal.stackexchange.com/questions/95747/how-to-provide-pagename-tpl-php-to-specific-page/95749#95749 and for suggestions use the devel themer module.
Comment: 1. @xurshid29 I am trying to change the FileEntity default template from File Entity module. Going on with Filed module doesn't look possible as per [Issue: File entity views fields outputting as a link are broken](https://drupal.org/node/1858036). They are using the view modes for the file entities. 2. Yes I did, on each trial, more than twice.
Comment: @madhurjya thank you, but since what I am trying to theme is not a node but a file entity, can you please be a little more specific on the implementation?
Comment: above, are you actually calling `MYTHEME_preprocess()` or `MYTHEME_preprocess_file_entity()`?
Comment: @jimjamma I am calling MYTHEME_preprocess() as per [template_preprocess_file_entity | file_entity.module | Drupal 7 | DrupalContrib](http://drupalcontrib.org/api/drupal/contributions!file_entity!file_entity.module/function/template_preprocess_file_entity/7) the **$theme_hook_suggestions** array is not available in template_preprocess_file_entity.
Comment: @duru I have give you a link for suggestions of field templates, try to use that http://mtt.desk.com/customer/portal/articles/978785-how-to-name-field-templates-in-drupal-7-in-order-to-override-them as I previously told you to use the devel themer module for better suggestions.
Comment: I'm confused @duru in that theme_hook_suggestions are being set at the bottom of that link.
Answer: There's a documentation about template suggestions at Displaying Media under the heading Further Theming.

The theme suggestions provided by the File Entity module are:
file__{file type}
file__{file type}__{view mode}
file__{mime type}
file__{mime type}__{view mode}
file__{file id}
file__{file id}__{view mode}

Comment: God, I read that docs more than 10 times in the summer and now forgot what they were about. Thank you very much Елин Й.
Comment: The above listed formats are missing some underscores due to some editors issue, I couldn't fix. Please refer to the docs: https://drupal.org/node/1793548
Comment: I've corrected them changing the formatting from block quote to code block.
Comment: You're welcome. I'm glad that I could help you to solve your problem.
Comment: omg, after a year i was looking for the same thing and i googled it and came upon this, read it without knowing that it was mine. so funny:)
Answer: Here's an actual example for "document" file type:
file--document.tpl.php
file--document--default.tpl.php   // default view
file--application-pdf.tpl.php   // pdf mime type
file--application-pdf--default.tpl.php
file--1234.tpl.php   // file id
file--1234--default.tpl.php


Find the area of overlap of two triangles

Question: Suppose we are given two triangles $ABC$ and $DEF$. We can assume nothing about them other than that they are in the same plane. The triangles may or may not overlap. I want to algorithmically determine the area (possibly $0$) of their overlap; call it $T_{common}$.
We have a multitude of ways of determining the areas of $ABC$ and $DEF$; among the "nicest" are the Heronian formula, which is in terms of the side lengths alone, and
$T = \frac{1}{2} \left| \det\begin{pmatrix}x_A & x_B & x_C \\ y_A & y_B & y_C \\ 1 & 1 & 1\end{pmatrix} \right| = \frac{1}{2} \big| x_A y_B - x_A y_C + x_B y_C - x_B y_A + x_C y_A - x_C y_B \big|$
which is in terms of the coordinates alone.
Obviously, there does exist a function from $A,B,C,D,E,F$ to $T_{common}$, but my question is: is there a "nice" (or even not-"nice") expression for $T_{common}$ in terms of the $x$ and $y$ coordinates of $A,B,C,D,E,F$?
I've drawn out on paper what I think are the various cases, but my issues with this approach are: identifying the case is a job in itself, which I can't easily see how to algorithmise ("just look at a picture" doesn't work for a computer); even within each case the algebra is fiddly and error-prone; and I have little confidence that I've enumerated all possible cases and got the computations right!
In my imagination there is a neat approach using ideas from analysis (treating the triangles as functions from $\mathbb{R}^2$ to $\{0,1\}$ and... multiplying them??) but I have no idea whether that's just a flight of fancy or something workable.
Answer: Here's an approach that doesn't require any ingenuity or case analysis. Use the Sutherland-Hodgman algorithm to clip one triangle against the other, yielding a (possibly degenerate) polygon representing the region of overlap, then compute its area.
Comment: It's worth nothing that this actually works for arbitrary polygons, as long as the one doing the clipping is convex. There might be more direct solutions that use the fact that your polygons are just triangles.
Comment: See also the paper [A simple linear algorithm for intersecting convex polygons](https://doi.org/10.1007/BF01898355) by Toussaint.
Answer: Sorry about the comment -- I hit the return key prematurely.
This isn't really an answer (except in the negative sense).
The common (overlap) area is a function of the coordinates of the 6 points, so it's a mapping from $R^{12}$ into $R$. Think about one of the points moving around, while the other 5 are fixed. When the moving point passes into (or out of) the other triangle, some of the partial derivatives of the area function will be discontinuous (this seems intuitively clear -- the proof is left to someone who has more skill and patience than I do). Anyway, if you believe me, this means that the area function is not smooth. Therefore there can not be some simple formula like Heron's formula that gives the area (because this simple formula would give a smooth function).
Comment: True, but this does not rule out a "nice" formula involving maximums, absolute values, and the like.
Answer: Here is a beginning. Degenerate cases will not be dealt with.
Let ${\bf a}_i$ $\,(i=0,1,2)$ be the vertices of the first, called $A$-triangle, and similarly let ${\bf b}_k$ $\,(k=0,1,2)$ be the vertices of the $B$-triangle. It might help to assume that both triangles are positively oriented, i.e., $({\bf a}_1-{\bf a_0})\wedge({\bf a}_2-{\bf a_0})>0$, and similarly for the ${\bf b}_k$.
Then the prolonged sides of the $A$-triangle are given by
$$g_i:\quad s\mapsto (1-s){\bf a}_{i-1}+ s\,{\bf a}_i\qquad(-\infty<s<\infty)\ ,$$
and similarly the prolonged sides of the $B$-triangle are given by
$$h_k:\quad t\mapsto (1-t){\bf b}_{k-1}+ t\,{\bf b}_k\qquad(-\infty<t<\infty)\ .$$
Note that the intersection of the two triangles might have from $0$ to $6$ vertices. Therefore it is not too much work to determine  the parameter values $(s_{ik},t_{ik})$ of the nine intersection points ${\bf z}_{ik}:=g_i\wedge h_k$.
Now comes the difficult part: Let $I:=[0,1]$. A point ${\bf z}_{ik}$ is an actual intersection point of an $A$-side with a $B$-side iff $(s_{ik},t_{ik})\in I\times I$. By drawing a few figures it should be possible to come up with an algorithm that decides whether (i) one of the triangles is contained in the other, or (ii) they are lying apart, or (iii) they intersect in a convex polygon $P$. In the last case it should even be possible to automatically get the addresses $(i_r,k_r)$ $\,(1\leq r\leq n)$ of $P$'s vertices in a counterclockwise order.
When we are that far we can put
$${\bf z}_r:=\bigl(1-s_{i_r k_r}\bigr){\bf a}_{i_r-1}+s_{i_r k_r}{\bf a}_{i_r}\qquad(1\leq r\leq n)$$
and use the well known formula (derived from Green's area formula) for the area of $P={\rm conv}({\bf z}_,\ldots,{\bf z}_n)$.
Answer: Here's a way to think about the problem that might help.
Each side of a triangle defines an infinite line, and this line divides the plane into two halves (called "half-spaces"). So, for example, the side $AB$ defines a line $L_{AB}$ with equation $L_{AB}(x,y) = 0$. The two corresponding half-spaces are $L_{AB}(x,y) \le 0$ and $L_{AB}(x,y) \ge 0$. You can multiply the line equation by $-1$, if necessary, and thereby arrange that the triangle actually lies in the half-space $L_{AB}(x,y) \ge 0$.
Then, the triangle $ABC$ is the intersection of three half-spaces: $L_{AB}(x,y) \ge 0$,  $L_{BC}(x,y) \ge 0$, $L_{CA}(x,y) \ge 0$.
The intersection of the two triangles is then the intersection of 6 half-spaces.
Or, saying at another way, the intersection is the set of points $(x,y)$ for which all six of $L_{AB}(x,y)$ through $L_{DF}(x,y)$ are positive. So, if we define
$f(x,y) = \min\{L_{AB}(x,y), \ldots, L_{DF}(x,y)\}$,
then the triangle is the set $\{(x,y) : f(x,y) \ge 0\}$.
I don't think any of this is very useful computationally. But, it provides a way to enumerate cases, and it converts the problem into a "function-based" one, as suggested by your flight of fancy.
Comment: Another thought ...
Answer: (1) Find the points of intersection of the two triangles(given in the same clockwise/anticlockwise order, assumed to be on the same plane).
(2) Break the edges of the triangle at the intersection points and form two polygons A and B; keep the intersection points marked with special flag.
(2)Start with vertex 1 of A, move clockwise/anticlockwise to the first flagged vertex of A
(3) identify the edge of B, and move on the edge of B
(4) continue on B's perimeter until hitting another intersection
(5) switch moving to A (thus alternating on the two polygons form the union polygon of A and B)
(6) Get Tcommon = Area of A + Area of B - Area of union polygon
(disjoint triangles and A contained fully inside B, or vice versa to be excluded)
Comment: Please correct Tcommon = 0.5*(Area of A + Area of B - Area of Union Polygon)


Programming Layout Changes into Theme Templates & CSS Files

Question: I've kicked a problem down the road for too long and am now stuck in the fact that I finally need to get it fixed.
I need to program layout changes into the php code so that the right CSS rules can apply to changes based on whether or not the left sidebar and/or the right sidebar is present on the page. In these sidebars are a variety of blocks that I have added to the templates and theme .info file.
So here's an example of my situation. If you need access to my current template files let me know.
So for one page, say I have one side bar the main content area, the css rules would read : Left_Sidebar (width: 33%) and Main_Content (width 66%). But when switching pages, say to one without a sidebar, I want the css rule for Main_Content to be (width: 100%).
I've seen it done on other themes, but this theme is all of my own design. Some examples I've seen are in the "body class" where you see "with-sidebar", "no-sidebar", "two-sidebars" -----
I've tried looking around, but I must be not using the correct terms for what it is I'd like to do. If there is anyone who can help, please let me know! Thank you in advance!
Answer: Many existing themes already provide this kind of feature (usually using a preprocess function) so I would recommend looking at a theme like Zen or another popular base theme for examples of varying the page layout with a body class which specifies the overall structure of the page.
Comment: Would I look in the template,php file? Though thank you for suggesting where to begin searching.
Comment: Yes unless you have a very large theme it normally makes sense to put preprocess functions in template.php


Qual a vantagem de utilizar include de array vs arquivo de configuração?

Question: Tenho observado alguns códigos onde o programador faz o seguinte:
/** Arquivo A.php */
return array('databaseName' => 'bancoTeste', 'port' => 5208);

/** Arquivo B.php */
$configs = include("A.php");
// Acesso as $configs
echo $configs['databaseName'];

Este pequeno trecho de código demonstra que a intenção é ter as configurações armazenadas em um arquivo PHP e extrai-las através de include. Um outro método mais comum é utilizar um arquivo de configuração plano (.ini por exemplo) e carregá-lo via fopen, etc.
1 - Qual a vantagem e desvantagem de cada método?
2 - Existe alguma melhoria de performance de um método sob o outro?
Comment: O `Laravel` tem muito isso!
Answer: Em resposta a sua dúvida podemos citar várias vantagens e desvantagens em cada tipo de arquivo de configuração em array por exemplo pode-se criar estruturas de dados mais complexas do que usando INI, mas em contrapartida o INI é mais legível que um array.
Mas basicamente o uso vai do gosto/necessidade da solução que você esta implementando, alguns dos formatos de configuração que posso citar é:

INI
Array
JSON
XML
YAML

Em questão de performance o Array tem vantagem por ser um tipo nativo composto do PHP. Mas como disse nada impede que você use outro método/formato para configurar sua aplicação.
O framework Symfony2 por exemplo permite fazer configurações por YAML, mas nem por isso ele deixa a aplicação lenta, já que ele cria um arquivo de cache em formato Array com essa configuração. (http://symfony.com/doc/master/components/config/introduction.html)
Pode ver um benchmark aqui: http://konrness.com/php5/zend_config-benchmark-json-array-ini-xml-yaml/
--
Update:
Eu já tive dúvidas também em qual tipo de formato de configuração usar e achei a referência que tomei como base na época (https://web.archive.org/web/20120826210434/http://www.zyxist.com/pokaz.php/formaty_danych_benchmark)
Sendo que a ordem do mais rápido para o mais lento é:

Array serializado
script PHP
INI
XML
YAML

Mas nada impede de usar um formato mais legível para sua configuração (YAML) e usar a estratégia de transformar em um array.
Comment: Muito boa a explicação do `Symphony` :). Isso é para tirar totalmente o preconceito de usar `yaml`
Answer: Não há uma melhora de performance que realmente faça diferença. Se medir é provável, mas não é certo, que tenha alguma vantagem para um lado ou outro. Se realmente quiser saber faça um teste de benchmark. Não o farei porque não vale a pena nem mesmo sendo simples de fazer. Não importa, não muda nada em programa algum.
Note que a forma como o arquivo está organizado, tanto em uma forma como a outra, e a forma que vai recuperar esses dados pode fazer mais diferença. Uma comparação para entender: O que é mais rápido, acessar o disco ou acessar a memória? Depende de como cada acesso é feito. É possível fazer um algoritmo tão ruim em memória que fique mais lento que acessar os mesmos dados em disco. É um exemplo extremo mas é possível. A moral da estória é que algoritmos são mais importantes.
Em geral em outras linguagens eu diria que configurar por uma estrutura de dados no próprio código poderia ser melhor por não ter a dependência de um arquivo externo que pode ser modificado por alguém, até mesmo desaparecer. E teria a vantagem de permitir que alguém altere as configurações pelo arquivo externo. Mas em PHP as configurações já estão em arquivo externo que podem ser modificados.
O que eu posso ver de diferente e isto é importante é que se você apenas retorna uma configuração e tem todas elas em um arquivo central (não importa o formato e como ele é carregado) muda a organização.
Em geral eu ficaria com um arquivo central mas depende do caso. Ter um arquivo central carregado pode deixar ligeiramente mais lento porque carregará configurações que ele não precisa naquele momento. Mas isto é mínimo e não fará diferente. É puramente por razões organizacionais. Imagine ter que procurar por configurações por toda a aplicação. Mas não digo que não possa haver casos que descentralizar seja positivo, só não consigo ver um facilmente.
Fora isto, a não ser que eu veja uma justificativa explícita, eu diria que é questão de estilo.
Mas note que o primeiro caso pode não ser considerado exatamente configuração. Não vi um caso concreto mas pode ser apenas uma informação necessária para alguma coisa pontual. Apesar da propriedade chamar config não significa que ela seja efetivamente uma configuração como outras existentes. Pode haver um motivo semântico para fazer diferente. Pode haver a necessidade, no caso concreto, de deixar claro que ali precisa ser feito isolado de outras configurações.
Answer: 1 - Qual a vantagem e desavantagem de cada método?
A vantagem da primeira abordagem é a simplicidade: você não precisa abrir o resource do arquivo, ler os dados, converter para array, fechar para utilizar do seu conteúdo.
Por outro lado, utilizar arquivos .ini fica mais claro para um administrador de sistema por exemplo que aquele arquivo específico se refere a um tipo de configuração.
2 - Existe alguma melhoria de performance de um método sob o outro?
Nada significativo, mas com a primeira abordagem o PHP pode armazenar o arquivo na memória através do OPcache, tornando o carregamento nas requisições seguintes mais rápida.
No caso de utilizar um fopen simples, a cada requisição teremos que acessar o disco, podendo causar gargalos.
Comment: Gostei de sua resposta, portanto estou dando +1 por colaborar com a pergunta.


$(\lvert a\rvert +\lvert b\rvert)^{p}\leq 2^{p}(\lvert a\rvert^{p} +\lvert b\rvert^{p})$ for $p > 1$ and are absolute values necessary?

Question: Is it true that, for any $a,b\in \mathbb R$ and $p \geq 1$, we have
$(\lvert a\rvert +\lvert b\rvert)^{p}\leq  2^{p}(\lvert a\rvert^{p} +\lvert b\rvert^{p})$
If $p=2$ we have an explicit way to  calculate by expansion,
$(\lvert a\rvert +\lvert b\rvert)^{2}=\lvert a\rvert^2+2\lvert a\rvert \cdot \lvert b\rvert +\lvert b\rvert^2 \leq 4\lvert a\rvert ^{2}+4\lvert b\rvert^{2}=2^2(\lvert a\rvert ^{2}+\lvert b\rvert^{2})$
How can I go about proving the others?
Is positivity necessary here?
Comment: the function $f(x):=x^p$ for $p\geqslant 1$ is convex (and is just defined in the reals for $x\geqslant 0$)
Comment: You may look at https://en.wikipedia.org/wiki/Minkowski_inequality
Answer: $(|a|+|b|)^p\leq (2\max\{|a|,|b|\})^p=2^p(\max\{|a|,|b|\})^p\leq 2^p(|a|^p+|b|^p)$
The last step simply follows from the fact that $(\max\{|a|,|b|\})^p$ is either $|a|^p$ or $|b|^p$, so it is definitely not bigger than their sum. Here we indeed used that they are nonnegative.
Answer: More is true. The sharp inequality is
$$\tag 1(|a|+|b|)^p \le 2^{p-1}(|a|^p+|b|^p).$$
Proof: The function $x^p$ is convex on $[0,\infty)$ for $p\ge 1.$ Thus if $a,b\in \mathbb R,$ then $|a|,|b|\ge 0,$ and
$$\left (\frac{|a|+|b|}{2}\right )^p \le \frac{|a|^p}{2}+ \frac{|b|^p}{2}.$$
Multiplying by $2^p$ on both sides gives $(1).$


Avoid trying to load NULL values into array using VBA and ADO/SQL to pull data from excel sheet

Question: I have some simple code that will load all the data from an excel sheet into an array but I am getting an error 94 inproper use of null due to the fact that my source sheet has some blank columns  IE: Q through EA are blank columns but A -P and EB - EF have data. (terrible design for an excel sheet being used as a table I know,.. but I didn't do it)
Seeing as I cant redesign the table.. how can I skip the blanks as to avoid causing errors when loading them into my array?
Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String

DBPath = "\\MYPATH\MYFILE.xlsm"
sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Conn.Open sconnect
sSQLSting = "SELECT * From [log$]"

    mrs.Open sSQLSting, Conn
        '=>Load the Data into an array
        ReturnArray = mrs.GetRows

    'Close Recordset
    mrs.Close

'Close Connection
Conn.Close

Comment: because I dynamically load sheets into this and it's not always the same thing being used. I just need everything in the sheet(table) to be loaded into my array.
Comment: I guess I could dynamically load my select statement.. ugh, so much more work though.
Comment: okay, turns out even specific fields in select statement won't help because there are blanks in the table. ACCCK.. still need help on this one.
Comment: Can't write to file. only read, in this case :(
Comment: I need something like this ISNULL(myColumn, 0 ) in my select statement but that doesn't work apparently
Answer: The IsNull() function returns True or False. So include it inside Jet/ACE's conditional logic function IIF()
sSQLString = "SELECT IIF(IsNull(Col1), 0, Col1)," _
              & " IIF(IsNull(Col2), 0, Col2)," _
              & " IIF(IsNull(Col3), 0, Col3)"
              & " From [log$];"

Answer: @JohnsonJason Why do you need it in a Array? You could just filter your data with Advanced Filter like here or just drop it and loop to get the columns you need. If you don't know how many columns will be you can create a clone Recordset and get the columns Name and create your Query based on that.
The clone RecordSet is something like this:
'' Declare Variables
Dim oRst As ADODB.Recordset, oRstVal As ADODB.Recordset, oStrm As ADODB.Stream
Dim sHeaders as String

'' Set Variables
Set oRst = New ADODB.Recordset
Set oRstVal = New ADODB.Recordset
Set oStrm = New ADODB.Stream

.... [Something else]
'' Save your current Recordset in the Stream
oRst.Save oStrm

'' Assign your Stream to the new Recordset (oRstVal)
oRstVal.Open oStrm

'' Loop trough your Recorset for Columns Name
'' Use an IF or a Select to filter
For iCol = 0 To oRstVal.Fields.Count - 1
    sHeaders = sHeaders + "," + oRstVal.Fields(iCol).Name
Next

And use sHeaders in your Statement in to get the columns you need.
''Instead of Select * From ...
sQuery = "Select " + sHeaders + _
            "From ...."


I get a "Payload too large" error when uploading larger files on LAMP setup

Question: I have a file upload script using dropzone and I get a 413 (Payload Too Large) response when loading files over 3.5 mb. My php ini settings for post_max_size and upload_max_filesize are both set to 40M.
Is there some other restriction I'm not aware of?
I am using a LAMP (PHP 7) Certified by Bitnami 7.3.15 instance on AWS Lightsail.
Thanks
Answer: The issue was unrelated to the server and turned out to be cropper.js creating rather large images.


Is it possible for iterations to spike in Gibbs sampling?

Question: After performing Gibbs sampling, I looked at a trace plot for one of my parameters and it appeared to spike at certain points. Is this possible or is it likely that I just coded my sampler wrong?
Comment: We would need more details to make an informed comment!
Answer: It is possible, particularly if it is plausible that these values would fall into your posterior and that your mixing is not great. In that case you would want more MCMC samples and in practice would usually want to then thin them out. Presumably your autocorrelation plot does not look so great either?
There are of course other explanations including miscoding.


Como recuperar os dados de uma página

Question: Boa tarde, alguém poderia me ajudar em como eu poderia recuperar os dados dessa página com php? www.boline.com.br/teste.php
Sei que precisa usar expressões regulares para poder separar os dados, mas não sei como fazer.
Comment: Que dados sao esses? Seria interessante você exemplicar com uma linha, como quer que separe.
Comment: Se eu entendi bem, seu link é mera cópia daqui, confirma?: http://www.netsorte.com.br/resultado_exportado/ResultadosMS.con Aqui tá muito mais fácil de pegar, pois não tem cabeçalhos nem nada, só as linhas. Basta usar o `explode` do PHP e o resultado sai pronto.
Answer: Não necessariamente precise de regex para isso, pode ir fazendo explodes e obtendo os dados.
por exemplo, pode pegar todos os dados separados por espaço:
 $dados = explode("\n", file_get_contents('www.boline.com.br/teste.php'));

Ai pode ir iterando esse resultado e fazendo novos explodes ;)
Com regex:
preg_match_all('~([0-9]{4})=([0-9]{2}),([0-9]{2}),([0-9]{2}),([0-9]{2}),([0-9]{2}),([0-9]{2})~', file_get_contents('www.boline.com.br/teste.php'), $dados);

Ai você vai ter :
0001=41,05,04,52,30,33

$dados[1][0] = 0001
$dados[1][1] = 41
$dados[1][2] = 05
$dados[1][3] = 04
$dados[1][4] = 52
$dados[1][5] = 30
$dados[1][6] = 33

Comment: Nesse caso, como se trata de um conteúde possivelmente de terceiro, quanto de memória ele vai utilizar? A melhor solução é quebrando 1 vez com explode os espaços e depois utilizar Generator para parsear o resto, como não sei a versão do php do nosso amigo, dei apenas duas opções

Como recuperar os dados de uma página


Not getting full json response on server (nodejs)

Question: I have one third party sms api:
I am sending messages throught that api, if put console.log for response its looks like this in my server:
connection:
  Socket {
    connecting: false,
    _hadError: false,
    _handle: [Object],
    _parent: null,
    _readableState: [Object],
    readable: true,
    domain: null,
    _events: [Object],
    _eventsCount: 9,
    _maxListeners: undefined,
    _writableState: [Object],
    writable: true,
    allowHalfOpen: false,
    _bytesDispatched: 182,
    _sockname: null,
    _pendingData: null,
    _pendingEncoding: '',
    server: null,
    _server: null,
    parser: [Object],
    _httpMessage: [Circular],
    read: [Function],
    _consuming: true,
    [Symbol(asyncId)]: 1805,
    [Symbol(bytesRead)]: 0 },
 _onPendingData: [Function: noopPendingOutput],
 agent:
  Agent {
    domain: null,
    _events: [Object],
    _eventsCount: 1,
    _maxListeners: undefined,
    defaultPort: 80,
    protocol: 'http:',
    options: [Object],
    requests: {},
    sockets: [Object],
    freeSockets: {},
    keepAliveMsecs: 1000,
    keepAlive: false,
    maxSockets: Infinity,
    maxFreeSockets: 256 },
 socketPath: undefined,
 timeout: undefined,
 method: 'GET',
 _ended: false,
 res: [Circular],
 aborted: undefined,
 timeoutCb: null,
 upgradeOrConnect: false,
 parser:
  HTTPParser {
    '0': [Function: parserOnHeaders],
    '1': [Function: parserOnHeadersComplete],
    '2': [Function: parserOnBody],
    '3': [Function: parserOnMessageComplete],
    '4': null,
    _headers: [],
    _url: '',
    _consumed: false,
    socket: [Object],
    incoming: [Circular],
    outgoing: [Circular],
    maxHeaderPairs: 2000,

My api code(nodejs):
var options = {
   host: 'xxxxxx',
   port: 80,
   path: xxxxxxx,
   method: 'GET'
};
var req = http.request(options, function (res) {
   console.log('FULL RESPONSE: ', res);
   res.setEncoding('utf8');
   res.on('data', function (chunk) {
      console.log('BODY: ' + chunk);
   });
});

req.on('error', function (e) {
   console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

I want to see full response without this type of [Object] [Array] and [Circular] in my server (terminal).
If i put JSON.stringify it throws error.
Comment: please post the error you're getting
Comment: The `res` object is a stream object. The data you want will probably not be here. You will have to build the data using a string/buffer in the `res.on('data',function(chunk){...})` section. The data might come through in multiple chunks so you may also want to use `res.on('end',function(){...})` to figure out when all the data has been recieved. After that, you can process your string/buffer and use `JSON.parse` to get the data you need.
Comment: If i put JSON.parse will i get whole data?
Comment: I would recommend using a library like `node-fetch` or `request` which allow you to use callbacks/promises and abstract out streams for you. These will work well in most cases unless you are doing something very out of the box
Comment: You can only do JSON.parse after all the data is available - ie, by doing it inside `res.on('end',function(){...})` on the data collected in `res.on('data',function(chunk){...})`
Answer: Elaborating on my comment here:
The res object is a stream object. The data you want will probably not be here. You will have to build the data using a string/buffer in the res.on('data',function(chunk){...}) section. The data might come through in multiple chunks so you may also want to use res.on('end',function(){...}) to figure out when all the data has been recieved. After that, you can process your string/buffer and use JSON.parse to get the data you need
Sample Demonstration:
var req = http.request(options, function (res) {
   res.setEncoding('utf8');
   // Create a new Buffer
   var buffer = Buffer.from('');
   res.on('data', function (chunk) {
      // Each time a chunk comes through, write it to the buffer
      console.log('BODY: ' + chunk);
      buffer.write(chunk);
   });
   res.on('end',function(){
      // The request is complete here, try to get the JSON string and parse it
      // TODO: handle possible parse exception
      var data = JSON.parse(buffer.toString('utf8'));
   });
});

I would recommend using a library like node-fetch or request which allow you to use callbacks/promises and abstract out streams for you. These will work well in most cases unless you are doing something very out of the box
Comment: BODY: 408 Request Time-out
Your browser didn't send a complete request in time.

undefined:1

SyntaxError: Unexpected end of JSON input i
Comment: i am getting like this, i put console.log(data).
Comment: You need to make sure you call `req.end()` after your request. And the error you are seeing there is actually `JSON.parse` failing because the response is HTML and not JSON :) Can't help debug this as I don;t know the API for the service you are using.


Is the converse true?

Question: Let $G$ be a connected bipartite graph with partite sets $X$ and $Y$ such that cardinality of $X$ equals to cardinality of $Y$ $\geq$ 2. If every two vertices of $X$ have distinct degrees in $G$ then show that $G$ has a perfect matching. Is the converse true? Justify your answer.
Comment: For the converse: Try all vertices with equal degrees, e.g. |X|=|Y|=3 and the degrees 2.
Answer: We have to check that $G$ satisfies the conditions of Hall's Marriage Theorem. Indeed, let $W$ be an arbitrary non-empty subset of $X$. Since all vertices of $W$ have distinct degrees (which are positive, because $G$ is connected),
there exists a vertex $v\in W$ with degree $\deg v\ge |W|$. Then $|N_G(W)|\ge \deg v\ge |W|.$
The converse is not true. A simple example it a bipartite graph whose set of edges is a perfect matching.

Is the converse true?


Product of independent martingales is adapted

Question: Let $(\Omega,F,P)$ be a probability space and suppose $(F_{n})_{n\geq1}$ and $(G_{n})_{n\geq1}$ are independent filtrations. ($F_{n}$ independent of $G_{n}, \forall n\geq1$). Suppose $(M_{n})_{n\geq1}$ is a martingale with respect to $(F_{n})_{n\geq1}$, and  $(L_{n})_{n\geq1}$ a martingale with respect to $(G_{n})_{n\geq1}$. I want to show their product $Z_{n}=M_{n}L_{n}$ is a martingale with respect to $(H_{n})_{n\geq1}$ where $H_{n}=\sigma(F_{n}\cup G_{n})$.
I'm trying to be very clear when showing that this martingale is adapted with respect to $(H_{n})_{n\geq1}$. I understand that $E(|Z_{n}|)=E(|M_{n}L_{n}|)=E(|M_{n}||L_{n}|)$. It makes sense to me that this should give $E(|M_{n}||L_{n}|)=E(|M_{n}|)E(|L_{n}|)$ since the filtrations are independent, but I'm struggling to work out the details of this. The definition of independence I am using is $\forall A\in F_{n}, \forall B\in G_{n}, P(A\cap B)=P(A)P(B)$.
What is the correct approach here?
Comment: Is this a conjecture or you know the statement is true?
Comment: It was stated in part of a solution for a problem I was set for one of my classes. So I believe it is true unless I have missed something when describing the problem on here.
Answer: $M_n L_n \in L^1$ if both $M_n$ and $L_n$ are $L^1$ part:
$$ \mathbb E[|M_nL_n|] = \mathbb E[\mathbb E[|M_n||L_n|\ \big|\ F_n]] = \mathbb E[|M_n| \mathbb E[|L_n|\big|\ F_n]] = \mathbb E[|M_n| \mathbb E[|L_n|]] = \mathbb E[|M_n|]\mathbb E[|L_n|] $$
due to the fact that $M_n$ is $F_n$-measurable and $L_n$ is independent of $F_n$.
The martingale part: It is to show that for any $k<n$
$$ \mathbb E[M_nL_n\big| H_k] = M_k L_k. $$
Claim: $H_n$ is generated by the sets $A\cap B$, where $A\in F_n$ and $B\in G_n$.
Proof: Since $\Omega \in F_n,G_n$ we can see that
$$ F_n, G_n \subset \{A\cap B, A\in F_n,B\in G_n\}. $$
Futhermore for $A\in F_n, B \in G_n$ we have that $A,B\in H_n $ and so, since $H_n$ is a $\sigma$-algebra, $A\cap B \in H_n$, hence
$$ H_n  = \sigma (F_n \cup G_n)\subset \sigma(\{A\cap B, A\in F_n, B\in G_n\})\subset H_n \quad\quad \Box. $$
Since $H_n$ is generated by the sets $\{A\cap B, A\in F_n,B\in G_n\}$ it is enough to show that
$$  \mathbb E[\mathbb E[M_nL_n\big| H_k] {\bf 1}(A\cap B)] = \mathbb E[M_k L_k\cdot {\bf 1}(A\cap B)]. $$
for any $A\in F_k, B\in G_k$. It is easy to check that ${\bf 1}(A\cap B) = {\bf 1}(A)\cdot{\bf 1}(B)$, and that $\mathbb E[M_n|H_k]=M_k$ and $\mathbb E[L_n|H_k] = L_k$, hence
$$ \mathbb E[\mathbb E[M_nL_n|H_k]{\bf 1}(A\cap B)] = \mathbb E [M_nL_n {\bf 1}(A) {\bf 1}(B)]= \mathbb E[\mathbb E[M_nL_n{\bf 1}(A){\bf 1}(B)|F_n]] = \mathbb E[M_n{\bf 1}(A)\mathbb E[L_n{\bf 1}(B)|F_n]] = \mathbb E[M_n{\bf 1}(A)]\mathbb E[L_n {\bf 1}(B)] = \mathbb E[M_k {\bf 1}(A)]\mathbb E[L_k{\bf 1}(B)] $$
where the last equality is due to the fact that $M_n$ and $L_n$ are martingales. Now
$$ \mathbb E[M_k{\bf 1}(A)]\mathbb E[L_k{\bf 1}(B)] = \mathbb E[M_kL_k{\bf 1}(A\cap B)] $$
since $M_k$ and $L_k$ are independent, and so are $A\in F_k $ and $B\in G_k$. Thus we showed that
$$ \mathbb E[M_nL_n | H_k ] = M_kL_k. $$
Comment: Hello. I would like to understand better this solution and I would have two questions. (1) You say that you need and use a set that generates $H_k$. Such a set are by definition all sets A and B. By symmetry than one can prove things just for all A sets. Could you then have than looked just at veryfying that  $E[E[M_nL_n|H_k]1_{A}]=E[M_kL_k1_{A}]$ for every A? (2) Where do you use in the derivation that $E[M_n|H_k]=M_k$ ? and what is the easy proof of this ?
Comment: ( sorry in question one you use a set that generates $H_n$ that was a typo, but I hope my question was clear )
Comment: I used both all the fact, i.e. that both are martingales and that they are independent. It is not enough to show just for ${\bf 1} (A)$, one has to use ${\bf 1}(A\cap B)$. Plus we use the fact that a property is true for a set that generates a sigma-algebra, then it is also true for the whole sigma-algebra.
Comment: Mmm... following what you say, we have that $\sigma(A \cup B)=H_n$ so that $A \cup B$ generate the sigma algebra by definition. Further, since the role of $A$ and $B$ is symmetric in the problem, one can consider only $A$ sets. What is wrong with this reasoning ?
Comment: Okay, given a sub-$\sigma$-algebra $\mathcal F$ of a $\sigma$-algebra $\mathcal A$, and an $\mathcal F$-measurable RV $Y$ and a general RV $X$, $Y= \mathbb E [X |\mathcal F]$ is equivalent with $\mathbb E[Y {\bf 1}(A)] = \mathbb E [\mathbb E[X|\mathcal F] {\bf 1}(A)]$ for all $A\in \mathcal F$. We are using this to prove the desired equality.
Comment: My (first) question is this. Call $X_n=\{ A \cap B | A \in F_n, B \in G_n\}$ and  $Y_n=F_n \cup G_n$. Than we have $\sigma(X_n)=\sigma(Y_n)=H_n$. You used $Y_n$. Why cannot you use $X_n$, which is smaller and generates $H_n$ ?
Comment: Ah, now I understand what you mean. We could have used $Y_n$ too, by checking the equality for any $A$ in $F_n$ and for $G_n$. That wroks too.


fatal error LNK1169: one or more multiply defined symbols found in game programming

Question: I've been training to use object orientated programming in c++ but I keep getting this error:
1>main.obj : error LNK2005: "int WIDTH" (?WIDTH@@3HA) already defined in GameObject.obj
1>main.obj : error LNK2005: "int HEIGHT" (?HEIGHT@@3HA) already defined in GameObject.obj
1>Spaceship.obj : error LNK2005: "int WIDTH" (?WIDTH@@3HA) already defined in GameObject.obj
1>Spaceship.obj : error LNK2005: "int HEIGHT" (?HEIGHT@@3HA) already defined in GameObject.obj
1>C:\Users\ted\documents\visual studio 2010\Projects\fullSpace\Debug\fullSpace.exe : fatal error LNK1169: one or more multiply defined symbols found

However to me, it seems that the entire code is written properly and the two ints are only mentioned in the Global header and all objects seem to be inheriting properly. However, like I just said, I'm a beginner in OOP so I really need an opinion : It is also worth mentioning that I am using allegro 5 to create a side shooter.
This is the code :
(main):
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_font.h>
#include <allegro5\allegro_ttf.h>
#include <allegro5\allegro_audio.h>
#include <allegro5\allegro_acodec.h>

#include <list>

#include "GameObject.h"
#include "Spaceship.h"
#include "Globals.h"

//controls

bool keys[] = {false, false, false, false, false};
enum KEYS{UP, DOWN, LEFT, RIGHT, SPACE};

//globals
Spaceship *ship;

std::list <GameObject *> objects;
std::list <GameObject *>::iterator iter;
std::list <GameObject *>::iterator iter2;

//prototypes

//main function
int main(int argc, char **argv)
{
    //shell variables
    bool done = false;
    bool render = false;

    float gameTime = 0;
    int frames = 0;
    int gameFPS = 0;

    //project variables

    ship = new Spaceship();

    ALLEGRO_BITMAP *shipImage = NULL;
    ALLEGRO_BITMAP *cometImage= NULL;
    ALLEGRO_BITMAP *explImage = NULL;
    ALLEGRO_BITMAP *bgImage = NULL;
    ALLEGRO_BITMAP *mgImage = NULL;
    ALLEGRO_BITMAP *plImage = NULL;
    ALLEGRO_BITMAP *mgImage2 = NULL;
    ALLEGRO_BITMAP *fgImage = NULL;
    ALLEGRO_BITMAP *titleImage= NULL;
    ALLEGRO_BITMAP *lostImage = NULL;

    //allegro variables
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer;
    ALLEGRO_FONT *font18;

    //initiate variables
    if(!al_init())
        return -1;

    display = al_create_display(WIDTH, HEIGHT);
    if(!display)
    return -1;

    //addon installation

    al_install_keyboard();
    al_init_image_addon();
    al_init_font_addon();
    al_init_ttf_addon();
    al_init_primitives_addon();
    al_install_audio();
    al_init_acodec_addon();

    //project init

    font18 = al_load_font("arial.ttf", 18, 0);
    al_reserve_samples(15);

    bgImage = al_load_bitmap("layer1.png");
    mgImage = al_load_bitmap("layer2.png");
    plImage = al_load_bitmap("starMG.png");
    mgImage2 = al_load_bitmap("layer3.png");
    fgImage = al_load_bitmap("layer4.png");

    shipImage = al_load_bitmap("spaceship.png");
    al_convert_mask_to_alpha(shipImage, al_map_rgb(255, 0, 255));

    cometImage = al_load_bitmap("asteroid-1-96.png");
    explImage = al_load_bitmap("explosion_3_40_128.png");

    titleImage = al_load_bitmap("Shooter_Title.png");
    lostImage = al_load_bitmap("Shooter_Lose.png");

    //object init
    ship->init(shipImage);

    //iter list
    objects.push_back(ship);

    srand(time(NULL));

    //timer init and startup

    event_queue = al_create_event_queue();
    timer = al_create_timer(1.0 / 60);

    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    al_register_event_source(event_queue, al_get_keyboard_event_source());

    al_start_timer(timer);
    gameTime = al_current_time();

    while(!done)
    {
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);

        //input
        if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
        {
            switch(ev.keyboard.keycode)
            {
            case ALLEGRO_KEY_ESCAPE:
                done = true;
                break;
            case ALLEGRO_KEY_LEFT:
                keys[LEFT] = true;
                break;
            case ALLEGRO_KEY_RIGHT:
                keys[RIGHT] = true;
                break;
            case ALLEGRO_KEY_UP:
                keys[UP] = true;
                break;
            case ALLEGRO_KEY_DOWN:
                keys[DOWN] = true;
                break;
            case ALLEGRO_KEY_SPACE:
                keys[SPACE] = true;
                break;

            }
        } else if(ev.type == ALLEGRO_EVENT_KEY_UP)
        {
            switch(ev.keyboard.keycode)
            {
            case ALLEGRO_KEY_ESCAPE:
                done = true;
                break;
            case ALLEGRO_KEY_LEFT:
                keys[LEFT] = false;
                break;
            case ALLEGRO_KEY_RIGHT:
                keys[RIGHT] = false;
                break;
            case ALLEGRO_KEY_UP:
                keys[UP] = false;
                break;
            case ALLEGRO_KEY_DOWN:
                keys[DOWN] = false;
                break;
            case ALLEGRO_KEY_SPACE:
                keys[SPACE] = false;
                break;
            }
        }

        else if (ev.type == ALLEGRO_EVENT_TIMER)
        {
            render = true;

            //fps
            frames++;
            if(al_current_time() - gameTime >= 1)
            {
                gameTime = al_current_time();
                gameFPS = frames;
                frames = 0;
            }

            //shipUpdate

            if(keys[UP])
                ship ->moveUp();
            else if(keys[DOWN])
                ship ->moveDown();
            else
                ship->resetAnim(1);

            if(keys[LEFT])
                ship ->moveLeft();
            else if(keys[RIGHT])
                ship -> moveRight();
            else
                ship ->resetAnim(0);

        }
        //render

            if(render && al_is_event_queue_empty(event_queue))
            {
                render = false;

                //begin render
                for(iter = objects.begin(); iter != objects.end(); ++iter)
                    (*iter)->render();

                //Flip Buffers
                al_flip_display();
                al_clear_to_color(al_map_rgb(0,0,0));
            }
        }

                //destroy objects

        //visual objects
    al_destroy_bitmap(cometImage);
    for(iter = objects.begin(); iter != objects.end(); ++iter)
        (*iter)->destroy(shipImage);
        iter = objects.erase(iter);

    al_destroy_bitmap(explImage);
    al_destroy_bitmap(bgImage);
    al_destroy_bitmap(mgImage);
    al_destroy_bitmap(fgImage);
    al_destroy_bitmap(titleImage);
    al_destroy_bitmap(lostImage);

        //audio objects
    /*
    al_destroy_sample(shot);
    al_destroy_sample(boom);
    al_destroy_sample(song);
    al_destroy_sample_instance(songInstance);
    */

        //shell objects
    al_destroy_font(font18);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    al_destroy_display(display);

    return 0;
}

(Globals.h):
#pragma once

int WIDTH = 1024;
int HEIGHT = 800;

enum ID{PLAYER, ENEMY, BULLET, BORDER, MISC};
enum STATES{TITLE, PLAYING, LOST};

(GameObject.h):
#pragma once

#include "Globals.h"
#include <iostream>

#include <allegro5/allegro5.h>

#include <allegro5/allegro_primitives.h>

class GameObject
{
private:
    int ID;
    bool alive;
    bool collidable;

protected:
    float x;
    float y;

    float velX;
    float velY;

    int dirX;
    int dirY;

    int boundX;
    int boundY;

    int maxFrame;
    int curFrame;
    int frameCount;
    int frameDelay;
    int frameWidth;
    int frameHeight;
    int animationColumns;
    int animationDirection;

    ALLEGRO_BITMAP *image;

public:
    GameObject();
    void virtual destroy(ALLEGRO_BITMAP *image);

    void init(float x, float y, float velX, float velY, int dirX, int dirY, int boundX, int boundY);
    void virtual update();
    void virtual render();

    float getX() {return x;}
    float getY() {return y;}

    void setX(float x) {GameObject::x = x;}
    void setY(float y) {GameObject::y = y;}

    int getBoundX() {return boundX;}
    int getBoundY() {return boundY;}

    int getID() {return ID;}
    void setID(int ID) {GameObject::ID = ID;}

    bool getAlive() {return alive;}
    void setAlive(bool alive) {GameObject::alive = alive;}

    bool getCollidable() {return collidable;}
    void setCollidable(bool collidable) {GameObject::collidable = collidable;}

    bool checkCollisions(GameObject *otherObject);
    void virtual collided(int objectID);
    bool collidableCheck();
};

(GameObject.cpp):
#include "GameObject.h"

GameObject::GameObject()
{
    x = 0;
    y = 0;

    velX = 0;
    velY = 0;

    dirX = 0;
    dirY = 0;

    boundX = 0;
    boundY = 0;

    maxFrame = 0;
    curFrame = 0;
    frameCount = 0;
    frameDelay = 0;
    frameWidth = 0;
    frameHeight = 0;
    animationColumns = 0;
    animationDirection = 0;

    image = NULL;

    alive = true;
    collidable = true;

}

void GameObject::destroy(ALLEGRO_BITMAP *image)
{
    if(image != NULL)
        al_destroy_bitmap(image);

}
void GameObject::init(float x, float y, float velX, float velY, int dirX, int dirY, int boundX, int boundY)
{
    GameObject::x = x;
    GameObject::y = y;

    GameObject::velX = velX;
    GameObject::velY = velY;

    GameObject::dirX = dirX;
    GameObject::dirY = dirY;

    GameObject::boundX = boundX;
    GameObject::boundY = boundY;

}

void GameObject::update()
{
    x += velX*dirX;
    y += velY*dirY;
}

void GameObject::render()
{

}

bool GameObject::checkCollisions(GameObject *otherObject)
{
    float oX = otherObject->getX();
    float oY = otherObject->getY();

    int obX = otherObject->getBoundX();
    int obY = otherObject->getBoundY();

    if(x + boundX > oX - obX &&
       x - boundX < oX + obX &&
       y + boundY > oY - obY &&
       y - boundY < oY + obY
       )
       return true;
    else
       return false;
}

void GameObject::collided(int objectID)
{

}
bool GameObject::collidableCheck()
{
    return alive && collidable;
}

(SpaceShip.h):
#pragma once

#include "GameObject.h"

class Spaceship : public GameObject
{
private :
    int lives;
    int score;
    int animationRow;

public :
    Spaceship();

    void destroy(ALLEGRO_BITMAP *image);

    void init(ALLEGRO_BITMAP *image = NULL);

    void update();
    void render();

    void moveUp();
    void moveDown();
    void moveLeft();
    void moveRight();

    void resetAnim(int pos);

    int getLives(){return lives;}

    int getScore() {return score;}

    void looseLife() {lives--;}
    void addPoint() {score++;}

    void collide(int objectID);

};

(SpaceShip.cpp):
#include "Spaceship.h"

    Spaceship::Spaceship()
    {}

    void Spaceship::destroy(ALLEGRO_BITMAP *image)
    {
        GameObject::destroy(image);
    }
    void Spaceship::init(ALLEGRO_BITMAP *image)
    {
        GameObject::init(20, 200, 6, 6, 0, 0, 10, 12);

        setID(PLAYER);
        setAlive(true);

        lives = 3;
        score = 0;

        maxFrame = 3;
        curFrame = 0;
        frameWidth = 46;
        frameHeight = 41;
        animationColumns = 3;
        animationDirection = 1;

        animationRow = 1;

        if(image != NULL)
        {
            Spaceship::image = image;
        }
    }

    void Spaceship::update()
    {
        GameObject::update();
        if(x < 0)
            x=0;
        else if ( x > WIDTH)
            x = WIDTH;
        if(y < 0)
            y = 0;
        else if (y > HEIGHT)
            y = HEIGHT;
    }
    void Spaceship::render()
    {
        GameObject::render();

        int fx = (curFrame % animationColumns) *frameWidth;
        int fy = animationRow *frameHeight;

        al_draw_bitmap_region(image, fx, fy, frameWidth, frameHeight,
            x - frameWidth /2, y - frameHeight /2, 0);

    }

    void Spaceship::moveUp()
    {
        animationRow = 0;
        dirY = -1;

    }
    void Spaceship::moveDown()
    {
        animationRow = 2;
        dirY = 1;
    }
    void Spaceship::moveLeft()
    {
        curFrame = 2;
        dirX = -1;
    }
    void Spaceship::moveRight()
    {
        curFrame = 1;
        dirX = 1;
    }

    void Spaceship::resetAnim(int pos)
    {
        if(pos == 1)
        {
            animationRow = 1;
            dirY = 0;
        }
        else
        {
            curFrame = 0;
            dirX = 0;
        }
    }

    void Spaceship::collide(int objectID)
    {
        if(objectID == ENEMY)
            lives--;

    }

Comment: possible duplicate of [error LNK1169 on global const char\*](http://stackoverflow.com/questions/13772206/error-lnk1169-on-global-const-char)
Answer: The two int variables are defined in the header file. This means that every source file which includes the header will contain their definition (header inclusion is purely textual). The of course leads to multiple definition errors.
You have several options to fix this.

Make the variables static (static int WIDTH = 1024;). They will still exist in each source file, but their definitions will not be visible outside of the source file.
Turn their definitions into declarations by using extern (extern int WIDTH;) and put the definition into one source file: int WIDTH = 1024;.
Probably the best option: make the variables const (const int WIDTH = 1024;). This makes them static implicitly, and also allows them to be used as compile-time constants, allowing the compiler to use their value directly instead of issuing code to read it from the variable etc.
Comment: @VikasPatidar You mean why putting `const char *whatever = something;` into a header results in multiple definition? That's because the `const` applies to the `char`, not to the pointer. So it's the same case as the non-static, non-const `int`. So again, you have to provide only a declaration (`extern`) in the header, or make the variable `static` or constant: `const char * const whatever = something;`.
Comment: Thank you very much but now I have a new error, I keep getting   'fullSpace.exe': Loaded 'C:\Windows\SysWOW64\dwmapi.dll', Cannot find or open the PDB file     for hundreds of .dlls, can you help again?
Comment: @user2189708 That's a different question. Have a search first.
Comment: @user2189708 That's a very different and unrelated problem. It probably has more to do with your Visual Studio project settings. You're better off asking a new SO question (after you've verified it's not already answered here).
Comment: @Angrew: Why it fails with `const char*`?
Answer: You can't put variable definitions in header files, as these will then be a part of all source file you include the header into.
The #pragma once is just to protect against multiple inclusions in the same source file, not against multiple inclusions in multiple source files.
You could declare the variables as extern in the header file, and then define them in a single source file. Or you could declare the variables as const in the header file and then the compiler and linker will manage it.
Answer: I answered a similar question here.
In the Project's Settings, add  /FORCE:MULTIPLE to the Linker's Command Line options.
From MSDN: "Use /FORCE:MULTIPLE to create an output file whether or not LINK finds more than one definition for a symbol."
That's what programmers call a "quick and dirty" solution, but sometimes you just want the build to be completed and get to the bottom of the problem later, so that's kind of a ad-hoc solution.
To actually avoid this error, provided that you want
int WIDTH = 1024;
int HEIGHT = 800;

to be shared among several source files, just declare them only in a single .c / .cpp file, and refer to them in a header file:
extern int WIDTH;
extern int HEIGHT;

Then include the header in any other source file you wish these global variables to be available.
Comment: Silencing the linker is not a solution. If you want to allow multiple definitions for functions, use the `inline` specifier. That's its primary use case. Starting with C++17 there's also support for inline variables. Another option would be to declare variables in a header that's included into multiple translation units. This is done using the `extern` specifier.
Comment: It was not a solution for me. warning LNK4088: image being generated due to /FORCE option; image may not run...
Answer: const int WIDTH = 1024;
const int HEIGHT = 800;

Comment: Yes, that's the problem, but why?
Comment: try to search 'one definition rule'
Answer: In my case I got error message one or more multiply defined symbols found, and I find another error message shows xxx function is already defined in ooo.dll, but in my project doensn't reference ooo.dll at all.
Then I recall I use vcpkg to install ooo.dll possibly globally before, so use vcpkg to remove uninstall ooo.dll package, and build again, the error is solved and build success.
Comment: In my case vcpkg was also the cause. When I changed [Use Vcpkg], [Install Vcpkg Dependencies] and [Use AutoLink] from "Yes" to "No" the errors were gone. This can be found under Project properties -> Configuration properties -> vcpkg.
Answer: just add /FORCE as linker flag and you're all set.
for instance, if you're working on CMakeLists.txt. Then add following line:
SET(CMAKE_EXE_LINKER_FLAGS  "/FORCE")

Comment: This might work, but it's terrible practice. Please, for the love of god and all things holy, **do not do this**. Fix the root issue instead.
Comment: YES! I AGREE, FIX THE ROOT ISSUE.  Rewrite Visual C's compiler to work like Visual C#.  The compiler shouldn't even be capable of including the same file or any of its elements more than once.  Make the compiler automatically link every symbol with no need for extern or header files.