TGTGInsightтелеграм анализLIVE / telegram public index
← Такты, стеки, два колеса

TGINSIGHT SIMILAR POSTS

Намери подобно съдържание

Изходен канал @clockstackwheels · Post #1237 · преди 27 дни

В 2023 году мы с коллегой сделали доклад на DotNext по DDD и архитектуре систем. И там, в числе прочего, показали, что устройство сложного проекта, спроектированного по определённым правилам, может иметь фрактальную структуру. Но мысль эту особо не развивали. В 2024 году Влад Хононов — автор одной из самых известных книг по DDD — сделал доклад на DotNext по теме «Фрактальная геометрия в проектировании систем». Разумеется, он никаким образом на нашу идею не опирался, а работал над своей системой уже несколько лет к моменту доклада. У него там прям интересные научные обоснования, более серьёзный теоретический фундамент с введением новых понятий и принципов. Но факт близости хода мысли приятен. Типа, мы с коллегой делали систему, которая показала те же свойства, что и системы крутого эксперта в архитектуре. Прям рекомендую доклад по второй ссылке всем, кто работает в компаниях, где по какому-то странному недосмотру есть архитектура, борьба с техдолгом и попытки не допустить превращения кода в лапшу с высоким зацеплением. #dev@clockstackwheels

Hashtags

Резултати

Намерени 869 подобни публикации

Общо глобално търсене

Я порешал немного задачи на leetcode и остался не слишком доволен сервисом. Leetcode — это онлайн-сайт с задачами по программированию. Даётся описание (какие данные приходят на вход, и что нужно получить). Можно отправить код на любом актуальном языке программирования, и ваше решение будет оценено по двум показателям: скорость и память. Что не понравилось в сервисе: 1. Встроенный редактор кода поленились делать нормальным, это по сути блокнот без каких-либо хинтов и проверок. Проще сразу писать в IDE, а потом копировать. Но это мелочь, куда серьёзнее второй пункт. 2. Система оценки, о которой я упомянул выше, крайне неточная. Разброс по времени бывает в 1.5-2 раза у одного и того же кода. И, наоборот, почти не показывает важную разницу между разными решениями. По памяти то же самое: цифры плюс минус одинаковые, как бы вы ни решали задачу. Это выражается в том, что легко словить результат типа "Ваше решение лучше, чем 33.33% остальных", причем, много раз подряд. Это значит, что в точности треть решений попадает в какой-то один кластер оценки (либо что решений отправлено очень мало, но сайт популярный, так что не знаю даже). При этом подобная оценка — единственный показатель успешности вашего решения, поэтому она важна, но при таком разбросе теряет смысл. Хотя сама идея, например, ежедневной новой задачи мне нравится — позволяет разминать мозги и держать себя в тонусе в некотором смысле. Впрочем, тут тоже есть нюанс: эффективное решение задач редко пересекается с правильным и реалистичным решением, которое требовалось бы от программиста в любом практическом сценарии. Допустим, вам нужно наполнить ведро водой. В обычной жизни вы отнесёте его в ванну, откроете кран и наполните. А вот подход на Leetcode заставляет использовать извращения типа "вытащить из холодильника бутылку воды и разрезать её над ведром". И вот в какой-то момент вы понимаете, что быстрее всего выбросить ведро в окно, потому что под окном глубокая лужа, оно там утонет и технически станет наполненным водой мгновенно. О реальной жизненной применимости такого решения, думаю, говорить не стоит. Но иногда буду решать. Сегодняшняя задача уровня Hard, такие дают за собеседованиях на middle и senior: поиск максимальной суммы прямоугольника внутри матрицы. #dev

Hashtags

