Сообщество - Лига программистов

Лига программистов

2 097 постов 11 911 подписчиков

Популярные теги в сообществе:

Джун, Мидл, Сеньор - кто вы?

На днях читал вот эту замечательную книжку в русском переводе:

Джун, Мидл, Сеньор - кто вы?

Книга повествует о культуре разработки и о том с какими личными трудностями сталкивается человек профессии. Возможно автор этой книги и зачинатель этих определений степеней. Если вы до сих пор не понимаете, что значит джун, мидл и сеньор, то в главе 14 вы найдёт хорошее объяснение от переводчика. Я конечно могу написать предложенный вариант, но советую дойти до этой главы самостоятельно не пролистав по диагонали.

Показать полностью 1
3
Вопрос из ленты «Эксперты»

Помощь с Pyside6

Всем привет! Помогите пожалуйста разобраться со свойствами QTabWidget. Китайская нейросетка подсказывает какую-то дичь.

Есть вот такой интерфейс:

Картинка только для понимания.

Картинка только для понимания.

По задумке при нажатии кнопки Menu блок c Select'ами исчезает, а рабочая область Tab1 расширяется на всю ширину окна. Вот так:

 Показано зеленой линией.

Показано зеленой линией.

Я облазил все свойства QTabWidget но нужного не нашел. Может среди Вас, друзья, есть кто направит на путь истинный и подскажет что.
Сейчас я вообще сомневаюсь что такое возможно через QTabWidget. Может действительно лучше реализовать все через обычный Qwidget, а отображение в нем переключать по кнопкам вместо tab

Показать полностью 1

Вайб-кодинг в новогодние праздники

Получится?

Вайб-кодинг в новогодние праздники

И вообще, почему это вайб-кодинг? Я называю это кофе-кодинг. Пьёшь кофе. Машина работает. Потом ты снова пьёшь кофе. И разбираешь, что она там придумала.

Правда, сейчас я пью ром. Но это почти то же самое.

535

Как я себе приложение для работы писал

Ну ладно, не буду лукавить, ИИ писал)) Да-да, сомбреро подставил, можете накидывать. Но все не так однозначно.

Пожалуй, стоит начать с того, что я ничего не смыслю в кодинге. Мой максимум - пятерки за Паскаль в школе на уроках информатики. Но вот с тех пор я вырос, устроился на работу, и меня огорчала необходимость таскать с собой бумажный блокнот и ручку, либо записывать данные в блокнот телефона, и нигде они не были систематизированы. Все вписанное приходилось переписывать после работы в компьютер. А в процессе самой работы - держать в голове кучу информации и параллельно вести расчёты на калькуляторе. Заебало - подумал я, когда открыл бутылку коньяку после долгого рабочего дня, и попробовал углубиться в матчасть. Выбор пал на Kotlin, как основной язык для Android. Почитав, посмотрев туториалы, я ужаснулся - для непосвященного это все выглядело как инопланетные рукописи. Поэтому, раскопав в памяти что-то о том, как сейчас код пишут нейросети, я обратился к китайскому нейроботу. И тут-то блять дело пошло! Проведя первую неделю в бессонных ночах, у меня появился вполне рабочий прототип, пусть и не с первой попытки. Со второй недели у меня получилось пофиксить часть ошибок, недоработок и багов (хотя некоторые все еще продолжают меня преследовать). К этому же времени я стал совсем капельку разбираться в котлине и в своем коде, и уже мог местами сам что-то добавить или поменять. Но все равно, я не представляю, как программисты пишут программы сами с нуля целиком)) Это же тысячи строк кода, взаимосвязанных между собой. В общем, снимаю шляпу

Работа над приложением продолжается, но мне кажется, что я уперся в предел ии-кодинга (ну или я в конец заебал китайцев в подвале со своей хуйней) - дипсик начал хромать. Еще одна проблема - узконаправленность приложения. То есть, вкладывать туда какие-то реальные средства я не готов, зная, что они никогда не окупятся. По крайней мере, в моих руках - я ни разу не маркетолог, скинул .апк файл всем знакомым коллегам по работе, бескорыстно, просто чтобы пользовались. Короче, сам не знаю, что мне с этим добром делать)) Очень хотелось бы найти знающего человека, обладающего котлином, чтобы иногда просить у него совета. Ладно, чёт начали за здравие, кончили за упокой, пора перейти к сути:

Главный экран

Как я себе приложение для работы писал

