orientação a objetos – Como funciona herança com “Constructor property promotion” no PHP 8?

O PHP 8 agora suporta constructor property promotion, para declarar propriedades da classe no argumentos do construtor:

class Foo {
    public function __construct(
        public $foo,
    ){}
}

Ao fazer a herança dessa classe e não chamar o construtor da classe herdada assim:

class Bar extends Foo {
    public function __construct(
        public $bar,
    ){}
}

$obj = new Bar('valor');

A propriedade definida na primeira classe $obj->foo ainda vai existir?

PHP xdebug3 com docker em ubuntu 20.04 não funciona

Boa tarde Devs tudo certo, estou tendo problemas ao tentar executar o xdebug com docker no ubuntu 20.04. Abaixo segue minhas config.

Docker-compose.yml

version: '3.7'

networks:
  supervisao:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: supervisao-web
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html/
      - ./.docker/web/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - mysql
    networks:
      - supervisao
  mysql:
    image: mysql:latest
    container_name: supervisao-db
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    volumes:
      - ./.docker/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: supervisao
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
      MYSQL_ROOT_PASSWORD: pass
      SERVICES_TAGS: dev
      SERVICES_NAME: mysql
    networks:
      - supervisao
  php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: supervisao-php
    volumes:
      - .:/var/www/html/
      - ./.docker/php/docker-xdebug.ini:/usr/local/etc/php/conf.d/php-docker.ini
    ports:
      - "9000:9000"
    networks:
     - supervisao
  redis:
    image: redis:latest
    volumes:
      - ./.docker/redis:/data
    ports:
      - 6379:6379
    networks:
      - supervisao

.ini

# File: docker-xdebug.ini
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.discover_client_host=1
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.log = /var/www/html/xdebug.log

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "log": true,
            "hostname": "0.0.0.0",
            "pathMappings": {
                "/var/www/html": "${workspaceFolder}"
            },
            "port": 9003,
            "ignore": [
                "**/vendor/**/*.php"
            ]
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9003
        }
    ]
}

Se alguem já tiver passado pelo mesmo problema e puder ajudar agradeço.

r – ¿Por qué no funciona mi bucle for? cuando hago cada paso individualmente SI obtengo los resultados que busco

Saludos querida comunidad
Estoy trabajando con una lista a la que he nombrado test1. Cada elemento de dicha lista es un data frame con la siguiente estrucutura

> str(test1((1)))
'data.frame':   31861 obs. of  3 variables:
 $ codigo_estacion: num  86011 86011 86011 86011 86011 ...
 $ fecha_hora     : chr  "2019-02-28 16:00:00" "2019-02-28 16:10:00" "2019-02-28 16:20:00" "2019-02-28 16:30:00" ...
 $ precipitacion  : num  0 0 0 0 0 0 0 0 0 0 ...

No todos los dataframes de la lista tienen la misma cantidad de filas, pero todos ellos si tienen exactamente los mismos campos y mismo tipo de datos en cada uno de ellos.
Mi propósito es crear un nuevo vector que contenga el codigo de estación de cada dataframe de la lista.

nomb <- character(0)

for(i in length(test1)) {
  nomb(i) = test1((i))(1,1)
}

Pero por algún motivo, que claramente estoy pasando por alto, obtengo lo siguiente:

> nomb
 (1) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(17) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(33) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(49) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(65) NA      NA      NA      NA      NA      NA      NA      "86299"

Como pueden ver solamente el último elemento del vector que he creado guarda el codigo de estación. Es algo que ya había hecho en el pasado con otros datos y funcionaba perfectamente bien.

Luego por ejemplo si pruebo lo siguiente:

> nomb(1) = test1((1))(1, 1)
> nomb(3) = test1((3))(1, 1)
> nomb
 (1) "86011" NA      "86027" NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(17) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(33) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(49) NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA     
(65) NA      NA      NA      NA      NA      NA      NA      "86299"

Logro agregar el codigo de estacion a los elementos uno y dos del vector nomb, es decir al hacer el proceso individualmente si funciona. Lo que me dice que mi error esta al escribir el ciclo for, pero no estoy pudiendo descifrarlo.

Por que el ascii no funciona en Mac?

estoy en macOs BigSur, según esta pagina: https://elcodigoascii.com.ar el 162 es el carácter ‘ó’, pero cuando lo compilo en la terminal me aparece un carácter así: ‘?’. Pero cuando coloco el 114 si pone el carácter ‘r’. Si alguien sabe como se soluciona o que podría hacer en este caso.

