• Разные лицензии на программу и плагины к ней?

    @Z-r
    IANAL, TINLA.

    > Пишу прогу под GPLv3

    Так. А выбор условий лежит полностью на вас? То есть это либо целиком ваш труд (что почти невозможно :-), либо все хозяева всех зависимостей разрешили вам это делать по вашему собственному усмотрению?

    Если да, то обратите внимание, что вы же можете сколь угодно избирательно ослабить авторское лево GNU GPL — ну, к примеру, прямо дозволить компоновку с теми или иными несвободными библиотеками. И это не будет ей противоречить.

    > с возможностью подключения плагинов (динамическая линковка)

    Так.

    > Вопрос - будут ли какие-либо ограничения по лицензии у самих плагинов

    Ровно на этот вопрос дан развернутый ответ [0] в ЧаВО по лицензиям ГНУ.


    — Когда программа и ее внешние модули считаются единой комбинированной программой? (#GPLPlugins)

    Это зависит от того, как главная программа вызывает свои внешние модули. Если главная программа использует для этого fork и exec и они завязывают тесное общение через сложные структуры данных, общие или передаваемые туда и обратно, то они становятся единой комбинированной программой. Когда главная программа использует для вызова внешних модулей просто fork и exec, не завязывая тесного общения с ними, внешние модули остаются отдельными программами.

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

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

    — Если я пишу внешний модуль для применения с программой, выпущенной под GPL, какие требования это налагает на лицензии, под которыми я могу распространять свой модуль? (#GPLAndPlugins)

    См. [предыдущий] вопрос для определения того, считаются ли модули и главная программа единой комбинированной программой или раздельными произведениями.

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


    Чем он вас не устроил?

    > Могу ли я ограничить с какой лицензией можно подключать плагины (например, только MIT

    Если да (второй абзац), то да, только тогда уже ваша программа не будет под GNU GPLv3. *Такое* условие ей противоречит.

    [0] https://www.gnu.org/licenses/gpl-faq.ru.html#GPLPlugins

    ___
    P. S. И да, хотя вы об этом не спрашивали, не удержусь посоветовать не следовать дурным примерам, и не распространять свою работу на условиях GNU *L версии такой-то и _только_ такой-то, но всегда выбирать версии такую-то _или более позднюю_. Как этот рекомендовано в ней самой [a].

    Это справедливо даже в том случае, если сейчас у нее есть зависимость от работы под версией N ровно.

    [a] https://www.gnu.org/licenses/gpl-3.0.html#howto
    Ответ написан
    4 комментария
  • Как снимают ночные сцены без шумов?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В фильмах бывает дешевле срендерить, чем арендовать вертолет.
    Ответ написан
    3 комментария
  • Чем вы пользуетесь проводя аудит сайта?

    @Otrivin
    junior full-stack сисадмин
    Pr-cy
    SEO spider frog
    Pagespeed
    Pingdom tools
    Ответ написан
    Комментировать
  • Как получить адрес наследника?

    @Mercury13
    Программист на «си с крестами» и не только
    Именно так и делать. Потому что от вас требуется наладить шаблон «Public Морозов» в очень тяжёлых условиях (нет даже заголовка). Так что вам придётся повторять то, что обычно делают компилятор и линкер.

    Может помочь устройство таблиц виртуальных методов и dynamic_cast именно в вашем компиляторе. Например, на MinGW у меня получилось вот такое.
    #include <iostream>
    
    
    class A {
    public:
        int a;
        virtual void doA() {}
        virtual ~A() = default;
    };
    
    // class B, C, D, E  аналогично {
    
    class DE : public D, public E { int de; };
    class AB : public A, public B { int ab; };
    class CDE : public C, public DE { int cde; };
    
    class All : public AB, public CDE {};
    
    
    struct Vtable {
        uint32_t d[1];
    };
    
    union PObject {
        void* asVoid;
        Vtable** asVtable;
        char* asRaw;
    };
    
    int main()
    {
        All all;
        All* pAll = &all;
        E* pThis = &all;
        std::cout << pAll << " " << pThis << std::endl;
    
        PObject pX;
        pX.asVoid = pThis;
        while (true) {
            uint32_t offset = -(*pX.asVtable)->d[-2];
            std::cout << "Got offset " << offset << std::endl;
            if (offset == 0)
                break;
            pX.asRaw -= offset;
            std::cout << "Got pointer " << pX.asVoid << std::endl;
        }
    
        return 0;
    }

    До промежуточного потомка (DE или CDE) достучаться не удалось.
    Ответ написан
    3 комментария
  • Как сделать общий фон на Wordpress для head, body и footer?

    denisemenov
    @denisemenov
    1. Фон к head сделать невозможно. Только к header.
    2. Если фон применить к body, то всё, что в body автоматически получит фон, если не переназначено это правило. Т.е. для header и footer не надо отдельно ставить фон.
    3. htmlbook.ru/css/background-image
    Ответ написан
    Комментировать
  • Как заставить цикл ждать функцию?

    rockon404
    @rockon404
    Frontend Developer
    C использованием async/await можно так: https://jsfiddle.net/rockon404/ewpbd4bv/
    Ответ написан
    Комментировать
  • Как посчитать строки на С?

    longclaps
    @longclaps
    Нужно менять компилятор - этот совсем не годится.
    Ответ написан
    1 комментарий
  • Возможно ли организовать на Altera Max 2 такие интерфейсы как HDMI или, хотя бы, VGA?

    @ordweist
    Разработчик ПЛИС
    HDMI - это скоростной последовательный интерфейс. Его реально реализовать с использованием современных (и не очень) FPGA , имеющих на борту высокоскоростные приемопередатчики (MGT) (для Xilinx - GTX, GTP). CPLD не имеют таких ресурсов.
    VGA гораздо проще, но там "цветность" кодируется уровнем сигнала - больше напряжение, сильнее цвет. FPGA и CPLD не умеют формировать сигналы разных напряжений, только 0 или 1. VGA реализуются с использованием АЦП/ЦАП (пусть даже простейших, на резисторных сборках). Вместить управление 1х АЦП и 2х ЦАП в CPLD будет сложно (вероятнее всего невозможно).
    Чаще всего VGA в FPGA рассматриваются с промежуточным хранением кадра "внутри". В принципе, при рассмотрении задачи разделения кадра на два, его не нужно хранить - можно сразу пересылать дальше. Поэтому ваша задача с CPLD хотя бы теоретически реализуема. Однако, если по какой-то причине придется кадр вначале сохранить (неравные скорости АЦП/ЦАП, желание как то модифицировать кадр, переставить их, и тд), то задача сразу перейдет в область FPGA из-за наличия блоков внутренней памяти. А еще лучше использовать внешнюю оперативную память.

    К сожалению, видеоуроков подсказать не могу.
    Ответ написан
    3 комментария
  • Стоит ли в JavaScript использовать a++?

    @EEclipsEE
    Это не одно и тоже. Запустите консоле след код.

    var a=1, b=1;
    
    console.log(a++);
    console.log(++b);
    Ответ написан
    Комментировать
  • Стоит ли в JavaScript использовать a++?

    Stalker_RED
    @Stalker_RED
    Да, это нужная штука, и по моим наблюдениям постфиксная встречается значительно чаще, чем префиксная.

    Постфиксная возвращает текущее значение, и потом уже увеличивает переменную. Префиксная, сперва увеличивает, и возвращает уже увеличенное.

    GL3DHGA.png
    spoiler
    let i = 0, zzz = 'abcdef'
    while(i < zzz.length) {
      console.log(zzz[i++])
    }
    Ответ написан
    1 комментарий
  • Как выводить деньги с Upwork в России?

    vicodin
    @vicodin
    Имею некоторый опыт
    при таких мелких заработках нет смысла легализовываться, выводите хоть в свой банк прямо с апворка, хоть на пионер
    Ответ написан
    Комментировать
  • Поддерживаете ли вы IE8 в своих проектах?

    tema_sun
    @tema_sun
    Я даже на ie10 не особо смотрю. Если заказчик просит поддержку ie9 и меньше, то получает ценник раза в 4 выше, после чего моментально успокаивается.
    Ответ написан
    Комментировать
  • Поддерживаете ли вы IE8 в своих проектах?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Нет, к чему учитывать интересы пол процентной аудитории глобала? Да и думаю пользователи динозавров уже давно привыкли к корявой верстке и к частично неработающему функционалу сайтов, пусть страдают, чем больше будут страдать, тем быстрее забудем о кроссбраузерности. Я свой выбор сделал, у других может быть отличная от моей точка зрения.
    Ответ написан
    2 комментария
  • Почему не работает кнопка "Купить"?

    sabramovskikh
    @sabramovskikh
    Как минимум в консоли ошибки надо исправить

    Uncaught TypeError: Cannot read property 'CURRENCY' of undefined
    at Object.setCurrencies (core_currency.js?15103750412459:56)
    at (index):5597
    Ответ написан
    7 комментариев
  • С чего начать изучать математику?

    @mirosas
    Русский язык тоже не лишне бы подучить.

    Школьного курса математики для большинства задач будет достаточно. Купите учебники с 1 по 11 класс и изучайте.

    Как определитесь в сфере, там уже будете дальше копать (если молоды, то можно просто пойти в вуз из верхних 20% по РФ). В топ-вузах, на it-факультетах 2 года почти только тем и занимаются, что учат математику. Если не знаете зачем оно вам – лучше не теряйте времени больше, чем требуется для школьной программы. Быстро вы математику все-равно не изучите, поскольку cмысл изучения математики в трансформации мозга, что небыстрый процесс, хотя с другой стороны процесс этот лучше проходит в возрасте до 21 года. Поэтому если возраст ваш до 19 лет, то лучшие вузы страны по it-направлению ждут вас. Если вы ощутимо старше, или не тянете поступления в хороший вуз, то не стоит без прозрачной необходимости изучать дальше школьной программы. Но школьную программу по математике знать определенно стоит.
    Ответ написан
    4 комментария
  • С чего начать изучать математику?

    @SEOVirus
    Нафига она нужна, если не нужна? :)
    Как цель возникнет - так и учите по цели. Иначе посвятите жизнь тому, что вам не понадобится.
    Ответ написан
    1 комментарий
  • Qt - Как преобразовать int в QByteArray?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Вы не учли два важных факта - что char - знаковый тип и что не на всех машинах четырехбайтное число хранится в памяти в соответствии с порядком разрядов. (Остроконечные и тупоконечные архитектуры).

    Если числа нужно передавать по сети, их следует конвертировать в сетевой порядок байт. Это делает семейство методов hton...(). Обратное преобразование делают методы ntoh...().

    В QByteArray можно затолкать вот так:
    int i=42;
    QByteArray s=QByteArray::fromRawData(reinterpret_cast<const char*>(i),sizeof(i));
    Ответ написан
    Комментировать
  • Как с помощью Opencv определить, что изображение в градациях серого?

    2ord
    @2ord
    Для пикселя с идеально серыми оттенками будет верно R=G=B.
    Можно также перевести RGB в HSV (Hue-Saturation-Value) и проверять значение S. Идеальный оттенок серого в пикселе будет давать S=0. Для неидеального серого (например, сканировав лист A4 в сканере в режиме RGB) значение S будет недалеко от 0.

    Некоторые вычисляют для каждого пикселя
    delta = abs(R-G) + abs(G-B) + abs(B-R)
    Ответ написан
    1 комментарий