Согласен. Сложности добавилось. Это если говорить про трёхзвенку.
Но у нас была задача сделать одновременное редактирование большого документа целым отделом. Это без серверной части не делается ну никак. Можно, конечно, обмазать всё триггерами и ходить каждым клиентом проверять, что там изменилось, но вы же понимаете, что это так себе решение.
Трёхзвенка сложнее в разработке, но при сложной логике она проще. Вот такой парадокс. Мы знали, на что шли, это всё было учтено при принятии решения.
А ORM на этой трёхзвенке уже практически не привносил сложностей. Зато вот сильно упрощал написание, а главное чтение бизнес-логики. Он нужен был на начальном этапе, когда я один пилю. Если бы набрали команду, то потихоньку перенесли бы логику на сервер.
Ваша аналогия похожа на котёнка с дверцей. MySql появился уже потом, когда уволили людей, бравших меня на работу и принимавших решение про трёхзвенку. Я оставался один и проект мой хотели закрыть.
В этом проекте всё уже было. И джоины (1:M и M:1) и трекинг и всё, что перечислено в последнем списке. Это просто проект для этой статьи такой урезанный.
Да и чем MySql плох? За что его так сравнивать с мотором от инвалидки? Разве не умеет хранить данные? Умеет. А в чём дело?
Кривая структура БД может причинять такие тормоза, что даже Oracle не не тащит
В статье показаны тормоза на практически пустой базе после свежей установки. Исходники есть в гитхабе, репозиторий тоже, методику я расписал, можете сами проверить. Речь не идёт о кривой структуре.
Улучшить быстродействие при увеличении пинга можно было увеличив FetchSize
Крутили. Насколько я помню, там максимум в 36кб. Могу ошибаться. Но я точно помню, что не помогло.
не брать MySQL, а организовать в новой БД рядышком
А зачем? Я немного не понял смысл. MySql я расписал, чем был лучше. Он тупо быстрее работает во всех инструментах со своим стандартным протоколом из коробки. А зачем новый инстанс оракла ставить рядом? Чисто для тестов? Так прод всё равно будет в облаке, потому что начальство наотрез против переноса данных в офис.
Именно поэтому я и эксперементировал с фетч сайзом. Я вообще крутил всё, до чего мог дотянуться. А дотянуться я не мог разве что до настроек самого инстанса оракла.
А сейчас мне это не интересно. Я не работаю в этой компании полтора года как. Ну узнаю я, как это можно было починить, а что дальше? Статья вообще не об этом.
Да, смотрел. Изначально как раз хотел взять его в паре с EF core. Клиент им сериализует запрос, а сервер нахлобучивает его на репозиторий EF. Не срослось, и я взял только идею оттуда.
Спасибо. Include это не совсем join. Да, он транслируется в left join, но может работать только по внешнему ключу (в случае с OrmFactory ещё и по виртуальному внешнему ключу). То есть его условие вшито в модель.
Про причину тормозов я так и не узнал. Тогда я крутил всё, что крутилось на клиенте, а сейчас мне уже не актуально.
То, что смена протокола (добавление gRPC на участке с задержкой) увеличила скорость - я этот эксперимент буквально вчера повторил. Да, похоже на то, что протокол оракла ждёт подтверждения (или запроса) со стороны клиента. Но как действительно это работает - я не знаю.
Если работаете с WPF, то почему бы не попробовать? Синтаксис оттуда переносится чуть ли не 1:1. Всё же зависит от того, чего вы хотите. Если странного, как я - то это боль и страдание. Если всё стандартное подходит - то даже не заметите проблем. Мне миллионы строк надо скроллить в гриде, у меня своя атмосфера. Может у вас совсем не так. Мне критично было сделать поддержку для макбуков arm64. Линукс у меня чисто как бонус. В линуксе, кстати, не работает размытие фона с прозрачностью, но оно тоже далеко не всем надо.
Авалония довольно глючная штука. То одно отвалится, то другое. Странно очень потроха сделаны, по мне так перемудрили со архитектурой. Захочешь заоверрайдить что-то в контроле - не сможешь. Я сталкивался с тем, что вот потроха - напиши свой контрол, но нет. Нужные компоненты internal или вообще protected. Зачем?
Для бизнес-разработки нужны продвинутые контролы, их просто нет под авалонией. Вроде еремекс что-то пилит, но я не помню у них демо-контролы в паблике.
Иногда свой контрол в разы проще написать, чем победить все баги родного. У меня так с датагридом было.
Они ещё хотели сделать TreeDataGrid платным зачем-то. А аналогов ему нет. Это тоже смущает. Хотя та ещё забагованная и тормозная штучка. Никак не мог заставить его стоять и не дёргаться при обновлении вьюмодели. Плюнул, написал свой.
С другой стороны Авалония уникальна. Она сама рисует контролы на всех платформах и не зависит от багов UI-прокладки. Если работает на одной платформе - работает на всех. И выглядит одинаково. Это позволяет не отлаживаться и подгонять контролы под каждую платформу.
Альтернатив особо нет. Есть Uno Platform, он стабильнее, но это прокладка к родным контролам. Есть MAUI, с ним также, да ещё он мобильно-ориентирован. Грусть и печаль.
Называть незнакомого человека плохим разработчиком по отдалённому признаку - это неконструктивное общение. Вы не знаете, что я разрабатываю, с какими технологиями, с какими принципами и в каких условиях.
Конструктивное общение - это если Вы скажете, как можно легко и просто использовать TPM для шифрования пароля на любом дистрибутиве линукса из дотнета. Я в дотнете работаю. У меня кроссплатформ.
Кстати, я не называл линукс плохой OS. Я на примере хотел показать полезность стандартизации API к TPM.
Я пишу свой софт и у меня возникла необходимость хранить пользовательские пароли. Для вин я использую DPAPI, которая как раз работает с модулем TPM, для макоси - шифрование по PlatformUUID, а для линукса - статический пароль.
Вопрос - на какой платформе хранилище паролей надёжнее?
Оно, конечно, существует много способов шифрования без TPM, но тут есть гарантия, что никто, получив пароли не расшифрует их.
Я не знаю, как прикрутить к апи HA такую приблуду. Поэтому не скажу, каким образом именно стыковать. Может можно текущее состояние получить из файловой системы, а фоновую картинку генерить заново для HA. Про генерацию могу накидать план.
Я бы написал на шарпе, просто потому что там всё есть. Но можно и на питоне, там есть imagemagic, там всё можно решить тупо вызовами наложения слоёв.
Но я бы взял простой PNG, загрузил бы в шарп и наложил другой PNG двумя циклами. В шарпе при загрузке Image, к нему можно адресоваться по двум координатам.
В два цикла проходим по X и Y координатам, складывая цвета каждого субпикселя, записывая обратно в Image фона. Для следующего светильника повторить.
Можно заморочиться и учесть логарифмическую природу восприятия освещения нашими глазами. Для этого нужно оба пикселя перевести в линейную шкалу, сложить линейную светимость каждого субпикселя и затем вернуть в экспоненту. Но можно и без этого. Тупо A+B. Ну и клиппинг на 255.
Добавляем все включенные светильники к фону и записываем получившийся битмап поверх картинки, которую берёт HA для фона. Вроде всё.
Открывается простор для фантазии. Количество комбинаций уже безгранично, можно предварительно отрендерить фон для каждого часа дня (да хоть для каждых пяти минут), учитывая освещение и потом накладывать включенные светильники.
Не знаю, не работал с хоумассистансом. Но разве проблема запросить у какого-нибудь бэкенда картинку с параметрами, где будут перечислены включенные источники света?
Если две интерактивные лампы, картинки будет уже четыре, и т.д. У меня 448 рендеров первого этажа и 24 второго.
Я когда-то решал эту проблему другим способом. Есть сцена с N источниками света, делаем рендер с каждым источником по отдельности с выключенным внешним освещением.
Получается N картинок, которые можно накладывать аддитивным способом на основную картинку (с внешним освещением) совершенно независимо друг от друга.
Время TWS-наушников действительно пришло. Хотя они врядли заменят проводные решения для серьезных аудиофилов, они уже не так отвратительны, как 10 лет назад, и вполне пригодны для повседневного использования — конечно, если речь идет о моделях за адекватный ценник.
А почему TWS противопоставляется проводным наушникам? В голосовалке то же самое - существуют только TWS и проводные.
Например я ничего против не имею беспроводных наушников, но органически не переношу "затычки".
Здравомыслящий человек понимает, что если проект будет развиваться, то рано или поздно монолит разрастётся и усложнится настолько, что станет неуправляемым
Обожаю такие аргументы! Здравомыслящий человек понимает, что если идёт апелляция к здравому смыслу, то дальше будет отборная ересь.
По мне так хорошо, что в ядро не завезли микросервисов (противопоставляя "монолиту"). Способов управления сложностью в мире достаточно много, чтобы использовать их внутри "монолита". Есть логические части, есть контракты, есть документация.
Согласен. Сложности добавилось. Это если говорить про трёхзвенку.
Но у нас была задача сделать одновременное редактирование большого документа целым отделом. Это без серверной части не делается ну никак. Можно, конечно, обмазать всё триггерами и ходить каждым клиентом проверять, что там изменилось, но вы же понимаете, что это так себе решение.
Трёхзвенка сложнее в разработке, но при сложной логике она проще. Вот такой парадокс. Мы знали, на что шли, это всё было учтено при принятии решения.
А ORM на этой трёхзвенке уже практически не привносил сложностей. Зато вот сильно упрощал написание, а главное чтение бизнес-логики. Он нужен был на начальном этапе, когда я один пилю. Если бы набрали команду, то потихоньку перенесли бы логику на сервер.
Ваша аналогия похожа на котёнка с дверцей. MySql появился уже потом, когда уволили людей, бравших меня на работу и принимавших решение про трёхзвенку. Я оставался один и проект мой хотели закрыть.
В этом проекте всё уже было. И джоины (1:M и M:1) и трекинг и всё, что перечислено в последнем списке. Это просто проект для этой статьи такой урезанный.
Да и чем MySql плох? За что его так сравнивать с мотором от инвалидки? Разве не умеет хранить данные? Умеет. А в чём дело?
В статье показаны тормоза на практически пустой базе после свежей установки. Исходники есть в гитхабе, репозиторий тоже, методику я расписал, можете сами проверить. Речь не идёт о кривой структуре.
Крутили. Насколько я помню, там максимум в 36кб. Могу ошибаться. Но я точно помню, что не помогло.
А зачем? Я немного не понял смысл. MySql я расписал, чем был лучше. Он тупо быстрее работает во всех инструментах со своим стандартным протоколом из коробки. А зачем новый инстанс оракла ставить рядом? Чисто для тестов? Так прод всё равно будет в облаке, потому что начальство наотрез против переноса данных в офис.
Я тоже полностью поддерживаю! Стоило!
Именно поэтому я и эксперементировал с фетч сайзом. Я вообще крутил всё, до чего мог дотянуться. А дотянуться я не мог разве что до настроек самого инстанса оракла.
А сейчас мне это не интересно. Я не работаю в этой компании полтора года как. Ну узнаю я, как это можно было починить, а что дальше? Статья вообще не об этом.
Да, смотрел. Изначально как раз хотел взять его в паре с EF core. Клиент им сериализует запрос, а сервер нахлобучивает его на репозиторий EF. Не срослось, и я взял только идею оттуда.
Спасибо. Include это не совсем join. Да, он транслируется в left join, но может работать только по внешнему ключу (в случае с OrmFactory ещё и по виртуальному внешнему ключу). То есть его условие вшито в модель.
Про причину тормозов я так и не узнал. Тогда я крутил всё, что крутилось на клиенте, а сейчас мне уже не актуально.
То, что смена протокола (добавление gRPC на участке с задержкой) увеличила скорость - я этот эксперимент буквально вчера повторил. Да, похоже на то, что протокол оракла ждёт подтверждения (или запроса) со стороны клиента. Но как действительно это работает - я не знаю.
Если работаете с WPF, то почему бы не попробовать? Синтаксис оттуда переносится чуть ли не 1:1. Всё же зависит от того, чего вы хотите. Если странного, как я - то это боль и страдание. Если всё стандартное подходит - то даже не заметите проблем. Мне миллионы строк надо скроллить в гриде, у меня своя атмосфера. Может у вас совсем не так. Мне критично было сделать поддержку для макбуков arm64. Линукс у меня чисто как бонус. В линуксе, кстати, не работает размытие фона с прозрачностью, но оно тоже далеко не всем надо.
Авалония довольно глючная штука. То одно отвалится, то другое. Странно очень потроха сделаны, по мне так перемудрили со архитектурой. Захочешь заоверрайдить что-то в контроле - не сможешь. Я сталкивался с тем, что вот потроха - напиши свой контрол, но нет. Нужные компоненты internal или вообще protected. Зачем?
Для бизнес-разработки нужны продвинутые контролы, их просто нет под авалонией. Вроде еремекс что-то пилит, но я не помню у них демо-контролы в паблике.
Иногда свой контрол в разы проще написать, чем победить все баги родного. У меня так с датагридом было.
Они ещё хотели сделать TreeDataGrid платным зачем-то. А аналогов ему нет. Это тоже смущает. Хотя та ещё забагованная и тормозная штучка. Никак не мог заставить его стоять и не дёргаться при обновлении вьюмодели. Плюнул, написал свой.
С другой стороны Авалония уникальна. Она сама рисует контролы на всех платформах и не зависит от багов UI-прокладки. Если работает на одной платформе - работает на всех. И выглядит одинаково. Это позволяет не отлаживаться и подгонять контролы под каждую платформу.
Альтернатив особо нет. Есть Uno Platform, он стабильнее, но это прокладка к родным контролам. Есть MAUI, с ним также, да ещё он мобильно-ориентирован. Грусть и печаль.
Пойду доедать свой кактус.
Называть незнакомого человека плохим разработчиком по отдалённому признаку - это неконструктивное общение. Вы не знаете, что я разрабатываю, с какими технологиями, с какими принципами и в каких условиях.
Конструктивное общение - это если Вы скажете, как можно легко и просто использовать TPM для шифрования пароля на любом дистрибутиве линукса из дотнета. Я в дотнете работаю. У меня кроссплатформ.
Кстати, я не называл линукс плохой OS. Я на примере хотел показать полезность стандартизации API к TPM.
Я пишу свой софт и у меня возникла необходимость хранить пользовательские пароли. Для вин я использую DPAPI, которая как раз работает с модулем TPM, для макоси - шифрование по PlatformUUID, а для линукса - статический пароль.
Вопрос - на какой платформе хранилище паролей надёжнее?
Оно, конечно, существует много способов шифрования без TPM, но тут есть гарантия, что никто, получив пароли не расшифрует их.
Я не знаю, как прикрутить к апи HA такую приблуду. Поэтому не скажу, каким образом именно стыковать. Может можно текущее состояние получить из файловой системы, а фоновую картинку генерить заново для HA. Про генерацию могу накидать план.
Я бы написал на шарпе, просто потому что там всё есть. Но можно и на питоне, там есть imagemagic, там всё можно решить тупо вызовами наложения слоёв.
Но я бы взял простой PNG, загрузил бы в шарп и наложил другой PNG двумя циклами. В шарпе при загрузке Image, к нему можно адресоваться по двум координатам.
В два цикла проходим по X и Y координатам, складывая цвета каждого субпикселя, записывая обратно в Image фона. Для следующего светильника повторить.
Можно заморочиться и учесть логарифмическую природу восприятия освещения нашими глазами. Для этого нужно оба пикселя перевести в линейную шкалу, сложить линейную светимость каждого субпикселя и затем вернуть в экспоненту. Но можно и без этого. Тупо A+B. Ну и клиппинг на 255.
Добавляем все включенные светильники к фону и записываем получившийся битмап поверх картинки, которую берёт HA для фона. Вроде всё.
Открывается простор для фантазии. Количество комбинаций уже безгранично, можно предварительно отрендерить фон для каждого часа дня (да хоть для каждых пяти минут), учитывая освещение и потом накладывать включенные светильники.
То есть накидать 20к строк на фронтенде это можно. А сделать простейший мерж картинок - тут я не настоящий сварщик? )
Ничего сложного тут нет. Загрузка картинок, два вложенных цикла, сложение пикселей, вывод бинарника куда-нибудь. Всё.
Не знаю, не работал с хоумассистансом. Но разве проблема запросить у какого-нибудь бэкенда картинку с параметрами, где будут перечислены включенные источники света?
Я когда-то решал эту проблему другим способом. Есть сцена с N источниками света, делаем рендер с каждым источником по отдельности с выключенным внешним освещением.
Получается N картинок, которые можно накладывать аддитивным способом на основную картинку (с внешним освещением) совершенно независимо друг от друга.
А почему TWS противопоставляется проводным наушникам? В голосовалке то же самое - существуют только TWS и проводные.
Например я ничего против не имею беспроводных наушников, но органически не переношу "затычки".
Выбор цветовой схемы - дичь полная. Белый на жёлтом фоне не читается примерно никак. Для читаемости надо контрастность 4.5:1.
Статья задублировалась
https://habr.com/ru/companies/x-com/articles/917852/
Нет
Вспоминается "Офисное пространство"
Обожаю такие аргументы! Здравомыслящий человек понимает, что если идёт апелляция к здравому смыслу, то дальше будет отборная ересь.
По мне так хорошо, что в ядро не завезли микросервисов (противопоставляя "монолиту"). Способов управления сложностью в мире достаточно много, чтобы использовать их внутри "монолита". Есть логические части, есть контракты, есть документация.