Pull to refresh
64
0.4
Михаил@michael_v89

Программист

Send message
В целом вы все правильно написали. Таких людей довольно много. Но попробую описать это немного с другой стороны.

чем отличается MAC-адрес от IP-адреса. Не понимает зачем нужен маршрут по умолчанию. Не знает разницы между коммутатором и маршрутизатором.
Я учился на программиста, и сейчас занимаюсь программированием, но тоже после универа был готов браться за любую работу практически за любые деньги. Хотя бы и сеть администрировать. И меня так же спрашивали, чем отличается маршрутизатор от коммутатора. Да откуда я знаю? Я ни разу не работал с этим, и вообще не работал по специальности. По сетям у нас 1 семестр был. Дайте мне пару недель испытательного срока, я разберусь во всем что требуется для этой работы. Нет, не знаешь, до свиданья.

и планировали организовывать внутрикорпоративное обучение, уже по конкретным областям (cisco, checkpoint, s-terra)
Чему можно было учить человека 6 лет (магистр) на факультете телекоммуникаций, что он не знает даже базовых вещей???
То есть вы считали, что человек запросто разберется во всех этих технологиях, не будучи с ними знаком, но не разберется в базовых вещах, если посвятить им пару занятий? Может он просто подзабыл то, что было на 3 курсе, университет этому неплохо способствует. Организуйте обучение для «совсем начинающих», или, как выше посоветовали, сотрудничайте с вузами.

Человек не успев даже узнать, чем занимается компания, интересуется сколько он будет получать и возможен ли карьерный рост.
Здесь свою роль играют всякие статьи типа «как вести себя на собеседовании». Не спросил — работодатель подумает, что ты не заинтересован в вакансии. Спросил — твои запросы не соответствуют квалификации. Пойди угадай.

Неужели кто-то надеется, что его возьмут на работу за красивое резюме?
На работу не возьмут, зато из-за наличия ключевых слов резюме попадется в поиске и может даже на собеседование позовут. Может даже какая-нибудь компания, у которой есть обучение новичков. (сам я так не делаю, если что)

Отсутствие инициативы
Здесь полностью согласен. Если не хотеть выполнить тестовое задание для проверки навыков, зачем тогда на собеседования ходить.

Я хочу сказать следующее. Работодателям не нужно смотреть на конкретные знания у новичков. Нужно смотреть, насколько человек способен разобраться в задаче и найти решение.
Мне тоже кажется, что размер зарплаты в данном случае это важный вопрос. А еще было бы неплохо конкретный текст вакансии привести.
Извините, я не понял ваш вопрос. SQL запрос всегда выполняется не в пустоте, а в каком-то окружении. DDoS-атака это действия человека, направленные на перегрузку атакуемой системы.
Я написал «Программы пока не умеют мыслить» и «Простое преобразование данных не сможет научить машину правильно на них реагировать». Если вы об этом, это означает не невозможность мыслить в принципе, а невозможность мыслить на текущей стадии развития программ. Особенно статических программ типа браузера, которые никогда не меняют своей реакции на входные данные.

Не знаю, почему вы считаете, что у программы вдруг появилась более сложная структура. Программе нет никакого дела, настоящими она датчиками управляет, или тестовыми на игрушечной железной дороге, и что вообще находится в цепочке взаимодействия после этих датчиков. Даже больше — программный код, отвечающий за обработку данных у автора на тестовом компьютере, с точностью до бита совпадает с кодом в реальной системе. Иначе это была бы другая программа с неизвестным поведением, и ее никто бы не стал вводить в эксплуатацию.
У меня нет такой предпосылки. Машина может мыслить аналогично человеку, собаке или пчеле. Я говорю о том, что даже если вы назовете SQL запрос, вычисляющий новое положение трамвайных стрелок, способностью «мыслить», никаких скрытых «мыслей» в нем от этого не появится. И ничего кроме этого вычисления он делать не будет. У интеллекта слишком сложная структура, чтобы он мог появиться сам по себе в вещах, которые для его поддержки не создавались.
Какой-то набор странных выводов и непонятных аналогий. Извиняюсь за кучу текста.

