Турбокодер


Гео и язык канала: Весь мир, Русский
Категория: Блоги


Блог инди-разработчика Болсуна Михаила.
Автор проектов TurboConf, FastCode 1С, Нетленка 1С и т.д.
Админ каналов @FastCodeIM, @TurboConf и других.
Дневник разработчика, идеи, мысли, маркетинг, монетизация, ИИ, GPT, нейросети
1С, C#, Telegaram, Web...

Связанные каналы

Гео и язык канала
Весь мир, Русский
Категория
Блоги
Статистика
Фильтр публикаций


Вот такая вакансия от 1С подъехала 🙂

🟡 Вакансия: C++ разработчик
Ищем C++ разработчика в команду разработки 1С:Предприятие для работы над улучшением и развитием IDE (Конфигуратора).

🔸Задачи:
Развитие Конфигуратора / IDE для разработчиков 1С
Работая над IDE вы будете облегчать труд большого числа прикладных разработчиков

Ну вот, а я только на днях добавил Избранное в Навигатор по метаданным, а сегодня стал встраивать Избранное в дерево конфигурации. Может тогда не стоит делать и нужно подождать, когда в 1С это реализуют 😉

Как думаете?


Продолжение (окончание??) детектива с поддержкой масштабирования 😱

Мне все таки стало интересно почему же присутствие точки влияло на правильную работу настроек масштабирования.
Я поискал информацию, но ничего не нашел. Потыкался туда-сюда и решил, ладно пусть будет название сборки без точки.

Но через некоторое время все опять перестало правильно отображаться, хотя я ничего не менял 😥

Я уже понял, что точка не причем. Поменял название на TurboConf.Application123 и все заработало. Но через некоторое время опять перестало.
Видимо где-то кэшируется какая-то настройка. Почистил все кэши которые только можно, поискал в реестре ничего.

Первое время работает правильно, потом перестает.

Запустил Process Explorer и добавил колонку DpiAwareness. Тут я заметил интересную вещь, первое время после запуска приложения настройка показывается та которую я задавал (Unaware), но через некоторое время сама меняется на PerMonitorV2.

Я полез в свойства приложения и увидел что флаг в настройках совместимости Dpi установился на "Приложение".

Я снял его и все заработало, через некоторое время флаг опять установился 😓

После некоторых изысканий, я выяснил что в недрах Windows 10 есть такая чудесная настройка "Исправление масштабирования для приложений". Если система считает, что приложение отображается неправильно, она сама начинает пытаться исправлять это. Тем самым мешая мне правильно определять координаты в конфигураторе для вывода элементов. 😡

Заставлять пользователей искать и отключать этот флаг не хотелось, поэтому решил переписать систему масштабирования чтобы работала с учетом этой функции.

Но это уже отдельная история, заслуживающая отдельного рассказа 😉


Столкнулся с очередным детективом в разработке 😱

Над этой проблемой я бился уже очень очень долго, периодически возвращался к ней, но безрезультатно.

Задача: определить масштабирование для каждого монитора в системе (т.е. 100%, 125% и т.д.)
Это нужно для того, чтобы правильно размещать элементы TurboConf в конфигураторе 1С.

Задача непростая. Как таковой готовой функции в WinApi и .NET нет. В последних версиях .NET появилось что-то похожее, но работает только для Windows 10 и выше, и то не на всех билдах и в определенных условиях.

Для Window 7 свой метод получения, для 8 тоже, для 10 разных версий тоже, ну и для 11 конечно по своему. А еще есть разные флаги, которые тоже влияют на это, в общем как обычно.

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

Но она никак не работала в TurboConf...

В этот раз я решил не сдаваться и довести дело до конца. 🔍

Чтобы способ заработал, приложению нужно выйти из песочницы. Для этого требуется настроить манифест программы, чтобы система знала, что можно отдавать реальный DPI приложению, а не виртуальный.

Добавил манифест - не заработало.

Я создал тестовое приложение из одной формы и манифестом. Тоже.

Я выяснил, что для моего типа приложений (WinForms) оказывается нужен не манифест, а app.confg. ОК.

Не заработало.

Попробовал на тестовом приложении с app.confg - работает! Интересно.

Я начал сравнивать и менять все настройки приложений на одинаковые. Не помогает.

