• Как сделать плавное появление элемента при появлении на экране?

    @McBernar
    https://developer.mozilla.org/ru/docs/Web/API/Inte...

    Ну а дальше по вкусу подключаете css-класс, который изменит visibility/opacity с нужным таймингом.
    Ответ написан
    Комментировать
  • Как организовать хранение сообщений в Redis?

    2ord
    @2ord
    При помощи RPOPLPUSH
    https://big-elephants.com/2013-09/building-a-messa...
    https://stackoverflow.com/questions/6192177/redis-...
    Но если нужна надежная доставка, то нужно подумать о замене на другую MQ.
    Ответ написан
    Комментировать
  • Что лучше использовать для чата: MongoDB или Redis?

    khegay
    @khegay
    Founder, Garuna
    Лучше использовать MongoDB как базу данных, а Redis как сервис кеширования.
    Ответ написан
    Комментировать
  • Откуда в sources webpack Vue?

    @deliro
    Ответ написан
    Комментировать
  • Как заменить pattern в SVG?

    @loonny
    Что именно вы заменяете? Заменяя ссылку в атрибуте xlink:href элемента image все работает хорошо, все меняется.

    В CSS есть clip и clip-path для создания маски, возможно вам пригодится
    Ответ написан
    7 комментариев
  • Что лучше использовать для проектирование API в high-load сервисе?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Протокол обмена данными к факту нагрузки не имеет отношения. Используйте то что решает ваши задачи. Напомню что:
    • REST - Representational State Transfer (простая передача состояния ресурсов)
    • JSON API это на самом деле HAL ( Hypertext Application Language )
    • А GraphQL решает просто проблему распределенных микросервисов


    А Highload это про архитектуру
    Ответ написан
    Комментировать
  • Как работают современные мессенджеры?

    EvgenyMamonov
    @EvgenyMamonov
    Senior software developer, system architect
    как сервер за столь короткое время умеет прошерстить базу данных, найти сообщения конкретного пользователя и отдать их

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

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

    Что касается безопасности, если не использовать e2e шифрование, как вариант, можно использовать обычные RSA ключи. Например на сервере генерируем два ключа, открытый отправляем кленту, он шифрует им сообщение и передает сообщение на сервер. Вы на сервере его расшифровываете при помощи закрытого ключа. Для отправки сообщения клиенту, можно сделать тоже самое. Клиент также генерирует два RSA ключа и открытый ключ отправляет серверу. Когда серверу нужно доставить сообщение клиенту, он шифрует сообщение открытым ключём, который ему высылал клиент и отправляет ему.

    Мне тоже интересно узнать другие варианты решения этой задачи, буду следить за этой темой :)

    Хорошее дополнение по хранению сообщения и организации поиска от Ильи
    Распределение нагрузки решается шардингом — получается много небольших БД вместо одной огромной. Скорее всего каждое сообщение разбивается по словам/частям слов и сохраняется в поисковый индекс типа слово—message_id и такой индекс строится для каждого пользователя и тоже шардируется. При поиске сначала получаем идентификаторы подходящих сообщений из поискового индекса, потом выгружаем сообщения из БД с сообщениями.

    Дополнение от Stalker_RED
    только не "сообщения одного пользователя всегда были на одном и том же сервере" а сообщения из одного чата/канала/группы (включая чаты, в котором всего два участника). То-же самое касается построения индекса.
    Ответ написан
    7 комментариев
  • Как найти элемент во вложенности и удалить в MongoDB?

    hzzzzl
    @hzzzzl
    попробуй как-то так

    User.updateOne({
      { _id: 1 },
      { $pull: { items: { _id: '24123123dsfasdf32' } } }
    })


    или так, если первое откажется работать

    User.updateOne({
      { _id: 1 },
      { $pull: { items: { _id: { $eq: '24123123dsfasdf32' } } }
    })
    Ответ написан
    1 комментарий
  • Как провести цикл v-for 5 раз?

    <div v-for="item, index in [].concat(arr, arr, arr, arr, arr)" : key="index">
      {{ arr }}
    </div>


    <template v-for="item in 5" >
      <div v-for="item, index in arr" : key="index">
        {{ arr }}
     </div>
    </template>
    Ответ написан
    1 комментарий
  • Составление формулы для теории вероятности?

    @polybook
    Если я правильно понимаю, игрок платит S=59 и наудачу вытаскивает из чемодана один предмет (ценой s_i). Казино на большом числе игр хочет остаться в выигрыше. Если так - то простой вариант алгоритма:
    1. p_i=S/(s_i)^k
    2. Вычислить Р=сумму всех p_i
    3. Нормировать p_i=p_i/Р

    Если взять k=1.5, то средний выигрыш казино будет около 50%. р_1=13%, а р_14=0.02%
    Конечно, формула может зависеть от условий (играет ли игрок однократно или нет - надо ли его вовлекать)? и т.д. Как правильно сказано выше, нужен балансер.
    Ответ написан
    Комментировать
  • Как скрыть определенный элемент Vue без привязки к переменной?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    <template>
    	<div v-for="(item, index) in items" :key="index">
    		<span @click="item.open = !item.open">{{ item.question }}</span>
    		<span v-if="item.open">{{ item.answer }}</span>
    	</div>
    </template>
    <script>
    export default {
    	data: {
    		faqs: [
    			{
    				open: false,
    				question: '...',
    				answer: '...',
    			},
    		],
    	},
    }
    </script>
    Ответ написан
    Комментировать