Турбокодер
337 subscribers
68 photos
1 video
9 links
Блог инди-разработчика Болсуна Михаила.

Автор проектов TurboConf, FastCode 1С, Нетленка 1С и т.д.

Админ каналов @FastCodeIM, @TurboConf и других.

Дневник разработчика, идеи, мысли, маркетинг, монетизация, ИИ, GPT, нейросети
1С, C#, Telegaram, Web...
Download Telegram
После нескольких лет бесперебойной работы, внезапно решил упасть хостинг.

Все мои сайты и сервисы стали недоступны. Но благо это произошло в пятницу вечером, когда активных пользователей было не так много :)

Надо отдать должное RuVDS быстро ответили на запрос в техподдержку, провели работы и решили проблему за несколько часов. Не пришлось прибегать к плану Б (запускать сервисы на резервной машине). Главное в такой ситуации не отмалчиваться, сообщить о проблеме, отвечать на письма пользователей и держать их в курсе проводимых мероприятий. Всем хороших выходных ))
👍6
Нужен ли рефакторинг бизнесу?

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

Но когда я стал разрабатывать и продавать свои собственные продукты, то стал размышлять с точки зрения бизнеса. Что лучше, потратить время на рефакторинг кода или на добавление новых фич и исправление ошибок?

Рефакторинг не принесет денег в моменте. Скорее всего добавит новых ошибок, что приведет к потерям в доходах. За это время не появится новых функций в продукте и т.д.

Да, через какое-то время это возможно окупится. А может и нет. Может продукт вообще устареет и проще написать новую версию или другой проект. В общем затея рискованная.

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

А вы что думаете. Нужен рефакторинг с точки зрения бизнеса или можно обойтись без него? 😉
🔥3👍2
Как, на первый взгляд, простая задача превращается в сложную.

Пришлось поменять сервис SMTP рассылки, которым я пользовался уже долгое время.
Простая задача: создать учетную запись в новом сервисе, подтвердить домен, добавить записи DKIM/SPF/DMARC в DNS и заменить несколько параметров в конфиг-файле (логин, пароль, порт, хост). Все - ну пусть максимум час-два на все.

Но не тут-то было...

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

Странно, все вроде работало до этого. Начинаем ковыряться в C# SmtpClient, штатный класс для отправки писем. Пробуем менять кодировки туда-сюда. Ничего не помогает.

Смотрим заголовки письма. Почему-то тема приходит в PlainText:

Subject: Восстановление пароля

а не как должно быть:
Subject: =?utf-8?B?0JLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjQtSDQv9Cw0YDQ?=

Гуглим и находим, что это баг в асинхронном методе SendMailAsync. Он известен, но Microsoft почему-то не исправляет его уже долгие годы. Видимо предыдущий сервис как-то исправлял кодировку сам. Пробуем на всякий случай обновить .NET до последней версии, но не помогает.
Пробуем несколько обходных путей, которые предлагаются. Тоже.
В общем, беру синхронный метод Send и оборачиваю его в асинхронный и все работает. Понятно, что костыль но т.к. отправка на сайте нормально не работает, нужно что-то срочно делать.

Итого, задача усложнилась в несколько раз и потребовала почти день, вместо одного часа и то не решена до конца . А у вас часто бывает такое?😉
🔥6👍1
Кто-нибудь вообще читает Помощь в программах?

Мы часто критикуем пользователей, за то что они не читают инструкции и помощь к нашим программам. А сами поступаем точно так же.

Например, для TurboConf я создал большой раздел на сайте, где подробно с картинками и гифками расписаны все функции программы. Но читают его достаточно редко. Хотя в самой программе есть куча ссылок на него. Даже в ТурбоПоиск (поле которое всегда на виду) интегрирована помощь по всем скриптам и функциям.

Но и сам я тоже не могу себя заставить сесть и детально ознакомится со всем инструментарием который я использую. Максимум могу просмотреть какой-нибудь обучающий ролик на YouTube. Если что-то не работает или не знаю как воспользоваться функцией лезу в Гугл.

В древние времена, когда не было интернета - мануал был единственным источником информации. Поэтому да, тогда читал.

Но мне также попадались пользователи, которые внимательно читают Помощь от А до Я. Но сейчас это большая редкость. Видимо времена сейчас такие.

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

Писать и поддерживать документацию в актуальном состоянии достаточно трудозатратная задача. Может ну ее тогда совсем? ))

А вы сами читаете мануалы? 😉
👍1
Решил провести кое-какой рефакторинг на сайтах, обновить версии .NET Framework, перевести методы на асинхронные где еще не было сделано до этого.

В результате потом три дня разбирался с исключениями и периодическими падениями IIS. Зато разобрался как определять причину падения w3wp.exe.

