Программирование : Dart & Flutter по-русски
tdesc
))) это гугл так подгребает
tdesc
приучает айосников к новым телефонам )
Ivan Frolkin
Костылить кодогенерацию - ну из swagger'а можно генерировать клиентские апишки. Можно в этом деле дальше пойти и Стейт менеджмент генерацию тоже бахнуть
tdesc
пойду гуглить swagger )
Ivan Frolkin
Swagger codegen, swagger, open api
tdesc
если в кратце это все не про rest?
tdesc
к клиентской архитектуре применимо?
Kirill Saltykov
Это описание твоего rest api
Ivan Frolkin
Имхо когда сам с собой пишешь самое то) а для уменьшения связности Бэк-отдела и фронт-отдела можно и графкуель
tdesc
граф нужно выбирать, когда он тебе нужен
tdesc
noSql моделируешь данные по суди от "экрана"
Ivan Frolkin
Но тогда уже и другой разговор. Плюсы от унилингвальной разработки куда-то деваются сразу)
tdesc
мне пока туда хочется )
tdesc
для клиентских приложений/сервисов/услуг noSql дает планетарную масштабируемость
tdesc
я не использую рест для клиентов
Kirill Saltykov
А что тогда? gRPC?
tdesc
subscribe/publish по сути стримы
tdesc
реализация ниже зависит
tdesc
на Метеоре c MongoDB
tdesc
на Firebase на firebase )
Ivan Frolkin
Ну монгу ругают немного за целостность данных.
tdesc
не, целостность данных ни при чем
tdesc
это нормально для noSQL
tdesc
данные поддерживаются через облачные функции
Анатолий
рест и реалтайм имеют совершенно разные направления, нельзя заменить одно другим
tdesc
рест в клиентском приложении мне зачем?
Анатолий
тебе может и незачем, другим есть зачем
tdesc
я вот интересуюсь ) как его использовать
Анатолий
а если мне в мобильном приложении не нужен реалтайм, внезапно?
Анатолий
рест идеально масштабируется
tdesc
не понял, а чем он мешает чтоли? )
Анатолий
лучше всех других решений
Анатолий
зачем мне держать соединение когда оно не нужно?
Анатолий
именно для этого и есть рест, чтоб дергать данные когда надо
tdesc
подписка дело добровольное
tdesc
для этого есть облачные функции
Анатолий
они тоже ближе к рест
Анатолий
просто реализация отдельная
tdesc
так я от реста не отказываюсь и не проклинаю
Анатолий
ты сказал что он должен умереть :)
tdesc
просто общая архитектура на реалтайме мне нравится больше
tdesc
в клиентской типовой архитектуре да
tdesc
иногда можно врезать как сервис, только понимать зачем
Анатолий
если у тебя приложение получает данные по действию раз в неделю, зачем реалтайм держать? А если у тебя регулярный обмен приложениями, рест не нужен.
tdesc
ну да, просто таких "приложений" где данные с клиента раз в неделю уходят прямо скажем не много
Ivan Frolkin
Всё на реалтайме эт хорошо конечно, но дорого
tdesc
а вот где хотят чатик и все дела
tdesc
дорого с точки зрения чего?
Ivan Frolkin
Вот сам пока не знаю как правильно и просто делать архитектуру для таких случаев
tdesc
AWS+Meteor+MongoВоблаке
Анатолий
и посчитай сколько это стоит
Анатолий
это все, если реалтайм не нужен заменит один несчастный инстанс с експрессом на борту
tdesc
Реалтайм не жрет больше реста
Анатолий
все зависит от задач
tdesc
если архитектурой заложено дергать 1 раз в неделю уж и подавно )
Ivan Frolkin
Рест вообще не ест, он исполняется в момент обращения
Анатолий
к примеру на 70к клиентов тебе нужно будет 2 инстанса минимум
tdesc
но там лучше голубиной почтой отправлять письма )
Анатолий
рест с одним справится
Ivan Frolkin
А реалтайм ест пока соединение открыто
Анатолий
и дальше пропорционально
Ivan Frolkin
Пока нагрузки маленькие разницы нет
Ivan Frolkin
Файербэйз до сотни человек даёт бесплатно вообще)
tdesc
ну да, а потом рест в монгу лезет или в sql?
Ivan Frolkin
Надо посмотреть метеор. Слышал, но не пробовал.
tdesc
2.5 GB total 20GB/month 100K/day 250K/day 100K/day
tdesc
Stored data Bandwidth Document writes Document reads Document deletes
tdesc
вообщем стоимость бекэнда меня начнет беспокоить когда выберу эти квоты
Анатолий
4 GB 2 vCPUs 80 GB 4 TB
tdesc
вот в том то и дело, что тебе плевать на ТБ
Ivan Frolkin
[
{
"type": "mention",
"text": "@talkpal"
},
" пробовали firestore на пригодность для неэлементарных проектов? Чтоб несколько ролей, лихие джоины?"
]
tdesc
несколько ролей пожалуйста
tdesc
про джойны и noSql ))
tdesc
я про клиентские приложения, в целом
tdesc
не про мега аналитику и нефть
Анатолий
фаербейз очень хорошая штука когда надо сделать прототип, быстро и нормально
tdesc
и вывести все в продакшн
tdesc
и получать радость )
Ivan Frolkin
Там есть reference keys, они рекурсивно раскрываются с пол пинка?)
Анатолий
просто он реально дороже аналога если руками все поднять и запустить
Анатолий
нет, в nosql такого никогда не будет
Анатолий
там нормально делать много запросов
tdesc
я пока до проекта до 25 тысяч юзеров в день доживу ) и посчитаю стоимость
Анатолий
или обьеденять данные
tdesc
все что тебе нужно на экране может быть в 1 документе
Анатолий
вот это тоже опасная фраза )
Ivan Frolkin
То есть получаем первый кусок данных, а потом по reference keys раскручиваем?
tdesc
все данные уже в твоем одном документе
Анатолий
для начала обьеденяешь максимально допустимо
tdesc
например конференция, со всеми спикерами и тд
Анатолий
а затем да, по референсам подтягиваешь остатки
tdesc
если чего то сразу не нужно выводить, то можно отделить
tdesc
вот как раз стрим от гугла
tdesc
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=MCngVRyfrKw"
}
]
Анатолий
Напомните плиз, есть какой-то прикол в дарте при копировании Map, что за ньюанс там?
Evgeny Kot
Да вроде прям приколов нет
Анатолий
что-то у меня в голове связаное с лейзи лоадингом итд
Анатолий
или я путаю что-то :)
Анатолий
[
{
"type": "link",
"text": "https://gist.github.com/0xff00ff/c95981b915483fc22e3394d5f0d18f3c"
}
]
Анатолий
Что он от меня хочет?
Evgeny Kot
А что говорит?
Анатолий
Converting object to an encodable object failed.
tdesc
там у него что то с json
Анатолий
это я понял, я тока не могу понять что именно
tdesc
я сразу на сериализаторы подсел ) в build_value
Анатолий
Это из-за того что числовые ключи
Evgeny Kot
Ты не можешь этого сделать
Evgeny Kot
И по спецификации json
Анатолий
Я думал он сам разрулит )
Анатолий
Можно как-то впихнуть статику в интерфейс? Обязать все классы применяющие данный интерфейс сделать себе статический метод
Evgeny Kot
Это же статика
admin
А зачем тебе статика в классе?
admin
Да еще и с интерфейсом
Анатолий
У меня есть Х классов, и мне надо решить какой их них создать и взять на основании некой логики (фабрика грубо говоря), щас это набор ифов, я хотел вынести это в каждый класс, чтоб он сам решал, подходит ли условие ему или нет
admin
А стратегия не зайдет?
Анатолий
фабрика и стратегия братья
admin
Тогда просто загугли как решается OCP
Анатолий
блин, я думал то еще решение какое-то
Анатолий
ты еще на солид пошли :)
admin
У тебя идет классическое нарушение этого принципа
admin
Дык этот принцип оттуда)
Анатолий
Хочу - говнокожу, не хочу - не гвонокожу
Анатолий
У некоторых сущностей сложная логика основанная на случайности, по этому я хотел вынести все это непосредственно внутрь, чтоб они сами решали что им надо
Анатолий
Да и вообще я люблю самодостаточные сущности, даешь черному ящику данные, происходит магия, и получаешь результат, либо он говорит что не хочет ничего делать
Анатолий
Не хочу решать за него подходят ли эти данные ему
Анатолий
[
{
"type": "code",
"text": "final opinionNum = Random().nextInt(opinions.length) - 1;"
},
"\nТакое дарт на удивление пропускает спокойно, но в рантайме падает"
]
Анатолий
[
"Почему дарт такое пропускает?\n",
{
"type": "code",
"text": "final opinionNum = Random().nextInt(opinions.length)"
},
"\nЭто ведь 100% ошибка, и он это знает, метода call нет"
]
Анатолий
new Random должно быть
admin
dart 2 разрешает писать без new
Анатолий
Почему тогда он падает в рантайме?
Анатолий
Не магия а ошибка
Анатолий
Чем дальше в лес, тем толще партизаны
admin
Карочи, да, странно
Анатолий
Нужен флаг в конфиге: "хочу строгость как в джаве или C#".
Анатолий
А где вообще можно это делать?
Kirill Ponomarev
Привет. Как вы делаете локализацию интерфейса на несколько языков?
Kirill Saltykov
Flutter/Angular/React?
Kirill Ponomarev
Меня интересует Angular. Но подозреваю, что подходы и библиотеки могут быть схожи.
Kirill Saltykov
Я так думаю это в сторону pipe надо смотреть
Kirill Saltykov
[
{
"type": "link",
"text": "https://github.com/Fulnir/angular-dart-i18n-sample"
}
]
Kirill Ponomarev
Спасибо.
Анатолий
[
{
"type": "link",
"text": "https://pub.dartlang.org/packages/intl"
}
]
Анатолий
А эта штука не для такого была сделана?
Kirill Ponomarev
Я ее использую для форматирования, например, дат при выводе.
Анатолий
В описании написано что и сообщения умеет, я правда не использовал
Анатолий
Я просто натыкался на нее поэтому и запомнил
Kirill Ponomarev
А какой принцип? Т.е. есть Map со локалями и подбирать по ключу?
Kirill Ponomarev
Зачем intl
Анатолий
интл позволяет оперировать фразами: первая первое первый
Анатолий
1 элемент 2 элемента
Анатолий
в одном переводе
Evgeny Kot
Там много всего. Интернациолизация, локализация
Kirill Ponomarev
Например, мне нужно отобразить на кнопке Save или Сохранить. Я в шаблоне напишу что-то вида save | translate. Директива translate знает о выбранном языке. Обращается к файлу с переводом, ru['save'] и получает перевод. Затем прогоняет, через intl, если требуется. Так?
tdesc
я хочу google translate api подключить, чтобы все слова переводил по умолчанию при добавлении локали, потом ручной доводкой поправить
Анатолий
Получишь алиэкспресс
tdesc
не, у меня сервис для переводчиков
tdesc
если хотят добавить свой язык, а его нет в интерфейсе, то смогут сами поправить )
tdesc
по умолчанию будет английский оригинал и перевод слова гугл транслейт
tdesc
пусть юзеры помогают, не только же нам опенсорсить
Анатолий
Просто обычно при добавлении нового языка либо оставляют все пустым, чтоб явно бросалось в глаза, при отображении если пусто берут дефолтный, либо просто копируют дефолтный, если лень делать проверку на пустоту )
Анатолий
Ато там такие перлы могут получаться
tdesc
как на русский буду переводить, станет понятно )
tdesc
гугл транслейт не так плох как кажется
Анатолий
Да, если у тебя одно два слова
tdesc
в интерфейсах на кнопках, лейблы и короткие сообщения о действиях
tdesc
это не основной контент
Анатолий
тогда наверно будет прикольно, большую часть он переведет хорошо
tdesc
для голосовых действий
tdesc
чтобы интерфейс управлялся голосом
Andrey Smirnov
может, вы используете —preview-dart-2? если да, то эта фича, насколько понимаю, еще в разработке
Анатолий
Да, дев использую
Анатолий
Тоесть в принципе оно должно ругаться?
Анатолий
И это просто глюк?
Andrey Smirnov
есть какой то из законов Мерфи - скомпилировали, и без ошибок, тогда ошибка в компиляторе мне кажется, это как раз вот это случай )) ошибка в анализаторе )
Andrey Smirnov
вообщем, я бы дождался stable версию
|