Кто сказал, что искусственный интеллект должен быть таким, как его проектировали?
Законы информации и вообще физики. Если мы сделаем программу, которая меняет свое поведение с течением времени, со временем она будет работать по-другому, но изменения будут по тем законам, которые в нее заложены.
А они — НЕ В КУРСЕ. Они уже сами ей подчиняются. Встраиваются в её логику.
Угу. А плотник встраивается в логику молотка. Молотки захватят мир.
Как она ведёт себя с реальными данными? Как управляет стрелками настоящих трамваев, а не тех, виртуальных, на которых тестировалась?
Программа, не меняющая логику работы в процессе выполнения, ведет себя с реальными данными так же, как с тестовыми. То, что тестирование может не проверить все возможные ситуации, это вопрос качества тестирования и качества разработки. С развитием искусственного интеллекта это никак не связано.
Как программа, которая анализирует все новостные статьи на планете, поговорит с программой анализирующей фотографии с вебкамер дорожной полиции, и как они потом поговорят с программой управляющей строительством небоскрёба? НЕТ ДАННЫХ.
Почему это нет? Никак они не поговорят. Потому что API у них разные. Если они вообще есть.
Просто из-за того, что программы мыслят иначе, совсем иначе
Программы пока не умеют мыслить. А вы почему-то приводите это как данность и делаете из этого какие-то выводы.
Вот браузер падает, и никто не может сказать, если ли какой-то смысл и порядок в этом действии. Программисты не вносили, вообще-то, такой способности в него — падать. Они даже с ней боролись. Но он же падает!
Потому что падать — это не отдельная способность, а нарушение условий работоспособности. Программа, которая не работает, падать не будет.
Но она оставляет после себя данные, которые потом куда-то попадут. И как они сработают дальше, как эта культура незримого, таинственного мира живёт, мы смутно представляем.
Они повлияют на программу которая их будет потом обрабатывать, так, как это будет в нее заложено. Здесь нет никакого таинственного волшебства.
Например, двадцать лет пытались переводить тексты анализируя структуру языка, а тут люди просто начали эмпирически прикладывать гигантские массивы сохранённых чатов и комментариев к разным экспериментальным, чуть ли не случайным алгоритмам.
Потому что 20 лет назад технические возможности по обработке огромных массивов данных были очень ограничены.
Часто, алгоритм был создан давным давно, для чего-то совсем другого, и человек думает, а попробую-ка я его к нашему огромному массиву данных, и вдруг получает что-то интересное. Что именно — понять невозможно, оценивается только решение какой-то конкретной задачи, но выходные данные могут содержать что-то невообразимое, вменённое и неявное.
Алгоритм выдаст те результаты, для которых он был создан. Если он должен классифицировать данные — он будет их классифицировать. Если в результатах будут искать решение конкретной задачи, неявные свойства никто не заметит. Если заметят — будут использовать алгоритм для решения еще и этой задачи. С развитием искуственного интеллекта это никак не связано. Простое преобразование данных не сможет научить машину правильно на них реагировать.
Алгоритмическая мутация. Алгоритмы оплодотворяют данные. Так копируется ДНК.
ДНК копируется так, но это не делает верным все высказывание. Так можно и SQL запрос, вычисляющий сумму двух столбцов, признать искусственным интеллектом. Не говоря уже о том, что ДНК есть у всех живых существ, а развитый интеллект только у определенного подмножества.
И то, что люди сами не могут нарочно создать сильный ИИ, не значит, что он не возникнет сам по себе
Не возникнет он сам по себе. Потому что для его существования и функционирования нужны определенные внешние условия и определенное внутреннее устройство. Например, почему у камней нет интеллекта?
И люди, невыспанные, понукающие друг друга, побегут её собирать, думая, что это они себе лучше делают и свои задачи решают, так же как трепетная лань кушая травку не понимает, что она кормит не только себя но и его — тигра.
Еще одна странная аналогия. Может никакого тигра и нет вовсе? Ну вот не водятся они в этой местности. Почему вы вообще сравниваете людей с ланью, а не тигром? Они оба заботятся о своем пропитании. А люди решают свои задачи для своих целей с помощью информации и устройств для ее обработки. Нет здесь никакого заговора, тайны или волшебства.