Один из легальных способов для программистов бороться с жадностью корпораций — писать open source аналоги проприетарного софта. Да, к сожалению, мы всё ещё вынуждены покупать (или незаконно качать) Photoshop, After Effects, AutoCAD и даже Microsoft Office, до которых свободные аналоги пока не дотягивают. Но тот же Blender очень сильно подвинул баланс сил на рынке 3D-моделирования. Да, возможно те, кто когда-то учился на 3D Max, Cinema 4D или Maya, скорее всего, всё ещё на них остались, но вот новое поколение 3D-художников очень активно учится на Blender и делает в нём шедевральные вещи, абсолютно ничем не уступающие коммерческим гигантам. В близкой мне области тоже есть свежий пример: для экшен-камер GoPro долгое время единственным хорошим решением был платный и дорогой стабилизатор под названием ReelSteady. За софтину просят что-то около $200 единоразово, но только она могла дать стабилизацию на основе гироскопа, которая на три головы превосходила любые алгоритмы на основе анализа картинки. Однако, несколько лет назад вышел кривой и неудобный open source проект, а буквально в этом году, если я не ошибаюсь, другой разработчик допилил его до прямого и удобного. Называется GyroFlow: кроссплатформенный софт с открытым кодом, который тоже умеет стабилизировать картинку на основе гиро-данных, причём, с кучи разных камер, включая все современные модели GoPro. Он абсолютно бесплатный, выдаёт результат ничуть не хуже, чем ReelSteady, да ещё и работает быстрее и содержит больше настроек. Просто flawless victory, как по мне. Надеюсь, такого будет появляться всё больше. В конце-концов, комьюнити уже прогибает корпорации на выпуск вещей вроде VS Code. #dev

Hashtags

Написал большущую статью о том, как проходил AtomSkills. Это был очень интересный и необычный опыт, даже с учётом моих предыдущих поездок на хакатоны. Если вам интересна разработка и соревнования по программированию, велкам :) #dev https://vk.com/@denisnp-kak-my-vyigrali-sorevnovanie-dlya-stroitelei-i-svarschikov?v=4

Hashtags

Я участвую в конкурсе разработчиков «Код Петербурга», проводимом совместно VK и городом. По условиям нужно сделать или VK-приложение или чат-бота для VK/Маруси с какой-то важной для жителя или гостя города функцией, и с использованием одного из предоставленных внешних API. Я попробовал воплотить свои давние мысли по семантическому поиску по текстам, в чем мне помог @wooferclaw. Что-то подобное мы пытались соорудить на хакатоне в Салехарде, но сейчас я пошёл дальше. Бот для Маруси, который ищет мероприятия в Петербурге с сайта KudaGo. При этом к боту подключён морфологический словарь и тезаурус, который умеет определять домены и ассоциативные связи между словами. Работает вроде неплохо. Во-первых, довольно точно ищет по прямым связям. Например, хорошо понимает, что слова «научный» и «наука» одинаковые, хотя в словаре словоформ они разные. Во-вторых, умеет находить связи по области: допустим, если попросить что-то про пришельцев, предлагает экспозицию о внеземных цивилизациях, хотя ни в описании, ни в ключевых словах этой экспозиции нет слова «пришелец» однокоренных с ним. Но этот поиск приводит и к забавным последствиям, которые лично я не считаю недостатком, а скорее щепоткой соли в работе алгоритма. Так, при запросе о пришельцах может выдать выставку о коммунальных квартирах (что действительно близко по смыслу, но человеку, который ищет пришельцев, скорее всего нужно не это). А ещё на слово «крокодилы» предлагает экскурсию по рекам и каналам, мне очень нравится :) Потестить можно, открыв Марусю (в приложении ВК или в отдельном) и сказав «Запусти навык Куда Пойти в Петербурге». А результаты конкурса будут в октябре. Там ещё второй этап, на него тоже что-нибудь подам. #dev

Hashtags

Хочу немного похвалить Copilot — у него обнаружилась удивительно неплохая способность писать комментарии к коду! На этом скриншоте я написал только первые полтора слова у каждого комментария, остальное дополнила нейросеть, и в одном месте я сделал после этого небольшую правку. Во-первых, это действительно подразгружает, потому что ошибки в комментариях не так страшны, можно доверить такое дело генератору. Во-вторых, есть интересное неочевидное свойство: нейросеть может попытаться объяснить вам чужой код таким способом. Вы как бы спрашиваете компьютер о том, что написал другой человек на языке компьютера. Это довольно прикольно, и даже может быть как-то использовано в целях обучения, как по мне. #dev

Hashtags

