• Как организовать синхронизацию игрового мира между клиентом и сервером?

    uvelichitel
    @uvelichitel
    habrahabr.ru/users/uvelichitel
    Очень широкая тема. Про это книги пишут. Вот пара общих советов
    • Делайте клиента в браузере, меньше хлопот, шире аудитория. Такой выбор ограничивает транспорт до websocket и формат данных до JSON(ну еще msgpack).
    • Синхронизируя распределенное состояние сверяйте не весь массив, а только его пошаговые изменения как делают git и rsync (по возможности используйте не shared state , а message passing) Весь массив можно иногда проверять на консистентность его hash суммой.
    • Накапливайте состояние на сервере, как последовательность изменений адресованное hash суммой, как и делает git.(тут гуглить content addressable store)
    • При поиске консенсуса используйте не 'кто первый', а 'он знает, что я знаю'. (тут гуглить protocol consensus)
    • Определитесь, какая степень дублирования данных на сервере и клиентах достаточна для консистентности игры и приемлема по цене ресурсов. (тут гуглить sharding replication)
    Ответ написан
    Комментировать
  • Как пользователю позволить выбирать диапазон месяцев?

    sensus
    @sensus
    В чем вопрос то?
    Как реализовать объект выбора месяцев и т.д.?
    Курите в сторону range
    Ответ написан
    Комментировать
  • Почему не загружается аватар?

    egor_nullptr
    @egor_nullptr
    Откройте один раз в браузере сайт https://habrastorage.org и ваша проблема решится. Разработчик тостера в курсе этой проблемы и когда-нибудь однажды она решится.
    Ответ написан
    1 комментарий
  • Как пользоваться фильтрами в Symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А в доктрине у вас все выборки должны находиться в вашем репозитории, и там вы уже решаете что как и когда применять и как юзать query builder. То есть если вы хотите взять каких-нибудь данных вы должны взять репозиторий и попросить его дать вам данных. То есть от доктрины будут зависеть только репозитории.

    Репозитории можно регистрировать как обычные сервисы:
    class: Doctrine\ORM\EntityRepository
    factory_service: doctrine.orm.default_entity_manager
    factory_method: getRepository
    arguments:
         - Acme\CustomerBundle\Entity\Customer


    в идеале такие операции как $em->persist тоже стоит делать внутри репозитория а $em->flush вообще во фронт контроллере (перед отдачей респонсов что бы появились id-шки).

    Так же у доктрины есть глобальные фильтры как прямой аналог скоупов в Yii но их стоит использовать крайне осторожно.
    Ответ написан
  • Как создать раскрывающийся список на JS?

    Writerim
    @Writerim
    Заполнить позже...
    Вам уже отвечали.

    $('[name="product_category[]"]').click(function(){
       $(this).prop('checked', true);
       $('#your_block_id').show();
    })
    Ответ написан
    Комментировать
  • Почему на Toster нет анти лайка?

    Jump
    @Jump
    Системный администратор со стажем.
    8144600e0fb148faaba1d39ea5809dc5.pngА разве его нет?
    Ответ написан
    2 комментария
  • Почему на Toster нет анти лайка?

    karaboz
    @karaboz
    Директор продуктов в Хабре.
    Вместо антилайка у нас существует кнопка «Пожаловаться». Она то и предназначена в потенциале для ограничения действий тех, на чьи ответы, вопросы или комментарии приходит много жалоб. Подробнее о том, как будут работать жалобы в недалеком будущем, читайте в моём ответе на другой вопрос Как работает кнопка «Пожаловаться», есть ли от нее толк?
    Ответ написан
    2 комментария
  • Выбор между.Net и 1С?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    2 комментария
  • Где хранить данные, которые меняются раз в 3-6 месяцев?

    AlexPTS
    @AlexPTS
    Full stack веб разработчик
    Хранить их в БД, но при этом кешировать. Чтобы за таким словарем не бегать в БД каждый раз.
    Ответ написан
    Комментировать
  • Что такое 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 комментария
  • Что не так с резюме?

    Basters
    @Basters
    Кокер-спаниель
    тупорылая отмазка не более. Нормальное резюме. А коли они берут сотрудников на работу по красивости составленного резюме, то шли нафиг такую контору! Сейчас айтишников толковых и так не хватает! Пусть дальше берут идиотов за красивые глаза, а нормальные парни найдут свое место
    Ответ написан
    2 комментария
  • Проблема входа на Toster со смартфона?

    karabanov
    @karabanov
    Системный администратор
    Сжатие трафика отключите и возрадуйтесь.
    Ответ написан
    Комментировать
  • Стоит ли в Symfony2 заменять Assetic на связку bower + grunt, или совместить их использование?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Согласен с maxclax, не стоит. Лучше на bower + gulp + свои node-visitor-ы для twig.
    Ответ написан
    5 комментариев
  • Как построить базу данных под личные сообщения?

    thewind
    @thewind
    php программист, front / backend developer
    Так вы напишите, как сами придумали и в чем сомневаетесь. А то получается не сайт советов и помощи, а сайт решения чужих проблем под ключ.
    Ответ написан
  • Может ли веб-разработчик пользоваться OS Windows?

    Zippovich
    @Zippovich
    сплю, ем, сплю, ем, сплю, ем
    очень глупый вопрос, ИМХО
    Ответ написан
    Комментировать
  • Как понять фрагмент кода вида (function(){}()) на js?

    TekVanDo
    @TekVanDo
    Javascript Developer
    (function(){})() - сразу же вызывает функцию, т.е. код эквивалентен:
    (function(ss,mm){
        console.log(ss,mm);
    })("привет","мир");
    
    function test(ss,mm){
        console.log(ss,mm);
    }
    
    test("привет","мир");
    Ответ написан
    Комментировать