По теме статьи у меня такое мнение. ИИ не будет захватывать мир, если в него это стремление специально не заложить. Можно сделать терминаторов, дать им в руки автомат, но если не сказать «иди и стреляй», он никуда не пойдет. Обезьяна с гранатой с пистолетом может нажать на курок из любопытства, но в ИИ это любопытство надо специально заложить. И даже если в процессе функционирования поведение робота с ИИ будет менятся в опасную для общества сторону, можно всегда взять отладчик, найти причину, и сделать исправленную копию его интеллекта. Что в случае с обезьяной или человеком-диктатором, который захватил мир, довольно проблематично.
Нахлынули воспоминания… Еще придумал такой способ коротать время в автобусе — рандомно тыкаем кнопки на калькуляторе, пока табло не заполнится. Затем начинаем делить на целые числа: 2 — 3 — 5 — 7 — 113 — 12421… Получилась дробь — значит не делится, проверяем дальше. Глупо, конечно, но что делать, когда надоело в окно смотреть, а в сумке только калькулятор…
Да можно перемножать в уме 3-значные числа, просто как уже верно заметили нужна концентрация, а точнее способность держать в уме одновременно 9 слагаемых. Сам развлекался подобным в старших классах по дороге из лицея домой (2 часа на автобусе). Мне только непонятно, что это делает на главной хабра?
На форуме пользователь по имени Вася Пупкин отправил другому пользователю по имени Вася Пупкин сообщение «Привет, тезка», причем умудрился нажать кнопку «Отправить» 2 раза подряд за одну секунду. Какие семантически значимые свойства сущностей «Пользователь» и «Сообщение» вы бы выбрали в качестве их естественных ключей?
Приоритеты учитываются, ошибка в другом, но суть не в этом. Я просто хотел показать, что вы не ушли от использования объектов кода. То, что вы условие (ListIterator == 3 && Direction == 1) обозначили одной переменной C2, не означает, что вы от нее избавились. И программа все равно требует знаний в области программирования, несмотря на то, что часть переменных названа русскими буквами.

Вы неоднократно говорите в комментах что-то в стиле «это еще не реализовано» и «это будет потом». Я же вам предлагал в прошлой статье сделать сначала законченный пример приложения типа игры в дурака и посмотреть на объем и наглядность получившегося кода. При реализации этой змейки на обычном языке программирования объем кода в 3 раза меньше (у меня получилось 60 строк с отступами и комментариями). Зачем показывать промежуточные примеры, да еще и требующие отдельного интерпретатора команд?

Кстати, а зачем вы сделали отдельный интерпретатор? Не потому ли, что с такой системой триггеров очистить участок экрана AxB это не самая простая задача?)
Вы знаете, простой заменой регулярками из этой программы можно получить валидный код на PHP. Это значит, что ваша программа вполне себе императивна, и замена "=" на «устанавливать» не дает никаких преимуществ. К тому же абстракция протекает, что выражается в виде технической конструкции для языка Python «преобразовывать (? что элемент? как-что число,? во-что Temp? как-что буква).». У вас получился просто еще один язык программирования, никаким дальнейшим развитием языка императивность не исправить.

Если кому интересно
Заменяем, правим начало и конец, добавляем переводы строк, добавляем обвязку для запуска. При реализации рантайма по-быстрому «в лоб» происходит зацикливание в процедуре СP001 (триггер на изменение ListIterator) на строчке «set_value($ListIterator, 'значение', $ListIterator['значение'] + 1);». После добавления флага для запрещения срабатывания триггеров внутри триггеров программа выдает строку «CLR[13] SET[14] INIT[10:10] SET[A1] SET[A2] SET[A3] REFR[] ».

регулярные выражения
заменять в notepad++ или через javascript
^(\t*)создавать \?что \(=(.+) \?что иметь \?что имя \?какой (.+)\)\.\s*$
$1$GLOBALS['$3'] = ['имя' => '$3', 'значение' => [null]]; $$$3 = &$GLOBALS['$3']; $$$2 = &$$$3;


^(\t*)добавлять \?что (.+) \?чего (.+)\.\s*$
$1$$$3['значение'][] = null; $$$2 = &$$$3['значение'][count\($$$3['значение']\) - 1];


^(\t*)использовать \?что ([^\s\(\)]+) \(\?чего (.+), \?какой (\d+)\)\.\s*$
$1$$$2 = &$$$3['значение'][$4];


^(\t*)использовать \?что ([^\s\(\)]+) \(\?чего (.+), \?какой ([^\s\(\)]+)\)\.\s*$
$1$$$2 = &$$$3['значение'][$$$4['значение']];


элемент \(\?чего ([^\s\(\)]+), \?какой ([\d]+)\)
$$$1['значение'][$2]


элемент \(\?чего ([^\s\(\)]+), \?какой ([\w]+)\)
$$$1['значение'][$$$2['значение']]