Экран новой отгрузки. Три режима (один порт - один транспорт; один порт - несколько транспортов; несколько портов - один транспорт). Из фич - проверка номеров контейнеров и вагонов по контрольной цифре, и режим двойного контроля (позволяет отдельно контролировать, какие поддоны вывезли со склада на эстакаду, и какие из них завезли в транспорт)

Планировщик. Заебался с уведомлениями, да и сейчас они почему-то через раз срабатывают, бился с ними по всякому, но видимо где-то в коде отслеживается фаза луны, от которой зависит - придет уведомление или нет. Еще есть чек-листы, чтобы не забыть ничего, что нужно сделать до отгрузки. А еще можно начать запланированную отгрузку, и ничего не надо будет вводить заново

Ну и по мелочи - шаблоны, чтобы по десять тысяч раз не писать одно и то же, а выбрать из выпадающего списка. Черновики с ручным и автоматическим сохранением, чтобы можно было вести несколько отгрузок одновременно или отложить их до поры до времени. Архив, где можно посмотреть все то, что грузил раньше. И самая моя любимая фича - автосоставление отчёта, который теперь можно просто скопировать и вставить в вордовский документ, а не переписывать вручную

На этом все. Файл .апк получился на 20,5 мегабайтов, хз, много или мало. Но сдается мне, если бы кодил спец, то получилось бы раза в два меньше)). Приложуха работает офлайн, никаких разрешений не требует (окромя уведомлений), майнеры писать не умею, поэтому их нет))

Хз, можно тут ссылки на гитхаб вставлять или нет, если кому-то интересно, скину в комменты. Всем добра, посоны

Показать полностью 15
2885

Ответ на пост «Психанул из-за платных конвертеров и написал свой - бесплатный, приватный и работающий прямо в браузере»3

Было комментарием, но решил вынести в отдельный пост.
В прошедшем 25 году приближаясь к своему 40 летию решил ворваться в мир разработки. В принципе попытки были и до этого, но все ограничивалось скриптами питона или экселя.
А тут именно приложения. Делал в первую очередь для себя самого, но как показала практика все это может быть полезно и остальным.

1. Момент - работа с пдф.
С десктопными приложениями здесь все неплохо, но раздувая функционал, они набирают вес и теряют скорость. Поэтому для себя лично гонял для этих целей python.
Собственно вот решение задачи - вырезать только первый лист у 400+ файлов весом от 1 до 400мб.

Ответ на пост «Психанул из-за платных конвертеров и написал свой - бесплатный, приватный и работающий прямо в браузере»

Выполнение пара минут с учетом того, что офисному компу 13 лет + ворох политик безопасности.

Собственно остальных задач не так много: вырезать листы из файла, разбить на фрагменты или склеить файлы.

Штатно установлен pdf 24, но с учетом вводных он работает дольше.
В итоге собрал все 4 скрипта в одно, и обернул в графику. Получилось десктопное приложение.
https://disk.yandex.ru/d/mcwg7EmfQefYjg

Если есть варианты куда еще это можно выложить - подскажите

Ответ на пост «Психанул из-за платных конвертеров и написал свой - бесплатный, приватный и работающий прямо в браузере»

А да, чуть не забыл, еще конвертер epub в pdf - это было нужно когда переводил книжку.

Но это всё десктопные вариант.

Проблема случилась, когда понадобилось обрабатывать pdf на телефоне. Тут тоже есть варианты, но либо платные, либо с горой функций, среди которых теряются нужные.

В итоге оставив только самое нужное, остальное обернул в графику и java и получил приложение для android - https://www.rustore.ru/catalog/app/ru.pdftoolkit
Получилось достаточно лаконично, компактно и шустро. Изначально считал это вещью в себе и законченным проектом, но вчера почитав комментарии думаю развитие будет.

Ответ на пост «Психанул из-за платных конвертеров и написал свой - бесплатный, приватный и работающий прямо в браузере»

Как минимум выявил баг - приложение падает на файлах больше 1500 страниц и весом около 1Гб, но такие скорее исключение, чем практика, но и с этим можно побороться

GitHub https://github.com/kadded/PdfToolbox/tree/master/app

И еще одно приложение - вещь очень узкоспециализированная, но не написать не могу.

Это для ребят связанных с метрологией, и не по наслышке знающих, что такое система Аршин. Приложение работает с их api но механизм и алгоритм поиска отличаются от официальных. Собственно если словосочетания "метрологическая поверка" и "поверочное свидетельство" вам знакомы - возможно пригодится https://www.rustore.ru/catalog/app/com.example.arshinchecker (да тут я зафакапил название приложения - на яве не писал почти 15 лет и имя пакета осталось такое же как в гайде). Отдельно apk можно взять на 4pda - https://4pda.to/forum/index.php?showtopic=1113359#entry14081...

