• Зачем нужна рекурсия в реальных случаях?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Рекурсия нужна при обработке иерархических данных. Например - обойти файлы и каталоги
    в файловой системе и выполнить какое-то действие. Или действие с условием. Например если
    в текущем фолдере есть фолдер .git - то выполнить какой-то git script.

    Рекурсия может понадобиться при работе с документами XML/JSon (шаблон composer). И хотя
    в некоторых API рекурсия может быть частично скрыта за языками XPath/JSonPath тем не меннее
    ее рекурсивная природа остается налицо. Кроме того если вам достался узкий API типа DomDocument
    без поисковых диалектов - то обойти его можно на любом ЯП с рекурсивной функцией.

    Рекурсия нужна при парсинге сайтов. Это вобщем просто более расширенная трактовка работы с файловой
    системой. Если Url-s это как-бы файлы в web пространстве и они имеют ссылки друг на друга - то вы
    можете рекурсией это все обходить.

    Рекурсия почти всегда нужна при работе с графами. Берите любой алгорим на теорию графов и я готов
    спорить что 99% он будет содержать рекурсию.

    Все настольные игры (шахматы-шашки) в основе своего алгоритма альфа-бета поиска с отсечениями и
    BWF базируются на рекурсии.
    Ответ написан
  • Сколько запросов в секунду выдержить PostgreSQL?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Сам запрос:

    Узнайте про PostGIS
    Как вообще тестируют нагрузку на БД?

    Устраивают DDOS атаку
    Ответ написан
    Комментировать
  • Почему на GitHub не работает протокол git?

    Lynn
    @Lynn
    nginx, js, css
    Потому что GitHub его выпилил уже полгода как.

    Permanently disabled the unencrypted Git protocol
    Ответ написан
    2 комментария
  • Как для поля добавить ограничение на вводимые данные?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Не нужно пизать в БД лишнюю логику и лишние ограничения.
    У вас с БД работает какой-то софт, например бэкенд. Там и делайте валидаторы данных. В случае пола раньше можно было 1 и 0 удобно хранить и всё было абсолютно интуитивно и понятно, а русскую букву в качестве индекса держать неудобно и неправильно. Во-первых, она в UTF-8, наверняка, что уже как-то изврат для бинарного поля.
    Во-вторых, при локализации проблемы могут быть в логах надо юникодовую экранировку читать, если что... в общем либо международное F\M, либо кодами и 1\0 для мнемонического запоминания очень удобно. Вот угадайте что есть что и почему.=)

    Но по нынешним временам за такую бинарность могут и засудить=) Не иначе нужна целая таблица гендеров небинарных с названиями, описаниями и локализацией. Да ещё и меняться она будет со временем, а потом при импортах мапить надо одну таблицу полов на другую=).
    Шутки шутками, а 0\1 и тут хорошо лягут. Просто идентификаторы такие будут синтетические.

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

    Ответ: на надо валидировать значения такого рода полей на уровне БД. Делайте так, чтобы нельзя было ввести неверно на уровне ввода данных от пользователя, и дополнительно валидируйте в бэкенде.
    Ответ написан
    7 комментариев
  • С чего начать изучение программирования?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    С изучения информатики и устройства вычислительной техники. Ну а далее уже можно выбирать что-то из современных ЯП: https://roadmap.sh/computer-science
    В целом же, написание кода - лишь одна из частей процесса разработки ПО. Так же рекомендую поставить какую-нибудь игру с редактором карт и освоить его. Например классику: WarCraft 3, StarCraft, HoMM 3.5/4 - легендарные игры, популярность которых обусловлена именно игровыми редакторами и которые смогли пройти сквозь целые эпохи. Возможность самому что-то сделать и поиграть - очень неплохо мотивирует к освоению редакторов и желанию разобраться как оно все работает )
    Ответ написан
    1 комментарий
  • Как начать заниматься "серьезной" разработкой?

    @StopFox
    Лао-цзы: «путь в тысячу ли начинается с первого шага»
    Брюс Ли: "Я не боюсь того, кто изучает 10,000 различных ударов. Я боюсь того, кто изучает один удар 10,000 раз"
    Повторение результата из раза в раз с сохранением того же качества это удел профессионалов. Поэтому много мелких однотипных проектов это даже хорошо, с минимальными усилиями вы нарабатываете будущую клиентскую базу людей которым вы помогаете сейчас и которые будут знать к кому обратиться в будущем. Через 10 лет ваши друзья разбегутся кто куда, станут семейными и откроют бизнес, а в нашей стране очень ценят работу "специалиста по знакомству", но помните любая работа должна быть оплачена и не стоит делать её бесплатно или со скидкой просто потому что знакомые, людей которые захотят вас использовать будет много. Просто примите это как правило.
    И еще, все великие начинали с того что брали за основу чьи то наработки и использовали их в своей работе. Поэтому не бойтесь использовать сторонние инструменты, я не говорю вам воровать, но на первых этапах направления которое вы выберете использовать чужое - ок.
    Деньги, второстепенное оно приходит с опытом само, не стоит сильно акцентировать внимание на том чтобы заработать миллионы, поверьте это не то что вы хотите на самом деле.
    Пока вы молодой, ищите себя в разных направлениях, не бойтесь рисковать и менять работу чтобы к 30 годам уже точно определиться с направлением которое вам близко к душе а не потому что "там больше платят".

    И вот еще видео для мотивации.
    https://youtu.be/w0Mc2CFxFyE
    Ответ написан
    3 комментария
  • Как начать заниматься "серьезной" разработкой?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    В силу некоторых обстоятельств не могу идти работать full-time

    Тогда никак. Серьëзная разработка = командная разработка. Да и рост без команды очень медленный и ограниченный.
    Ответ написан
    1 комментарий
  • Зачем мне универсальный класс, если в методе я могу указать родительский класс?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Не всегда можно указать родительский класс
    2. Иногда переход к родительскому классу/интерфейсу не оптимален. Например если ты используешь структуры - будет происходить боксинг.
    3. В некоторых случаях потребителю бы хотелось работать с конкретным типом, а не с базовым. Попробуй реализовать List без женериков.

    PS: нет такого понятия, как "универсальный класс"
    Ответ написан
    Комментировать
  • Почему запрос по имени работает медленнее если заменить фамилию на %?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Так устроен индекс. Он строится в первую очередь по первым символам и в последнюю по последним.
    Если вы подменяете % начало, то индекс просто не будет работать.
    Разделите ФИО на отдельные компоненты и сделайте отдельный индекс для имени, тогжа ваш кейс будет быстрее работать.
    У вас же фактически происходит полный перебор базы без индекса.

    Для примера. Вот у вас есть больой алфавитный список людей. Найти в нем любого человека по тому, по чему список отсортирован - это тривиальная задача. Вы делите весь спислк пополам и мгновенно определяете в какой половине искомая строка. Потом делите оставшуюс половину и так далее. А теперь представьте, что ваш список осортирован по фамилии, а вам надо найти в нем Сигизмунда. Всех Сигизмундов. Сортировка по фамилии вам не поможет быстро искать. Нужна сортировка по имени. Для этого и делают отдельные индексы.
    Ответ написан
    3 комментария
  • Как подключать многофайловый модуль?

    ozkriff
    @ozkriff
    Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
    lib.rs:
    mod module;
    
    use crate::module::a;


    module/mod.rs:
    pub mod a;

    module/a.rs:
    pub struct a {
        pub count: usize,
    }
    Ответ написан
    6 комментариев
  • Выбрать Rust или C++?

    vabka
    @vabka
    Токсичный шарпист
    Rust достаточно стабильный и популярный, чтобы начать с ним работать.
    По геймдеву - в принципе все нужные низкоуровневые библиотеки для работы с графикой там уже есть. Да и движки свои понемногу да появляются.
    Пример из тех, что сейчас активно развиваются - bevy, на нём уже можно делать не очень сложные игры, да и просто как образец он тоже интересный: во главе угла стоит модульность и ECS.
    Ответ написан
    Комментировать
  • Как посчитать правильно расположенные круглые скобки из массива char?

    GavriKos
    @GavriKos
    Идете по массиву. Встречаете открывающую - +1 к счетчику. Встречаете закрывающую - -1 к счетчику. Если на каком то этапе счетчик стал <0 - скобки неверные. Если в конце прохода счетчик != 0 - скобки неверные
    Ответ написан
    Комментировать
  • Почему при использовании переменной в методе, выдает ошибку Linker Tools Error LNK2001?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему при использовании переменной в методе, выдает ошибку
    class Test
    {
      static std::string question;


    Потому что статическое поле класса нужно определить, его упоминание в определении класса -- это не определение. Определить его можно например так в .cpp вне всех функций:
    std::string Test::question;
    Ответ написан
    Комментировать
  • Может ли быть MVC Без views?

    vabka
    @vabka
    Токсичный шарпист
    View - это не всегда то, что видит пользователь.
    Под View также вполне подпадает json-объект, который возвращает контроллер в случае апишки.


    Или для чистого API есть более подходящие архитектуры?

    MVC - это не то чтобы архитектура, строго говоря. Скорее паттерн, который может быть реализован по разному.
    У тебя есть какие-то объекты-представления, которые отдаются клиенту, какая-то модель предметной области, в которой описаны все ограничения и возможные операции, и контроллер, который гоняет из одного в другое.

    PS: Не нужно придумывать красивое название для архитектуры, чтобы писать нормально.

    А так вообще для вдохновения посмотри на:
    - Hexagonal architecture
    - Onion architecture
    - Clean architecture
    - Ports and adapters
    - N-tier architecture
    - Vertical slice architecture
    Ответ написан
    1 комментарий
  • Как узнать обо всех инстансах класса, после добавления к его интерфейсу нового свойства?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    C C# 11 ты можешь использовать ключевое слово required.
    public interface ICultureNode
    {
            public string Ru_RU { get; init; }
            public string En_US { get; init; }
    }
    public class SimpleCultureNode : ICultureNode 
    {
            public required string Ru_RU {get; init;}
            public required string En_US {get;init;}
    }

    Если забудешь инициализировать, то получишь ошибку компиляции CS9035

    Ещё вариант - использовать конструкторы. Ведь они давно на то и существуют, чтобы обязывать тебя инициализировать всё.
    Ответ написан
    1 комментарий
  • Как сделать захват фото/видео с веб-камеры без использования высокоуровневых библиотек?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Есть несоклько системных АПИ.

    Например, DirectShow или MediaFoundation.

    MediaFoundation поновее, побыстрее, поэффективнее и чуть поудобнее. Но криворукие разработчики драйверов его не всегда хорошо поддерживают. Всякие, особенно интегированные в лаптопах, камеры с ним глючат или не работают вообще. Плюс всякие виртуальные камеры, типа OBS не видны через MediaFoundation, потому что разработчикам влом по-нормальному реализовывать виртуальную камеру. Ну и оно только с windows 7 доступно.

    Если вы не планируете открывать камеру, а вам надо только информацию о ней собрать, или вы работаете с определенным устройством, то MediaFoundation вам подойдет лучше.

    Иначе смотрите DirectShow.

    Можно найти много примеров кода в интернете.
    Ответ написан
    2 комментария
  • Как конвертировать байты в структуру C#?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Почитай про сериализацию и десериализацию
    Ответ написан
    Комментировать
  • Почему не работает функция в с++ пытаюсь вызвать, а она не вызывается?

    @12rbah
    return 0;
        menu_for(v);
    Казалось бы, что могло бы пойти не так, попробуйте поменять местами return и menu_for
    Ответ написан
    Комментировать
  • Приделывать Git на сайт это хорошо?

    vabka
    @vabka
    Токсичный шарпист
    git - это система контроля версий.
    Это не "локальное хранилище" и не нечто, что можно "приделать" сбоку.

    Предположу, что под словом "приделать" вы имеете в виду использование git для доставки обновлений на продуктивный сервер.
    Моё мнение - так делать не стоит.
    Серверу совершенно не нужно хранить у себя всю историю версий.

    А вот локально да - лучше вести разработку в git.
    Ещё по хорошему следует хранить копию репозитория на каком-нибудь ещё сервере, например в собственном экземпляре gitlab и синхронизировать её с локальной при помощи git pull/push.

    Ну и помни, что не надо все файлы в git запихивать. В git должны храниться только исходные файлы. Всякие картинки - в git-lfs.
    Пароли - в каком-то другом хранилище.
    Артефакты, которые создаёт компилятор или препроцессор - в .gitignore
    Ответ написан
    1 комментарий
  • Как авторизоваться на GitHub?

    vabka
    @vabka
    Токсичный шарпист
    Но когда доходит дело до пароля Я просто не могу туда ничего вводить не цифры не русские буквы не английские

    Это нормально. Ты на самом деле вводишь пароль, но чтобы со стороны нельзя было сказать даже какой длины у тебя пароль - ничего в консоль не выводится.
    Но вроде как в GH так аутентифицироваться нельзя - должно работать окошко с oauth.

    Для надёжности советую настроить SSH-ключи, чтобы не тратить время на http-аутентификацию
    Ответ написан
    Комментировать