TGViewer
Channel Public Channel
Никита Федькин - мысли, заметки, анонсы

Никита Федькин - мысли, заметки, анонсы

@nixel2007_thoughts

Связаться со мной - @nixel2007.
Никита Федькин (ранее Грызлов).

На канале не публикуется платная реклама.
Subscribers
2.88K
Photos
243
Videos
8
Links
369

Showing posts older than #283 · Back to latest

Older Posts 13 shown
Post #282 3.08K
Прилетел мне тут инвайт на GitHub CodeSpaces.

Ну что могу сказать... КодСпейс работает, и работает шустро. Нормальной поддержки java в связке с gradle на kotlin dsl в VSCode все так же нет. Грусть.

Если у кого вопросики есть по CS - задавайте.
GitHub GitHub Codespaces · Cloud Development Environment · GitHub GitHub Codespaces gets you up and coding faster with fully configured, secure cloud development environments native to GitHub.
Post #281 3.43K
Никита Федькин - мысли, заметки, анонсы Немножечко новостей про firstBitMarksistskaya/onec-docker. В основной бранч влито два важных изменения. 1) Поддержка загрузки и установки 8.3.20! Да, сейчас поставить двадцатку (или даже недавно вышедшую 21) автоматизировано - задача не из легких, и большинство…
Для тех, кто тоже пострадал от ddos guard при скачке релизов 1С, в проект firstBitMarksistskaya/onec-docker добавлена возможность собирать образ из предварительно загруженных файлов.

Размещаете скачанные дистрибутивы в каталоге distr, запускаете сборку образа, и Dockerfile подцепит их автоматически.

Спасибо Диме Абрамову за пулл-реквест!

P.S. Не совсем та автоматизация, о которой мы мечтали, но хоть что-то.
GitHub GitHub - firstBitMarksistskaya/onec-docker: Файлы для сборки образов Docker c платформой 1С:Предприятие 8.3. Файлы для сборки образов Docker c платформой 1С:Предприятие 8.3. - firstBitMarksistskaya/onec-docker
  • 🔥 18
Post #280 3.49K
Вас тоже накатило волной переходов с MS SQL Server на PostgreSQL? Пытались уже разобраться, как настроить бэкапы или AlwaysOn?
Собираетесь же настроить хотя бы бэкапы? :)

Антон Литвинов накатал неплохую инструкцию по настройке аналога майкрософтовского AlwaysOn для pg на базе pg auto failover. Хорошая пошаговая методичка, как и горячую реплику получить и переключение master-replica автоматизировать, если что-то пошло не так.

https://habr.com/ru/post/664858/

Добавить к этому ещё холодные бэкапы средствами pg_pro_backup и получится надёжный отказоустойчивый контур.

P. S. Люди делятся на две категории: тех, кто делит людей на две категории и тех, кто не делит тех, кто ЕЩЁ не делает бэкапы, и тех, кто УЖЕ. Подстелите соломки себе заранее.
Хабр Кластер Postgres для 1С. Повествование об интеллектуальных скитаниях инженера со счастливым концом Источник картинки - https://postgrespro.ru/blog/news/3876555 Как и у многих, в нашей компании возник вопрос импортозамещения. В целом вопрос понятный, много раз обсужденный со всех точек зрения. И вот...
  • 👍 24
Post #279 2.58K
Представьте примерно следующий код:

Ключ = Новый Структура("Поле1, Поле2", "123", "456");
Карта.Вставить(Ключ, 1);

Ключ2 = Новый Структура("Поле1, Поле2", "789", "987");
Карта.Вставить(Ключ2, 2);

Значение = Карта.Получить(Ключ2);

Вроде ничего сложного, да? Сделали два ключа, положили по ним значение в соответствие карту, затем получили значение по второму.

Пример утрированный, эти операции размазаны по коду, но смысл такой.

Так вот. Как думаете, что будет в переменной Значение? По идее двойка, да?

По идее да. Двойка. И так и было примерно в 99.9% случаев. А в 0.01% в Значении было... Неопределено.

НедоумевающийДжекиЧан.джпг

Что, почему, как? Херня эта ваша джава, да?

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

Интерфейсы часто помимо, собственно, сигнатуры метода, содержат еще некоторую договоренность или контракт, описанный в документации к интерфейсу. Например, в случае Comparable есть требование возвращать -1, 0 или 1 в качестве результата метода compareTo для значений "меньше", "равно" или "больше" в плане сравнения порядка/сортировки двух объектов. Или рекомендация возвращать 0, если объекты равны между собой по equals, что действительно звучит логично - равные объекты и упорядочиваться должны одинаково.

