Pull to refresh
0
0
Send message

Простите, но как человек хорошо знакомый с аутсорсом. А вредил сушильня имеет свой 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

Information

Rating
Does not participate
Registered
Activity