#include <iostream>

using namespace std;

int main()
{
    int n = 162;
    char a = (char)n;
    cout<<a;
    return 0;
}

php – Guzzle funciona normalmente no localhost porém não no servidor

Tenho um código que faz uma requisição pra uma API (bet365) que funciona normalmente no localhost, porém após subir ela pro servidor, me é retornado um erro 403.

Este é o código que estou executando:

$guzzle->post('https://mobile.bet365.com/lp/default.aspx', (
    'form_params' => (
        'txtUserName' => $username,
        'txtPassword' => $password,
        'txtType' => 47
    ),
    'headers' => (
        'User-Agent' => 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Mobile Safari/537.36',
        'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding' => 'gzip, deflate, br',
        'Cache-Control' => 'no-cache',
        'X-Requested-With' => 'XMLHttpRequest',
        'Connection' => 'keep-alive',
        'Accept-Language' => 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7'
    )
));

O retorno esperado (retornado corretamente no localhost):

stdClass Object
(
    (txtLH) =>
    (txtTS) =>
    (txtLS) => 1
    (txtLUN) => teste
    (txtIT) => 0
    (txtdbID) => 0
    (txtSA) => 0
    (txtLHV2) =>
    (standardAtTkn) => dc0f901f-ae1f-429a-8ffc-8ac749cd1110
    (standardAtTknExpires) => 2022-01-15T06:45:42.617383+00:00
    (uqid) =>
    (countryCode) => BR
    (authenticationStatus) => Authenticated
    (sessionId) => 64672313EE1B5E2FABB2153E664F0578000004
    (sessionCookieExpires) => 2021-01-15T19:45:43.4814971+00:00
    (deviceId) => 01dd5230-6d7b-4273-9c48-dff068e446ab
    (txtSTKN) =>
    (notificationsRequired) =>
    (notificationsActive) => 1
)

O retorno que estou recebendo no servidor:

Fatal error:  Uncaught GuzzleHttpExceptionClientException: Client error: `POST https://mobile.bet365.com/lp/default.aspx` resulted in a `403 Forbidden` response:
<!DOCTYPE html>
<html style="height:100%">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, sh (truncated...)

querybuilder – CI4 query builder con pagination no funciona

Mi modelo es:

class Producto2Model extends Model{
    protected $table      = 'productos';
    protected $primaryKey = 'idProducto';

   protected $allowedFields = ('idProducto','nombreP','idSubC','precio','descuento','imagen','descripcion');

}

En mi controlador realizo:

    $model2P = new Producto2Model();
    $data = (
        'productos' => $model2P->paginate(9),
        'pager' => $model2P->pager
    );

Lo cual funciona, pero al realizar más operaciones sobre el modelo deja de funcionar:

   $data = (
            'productos' => $model2P->join('subCategoria', 'idSubC = idSc','left')
                                    ->join('categoria', 'idCategoria = idCategoriasc','left')
                                    ->where('idCategoria =', $data('categoria'))
                                    ->paginate(9),
            'pager' => $model2P->pager
            );

Colorshceme en vim no funciona correctamente

Hola estoy usando powershell en windows terminal, funciona en el archivo de configuracion .vimrc pero no al editar un archivo,
introducir la descripción de la imagen aquí

pero cuando es otro archivo no funciona,

introducir la descripción de la imagen aquí

por ejemplo en el console.log no funciona solo en function

javascript – rangelider.js no funciona en movil

var cpu_cur_val = '2';
var ram_cur_val = '4';
var disk_cur_val = '8';
var backup_cur_val = '30';
var ips_cur_val = '0';