Но есть и еще одно требование - если А > Б, то обязательно должно выполняться Б < А. От перемены мест слагаемых и все такое прочее.

Душный Дотошный читатель мог обратить внимание, что моя на скорую руку написанная реализация compareTo сранивала хэш-коды на строгое больше и меньше и задаться вопросом: "А что будет, если хэш-коды у двух разных объектов будут одинаковыми? Это валидная ситуация?". И будет абсолютно прав в своей дотошности. Ситуация валидная, а я лопух, нарушивший контракт А > Б = Б < А

Т.к. метод сортировки применяется в ConcurrentSkipListMap для построения индекса, два объекта, которые при сравнении друг с другом с разных сторон давали разные ответы, приводили к ошибкам позиционирования в индексе. И вместо нахождения в индексе адреса нужного значения в дереве из двусвязных списков, индекс врезался в null.

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

Можно было бы подумать, что это все жабо-проблемы, и в этом нашем 1С такого не может быть. Какие у нас интерфейсы, какие контракты?

А вот и нет. Есть у нас интерфейсы, и есть контракты. Не важно, какую библиотеку вы используете: Библиотеку стандартных подсистем с ее миллионом общих модулей и вязанкой "переопределяемых" методов, или, к примеру клевую библиотеку для сериализации SerLib1C от Артема Кузнецова (не реклама, честно, просто вспомнилось :) ) - автор может закладываться на какое-то ваше адекватное поведение в коде переопределяемых обработчиков. Хороший автор еще напишет об этом в документации.

Вот такое вам длиииииииинное субботнее чтиво.
Всем добра и RTFM!
GitHub fix: исправлено нарушение контракта compareTo by EightM · Pull Request #2745 · 1c-syntax/bsl-language-server контракт "x.compareTo(…y)) == -signum(y.compareTo(x))" не выполняется при сравнении объектов с одинаковым hashcode Общие Ветка PR обновлена из develop Отладочные, закомментированные и ...
  • 👍 22
  • 🔥 2
Post #278 1.9K
История одного контракта.

Поотнимаю немного хлеб у Лягуха и напишу пост про джаву.

Я люблю джаву. За её строгость, за типизацию, за ООП, за огромное количество готовых разработок и за богатую стандартную библиотеку.

В частности джава славится своими коллекциями и интерфейсами (читай контрактами).

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

С интерфейсами такая же ситуация, их ооочень много. Часть интерфейсов обрабатывается самой JVM. Например, Serializable разрешает виртуальной машине применять к классу штатный механизм бинарной сериализации. А Iterable разрешает перебирать объект в цикле for each (для каждого) - круто же! Реализовали один метод и теперь объект можно циклом обходить.

Часть интерфейсов - прикладные.
Например, задача интерфейса Comparable - дать единый метод сравнения объектов одного класса. Сказать, что этот объект "больше", "меньше" или "равен" другому объекту именно в плане порядка/сортировки. Да даже List - это тоже интерфейс. Если писать код "правильно", опираясь на интерфейсы, то реализацию конкретного листа при необходимости можно менять безболезненно.

Какая может быть необходимость?

В грядущем (и долгожданном) релизе BSL Language Server под версией 0.20.0 появится важная фича - добавленный пару релизов назад механизм Reference Index, хранящий данные о вызове всех методов в коде и помогающий делать всякие "переход к определению", "поиск мест использования" и прочие всплывающие подсказки, научился хранить ещё и данные обо всех используемых переменных - где они были объявлены/им были присвоены значения и где к этим переменным было обращение. По всей кодовой базе.

Конечно же, это довольно сильно ударило по объёму занимаемой оперативной памяти. Если в релизе 0.19 данные индекса ПО вызовам методов в УХ занимали чуть меньше 100 мегабайт оперативной памяти, то загрузка в индекс всех данных об используемых переменных резко подняла этот показатель до почти 800 (!) мегабайт. Так как вопрос производительности работы с индексом не стоял (спасибо Эдуарду за несколько подходов к оптимизации), надо было попробовать снизить затраты памяти, пускай и жертвуя толикой производительности.

В качестве основного хранилища данных ссылок в индексе использовался ConcurrentHashMap - это почти как обычный HashMap, хранящий данные в хэш-таблице на основе, собственно, хэш-кода от ключа соответствия мапы, но поддерживающий работу в многопоточной среде без ошибок или адовых ожиданий на блокировках. Покурив интернетики была найдена другая штатная реализация конкурентной мапы в виде ConcurrentSkipListMap. В ней гарантируется O log(n) на операциях поиска и вставки по ключу в отличии от вообще отсутствия каких-то гарантий по сложности в ConcurrentHashMap. Ещё и внутренняя реализация в виде индексного дерева из двунаправленных связных списков позволяла предположить, что можно сэкономить сколько-то памяти. И да, сколько-то сэкономилось - целых 200 мегабайт! От исходных 800 это целых 25%, потери же производительности были прям совсем мизерными.

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