Попробовал Github Copilot. Это проект, в рамках которого Гитхаб обучил нейросеть на миллионах строк программного кода, загруженного людьми, и теперь она вроде как способна предлагать автоматическое дополнение к тому, что вы пишете. В теории, если вы напишете название функции, например public int Fibonacci(int n), то она сразу предложит вам автоматически подставить всё остальное. Конкретно с этим примером система действительно справляется, но в целом впечатления у меня от неё смешанные, и на мой взгляд она пока что не стоит тех $10 в месяц, которые за неё просят после тестового двухмесячного периода. Я уже писал ранее о своём отношении к нейросетям. В задачах дополнения данных они работают средненько: значимый процент решений будет с ошибками. Вот и здесь — сначала я подумал, что Copilot сможет за меня копипастить популярные однотипные куски кода из интернета. Например, я не помню алгоритм Вагнера-Фишера, постоянно его копирую из своих других проектов, часть из которых выложена на Github и наверняка была передана в обучение Copilot. Я предложил нейросетям мне этот алгоритм написать, они написали что-то отдалённо похожее. Внешне выглядело убедительно и даже компилировалось, но работало неправильно, и при ближайшем рассмотрении оказалось, что там просто случайно надёрганные строчки из настоящего алгоритма. Некоторые проверки по 2 раза, а часть нужной логики упущено совсем. Об оформлении кода вообще говорить не стоит: пока всё, что мне выдавалось, оформлено плохо, и на ревью я бы написал разработчику несколько замечаний. Однако, в других местах работает, как задумано. Если у вас есть дуальные функции, оно умеет предлагать дописать остаток (пример на скриншоте ниже). Но из того, что я попробовал, только процентов 20 случаев реально были полезны. Остальные 80% или вообще неверный код, или правильный, но такой неаккуратный, что лучше самому написать. Есть ещё проблема: массовый копипаст довольно опасен, потому что легко пропустить какую-то мелочь. В идеале нужно весь вставленный код проверять построчно, но по когнитивной нагрузке это близко к тому, чтобы создать его самостоятельно. И человеческое внимание совершенно точно будет расслабляться и размываться при работе с такими средствами автодополнения, а, значит, неизбежны ошибки. На месте чувствительной к багам энтерпрайз-разработки я бы вообще запрещал бы своим сотрудникам применять Copilot. С другой стороны, возможно, подобная утилита хорошо зайдёт для прототипирования, на хакатонах, на стримах с демонстрацией разработки чего-нибудь. У меня будет возможность проверить на соревновании через месяц, но в работе скорее всего отключу. #dev

Hashtags

