
Mikhail
27.02.2017
09:24:00
не чаще трех раз в неделю?
гороскоп надо посмотреть, почитать что астрологи скажут. желательно делать это каждое утро перед открытием идеи

Sergey
27.02.2017
09:24:45

Nikita
27.02.2017
09:25:21

Sergey
27.02.2017
09:27:32

Google

Nikolay
27.02.2017
09:27:47

Nikita
27.02.2017
09:30:25
@CapDev ты вообще сколько уже опыта имеешь с аккой?

Nikolay
27.02.2017
10:02:44
в slick 3.2.0 вместро (foo, bar) <> (FooBar.tupled, FooBar.unapply) можно писать (foo, bar).mapTo[FooBar]

Grigory
27.02.2017
10:03:25
наконец то)
хотя, стоит признать, в старом синтаксисие была своя романтика

Nikolay
27.02.2017
10:04:12
он все так же доступен

Grigory
27.02.2017
10:04:29
ну я саркастически написал) лучше бы убрали его

Vladimir
27.02.2017
10:04:38
и даже (FooBar.apply _).tupled не нужен будет если companion-object определен?

Nikolay
27.02.2017
10:04:57
я не нашел у них нормального списка фич новой версии. видел может кто?
только список коммитов с ссылками на них

Google

Nikolay
27.02.2017
10:05:55

Nikita
27.02.2017
10:06:23
Кто знает как с телефона нормально смотреть это https://scalafiddle.io/sf/aMU66L4/1 ?? Там код по 1 символу читать приходится, а я не машина тьюринга
Может кто-нибудь помочь и в личку кинуть текст кода оттуда?
Спасибо Николай!

Sergey
27.02.2017
10:08:35
одинарные линии это tell
двойные это обращения к TypedActor
Избавляюсь от TypedActor
Sessions это хранилище инфы игрока
а Storage работает с базой
Думаю как теперь реализовать обращения к Sessions
это запрос инфы пользователя при логине, и сохранение результатов после боя

Nikita
27.02.2017
10:17:30
А как ты планируешь Sessions scalability?
Ты там один прогер чтоле? Этот проект работа или хобби?
Просто в твоей задаче есть способ без асков все сделать, и даже без таймаутов

Sergey
27.02.2017
10:40:58
Хобби переросшее в работу
Да я тоже к этому пришёл сейчас делаю Sessions и Storage на сообщениях без асков и футур
А как ты планируешь Sessions scalability?
к ней запросы не часты, во время логина пользователя и после боя (который идёт минут 10)
основной поток идёт от PacketLogic в GamesMan и к многочисленным game (50к на ноду)
Когда sessions будет узким местом
видимо вынесу её на отдельную ноду вместе со Storage и базой

Nikita
27.02.2017
10:55:08
А эти game - они шардятся? У них есть состояние? Персистишь куда-то?

Sergey
27.02.2017
10:57:55
пока не шардятся, нет такой нагрузки (50к игр это нагруз тестирование), реально пока 1к (игра вышла в бета тест пару недель назад)
Но будут шардится т.к. основная нагрузка на них
Game внутри это игровая логика , ходы по очереди, построенная на scheduler ах
без персистентности

Nikolay
27.02.2017
11:01:11
а что именно построено на шедулерах?
таймаут хода?

Nikita
27.02.2017
11:15:07

Sergey
27.02.2017
11:16:51

Google

Sergey
27.02.2017
11:18:07

Nikita
27.02.2017
11:20:02
Про сохранение результатов после боя - это больше ответственность game - а если хочешь какую-то статистику по игроку обновить - то тут я бы строил аля ream model from game's journal (с сохранением оффсета), иначе у тебя игра будет заниматься обеспечением гарантийной доставки результатов самой себя

Sergey
27.02.2017
11:20:11
Мне кажется сообщениями всёт таки проще будет масштабировать, и как бы единообразно всё сделано

Nikita
27.02.2017
11:20:32
Ну это конечно если у тебя игра что-то вообще персистит

Sergey
27.02.2017
11:23:07

Max
27.02.2017
11:23:52
Всем привет, я - новичок в скала, решил узнать у знатоков. Вопрос состоит в следующем - есть ли возможность работать с Google Guice следующим образом?
def bindSomething[T]() : Unit = {
bind[T].to[ServiceImplementation]
}

Sergey
27.02.2017
11:24:02
Sessions единый источник данных в системе, а Storage единый писатель читатель базы

Max
27.02.2017
11:31:00
Сам понял ошибку, вопрос исчерпан

Nikita
27.02.2017
11:32:55
вообще если ты все данные сохраняешь через одну точку - это может стать узким местом, нужно держать баланс и не смешивать все данные в одну кучу, например наверняка результат игры можно записать без знания о статусе логина юзера и т.п


Sergey
27.02.2017
11:54:54
Почему это станет узким местом ? пересылка сообщения практически бесплатна
а так бардак будет если все подряд будут обращаться к базе
Гарантия доставки в этом проекте не важна

Nikita
27.02.2017
12:08:08
обращайся к базе через один коннектор - это ок, но зачем же через сессии?
и вообще хорошая практика иметь разные repository/store для разных данных
чтобы у тебя не было одного мега сервиса который умеет делать все возможные операции с базой

