• Почему вьюха не видим вьюмодель в том же неймспейсе?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Да, всё верно поняли. Дизайнер XAML не совсем "дружит" с кодом - он ищет только те, которые уже скомпилированы. Видимо, дизайнер ищет классы стандартным способом - через тип Type (и т.п.), а тот ищет среди сборок (exe/dll) проекта.

    Нужно сразу скомпилировать новый тип, даже просто пустой class Test {} - и всё, будет работать. Лучше делать это пораньше - до того, как пытаетесь связать его в xaml, иначе билд не срабатывает, и приходится выпиливать его из xaml-а.
    Ответ написан
    1 комментарий
  • Где взять техзадание для ASP.NET сервиса?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Реализуй вот это
    Задача
    Доработка сканера серийных номеров с этикеток.
    Цель: доработать существующий сканер этикеток.
    1. Система должна давать возможность нахождения и распознавания серийного номера независимо от иного текста, цвета фона, кол-ва символов S/N.
    2.Скорость - не менее 1,5 сек на объект
    3.Точность распознавания - не менее 96%
    4. Динамический выбор области сканирования с помощью татч-скрина
    5. Системные требования IOS, Android.

    Это конечно перебор для вас в области 4,5
    Но просто сделай на основе фото.
    Как заготовку сможешь использовать это, баркоды пакеты
    ZXing.Net
    ZXing.Net.Bindings.CoreCompat.System.Drawing

    Серийный номер Tesseract

    https://github.com/vkorotenko/VueRecaptcha
    Ответ написан
    2 комментария
  • Как правильно работать с секретами?

    Прокидывай секреты через переменные среды. Благо по умолчанию IConfiguration умеет работать со слоёными конфигами, где по порядку применяются следующие слои:
    1. appsettings.json
    2. appsettings.Environment.json
    3. переменные среды
    4. аргументы командной строки

    Соответственно никакие трансформации не нужны - можно спокойно пушить конфиг в репозиторий, заменяя секреты какими-нибудь заглушками (например мы туда кладём строки, которые похожи на тот секрет, который должен быть)

    Локально (на машине разработчика) переменные среды можно хранить в .env файлах, либо можно продолжать иметь дополнительные appsettings - это тоже ок.

    При разворачивании образа, повторюсь, прокидывай секреты в переменные среды.

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

    opium
    @opium
    Просто люблю качественно работать
    А вы попробуйте нанять программиста сами увидите кто эти 50 человек которые приходят на собеседование))))
    Мы постоянно нанимаем и как то массово у нас они не растут, я каждый раз плачу кровью когда от нас уходит программист в другое место, жалею вообще об отмене рабства
    Ответ написан
    3 комментария
  • Почему не возникает конфликт слияния, когда я пушу на origin, коли перед этим при мерже такой конфликт был?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Push отправляет во внешний репозиторий origin ваши новые коммиты, которых там ещё нет. А указатель ветки origin/master просто передвинется на новую вершину цепочки коммитов (fast-forward). Никакого коммита слияния при этом не создаётся и конфликтам возникнуть в принципе неоткуда.
    Кто с кем должен конфликтовать по вашему мнению?
    01%20Git%20push%20discussion.svg?cdnVersion=557
    Ответ написан
    1 комментарий
  • Что возвращает return в С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Зависит от кода функции и опций компилятора.

    Советую всем программистам на C++ хотябы почитать про ассемблер.
    Стек, регистры, вот это вот все. Тогда станет понятно, как работает процессор.

    Тогда станет понятно что "сам объект tmp" никак не вернуть. Это локальная переменная, лежащая на стеке в части, которая будет отброшена при выходе из функции. Отсюда вытекает, что вообще говоря, там должна быть копия.

    Но есть такая оптимизация, как RVO. В стандарте даже прописано, когда конкретно она гарантирована. Тогда копии не происходит. При этом компилятор вообще не создает локальной переменной. А вместо этого сразу же работает с тем местом, куда надо будет возвращать значение.

    Если код и включенные оптимизации позволяют это сделать - то копии не будет. Но в общем случае - будет копия.
    Ответ написан
    Комментировать
  • Прошу помочь мне советом по библиотеке классов C#?

    Если тебе нужна библиотека классов, в которой есть только метод, который вычисляет площадь треугольника, то лучше сделать статический класс со статическим методом:
    public static Triangle {
      public static double CalculateArea(double length0, double length1, double length2) {
        // Весь код по вычислению площади
      }
    }

    Функция Print тебе в библиотеке совершенно не нужна.
    Ответ написан
    6 комментариев
  • Как полностью удалить программу?

    В общем случае - никак (если не считать как вариант - создание полного снимка системы перед установкой)
    Деинсталлятор должен это делать сам.
    Если деинсталлятор удаляет не всё - значит это баг и нужно сообщить об этом разработчику программы.
    Ответ написан
    1 комментарий
  • Какие инструменты нужны для разработки игр?

    @MarkusD
    все время мелю чепуху :)
    Сегодня существует ровно два базовых направления разработки конкретного коммерческого проекта.
    Способ первый: купить лицензию или подписку на уже готовый инструмент разработки и заняться непосредственно разработкой своей игры.
    Способ второй: иметь в своем штате команду разработчиков собственного инструмента, на базе которого можно заняться разработкой своей игры.

    Первый способ популяризирует публичные универсальные инструменты разработки.
    Второй способ эксплуатирует проприетарные инструменты.

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

    DirectX, Vulkan и OpenGL, равно как Metal и ряд проприетарных GAPI некоторых закрытых платформ, не являются графическими библиотеками. Это все - Graphics Application Programming Interface - GAPI.
    Это - низкоуровневые интерфейсы драйвера GPU, позволяющие эксплуатировать ресурсы видеокарты в своих целях. Не только для рисования чего-то, а для ИИ, ML, сложных статистических вычислений, предсказаний и прочих расчетов на больших объемах данных.
    Под капотом любого инструмента, будь-то проприетарный или публичный, в его графическом слое используется один или несколько GAPI. Без этого никак.
    OpenGL, как и DirectX 11, нисколько не устарели, поскольку предоставляют упрощенный интерфейс управления ресурсами GPU. Они используются тогда, когда разработчикам не нужны самые тонкие механизмы управления ресурсами GPU, которые предоставляют DirectX 12 или Vulkan. Потому что последние, помимо прочего, требуют от разработчиков более глубокой экспертизы и больше ресурсов на разработку всего того же, что на OpenGL и DirectX 11 реализуется меньшими силами и за меньшее время.

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

    Информации по каждой отдельной области разработки игр хоть отбавляй. Ее настолько много, что одному человеку за жизнь не усвоить. Поэтому от современного специалиста сегодня требуется спрофилироваться, т.е. определиться со своим профилем работы и стать экспертом.
    Я больше 15 лет занимаюсь разработкой игровых движков и медиаферймворков. Более 10 лет занимаюсь коммерческой разработкой кросслпатформенных инструментов. Я начинал свое обучение по книгам и документации для всех интересующих меня областей еще 20 лет назад. Я самостоятельно освоил множество API, включая графические, сетевые, звуковые и API целевых платформ, используя книги и документацию. Экспертные знания C++ и прочих языков я получил тоже через изучение документации, стандартов и книг.
    Я могу сказать что обучаться по книгам и документации можно и самостоятельно. Еще можно заплатить деньги и получить более точечные знания через их интерпретацию на распространенных сегодня онлайн-курсах. Такие знания не всегда бывают лучше полученных самостоятельно, но времени на освоение того же объема знаний на курсах уйдет меньше чем при самостоятельном изучении. Иными словами, занятия на онлайн-курсах не отменяют важности самостоятельного изучения основных источников информации.
    По открытым видеоурокам на ютубе и прочих видеохостингах обучаться нечему. Цель этих видео - чтобы зритель посмотрел рекламу и этим принес доход автору.
    Ответ написан
    2 комментария
  • Как правильно сравнивать record-ы с byte[] внутри?

    если передать byte[], то сравнивать не хочет, объясните, пожаулйста

    Потому что компилятор генерирует вот такое:
    EqualityComparer<byte[]>.Default.Equals(<x>k__BackingField, other.<x>k__BackingField);

    Если тебе нужно сравнение по содержимому массивов - тебе придётся самостоятельно определить метод с вот такой сигнатурой:
    public virtual bool Equals(TypeEncoding other) {
      // код сравнения this с other
    }

    А также тебе придётся переопределить GetHashCode, чтобы он на одинаковых массивах отдавал одинаковое число.

    Но тут есть нюанс - GetHashCode не должен зависеть от изменяемых типов/полей. Тоесть тебе по хорошему нельзя будет менять содержимое этих массивов, а то можешь получить неприятные спецэффекты, если hashcode поменяется.
    Ответ написан
    3 комментария
  • Опишите, как устроен процесс контрибьютинга?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Самое главное - разбираться в проекте. Читать его баг-трекер и понимать потребности и над чем работает сообщество. Я как-то пытался стать контрибутором apache ignite но не вышло. Времени не хватало. А потребности были со стороны нашего проекта.

    Вобщем читаете баг-трекер. Берете проблему и разбираетесь. Поскольку речь идет о больших проектах то пройдут месяцы и годы прежде чем вы сможете делать фичи.

    Техническая сторона не особо важна. Главное что у вас есть ценный merge-request который нечто исправляет и это НЕЧТО очень нужно в мире.
    Ответ написан
    Комментировать
  • В какой/каких программах посоветуете написать пользовательскую документацию/инструкцию к программе?

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

    Markdown подойдёт в большинстве случаев. Для более сложной разметки есть reStructuredText.

    • Есть прекрасный Sphinx, который понимает Markdown и reStructuredText. Умеет генерировать статические сайты, юниксовые страницы мануалов, PDF и ещё много чего из единого исходника.
    • Очень просто на Markdown можно собрать сайт с помощью Docusaurus.
    • Документацию на языке разметки можно выложить в Wiki в репозитории на GitHub, если особых требований к размещению нет.

    Если хочется WYSIWYG, то берите редактор Markdown, который так умеет. Например, Typora.
    Ответ написан
    Комментировать
  • В чем вообще соль задания nullable полей в БД, вместо пустых значений по умолчанию, есть ли в этом какой-то сакральный смысл?

    Adamos
    @Adamos
    NULL - это не пустое поле. Это "поле не заполнено".
    Используется в тех случаях, когда разница между этими состояниями - есть.
    Кроме того, у числовых полей или дат просто нет "пустого" варианта.
    0 и '1970-01-01 0:00:00' - это значения, которые вполне могут иметь смысл.
    Например, при подсчете средних значений или интервалов NULL позволяет исключить ненужные строки.

    Если вам без разницы, заполнил юзер свои поля или нет - значение по умолчанию подходит, использовать NULL просто незачем.
    Ответ написан
    Комментировать
  • REST API - Метод DELETE Удалять ли обьект из базы или нет?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    А мы то знаем как вам нужно? Делайте как того требует логика приложения. Нужна возможность восстановить запись? Пишите флаг. Не нужно восстанавливать? Удаляйте.
    Ответ написан
    Комментировать
  • Типизация большого объекта в Typescript?

    Объекты разные по содержанию, но нам нужны только пару ключей, которые есть у каждого объекта

    Почему бы тогда не сделать интерфейс, у которого будут как раз эти пара нужных ключей, которые есть у всех?
    Не обязательно же максимально точный и полный тип делать.
    type Item = { a: number };
    const data: Array<Item> = [ // О том что существует "b" и "c" мы молча забудем :)
      {"a": 1, "b": 42},
      {"a": 2, "c": 33}
    ];
    
    console.log(data[0].a)
    Ответ написан
    5 комментариев
  • Где в этом коде происходит какая-либо запись на hdd?

    @Voland69
    Видимо Хром и потратил место, на кэш, временные файлы и т.п.
    Ответ написан
    3 комментария
  • Почему современные языки отказываются от ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Они не отказываются. Скорее происходит отказ от "парадигмы" разработки. Языки стали мульти-парадигменные. Посмотрите на С++20 или Scala. Их невозможно положить в коробочку ООП или ФП. В них есть почти полный набор фич и оттуда и отсюда. И с каждым годом число фич растет и граница размывается. Нашим потомкам будет вообще непонятно где идет раздел.

    По поводу golang. Это язык ограниченной разработки. Его создавали специально чтобы порог вхождения был низкий. Фактически делали лайтовый С++ которому можно обучить школьника за 14 дней. Но с перформансом выше чем у Питона. Поэтому выражать какие-то сложные конструкции на типах там скорее всего не получится. У golang есть свой манифест. Я забыл как он называется и где он. Вобщем там довольно четко обоснованно почему такие принципы и почему такая идеология.
    Ответ написан
    1 комментарий
  • Как дальше развиваться в разработке графики?

    @MarkusD
    все время мелю чепуху :)
    Компьютерная графика - очень большая и сложная область. Обучаться до конкурентного уровня нужно очень усердно и очень долго.

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

    Куда двигаться дальше. В инженерию П.О, в архитектуру П.О, в шаблоны проектирования, в общие концепции разработки программ. Языки программирования на этом этапе все еще не нужны, т.к. архитектура оперирует терминами над инструментами разработки. В наше время очень много талантливых и образованных разработчиков компьютерной графики, но их ярким отличием является абсолютная бездарность в инженерии и архитектуре П.О. Они считают что раз математику и физику знают, то остальное им не нужно. Это должно стать их фатальной ошибкой в конкурентном плане. Сегодня системным инженерам приходится за такими людьми хвосты чистить и слушать их брюзжание о том, что их прелестный код снова испорчен и ничего опять не работает.

    После этого двигаться стоит в сторону инструментов разработки. Их должно быть несколько. C# и F# ты знаешь, это хорошо. Java будет прекрасным дополнением. Настоящий инженер не имеет права зажимать себя рамками одного лишь инструмента, это будет его минус в конкуренции. Rust слабо востребован и мало применяется, но знать его на некотором уровне будет просто полезно в качестве инвестиции и для общего развития. C++ сильно распространен и сильно востребован, однако рынок труда сейчас переполнен слабыми середнячками, которые мало на что годятся в реальной работе, а C++ является крайне сложным инструментом и не позволит тебе быстро начать с ним работать на том же уровне, на котором тебе позволяет тот же C#. Поэтому если брать C++, то уходить в него надо прямо очень серьезно для того чтобы получить конкурентное преимущество перед описанными выше людьми.

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

    Компьютерная графика - это не треугольнички рисовать. Это одна из самых сложных для обучения областей на сегодня.
    Просто посмотри в 7-м разделе примерный список книг, с которыми нужно ознакомиться.
    По окупаемости сказать ничего нельзя. Все зависит от тебя лично и от твоих личных качеств. Станешь лучше остальных соискателей - все окупится.
    Ответ написан
    1 комментарий
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    @nApoBo3
    Вы не понимаете даже в общих чертах как "работает" модель osi.
    У вас нет "конвертации" пакетов, у вас есть упаковка пакетов, она происходит у отправителя от большего уровня к меньшему, у получателя распаковка от меньшего к большему. Если очень просто, пакет третьего уровня составляет датасекцию пакета второго уровня, к ней добавляются заголовки пакета второго уровня.
    Ответ написан
    1 комментарий