Поговорим про ML. Пару дней назад вышла новость о том, что в продажу поступила первая русскоязычная книга, половину текста в которой написала нейросеть ruGPT-3. А до этого вы все наверняка натыкались на очень яркие записи про Dalle и Imagen, где нейросеть по описанию рисует картинку, и получается очень любопытно. Такими темпами скоро нейросети превратятся в крипту: высокотехнологичную вещь, о которой, однако, в среде приличных технарей лучше не упоминать. Потому что то, каким образом это используется, и то, какой образ этому создают в массах, расходится не только с реальностью, но и с определённым уровнем вменяемости. Кстати, ML ещё и может ярко демонстрировать эффект Даннинга-Крюгера. Мем про "Ты чё, пёс, я математик!" нифига не шутка. Человек может считать себя крутым программистом, если научился комбинировать чужие библиотеки на питоне. Хотя на самом деле простейшую практическую задачу решить не способен -- я с такими сталкивался лично. ML-щики вообще пихают свои нейросети куда ни попадя, считая, что это волшебная таблетка и швейцарский нож для любых ситуаций. Мне рассказывали случай, когда на хакатоне по работе с данными выиграл человек, который просто аккуратно вручную подобрал нужные зависимости в Excel :) Глобально же нейросетями пытаются решать три вида задач: 1. Информации в вопросе много, а в ответе нужно мало. Например, распознавание образов и символов. Подбор значений каких-нибудь коэффициентов. Приложение "Хотдог или не хотдог" из сериала Кремниевая Долина. Обычно нейросети справляются с таким очень хорошо. Рукописный ввод распознают шикарно, по фото могут назвать породу собаки, математические формулы читают. Но важно понимать, что под капотом даже у такой нейросети не возникает никаких понятных вам символов. Например, при распознавании рукописного ввода случайный набор пикселей, не имеющий для человека смысла, может быть с той же степенью уверенности интерпретирован нейросетью, как совершенно чёткая буква А. Просто мы на такой случайный набор не попадаем почти всегда, и поэтому всё ок. 2. Информации в вопросе средне, и в ответе нужно средне. Как правило, это предсказание, восстановление недостающих данных, улучшение качества фото, раскрашивание ч/б. С такими задачами нейросети справляются уже средненько. Улучшенный нейросетью снимок сразу видно. Предсказание лишь ненамного точнее, чем случайный выбор. Польза в том, что в обращении такие сети просты, а результат всё-таки дают. Но не стоит их переоценивать. Например, сюда можно отнести задачу суммаризации текста (по большому объёму текстов тебе печатают выжимку). Мои товарищи в одном чате несколько дней игрались с ботом-суммаризатором, и в основном половина написанных им фраз это просто мусор и ерунда для ржача. Но в другой половине всё-таки какой-то совсем небольшой смысл проглядывался. Недостаточный для того, чтобы задалбывать этим ботом участников чата (привет, ребята :) ), но не абсолютный рандом. 3. Информации в вопросе мало, а в ответе нужно много. Это генерация данных: вот как раз написание текстов, составление рисунков, логотипов и так далее. Так вот, по моему скромному, но всё-таки хоть немного компетентному мнению, в таких вопросах нейросети выдают полную херню. И хвалёная логотипная нейросетка Лебедева — тоже полная херня. И распиаренная GPT ничего толкового не пишет. Когда читаешь примеры в новостях-анонсах, сразу думаешь: "Вау, как круто!". Но когда пробуешь сам: ruGPT-3 по уровню осмысленности где-то чуть ниже "Яндекс.Рефератов", если помните такой сервис и суть его работы. Я не знаю, будут ли сети по созданию изображений работать так круто (сейчас доступа к ним ни у кого нет), но книга в соавторстве с человеком стала возможна только по той причине, что в качестве человека взяли Павла Пепперштейна, который берёт случайные комбинации словосочетаний и выдаёт это за литературу. Поверьте: человечество пока что в безопасности касательно захвата машинами. #dev

Hashtags

Но здесь проявляется важный нюанс. На самом деле, он есть везде. Чтобы скомандовать компьютеру что-то сделать, ты должен понимать, хотя бы на общем уровне, как работает компьютер — а это уже часть мышления программиста. Для хорошей работы с экселем тебе придётся использовать формулы, в которых есть не только обычная алгебра, но и, например, логические выражения. Для работы в конструкторах алгоритмов тебе нужно понимать, что такое цикл и условный переход. В какой-то момент понадобятся и структуры данных, например, индексированные массивы (просто вы не будете их так называть, но работать с ними придётся). Даже чтобы собрать что-то в Tilda, нередко нужно хотя бы в общих чертах понимать, как работает вёрстка, допустим, на экранах разных размеров. Что такое пиксель, чем отличается внешний отступ от внутреннего и так далее. В итоге изначальная цель — совсем отказаться от программистов — выполняется лишь частично. Для хорошей работы с nocode-сервисами нужно в некоторой степени программистское мышление. Не получится любой домохозяйке за пару минут натыкать себе подборщик рецептов, если только она уже не является человеком, который при желании и программирование бы мог выучить. Появление специальных вакансий только подтверждает это: если бизнесу нужен условный Senior Tilda Developer, значит, не может любой уборщик в компании набивать лэндинги. Впрочем, это, конечно, дешевле, чем нанять разработчика, и в этом смысле nocode задачу выполняет (с поправкой на то, что сами по себе сервисы могут быть дорогими, а ещё ты к ним навечно привязываешься). В итоге nocode сервисы это в некотором смысле сервисы для ленивых программистов, а не для всех без исключения, как им хотелось бы быть. Естественно, к полному отказу от программистов это тоже не приведёт — как я уже упомянул, немало работы всё ещё требует большой гибкости. Создание собственного уникального продукта, которым потом будут пользоваться другие — один из таких видов работы — и именно она нужна очень многим бизнесам. #dev

