Add
{code} {code} == == * * _ _ [] * #

87

2016-12-23 22:12:50
Когда дети спрашивают "Почему у бобра большие передние зубы?" взрослые обычно отвечают "Чтобы было удобнее грызть деревья и складывать из них плотину". Хотя правильный ответ должен быть "Потому что выжили бобры с большими зубами, а бобры с мелкими зубами вымерли. Так уж устроена эволюция — мы видим лишь выжившие виды, а их особенности — это то, что помогло им выжить. Природа не помогает животным, она лишь оставляет в живых тех, кто мутировал удачнее". Так что почти на все вопросы о животных можно не парясь отвечать "Остальные умерли". "Почему у зайчика зимой белая шубка?" — серых зимой сожрали волки. "Почему зебра полосатая?" — зебр без полос сожрали львы. "Почему у слона большие уши?" — слоны с маленькими ушами померли от жары. "А почему у капибары..." — остальные умерли, их сожрали, они подохли, смерть, смерть, смерть, будешь задавать много вопросов — выживет твой молчаливый брат.

86

2016-12-23 22:12:37
Если человек трезв, можно дать ему бутылку, и он будет пьян один вечер. Но можно дать ему билет в Петербург, и он будет пьян каждый день.

85

2016-12-23 22:11:55
— Слушай, может, поужинаем когда-нибудь? — Вообще-то хочется каждый день ужинать.

84

2016-12-23 22:11:42
Весь секрет существования заключается в избавлении от страхов. Не бойся того, что с тобой будет, твоё будущее от этого не изменится, зато настоящее станет спокойным.

83

2016-12-23 22:11:18
Будьте умнее
Умей вовремя отпускать даже тех, кого ты любишь. Это великий закон непривязанности. Когда ты держишься за человека из страха потерять свою любовь, ты теряешь больше. Сделай глубокий вдох, и позволь каждому отвечать за собственную жизнь.
Каждый принадлежит только себе.
Никогда не пытайтесь переделать другого человека. Принимайте его таким, какой он есть, все мы разные, но ведь в этом вся прелесть.
Людей близкими делает не похожесть, не лживые компромиссы и даже не совместное прошлое. Близкими людей делает искреннее наслаждение от разницы. Когда не пытаешься кого-то переделать, переубедить или отчаянно нафаршировать советами. Когда просто общаешься с человеком — как книгу читаешь — в чем-то согласен, в чем-то — нет, но все равно так интересно, изящно и легко, что не оторваться.
К сожалению, чтобы понять такие элементарные вещи, приходится платить высокую цену — терять дорогих людей.
Поэтому, будьте мудрее.

82

2016-12-23 22:11:08
Доктор: Вам больно вот так? (пару раз водит в кафе, трогает за всякое, а потом перестает звонить)

php ArrayAccess ArrayObject array_key_exists offsetExists isset

2016-10-28 13:08:23

class JustArrayAccess implements ArrayAccess {
    private $a;
    public function __construct($a) {
        $this->a = $a;
    }
    public function offsetExists($offset) {
        return array_key_exists($offset, $this->a);
    }
    public function offsetGet($offset) {
        return $this->a[$offset];
    }
    public function offsetSet($offset, $value) {
        $this->a[$offset] = $value;
    }
    public function offsetUnset($offset) {
        unset($this->a[$offset]);
    }
}
class JustArrayObject extends ArrayObject {};
class ArrayObjectRedeclareParent extends ArrayObject {
    public function offsetExists($index) {
        return parent::offsetExists($index);
    }
}

class ArrayObjectStrangeRedeclare extends ArrayObject {
    public function offsetExists($index) {
        if ($r = parent::offsetExists($index)) {
            $value = parent::offsetGet($index);
            if ($value === null) return false;
        }
        return $r;
    }
}
$arr = ['b' => 123, 'c' => null, 'd' => false];
echo "php:" . phpversion() . "\n";
foreach (['numba' => 'b', 'false' => 'd', 'null' => 'c'] as $key_type => $key) {
    foreach (
        [
            'Real array           ' => $arr,
            'ArrayAccess implement' => new JustArrayAccess($arr),
            'ArrayObject clean    ' => new ArrayObject($arr),
            'ArrayObject descendan' => new JustArrayObject($arr),
            'ArrayObject desc rede' => new ArrayObjectRedeclareParent($arr),
            'ArrayObject fucked up' => new ArrayObjectStrangeRedeclare($arr),
        ] as $obj_type => $a) {
        /** @var $a ArrayAccess */
        echo "$obj_type $key_type"
            . "\tarray_key_exists(\$key, \$a) = " . var_export(array_key_exists($key, $a), true)
            . "\t\$a->offsetExists(\$key) = " . ($a instanceof ArrayAccess ? var_export($a->offsetExists($key), true) : "n/a")
            . "\tisset(\$a[\$key]) = " . var_export(isset($a[$key]), true)
            . "\tempty(\$a[\$key]) = " . var_export(empty($a[$key]), true)
            . "\n";
    }
    echo "\n";
}