function new_range (wrapper) {




    // Variables to use later
    var rangeWrapper = document.querySelector('.' + wrapper + '__wrapper');
    var rangeInput = document.querySelector('.' + wrapper + '__input');
    var rangeValues = document.querySelector('.' + wrapper + '__values');
    var rangeValueNumberBottom = document.querySelector('.' + wrapper + '__value__number--bottom');
    var rangeValueTextBottom = document.querySelector('.' + wrapper + '__value__text--bottom');
    var rangeSliderPaths = document.querySelectorAll('.' + wrapper + '__slider__path');
    var mouseX = 0;
    var mouseY = 0;
    var mouseInitialY = 0;
    var mouseDy = 0;
    var mouseDyLimit = 25;
    var mouseDyFactor = 3;
    var max = parseInt(rangeInput.max);
    var rangeMin = parseInt(rangeInput.min);
    var rangeMax = parseInt(rangeInput.max);
    var rangeValue = parseInt(rangeInput.value);
    var rangeHeight = 320;
    var currentY = rangeHeight * rangeValue / max;
    var rangeMinY = rangeHeight * rangeMin / max;
    var rangeMaxY = rangeHeight * rangeMax / max;
    var scaleMax = 0.32;
    var scale, newPath, newY, newSliderY, lastMouseDy, rangeWrapperLeft, pageX, pageY;

    // Update slider value, initially using the `input` value
    updateValue();

    // Function to build the slider `path`, using the given `dy` and `ty` values
    function buildPath(dy, ty) {
        return 'M 0 ' + ty + ' q ' + mouseX + ' ' + dy + ' 120 0 l 0 320 l -120 0 Z';
    }

    // Function to update the slider value
    function updateValue() {


        // Clear animations if are still running
        anime.remove((rangeValues, rangeSliderPaths(0), rangeSliderPaths(1)));

        // Calc the `input` value using the current `y`
        rangeValue = parseInt(currentY * max / rangeHeight);

        // Calc `scale` value for numbers
        scale = (rangeValue - rangeMin) / (rangeMax - rangeMin) * scaleMax;
        // Update `input` value
        rangeInput.value = rangeValue;
        // rangeSum.innerText = rangeValue;
        rangeValueNumberBottom.innerText = rangeValue;
        // Match the javascript value to real input value;
        rangeInput.setAttribute('value', rangeValue);

        switch (wrapper) {
          default:
            rangeValueNumberBottom.innerText = rangeValue;
            break;
          case 'cpu':
            cpu_cur_val = rangeValue;
            break;
          case 'ram':
            if (rangeValueNumberBottom.innerText == '0') {
              rangeValueTextBottom.innerText = 'זיכרון (MB)';
              rangeValueNumberBottom.innerText = '500';
            } else {
              rangeValueTextBottom.innerText = 'זיכרון (GB)';
            }
            ram_cur_val = rangeValue;
            break;
          case 'disk':
            rangeValueNumberBottom.innerText = rangeValue + '0';
            disk_cur_val = rangeValue;
            break;
          case 'backup':
            if (rangeValueNumberBottom.innerText == '0') {
              rangeValueNumberBottom.innerText = '0';
            } else {
              rangeValueNumberBottom.innerText = rangeValue + '0';
            }
            backup_cur_val = rangeValue;
            break;
          case 'ips':
            ips_cur_val = rangeValue;
            break;
        }

        // Some maths calc
        if (Math.abs(mouseDy) < mouseDyLimit) {
            lastMouseDy = mouseDy;
        } else {
            lastMouseDy = mouseDy < 0 ? -mouseDyLimit : mouseDyLimit;
        }

        // Calc the `newSliderY` value to build the slider `path`
        newSliderY = currentY + lastMouseDy / mouseDyFactor;
        if (newSliderY < rangeMinY || newSliderY > rangeMaxY) {
            newSliderY = newSliderY < rangeMinY ? rangeMinY : rangeMaxY;
        }

        // Build `path` string and update `path` elements
        newPath = buildPath(lastMouseDy, rangeHeight - newSliderY);
        rangeSliderPaths(0).setAttribute('d', newPath);
        rangeSliderPaths(1).setAttribute('d', newPath);
    }

    // Function to simulate the elastic behavior
    function elasticRelease() {
        // Morph the paths to the opposite direction, to simulate a strong elasticity
        anime({
            targets: rangeSliderPaths,
            d: buildPath(-lastMouseDy * 1.3, rangeHeight - (currentY - lastMouseDy / mouseDyFactor)),
            duration: 150,
            easing: 'linear',
            complete: function () {
                // Morph the paths to the normal state, using the `elasticOut` easing function (default)
                anime({
                    targets: rangeSliderPaths,
                    d: buildPath(0, rangeHeight - currentY),
                    duration: 4000,
                    elasticity: 880
                });
            }
        });

    }

    // Handle `mousedown` and `touchstart` events, saving data about mouse position
    function mouseDown(e) {
        mouseY = mouseInitialY = e.targetTouches ? e.targetTouches(0).pageY : e.pageY;
        rangeWrapperLeft = rangeWrapper.getBoundingClientRect().left;
    }

    // Handle `mousemove` and `touchmove` events, calculating values to morph the slider `path` and translate values properly
    function mouseMove(e) {
        if (mouseY) {
            pageX = e.targetTouches ? e.targetTouches(0).pageX : e.pageX;
            pageY = e.targetTouches ? e.targetTouches(0).pageY : e.pageY;
            mouseX = pageX - rangeWrapperLeft;
            mouseDy = (pageY - mouseInitialY) * mouseDyFactor;
            newY = currentY + mouseY - pageY;
            // alert(newY);
            if (newY >= rangeMinY && newY <= rangeMaxY) {
                currentY = newY;
                mouseY = pageY;
            } else {
                currentY = newY < rangeMinY ? rangeMinY : rangeMaxY;
            }
            // After doing maths, update the value
            updateValue();
        }
    }

    // Handle `mouseup`, `mouseleave` and `touchend` events
    function mouseUp() {
        // Trigger elastic animation in case `y` value has changed
        if (mouseDy) {
            elasticRelease();
        }
        // Reset values
        mouseY = mouseDy = 0;
    }

    // Events listeners
    rangeWrapper.addEventListener('mousedown', mouseDown);
    rangeWrapper.addEventListener('touchstart', mouseDown);
    rangeWrapper.addEventListener('mousemove', mouseMove);
    rangeWrapper.addEventListener('touchmove', mouseMove);
    rangeWrapper.addEventListener('mouseup', mouseUp);
    rangeWrapper.addEventListener('mouseleave', mouseUp);
    rangeWrapper.addEventListener('touchend', mouseUp);
}