^(\t*)устанавливать \?что (.+) \(\?чего (.+), \?какой (\d+)\)\.\s*$
$1set_value\($$$3, '$2', $4\);


^(\t*)устанавливать \?что (.+) \(\?чего (.+), \?какой (.+)\)\.\s*$
$1set_value\($$$3, '$2', $$$4['значение']\);


"\['значение'\]
"


выполнять \?что \(=процедура \?что иметь \?что имя \?какой Snake.(.+)\)\.
$1\(\);


\\"
"


^(\t*)регистрировать \?что ([^\s\(\)]+) \(\?на-что ([^\s\(\)]+), \?для-чего ([^\s\(\)]+)\)\.\s*$
$1unset\($$$2\); register\($$$2, '$3', $$$4\);


^(\t*)регистрировать \?что ([^\s\(\)]+) \(\?какой (.+), \?на-что ([^\s\(\)]+) \?какой (.+), \?для-чего (.+)\)\.\s*$
$1unset\($$$2\); register_ex\($$$2, $3, '$4', $5, $$$6\);


^(\t*)присоединять \(\?что ([^\s\(\)]+), \?к-чему ([^\s\(\)]+)\)\.\s*$
$1attach\($$$2, '$3'\);


^(\t*)печатать \?что значение \?какой (.+)\.\s*$
$1echo $2;


^(\t*)печатать \?что ([^\s\(\)]+) \?чего (.+)\.\s*$
$1echo $$$3['$2'];


\$\$
$


^(\t*)преобразовывать \(\?что (.+) \?как-что (.+), \?во-что (.+) \?как-что буква\)\.\s*$
$1$$$4 = $$$2;


^(\t*)увеличивать \(\?что (.+) \?чего (.+), \?на-сколько (\d+)\)\.\s*$
$1set_value\($$$3, '$2', $$$3['$2'] + $4\);


^(\t*)уменьшать \(\?что (.+) \?чего (.+), \?на-сколько (\d+)\)\.\s*$
$1set_value\($$$3, '$2', $$$3['$2'] - $4\);



\$\$
$


