• Как переписать структуру таблиц или запросы, чтобы работал индекс для моих выборок?

    sim3x
    @sim3x
    3НФ будет выглядеть так
    domain_zone:
      parent = ForeignKey(domain_zone)
      name = Text
    
    site_page
      domain_zone = ForeignKey(domain_zone)  
      url = URL


    Суть такова: есть корневая доменная зона "." точка.
    Есть доменная зона com, у нее parent точка
    У сайта bbc.com parent будет указывать на com

    Вобщем делаем аналогично DNS
    Ответ написан
    1 комментарий
  • Как переписать структуру таблиц или запросы, чтобы работал индекс для моих выборок?

    @ollisso
    Для начала объясню почему индексы в вашем случае не работают и не могут работать.

    > OR links.domain LIKE CONCAT(sites.domain, '.%')

    CONCAT - это функция, и вы работаете с результатом функции.
    Т.е. получается что в вашем запросу нужно:
    1. выбрать все строки из links
    2. подсодеденить к каждой строке по sites.domain или sites.domain результат фунции.
    => нужно посчитать каждую строку каждый раз.
    Это очень много.

    что я бы сделал:
    1. создал таблицу доменов
    в ней:
    id | main_id |domain
    1 | 1 | com.youtube
    2. | 1 |com.youtube.www
    3. | 1 |com.youtube.subdomain


    Во всех таблицах - перешёл бы на этот ключ.
    2. тогда ваша выборка сокращается до:

    SELECT links.id, links.url, sites.id AS site_id, sites.description 
    FROM links
    LEFT JOIN domains ON links.domainId = domains.id
    LEFT JOIN sites ON sites.id = domains.main_id

    (смутно понимаю что вы хотели в этом запросе, поэтому уж не обессудьте :) )

    Т.е. основной посыл:
    переходите на int- ключи

    PS: Так же это называется нормализация базы данных. Хранить много одинаковых строк - это плохо.
    Ответ написан
    5 комментариев
  • Как получить данные по https в qt?

    @s0L
    У вас же в логе написано, что не может найти либу OpenSSL
    Ответ написан
    1 комментарий
  • Перегрузки методов без дублирования кода в C#?

    @tex0
    Что вы делаете в таком случае?...Разбиваете внутренности метода на отдельные методы и выносите их отдельно, обращаясь к ним в каждой из перегрузок?

    This!
    Это лучше чем дублировать код, от которого потом рябит в глазах=).
    Лично я, имея длинный метод, всегда разрезаю его на подзадачи, тем самым выделяя основной функционал, а весь остальной обвес получается как частные случаи (это ещё и полезно для развития навыка классификации данных).
    Ответ написан
    Комментировать
  • Как хранить значения парметров в PostgreSQL?

    @FireGM
    Использовать jsonb
    Ответ написан
    Комментировать
  • Популярен ли стек .NET в написании приложений для банковского сектора?

    vawsan
    @vawsan
    Frontend Developer
    Работаю в этой сфере и могу сказать так: весь корпоративный и enterprise софт на 95% на ASP.
    Ответ написан
    Комментировать
  • Как хранить IP в базе?

    @Zzzz9
    Может я не отвечу на ваш вопрос, но ipv4 это 4 байта, разделенных точкой
    ping 0x5f.0x64.0xb4.0xc8
    Обмен пакетами с 95.100.180.200 по с 32 байтами данных:
    Ответ от 95.100.180.200: число байт=32 время=64мс TTL=53


    ipv6 значит 16 байт
    Ответ написан
    1 комментарий
  • На чем лучше писать программы под Windows?

    @cthulhudx
    C#(WPF),C++(Qt)
    Ответ написан
    Комментировать
  • С# работа с COM-портами, как работает принцип?

    @vilgeforce
    Раздолбай и программист
    Информация, внезапно, передается через тот самый COM-порт. Если порты физически проводами не соединить - передачи информации между экземплярами программы не будет.
    Ответ написан
  • Подойдет ли такой вариант получения опыта?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Да.
    Ответ написан
    Комментировать
  • Как сделать быстрое переключение между ОС с сохранением состояния?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Так гибернация и работать должна. Просто две ОС разные поставьте и паузу для выбора ОС увеличьте
    Ответ написан
    Комментировать
  • Бесплатный аналог гитхаба, но чтоб мой проект не был виден всем. Есть такое?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    При наличии белого IP, просто на локальной машине развернуть gitdaemon или git через ssh?
    Ответ написан
    Комментировать
  • Почему не все серверы пишутся на Node js?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Принципиальных качественных преимуществ у node.js перед остальными языками нет, как впрочем и недостатков. Просто yet another язык со своими особенностями. Соответственно если в вопросе заменить node.js на php/ruby/python итд - ничего не изменится.
    Вопрос по сути абстрактный "почему все не перешли на язык %%%%%"

    2. Ответ на абстрактный вопрос:
    а) Потому что существует огромное количество legacy кода который нужно поддерживать. Работы по поддержке и развитию существующего кода на порядок больше чем написания с нуля нового
    б) Потому что у разработчиков есть свой стек любимых технологий, изменять который без явных экономических причин основная масса не готова
    в) Потому что умные технические менеджеры выбирают стек технологий проекта исходя из имеющихся под рукой разработчиков и легкости поиска и заменимости оных.

    UPD
    hbrmdc
    У NodeJS есть уникальные и очень весомые преимущества, которых нет ни у одного другого языка. Например то, что это JS, и, следовательно, нет необходимости разучивать лишние языки - можно весь webapp писать на js.
    Личные предпочтения обоснованные привычками - это не имеющий значения аргумент в данном вопросе.

    1) Есть отличия, да. Только не те о которых Вы пишите. То что это "JS" вообще ни на что не влияет.
    JS хорошо знают фронтендщики - а кто пустит фронтэндщика к внутренней архитектуре? Там подход совершенно другой нужен, другие навыки, другое понимание как это все работает. Просто пересадить человека с фронта на бек - нельзя.

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

    2) Личные предпочтения обоснованные привычками это основной аргумент.
    Я вот умею в php, умею в ноду, умею в еще десяток умных слов.
    Мне нужна новая команда на новый проект.
    Я открываю hh и что я вижу: node.js 279 резюме из которых половина фронтэндщики.
    PHP - 9613 резюме. Даже если 90% разработчиков PHP на hh - уроды которых к коду нельзя подпускать на пушечный выстрел - останется все равно в 3 раза больше чем есть node.js.
    Собственно на этом выбор и закончен.

    На малопопулярных языках пишут в случаях:
    a) это мелкий сервис с неявными перспективами который можно переписать за неделю
    б) это проект "для души" разработчика.

    Получается замкнутый круг на самом деле.
    Менеджер смотрит резюме, резюме на node.js нет =>
    Менеджер не начнет проект на node.js =>
    Не возникнет вакансия на node.js =>
    Разработчик анализируя вакансии не увидит вакансий на node.js =>
    Разработчик будет учить что то другое =>
    Менеджер смотрит резюме, резюме на node.js нет...

    Переломить ситуацию могут только очень крупные игроки обладающие возможностями формирования рынка (например Apple и Swift), и то не со 100% гарантией (samsung&c и Tizen)
    Ответ написан
    13 комментариев
  • Silverlight умер?

    @dmitryKovalskiy
    программист средней руки
    Он в интенсивной терапии , в критическом состоянии. А в соседней палате лежит Flash
    Ответ написан
    3 комментария
  • Как сделать так, чтобы человек мог подключиться к принтеру дистанционно?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    VPN. Только учтите, что если у вас интернет худой, задание на печать будет уходить медленно и печально.
    Ответ написан
    3 комментария
  • Как создать exe из формы c++ cli?

    @Beltoev
    Живу в своё удовольствие
    Слишком мало входных данных, чтобы дать вам ответ.

    Как я понял, в вашем случае движок планируется в виде редактора игр, в котором по нажатию волшебной кнопки "Создать игру" (образно) будет компилироваться exe-шник, так?
    В таком случае вам нужно будет вместе с движком поставлять компилятор и при нажатии той самой волшебной кнопки запускать процесс компиляции. Ну, а файлы для компиляции будет создавать и заполнять редактор на основе действий пользователя
    Ответ написан
    4 комментария
  • Как убедить начальство отказаться от велосипедов?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Не волнуйтесь, вас уволят и правильно сделают. И вот почему.
    Начну со стороны хорошего бизнесмена:
    У него уже есть cms и crm, которую он пилил 5 лет, умеет продавать и знает. Да, так получилось, свой велосипед, ужасно написанный, но это его не волнует до тех пор, пока она кормит и его и всех его подопечных. Отказаться от неё означает не только огромные временные затраты на смену всего, начиная от обучения программистов как её пилить, заканчивая обучением всех, кто будет её касаться. Так же это означает поддержка уже двух систем, старых клиентов со старой и новых с новой. Но самое главное - это высокий риск того, что продавать её будет тяжелее.

    Со стороны хорошего разработчика:
    А хорошему разработчику вообще до фени, с чем ему работать. Спросите у опытных. Эмоционировать при виде говнокода и велосипедов - это максимализм юного программиста. Разработчики с опытом умеют погружаться в любой велосипед, в любой говнокод и работать с ним. А потому что они уже навидались и в своё время тоже кричали и пытались перевернуть мир, но, кому это надо? Вы - наёмный работник, вы не должны писать красивый код, вы должны решать бизнес задачи. Бывалые так и делают, просто иногда про себя вздыхая, т.к. чувство прекрасного всё же не убить :)
    Ответ написан
    18 комментариев
  • Как сделать так, чтобы функция выполнялась только после того, как другая завершится?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Дисклеймер
    Кому не нравится название "обещания", мысленно заменяйте его на то, которое считаете подходящим. Я выбрал именно его, чтобы концепция, лежащая в их основе, была интуитивно понятна.

    Если функция асинхронная, то лучше всего использовать обещания, что вы и попытались сделать (интерактивный пример).
    one().done(two);
    
    function one() {
        var dfd = new $.Deferred();
    
        // Запускаем асинхронную задачу. Например, ajax-запрос.
        setTimeout(function () {
            var foo = 'bar';
    
            // "Выполняем обещание", передавая в него какую-то информацию.
            // Передавать аргументы, разумеется, не обязательно.
            dfd.resolve(foo);
        }, 2000);
    
        // Возвращаем из функции обещание, на которое могут подписаться другие функции.
        // Обратите внимание, этот код выполнится до того, как завершится асинхронная задача.
        return dfd.promise();
    }
    
    function two(foo) {
        // Обрабатываем данные, полученные внутри асинхронной функции one.
        console.log('two', foo);
    }

    Для трех функций расклад немного сложнее, но принцип такой же.
    Есть и более элегантный способ запуска цепочки из трех функций:
    код
    one().then(two, onOneError).then(three, onTwoError);
    
    function one() {
        var dfd = new $.Deferred();
    
        setTimeout(function () {
            console.log('one');
            
            if (Math.round(Math.random() * 10) >= 5)
            {
                dfd.resolve();
            }
            else
            {
                dfd.reject();
            }
        }, 1000);
    
        return dfd.promise();
    }
    
    function two() {
        var dfd = new $.Deferred();
    
        setTimeout(function () {
            console.log('two');
            
            if (Math.round(Math.random() * 10) >= 5)
            {
                dfd.resolve();
            }
            else
            {
                dfd.reject();
            }
        }, 1000);
    
        return dfd.promise();
    }
    
    function three() {
        setTimeout(function () {
            console.log('three');
        }, 1000);
    }
    
    function onTwoError() {
        console.log('twoError', arguments);
    }
    
    function onOneError() {
        console.log('oneError', arguments);
    }

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


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

    Другой вариант - передавать callback, но это прямой путь в callback hell. Для запуска трех и более функций подряд я его не рекомендую - смотрите сами, на что становится похож код:
    one(function () {
        two(three)
    });
    
    function one(callback) {
        console.log('one');
        setTimeout(callback, 1000);
    }
    
    function two(callback) {
        console.log('two');
        setTimeout(callback, 1000);
    }
    
    function three() {
        console.log('three');
    }


    Есть еще один (очень, очень, очень плохой) вариант, основанный на таймерах и внешних флагах. Никогда так не делайте (код для системы из трех функций еще хуже).

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