php:7.0.11-dev

Real array            numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = n/a    isset($a[$key]) = true  empty($a[$key]) = false
ArrayAccess implement numba     array_key_exists($key, $a) = false      $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject clean     numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject descendan numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject desc rede numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject fucked up numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false

Real array            false     array_key_exists($key, $a) = true       $a->offsetExists($key) = n/a    isset($a[$key]) = true  empty($a[$key]) = true
ArrayAccess implement false     array_key_exists($key, $a) = false      $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject clean     false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject descendan false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject desc rede false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject fucked up false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true

Real array            null      array_key_exists($key, $a) = true       $a->offsetExists($key) = n/a    isset($a[$key]) = false empty($a[$key]) = true
ArrayAccess implement null      array_key_exists($key, $a) = false      $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject clean     null      array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = false empty($a[$key]) = true
ArrayObject descendan null      array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = false empty($a[$key]) = true
ArrayObject desc rede null      array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject fucked up null      array_key_exists($key, $a) = true       $a->offsetExists($key) = false  isset($a[$key]) = false empty($a[$key]) = true

php:5.5.8-dev

Real array            numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = n/a    isset($a[$key]) = true  empty($a[$key]) = false
ArrayAccess implement numba     array_key_exists($key, $a) = false      $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject clean     numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject descendan numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject desc rede numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false
ArrayObject fucked up numba     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = false

Real array            false     array_key_exists($key, $a) = true       $a->offsetExists($key) = n/a    isset($a[$key]) = true  empty($a[$key]) = true
ArrayAccess implement false     array_key_exists($key, $a) = false      $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject clean     false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject descendan false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject desc rede false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject fucked up false     array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true

Real array            null      array_key_exists($key, $a) = true       $a->offsetExists($key) = n/a    isset($a[$key]) = false empty($a[$key]) = true
ArrayAccess implement null      array_key_exists($key, $a) = false      $a->offsetExists($key) = true   isset($a[$key]) = true  empty($a[$key]) = true
ArrayObject clean     null      array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = false empty($a[$key]) = true
ArrayObject descendan null      array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = false empty($a[$key]) = true
ArrayObject desc rede null      array_key_exists($key, $a) = true       $a->offsetExists($key) = true   isset($a[$key]) = false empty($a[$key]) = true
ArrayObject fucked up null      array_key_exists($key, $a) = true       $a->offsetExists($key) = false  isset($a[$key]) = false empty($a[$key]) = true

Mysql field value constraint, not equal to zero

2016-07-14 13:44:03
drop table if exists kucha;

create table kucha (`photo_id` int(10) unsigned NOT NULL);

insert into kucha (photo_id) values (1),(2),(0),(3),(0),(4);

delimiter $

create trigger ne_srat_v_kuchu before insert on kucha for each row
begin
if NEW.photo_id = 0 THEN
signal sqlstate '45000' set message_text = "Please do not insert zeroes into this table";
end if;
end$

delimiter ;

insert into kucha (photo_id) values (5);

insert into kucha (photo_id) values (2),(0),(3),(0),(4);

Recursive generator of recursive calling different functions

2016-06-30 12:24:20
$generator = null;
$generator = function ($depth, $f, $each) use (&$generator) {
    if ($depth == 0) {
        return $f;
    }
    $next_function = $generator($depth - 1, $f, $each);
    return function () use ($depth, $next_function, $each) {
        $each($depth);
        $next_function();
    };
};

$f = function() {
    echo "Last function\n";
    echo new \Exception();
};
$each = function($depth) {
    echo "This is $depth function\n";
};

$top = $generator(40, $f, $each);
$top();

php include mechanism

2016-05-13 12:29:38
1. cwd/$include_path/$filepath
2._DIR_$filepath
include_path empty string "", empty entry "something:", dot "." are all the same if include_path contains absolute path entries only then php automatically adds empty entry "" and tries that path
consider file hierarchy
/project/classes/includer.php
include 'includee.php';
include 'classes/includee.php';
/project/classes/includee.php
/project/www/includee.php

include_path is empty and cwd is /project and run classes/includer.php
tries for includee.php
/project/./includee.php (via cwd+include_path)
/project/classes/includee.php (via __DIR__)
tries for classes/includee.php
/project/./classes/includee.php (via cwd+include_path)

include_path is empty and cwd is /project/www and run ../classes/includer.php
tries for includee.php
/project/www/./includee.php (via cwd+include_path)
tries for classes/includee.php
/project/www/./classes/includee.php (via cwd+include_path)
/project/classes/classes/includee.php (via __DIR__)
/project/www/classes/includee.php (via cwd+include_path(auto))

include_path is /etc and cwd is /project/www and run ../classes/includer.php
tries for includee.php
/etc/includee.php (via include_path)
/project/classes/includee.php (via __DIR__)
tries for classes/includee.php
/etc/classes/includee.php (via include_path)
/project/classes/classes/includee.php (via __DIR__)
/project/www/classes/includee.php (via cwd+include_path(auto))
21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1