• MySQL CONSTRAINT two `id` to one `id`?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Только двумя отдельными ключами.
    Ответ написан
    Комментировать
  • Как правильно работать с исключениями?

    @cicatrix
    было бы большой ошибкой думать
    Если б однозначный ответ на ваш вопрос существовал, он бы был включён в гайды по программированию.
    Существует очень много факторов, влияющих на то, как вы должны поступать с исключениями:
    1) Вообще их не ловить, пусть об этом заботится вызывающий
    2) Ловить и обрабатывать определённые исключения, остальные пробрасывать
    3) Ловить, генерить своё, обёртывать в него внутреннее и бросать своё
    4) Ловить всё, обрабатывать самостоятельно
    5) Душить всё

    (и это далеко не полный список).

    Определять это должна архитектура приложения и места данного конкретного куска кода в этой архитектуре.
    В целом, всегда следует подходить к коду с точки зрения удобства вызывающего. Если вызывающему (коду, пользователю, программе, сервису, приложению, и т. д.) нужен только результат и не важно, что там у вас случилось, то обрабатывать надо самому. Если вызывающему нужен полный контроль - то можно вообще не обрабатывать. Всегда есть какой-то разумный баланс между двумя крайностями, и каждый раз надо решать отдельно. Универсального решения здесь нет.

    В крупном проекте есть руководитель/архитектор, который должен задать либо общие правила, либо правила конкретно для вас. Для open source вопрос сложный - в библиотеках обычно исключения не обрабатываются, иногда пробрасываются.
    Если вы контролируете код от метода MyMethod и дальше вниз по иерархии вызовов, то решать вообще-то вам. Как вам удобнее, так и поступайте. Если внизу по иерархии другой код, то обычно, пока явно не оговорено обратное, поступать надо так же, как поступает код "снизу" - если бросает/пробрасывает, то и вы делайте так же, если нет - соответственно, и вы обрабатываете.
    Ответ написан
    Комментировать
  • Double join in update query?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Нашел такой пример:
    UPDATE applications a
    SET documents_taken_at = b.certificate_issued_at         -- we can reference joined table here
    FROM abiturients b                                       -- joined table
    WHERE 
        a.abiturient_id = b.id AND                           -- JOIN ON clause
        a.documents_taken_at::date < b.certificate_issued_at -- Subquery WHERE
    Ответ написан
    2 комментария
  • Как записать шифр атбаш в 3 строки?

    longclaps
    @longclaps
    Питончик, пример отсюда.
    def atbash(s):
        abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
        return s.translate(str.maketrans(
            abc + abc.upper(), abc[::-1] + abc.upper()[::-1]))
    
    print(atbash("Привет Мир!"))

    Если же нужна именно рекурсия, да еще на джаваскрипте - можно и так, но по-моему будет полное дерьмо:
    const abc = "abcdefghijklmnopqrstuvwxyz", t = {};
    for (let i = 0, j = abc.length; j;) t[abc.charAt(i++)] = abc.charAt(--j);
    const atbash = s => s ? (t[s.charAt(0)] || s.charAt(0)) + atbash(s.slice(1)) : s;
    
    console.log(atbash("hello, world!"));
    Ответ написан
    Комментировать
  • Как написать функцию итератор?

    Melkij
    @Melkij
    PostgreSQL DBA
    Это называется не итератором.

    insert into terms (term, freq) values (?, 1) on conflict (term) do update freq = excluded.freq + 1 returning freq;

    В функцию завернуть по желанию. 9.5+
    Ответ написан
    Комментировать
  • Какие стратегии повышения зарплаты существуют?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Центральный показатель для бизнеса, а следовательно и руководителей, как людей представляющих интересы этого самого бизнеса - это коэффициент возврата инвестиций (ROI). Соответственно, сотрудник должен приносить компании больше денег, чем потребляет. Естественно, что чем выше разрыв между затратами и прибылью, тем лучше, поэтому фонд оплаты труда руководитель должен держать на том минимальном уровне, который гарантирует бесперебойную работу сотрудников. Один из факторов этой бесперебойности - низкая текучка. Сотрудников терять нежелательно. И чем ценнее для компании сотрудник, чем более он профессионален и/или чем больше на него завязано, тем дороже обходится его потеря. Натурально в деньгах. Придётся затратить больше, чем обычно, денег на поддержание работы без него. Придётся затратить деньги и время (те же деньги) на поиск, найм, введение в работу, возможно, обучение нового сотрудника. При этом он может оказаться совсем неподходящих и цикл придётся повторить. Или может оказаться просто хуже прошлого и эффективность отдела снизится. Поэтому, когда сотрудник приходит просить прибавку, руководитель оценивает может ли этот сотрудник уйти или только блефует, насколько легко его будет заменить, какой урон компании будет нанесён его уходом. Потом руководитель оценивает стоимость расширения ФОТ - есть ли резервы, какой сейчас ROI, будет ли больший ROI от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

    Естественно, всё описанное справедливо для случая, когда руководитель - профессиональный менеджер. А то часто на месте руководителя сидит человек руководствующийся эмоциями и мутными соображениями вычитанными в сомнительной бизнес-литературе.

    Из этого вывод, стратегия проста - увеличивайте собственный профессиональный уровень на столько, чтобы свободно менять компанию, как только вас что-то перестало устраивать.
    Ответ написан
    4 комментария
  • Как сделать обычный throw вместо unhandledRejection в NodeJS?

    eternalSt
    @eternalSt
    Ответ на Ваш вопрос есть в офф документации
    Там же описана причина возникновения события "unhandledRejection".

    Вообще есть несколько решений этой задачи, например как это предложили Сергей и Владлен Хеллсайт здесь же в ответа.

    Другие варианты:
    let go = async () => {
        throw new Error('Some Error');
      }
    
    // можно выловить ошибку в другой async функции
      (async () => {
        try{
          await go()
        }
        catch(error){
          console.error(error); // напечатать лог
          process.exit(1); // вернуть код завершения отличный от нуля
        }
      })()
    
    // Или повесить catch на функцию `go` , это тоже сработает
      go().catch(error => { 
          console.error(error); // напечатать лог
          process.exit(1); // вернуть код завершения отличный от нуля
      })


    P.S. Если задать вопрос: "Какой шаблон лучше использовать?". То тут мнения расходятся. Как по мне, так нужно стараться всегда отлавливать ошибки, если это не возможно -- использовать process.on('unhandledRejection')
    Ответ написан
    Комментировать
  • По какой цене осуществляется транзакция в бирже?

    @rPman
    есть два подхода к написанию биржи
    * первый - все сделки лимитные, т.е. они не исполняются в тот же миг, даже если есть подходящий встречный ордер. На бирже в цикле постоянно крутится специальный бот, который покупает и продает ордера на свои деньги (вполне возможно что ставить блокировку на отмену ордеров, которые обрабатывает, чтобы обработка нескольких была атомарной, но это не обязательно)
    в результате, пересекающиеся ордера по разным ценам биржа может исполнить по своим ценам, тем что указали клиенты, а разницу взять себе в карман - формально все ок, клиенты попросили такую цену и они ее получили

    * второй - если сделка по цене пересекает чужой лимитный ордер - она становится filled order, т.е. происходит исполнение ютих двух или более ордеров, по той цене, что указали клиенты в лимитных ордерах
    Таким образом, клиент может смело указывать цену с запасом за границу текущего края рынка, но итоговая цена будет ему выгоднее. Некоторые биржи даже делают специальный тип ордеров без указания цены, какраз для купли продажи по текущему стакану.

    Чаще всего криптовалютные биржи выбирают второй метод.

    Оба решения дают море вариантов для мошенничества со стороны биржи (особенно это актуально, если вы играете с маржинальной торговлей), не знаю как здесь с регулированием, но в криптовалютах этого пока нет.
    Ответ написан
    1 комментарий
  • Подменить IP в строке запроса?

    @kisaa
    Нужен роутер линуксовый, на нем squid в прозрачном режиме, у squid'а настраиваются правила url_rewrite (обычно через внешние модули) - там можно сделать все что угодно.
    Ответ написан
    Комментировать
  • Как сделать чтобы при добавлении раздела в каталоге автоматически создавался пункт меню в битрикс?

    @MatasDragonV
    Если структура меню совпадает со структурой каталога - просто делаем файлик menu_ext.php гдепрописываем на битрикс АПИ получение структуры разделов каталога. Далее добавляете либо удаляете раздел - меню переформируется автоматически.
    Ответ написан
    Комментировать
  • Как отправить команду по COM/Serial port с помощю nodejs?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    'H' на конце - это всего лишь признак шестнадцатеричного значения, передавать его в Buffer.from не надо.
    Значение BCC необходимо предварительно рассчитать, взяв XOR всех байтов, входящих в команду. XX - просто обозначает расчётное значение (в данном примере должно быть 23H).
    Соответственно, строка должна выглядеть так:
    var data = Buffer.from("045002760323", "hex");
    Ну и, если полностью прочитаете описание протокола, то увидите, что после отправки команды необходимо получить от диспенсера подтверждение (ACK), ответ, и выдать ACK подтверждая получение ответа.
    Ответ написан
    4 комментария
  • Go + Websocket или NodeJS + Websocket?

    AlexMcArrow
    @AlexMcArrow
    Люблю РНР, да я такой!
    Мне кажется здесь все просто - деньги.
    Разраб на Ноде запросит Х, а разраб на ГО 2Х. Да и код на Ноде проще для большенства, даже не смотря кучу колбэков.
    Да и ГОшников пока не так много, вот через год или два - сравняются.
    Ответ написан
    Комментировать
  • Как организовать AJAX форму c включённым кешированием нас странице компонента на сайте под управлением 1С-Битрикс?

    winer
    @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    Можно форму подключить не в template.php catalog.element, а в component_epilog.php

    Если надо передать какие то данные о товаре в форму то можно эти данные добавить в component_epilog в result_modifier с помощью
    <?
    $arResult["FORM_DATA"] = [];
    $this->__component->SetResultCacheKeys(["FORM_DATA"]);


    Только не надо добавлять избыточные данные с помощью этого метода, иначе кеш будет не оправданно большой
    Ответ написан
    Комментировать
  • Нужна ли здесь связь 1:1 вместо расширения таблицы?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    Не стоит избегать джойна, ничего плохого от него не будет, делайте кошерно.
    Ответ написан
    Комментировать
  • Как уменьшить размер фото в CSS если в файле я этого не вижу?

    nakree
    @nakree
    Fullstack Developer
    Поскольку это инлайновый стиль, то скорее всего размеры выставляются где то в js
    Ответ написан
    Комментировать
  • Зачем в хромиум-браузерах включили прерывистое подчеркивание текста и как его отключить?

    kreotech
    @kreotech
    Абстрактно-ориентированный программист
    Пример: https://jsfiddle.net/kreoTech/3Lro6kma/4/

    Не проверял работоспособность в разных браузерах, но в chrome(v64) работает

    UPD:
    Используемое свойство css: text-decoration-skip-ink

    Возможно получится получить эффект и от этого свойства: text-decoration-skip

    Для установки на разных сайтах можно попробовать это расширение - User CSS или другое со схожим функционалом.

    Хотя может есть и в настройках браузера где-нибудь флажок.
    Ответ написан
    Комментировать
  • Пожалуйста, покажите пример POST запроса?

    Rema1ns
    @Rema1ns
    и так сойдет
    Подразумевается, что ваш шмат текста в поле формы

    var formElement = document.querySelector("form");
    var request = new XMLHttpRequest();
    request.open("POST", "submitform.php");
    request.send(new FormData(formElement));

    или добавить его самому

    var big_text = "И таак сойдееет!";
    var formElement = document.querySelector("form");
    var formData = new FormData(formElement);
    var request = new XMLHttpRequest();
    request.open("POST", "submitform.php");
    formData.append("big_text", big_text);
    request.send(formData);
    Ответ написан
    6 комментариев
  • Почему сервер останавливается при закрытии Putty?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    1. Добавить "&" в конце команды
    2. Использовать  screen
    3. Использовать для этого такие средства как systemd, supervisor и пр.
    Ответ написан
    Комментировать
  • Почему не получаю атрибут Href?

    var пропустили. Наверное работаете в строгом режиме.

    var elementClick = $(this).attr("href");
    var destination = $(elementClick).offset().top;
    Ответ написан
    1 комментарий