Ответ на пост «Психанул из-за платных конвертеров и написал свой - бесплатный, приватный и работающий прямо в браузере»

в общем вот, чем хотел поделиться.

Все бесплатное, и в рамках текущего функционала таким и останется.

Это не прям какие-то там откровения, но легкие и функциональные решения.

Показать полностью 4
4

Что такое Deep Research агенты и зачем они нужны?

Что такое Deep Research агенты и зачем они нужны?

В свете недавнего выхода обновления Deep Research для Gemini стоит разобраться, как этот и подобные ему агенты работают.

Очевидно, что речь идет об автоматизированном поиске, вернее, о последовательности задач для поиска труднодоступной информации. Когда для получения финального решения проблемы необходимо пройти множество шагов по обнаружению и анализу данных, выполнить множество запросов, Deep Research может сократить время исследования до нескольких минут - по сравнению с часами, которые ушли бы на поиск в ручном режиме.

Многие AI-лаборатории - OpenAI, Google, IBM - имеют свои версии Deep Research агента. Но мы, тем не менее, знаем и его открытые его реализации, взять хотя бы Open Deep Research от LangChain. Последний дает хорошее представление об архитектуре - как и любой Deep Research пайплайн, он включает уточнение границ исследования, собственно поиск и формирование конечного отчета. Все это - хорошо знакомые мультиагентные сценарии, когда агент-супервайзер планирует конкретные поисковые задачи для агентов-исполнителей, вызывающих внешние функции. Основных проблем две: скорость выполнения задач и доступ к качественным источникам данных.

Скорость зависит от LLM - именно поэтому для агентных систем сейчас разрабатываются модели с высокой пропускной способностью, а также с упором на быстрый и точный reasoning. К этим разработкам относится недавний релиз первой модели нового поколения Nemotron 3 от Nvidia. Эта серия LLM была заявлена именно как вклад компании в развитие открытого агентного AI. Скорость инференса была повышена за счет гибридной архитектуры - трансформер плюс мамба, преимущества последней в отношении пропускной способности и экономного расхода памяти на KV-кэш хорошо известны. Впрочем, гибриды - не единственный путь для усиления агентных способностей AI. DeepSeek имеет очень выгодную для этого архитектуру, реализующую MLA-внимание (Multi-Head Latent Attention), которое обеспечивает высокопроизводительный инференс за счет очень малых, по сравнению с полным вниманием, расходов на KV-кэш.

Далее, мы сталкиваемся с проблемой, когда одна и та же реализация Deep Research дает очень разные результаты в зависимости от доступных данных. Для веб-поиска есть удобные, интегрируемые с AI агентами инструменты типа Tavily. Но далеко не на все вопросы можно получить ответы, просто “погуглив”. Для доступа к данным из частных источников, например, часто возникает необходимость деплоить Deep Research в приватное окружение. Я работаю с разными подходами к решению этой проблемы, включая облачные приватные эндпоинты, или собственный LLM-сервер, развернутый локально или в облаке. Все сводится к тому, как предоставить модели безопасный доступ к данным. Ответом может быть использование вашего собственного конфиденциального MCP-сервера, имеющего доступ к закрытым данным и реализующего определенный механизм авторизации для LLM, запрашивающим доступ к определенным частям этих данных (MCP-ресурсам). Например, если к LLM имеет доступ кто-то кроме вас, доступ не даем вообще или ограничиваем. Всегда можно запрашивать разрешение пользователя - владельца данных, что поддерживается протоколом MCP.

Наконец, необходимо совершенствовать поисковые способности открытых моделей. Крупные компании усиленно “качают” свои модели для повышения эффективности в многошаговых поисковых сценариях - например, Gemini 3 Pro, на котором работает их новый Deep Research агент. Основные вызовы, для достойного ответа на которые тренировали модель - улучшение качества финального отчета агента, в котором должны быть сведены к минимуму галлюцинации и должна присутствовать верификация выводов фактами из достоверных источников. Продуктом исследований Google стал углубленный бенчмарк DeepSearchQA, который может помочь и для улучшения открытых моделей, направленных на решение тех же задач. Преимущество этого бенчмарка - категоризация данных по различным областям исследований, их качество (примеры составлены вручную), и фокус на оценке не только правильности ответа, но и его полноте.

