• Как навесить canvas на scriptableObject?

    freeExec
    @freeExec
    Участник OpenStreetMap
    У вас плохая архитектура. ScriptableObject - это по сути статичное хранилище данных, и оно ничего не должно знать об игре и тем более как-то взаимодействовать с UI. Вам нужен отдельный MonoBehaviour который будет олицетворять игровой объект, он будет взаимодействовать с миром и знать свойства Item.
    Ответ написан
    Комментировать
  • Как получить атрибуты кнопки?

    0xD34F
    @0xD34F Куратор тега React
    currentTarget:

    event.currentTarget.getAttribute('имя_атрибута')

    Или, есть вариант атрибут вообще не устанавливать, а передавать в обработчик нужное значение:

    onClick={e => props.arrowHandler(e, VALUE)}
    Ответ написан
    1 комментарий
  • Как распарсить текстовый формат файла?

    Это у вас случайно не YAML?
    Если да, то https://godoc.org/gopkg.in/yaml.v2
    Какое расширение файла?
    Ответ написан
    3 комментария
  • Как сделать хороший шаблонизатор?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Если лайаут одинаковый на каждом маршруте:
    render() {
      return(
        <Wrapper>
          <Header />
          <Main />
          <Footer />
        </Wrapper>
      );
    }

    в компоненте Main располагаете Switch с маршрутами.

    Если на разных страницах он может быть разный. То можно сделать контейнеры для контента:
    const MainPageLayout = ({ children }) => (
      <Wrapper>
        <Header />
        <PageContent>
          {children}
        </PageContent>
        <Footer />
      </Wrapper>
    );

    и оборачивать в него код страницы:
    const SomePage = () => (
      <MainPageLayout>
        {/* page code */}
      </MainPageLayout>
    );

    а в главном компоненте расположить Switch с маршрутами.

    Компонент Router лучше расположить над всем приложением:
    <Provider>
      <Router>
        <App />
      </Router>
    </Provider>
    Ответ написан
    1 комментарий
  • Как использовать тег cut?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Смотрите гайд по CSS и HTML здесь: htmlbook.ru/blog/obrezaem-dlinnuyu-stro
    Тега не существует.
    С помощью JavaScript/jQuery можно так же сделать полное раскрытие текста при клике, убрав ненужные правила CSS.
    Ответ написан
    1 комментарий
  • Как использовать тег cut?

    search
    @search
    мама говорит что я особенный
    Тег cut - это кастомный тег. В HTML спецификации такого нет.

    Возможно вас заинтересует вот эта либа https://dollarshaveclub.github.io/shave/ . Она как раз про обрезку текста и html.

    Или ищите по сочетанию js truncate html
    Ответ написан
    2 комментария
  • Есть что нибдуь кроме ajax?

    Wolfnsex
    @Wolfnsex Куратор тега HTML
    Если не хочешь быть первым - не вставай в очередь!
    Есть ли еще какая нибудь технология для асинхронных запросов к бэкэнду кроме ajax? В качестве бэкэнда golang
    На чем бекенд - разницы особо нет (обычно).

    Есть ВебСокеты, вполне себе асинхронно (при должном подходе), глобальная разница между ним и AJAX'ом в том, что соединение поддерживается на постоянной основе.

    Ещё есть socket.io, тоже что-то наподобии сокетов, но не подскажу точно, как именно оно работает, очень давно использовал и подзабыл...
    Ответ написан
    2 комментария
  • Как распарсить json?

    bitver
    @bitver
    Это невалидный json. Соответственно это вообще не json. Или превратите это в json или пишите парсер этого чуда.
    Ответ написан
    2 комментария
  • Как работают горутины?

    В Го есть такая системная переменная как $GOMAXPROCS, по-умолчанию она равна количеству процессорных ядер. Её значение определяет, сколько процессов будет запущено планировщиком го. Горутины распределяются между этими процессами. Если одна горутина заняла все вычислительное время одного процесса (как в вашем случае бесконечный цикл for, ибо он не прерывается операциями ввода/вывода или другими случаями ожидания ресурсов), то если $GOMAXPROCS=1, другие горутины будут ждать освобождения единственного процесса.
    Когда вы меняете цикл на таймер, в момент вызова time.Wait процесс освобождается и может выполнить другую горутину.
    Ответ написан
    1 комментарий
  • Почему go get не может найти пакеты?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    cd $GOPATH
    go get -u github.com/golang/lint/golint
    Ответ написан
    1 комментарий
  • Почему rabbitmqctl исполняется так долго?

    @A1estro
    Можно strace rabbitmqctl report сделать и посмотреть, что оно делает внутри.
    У меня оно меньше секунды выполняется.
    Ответ написан
    1 комментарий
  • Что такое Less и Sass?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Лень двигатель прогресса. Хороший пример - принцип DRY - Don't repeat yourself. Я весьма подозреваю что вы стараетесь соблюдать этот принцип когда делаете макеты или чем вы там занимаетесь. Так же я весьма уверен что вы хотя бы пытались чуть автоматизировать рутину своей повседневной работы. Так же у вас могли быть ситуации когда вы переиспользовали какие-то элементы. Мало ли.

    Так вот... CSS это тупая таблица стилей. Селектор и стили, ничего сверх умного тут придумать нельзя. Лет 5-10 назад было довольно модно держать один мегажирный CSS файл на 10К+ строк и радоваться жизни внося все больше изменений и т.д. Соответственно даже если вы соблюдаете всякие правила модульной верстки и все такое, у вас возникает несколько проблем:
    • организация стилей, то есть держать все в одном файле не удобно особенно когда проект длится годами
    • Дублирование стилей и селекторов. По мере развития проекта появляются какие-то снипиты которые можно реюзать. Так же у вас может появиться масса однообразных селекторов отличающихся лишь немного. При модульных подходах вложенности редко имеет место быть но все же имеет. Но не будем забывать что большинство фигачит селекторы просто так. В итоге если мы переместили блок или переименовали класс какого-то блока нужно отредактировать еще массу селекторов.
    • Привязка размеров и параметров к другим стилям, например у вас в стилях задана ширина блока, от нее зависят другие параметры, отступы для других блоков и т.д. Да, в css3 появился calc для этого но это было относительно недавно и только с недавних пор можно почти без опаски использовать эту штуку.
    • Таблицы стилей, как и HTML ориентированы на удобный разбор этого добра машиной, но не человеком. Человек же существо ленивое и как-то вот лень лишний раз скобку поставить или точку с запятой. Просто лень.


    Есть так же хорошее правило, или идея если хотите.... Если код можно сгенерить - его лучше сгенерить. То есть для решения всех выше перечисленных проблем придумали препроцессоры. Они как бы были и раньше всех этих scss/less/stylus но как-то не решали всех проблем и т.д. Что в итоге было предложено (перечисляю в том же порядке что и в списке выше).

    • У CSS есть такая штука как @ import. Но не очень круто импортировать сотню стилей в продакшене. Стоит сделать так что бы все стили были склеены при сборке проекта. Эта идея в итоге развилась и если разработчик использует это дело правильно, можно зайти в любой файл со стилями и увидеть список всего от чего зависят эти стили. Какие стили подключаются и т.д. Причем один файл с зависимостями может быть подключен в нескольких файлах а препроцессор сам разберется как и куда все вставлять сгенерив максимально оптимизированный по структуре файл. А разработчик получил четкую структуру файлов и возможность быстро найти где что и от чего зависит.
    • С селекторами проблему предложили решить наиболее логичным вариантом. Если у нас есть вложенные селекторы, то имеет смысл определять их внутри блока этого селектора. Это существенно упрощает поддержку стилей. Так же для управления снипитами и прочим добавили миксины - эдакие параметризованные или нет функции которые выплевывают шматок CSS. До появления штук вроде autoprefixer это был единственный способ писать поддерживаемые стили, использовать плюшки CSS3 и вообще новые плюшки и не сойти с ума от префиксов. Префиксы это только пример, там могут быть самые разные штуки позволяющие грамотно производить реюз стилей
    • Проблему зависимостей значений стилей друг от друга решили... собственно самым очевидным способом - переменные. Это удобно, легко поддерживать и в умелых руках это мощный инструмент. Нужно поменять базовые цвета - не нужно лазить по 100500 блоков и править значения руками, можно поправить переменные и все будет хорошо.
    • Насколько я помню SCSS/LESS не стремились решить эту проблему. Какие-то решения образовывались сами собой с течением времени. В плане минимализма и выразительности пожалуй сейчас самая крутая штука это stylus.


    Что в итоге произошло. В один прекрасный момент какие-то там рубисты придумали SCSS (они вообще не любят все что не в стиле ruby в плане минимализма и выразительности). Затем чуваки подумали и сказали, SCSS это круто но почему-то они используют синтаксис знакомый именно Ruby разработчикам а не обычные для CSS конструкции. В итоге реализовали LESS, причем его уже реализовали на javascript, что с наличием node.js позволило это все добро еще на одной платформе собирать. А так как под эту платформу и так плодили препроцессоры оно удачно вписалось.

    Далее уже шли какие-то модификации дальнейшие, вроде того же Stylus, где синтаксис упростили просто до нельзя.

    Личное мнение. На сегодняшний день я не вижу смысла использовать чистый CSS хоть на малых хоть на больших проектах. Вот вообще никакого.
    Ответ написан
    3 комментария
  • Как обрабатывать код ошибки к базе?

    astec
    @astec
    Разработчик https://debtstracker.io/
    Вам нужен type assertion - приведение к типу.

    if pqError, ok := err.(*pq.Error); ok {
    ...
    }
    Ответ написан
    Комментировать
  • Как обрабатывать код ошибки к базе?

    @RidgeA
    Оно возвращает стандартную ошибку.
    Надо привести к pg.Error

    Как-то так:
    https://github.com/lib/pq/blob/a6140c91df5fb930610...
    Ответ написан
    Комментировать
  • Как обрабатывать код ошибки к базе?

    db.Exec возвращает интерфейс error, вам нужно его попробовать привести к *pq.Error, чтобы обработать.
    _, err := db.Exec(insert)
    if err != nil {
        if pgError,ok := err.(*pq.Error); ok {
            // Достаём код из переменной pgError
        } else {
            // Пришедший тип не является *pg.Error
        }
    }


    И самое главное!
    НИКОГДА не используйте Sprintf для формирования запроса, вы открываете SQL Injection в вашем коде. Используйте возможность подстановки, которую даёт вам пакет database/sql
    db.Query("select id, name from users where id = ?", 1) // Вот так, например
    Ответ написан
    Комментировать
  • Как выделить несколько галочек?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    ToggleGroup для того и нужен, чтобы нельзя было выделить несколько галочек, читайте внимательнее мануал. Если хотите выделить несколько - удалите ToggleGroup, вот и всё.
    Ответ написан
    Комментировать
  • Что такое JFM и для чего он нужен?

    longclaps
    @longclaps
    Journal of Fluid Mechanics is the leading international journal in the field and is essential reading for all those concerned with developments in fluid mechanics.
    Журнал, стало быть, механики жидкостей. Одним нужен, чтобы в него писать, другим - чтобы его читать. Вы писатель или читатель?
    Ответ написан
    Комментировать
  • Как сделать управление персонажем с помощью мыши и клавиатуры?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Всё сводится к поиску положения мышки в мировых координатах, после этого, зная положение игрока, можно делать всё, что душе угодно. Основные методы, которые вам нужны это Camera.ScreenPointToRay и Camera.ScreenToWorldPoint. Кроме того, на эту тему есть официальный туториал, рекомендую посмотреть.
    Ответ написан
    1 комментарий