
Subbotin
29.08.2018
16:22:26

Roman
29.08.2018
16:26:24
потому-что рендеру ВСЕГДА нужно укладываться в 16 миллисекунд для полноценных 60 фпс без микролагов
и этого сложно добиться с GC ибо он плохо предсказуем

Subbotin
29.08.2018
16:27:27

Google

Roman
29.08.2018
16:27:50
который в любой момент может решить что ему нужно на помойку заглянуть и прое.. потеряет кадр

Subbotin
29.08.2018
16:28:32

Roman
29.08.2018
16:29:24
речь шла о потоках. а рантайм да - один.
то что горутины могут в несколько потоков это всем известно, но то что нельзя просто взять и запустить рендер в отдельном от бизнес-логике runtime'е без GC - увы факт
использовать Go вместе каким-то отдельным рендером который вне runtime'а - вот это вполне годная идея
пускай рендер рисует а Go с данными и логикой работает
но я не уверен можно ли это реализовать..
если бы можно было например рендер написать на Rust и позволить Go каким-то образом импортировать его как дин. библиотеку ака .dll/.so чтоб они делили меж друг другом память

Pavel
29.08.2018
16:34:10
а зачем плодить технологии в одном проекте, все на расте делай и все

Roman
29.08.2018
16:34:32
и асинхронщину тоже я лично писать не хочу

Subbotin
29.08.2018
16:34:57

Pavel
29.08.2018
16:34:57
я вообще не хочу писать, только деньги получать

Google

Pavel
29.08.2018
16:35:10
и не только на расте

?
29.08.2018
16:35:16

Roman
29.08.2018
16:35:31

Subbotin
29.08.2018
16:35:37

Dorian
29.08.2018
16:36:15
c++
Паrни, я вам немного пэхэпэ принес
https://www.peachpie.io

Roman
29.08.2018
16:36:15
Так А что мешает?
отсутствие опыта и времени)) у тебя есть идея как такое реализовать?

Subbotin
29.08.2018
16:38:07
не понял вопрос
Есть куча приложений, где информация в приложении обновляется с частотой в доли герца. Чем там вредят паузы в 5 миллисекунд иногда?
замечу ли я паузу в 5 милисекунд в интерфейсе keepass?
или условном thunderbird
паузу в 5 милисекунд наверное можно заметить в шутере

Roman
29.08.2018
16:41:48

Subbotin
29.08.2018
16:41:52
давно не играл. помню в майнкрафте на жабе лаги напрягали иногда

Roman
29.08.2018
16:45:32

Subbotin
29.08.2018
16:49:50
Меньше анимации в интерфейсе - здоровее психика

Roman
29.08.2018
16:51:41
Меньше анимации в интерфейсе - здоровее психика
видимо не теми приложениями неправильных дизайнеров пользовался, потому-что полное отсутствие анимаций это тоже не айс
но ты конечно можешь сказать что дизайнеры Apple вообще идиоты и в UX не шарят и UI современных айфонов вообще должен быть как UI keepass... но тебя не поймут)))

Виктор
29.08.2018
16:54:17

Google

Виктор
29.08.2018
16:54:48
А, сори, ниже эта мысль была

Roman
29.08.2018
16:55:28

Pavel
29.08.2018
16:56:43

Subbotin
29.08.2018
16:56:51

