• Как сделать зависимые материалы в Blender?

    @yellingorange
    Используй ноду "Object info" , вывод "Color". Этот параметр берется из Viewport Display -> Color, который задаётся для каждого объекта отдельно. Таким образом у тебя будет один материал на все объекты, диффузный цвет которого меняется исходя их атрибутов объекта.
    618c7fdbf1ea4633340921.jpeg

    по ссылке можно скачать пример:
    https://drive.google.com/file/d/1V79Ojg_TrFtXxwbp5...
    Ответ написан
    5 комментариев
  • Как заставить бота отправить сообщение в канал?

    t-alexashka
    @t-alexashka
    Сразу пишу legacy код
    вообще не важно на чем вы пишите. в данном случае вам нужно добавить бота в канал и сделать его админом, с возможностью добавлять записи. после чего отправлять сообщения не боту а по channelId.
    Ответ написан
    4 комментария
  • Как бороться с коллбэками в nodejs?

    @Patient322
    async function yourModule () {
    ...
      const account = await Account.findOne();
      active_account=account.email;
      session.defaultSession.cookies.set({url: 'http://localhost', name: 'active_account', value: active_account}, (error) => {})
    ...
    }
    Ответ написан
    2 комментария
  • Не могу найти удаленную работу php junior, где искать?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    1. Работодателем начхать на твоё образование. Это я тебе как выгнанный с четвёртого курса информационного факультета говорю.
    2. Работодателям начхать какие курсы ты прошёл. Это я тебе как преподаватель на курсах говорю.

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

    Удалённую работу так просто не дают. Это я тебе как человек, который эту самую удалёнку пытался на своих условиях получить.
    Ответ написан
    2 комментария
  • Как вывести данные рандомно?

    HighQuality
    @HighQuality
    ☁ Ниндзя девелопер
    Используйте возможности вашей СУБД.

    MySQL
    Data.order('RAND()').all

    PostgreSQL
    Data.order('RANDOM()').all
    Ответ написан
    1 комментарий
  • Как не применять html при отключенном JS?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Как не показывать прелоадер если у человека выключен JS?

    Можно посмотреть на вопрос с обратной стороны и показывать ваш прелоадер с помощью JS. Там, где нет JS - не будет и прелоадера.
    Ответ написан
    Комментировать
  • Почему некоторые браузеры не воспринимают сертифкат безопасности?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    https требует наличия сертификата на сервере. Его может не быть вовсе или он может быть истекший или не валидный. Так что причин много. Замечал, что яблочные устройства особенно нервно относятся к сертификатам, так что если заходите с откушеного яблока, то список причин пополнят переадресации и магнитные бури, плохое настроение разработчиков Вашей версии прошивки и т.д. На остальных устройствах, которые делали не ради "продать подороже", а ради "что бы работало" - только первые три варианта.
    Ответ написан
    Комментировать
  • Почему некоторые браузеры не воспринимают сертифкат безопасности?

    p00h
    @p00h
    Фехтовальщик-стропальщик
    Мобильный оператор снифает ваш трафик. К сожалению, в последнее время это становится нормой.
    Ответ написан
    Комментировать
  • Почему некоторые браузеры не воспринимают сертифкат безопасности?

    @frilix
    Иногда "творю"
    В браузер изначально загружен список аккредитованных центров сертификации, и если возвращается сертификат не подписанный кем-либо из этого списка, то вы получаете данное предупреждение. Соответсвенно в ваш браузер не имеет в списке вашего CA

    CA – это компании, выполняющие ручную проверку, того что лицо, пытающееся получить сертификат, удовлетворяет следующим двум условиям:

    1. является реально существующим;
    2. имеет доступ к домену, сертификат для которого оно пытается получит
    Ответ написан
    7 комментариев
  • Как писать много кода, оставляя его простым, как в начале?

    @dmz9
    не знаю зачем тут пацаны советуют чистый код Р. Мартина
    https://www.ozon.ru/context/detail/id/5011068/
    вот что нужно на замену
    https://www.ozon.ru/context/detail/id/138437220/
    есть обе у меня, но красненькую купил раньше. в ней больше информации как внешне так и по сути.

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

    во многих конвенциях о code-style указываются очень грамотные вещи, и они не просто так там находятся. в общем смысл такой - код должен быть самодокументируемым/самоописательным, а комментарии к коду не должны быть в стиле "моё почтение, капитан!".
    • код должен напоминать хорошую прозу.
    • комменты описывают намерение (зачем?) а не реализацию (как?).
    • прими во внимание время жизни переменной. чем ближе переменная к "месту военных действий" тем лучше. перекликается со временем жизни переменной - чем быстрей "умирает" тем лучше, часто можно даже без переменной обойтись не в убыток читаемости.
    • люди советуют тут ограничиваться конкретным числом строк. имхо - вредный совет. метод не должен ограничиваться. метод должен быть такой длины, которая требуется. иногда без "супер-методов" не обойтись (это не о функциях на 100500 входящих параметров), невозможно просто разбить тяжелую функцию на более мелкие куски, не умножив число запоминаемых переменных/других методов. метод может быть в 3 строки, может быть даже в одну, а может быть в сто-двести строк и более. если из метода ничего нельзя выбросить и нечего добавить - значит он в точности занимает столько сколько нужно.
    • многословие приветствуется но без фанатизма. машине почти всё-равно какой длины у тебя функция (если вы понимаете о чем я), а для тех кому нет - есть минификаторы (для js например)
    • название метода должно однозначно говорить о его назначении. спрашивай себя - зачем этот метод? зачем это свойство? если ты не можешь ответить значит и запомнить/вспомнить не сможешь, значит у метода/свойства нет конкретного предназначения и потом (через какое то время) будет сложно разобраться для чего он вообще нужен.
    • визуально отделяй приватные/публичные методы. это тоже некоторая подсказка которая помогает разбираться в коде.
    • следуй одному стилю как минимум в отдельно-взятом файле. (кемелкейс отдельно, лодаш отдельно).
    • следуй принципу наименьшего удивления (программиста). т.е. поменьше роялей в кустах
    • соблюдай абстракции. если класс это не просто набор статичных методов - значит он описывает какие то действия вполне определенного объекта. не раздувай и не разбивай на несколько классов одну цельную и четкую абстракцию. это поможет сосредоточиться на отдельном куске кода в один момент.
    • старайся не писать рядом в одном классе методы, которые "проникают" во все аспекты приложения (антипаттерн - суперкласс/божественный объект).


    вообще стоит почитать про паттерны и антипатеррны, это конечно не библия но знать хотя бы основные стоит.
    Ответ написан
    2 комментария
  • Как писать много кода, оставляя его простым, как в начале?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну в общем-то ответов много. Могу кое-что добавить от себя.

    Во-первых, голова не бесконечна во всех смыслах. Запихнуть в неё больше чем 10 объектов одновременно вряд ли получится, у многих начинаются огромные проблемы уже с 5. Лично я испытываю ДИКУЮ больше если собственный код становится больше чем большой. Для меня это где-то 15~20 сущностей, причём чем сильнее они связаны, тем сложнее они даются, так как становится сложно абстрагироваться. Что примечательно, при работе с чужим кодом таких проблем практически нет, ну у меня по крайне менее. Всё дело в том, что чужой код изначально воспринимается чёрным ящиком, поэтому если он не представляет из себя дикую лапшу, аккуратная работа с ним с минимальным вмешательством в проект получается легко.

    Во-вторых, не стоит делать код пушистым. Однообразность воспринимается лучше. Массивы некоторых объектов надо называть $названием_объекта + 's'. Классы с большой буквы, любой объект стоит называть так же, как класс, но с маленькой буквы. Конечно, если семантически прям просится по другому, то стоит правило нарушить, но в общем случае никаких выдумок не надо. Временная строка - str, временное число - tmp, временный объект - obj. И пробелов не жалей, внутри файла разделяй разные структуры двумя-тремя пробелами, стоит обособлять регионы, например, "глобальные" функции наверху, по середине структуры, потом классы. В C# есть #region.

    В-третьих, объём тоже воспринимать сложнее. Делай плоско. В том смысле, что меньше наследований, больше включений. Очень тяжело воспринимать архитектурную лапшу. Суть микросервисов - единственная, максимум две точки связи. То есть контроллер де должен склеивать всё и вся, это задача "простейшего" диспетчера событий, который крутится в своём цикле и распихивает поступившие сообщения. Микросервису надо думать чем меньше, тем лучше. Вообще, микросервисы не всегда хорошо подходят, они очень удобны в сверхраспределённых командах с высокой степенью самодисциплины, когда привычка смотреть в доки сильнее привычки звонить тимлидеру на каждый чих. В случае с самостоятельной разработкой они скорее зло, хотя в web поначалу довольно приятно, заливать чрезвычайно низкую производительность ресурсами, забивая каналы связи под завязку, не лучшая идея. Порой намного лучше сделать монолитно, но аккуратно, особенно когда вся жизнь продукта под ответственностью одного человека.

    В-четвёртых, внутри монолита также надо делать максимально растянуто, никаких супер-синглетонов бдящие за всем и вся. Равно как и с микросервисами, внутренние объекты должны иметь минимум точек входа. Они должны быть просты и понятны. Если какой-то класс выполняет слишком много задач, часть из них надо делегировать другим классам, возможно новым. Это по сути цикломатическая сложность, о которой упомянул Ivan Sokolov, но мне не нравится эта формальность. Да и некоторые вещи сложно формализовать ребром на графе.

    В-пятых, иерархия должна быть логически правильной, наивной, без выпендрёжа. Тоже самое, что и в третьем, плоское лучше объёмного.
    Плохо:
    3dbadffb7d954b2d93a5dfec863289be.png
    Лучше:
    1238e5c4d83340239a250116d4d2fa3a.png
    Пример немного утрирован, но суть, навроде, ясна. Не надо наследовать всё и вся от чего угодно, если есть возможность включить внутрь - включай. Всё остальное от лукавого и только в крайних случаях.

    В-шестых, используй UML, mind maps, блокнот и таск менеджеры. Эти инструменты словно манна небесная спасают дедлайны от полного уничтожения. Хотя UML спорен, им очень удобно следить за структурой проекта, представлять картину с высока, рисовать его стоит самому, учитывая неявные связи и убирая рудиментарные. Mind maps помогут собрать мысли в кучу. Блокнот банально запишит то, что постоянно забывается. Таск менеджеры сформируют привычный график, отобразят прогресс, помогут фокусироваться на текущих задачах, не растекаясь по проекту.

    В-седьмых, изучи декларативное программирование. Шикарная вещь, которая позволяет сконцентрироваться на задаче, а не на решении. Из коробки в функциональных (erlang) и логических (prolog) языках, однако многие элементы существуют и в монстрах вроде C#/Java, Python, особенно JavaScript. Насчёт Go не знаю, но на первый взгляд весьма декларативный.

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

    Ещё пара абзацев. Ну про вредные советы: методы надо делать ровно такими, какие они должны быть. 20 строк - это что-то вроде лакмусовой бумажки, однако это лишь один из параметров. Очень часто требуется сделать громадную функцию для работы со сложным API или подробить много разных чисел в циклах. Поэтому ориентироваться на это плохая идея. Равно как и папки-подпапки-подпапками погоняемы, максимум - два уровня в чрезвычайно сложных проектах. Иначе будет очень сложно ориентироваться. Ещё происходит странный возврат к комментариям. На мой взгляд, если это не продаваемая за большие деньги библиотека - нах*й надо. Документация в комментариях - рудимент кода, он нигде не используется, зато требует поддержки, на что приходится распылять внимание. Если нет условного рефлекса править комментарий после кода - выбрасывайте и не жалейте. Везде! Без исключений. Ещё есть много "архитектурных" паттернов. Снова вред, если вы не работаете в Google, где вашу зарплату надо оправдать умными словами. Самый эффективный способ - программировать наивно. Чем проще для вас сейчас, тем лучше для вас потом. Если думаете больше десяти минут - плохо думаете... Но об этом позже. Паттерны это некая систематизация неких знаний, причём совершенно не понимаю, зачем её вообще сделали. Да, архитектура в некотором роде нужна, но постоянно искать какой паттерн здесь надо использовать, если это не проект на 100500 лет вперёд - нельзя. Почти всегда будет дешевле в случае неуспеха отрефакторить всё и вся, чем переписывать с нуля или тратить месяцы на продумывание архитектуры... В которой также могут быть ошибки.

    И последнее. Отдыхайте. Если чувствуете, что задыхайтесь - пройдитесь, подышите. Если чувствуете, что мозги плывут - отвлекитесь, подумайте о другом. 8 часов в день для программиста - это дикость, но это реальность. Для разных людей наибольшая эффективность поддерживается где-то 3~6 часов, причём некоторым требуются перерывы каждые пол часа, другому хватит обеденного перерыва, а третьему вообще нельзя сегодня никаких отвлекающих факторов, ибо "волна". На самом деле, человек существо динамичное, так что будут разные дни. Но если не получается сейчас - не бесите самого себя. Отдохните, перекусите, пробежитесь, покурите, проверьте почту, послушайте музыку, почитайте статью. Не тратьте время бездарно и, что интересно, проблемы будут решаться, усилия будут прикладываться аналогичные, но вот ощущения от работы станут совершенно другими.
    Ответ написан
    7 комментариев
  • HTML блочные элементы внутри строчных?

    agmegadeth
    @agmegadeth
    Веб-разработчик в дизайн студии
    Блочные, строчные, блочно-строчные. Фигачь как хочешь во что хочешь пока это работает. И даже плюй на валидаторы.
    Мне ничего не мешает сделать тег a блочным, а div строчным в css. И какой валидатор это отследит?
    Ответ написан
    Комментировать
  • В каком порядке изучать front-end (и не только) технологии?

    bugo_aneo
    @bugo_aneo
    Верстальщик по жизни, буддист, кофеман
    Владимир - ВПЕРЕД!!!
    Тут вам и чем падаван отличается от ждедая, и чего знать надо и в каком порядке можно изучать. НО скажу вам по секрету- нет лучшего учителя, чем практика! Простите, но уходите из "конторки" и окунайтесь в реальный мир - берите большой проект и верстайте, верстайте, верстайте!!!

    Удачи и упорства!
    Ответ написан
    1 комментарий
  • Как обновить cookie после history.back();?

    Stalker_RED
    @Stalker_RED
    Два варианта:
    1. Записывать в lacalStorage копию значения или хеш от новых кук, и дату их изменения.
    А при загрузке страницы обновлять принудительно, если устарели.

    2. Запретить кеширование.
    Cache-Control: no-cache, max-age=0, must-revalidate, no-store

    Учитывайте, что при этом могут быть потери производительности.
    Ответ написан
    Комментировать
  • Как реализовать фильтрацию?

    LightAlloy
    @LightAlloy
    Ruby developer
    Room.where('level != last_level')
    То же самое:
    Room.where.not('level = last_level')
    Ответ написан
    1 комментарий
  • Как зарегистрировать пользователя, если я авторизован в devise?

    Dem1
    @Dem1 Куратор тега Ruby on Rails
    Ruby on Rails developer
    У вас происходит rollback, соответственно валидация не происходит
    Сохранить через save!, именно с ! знаком, выкинет ошибку, увидите какую).
    Скорее всего нету пароля.
    Для инвайтов воспользуйтесь devise_invitable
    Ответ написан
    Комментировать
  • Как сделать обратную сторону joins?

    @CapeRatel
    Order.includes(:order_expired).where(order_expireds: { order_id: nil })


    в эту сторону копайте
    Ответ написан
    1 комментарий
  • Как отфильтровать массив?

    AlexanderMint
    @AlexanderMint
    Web Developer
    У вас очень странный код (советую поставить rubocop и почитать) и изначально странная реализация, но попробую перевести то что вы написали, на что то более читаемое

    favorite_room = cookies[:favorite_room].present? ? Room.where(id: cookies[:favorite_room].split('/')) : []
    Ответ написан
    1 комментарий