Над реализацией метода сравнения я думал примерно ХеракХеракИГотово - если объекты равны между собой, значит они равны и по порядку. А если не равны, возьмём их хэш-код (для этого у каждого объекта в джаве есть соответствующий метод) и сравним их между собой. У кого хэш-код больше, тот и "больше" с точки зрения сортировки. А если меньше, то соответственно "меньше". Простота и красота, казалось бы... Побенчмаркали, потестили и влили.

А потом началось странное...
  • 👍 17
Post #277 2.81K
Немножечко новостей про firstBitMarksistskaya/onec-docker.

В основной бранч влито два важных изменения.

1) Поддержка загрузки и установки 8.3.20! Да, сейчас поставить двадцатку (или даже недавно вышедшую 21) автоматизировано - задача не из легких, и большинство загрузчиков будут давать 403 после пары попыток загрузки. Пока не знаю, что с этим делать, Андрей Крапивин для решения этой проблемы мучает Селениум, например. И страдает.

2) download.sh умер, да здравствует oneget! Старый скрипт скачивания платформы был заменен на новый модный и молодежный, написанный на Go. Oneget уже успел хорошо себя зарекомендовать, а теперь используется и в onec-docker для скачивания дистрибутивов платформы и EDT.

Обновляемся, не стесняемся, о багах репортим прямо в репозиторий - я открыл раздел Issues.
GitHub GitHub - firstBitMarksistskaya/onec-docker: Файлы для сборки образов Docker c платформой 1С:Предприятие 8.3. Файлы для сборки образов Docker c платформой 1С:Предприятие 8.3. - firstBitMarksistskaya/onec-docker
  • 🔥 24
  • 👍 9
Post #276 3.14K
Соскучились по стримам?

Я вот соскучился. Сам пока не могу провести, но зато стримы активно проводит Желтый Клуб!

В этот раз стрим будет про любимый мной OneScript с Артемом Кузнецовым (в кепке) в роли ведущего.

Залетай на огонек, сегодня в 19:00 по Москве!

Анонс: https://t.me/yellowclub_official/206

Трансляция: https://youtu.be/1qrw4om5kBw
Telegram Желтый клуб Завтра в 19 часов проведем стрим по теме OneScript. В гостях - Артем Кузнецов. Стрим подойдет тем, кто еще ничего на OneScript не писал. Обсудим следующие темы: ✅ зачем использовать OneScript ✅ какие библиотеки и приложения OneScript чаще используют ✅ с…
  • 👍 12
  • 🔥 10
  • 🤮 3
  • 👎 2
Post #271 4.01K
1. Общий дашборд. Да, база очень активно работает с фоновыми заданиями. А еще явно видна корреляция между временем работы пользователей и возрастанием количества блокировок и ошибок в ТЖ.
2. Сводная информация по вызовам сервера. Длительность, количество и много всяких графиков. Быстро видны особо жЫрные методы как по длительности, так и по памяти. Прокачать пару сотен гигабайт за пару часов в системе - почему бы и не да?
3. Ошибки-ошибочки любимые. Сгруппированные и с возможностью перейти в детальные записи тех журнала.
4. СКД-lIke поиск по тех журналу и журналу регистрации.
5. Долбанные утечки памяти, я вас победю Визуализация жизни рабочих процессов.

В Алькире есть еще куча прикольных плюшек - например, показ выполняемого фоновым заданием метода конфигурации (попробуйте-ка понять это из стандартной консоли администрирования). Или расшифровка и группировка методов, вызываемых через ДлительныеОперации.ВыполнитьВФоне.
Из таких мелочей и состоит хороший пользовательский опыт.
  • 👍 21
  • 🔥 7
  • 🤩 1
Post #270 3.18K
Про мониторинг и немного рекламы.

Мониторинг - штука сложная. Он еще и разный: железо, ось, приложение, бизнес-метрики... тысячи показателей с еще большим количеством зависимостей между ними. А уж есть мы говорим про мониторинг производительности...

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