^(\t*)процедура (.+)\s*$
$1}\n\n$1function $2\(\)\n$1{\n\t\tforeach \($GLOBALS as $key => $value\) { $$$$key = &$GLOBALS[$key]; }\n


\$"
"


\#
//


код
<?php
    global $triggers, $allow_triggers;
    $triggers = [];
    $allow_triggers = true;


    function register(&$trigger, $type, &$variable)
    {
        global $triggers;

        $trigger = [
            'type' => $type,
            'reference' => &$variable,
            'property' => 'значение',
            'const_value' => null,
            'conditions' => [],
        ];

        $triggers[] = &$trigger;
    }

    function register_ex(&$trigger, $type, $property, $const_value, &$variable)
    {
        global $triggers;

        $trigger = [
            'type' => $type,
            'reference' => &$variable,
            'property' => $property,
            'const_value' => $const_value,
            'conditions' => [],
        ];

        $triggers[] = &$trigger;
    }

    function attach(&$trigger, $condition_name)
    {
        $trigger['conditions'][] = $condition_name;
    }

    function ref_equals(&$a, &$b)
    {
        $t = $a;

        $a = 1;
        $eq1 = ($b === $a);
        $a = 2;
        $eq2 = ($b === $a);

        $a = $t;
        return ($eq1 && $eq2);
    }

    function process_triggers(&$variable, $old_value, $new_value)
    {
        global $triggers, $allow_triggers;

        if (!isset($variable['имя'])) return;

        if (!$allow_triggers) return;
        $allow_triggers = false;

        $handlers = [];
        foreach ($triggers as $trigger) {
            if (!ref_equals($trigger['reference'], $variable)) continue;

            if (
                   $trigger['type'] == 'изменение' && $old_value != $new_value
                || $trigger['type'] == '==' && $new_value == $trigger['const_value']
                || $trigger['type'] == '!=' && $new_value != $trigger['const_value']
            )
            {
                foreach ($trigger['conditions'] as $condition_name) {
                    if (!isset($GLOBALS[$condition_name])) continue;

                    $condition = $GLOBALS[$condition_name];
                    $handlers[] = [
                        'обработчик' => $condition['обработчик'],
                        'приоритет' => isset($condition['приоритет']) ? $condition['приоритет'] : 0,
                    ];
                }

                if (isset($trigger['обработчик']) && isset($trigger['приоритет'])) {
                    $handlers[] = [
                        'обработчик' => $trigger['обработчик'],
                        'приоритет' => isset($trigger['приоритет']) ? $trigger['приоритет'] : 0,
                    ];
                }
            }
        }

        usort($handlers, function($a, $b) {
            if ($a['приоритет'] == $b['приоритет']) return 0;
            return ($a['приоритет'] > $b['приоритет'] ? -1 : 1);
        });

        foreach ($handlers as $handler) {
            eval($handler['обработчик']);
        }

        $allow_triggers = true;
    }

    function set_value(&$variable, $property, $new_value)
    {
        $old_value = isset($variable[$property]) ? $variable[$property] : null;
        $variable[$property] = $new_value;

        process_triggers($variable, $old_value, $new_value);
    }




    function Init()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Инициализация при загрузке модуля
        $GLOBALS['XList'] = ['имя' => 'XList', 'значение' => [null]]; $XList = &$GLOBALS['XList']; $список = &$XList;
        $список['значение'][] = null; $элемент = &$список['значение'][count($список['значение']) - 1];
        set_value($элемент, 'значение', 1);
        $список['значение'][] = null; $элемент = &$список['значение'][count($список['значение']) - 1];
        set_value($элемент, 'значение', 1);
        $список['значение'][] = null; $элемент = &$список['значение'][count($список['значение']) - 1];
        set_value($элемент, 'значение', 1);

        $GLOBALS['YList'] = ['имя' => 'YList', 'значение' => [null]]; $YList = &$GLOBALS['YList']; $список = &$YList;
        $список['значение'][] = null; $элемент = &$список['значение'][count($список['значение']) - 1];
        set_value($элемент, 'значение', 1);
        $список['значение'][] = null; $элемент = &$список['значение'][count($список['значение']) - 1];
        set_value($элемент, 'значение', 2);
        $список['значение'][] = null; $элемент = &$список['значение'][count($список['значение']) - 1];
        set_value($элемент, 'значение', 3);

        $GLOBALS['SnakeLength'] = ['имя' => 'SnakeLength', 'значение' => [null]]; $SnakeLength = &$GLOBALS['SnakeLength']; $поле = &$SnakeLength;
        set_value($поле, 'значение', 3);

        $GLOBALS['Temp'] = ['имя' => 'Temp', 'значение' => [null]]; $Temp = &$GLOBALS['Temp']; $поле = &$Temp;
        $GLOBALS['ListIterator'] = ['имя' => 'ListIterator', 'значение' => [null]]; $ListIterator = &$GLOBALS['ListIterator']; $поле = &$ListIterator;

        $GLOBALS['C1'] = ['имя' => 'C1', 'значение' => [null]]; $C1 = &$GLOBALS['C1']; $условие = &$C1;
        set_value($условие, 'обработчик', "СP001();");
        set_value($условие, 'приоритет', 3);

        $GLOBALS['C2'] = ['имя' => 'C2', 'значение' => [null]]; $C2 = &$GLOBALS['C2']; $условие = &$C2;
        set_value($условие, 'обработчик', "СP002();");
        set_value($условие, 'приоритет', 2);

        $GLOBALS['C3'] = ['имя' => 'C3', 'значение' => [null]]; $C3 = &$GLOBALS['C3']; $условие = &$C3;
        set_value($условие, 'обработчик', "СP003();");
        set_value($условие, 'приоритет', 2);

        $GLOBALS['C4'] = ['имя' => 'C4', 'значение' => [null]]; $C4 = &$GLOBALS['C4']; $условие = &$C4;
        set_value($условие, 'обработчик', "СP004();");
        set_value($условие, 'приоритет', 2);

        $GLOBALS['C5'] = ['имя' => 'C5', 'значение' => [null]]; $C5 = &$GLOBALS['C5']; $условие = &$C5;
        set_value($условие, 'обработчик', "СP005();");
        set_value($условие, 'приоритет', 2);

        $GLOBALS['C6'] = ['имя' => 'C6', 'значение' => [null]]; $C6 = &$GLOBALS['C6']; $условие = &$C6;
        set_value($условие, 'обработчик', "СP006();");

        $GLOBALS['C7'] = ['имя' => 'C7', 'значение' => [null]]; $C7 = &$GLOBALS['C7']; $условие = &$C7;
        set_value($условие, 'обработчик', "СP007();");

        $GLOBALS['C8'] = ['имя' => 'C8', 'значение' => [null]]; $C8 = &$GLOBALS['C8']; $условие = &$C8;
        set_value($условие, 'обработчик', "СP008();");

        $GLOBALS['C9'] = ['имя' => 'C9', 'значение' => [null]]; $C9 = &$GLOBALS['C9']; $условие = &$C9;
        set_value($условие, 'обработчик', "СP009();");

        unset($триггер); register($триггер, 'изменение', $поле);
        attach($триггер, 'C1');

        unset($триггер); register_ex($триггер, "!=", 'значение', 3, $поле);
        attach($триггер, 'C1');

        unset($триггер); register_ex($триггер, "==", 'значение', 1, $поле);
        set_value($триггер, 'обработчик', "TP001();");
        set_value($триггер, 'приоритет', 1);

        unset($триггер); register_ex($триггер, "==", 'значение', 3, $поле);
        set_value($триггер, 'обработчик', "TP002();");
        set_value($триггер, 'приоритет', 3);

        attach($триггер, 'C2');
        attach($триггер, 'C3');
        attach($триггер, 'C4');
        attach($триггер, 'C5');
        attach($триггер, 'C6');
        attach($триггер, 'C7');
        attach($триггер, 'C8');
        attach($триггер, 'C9');

        $GLOBALS['Direction'] = ['имя' => 'Direction', 'значение' => [null]]; $Direction = &$GLOBALS['Direction']; $поле = &$Direction;

        unset($триггер); register_ex($триггер, "==", 'значение', 1, $поле);
        attach($триггер, 'C2');
        attach($триггер, 'C6');

        unset($триггер); register_ex($триггер, "==", 'значение', 2, $поле);
        attach($триггер, 'C3');
        attach($триггер, 'C8');

        unset($триггер); register_ex($триггер, "==", 'значение', 3, $поле);
        attach($триггер, 'C4');
        attach($триггер, 'C9');

        unset($триггер); register_ex($триггер, "==", 'значение', 4, $поле);
        attach($триггер, 'C5');
        attach($триггер, 'C7');

        unset($триггер); register_ex($триггер, "==", 'значение', 1, $YList['значение'][3]);
        attach($триггер, 'C8');

        unset($триггер); register_ex($триггер, "==", 'значение', 10, $YList['значение'][3]);
        attach($триггер, 'C6');

        unset($триггер); register_ex($триггер, "==", 'значение', 1, $XList['значение'][3]);
        attach($триггер, 'C9');

        unset($триггер); register_ex($триггер, "==", 'значение', 10, $XList['значение'][3]);
        attach($триггер, 'C7');

        set_value($ListIterator, 'значение', 1);
        set_value($Direction, 'значение', 1);

        echo "INIT[10:10]\n";
        echo "SET[A1]\n";
        echo "SET[A2]\n";
        echo "SET[A3]\n";
        echo "REFR[]\n";
    }

    function TP001()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Триггер ListIterator==1
        echo "CLR[";
        $элемент = &$XList['значение'][1];
        $Temp = $элемент;
        echo $Temp['значение'];
        $элемент = &$YList['значение'][$ListIterator['значение']];
        echo $элемент['значение'];
        echo "]\n";
    }

    function TP002()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Триггер ListIterator==3
        set_value($ListIterator, 'значение', 1);
        echo "REFR[]\n";
    }

    function СP001()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator, ListIterator!=3)
        set_value($Temp, 'значение', $ListIterator['значение']);
        set_value($Temp, 'значение', $Temp['значение'] + 1);
        $элемент = &$XList['значение'][$Temp['значение']];
        set_value($XList['значение'][$ListIterator['значение']], 'значение', $элемент['значение']);
        $элемент = &$YList['значение'][$Temp['значение']];
        set_value($YList['значение'][$ListIterator['значение']], 'значение', $элемент['значение']);
        set_value($ListIterator, 'значение', $ListIterator['значение'] + 1);
    }

    function СP002()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==1)
        $элемент = &$XList['значение'][$ListIterator['значение']];
        $Temp = $элемент;
        set_value($YList['значение'][$ListIterator['значение']], 'значение', $YList['значение'][$ListIterator['значение']]['значение'] + 1);
        echo "SET[";
        echo $Temp['значение'];
        echo $YList['значение'][$ListIterator['значение']]['значение'];
        echo "]\n";
    }

    function СP003()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==1)
        $элемент = &$XList['значение'][$ListIterator['значение']];
        $Temp = $элемент;
        set_value($YList['значение'][$ListIterator['значение']], 'значение', $YList['значение'][$ListIterator['значение']]['значение'] - 1);
        echo "SET[";
        echo $Temp['значение'];
        echo $YList['значение'][$ListIterator['значение']]['значение'];
        echo "]\n";
    }

    function СP004()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==4)
        set_value($XList['значение'][$ListIterator['значение']], 'значение', $XList['значение'][$ListIterator['значение']]['значение'] - 1);
        $элемент = &$XList['значение'][$ListIterator['значение']];
        $Temp = $элемент;
        echo "SET[";
        echo $Temp['значение'];
        echo $YList['значение'][$ListIterator['значение']]['значение'];
        echo "]\n";
    }

    function СP005()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==4)
        set_value($XList['значение'][$ListIterator['значение']], 'значение', $XList['значение'][$ListIterator['значение']]['значение'] + 1);
        $элемент = &$XList['значение'][$ListIterator['значение']];
        $Temp = $элемент;
        echo "SET[";
        echo $Temp['значение'];
        echo $YList['значение'][$ListIterator['значение']]['значение'];
        echo "]\n";
    }

    function СP006()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==1, Y[3]==10)
        set_value($Direction, 'значение', 4);
    }

    function СP007()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==4, X[3]==10)
        set_value($Direction, 'значение', 2);
    }

    function СP008()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==2, Y[3]==1)
        set_value($Direction, 'значение', 3);
    }

    function СP009()
    {
        foreach ($GLOBALS as $key => $value) { $$key = &$GLOBALS[$key]; }

        // Условие (ListIterator==3, Direction==3, X[3]==1)
        set_value($Direction, 'значение', 1);
    }


    Init();