Я начал удалять из проекта все что можно, все зависимости, библиотеки т.д. Безрезультатно.

Я удалил практически все, оставил одну форму как в тестовом. Результат тот же.

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

Я создал, новую чистую папку для проекта, и заново собрал - не работает. 😥

В чем же дело?! Это были две полностью одинаковые копии, кроме одного различия...

Названия сборки!

Одно называлось TestDpi.exe, а второе TurboConf.Application.exe
Убираю точку из названия и все работает!!! 😅

Что это было??? Из-за точки в названии я никак не мог долгое время заставить работать функцию! Мораль - никогда не сдавайтесь!

В общем хеппи энд, работаем дальше... 😉


Пользователь прислал ошибку.

Ну из описания ошибки все понятно, длина файла больше 260 символов. Добавляю усечение имени до 260, нет ошибка сохраняется.

А ну сказано меньше, значит до 259 - тоже нет.

А полное имя, значит с расширением .txt, значит, все таки 260-4=256 и число красивое. Уменьшаю до 256. Не работает.

Пошел гуглить. На сайте Microsoft опять говорится про 260. На StackOverfliow много версий. 259, 257, 255, 256, 240.
Попробовал 240 - работает. Стало интересно, какое все-таки, попробовал 255 - ошибки нет. А при чем тут тогда 260???

Пошел снова читать документацию. Оказывается Windows добавляет к имени файла невидимую сроку 🙂 Отсюда и получается 260-5=255.
Ну и все таки даже с учетом этого , длина должна быть не "меньше 260", а "не больше 260".

Все таки важно грамотно составлять текст ошибки. Берегите время других разработчиков! 😉


Есть такой антивирус McAfee, его используют некоторые пользователи TurboConf.

С некоторых пор он почему-то стал ругаться на программу, хотя остальные антивирусы показывали, что все безопасно. Поэтому еще в марте месяце я отправлял им обращение с просьбой проверить эвристику и исправить ложное срабатывание.

И вот сегодня пришел ответ, что программу добавили в белый список 🙂

Dear Sir/Madam,

Thank you for contacting us.

We have reviewed your submission for whitelisting of your software and the submitted file named ['TurboConf.zip'] have been Whitelisted.

Regards,
McAfee Data Submission Team


Ну, как говорится, лучше позже чем никогда 😄


Столкнулся с интересной проблемой.

При клике на ссылку, обработчик то срабатывает, то нет. В зависимости от текста. Очень стало интересно решить эту задачу.

Бился с ней долго и упорно 🙂

1. Сначала подумал, что какой-то символ кириллицы неправильно кодируется и портит формат RTF.
Пробовал по разному кодировать, но связи не нашел.
2. Потом подумал, что я неправильно формирую RTF формат.
Тоже разные варианты не помогли.
3. Погуглил, понял что проблема популярная. Стал заменять редактор на другие реализации, якобы помогающие формировать ссылки.
Безрезультатно.
4. В результате в гугле нашел информацию, что это оказывается баг в элементе управления RichTextEdit! 😡

В зависимости от длины текста, может не срабатывать клик 😄
И судя по обсуждениям, проблема популярная и затронула многих разработчиков.
Интересно сколько человеко-часов на планете тратится программистами на решение таких вот багов? 😉


Когда решили готовить версию к релизу 😄


Разрабатываю ИИ для программистов 1С.
Изначально решил делать все на .NET, т.к. хорошо знаю это стек.
Пришлось использовать порт питоновской библиотеки для ИИ LangChain.
Уже вроде многое написал на С# и кое-что работает, но все таки решил переписать API на Python.
Во первых Python - это стандарт для работы с нейросетями. Во вторых порт совсем не поспевает за быстрыми изменениями библиотек.

Язык был знаком, но совсем немного. Уже два дня, прямо чувствую как новые нейронные связи образуются в мозгу 😄
Много вопросов, как сделать то или это. Постоянно возникают ошибки из-за устаревшей документации по библиотекам.
То, что я бы сделал на C# за 5 минут, занимает пару часов, пока разберешься.
Очень помогает ChatGPT и "помощь друга" ))

Но в целом что-то заработало, на портирование первой части кода с .NET ушло 2 дня, надеюсь дальше пойдет быстрее 🙂