Если коротко, то нужно снять дамп во время падения и проанализировать его.

Для снятия дампа нужно:
1. установить на сервер Debug Diagnostic Tool от Microsoft.
2. запустить DebugDiag Connection и настроить к какому процессу сайту цеплять отладчик и какой дамп снимать. Я выбрал полный. Все это занимает буквально несколько кликов.
3. Ждать падения, в окне будет увеличиваться счетчик ошибок.

Для анализа:
1. Запустить DebugDiag Analysis
2. Загрузить дампы, которые насобирал DebugDiag
3. Выбрать нужный отчет, в моем случае Default (Crash report) и нажать Анализ
4. В отчете ищем текст исключения и трассировку.

В общем в падениях была виновата одна библиотека, которая использовалась при синхронизации сайта с ВКонтакте. Для нее после обновления .NET почему-то в конфиге сайте не прописался нужный binding. В тестовой среде все работало, а вот на продакшене уже нет.

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

Но опыт получен 😉
👏2
Начал заполнять на сайте раздел о клиентах. Все руки не доходили, хотя понимал что это очень важно.

Добавил карусель с логотипами на лендинг и в раздел Купить.

Буду постепенно добавлять, список длинный 😏

Это может помочь новым пользователям принять решение о покупке.

Как говорится, лучше позже чем никогда.
👍4🔥1
Решил наконец-то окончательно победить неправильное отображение форм, при использовании масштабирования в системе.

Сейчас все больше мониторов с высоким разрешением, поэтому обращений по этому поводу поступают все чаще и чаще.

Проблема в том, что для WinForms масштабирование в Windows настоящий ад. На разных системах и разных версиях .NET все реализовано по своему. А если еще у вас несколько разных мониторов...
Даже в пределах Windows 10 масштабирование может вести себя по разному, в зависимости от установленного обновления Creators Update и .NET 4.7.2
По тестам, лучше всего программа отображалась на Windows 11, но зная неповоротливость энтерпрайза, рассчитывать на это пока не стоит.

Еще из бонусов. Смену масштаба при переносе с монитора на монитор можно отследить только в последних версиях .NET и ОС.

В общем решил писать свою реализацию.

Разрабатывать формы нужно обязательно на 100% DPI, а тестировать уже при другом. При чем нужно перелогиниваться, что бы было все корректно. Либо проверять на другой машине.

Замерил размер шрифта 8.25 на своей системе, с масштабированием 100%. Затем в программе, при создании формы, добавил вычисление строки с таким шрифтом на текущей форме и поделив эти значения получил точный коэффициент. Далее корректирую размеры элементов формы.

Проверил на разных системах, с разным масштабированием. Работает как часы. 😉
🔥4👏3
Решил преобразовать канал FastTalk 1C в TurboConf 1C

Решение было не просто принять, но взвесив все за и против я это сделал.
Преимуществ несколько:
1. Канал FastTalk 1C не особо взлетел. Предполагалось что в нем будут публиковаться разные авторы, в различных рубриках. Как думаете сколько за год авторов, кроме меня, добавило статьи? Правильно, 0.
2. Создавать с нуля еще один канал, процедура не простая. А т.к. аудитория на канале уже была и большинство публикаций в последнее время были как раз посвящены ТурбоКонф, то решение логичное.
3. У меня и так много каналов и вести еще один просто нет возможности.

Отдельный канал TurboConf я давно хотел сделать. Группа была, но не все любят участвовать в чатах. Да и информации там слишком много, нужные новости можно случайно пропустить.

Планирую публиковать не только информацию посвященную TurboConf, но и о других инструментах, продуктивной разработке и администрировании.

Понятно, сейчас происходят отписки, но и новые пользователи тоже прибавляются. Со временем думаю все устаканится и будет ОК 😉
Как там дела с ботом вакансий?

Подключил несколько партнеров - админов крупных телеграм каналов по 1С. Они разместили у себя ссылку на бота и будут получать комиссию, если будет прибыль 🙂.
Копится база пользователей и работодателей. Пользователей бота уже более 800.
Начал тестировать монетизацию. Ввел два типа размещения Бесплатное и Премиум.
Бесплатное - размещение в боте без уведомлений и публикация в телеграм канале.
Премиум - рассылка пользователям бота с уведомлением, публикация в канале, закрепление в топе в боте и канала. Стоимость тестирую от 1р. за отправку одному пользователю и выше. Стоимость рассчитывается перед публикацией, с учетом оборов пользователей.

Практически все работодатели пока выбирают бесплатную публикацию.
Но сегодня один работодатель уже купил Премиум размещение за 770 руб. Значит спрос есть и с этим можно уже работать. Из этой суммы часть будет начислена партнерам.