html – Scroll só funciona em uma div

<html>
    <head>
        <meta charset="UTF-8" />
        <title>Astro</title>
        <link rel="stylesheet" type="text/css" href="styles.css" media="screen" />
    </head>
    <body>
        <div class="membros" style="overflow: auto;">
            <div class="metade1" style="height: 100%; width: 50%; position: fixed; z-index: 1; top: 0; overflow-x: hidden; padding-top: 50px; left: 0; padding: 50px; background-color: black;">
                <div id="avatares" style="float: left;">
                    <div id="such" style="">
                        <img style=" border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;"
                        src="https://cdn.discordapp.com/avatars/740398084714135553/a_fd6c86a5108333255ccc248146708f9c.gif"
                    </div>
                    <div id="proud">
                        <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px; " src="https://cdn.discordapp.com/avatars/333388427053629441/03ca5ec0fbdb49a8d668bbe87364bd32.png"
                    </div>
                    <div id="magic">
                        <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/741857364113620992/a_c4ccd223f9d3ae8d7d49b51598a2225a.gif"
                    </div>
                    <div id="kettles">
                        <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/325275170572992514/a_9be814a7e2dd530f6c5004b5a8e7855e.gif"
                    </div>
                    <div id="kyo">
                        <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/287315272208089088/a_3005f36b83ccc267b66d1863b756d409.gif"
                    </div>
                    <div id="crumble">
                        <img style=" border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/739833577402925138/01138aa44ebeb4fd09a1d2343b45f13d.png"
                    </div>
                    <div id="hozz">
                        <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/721548699573944390/75abab6793c82fdfef9eecedf0af468a.png"
                    </div>
                </div>
            </div>
        </div>
        <div class="metade2" style="height: 100%; width: 50%; position: fixed; z-index: 1; top: 0; overflow-x: hidden; padding-top: 50px; right: 0; padding: 50px; background-color: black;">
            <div class="avatares" style="float: right;">
                <div id="fiuza">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/420246215255654440/3aa25dd3e96e952db3cf5de4c0a6c580.png"
                </div>

                <div id="lord">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;;" src="https://cdn.discordapp.com/avatars/405415563834294272/156822b1b766b74e86c790e154383cff.png"
                </div>

                <div id="velvet">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/521405803383750658/d5db362ccedd3fa43c75450c1970756d.png"
                </div>

                <div id="jota">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/585135809967947881/b81c2304764cee530f2ee591a3d730ce.png"
                </div>

                <div id="guxx">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/786235501694812190/a_acacd71fe0ff1da18d65d1841fcd5534.gif"
                </div>

                <div id="yuki">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/762851689480454154/0bb12d547d6d100cea426ab62da27773.png"
                </div>

                <div id="res">
                    <img style="border-radius: 50%; padding: 1px; border: 4px solid transparent; background: white; margin-bottom: 20px;" src="https://cdn.discordapp.com/avatars/739928423199277149/a_afbaf6ac3521d10d6521423bb4f875f2.gif"
                </div>
            </div>
        </div>
    </body>
</html>

Estou começando em front-end, e basicamente, a scroll só desce na parte direita, ou seja, na div metade2. Se algum descobrir, ficarei agradecido :]