Где-нибудь можно посмотреть весь листинг программы из видео?
Не специалист в 3D графике, но мне кажется, можно сделать так. На сервере делать не весь рендер, а только базовый просчет — чтобы z-буфер заполнить. То есть по сути одноцветные стены без текстур и прочего. Игрок — контур из нескольких точек. Если хотя бы одна точка проецируется на камеру другого игрока, значит первого игрока видно из-за стены. Только после этого на клиент второго отправляются координаты первого. Нормальный рендер производится на клиенте, как обычно.
Исправлять уязвимость в драйвере мы не будем, просто сделаем функцию блокировки шрифтов. Прикольно, че.
Заниматься чем-то, нарушающим священное волеизъявление здешних господ на контент, который и только который они хотят видеть вокруг себя… уже есть оглядывающиеся владельцы сайтов, недополучающие до 30% денег с рекламы…

Никогда не понимал такую логику. Извините, мне какая разница, как владелец деньги зарабатывает? И почему я должен ему в этом помогать?
Сайт поддержать? Обычно есть альтернативы. Почему сразу на другой сайт не пошел? Да потому что этот сайт в поиске первым был, а тот десятым. На тех сайтах, у которых аналогов нет, и реклама особо не мешает.
На большинство сайтов я захожу через выдачу поисковика по вполне определенному запросу. Мне не нужна информация, не соответствующая этому запросу, и к тому же я не собираюсь в момент просмотра сайта что-то покупать или подписываться на какие-то услуги. Если вдруг понадобится, я поищу информацию об этом отдельно, сравню варианты и выберу то, что мне больше подойдет по цене/качеству.

