• Как получается формула N*(N-1) / 2?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Ну вы подставьте в формулу число. Допустим, N=3: 1+2+3 = 6. N(N-1)/2= 3*2/2 = 3. Не сходится!
    Правильная формула, все-таки N(N+1)/2.

    А разница в том, что в учебнике получается сумма от 1 до N-1. Т.е. в формулу прогрессии от 1 до N надо подставить N-1. Вот и получается (N-1)(N-1+1)/2 = (N-1)N/2
    Ответ написан
    1 комментарий
  • Почему System.out.println(1.55d) печатает 1.55, хотя это число не может быть представлено без потери точности?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Оно округляется, причем вы можете задать число знаков
    Ответ написан
  • BotFather поломался?

    @nozzy
    Symfony, Laravel, SQL
    Нужно пробовать еще больше разных устройств для создания бота и еще больше аккаунтов - только в этом случае в конце концов бот начинает работать, тут главное не отчаиваться и не останавливаться...
    Ответ написан
    6 комментариев
  • Как конвертировать чат в вопросы и ответы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно попробовать токенизировать все вопросы. И сложить их в векторы токенов.
    И прогнать через алгоритм кластеризации. В настройках ты задашь например 100 центров
    кластеров. На выходе ты получишь 100 наборов ключевых слов по самым популярным тематикам.
    Ответ написан
    2 комментария
  • Как доказать Google, что мой аккаунт разработчика не связан с другим?

    Мой английский так себе, но насколько я понял, причина в том, что мой аккаунт связан с еще каким-то, который был удален за нарушения

    Нет, смысл вот этой фразы:
    we have strong indications that your Developer Account is sharing information with, or is related to, other Developer accounts that have been terminated

    немного другой: "у нас есть весомые признаки того, что Ваш аккаунт делился информацией или был связан.." , то есть они не утверждают, что он связан, есть только признаки, которые кто-то на стороне Гугла счёл убедительными.
    Ответ написан
    3 комментария
  • Как заставить работать гигабитный интернет по длинному проводу?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Надо прозвонить кабель. Для этого есть специальные устройства, недорогие.
    Поскольку не поднимается гигабит, значит идет работа по 2-м парам, что дает 100 мбит.

    Кроме того, желательно чтобы кабель нигде не был круто загнут под 90 градусов, надо хотя бы по небольшому, но по кругу его поворачивать.
    Надеюсь, кабель одножильный (многожильный не следует класть, он лучше для патчкордов, он плохо обжимается и сильное затухание). Надеюсь, кабель не сильно китайский (медь, а не обмедненный алюминий или железо), и толщина жилы ближе к 0.52, а не к 0.48…
    Ответ написан
    1 комментарий
  • Как заставить работать гигабитный интернет по длинному проводу?

    @Drno
    Если кабель 8 жил (4 пары), то
    роутер не поддерживает гигабит
    сетевая на ПК не поддерживает гигабит
    Если поддерживают - попробовать вместо автосогласования скорости выставить гигабит вручную

    Перебиты какие то жилы - 4,5 или 7,8. т.к. 1,2,3,6 - дают 100мб
    прозвонить кабель, выяснить какие жилы перебиты

    криво обжат провод - переобжать

    Пока подозрение чисто на физику - перебиты жилы \ криво обжали
    Ответ написан
    Комментировать
  • Как в линуксе сравнить два дерева директорий, но без проверки содержимого файлов, только проверить совпадение размеров и дат?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    diff <(tree -sixfD --noreport Dir1) <(tree -sixfD --noreport Dir2)
    Ответ написан
    Комментировать
  • Компактная электронная схема для питания светодиодов от батарейки с регулировкой яркости и длительности?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Самым компактным по схемотехнике будет решение на микроконтроллере:
    - МК (например AtTiny, 6- или 8-ногая);
    - светодиод;
    - резистор;
    - выключатель;
    - (кнопка для смены режимов, можно совместить в выключателем);
    - батарейка.

    Плюсы:
    - самая простая схема;
    - возможна реализация самых разных режимов/эффектов (плавное переливание и пр.);
    - если надо сделать цветную подсветку, достаточно заменить СД на RGB и добавить ещё два резистора;

    Минусы:
    - требуется написание программы для МК;
    - требуется программатор для загрузки программы в МК.

    По питанию: не знаю сколько такая система проживёт от "таблетки", но самого маленького литиевого "пальчика" ей хватит надолго.
    Ответ написан
  • Как показать работодателю реализованные проекты?

    php666
    @php666
    PHP-макака
    нужно приложить портфолио из реализованных проектов
    не надо в такие места идти просто. это изначально неадекватное требование для программиста, который как правило работает в команде и даже если репозиторий будет публичный, весь код представляет собой смесь работы разных людей. никто не будет вытаскивать из репы твои коммиты и смотреть, что ты там делал.

    скорее всего hr-ы тупо скопипастили текст вакансии, но от этого не легче, это первый звоночек, что компания "рога и копыта" и какие hr, такой и остальной персонал
    Ответ написан
    Комментировать
  • Как показать работодателю реализованные проекты?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В портфолио показывают не код, а запущенный проект.
    Ответ написан
    Комментировать
  • Есть ли ещё движки, кроме Unity, код в которых можно написать на C#?

    @oleg_ods
    649d8b0360487355144904.jpeg
    Ответ написан
    Комментировать
  • Какие проекты должны быть в личном аккаунте Github при поиске работы?

    php666
    @php666
    PHP-макака
    никто туда, в гитхаб ваш, не смотрит.
    а если и смотрят, то без интереса, просматривая только пару файлов, находящихся "на виду" - проверено, смотрел по статистике
    Ответ написан
    1 комментарий
  • Какие проекты должны быть в личном аккаунте Github при поиске работы?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Так и сказать - публичных у меня нет.
    Никто никому ничего не должен.
    Ответ написан
    Комментировать
  • Port knocking как замена VPN?

    @TheBigBear
    СтарОдмины мы
    Когда грянула пандемия мне надо было почти сотню человек пересадить на удалёнку за два дня!
    У половины "комп общий", еще у нескольких маки, айпады-планшеты и компы с вистой-семеркой восьмеркой. Были даже компы без админского доступа!
    Тот еще зоопарк...
    Так что пришлось использовать ICMP-knocking (проще батник написать.. да и кто сниферит пингом с разной длиной пакета?)
    Плюс правило в микротике что этот белый адрес живёт только 8 часов
    Три года полёт нормальный
    была только одна попытка подбора RDP-пароля (домашний комп сотрудника был какой-то бякой заражен - но от этого даже VPN не спасёт)
    Привяжите задачу к событию в журнале безопасности RDP сервера - уведомлять о неудачной попытке входа
    Ответ написан
    Комментировать
  • Почему free() выводит ошибку?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Какая-то проблема из-за чего один и тот же элемент удаляется дважды, судя по всему.

    Вижу сразу ошибку в delete_node: Если вершина в списке всего одна, произойдет фингя: this_list->last не обновится, да и next_node->prev несуществующее будет переписано.
    Ответ написан
    2 комментария
  • Могут ли отказать в работе из-за административки 6-летней давности?

    @Drno
    Соц сети не указывай, кроме например 1 мессенджера. Остальное - твое личное дело, шли нафиг
    Если будут вопросы - рабочей соцсети нет (типо гитхаб к примеру), а личные я указывать не буду, т.к. это мое личное дело
    Административная - нет, всем плевать
    Ответ написан
    1 комментарий
  • Собрать пк или playstation 5?

    GavriKos
    @GavriKos
    Не хотите разбираться, а игры которые интересные есть на консоли? Берите консоль. Они как раз для того и сделаны, чтобы не думать "потянет/не потянет"
    Ответ написан
    Комментировать
  • Как виртуальные машины исполняют код и как правильно это реализовать?

    WNeZRoS
    @WNeZRoS
    Если вопрос при виртуальные машины по типу тех что используется для исполнения Java или C# кода, то инструкции в них гораздо проще. В CIL например, у большинства инструкций нет параметров, они просто берут нужные данные с конца стека. А когда параметры есть - он один: значение или токен переменной/функции.

    Можно посмотреть как C# преобразуется в инструкции виртуальной машины на sharplab.io, сопоставить и понять как оно выполняется.

    Например
    IL_0000: ldarg 1 // кладёт в стек первый аргумент
    IL_0001: ldarg 2 // кладёт в стек второй аргумент
    IL_0002: sub     // достаёт из стека два последних значения и отнимает последний от пред последнего (т.е. будет arg.2 - arg.1), результат складывается в стек
    IL_0003: brtrue.s IL_0011 // достаёт из стека значение, если оно не 0, переходит к инструкции IL_0011, если 0 исполнения идёт дальше на I_0005
    
    IL_0005: ldstr "zero" // загружает в стек строку "zero"
    IL_000a: call void System.Console::WriteLine(string) // вызывает вывод в консоль, из стека достаются N нужных значений для параметров (в данном случае 1), void функция ничего в стек не добавляет
    IL_000f: br.s IL_001b // переход (jump) к IL_001b
    
    IL_0011: ldstr "not zero" // загружает в стек строку "not zero"
    IL_0016: call void System.Console::WriteLine(string) // вызывает вывод в консоль, из стека достаётся 1 значения для параметра 
    
    IL_001b: ldstr "done" // загружает в стек строку ...
    IL_0020: call void System.Console::WriteLine(string) // ...


    Пример реализации простой виртуальной машины на основе примера выше

    (Код написан так чтобы работал, правильнее писать более безопасно и читабельнее)

    #include <stdio.h>
    
    enum Opcode {
        OP_LOAD_ARGUMENT,
        OP_LOAD_STRING,
        OP_SUBTRACT,
        OP_GOTO,
        OP_GOTO_IF_TRUE,
        OP_CALL,
        OP_RETURN
    };
    
    union Argument {
        int value;
        const void* pointer;
    };
    
    struct Instruction { 
        Opcode opcode; 
        Argument arg; 
    };
    
    void run_vm(const Instruction* instructions, const Argument* args) {
        Argument stack[16];
        
        Argument* stack_pointer = &stack[0];
        int address = 0;
    
        while(true) {
            const Instruction instruction = instructions[address];
            address++;
    
            switch(instruction.opcode) {
                case OP_RETURN:
                    return;
                
                case OP_LOAD_ARGUMENT:
                    *stack_pointer = args[instruction.arg.value];
                    stack_pointer++;
                    break;
    
                case OP_LOAD_STRING:
                    *stack_pointer = instruction.arg;
                    stack_pointer++;
                    break;
    
                case OP_SUBTRACT:
                {
                    stack_pointer--;
                    int b = stack_pointer->value;
                    
                    stack_pointer--;
                    int a = stack_pointer->value;
    
                    stack_pointer->value = a - b;
                    stack_pointer++;
                    break;
                }
    
                case OP_GOTO:
                    address = instruction.arg.value;
                    break;
    
                case OP_GOTO_IF_TRUE:
                    stack_pointer--;
                    if(stack_pointer->value != 0)
                        address = instruction.arg.value;
                    break;
    
                case OP_CALL:
                    void (* fn)(const void*) = (void (*)(const void*))instruction.arg.pointer;
                    stack_pointer--;
                    fn(stack_pointer->pointer);
                    break;
            }
        }
    }
    
    void print(const char* text) { printf("%s\n", text); }
    
    int main(int argc, char** argv) {
        const Instruction instructions[] = {
            /* 0 */ { OP_LOAD_ARGUMENT, { 0 } },
            /* 1 */ { OP_LOAD_ARGUMENT, { 1 } },
            /* 2 */ { OP_SUBTRACT, {} },
            /* 3 */ { OP_GOTO_IF_TRUE, { 0x7 } },
            /* 4 */ { OP_LOAD_STRING, { .pointer = "zero" } },
            /* 5 */ { OP_CALL, { .pointer = (void*)&print } }, // функции надо где-то регистрировать, чтобы знать сколько у них параметров и какого они типа
            /* 6 */ { OP_GOTO, { 0x9 } },
            /* 7 */ { OP_LOAD_STRING, { .pointer = "not zero" } },
            /* 8 */ { OP_CALL, { .pointer = (void*)&print } },
            /* 9 */ { OP_LOAD_STRING, { .pointer = "done" } },
            /* A */ { OP_CALL, { .pointer = (void*)&print } },
            /* B */ { OP_RETURN, {} }
        };
    
        const Argument args[] = { 
            { 100500 },
            { 777 }
         };
    
        run_vm(instructions, args);
        return 0;
    }



    Виртуальные машины для процессоров можно делать по такому же принципу, но они будут медленные и структура инструкций ограничена архитектурой процессора.
    Ответ написан
    Комментировать
  • Почему НЕ vim? Vim для серьезной разработки?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это не вопрос, а размазывание соплей. "Ой мне сказали то, ой мне сказали сё, а скажите ещё чего-нибудь". Ну и закономерно получаете полную панамку ответов от специалистов, которые vim в глаза не видели, но спешат поделиться своим экспертным мнением.

    Это было бы вопросом, если бы было задано в форме "можно ли из вима сделать полноценную IDE?".
    Ответ - можно.
    Любых плагинов как грязи. Руководств масса, на том же Хабре. Пользователей - ну, не столько сколько IDE intellJ - но тоже прилично. Есть сообщества, где всегда можно спросить. Вот там и надо задавать вопросы. Причем конкретные, а не вида "ой мне пацаны сказали что круто, а теперь другие пацаны сказали что отстой". Ну правда английский может понадобиться.
    Ответ написан
    Комментировать