Пока это все еще MVP и нужно как следует над ним поработать. Но тем не менее кое-какие успехи уже есть 😉
🔥1
Какие только баги не встречаются на свете!

Случайно обнаружил, что если имя пользователя TurboConf содержит .st, то возникает ошибка загрузки штатных шаблонов *.st конфигуратора.

Например:
C:\Users\s.stepanov\AppData\Roaming\1c\1cv8\1cv8cmn.pfl ))
Программа думает что C:\Users\s.st - это файл шаблона и пытается его загрузить.

Обнаружил случайно при анализе лога пользователя, на предмет другой ошибки.
Чего только не бывает 😀
😁4
Бывает у вас такое?
Исправил небольшую ошибку, надо выпускать в релиз и решаешь сразу закрыть еще одну. А тут тоже можно улучшить, тут подправить, тут добавить... В результате 3 дня разработки и релиз на 20 изменений 😉
👍10
Добавить новую фичу не сложно, сложно довести ее до рабочего состояния.

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

Но что делать, таков Путь разработчика 😉
🔥1
Хотел перейти на более короткий цикл выпуска релизов. Т.е. одна большая фича - новый релиз.
Но опять сделал монстра. И новый API, и поднятие версии .NET и OneScript, куча нового функционала и улучшенные механизмы взаимодействия.

В общем уже почти тянет на новую мажорную версию TurboConf 6, а не TurboConf 5.18 🙂
🔥92
Что-то почтовые рассылки совсем перестали работать.

Делал прошлую рассылку 3 месяца назад, отклика почти не было, зря потратил 1000 руб.

Сегодня еще раз попробовал рассылку о новом большом релизе. Опять бесполезно. 1% переходов. В предыдущей было 4%. До этого было 8% и выше.
Просмотров 12% вместо 33% у прошлой.
Видимо от рассылок на почту придется отказаться.

ВК тоже глухо. 41 просмотр из 270 подписчиков. 1 лайк и то мой 😀 Зачем я веду эту группу 🤔

Но зато Телеграм радует.
Видимо все окончательно перешли в Телеграм и почту уже не смотрят.
Пользователи стали жаловаться что залипают клавиши в текущем релизе TurboConf. Начал разбираться и нашел изменение, которое все сломало.

И там был такой комментарий, к чему бы это? 😀
😁2
Когда я работал наемным программистом, мне всегда нравился вопрос от руководства, "Сколько точно нужно времени чтобы добавить такой-то функционал"?
Как по мне для алгоритма расчета времени на выполнение новой задачи лучше всего подходит этот отрывок из Р. Шекли.

Вальдец удрученно вздохнул, извлек из пояса клочок бумаги и огрызок карандаша и спросил:
– Сколько монет у вас в кармане?
Порывшись в кармане, Марвин сказал:
– Восемь.
Вальдец записал эту цифру, потом выяснил год и день рождения Марвина, номер его удостоверения личности, размер обуви и рост в сантиметрах. Над этими данными он произвел какие-то математические выкладки. Затем попросил Марвина назвать наудачу любое число от 1 до 14. К названному числу он прибавил несколько своих, после чего несколько минут выводил какие-то каракули и что-то подсчитывал.
– Ну? – поторопил его Марвин.
– Помните, результат представляет собой всего-навсего статистическую вероятность, – сказал Вальдец, – и заслуживает доверия лишь как таковой.
Марвин кивнул. Вальдец продолжал:
– В вашем конкретном случае период раскрытия системы истекает ровно через одну минуту сорок восемь секунд плюс-минус пять минимикросекунд.
👍5
Никогда не думал, что буду номинироваться на звание Легенды 1С 😀

Оказывается тут голосовалка и за меня даже голосует часть сообщества, что конечно приятно. Значит усилия потрачены не зря 🙂

https://t.iss.one/JuniorOneS/579
👍3🔥3
Всем хорошо известно, релиз в пятницу часто приводит к незабываемым выходным.

Но меня вот как обычно что-то тянет нажать заветную кнопку именно в пятницу вечером 😀

Может таким образом хочется закрыть гештальт? 😉

А у вас часто бывают релизы по пятницам?
Пятница, вечер. Факультатив.

Делаем темную тему для подсказки T9, чтобы у бедных пользователей темных тем глаза не выпадали от появления светлого окна.
🔥5
32 гигабайта ОЗУ стало маловато на десктопе. Сходил прикупил еще 32 гига 🙂
Надеюсь 64ГБ теперь будет достаточно для одновременной работы в нескольких IDE, парочке 1С, Chrome и проигрывателя музыки

P.S. установил. Rider на радостях сожрал 30Гб оперативки 😧 Но потом опомнился и упал до 6 Гб, сейчас в рабочей среде потребление памяти в районе 50% 😀
👍9