• Зависимости внутри системы лучше строить от интерфейсов или абстрактных классов? Когда лучше использовать абстрактный класс и когда интерфейс?

    По-моему зависимости внутри системы от интерфейсов более гибкие.

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

    LoggerInterface

    В каждом ОО-языке свои конвенции именования интерфейсов, но скорее всего лучше назвать просто Logger. Вы же не пишете Class в конце имени каждого класса.

    Подскажите, пожалуйста, как правильно определить когда использовать интерфейс и когда абстрактный класс?

    Интерфейс - когда хотите описать контракт взаимодействия, иными словами, сгруппировать несколько методов. Вся фишка интерфейса в том, что его можно реализовать только полностью, а не частично.
    Абстрактный класс - когда хотите предложить некоторую частичную реализацию. Это может быть как реализация ранее описанного интерфейса (что более чем нормальная ситуация), так и абстрактный класс с собственными публичными (в том числе абстрактными) методами. Во втором случае вы одновременно описываете некий интерфейс и тут же - его частичную реализацию, которой сможет воспользоваться класс-наследник.
    Ответ написан
    Комментировать
  • Динамическая структура данных. Что это?

    Nipheris
    @Nipheris Куратор тега C++
    динамические структуры. Динамические здесь снова означает выделение памяти во время выполнения, а не во время компиляции.

    Что еще можно отнести к дсд?

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

    Так же яндексом выводится очень много задач/примеров, где дсд применяется к Стеку. В итоге получаем структуры и стек.

    Вы делаете выводы как человек, обладающей логикой, но совершенно не обладающий знанием предмета. Вы поставили в один ряд совершенно несопоставимые вещи. Может сначала стоит изучить материал поглубже?
    Ответ написан
    3 комментария
  • Чем разбирать на составляющие аудиофайлы?

    Nipheris
    @Nipheris Куратор тега C#
    Ответ написан
    Комментировать
  • Как узнать, что забило диск?

    Ответ написан
    Комментировать
  • Где конкретно прочитать про правильную реализацию ООП на javascript?

    Одни говорят делай через прототипы, другие копируют свойства и функции, третьи вызывают родительский класс через Call у себя внутри конструктора. Как все таки правильно реализовывать?
    Плюс вопрос про доступность методов и переменных, тоже много разночтений.

    Сначала ES6, потом TypeScript. Если у вас встают такие вопросы, в "классическом" JS (ES5 и ниже) вы не найдете ответов. Например, посмотрите как компилит классы TS или Бабель.

    В ES5 есть только две вещи, имеющие какое-то отношение к ООП - выстраивание объектов в цепочку прототипов и объект как словарь ключ-значение.
    Ответ написан
    Комментировать
  • Существуют ли рекомендации(техники, подходы) быстрого поиска ошибок в коде?

    эдакие техники экспресс-дебага?

    PHP, JS

    Основная техника экспресс-дебага - не пользоваться по возможности языками со слабой динамической типизацией.
    Ответ написан
    Комментировать
  • Какие современные языки логического программирования существуют?

    1) логическое программирование - достаточно нишевая вещь, имеет некоторый порог входа и потому, в отличие от фротэнд-разработки и JS, вы не будете встречать её каждый день;
    2) те, кому это действительно нужно, вполне могут разрабатывать свои диалекты и даже свои языки с такой же концепцией, но более удобные для конкретных задач - эти языки также будут языками логического программирования, но вы не найдете их, гугля по слову "Prolog"; также следует отметить, что существуют менее мощные языки с несколько другой сферой применения, например Datalog - при правильном применении получаются очень интересные языковые альтернативы тому же SQL - есть даже целое исследовательское направление - дедуктивные базы данных;
    3) вот довольно много ответов - stackoverflow.com/questions/130097/real-world-prol... - и вновь мы видим, что язык оказался полезен тем, кто сумел его применить, это к пункту 1. Как правило это какие-то средние и крупные системы, где Пролог был удобен в качестве DSL - им описывались какие-либо правила или логические заключения. Как и к любому DSL, к Прологу нужно придти - т.е. понять, что вам нужен именно он, или его подмножество.
    4) гуглится не так уж сложно, если принять то, что язык (языки) скорее нишевый, нежели общего назначения;
    5) вы же гуглите на английском языке? А то на русском вы скорее всего только перепечатки из учебников найдёте, т.к. свежая информация будет от тех людей, кто этим занимается, а у нас крупные информационные системы начали появляться лет 10 назад. На русском с таким же успехом лучше открыть какой-нибудь советский учебник - вы получите хорошую теорию в строгом и аккуратном изложении (хотя, я думаю вы и так уже это имеете).
    Ответ написан
    4 комментария
  • Безопасна ли общедоступность схем pg_catalog и information_schema в PostgreSQL?

    Обратимся к документации:
    The catalog pg_authid contains information about database authorization identifiers (roles). A role subsumes the concepts of "users" and "groups". A user is essentially just a role with the rolcanlogin flag set. Any role (with or without rolcanlogin) can have other roles as members; see pg_auth_members.

    Since this catalog contains passwords, it must not be publicly readable. pg_roles is a publicly readable view on pg_authid that blanks out the password field.

    А собственно какой сценарий развития событий вы считаете проблемным? Ну получит некто логин админа, и?
    Ответ написан
  • Почему celery запускается, а в процессах не появляется?

    Может надо grep python ? Тот бинарник, который celery, вроде как просто запускает Питон и передаёт нужные аргументы.
    Ответ написан
  • Как структура баз данных эффективнее: много записей, много таблиц или много баз?

    Безусловно, БД проектируются так, чтобы лучше всего обрабатывать большое количество сущностей в малом количестве "контейнеров" - много записей в небольшом числе таблиц, много документов в небольшом числе коллекций и т.д.

    5 миллионов и даже 100 миллионов записей для нормальной СУБД это вполне адекватная нагрузка (до 1 миллиона - это вообще ни о чём). Как уже заметил Петр , ГОРАЗДО важнее то, какие индексы вы добавите.

    Схемы и таблицы должны добавляться исходя из нужд приложения, например при добавлении новых фич. Базы данных должны создаваться исходы из административных нужд - ограничение доступа, политика резервного копирования и т.д. 5, 10, и даже 50 БД на одном сервере это нормально (если на это есть основания), а вот 500 тысяч - это уже ни в какие ворота.
    Ответ написан
    Комментировать
  • Чем открыть JSON под Windows?

    JSON Viewer - штука простая, но удобная, дерево объектов выглядит довольно симпатично. И с большими файлами (пробовал 7-10 Мб) работает неплохо. Умеет делать prettify. Удобный быстрый поиск.

    Вообще, Саблайм вроде довольно шустро обрабатывает даже большой JSON. Выборок и сортировок правда нет ни там, ни там (я так понимаю, вы имеете в виду что-то вроде JSON Path).
    Ответ написан
  • Как определить, что начался новый пакет и закончился предыдущий?

    Как Mercury13 уже отметил, TCP даёт вам "виртуальный провод", где уже нет никаких пакетов, и в этом его (TCP) удобство.
    В прикладных протоколах поверх TCP всегда так или иначе определяется способ передачи сообщений известной длины, либо же способ определить конец текущего сообщения и начало следующего. Ваш метод, а именно
    Решение пришло само собой: перед отправкой самих данных сперва отправлять длину этих самых данных, чтобы сервер знал сколько ему прочитать байт и после скольки байт начнется новый пакет.

    является более чем стандартным для двоичных протоколов, и нисколько не костыль. Другого надёжного способа для двоичных данных и не придумаешь (именно поэтому, кстати, нуль-терминатор в Сишных строках - не очень хорошая идея в принципе).
    Для текстовых или смешанных протоколов могут использоваться другие подходы. Например, в том же HTTP в простейшем случае заголовки читаются до первого двойного \r\n, а затем читается столько байт, сколько указано в Content-Length.

    В вашем случае, если вы передаёте JSON, который всё равно будет подвергаться синтаксическому разбору (т.к. JSON протокол текстовый, а не двоичный, и начало-конец сообщения в нём определяется синтаксисом, а не заранее переданной длиной), то вы можете воспользоваться одним из соглашений JSON Streaming. Более удобным и безопасным является Concatenated JSON, однако тогда используемый вами парсер должен быть достаточно умён, чтобы вовремя оставиться при чтении значения из потока. Тогда вы сможете просто читать подряд из потока все переданные объекты.

    P.S. Уже не уверен, что у вас JSON, т.к. у вас одинарная кавычка в сообщении.
    Ответ написан
    Комментировать
  • Часто ли вы используете интерфейсы?

    Nipheris
    @Nipheris Куратор тега C#
    Часто ли вы используете интерфейсы?

    Посмотрим, что у нас в стандартной библиотеке:

    Со всеми этими интерфейсами дотнет разработчик сталкивается каждый день. Либо пользуется ими, либо реализует их. Например, тот же yield return работает благодаря IEnumerable. Весь LINQ основан на IEnumerable и IQueryable.

    Часто ли у вас было что ваши репозитории окруженные интерфейсами используют MSSQL, и есть еще такие же репозитории но уже использующие к примеру MongoDB, и где нито вы подменяете одно другим?

    Да, часто. Например, архитектура ADO.NET позволяет написать приложение так, что оно вообще не будет зависеть от используемого драйвера БД, и конкретный ado.net драйвер можно указать в конфиг-файле приложения. Т.е. конкретную БД может выбрать ПОЛЬЗОВАТЕЛЬ, а не разработчик. Более того, если под какую-то БД драйвера еще нет, а позже он появится, то его можно будет задействовать без перекомпиляции приложения. Только потому, что используются интерфейсы.
    Ответ написан
    Комментировать
  • C# программисты, какие сайты вы читаете каждый день?

    Nipheris
    @Nipheris Куратор тега C#
    Подписывайтесь на MSDN Flash, вам новости будут приходить из первых рук в достаточном количестве. Вот примеры того, что приходит:
    https://msdn.microsoft.com/magazine/mt736459
    https://blogs.msdn.microsoft.com/dotnet/2016/07/13...
    Собсно можете смотреть дотнет бложик: https://blogs.msdn.microsoft.com/dotnet/

    Еще, конечно же, CodeProject. Остальное можно найти на Хабре, и на стартовой странице Студии.

    Видео и твиттеры не смотрю почти никогда, информации умещается мало или смотреть долго. Самый лучший формат для меня - блог. Поэкспериментировать с написанным в статье я и сам могу).
    Ответ написан
    Комментировать
  • Почему llvm-build не видит новый бэкенд?

    Попробуйте добавить ваш таргет Abc в список LLVM_ALL_TARGETS, находится в корневом CMakeLists. С этим списком потом всякие вещи делаются, мне кажется там должны быть вообще все таргеты, которые есть в проекте.
    Ответ написан
  • Нужно ли создавать несколько пользователей для доступа к БД?

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

    Если толстые клиенты тоже есть, т.е. такие, которые сами содержат бизнес-логику и напрямую пишут в базу, то тогда есть смысл разделять пользователей. Как правило, разделение идёт по ролям в приложении. Т.е. для всех бухгалтеров отдельный пользователь, для всех складовщиков - также. Это поможет ограничить множество допустимых действий с БД и уменьшить риски (которые по определению будут в случае толстых клиентов).

    Разумеется, два приведенных варианта не взаимоисключающие. Например, большинство пользователей (особенно внешних) могут работать через веб-сервис, которому выделен отдельный пользователь БД, а несколько человек из персонала, для большей гибкости работы с базой (администраторы, аналитики) могут иметь отдельных пользователей с более богатым набором прав.
    Ответ написан
    1 комментарий
  • С++ Как получить массив из вложенного JSON (JSONCPP) и записать его в файл сохраняя бинарность данных?

    Nipheris
    @Nipheris Куратор тега C++
    С jsoncpp не работал, код написан по исходникам библиотеки:
    for (const auto v : jsonObject["buffer"]["data"]) {
        const std::uint8_t b = static_cast<std::uint8_t>(v.asInt());
        // пишете b в файл
    }

    Что вы пытались сделать в приведенном коде, я так и не понял. Касательно записи в файл - история отдельная.
    Ответ написан
    Комментировать
  • Программирование с ноля. Не студенческий возраст. С чего начать?

    Итак, раз для домашнего пользования, то Java лучше отложить. В принципе они примерно равны с C# по весовой категории и областям применения, но ИМХО на Шарпе проще набросать какое-нибудь десктопное приложение. Для написания десктопной карточной игры вполне подходящий вариант.

    Для Ардуино понадобится C/C++, это вам правильно говорят. По сравнению с C# синтаксис похож, но различаются многие концепции, C++ и тем более Си значительно ближе к железу.

    Играю семь бубей!
    Ответ написан
    1 комментарий