Sergey
27.02.2017
12:19:13
ну вобще да результаты игры к сессиям не сильно относятся, хотя и увеличивают там победы поражения,
т.е. сделать что бы gameManager к storage обращался ?
И storage разделить ? Чтоб потом по разным базам разнести при масштабировании ?

Nikita
27.02.2017
13:29:22
да пусть сама игра пишет в некий Store.save(gameResult): Future

Google

Nikita
27.02.2017
13:29:45
зачем парента напрягать этой работой
сторадж делить больше не для того чтобы по разным базам разносить (хотя это тоже хороший плюс), просто разные вещи надо держать отдельно друг от друга, так порядка больше, легче понять и поддерживать, легче расширять
а статистику ты можешь отдельно обновлять, тут можно любой кривизны решение придумать, хоть джоб который раз в какое-то время проверяет есть ли новые результаты (опять же нужно хранить оффсет - какую последнюю игру ты обработал, чтобы счетчик не менялся больше чем надо)

Admin
ERROR: S client not available

Nikita
27.02.2017
13:35:01
хоть через некий сервис который будет сохранять результат игры и асинхронно обновлять статистику (тут нужно убедится что у тебя не будет дубликатных запросов, либо посылать сообщение at-most-once/fire&forget/tell либо если есть перепосылка то с принимающей стороны где у тебя статистика меняется нужно обеспечить идемпотентность)
тут можно еще на будущее, если понадобится, подумать о backpressure - и если надо прикрутить akka-streams например, ну или чем тебе удобнее тротлить
так у тебя игра это актор и типа есть гарантия что только один актор для одной игры в один момент времени работает? akka sharding?

Sergey
27.02.2017
13:49:11
"зачем парента напрягать этой работой"
Мне кажется так правильней если он через парента будет отдавать, сообщения бесплатные, плюс парент удаляет игру у себя из коллекций, когда она закончилась
Это плохо когда такие связи через голову, запутаться легко когда система разрастётся

Diemust
27.02.2017
13:50:59
максимально дробить всё - хороший паттерн в акке, удалять кэш можешь через pipeTo, если это не критично

Sergey
27.02.2017
13:54:10
"так у тебя игра это актор и типа есть гарантия что только один актор для одной игры в один момент времени работает? akka sharding?"
Да gamesManager создаёт игры и форвардит им меседжи.
claster sharding имеется ввиду ? Ещё не делал кластер (нагрузки не те), только разбираюсь с Кластером

Nick
27.02.2017
14:01:59
кстати, а кто как с докером работает?

Grigory
27.02.2017
14:04:53
docker-compose, rancher ):
в скалалазе Женя говорил о его опыте с деплоем контейнеров помнится
мезоса много тогда было

Anton
27.02.2017
14:16:05

Nick
27.02.2017
14:16:22
@fundamentalparticle а насколько красиво jrebel.jar ложить в docker image?)

Anton
27.02.2017
14:19:32

Nick
27.02.2017
14:19:57
вообще можно через compose конечно сунуть)

Google

Mikhail
27.02.2017
14:20:02

Anton
27.02.2017
14:20:11

Grigory
27.02.2017
14:22:44
наложивать

Mikhail
27.02.2017
14:30:08

Sergey
27.02.2017
14:46:23
присунуть

Nikita
27.02.2017
14:52:59

Sergey
27.02.2017
15:22:33
домашку долго делать, а меседжи бесплатные
Зато чётко понятно game ни с кем кроме gamesMan не взаимодействует ! С ростом системы это окупится сторицей.
иерархия !

Алексей
27.02.2017
17:14:17
Всем привет. Собрал в одном месте все чаты для программистов - @Chats_Developers, пользуйтесь на здоровье. Ваш чат у нас тоже есть, не удаляйте это сообщение.

Mikhail
27.02.2017
17:31:18


Ignat
27.02.2017
21:04:10
Всем привет!
Заранее прошу прощения за длиннопост, но по ходу другой группы для общения на тему вакансий у нас нет.
Требования:
- Опыт разработки на Scala от года, опыт разработки от трёх лет. Используем Scala 2.12.x, ;
- Опыт работы с БД. Используем Postgres через Slick, Elastic, Redis;
- Devops-практики: kubernetes, docker, ansible, bamboo, akka;
- Умение грамотно документировать код (поверьте, это важно), confluence;
- Умение создать и поддерживать API для внешних интеграций;
- Git (bitbucket), Jira
Задачи:
- Предстоит разрабатывать и поддерживать внутреннюю Customer Experience Management system, которая является основным инструментом для работы агентов по продаже недвижимости, и ее внешние части - сайты по продаже недвижимости jqestate.ru, rublevka.ru и другие.
Условия работы:
- Работа в офисе в центре Москвы;
- Молодой коллектив (средний возраст сотрудников – 25 лет);
- Возможность начинать рабочий день с 10 до 12;
- Конкурентоспособная индексируемая заработная плата, в среднем от 150 тыс., обсуждается с кандидатом;
Дополнительно:
Напишите небольшой рассказ о себе и своих проектах, (особое внимание уделите тому, что делали вы) и приложите ссылку на GitHub. Если там ничего нет, то пришлите пример своего сложного и красивого кода, объясните почему он вам нравится.
#job #work
Если кому-то интересно – пишите мне лично или на почту mail@ignat.co.uk


Sergey
27.02.2017
21:10:22
смысл писать CRM на скале?

Misha
27.02.2017
21:11:28
а почему нет?

Anton
27.02.2017
21:11:28