Навязчивая реклама это хуже спама. Спам это реклама, предлагаемая без получения согласия, а тут реклама предлагается несмотря на явное запрещение. Я отключил рекламу, значит она в данный момент меня не интересует. Мне кажется, стоит бороться с такими сайтами аналогичными методами.

Отдельный вопрос это содержимое рекламы. Допустим, я зашел на некоторый сайт посмотреть новую серию сериала за чашечкой чая, а там надпись «ШОК! Грибок можно вылечить простым средством...». С фотографиями и анимацией. Пока что блокировщик помогает, но если не будет, я просто не буду посещать такой сайт.

Я разделяю общее мнение, что реклама не должна быть навязчивой. И это не отдельный вопрос, а прямая причина. Хорошие методы обхода блокировки будут применять не только «хорошие, нужные и контенто-богатые сайты, у которых реклама — единственный источник дохода», но и все остальные. Так что в целом ситуация не изменится, разве что технические решения будут сложнее.

Пусть реклама висит себе сбоку, пока не мешает. А еще было бы неплохо, если бы она показывалась, к примеру, 1 раз из 10. Чтобы не отвлекать от основного контента. Тогда можно было бы и глянуть иногда, что там интересного есть. Но это уже так, мелочи и хотелки…

Также хотел бы написать по технической части. Зачем писать статью с примером, который нельзя использовать? Раз уж подняли такую тему, то показали бы сразу рабочее решение с описанием всех нюансов, кому надо допилит сам. Тем более что есть другие проблемы — скрытие средствами CSS, блокировка баннеров определенного размера. Еще бывают рекламные скрипты, которые URL генерируют кодом.
Не автор коммента, но попробую рассказать, зачем я ушел из C++ на PHP.