В итоге мы видим, что Deep Research - это агентный паттерн с широкой областью применения, который может быть востребован многими AI-системами. То, что нам нужно - это повышение надежности и автономности поиска, что зависит от факторов, рассмотренных выше.

Показать полностью
0

Как работает GetHashCode в .NET

В .NET метод GetHashCode устроен сложнее, чем «просто вернуть адрес объекта»: CLR хранит и кеширует хеш в заголовке объекта, использует разные алгоритмы для ссылочных, значимых типов, строк, делегатов и анонимных типов.

Что хранится в объекте

Как работает GetHashCode в .NET
  • У любого ссылочного объекта есть заголовок (Header) с двумя полями: указатель на таблицу методов типа (MethodTablePointer) и индекс блока синхронизации (SyncBlockIndex).

  • MethodTablePointer нужен для RTTI и виртуальных вызовов (через него работает GetType и диспетчеризация методов), SyncBlockIndex ― для работы lock/Monitor и других механизмов синхронизации.

Как менялся GetHashCode у ссылочных типов

  • В .NET 1.0–1.1 хеш ссылочного объекта просто брался как свободный индекс блока синхронизации (SyncBlock), который записывался в SyncBlockIndex; это создавало лишние структуры и делало хеши предсказуемыми и идущими подряд.

  • Начиная с .NET 2.0 хеш для Object генерируется потоко-специфичным линейным конгруэнтным генератором: у каждого потока своё семя и множитель, что снижает риск одинаковых последовательностей хешей между потоками.

Где хранится хеш‑код

  • При первом вызове GetHashCode CLR вычисляет значение и кладёт его в SyncBlockIndex; если объекту уже нужен SyncBlock для синхронизации, хеш переносится внутрь SyncBlock, а при освобождении блока обратно копируется в заголовок.

  • Таким образом, хеш стараются хранить либо в заголовке объекта, либо в связанном SyncBlock, чтобы не тратить дополнительную память на отдельное поле в каждом объекте.

Значимые типы: две стратегии

  • Если структура не содержит ссылочных полей и не имеет «пустот» между полями, CLR применяет быструю версию: XOR каждых 4 байт структуры, что задействует всё её содержимое; так, простые пары int,int получают разные хеши при разных значениях.

  • Если есть ссылочные поля или выравнивание даёт пробелы, используется медленная версия: CLR берёт первое экземплярное поле, считает его хеш, XOR‑ит его с указателем на тип этого поля и игнорирует остальные поля, что может давать одинаковые хеши для разных значений остальных полей.

Баг с decimal и вывод

  • В старых версиях .NET быстрый алгоритм давал разные хеши для чисел decimal, которые математически равны, но имеют разное внутреннее представление (например, 10.0m и 10.0000…m); это исправили только в .NET 4.

  • Поведение и производительность дефолтного GetHashCode для value types могут быть неожиданными, поэтому для пользовательских структур и классов рекомендуют явно переопределять GetHashCode (и Equals) под свою модель равенства.

Строки, делегаты и анонимные типы

  • String имеет собственный быстрый алгоритм (вариант djb2 с двумя накопителями), который при каждом вызове заново вычисляет хеш, не кэшируя его, чтобы не тратить память на дополнительное поле в каждом объекте строки; реализация менялась между версиями .NET, поэтому запрещено хранить такие хеши «на диск».

  • В .NET 4.5 добавили опцию «randomized string hashing» на домен приложений (Marvin32), чтобы одинаковые строки в разных доменах могли иметь разные хеш‑коды и лучше защищаться от атак по коллизиям.

  • Delegate по умолчанию возвращает хеш типа делегата (GetType().GetHashCode), поэтому делегаты одного типа с разными методами могут иметь одинаковый хеш.

  • MulticastDelegate переопределяет GetHashCode так, чтобы учитывать всю цепочку методов: обход _invocationList и комбинирование хешей каждого элемента, поэтому при различном количестве/наборе методов хеши различаются.

  • Для анонимных типов компилятор генерирует GetHashCode, который последовательно комбинирует хеш всех полей через умножение на константу и сложение, что делает их хорошо пригодными как ключи в LINQ‑операциях group/join.

  • Equals у анонимных типов переопределён (сравнение по значениям всех полей), а оператор == нет, поэтому Equals может вернуть true, а оператор == — false для двух разных экземпляров с одинаковыми полями.

Показать полностью 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества