Праздничные каникулы не прошли даром. Исправил некоторые баги в TurboConf 6, но самое главное наконец-то добавил в TurboConf полноценный маркетплейс.
На самом деле работы было много, не удалось даже запустить ни разу Steam, и почти ни разу сериал 😉. Пришлось переделать сайт, привести все разделы в порядок, сделать редизайн cтора, добавить клиент для автоматической установки скриптов.
Но сегодня релиз был выпущен. Это маленький шаг для человека, но большой шаг для сообщества TurboConf (c).
Подробнее о концепции и идее стора расскажу в следующих постах.
P.S. на фото есть пасхалка 🙂
На самом деле работы было много, не удалось даже запустить ни разу Steam, и почти ни разу сериал 😉. Пришлось переделать сайт, привести все разделы в порядок, сделать редизайн cтора, добавить клиент для автоматической установки скриптов.
Но сегодня релиз был выпущен. Это маленький шаг для человека, но большой шаг для сообщества TurboConf (c).
Подробнее о концепции и идее стора расскажу в следующих постах.
P.S. на фото есть пасхалка 🙂
👍9🔥3⚡1
Пользователи упорно не хотели вставлять изображения прямо в поле редактора текста тикета, а прикрепляли в виде файла.
Для того чтобы их просматривать приходилось каждый раз скачивать файл и открывать отдельно.
Писал разные подсказки, но бесполезно. Устал сражаться с UI, UX и просто удалил кнопку прикрепления файла 🙂
Нет кнопки - нет проблемы. 😉
Для того чтобы их просматривать приходилось каждый раз скачивать файл и открывать отдельно.
Писал разные подсказки, но бесполезно. Устал сражаться с UI, UX и просто удалил кнопку прикрепления файла 🙂
Нет кнопки - нет проблемы. 😉
👍9🤣2
Столкнулся с интересным багом.
По какой-то причине переставал записываться отладочный лог.
Начал проверять и исправлять возможные проблемы (максимальная длина, неправильное усечение лога, отключение при изменении настроек и т.д.)
После каждого исправления возможной проблемы лог работал какое-то время, а потом опять переставал. Причем мог то записываться долго, то вдруг почти сразу же после запуска программы останавливался.
Лог я просматривал. ошибок никаких в логе нет.
После перебора всех возможных вариантов, я задумавшись смотрел на окно лога и мое внимание привлекла последняя строка
[22.01.24 16:02:14:072] lastKeyChar =
И тут мне все стало ясно!
В одной из версий я добавил логирование нажатой клавиши в виде символа Char.
Конечно же какие-то комбинации давали непечатные символы юникод при конвертации, что не давало отобразить весь текст лога. Т.е. лог записывался, но просто не отображался после такого символа.
Вот такое бывает 😉
По какой-то причине переставал записываться отладочный лог.
Начал проверять и исправлять возможные проблемы (максимальная длина, неправильное усечение лога, отключение при изменении настроек и т.д.)
После каждого исправления возможной проблемы лог работал какое-то время, а потом опять переставал. Причем мог то записываться долго, то вдруг почти сразу же после запуска программы останавливался.
Лог я просматривал. ошибок никаких в логе нет.
После перебора всех возможных вариантов, я задумавшись смотрел на окно лога и мое внимание привлекла последняя строка
[22.01.24 16:02:14:072] lastKeyChar =
И тут мне все стало ясно!
В одной из версий я добавил логирование нажатой клавиши в виде символа Char.
Конечно же какие-то комбинации давали непечатные символы юникод при конвертации, что не давало отобразить весь текст лога. Т.е. лог записывался, но просто не отображался после такого символа.
Вот такое бывает 😉
👍8
Поток тикетов с багами по TurboConf 6 немного иссяк. С момента релиза, весь январь тикеты плодились как кролики, но я безжалостно расправлялся с ними.
Сегодня почти был день без новых тикетов по TurboConf 6. Правда за 30 минут до полуночи пользователь написал об одном баге в личку, но это же не считается 😉
Сегодня почти был день без новых тикетов по TurboConf 6. Правда за 30 минут до полуночи пользователь написал об одном баге в личку, но это же не считается 😉
🔥10👍3
Что-то в последнее время активизировались спамеры на сайте FastCode
Причем легко обходят капчу от Google. Либо через сервисы ручного ввода, либо нейронками.
Хотя 90% из них не подтверждает учетку по email, часть подтверждает и пытаются создать пост.
Добавил ручную модерацию.
Также заменил гугловскую Recaptcha на Яндекс капчу и пока ни одного нового спамера больше не зарегистрировалось 🙂
Причем легко обходят капчу от Google. Либо через сервисы ручного ввода, либо нейронками.
Хотя 90% из них не подтверждает учетку по email, часть подтверждает и пытаются создать пост.
Добавил ручную модерацию.
Также заменил гугловскую Recaptcha на Яндекс капчу и пока ни одного нового спамера больше не зарегистрировалось 🙂
👍14
Мне написали из Яндекса, что хотели бы опубликовать мой пост про капчу в своем канале Yandex Security
и опубликовали https://t.iss.one/YandexCloudSecurity/3415/4799
Вот так дела, выходит я теперь знаменитость 😎
P.S. значит кто-то среди нас агент Яндекса, хм... 🤔
и опубликовали https://t.iss.one/YandexCloudSecurity/3415/4799
Вот так дела, выходит я теперь знаменитость 😎
P.S. значит кто-то среди нас агент Яндекса, хм... 🤔
🔥8👍2🍾1
5 лет работал дома. Теперь пришлось снять небольшой офис-кабинет за 18 тысяч в месяц. И тут я осознал какие все таки расходы у организаций с сотрудниками и офисом. Даже если их пара-тройка: один разработчик, бухгалтер и еще кто-нибудь. Не говоря уже об фирмах побольше и крупных организациях.
И что удивительно, мне часто пишут, что руководство не согласовывает продление или покупку TurboConf и разработчики покупают его за свои деньги. Парадокс 🙂
И что удивительно, мне часто пишут, что руководство не согласовывает продление или покупку TurboConf и разработчики покупают его за свои деньги. Парадокс 🙂
👍11🤷♂1💯1
Пытался нарисовать картинку с помощью ИИ, на которой изображен старый монитор с кареткой в виде символа нижнее подчеркивание "_ "
Но никак не получается, все время он что-то добавляет от себя или понимает не так.
Картинка должна была символизировать художников и работников творческих профессий в будущем.
Видимо я не настоящий художник 😄
Но никак не получается, все время он что-то добавляет от себя или понимает не так.
Картинка должна была символизировать художников и работников творческих профессий в будущем.
Видимо я не настоящий художник 😄
😁3
Понадобился мне алгоритм для объединения пересекающихся интервалов на C#. Погуглил, не нашел ничего толкового. Пришлось писать самому. Час писал, получилось так себе. 🙂
Вспомнил, что у меня есть же подписка на ChatGPT 4! Задал вопрос и он мне за 20 секунд написал код, пример и объяснение как действует алгоритм.
Затем сам подкорректировал, под мой конкретный класс и это все работает!
Блин, почему я сразу не спросил у него 😄
Вспомнил, что у меня есть же подписка на ChatGPT 4! Задал вопрос и он мне за 20 секунд написал код, пример и объяснение как действует алгоритм.
Затем сам подкорректировал, под мой конкретный класс и это все работает!
Блин, почему я сразу не спросил у него 😄
🔥7👾2
Вспомнил забавный случай.
Когда я работал в ИТ отделе одной компании, у секретаря сломался компьютер и она попросила его починить водителя-экспедитора.
Мимо проходил директор и спросил, почему водитель чинит комп и звонила ли она в поддержку.
Секретарь сказала, я не звонила, т.к. они все равно скажут перезагрузить компьютер, а это не поможет, ведь компьютер, то не включается 😄
True story.
Когда я работал в ИТ отделе одной компании, у секретаря сломался компьютер и она попросила его починить водителя-экспедитора.
Мимо проходил директор и спросил, почему водитель чинит комп и звонила ли она в поддержку.
Секретарь сказала, я не звонила, т.к. они все равно скажут перезагрузить компьютер, а это не поможет, ведь компьютер, то не включается 😄
True story.
😁9
Разрабатываю ИИ для программистов 1С.
Изначально решил делать все на .NET, т.к. хорошо знаю это стек.
Пришлось использовать порт питоновской библиотеки для ИИ LangChain.
Уже вроде многое написал на С# и кое-что работает, но все таки решил переписать API на Python.
Во первых Python - это стандарт для работы с нейросетями. Во вторых порт совсем не поспевает за быстрыми изменениями библиотек.
Язык был знаком, но совсем немного. Уже два дня, прямо чувствую как новые нейронные связи образуются в мозгу 😄
Много вопросов, как сделать то или это. Постоянно возникают ошибки из-за устаревшей документации по библиотекам.
То, что я бы сделал на C# за 5 минут, занимает пару часов, пока разберешься.
Очень помогает ChatGPT и "помощь друга" ))
Но в целом что-то заработало, на портирование первой части кода с .NET ушло 2 дня, надеюсь дальше пойдет быстрее 🙂
Изначально решил делать все на .NET, т.к. хорошо знаю это стек.
Пришлось использовать порт питоновской библиотеки для ИИ LangChain.
Уже вроде многое написал на С# и кое-что работает, но все таки решил переписать API на Python.
Во первых Python - это стандарт для работы с нейросетями. Во вторых порт совсем не поспевает за быстрыми изменениями библиотек.
Язык был знаком, но совсем немного. Уже два дня, прямо чувствую как новые нейронные связи образуются в мозгу 😄
Много вопросов, как сделать то или это. Постоянно возникают ошибки из-за устаревшей документации по библиотекам.
То, что я бы сделал на C# за 5 минут, занимает пару часов, пока разберешься.
Очень помогает ChatGPT и "помощь друга" ))
Но в целом что-то заработало, на портирование первой части кода с .NET ушло 2 дня, надеюсь дальше пойдет быстрее 🙂
🔥19
Столкнулся с интересной проблемой.
При клике на ссылку, обработчик то срабатывает, то нет. В зависимости от текста. Очень стало интересно решить эту задачу.
Бился с ней долго и упорно 🙂
1. Сначала подумал, что какой-то символ кириллицы неправильно кодируется и портит формат RTF.
Пробовал по разному кодировать, но связи не нашел.
2. Потом подумал, что я неправильно формирую RTF формат.
Тоже разные варианты не помогли.
3. Погуглил, понял что проблема популярная. Стал заменять редактор на другие реализации, якобы помогающие формировать ссылки.
Безрезультатно.
4. В результате в гугле нашел информацию, что это оказывается баг в элементе управления RichTextEdit! 😡
В зависимости от длины текста, может не срабатывать клик 😄
И судя по обсуждениям, проблема популярная и затронула многих разработчиков.
Интересно сколько человеко-часов на планете тратится программистами на решение таких вот багов? 😉
При клике на ссылку, обработчик то срабатывает, то нет. В зависимости от текста. Очень стало интересно решить эту задачу.
Бился с ней долго и упорно 🙂
1. Сначала подумал, что какой-то символ кириллицы неправильно кодируется и портит формат RTF.
Пробовал по разному кодировать, но связи не нашел.
2. Потом подумал, что я неправильно формирую RTF формат.
Тоже разные варианты не помогли.
3. Погуглил, понял что проблема популярная. Стал заменять редактор на другие реализации, якобы помогающие формировать ссылки.
Безрезультатно.
4. В результате в гугле нашел информацию, что это оказывается баг в элементе управления RichTextEdit! 😡
В зависимости от длины текста, может не срабатывать клик 😄
И судя по обсуждениям, проблема популярная и затронула многих разработчиков.
Интересно сколько человеко-часов на планете тратится программистами на решение таких вот багов? 😉
😁13
Есть такой антивирус 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
Ну, как говорится, лучше позже чем никогда 😄
🔥6❤1🌭1
Пользователь прислал ошибку.
Ну из описания ошибки все понятно, длина файла больше 260 символов. Добавляю усечение имени до 260, нет ошибка сохраняется.
А ну сказано меньше, значит до 259 - тоже нет.
А полное имя, значит с расширением .txt, значит, все таки 260-4=256 и число красивое. Уменьшаю до 256. Не работает.
Пошел гуглить. На сайте Microsoft опять говорится про 260. На StackOverfliow много версий. 259, 257, 255, 256, 240.
Попробовал 240 - работает. Стало интересно, какое все-таки, попробовал 255 - ошибки нет. А при чем тут тогда 260???
Пошел снова читать документацию. Оказывается Windows добавляет к имени файла невидимую сроку <NUL> 🙂 Отсюда и получается 260-5=255.
Ну и все таки даже с учетом этого <NUL>, длина должна быть не "
Все таки важно грамотно составлять текст ошибки. Берегите время других разработчиков! 😉
Ну из описания ошибки все понятно, длина файла больше 260 символов. Добавляю усечение имени до 260, нет ошибка сохраняется.
А ну сказано меньше, значит до 259 - тоже нет.
А полное имя, значит с расширением .txt, значит, все таки 260-4=256 и число красивое. Уменьшаю до 256. Не работает.
Пошел гуглить. На сайте Microsoft опять говорится про 260. На StackOverfliow много версий. 259, 257, 255, 256, 240.
Попробовал 240 - работает. Стало интересно, какое все-таки, попробовал 255 - ошибки нет. А при чем тут тогда 260???
Пошел снова читать документацию. Оказывается Windows добавляет к имени файла невидимую сроку <NUL> 🙂 Отсюда и получается 260-5=255.
Ну и все таки даже с учетом этого <NUL>, длина должна быть не "
меньше 260
", а "не больше 260
".Все таки важно грамотно составлять текст ошибки. Берегите время других разработчиков! 😉
👍7😁3
Столкнулся с очередным детективом в разработке 😱
Над этой проблемой я бился уже очень очень долго, периодически возвращался к ней, но безрезультатно.
Задача: определить масштабирование для каждого монитора в системе (т.е. 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
Убираю точку из названия и все работает!!! 😅
Что это было??? Из-за точки в названии я никак не мог долгое время заставить работать функцию! Мораль - никогда не сдавайтесь!
В общем хеппи энд, работаем дальше... 😉
Над этой проблемой я бился уже очень очень долго, периодически возвращался к ней, но безрезультатно.
Задача: определить масштабирование для каждого монитора в системе (т.е. 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
Убираю точку из названия и все работает!!! 😅
Что это было??? Из-за точки в названии я никак не мог долгое время заставить работать функцию! Мораль - никогда не сдавайтесь!
В общем хеппи энд, работаем дальше... 😉
🔥16👍9❤1🤯1👾1