Roman
29.08.2018
16:58:25
рендер на Go писать нельзя, Go не для time-critical систем изобретался, это всё-равно что молотком шуруп в железо заколачивать
а вот совместить Go с неким внешним рендером но чтоб они работали в 1 процессе (но рендер работал вне runtime'а Go) можно

Vladimir
29.08.2018
17:00:13

Roman
29.08.2018
17:00:57

Виктор
29.08.2018
17:01:07

Roman
29.08.2018
17:03:37
вопрос знатакам cgo:
можно ли написать условный процесс A на Rust и скомпилить его вместе с Go кодом в 1 бинарь, чтоб они спокойно делили меж собой память и могли коммуницировать?
ну или хотя-бы C, но ой как не охота писать на C..

Виктор
29.08.2018
17:03:46
Сори, если вопросы глупые, я не то что бы программист

Daniel
29.08.2018
17:09:23

Roman
29.08.2018
17:09:44

Daniel
29.08.2018
17:10:09
почему нет?
(пример, конечно, надо брать с osx)

Roman
29.08.2018
17:10:31
почему нет?
потому-что медленно (многократное копирование) и некроссплатформенно
зачем, если можно в 1 процесс уложиться?
ведь cgo же компилирует каким-то образом C и Go в один бинарь..

Google

Roman
29.08.2018
17:12:02
но лучше таки писать рендер на Rust а не на C

Subbotin
29.08.2018
17:12:35

Roman
29.08.2018
17:13:36
по сути-ж нам нужно лишь слинковать Rust библиотеку с Go кодом
layout, painting, drawcalls всё в Rust
в Go только использование некого интерфейса, который предоставляет рендеру модели данных

Виктор
29.08.2018
17:17:18

Roman
29.08.2018
17:18:09
но честно говоря переизобретать Qt Quick и QML на Rust нет желания и времени..
уж лучше просто брать Qt и использовать его в качестве фронтэнда и рендера с языком QML и как-то подружить Go с ним... что собственно уже неоднократно делали но проекты эти почему-то все погибли..

Виктор
29.08.2018
17:20:38
Хм, не очень понял. У приложения есть часть с интерфейсом - фронт и часть с логикой - бэк. Почему это неприменимо на десктопные приложения?

Roman
29.08.2018
17:22:21
мы говорим о том, как написать приложение на Go с отрисовкой GUI на экран
ответ: никак, не надо этого делать, потому-что GC == microlags!
а можно ли использовать Go для логики приложения у которого внешний рендер вне Go runtime? это уже другой вопрос..

Crypt
29.08.2018
17:25:02
надо, надо) вот фаерфокс написан на вышем Rust`е, но лагает так же как и все программы, только не на рендере, а на сети
причем так лагает, что уже прогруженное и отрисованное даже не скроллится

Roman
29.08.2018
17:26:50
60 fps = 16,6 миллисекунд на кадр, если у тебя в кадр X runtime решит порыскать по помойкам прям ровно 5 мс, то у тебя на кадр останется 11,6 миллисекунд, т.е. на целых 30,13% меньше для обработки логики и отрисовки.
а если GC займёт более 10 миллисекунд то ты практически кадр потерял и получил микролаг
GC можно использовать только для бизнес логики, не для самого рендера, тот должен быть manually managed
@cryptstal ,пожалуйста, читайте, если тема вам интересна

Crypt
29.08.2018
17:29:02
да я не вижу смысла ловить по 5мс микролаги, если в целом так обгадиться на сети

Roman
29.08.2018
17:32:13
И насколько я помню, pthread mutex умеет жить в shm


Yuriy
29.08.2018
17:58:39
Вечер добрый!
Народ, поделитесь опытом (мнением) как правильно реализовать механизм аутентификации с использованием OAuth?
Вопрос конкретно в следующем:
Зарегил приложние на Яндексе, чтобы OAuth пользоваться. Написал простенький фронт (SPA на Vue). Алгоритм сейчас такой:
1. Пользователь на странице нажимает кнопку выбора провайдера аутентификации (в частности " войти через Яндекс")
2. Попадает на старницу разрешений Яндекса
3. Яндекс делает callback на страницу SPA и вставляет в url кода для запроса Token.
4. SPA извлекает код из урла и делает запрос на backend (естественно на go)
5. Backend проверяет код в запросе, запрашивает токен, запрашивает данные пользователя (email, id, name)
6. Backend проверяет имеется ли пользователь в базе (т.е. зарегистрировался он уже в приложении или нет)
....И вот тут вопрос если пользователя нет, то перед тем как зарегистрироваться ему нужно прочитать и согласиться с "Соглашнием о..."
Если пользователя в базе нет тогда:
7. Создаю uid-ключ и добавляю в Redis запись с данными пользователя полученными от Яндекса (которая экспайрится через 5 минут).
8. Возвращаю uid обратно пользователю и перекидываю его на страницу соглашения.
9. Если пользователь согласился, то он нажимает кнопку "согласен" и отправляет подтверждение на сервер вместе с uid.
10. Backend получает запрос на подтверждение регистрации, извлекает uid,проверяет, извлекает данные из Redis, если OK удаляет запись в Redis.
11. Регит пользователя, генерит ему jwt
12. Возвращает пользователю cookies c jwt токеном.
Далее пользователь уже общается с backend-ом через данные в куках....
Вопрос....Это я велосипед придумал? Или может есть какой-то рабочий паттерн для этих целей... ?
Заранее спасибо!


Pavel
29.08.2018
18:00:25
Вечер добрый!
Народ, поделитесь опытом (мнением) как правильно реализовать механизм аутентификации с использованием OAuth?
Вопрос конкретно в следующем:
Зарегил приложние на Яндексе, чтобы OAuth пользоваться. Написал простенький фронт (SPA на Vue). Алгоритм сейчас такой:
1. Пользователь на странице нажимает кнопку выбора провайдера аутентификации (в частности " войти через Яндекс")
2. Попадает на старницу разрешений Яндекса
3. Яндекс делает callback на страницу SPA и вставляет в url кода для запроса Token.
4. SPA извлекает код из урла и делает запрос на backend (естественно на go)
5. Backend проверяет код в запросе, запрашивает токен, запрашивает данные пользователя (email, id, name)
6. Backend проверяет имеется ли пользователь в базе (т.е. зарегистрировался он уже в приложении или нет)
....И вот тут вопрос если пользователя нет, то перед тем как зарегистрироваться ему нужно прочитать и согласиться с "Соглашнием о..."
Если пользователя в базе нет тогда:
7. Создаю uid-ключ и добавляю в Redis запись с данными пользователя полученными от Яндекса (которая экспайрится через 5 минут).
8. Возвращаю uid обратно пользователю и перекидываю его на страницу соглашения.
9. Если пользователь согласился, то он нажимает кнопку "согласен" и отправляет подтверждение на сервер вместе с uid.
10. Backend получает запрос на подтверждение регистрации, извлекает uid,проверяет, извлекает данные из Redis, если OK удаляет запись в Redis.
11. Регит пользователя, генерит ему jwt
12. Возвращает пользователю cookies c jwt токеном.
Далее пользователь уже общается с backend-ом через данные в куках....
Вопрос....Это я велосипед придумал? Или может есть какой-то рабочий паттерн для этих целей... ?
Заранее спасибо!
А не проще ли сделать роль "согласился с соглашением"?

Google

Yuriy
29.08.2018
18:01:52

Pavel
29.08.2018
18:02:58
после 6 пункта -- создаешь пользователя без роли если его нет
7 пунктом показываешь соглашение, если у текущего пользователя нет роли
если он соглашается -- добавляешь ему роль

Roman
29.08.2018
18:04:45

Roman
29.08.2018
18:08:50

Roman
29.08.2018
18:09:29
Копирование откуда?
с shared memory копирование можно избежать, но вот я не понимаю как ты на мобилках shared memory реализуешь..

Roman
29.08.2018
18:12:20

Roman
29.08.2018
18:12:37
думаю что нативные GUI это проигрышный вариант, писать приложение отдельно для разных систем это невыгодно и проблематично, лучше использовать браузер в качестве платформы для GUI, только не на HTML/CSS разумеется а на WebGL, мы об этом помоему уже говорили
ждём когда в WASM завезут потоки и переходим на WASM
и думаем как можно потенциально написать рендер на Rust который работает в связке с Go для асинх логики и скомпилить всё это в 1 WASM бинарь