Вспомнил забавный случай.
Когда я работал в ИТ отделе одной компании, у секретаря сломался компьютер и она попросила его починить водителя-экспедитора.
Мимо проходил директор и спросил, почему водитель чинит комп и звонила ли она в поддержку.
Секретарь сказала, я не звонила, т.к. они все равно скажут перезагрузить компьютер, а это не поможет, ведь компьютер, то не включается 😄
True story.


Понадобился мне алгоритм для объединения пересекающихся интервалов на C#. Погуглил, не нашел ничего толкового. Пришлось писать самому. Час писал, получилось так себе. 🙂

Вспомнил, что у меня есть же подписка на ChatGPT 4! Задал вопрос и он мне за 20 секунд написал код, пример и объяснение как действует алгоритм.
Затем сам подкорректировал, под мой конкретный класс и это все работает!

Блин, почему я сразу не спросил у него 😄


Как вам идея такого бота для поддержки🙂


Как не нужно делать интерфейс

Там где заказывал еду "улучшили" интерфейс и пару раз я уже оставался без соуса 🙂

При добавлении позиции через пару секунд кнопки сдвигаются и следующее нажатие уже выполняет отмену.

Написал в поддержку 😉


Пытался нарисовать картинку с помощью ИИ, на которой изображен старый монитор с кареткой в виде символа нижнее подчеркивание "_ "
Но никак не получается, все время он что-то добавляет от себя или понимает не так.
Картинка должна была символизировать художников и работников творческих профессий в будущем.
Видимо я не настоящий художник 😄


5 лет работал дома. Теперь пришлось снять небольшой офис-кабинет за 18 тысяч в месяц. И тут я осознал какие все таки расходы у организаций с сотрудниками и офисом. Даже если их пара-тройка: один разработчик, бухгалтер и еще кто-нибудь. Не говоря уже об фирмах побольше и крупных организациях.

И что удивительно, мне часто пишут, что руководство не согласовывает продление или покупку TurboConf и разработчики покупают его за свои деньги. Парадокс 🙂


Мне написали из Яндекса, что хотели бы опубликовать мой пост про капчу в своем канале Yandex Security
и опубликовали 'https://t.me/YandexCloudSecurity/3415/4799' rel='nofollow'>https://t.me/YandexCloudSecurity/3415/4799

Вот так дела, выходит я теперь знаменитость 😎

P.S. значит кто-то среди нас агент Яндекса, хм... 🤔


Когда выложил тестировщикам самую первую технологическую версию нового TurboConf 🙂


Что-то в последнее время активизировались спамеры на сайте FastCode

Причем легко обходят капчу от Google. Либо через сервисы ручного ввода, либо нейронками.

Хотя 90% из них не подтверждает учетку по email, часть подтверждает и пытаются создать пост.

Добавил ручную модерацию.

Также заменил гугловскую Recaptcha на Яндекс капчу и пока ни одного нового спамера больше не зарегистрировалось 🙂


Поток тикетов с багами по TurboConf 6 немного иссяк. С момента релиза, весь январь тикеты плодились как кролики, но я безжалостно расправлялся с ними.

Сегодня почти был день без новых тикетов по TurboConf 6. Правда за 30 минут до полуночи пользователь написал об одном баге в личку, но это же не считается 😉


Пятница. Поздний вечер. Доделываем одну полезную функцию для Навигатора TurboConf.

Возможность перехода к модулю объекта конфигурации при установленном отборе.

Скоро во всех во многих конфигураторах страны 😉


Столкнулся с интересным багом.

По какой-то причине переставал записываться отладочный лог.

Начал проверять и исправлять возможные проблемы (максимальная длина, неправильное усечение лога, отключение при изменении настроек и т.д.)

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

Лог я просматривал. ошибок никаких в логе нет.

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

[22.01.24 16:02:14:072] lastKeyChar =

И тут мне все стало ясно!

В одной из версий я добавил логирование нажатой клавиши в виде символа Char.
Конечно же какие-то комбинации давали непечатные символы юникод при конвертации, что не давало отобразить весь текст лога. Т.е. лог записывался, но просто не отображался после такого символа.

Вот такое бывает 😉

Показано 20 последних публикаций.