Просто не было работы на C++ в моем городе. Совсем. И в соседних городах тоже редко появлялись. Да и опыт обычно требовался. Зато на PHP вакансий было гораздо больше. После универа я знал только C++, писал на нем все лабы и курсовые. Еще знал ассемблер, но его можно не считать. Помаявшись полгода по небольшим халтуркам, решил изучить веб-программирование. Поначалу было непривычно, потом оказалось, что это очень удобно, когда строки обрабатываются на уровне языка. Когда не надо преобразовывать числа в строки и обратно вручную. Или следить за границами массивов и правильным доступом в память. А через HTML и CSS закодировать интерфейс в большинстве случаев проще, чем на C++ — попробуйте через device context нарисовать на форме поле для тетриса. Но знание C++ дало мне понимание, как программа работает внутри — например, что сравнение строк это не то же самое, что сравнение целочисленных переменных, и оно требует дополнительных ресурсов, или как работает передача по ссылке и чем она отличается от передачи по значению.

Hello world на обоих этих языках написать несложно, а вот вывести табличку с разнородными данными из БД и внизу еще строчку «Итого» на PHP будет попроще.
Cамомодификация редко используется не потому, что такие программы сложно писать, а потому, что их сложно понимать (и, как следствие, поддерживать). Для вирусов или обфускаторов это цель, для упаковщиков программного кода техническая необходимость. Можете привести примеры, когда самомодификация упрощает написание и поддержку кода?
Любая интеллектуальная система подразумевает наличие процесса обучения… Такое изменение поведения должно выполнятся специальными средствами метапрограммирования и в конечном счете приводит к внесению изменений в исходный код интеллектуальной программы.

Не знаю вашей специализации, возможно вы хороший специалист в этой области, но насколько мне известно, экспертные системы или распознающие нейросети не меняют своего исходного кода в процессе обучения. Меняется реакция программы на данные, но движок остается тот же.

и делает практически невозможным изменение программой самой себя

И хорошо, что делает. Самомодифицирующаяся программа еще хуже, чем куча goto.

Во-первых, дополнительное условие if (s[i]==c) нельзя добавить в произвольное место программы, а только внутрь цикла FOR.

И хорошо, что нельзя. Где его потом искать в произвольном месте среди сотни тысяч строк кода.

Во-вторых, поскольку внутри цикла FOR теперь больше одной инструкции, его нужно дополнить фигурными скобками.

Хороший аргумент, чтобы начать писать в другой парадигме. Кстати, некоторые стандарты кодирования обязывают заключать в фигурные скобки даже один оператор.

В-третьих, порядок добавляемых инструкций не является произвольным. Их перестановка приведет к некорректному поведению программы

Перестановка инструкций в теле обработчика события тоже приведет к некорректному поведению программы.

И тогда, в определенный момент запустится ее обработчик, который будет смотреть «есть ли у меня козырь?»…
Только практика покажет, придется проблему решать, или лучше игнорировать ...

Кстати, почему вы не попробовали реализовать свою идею на практике? Возьмите игру в дурака, или к примеру тетрис, и попробуйте реализовать на javascript, в нем есть средства для работы с событиями и их обработчиками. Результат опубликуете в статье. Предполагаю, что первая проблема, с которой вы столкнетесь — зацикливание событий change, когда в обработчике изменения одной переменной меняется вторая, а в обработчике второй первая.
Спасибо за изменения, даже не ожидал такого эффекта. Сервис действительно неплохая вещь.

Information

Rating
2,271-st
Location
Россия
Registered
Activity