Простите, но как человек хорошо знакомый с аутсорсом. А вредил сушильня имеет свой it отдел: - далеко не всегда аутсорс, даже хороший, может сделать что-то в тот же день. Тем более, когда это доработка логики - закрыть регистрацию = простой всей доставки на что бизнес не готов и требовать это не разумно, учитывая, что до этого сайт висел и без Вашей статьи на хабре за 2-3 дня уязвимость более критической бы не стала - реализовать вход через номер телефона, даже у нормального разработчика может отнять пару дней с учетом того, что необходимо выбрать смс шлюз, зарегистрировать там аккаунт, вероятно переделать и бек и фронт - публикации статьи спустя 26 часов, что чуть больше суток является совсем некорректным поведением. Особенно учитывая наличие хоть какой-то реакции. + Вы на самом деле даже не ждали суток (вряд ли статья была написана за 2 часа), так что выглядит как попытка похайпиться. Если Вы хотели позаботиться о персональных данных - сделали все, чтобы на одну слитую базу ПД стало больше. Хабраэффект будет налицо
Не сказал бы, что очень дорого. Если взять тот же S3 от OVH. 0.008$ за гигабайт хранилища, 0.011$ за гигабайт трафика, такое решение будет стоить меньше 1000$ в месяц, что вполне ребята могли бы осилить.
Но бесплатное решение, которое не посадит их в долги в случае DDoS и тп, конечно гораздо приятнее
Самая большая проблема такого подхода и отличие от Google Meet - оно не масштабируется. Больше 4 человек в комнате - оно уже будет работать не очень хорошо. Было бы круто, если в дальнейшем применили SFU и рассказали про свой опыт. Особенно интересно про каскадные SFU про это на habr материалов достаточно мало
Я может ошибаюсь, но Яндекс.Go написан не на flutter, а нативно. Вы путаете с таксометром, это приложение для таксистов. Его как раз переписали на flutter, но это то чем пользуются таксисты, а не обычные юзеры.
Опять же надо отметить, что их приложение на flutter для таксистов имеет достаточно урезанный функционал и flutter на него хорошо ложится, так как к примеру карты, сделанные нативно другой командой, просто используются как плагины.
Не знаю про качество этого приложения, может кто-то поправит, но не думаю, что там проблемы именно из-за flutter
Что я понял будучи Android разработчиком и поработав долгое время с камерой, так это то, что в android в принципе нельзя сделать камеру так, чтобы она работала везде и хорошо. Даже у гигантов по типу инстаграмма несколько раз ловил полное зависание картинки.
Если Вы хотите просто камеру, чтобы видеопоток и фоткать, то да, возможно Вам подойдет флаттеровский плагин. Если Вы захотите наложить фильтр к примеру, или поискать QR Code в риалтайме (оба реальные кейсы), это не к flutter, Вы идете в native код и используете opengl или что Вам нужно. Если Вы попробуете в принципе во flutter получать кадр, то Вы удивитесь, но Вы увидеть 4-5 fps, так как Dart по своей природе однопоточный и стандартный плагин камеры передает все эти огромные массивы в ui потоке и сделать, что либо с ними Вы уже не сможете.
Flutter надо использовать там, где ему место. Для некоторых задач, к сожалению, подходит только нативная разработка
Долгое время придерживался таких же взглядов, как и Вы насчет кроссплатформенной разработки. Мне тоже не нравятся вечно лагающие поделки на React Native, но год назад с командой начали пробовать Flutter. Это далеко не так плохо. Если у Вас есть работа с камерой, любая сложная графика и тд это вариант не для Вас, но в случае ВкусВилла это прям идеальный кейс для Flutter. Он собирается в нативный код + под капотом рендеринг хромиум, который порезали и прокачали. Оно действительно работает хорошо на определенных задачах. Оно никогда не заменит натив, но сэкономить время и силы в некоторых случаях вполне может.
Не всегда кроссплатформа это плохо, ее надо применять с умом и тогда это будет вполне юзабильно, пользователи даже разницы не заметят
На TypeScript не пишу, но на c++ это выгладяло бы примерно так:
arr — массив c верхними левыми координатами
sz — сторона квадрата
auto start = lower_bound(arr.begin(), arr.end(), {x_cur, y_cur});
auto end = upper_bound(arr.begin(), arr.end(), {start->first, INF}) — 1;
auto res = lower_bound(start, end, {start->first, — INF});
if (res->first + sz >= x_cur && res->second + sz >= y_cur) {
// курсор над квадратом res
} else {
// курсор не над квадратом
}
upper_bound — первый больший, lower_bound — первый больше либо равный
В целом не плохо, но сразу видно, что можно улучшить. Смотрите, в чем состоит задача по нахождению квадрата. Я бы предложил Вам избавиться от Вашего дерева и просто делать бинпоиск, сейчас расскажу как. Это будет быстрее и, кстати, меньше кода. Условимся, что все места (квадраты) имеют одинаковый размер. Запихнем все координаты верхних левых углов в массив пар (x, y). Отсортируем вначале по координате x, потом по y. Понятно, что тогда массив разобьется на куски с одинаковой координатой x. Бинарным поиском найдем первую такую группу, что ее x координата больше либо равна координате курсора. Далее вторым бинарным найдем первую точку поиском найдем конец этой группы. И нам остается сделать бинпоиск чтобы найти первую координату y большую либо равную y курсора. Теперь Вы знаете предполагаемый квадрат, остается проверить принадлежность курсора, предполагаемому квадарту. Итого log2(n) ассимптотика и примерно 20 строчек кода. Намного проще и быстрее
Всем добрый вечер, возникает ошибка:
mount_msdos: /dev/disk0s1: not a directory
при вводе sudo mount -t msdos /tmp/efi /dev/disk0s1
Вывод diskutil:
/dev/disk0 (internal):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme 251.0 GB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_CoreStorage Macintosh HD 250.0 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD +249.7 GB disk1
Logical Volume on disk0s2
E84C5091-EE4E-4EC6-8497-AE8799151BB7
Unlocked Encrypted
Простите, но как человек хорошо знакомый с аутсорсом. А вредил сушильня имеет свой it отдел:
- далеко не всегда аутсорс, даже хороший, может сделать что-то в тот же день. Тем более, когда это доработка логики
- закрыть регистрацию = простой всей доставки на что бизнес не готов и требовать это не разумно, учитывая, что до этого сайт висел и без Вашей статьи на хабре за 2-3 дня уязвимость более критической бы не стала
- реализовать вход через номер телефона, даже у нормального разработчика может отнять пару дней с учетом того, что необходимо выбрать смс шлюз, зарегистрировать там аккаунт, вероятно переделать и бек и фронт
- публикации статьи спустя 26 часов, что чуть больше суток является совсем некорректным поведением. Особенно учитывая наличие хоть какой-то реакции. + Вы на самом деле даже не ждали суток (вряд ли статья была написана за 2 часа), так что выглядит как попытка похайпиться. Если Вы хотели позаботиться о персональных данных - сделали все, чтобы на одну слитую базу ПД стало больше. Хабраэффект будет налицо
Не сказал бы, что очень дорого. Если взять тот же S3 от OVH. 0.008$ за гигабайт хранилища, 0.011$ за гигабайт трафика, такое решение будет стоить меньше 1000$ в месяц, что вполне ребята могли бы осилить.
Но бесплатное решение, которое не посадит их в долги в случае DDoS и тп, конечно гораздо приятнее
Самая большая проблема такого подхода и отличие от Google Meet - оно не масштабируется. Больше 4 человек в комнате - оно уже будет работать не очень хорошо. Было бы круто, если в дальнейшем применили SFU и рассказали про свой опыт. Особенно интересно про каскадные SFU про это на habr материалов достаточно мало
Опять же надо отметить, что их приложение на flutter для таксистов имеет достаточно урезанный функционал и flutter на него хорошо ложится, так как к примеру карты, сделанные нативно другой командой, просто используются как плагины.
Не знаю про качество этого приложения, может кто-то поправит, но не думаю, что там проблемы именно из-за flutter
Если Вы хотите просто камеру, чтобы видеопоток и фоткать, то да, возможно Вам подойдет флаттеровский плагин. Если Вы захотите наложить фильтр к примеру, или поискать QR Code в риалтайме (оба реальные кейсы), это не к flutter, Вы идете в native код и используете opengl или что Вам нужно. Если Вы попробуете в принципе во flutter получать кадр, то Вы удивитесь, но Вы увидеть 4-5 fps, так как Dart по своей природе однопоточный и стандартный плагин камеры передает все эти огромные массивы в ui потоке и сделать, что либо с ними Вы уже не сможете.
Flutter надо использовать там, где ему место. Для некоторых задач, к сожалению, подходит только нативная разработка
Не всегда кроссплатформа это плохо, ее надо применять с умом и тогда это будет вполне юзабильно, пользователи даже разницы не заметят
arr — массив c верхними левыми координатами
sz — сторона квадрата
auto start = lower_bound(arr.begin(), arr.end(), {x_cur, y_cur});
auto end = upper_bound(arr.begin(), arr.end(), {start->first, INF}) — 1;
auto res = lower_bound(start, end, {start->first, — INF});
if (res->first + sz >= x_cur && res->second + sz >= y_cur) {
// курсор над квадратом res
} else {
// курсор не над квадратом
}
upper_bound — первый больший, lower_bound — первый больше либо равный
mount_msdos: /dev/disk0s1: not a directory
при вводе sudo mount -t msdos /tmp/efi /dev/disk0s1
Вывод diskutil:
/dev/disk0 (internal):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme 251.0 GB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_CoreStorage Macintosh HD 250.0 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD +249.7 GB disk1
Logical Volume on disk0s2
E84C5091-EE4E-4EC6-8497-AE8799151BB7
Unlocked Encrypted