Hashtags

Если верить открытым источникам, рынок электросамокатов в России главным образом держат Whoosh и Urent (хотя сейчас ещё Яндекс вклинивается, и с его ресурсами это вполне возможно). При этом у Urent больше городов и больше самокатов, чем у Whoosh, но ниже доходы. Я подумал: наверняка бизнес-аналитики Urent днями и ночами сидят и ломают голову, что бы им поменять и улучшить, чтобы начать выигрывать эту конкуренцию. Строят теории, проводят тесты. Сложная работа, в общем, бизнес и рынок не такие предсказуемые вещи. А потом я воспользовался Urent и за 5 минут нашел столько косяков UI/UX в приложении, что мне стало всё понятно. Кроме того, почему Urent ничего с этими косяками не делает. 1. Сканирование кода в Whoosh приводит к появлению полноэкранной модалки с большими кнопками и основной информацией о самокате и стоимости. Сканирование кода в Urent выдает в самом низу экрана блок кнопок, в которые не только очень сложно попасть, но его ещё и надо скроллить (см. левый скриншот). При этом весь экран занят уже не нужной к этому моменту камерой. Такой интерфейс заточен под перебор самокатов, но на деле человеку на улице на ходу нужно просто максимально быстро взять первый самокат, к которому он подошёл. 2. О том, что страховка включена и будет стоить дополнительных денег, можно догадаться только за счёт знания об этой функции из других сервисов. Да, Whoosh, конечно, поступает очень по-мудачески, постоянно автоматически включая платную страховку, из-за чего её надо выключать вручную каждый раз при каждом заказе. Но в Urent необходимость этого действия ещё и довольно неочевидна (а страховка тоже, конечно же, по-умолчанию всегда включена). 3. Я отсканировал самокат, затем нажал подтверждение заказа. Система после этого написала мне, что данный самокат недоступен. Неужели, нельзя об этом писать ещё на этапе сканирования? Зачем выводить кнопку заказа для недоступного самоката? 4. Кнопка перехода к текущей геопозиции перекрыта неубирающейся шторкой снизу (см. правый скриншот). И это только вещи, которые прям за первые 5 минут выявляются и очень на поверхности. А исправить их может один программист и один дизайнер за пару недель. Удивительно, как некоторые бизнесы не хотят зарабатывать. #dev

Hashtags

Паттерн Декоратор — специальный способ организации модулей в программе, который позволяет подставить какую-то новую функцию прямо в середину цепочки вызовов, тем самым чуть-чуть подкорректировав поведение. Например, в реальном мире очки для чтения это декоратор. Вы ставите их между вашими глазами и текстом. Глобально взаимодействие ваших глаз и текста не меняется: отражённые световые лучи от страницы книги попадают в ваши зрачки, что с очками, что без них. Но очки располагаются посередине: они принимают лучи на вход и преломляют их, передавая дальше вам в глаза уже изменёнными. Важной особенностью является тот факт, что очки можно снять. Они не требуют ни модификации вашего тела, ни модификации книги. Вообще никакие условия не нужны, кроме наличия самих очков. А если вы в линзах, то внешний наблюдатель может даже этого не знать. Класс-декоратор должен быть спроектирован так, чтобы не требовать никаких изменений в объектах, с которыми он работает. Его можно отключить, чаще всего буквально закомментировав одну строку. В примере ниже программа выведет текст "Привет, мир, в натуре.", и вот это дополнение в конце как раз дописано декоратором. Можно убрать или закомментировать подчёркнутую строчку, не трогая остальной код, для всех внешних вызовов сигнатуры останутся теми же самыми, но выводиться будет уже просто "Привет, мир". В декораторы можно прятать логику, которую буквально навешивают поверх основной функции программы. Например, проверку прав на выполнение операции. Перевод на другой язык, логирование, поддержку обратной совместимости при обновлении и так далее. #dev

Hashtags

12•••45678•••10•••15•••20•••25•••30•••35•••40•••45•••50•••55•••60•••65•••70•••7273