Вероятно, вы слышали про ЦУП или Инструменты Разработчика от tormozit. В них есть хорошие моменты, есть и плохие. Для меня, например, скорость получения информации - один из важнейших параметров для систем мониторинга производительности. А с этим пунктом... ну... обычно не очень хорошо. А уж если надо скрестить два источника информации (например, ЖР и ТЖ), то становится невыносимо грустно. И конечно нельзя забывать про фатальный недостаток любого программного обеспечения!

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

И, кажется, сейчас мы готовы представить его широкой публике. Сколько еще можно проходить опытно-промышленную эксплуатацию, пора в бой. :)

Встречайте. Алькир.

https://digilabs.ru

Я не думаю, что мне стоит пересказывать красивые слова с сайта. Отмечу лишь, что Алькиром я пользуюсь сам, причем на своем основном проекте.

Да, продукт платный. Но владелец продукта обещал мне, что будет бесплатный облачный тариф с некоторыми ограничениями по функциональности. Но пока эту информацию не докатили до сайта. В любом случае, можно же написать и спросить, правда?

И конечно пара скриншотов с комментариями.

Обсуждалка: @alkir_ru
  • 👍 14
  • 🔥 4
  • ❤ 1
Post #269 2.61K
А ещё сегодня у меня "жёлтый юбилей" - ровно 10 лет со дня прихода в профессию 1сника.

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

А как начиналась ваша карьера?
  • 👍 50
  • 🎉 16
  • 🔥 5
  • 💩 1
Post #268 2.32K
Про силу опенсорса и коммьюнити.

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

https://habr.com/ru/company/dcmiran/blog/654643/

В ней автор довольно категорично, хоть и вполне обоснованно рассказывает про свою позицию, которую коротко можно сформулировать как: "Я сделал для себя и дал вам возможность это бесплатно использовать. Если вам что-то надо дополнительное - платите."

Вопросы поддержки авторов всегда довольно острые. Поддержка любого, даже самого маленького продукта на гитхабе - это труд, и порой очень большой. Одно дело на драйве выкатить на гитхаб оскриптовую библиотеку на 100 строк, написанную одной рукой в перерыве на обед, держа бутерброд во второй. Совсем другое - поддерживать проект уровня, например, OneScript (низкий поклон вам, ребята).

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

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

История из жизни.

Я являюсь фанатом Формулы 1. Смотрю квалификации и гонки, читаю технические разборы новинок в машинах, слежу за изменениями в регламенте и просто активно читаю новости по теме.

До самизнаетекакихсобытий в России официальными трансляциями F1 занимался "Матч" с голосом Алексея Попова (буквально из детства, он уже 30 лет её комментирует) и Натальи Фабричновой. Дуэт не без изъянов и ляпов, но милый сердцу и ушам.

Кто пытался смотреть трансляции на Матч ТВ/Матч Арене, наверное, знаком с их... Качеством.
Иногда пропадающим качеством картинки, звуком, плеером, в котором нельзя поставить трансляцию на паузу, а смотреть только live и конечно же пятью блоками рекламы (sigh).

И вроде бы уже привычно все: телевидение, рекламы, глючные плееры - если бы в 2022 году не отобрали права на трансляцию F1 в России целиком. Что по телевизору, что по формульным официальным приложениям.

К чему это привело? Конечно же к пиратству. Пиратство любого контента - это, на мой взгляд, плохо. При условии, что этот контент можно получить легально. А тут сложилась ситуация, что... Ну. Нельзя. :/

И тут сообщество показало свою силу. Силищу. Силуилищу!

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

Бесплатно. Без денег Газпрома. За спасибо и немного донатов.

Так в чем сила, брат? (с)

Сила в сообществе. Спасибо вам всем. Вы сильнее, чем вы думаете, даёте авторам продуктов больше, чем думаете, и что самое прекрасное - можете давать ещё больше.

<3
Хабр Нет, Open Source не означает «бесплатная поддержка» Год назад разработчик опенсорсной программы Raccoon APK Downloader заявил , что отныне приём баг-репортов — это часть платной поддержки . Идея обсуждается до сих пор и вызывает споры по понятным...
  • 🔥 35
  • 👍 22
  • 👏 4
  • 🤔 1
Post #264 2.68K
  • 🔥 16
  • 👍 3
Post #263 2.43K
Пока вся эта прелесть работает только в VSCode Insider с кастомной сборкой плагина Language 1C (BSL) plugin (приложу в комменты к посту) и кастомной же сборкой BSL Language Server в виде JAR-файла. Но разве это когда-нибудь останавливало настоящего самурая?

UPD: VSCode Insiders больше не требуется, обновляйте основные установки до версии 1.66

UPD: А теперь не нужна и отдельная сборка плагина - опубликован релиз 1.26.0
  • 🔥 15
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →