Хантинга пост.
Ко мне (прям совсем ко мне) на проект очень нужен толковый одинэсный разраб. Что-то вроде middle-to-senior (или выше) с учётом того, что требования к качеству у меня завышены :)
О чем проект: учётная/операционная система для допуска до работы всех врачей и фармацевтов страны, выпускающихся после 2016 года.
С сотнями тысяч людей в роли контингента и десятками тысяч пользователей в 1с, по всей стране.
Даже "Проект года" 1сный выиграли: https://eawards.1c.ru/projects/sozdanie-i-soprovozhdenie-informacionnoy-sistemy-obespecheniya-nepreryvnogo-medicinskogo-obrazovaniya-v-chasti-podsistemy-akkreditacii-83278/
Стек: самописка на базе свежайшей и регулярно обновляемой БСП (3.1.6 на текущий момент), веб-клиент, postgresql, СДО Moodle (php+js), часть собственных компонентов на php/java/typescript, RabbitMQ в роли брокера сообщений между внутренними компонентами, soap/http для интеграции с внешними федеральными медицинскими системами.
Всё это сдобрено вот этими нашими тестами на VA, дженкинсами, гитлабами, сонарами и прочими оскриптами с докером и кубернетисом. Ну и подсистемой мониторинга, конечно же.
Что делать: думать головой в первую очередь! :)
Под моим надзором и с технической постановкой задач пилить новую функциональность (опер учёт без бухгалтерии и прочей зарплаты), интеграции, делать тестики, исправлять найденные и вносить новые баги.
Территориально - Москва, м. Марксистская.
Удаленка возможна.
Юридически - Первый Бит.Москва.Марксисткая, бывшая Москва.Семеновская.
Писать мне или сразу нашей HR Дарье Тарасовой: @dashatarasova08
Ко мне (прям совсем ко мне) на проект очень нужен толковый одинэсный разраб. Что-то вроде middle-to-senior (или выше) с учётом того, что требования к качеству у меня завышены :)
О чем проект: учётная/операционная система для допуска до работы всех врачей и фармацевтов страны, выпускающихся после 2016 года.
С сотнями тысяч людей в роли контингента и десятками тысяч пользователей в 1с, по всей стране.
Даже "Проект года" 1сный выиграли: https://eawards.1c.ru/projects/sozdanie-i-soprovozhdenie-informacionnoy-sistemy-obespecheniya-nepreryvnogo-medicinskogo-obrazovaniya-v-chasti-podsistemy-akkreditacii-83278/
Стек: самописка на базе свежайшей и регулярно обновляемой БСП (3.1.6 на текущий момент), веб-клиент, postgresql, СДО Moodle (php+js), часть собственных компонентов на php/java/typescript, RabbitMQ в роли брокера сообщений между внутренними компонентами, soap/http для интеграции с внешними федеральными медицинскими системами.
Всё это сдобрено вот этими нашими тестами на VA, дженкинсами, гитлабами, сонарами и прочими оскриптами с докером и кубернетисом. Ну и подсистемой мониторинга, конечно же.
Что делать: думать головой в первую очередь! :)
Под моим надзором и с технической постановкой задач пилить новую функциональность (опер учёт без бухгалтерии и прочей зарплаты), интеграции, делать тестики, исправлять найденные и вносить новые баги.
Территориально - Москва, м. Марксистская.
Удаленка возможна.
Юридически - Первый Бит.Москва.Марксисткая, бывшая Москва.Семеновская.
Писать мне или сразу нашей HR Дарье Тарасовой: @dashatarasova08
eawards.1c.ru
Создание и сопровождение информационной системы обеспечения непрерывного медицинского образования в части подсистемы аккредитации
КРОК на следующей неделе проводит митап по ведению проектной деятельности:
https://promo.croc.ru/meetup07-04-22
Наверное, вы уже видели ссылку в паре других 1сных каналов, но хочу продублировать ее и тут.
Почему?
Во-первых, КРОК - это хорошо. Знаю, что некоторые не любят интеграторов, но у КРОКа действительно хорошая экспертиза в айтишке в целом, и вджаве 1с в частности.
Во-вторых, больше новых организаторов митапов - это очень хорошо! Больше общения, больше дележки опытом, новые идеи и мысли. Еще и бесплатно. Ништяк же.
Так что кому близка тема управления проектом/продуктом и кто знаком с ERP/УХ/ERP УХ - заглядывайте на огонёк к ребятам.
https://promo.croc.ru/meetup07-04-22
Наверное, вы уже видели ссылку в паре других 1сных каналов, но хочу продублировать ее и тут.
Почему?
Во-первых, КРОК - это хорошо. Знаю, что некоторые не любят интеграторов, но у КРОКа действительно хорошая экспертиза в айтишке в целом, и в
Во-вторых, больше новых организаторов митапов - это очень хорошо! Больше общения, больше дележки опытом, новые идеи и мысли. Еще и бесплатно. Ништяк же.
Так что кому близка тема управления проектом/продуктом и кто знаком с ERP/УХ/ERP УХ - заглядывайте на огонёк к ребятам.
Я часто повторяю фразу, уже ставшую моей внутренней мантрой: "BSL LS - это не только диагностики".
Да, все любят диагностики. Качественный код, ругань в сонаре/среде разработки, все прекрасно.
Но я чуть больше кайфую, когда удается добавить какую-то новую фичу вне ядра диагностик.
Какие-то вещи в Language Server Protocol сделаны очень хорошо и просто.
Например, запрос получения областей, которые можно свернуть
Дай области в таком-то документе? Держи области! Оттуда досюда комментарий, а оттеда доседа -
Какие-то вещи сделаны удивительно, например, уведомление о закрытии документа не означает, что документ был физически закрыт в редакторе. Или что он вообще был в нем открыт. Речь лишь про владение содержимым этого документа - должен ли сервер ждать данные от клиента или может зачитать их с диска по URI.
Ряд вещей сделан просто очень-очень странно, например, уведомление об обновлении конфигурации сервера. Казалось бы, штука нужная, но описана она настолько размыто и неспецифицировано с точки зрения IDE, что каждый редактор сам придумывает, как ему хранить у себя настройки сервера. Это приводит к тому, что при работе с одним и тем же сервером с двух разных IDE, сервер приходится настраивать по-разному. Благо, эту проблему мы решили на своей стороне, сделав единый конфигурационный файл, с которым может работать любая IDE, поддерживающая LSP. Дажене совсем IDE плагин для SonarQube может использовать этот файл для настройки правил в обход "Профиля Качества".
К чему я это все?
В готовящейся версии протокола под номером 3.17 завезли ряд новых и крайне интересных фич. И хотя в чейнджлоге протокола это еще не отражено, т.к. они пока в состоянии proposed, уже есть черновые реализации как для ядра сервера под typescript, откуда берет свое начало LSP, так и под java, на которой базируется BSL Language Server.
Например...
Сколько раз на дню при чтении кода вы думаете о том, что не помните, что за параметр такой пропущен в вызове функции, и какие у него значение по умолчанию? Не ошибся ли я, впаяв "Отказ" поле четвертой запятой? Или он должен быть предыдущим параметром? Где-то IDE поможет при наведении мышкой, где-то же надо будет проваливаться по F12... Вот было бы здорово видеть имена этих параметров сразу на ревью?
Не знаю как у вас, а у меня это - постоянная боль. Да, какие-то вызовы (привет ОбщегоНазначения.СообщитьПользователю) ты считываешь с экрана уже на автоматизме, но чуть в сторону и снова вопросычто за хе про параметры.
Если вы работали когда-нибудь в IntelliJ IDEA или каких-то других редакторах (попродвинутее конфигуратора), то наверное могли заметить штуку под названием inlay hint. Когда прямо в тексте программы IDE добавляет какую-то информацию. О типе переменной или о имени параметра...
Вот как раз такую штуку и добавили в LSP! Пара робких попыток завести это дело, и вот уже в 1сном коде я точно могу быть уверенным, что Отказ - это таки пятый параметр в СообщитьПользователю. А вот этот пропущенный параметр - это ПутьКДанным, и его сейчас заполнять не нужно - в него по умолчанию передастся пустая строка.
А еще на такую подсказку можно навести мышкой и посмотреть описание параметра!
Да, пока это счастье работает только с методами самой конфигурации, но и Москва не сразу строилась, и BSL LS когда-нибудь таки обзаведется контекстом платформы (sigh...).
Что еще можно сделать с такими подсказочками?
Некоторые пользователи жаловались, что в VSCode неудобно смотреть данные о когнитивной/цикломатической сложностях. Да, сложность метода - 3861, но где именно зарыты эти плюсадины?
Нажимаем на линзу "Когнитивная сложность" над методом (хехе, привет, Саша!) и плюсадины и плюсдвадины рисуются прямо по коду. Согласитесь, это намного удобнее, чем глазами вычитывать длинное сообщение из сообщения от диагностики.
Да, все любят диагностики. Качественный код, ругань в сонаре/среде разработки, все прекрасно.
Но я чуть больше кайфую, когда удается добавить какую-то новую фичу вне ядра диагностик.
Какие-то вещи в Language Server Protocol сделаны очень хорошо и просто.
Например, запрос получения областей, которые можно свернуть
Дай области в таком-то документе? Держи области! Оттуда досюда комментарий, а оттеда доседа -
#Область
. Красота. Немного прикинуть мозгами, и вот сворачиваются уже не только Если/КонецЕсли, но и пакеты запросов.Какие-то вещи сделаны удивительно, например, уведомление о закрытии документа не означает, что документ был физически закрыт в редакторе. Или что он вообще был в нем открыт. Речь лишь про владение содержимым этого документа - должен ли сервер ждать данные от клиента или может зачитать их с диска по URI.
Ряд вещей сделан просто очень-очень странно, например, уведомление об обновлении конфигурации сервера. Казалось бы, штука нужная, но описана она настолько размыто и неспецифицировано с точки зрения IDE, что каждый редактор сам придумывает, как ему хранить у себя настройки сервера. Это приводит к тому, что при работе с одним и тем же сервером с двух разных IDE, сервер приходится настраивать по-разному. Благо, эту проблему мы решили на своей стороне, сделав единый конфигурационный файл, с которым может работать любая IDE, поддерживающая LSP. Даже
К чему я это все?
В готовящейся версии протокола под номером 3.17 завезли ряд новых и крайне интересных фич. И хотя в чейнджлоге протокола это еще не отражено, т.к. они пока в состоянии proposed, уже есть черновые реализации как для ядра сервера под typescript, откуда берет свое начало LSP, так и под java, на которой базируется BSL Language Server.
Например...
Сколько раз на дню при чтении кода вы думаете о том, что не помните, что за параметр такой пропущен в вызове функции, и какие у него значение по умолчанию? Не ошибся ли я, впаяв "Отказ" поле четвертой запятой? Или он должен быть предыдущим параметром? Где-то IDE поможет при наведении мышкой, где-то же надо будет проваливаться по F12... Вот было бы здорово видеть имена этих параметров сразу на ревью?
Не знаю как у вас, а у меня это - постоянная боль. Да, какие-то вызовы (привет ОбщегоНазначения.СообщитьПользователю) ты считываешь с экрана уже на автоматизме, но чуть в сторону и снова вопросы
Если вы работали когда-нибудь в IntelliJ IDEA или каких-то других редакторах (попродвинутее конфигуратора), то наверное могли заметить штуку под названием inlay hint. Когда прямо в тексте программы IDE добавляет какую-то информацию. О типе переменной или о имени параметра...
Вот как раз такую штуку и добавили в LSP! Пара робких попыток завести это дело, и вот уже в 1сном коде я точно могу быть уверенным, что Отказ - это таки пятый параметр в СообщитьПользователю. А вот этот пропущенный параметр - это ПутьКДанным, и его сейчас заполнять не нужно - в него по умолчанию передастся пустая строка.
А еще на такую подсказку можно навести мышкой и посмотреть описание параметра!
Да, пока это счастье работает только с методами самой конфигурации, но и Москва не сразу строилась, и BSL LS когда-нибудь таки обзаведется контекстом платформы (sigh...).
Что еще можно сделать с такими подсказочками?
Некоторые пользователи жаловались, что в VSCode неудобно смотреть данные о когнитивной/цикломатической сложностях. Да, сложность метода - 3861, но где именно зарыты эти плюсадины?
Нажимаем на линзу "Когнитивная сложность" над методом (хехе, привет, Саша!) и плюсадины и плюсдвадины рисуются прямо по коду. Согласитесь, это намного удобнее, чем глазами вычитывать длинное сообщение из сообщения от диагностики.
microsoft.github.io
Specification
This document describes the 3.17.x version of the language server protocol. An implementation for node of the 3.17.x version of the protocol can be found here.
Пока вся эта прелесть работает только в VSCode Insider с кастомной сборкой плагина Language 1C (BSL) plugin (приложу в комменты к посту) и кастомной же сборкой BSL Language Server в виде JAR-файла. Но разве это когда-нибудь останавливало настоящего самурая?
UPD: VSCode Insiders больше не требуется, обновляйте основные установки до версии 1.66
UPD: А теперь не нужна и отдельная сборка плагина - опубликован релиз 1.26.0
UPD: VSCode Insiders больше не требуется, обновляйте основные установки до версии 1.66
UPD: А теперь не нужна и отдельная сборка плагина - опубликован релиз 1.26.0
Про силу опенсорса и коммьюнити.
Недавно по чатам разлетелась статья-перевод с хабра про то, что опенсорс не означает бесплатную поддержку:
https://habr.com/ru/company/dcmiran/blog/654643/
В ней автор довольно категорично, хоть и вполне обоснованно рассказывает про свою позицию, которую коротко можно сформулировать как: "Я сделал для себя и дал вам возможность это бесплатно использовать. Если вам что-то надо дополнительное - платите."
Вопросы поддержки авторов всегда довольно острые. Поддержка любого, даже самого маленького продукта на гитхабе - это труд, и порой очень большой. Одно дело на драйве выкатить на гитхаб оскриптовую библиотеку на 100 строк, написанную одной рукой в перерыве на обед, держа бутерброд во второй. Совсем другое - поддерживать проект уровня, например, OneScript (низкий поклон вам, ребята).
И тут сообщество вокруг продукта или экосистемы может сыграть огромную роль. Словами поддержки, баг репортами с описаниями, а не наездами, пулл реквестами, организацией чего-нибудь в конце концов. Ну и конечно донатами.
Особенно приятно, когда опенсорсный (и часто бесплатный) продукт или свободное сообщество работает лучше, чем продукты больших корпораций.
История из жизни.
Я являюсь фанатом Формулы 1. Смотрю квалификации и гонки, читаю технические разборы новинок в машинах, слежу за изменениями в регламенте и просто активно читаю новости по теме.
До самизнаетекакихсобытий в России официальными трансляциями F1 занимался "Матч" с голосом Алексея Попова (буквально из детства, он уже 30 лет её комментирует) и Натальи Фабричновой. Дуэт не без изъянов и ляпов, но милый сердцу и ушам.
Кто пытался смотреть трансляции на Матч ТВ/Матч Арене, наверное, знаком с их... Качеством.
Иногда пропадающим качеством картинки, звуком, плеером, в котором нельзя поставить трансляцию на паузу, а смотреть только live и конечно же пятью блоками рекламы (sigh).
И вроде бы уже привычно все: телевидение, рекламы, глючные плееры - если бы в 2022 году не отобрали права на трансляцию F1 в России целиком. Что по телевизору, что по формульным официальным приложениям.
К чему это привело? Конечно же к пиратству. Пиратство любого контента - это, на мой взгляд, плохо. При условии, что этот контент можно получить легально. А тут сложилась ситуация, что... Ну. Нельзя. :/
И тут сообщество показало свою силу. Силищу. Силуилищу!
Выходцы из интернета на добровольных началах начали рестримить трансляции на различных сервисах, доступных в России. Но это только "пол беды". Попов и Фабричнова, которые не могут больше комментировать Формулу из комментаторских кабин и/или прямо с трассы, устроили "обсуждение" квалификации и гонки из квартиры (?) Алексея. Без видео потока гонки, только говорящие головы и голоса.
Ну а те же ребята, что на добровольных началах начали ретрансляцию F1TV, начали в режиме реального времени сводить звук от Попова и Фабричновой с видеопотоком (интершумом) с самой трансляции. Да, прям ставят на паузу то один поток, то другой, синхронизируясь по воскликам Алексея или прорывающимся радио переговорам гонщиков.
И все это в плеере с нормальной паузой и перемоткой назад (ура) и мгновенной выкладкой трансляции и записи. И даже бережным отношением к тем, кто ещё не посмотрел - со скрытием результатов под спойлер на первые несколько часов после трансляции.
Бесплатно. Без денег Газпрома. За спасибо и немного донатов.
Так в чем сила, брат? (с)
Сила в сообществе. Спасибо вам всем. Вы сильнее, чем вы думаете, даёте авторам продуктов больше, чем думаете, и что самое прекрасное - можете давать ещё больше.
<3
Недавно по чатам разлетелась статья-перевод с хабра про то, что опенсорс не означает бесплатную поддержку:
https://habr.com/ru/company/dcmiran/blog/654643/
В ней автор довольно категорично, хоть и вполне обоснованно рассказывает про свою позицию, которую коротко можно сформулировать как: "Я сделал для себя и дал вам возможность это бесплатно использовать. Если вам что-то надо дополнительное - платите."
Вопросы поддержки авторов всегда довольно острые. Поддержка любого, даже самого маленького продукта на гитхабе - это труд, и порой очень большой. Одно дело на драйве выкатить на гитхаб оскриптовую библиотеку на 100 строк, написанную одной рукой в перерыве на обед, держа бутерброд во второй. Совсем другое - поддерживать проект уровня, например, OneScript (низкий поклон вам, ребята).
И тут сообщество вокруг продукта или экосистемы может сыграть огромную роль. Словами поддержки, баг репортами с описаниями, а не наездами, пулл реквестами, организацией чего-нибудь в конце концов. Ну и конечно донатами.
Особенно приятно, когда опенсорсный (и часто бесплатный) продукт или свободное сообщество работает лучше, чем продукты больших корпораций.
История из жизни.
Я являюсь фанатом Формулы 1. Смотрю квалификации и гонки, читаю технические разборы новинок в машинах, слежу за изменениями в регламенте и просто активно читаю новости по теме.
До самизнаетекакихсобытий в России официальными трансляциями F1 занимался "Матч" с голосом Алексея Попова (буквально из детства, он уже 30 лет её комментирует) и Натальи Фабричновой. Дуэт не без изъянов и ляпов, но милый сердцу и ушам.
Кто пытался смотреть трансляции на Матч ТВ/Матч Арене, наверное, знаком с их... Качеством.
Иногда пропадающим качеством картинки, звуком, плеером, в котором нельзя поставить трансляцию на паузу, а смотреть только live и конечно же пятью блоками рекламы (sigh).
И вроде бы уже привычно все: телевидение, рекламы, глючные плееры - если бы в 2022 году не отобрали права на трансляцию F1 в России целиком. Что по телевизору, что по формульным официальным приложениям.
К чему это привело? Конечно же к пиратству. Пиратство любого контента - это, на мой взгляд, плохо. При условии, что этот контент можно получить легально. А тут сложилась ситуация, что... Ну. Нельзя. :/
И тут сообщество показало свою силу. Силищу. Силуилищу!
Выходцы из интернета на добровольных началах начали рестримить трансляции на различных сервисах, доступных в России. Но это только "пол беды". Попов и Фабричнова, которые не могут больше комментировать Формулу из комментаторских кабин и/или прямо с трассы, устроили "обсуждение" квалификации и гонки из квартиры (?) Алексея. Без видео потока гонки, только говорящие головы и голоса.
Ну а те же ребята, что на добровольных началах начали ретрансляцию F1TV, начали в режиме реального времени сводить звук от Попова и Фабричновой с видеопотоком (интершумом) с самой трансляции. Да, прям ставят на паузу то один поток, то другой, синхронизируясь по воскликам Алексея или прорывающимся радио переговорам гонщиков.
И все это в плеере с нормальной паузой и перемоткой назад (ура) и мгновенной выкладкой трансляции и записи. И даже бережным отношением к тем, кто ещё не посмотрел - со скрытием результатов под спойлер на первые несколько часов после трансляции.
Бесплатно. Без денег Газпрома. За спасибо и немного донатов.
Так в чем сила, брат? (с)
Сила в сообществе. Спасибо вам всем. Вы сильнее, чем вы думаете, даёте авторам продуктов больше, чем думаете, и что самое прекрасное - можете давать ещё больше.
<3
Хабр
Нет, Open Source не означает «бесплатная поддержка»
Год назад разработчик опенсорсной программы Raccoon APK Downloader заявил , что отныне приём баг-репортов — это часть платной поддержки . Идея обсуждается до сих пор и вызывает споры по понятным...
А ещё сегодня у меня "жёлтый юбилей" - ровно 10 лет со дня прихода в профессию 1сника.
Мой старт в карьеру был случаен - придя на вакансию менеджера по продажам, я попал на позицию стажёра-программиста.
А как начиналась ваша карьера?
Мой старт в карьеру был случаен - придя на вакансию менеджера по продажам, я попал на позицию стажёра-программиста.
А как начиналась ваша карьера?
Про мониторинг и немного рекламы.
Мониторинг - штука сложная. Он еще и разный: железо, ось, приложение, бизнес-метрики... тысячи показателей с еще большим количеством зависимостей между ними. А уж есть мы говорим про мониторинг производительности...
1С тоже штука сложная. Недаром же есть "эксперты по технологическим вопросам", которые днями и ночами курят технологический журнал в попытках найти ответ на вопрос какой же запрос положил базу и почему именно сейчас. Есть умные люди, умные книжки и пара известных систем разбора этого тех журнала.
Вероятно, вы слышали про ЦУП или Инструменты Разработчика от tormozit. В них есть хорошие моменты, есть и плохие. Для меня, например, скорость получения информации - один из важнейших параметров для систем мониторинга производительности. А с этим пунктом... ну... обычно не очень хорошо. А уж если надо скрестить два источника информации (например, ЖР и ТЖ), то становится невыносимо грустно. И конечно нельзя забывать про фатальный недостаток любого программного обеспечения!
Так получилось, что уже почти год я участвую в разработке новой системы мониторинга производительности 1С. Выступаю в роли консультанта-методолога по вопросам разбора и интерпретации логов, рассказываю свои хотелки и даже разрабатываю один из компонентов этой системы.
И, кажется, сейчас мы готовы представить его широкой публике. Сколько еще можно проходить опытно-промышленную эксплуатацию, пора в бой. :)
Встречайте. Алькир.
https://digilabs.ru
Я не думаю, что мне стоит пересказывать красивые слова с сайта. Отмечу лишь, что Алькиром я пользуюсь сам, причем на своем основном проекте.
Да, продукт платный. Но владелец продукта обещал мне, что будет бесплатный облачный тариф с некоторыми ограничениями по функциональности. Но пока эту информацию не докатили до сайта. В любом случае, можно же написать и спросить, правда?
И конечно пара скриншотов с комментариями.
Обсуждалка: @alkir_ru
Мониторинг - штука сложная. Он еще и разный: железо, ось, приложение, бизнес-метрики... тысячи показателей с еще большим количеством зависимостей между ними. А уж есть мы говорим про мониторинг производительности...
1С тоже штука сложная. Недаром же есть "эксперты по технологическим вопросам", которые днями и ночами курят технологический журнал в попытках найти ответ на вопрос какой же запрос положил базу и почему именно сейчас. Есть умные люди, умные книжки и пара известных систем разбора этого тех журнала.
Вероятно, вы слышали про ЦУП или Инструменты Разработчика от tormozit. В них есть хорошие моменты, есть и плохие. Для меня, например, скорость получения информации - один из важнейших параметров для систем мониторинга производительности. А с этим пунктом... ну... обычно не очень хорошо. А уж если надо скрестить два источника информации (например, ЖР и ТЖ), то становится невыносимо грустно. И конечно нельзя забывать про фатальный недостаток любого программного обеспечения!
Так получилось, что уже почти год я участвую в разработке новой системы мониторинга производительности 1С. Выступаю в роли консультанта-методолога по вопросам разбора и интерпретации логов, рассказываю свои хотелки и даже разрабатываю один из компонентов этой системы.
И, кажется, сейчас мы готовы представить его широкой публике. Сколько еще можно проходить опытно-промышленную эксплуатацию, пора в бой. :)
Встречайте. Алькир.
https://digilabs.ru
Я не думаю, что мне стоит пересказывать красивые слова с сайта. Отмечу лишь, что Алькиром я пользуюсь сам, причем на своем основном проекте.
Да, продукт платный. Но владелец продукта обещал мне, что будет бесплатный облачный тариф с некоторыми ограничениями по функциональности. Но пока эту информацию не докатили до сайта. В любом случае, можно же написать и спросить, правда?
И конечно пара скриншотов с комментариями.
Обсуждалка: @alkir_ru
1. Общий дашборд. Да, база очень активно работает с фоновыми заданиями. А еще явно видна корреляция между временем работы пользователей и возрастанием количества блокировок и ошибок в ТЖ.
2. Сводная информация по вызовам сервера. Длительность, количество и много всяких графиков. Быстро видны особо жЫрные методы как по длительности, так и по памяти. Прокачать пару сотен гигабайт за пару часов в системе - почему бы и не да?
3. Ошибки-ошибочки любимые. Сгруппированные и с возможностью перейти в детальные записи тех журнала.
4. СКД-lIke поиск по тех журналу и журналу регистрации.
5.Долбанные утечки памяти, я вас победю Визуализация жизни рабочих процессов.
В Алькире есть еще куча прикольных плюшек - например, показ выполняемого фоновым заданием метода конфигурации (попробуйте-ка понять это из стандартной консоли администрирования). Или расшифровка и группировка методов, вызываемых через ДлительныеОперации.ВыполнитьВФоне.
Из таких мелочей и состоит хороший пользовательский опыт.
2. Сводная информация по вызовам сервера. Длительность, количество и много всяких графиков. Быстро видны особо жЫрные методы как по длительности, так и по памяти. Прокачать пару сотен гигабайт за пару часов в системе - почему бы и не да?
3. Ошибки-ошибочки любимые. Сгруппированные и с возможностью перейти в детальные записи тех журнала.
4. СКД-lIke поиск по тех журналу и журналу регистрации.
5.
В Алькире есть еще куча прикольных плюшек - например, показ выполняемого фоновым заданием метода конфигурации (попробуйте-ка понять это из стандартной консоли администрирования). Или расшифровка и группировка методов, вызываемых через ДлительныеОперации.ВыполнитьВФоне.
Из таких мелочей и состоит хороший пользовательский опыт.
Соскучились по стримам?
Я вот соскучился. Сам пока не могу провести, но зато стримы активно проводит Желтый Клуб!
В этот раз стрим будет про любимый мной OneScript с Артемом Кузнецовым (в кепке) в роли ведущего.
Залетай на огонек, сегодня в 19:00 по Москве!
Анонс: https://t.me/yellowclub_official/206
Трансляция: https://youtu.be/1qrw4om5kBw
Я вот соскучился. Сам пока не могу провести, но зато стримы активно проводит Желтый Клуб!
В этот раз стрим будет про любимый мной OneScript с Артемом Кузнецовым (в кепке) в роли ведущего.
Залетай на огонек, сегодня в 19:00 по Москве!
Анонс: https://t.me/yellowclub_official/206
Трансляция: https://youtu.be/1qrw4om5kBw
Telegram
Желтый клуб
Завтра в 19 часов проведем стрим по теме OneScript. В гостях - Артем Кузнецов.
Стрим подойдет тем, кто еще ничего на OneScript не писал.
Обсудим следующие темы:
✅ зачем использовать OneScript
✅ какие библиотеки и приложения OneScript чаще используют
✅ с…
Стрим подойдет тем, кто еще ничего на OneScript не писал.
Обсудим следующие темы:
✅ зачем использовать OneScript
✅ какие библиотеки и приложения OneScript чаще используют
✅ с…
Немножечко новостей про firstBitMarksistskaya/onec-docker.
В основной бранч влито два важных изменения.
1) Поддержка загрузки и установки 8.3.20! Да, сейчас поставить двадцатку (или даже недавно вышедшую 21) автоматизировано - задача не из легких, и большинство загрузчиков будут давать 403 после пары попыток загрузки. Пока не знаю, что с этим делать, Андрей Крапивин для решения этой проблемы мучает Селениум, например.И страдает.
2) download.sh умер, да здравствует oneget! Старый скрипт скачивания платформы был заменен на новый модный и молодежный, написанный на Go. Oneget уже успел хорошо себя зарекомендовать, а теперь используется и в onec-docker для скачивания дистрибутивов платформы и EDT.
Обновляемся, не стесняемся, о багах репортим прямо в репозиторий - я открыл раздел Issues.
В основной бранч влито два важных изменения.
1) Поддержка загрузки и установки 8.3.20! Да, сейчас поставить двадцатку (или даже недавно вышедшую 21) автоматизировано - задача не из легких, и большинство загрузчиков будут давать 403 после пары попыток загрузки. Пока не знаю, что с этим делать, Андрей Крапивин для решения этой проблемы мучает Селениум, например.
Обновляемся, не стесняемся, о багах репортим прямо в репозиторий - я открыл раздел Issues.
GitHub
GitHub - firstBitMarksistskaya/onec-docker: Файлы для сборки образов Docker c платформой 1С:Предприятие 8.3.
Файлы для сборки образов Docker c платформой 1С:Предприятие 8.3. - firstBitMarksistskaya/onec-docker
История одного контракта.
Поотнимаю немного хлеб у Лягуха и напишу пост про джаву.
Я люблю джаву. За её строгость, за типизацию, за ООП, за огромное количество готовых разработок и за богатую стандартную библиотеку.
В частности джава славится своими коллекциями и интерфейсами (читай контрактами).
Коллекции тут на любой вкус. Есть списки (листы), карты (мапы), множества (сеты), очереди (деки) и стеки. Каждый тип коллекции имеет несколько реализаций. Например, лист может быть реализован на базе нерасширяемого массива, или, например, на основе связного списка. Часть реализаций потокобезопасные, а часть могут подкинуть приколы в мнргопоточке :)
С интерфейсами такая же ситуация, их ооочень много. Часть интерфейсов обрабатывается самой 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.
Над реализацией метода сравнения я думал примерно ХеракХеракИГотово - если объекты равны между собой, значит они равны и по порядку. А если не равны, возьмём их хэш-код (для этого у каждого объекта в джаве есть соответствующий метод) и сравним их между собой. У кого хэш-код больше, тот и "больше" с точки зрения сортировки. А если меньше, то соответственно "меньше". Простота и красота, казалось бы... Побенчмаркали, потестили и влили.
А потом началось странное...
Поотнимаю немного хлеб у Лягуха и напишу пост про джаву.
Я люблю джаву. За её строгость, за типизацию, за ООП, за огромное количество готовых разработок и за богатую стандартную библиотеку.
В частности джава славится своими коллекциями и интерфейсами (читай контрактами).
Коллекции тут на любой вкус. Есть списки (листы), карты (мапы), множества (сеты), очереди (деки) и стеки. Каждый тип коллекции имеет несколько реализаций. Например, лист может быть реализован на базе нерасширяемого массива, или, например, на основе связного списка. Часть реализаций потокобезопасные, а часть могут подкинуть приколы в мнргопоточке :)
С интерфейсами такая же ситуация, их ооочень много. Часть интерфейсов обрабатывается самой JVM. Например, Serializable разрешает виртуальной машине применять к классу штатный механизм бинарной сериализации. А Iterable разрешает перебирать объект в цикле for each (для каждого) - круто же! Реализовали один метод и теперь объект можно циклом обходить.
Часть интерфейсов - прикладные.
Например, задача интерфейса Comparable - дать единый метод сравнения объектов одного класса. Сказать, что этот объект "больше", "меньше" или "равен" другому объекту именно в плане порядка/сортировки. Да даже List - это тоже интерфейс. Если писать код "правильно", опираясь на интерфейсы, то реализацию конкретного листа при необходимости можно менять безболезненно.
Какая может быть необходимость?
В грядущем (и долгожданном) релизе BSL Language Server под версией 0.20.0 появится важная фича - добавленный пару релизов назад механизм Reference Index, хранящий данные о вызове всех методов в коде и помогающий делать всякие "переход к определению", "поиск мест использования" и прочие всплывающие подсказки, научился хранить ещё и данные обо всех используемых переменных - где они были объявлены/им были присвоены значения и где к этим переменным было обращение. По всей кодовой базе.
Конечно же, это довольно сильно ударило по объёму занимаемой оперативной памяти. Если в релизе 0.19 данные индекса ПО вызовам методов в УХ занимали чуть меньше 100 мегабайт оперативной памяти, то загрузка в индекс всех данных об используемых переменных резко подняла этот показатель до почти 800 (!) мегабайт. Так как вопрос производительности работы с индексом не стоял (спасибо Эдуарду за несколько подходов к оптимизации), надо было попробовать снизить затраты памяти, пускай и жертвуя толикой производительности.
В качестве основного хранилища данных ссылок в индексе использовался ConcurrentHashMap - это почти как обычный HashMap, хранящий данные в хэш-таблице на основе, собственно, хэш-кода от ключа
Для переезда на эту мапу пришлось немного подправить код. В отличие от первоначального варианта эта мапа - отсортированная по ключам, а значит объекты нужно тоже сделать сортируемыми, то есть реализовать в них интерфейс Comparable.
Над реализацией метода сравнения я думал примерно ХеракХеракИГотово - если объекты равны между собой, значит они равны и по порядку. А если не равны, возьмём их хэш-код (для этого у каждого объекта в джаве есть соответствующий метод) и сравним их между собой. У кого хэш-код больше, тот и "больше" с точки зрения сортировки. А если меньше, то соответственно "меньше". Простота и красота, казалось бы... Побенчмаркали, потестили и влили.
А потом началось странное...
Представьте примерно следующий код:
соответствие карту, затем получили значение по второму.
Пример утрированный, эти операции размазаны по коду, но смысл такой.
Так вот. Как думаете, что будет в переменной Значение? По идее двойка, да?
По идее да. Двойка. И так и было примерно в 99.9% случаев. А в 0.01% в Значении было... Неопределено.
НедоумевающийДжекиЧан.джпг
Что, почему, как? Херня эта ваша джава, да?
Как и в большинстве случаев в программировании проблема оказалась в программисте.
Интерфейсы часто помимо, собственно, сигнатуры метода, содержат еще некоторую договоренность или контракт, описанный в документации к интерфейсу. Например, в случае Comparable есть требование возвращать -1, 0 или 1 в качестве результата метода compareTo для значений "меньше", "равно" или "больше" в плане сравнения порядка/сортировки двух объектов. Или рекомендация возвращать 0, если объекты равны между собой по equals, что действительно звучит логично - равные объекты и упорядочиваться должны одинаково.
Но есть и еще одно требование - если А > Б, то обязательно должно выполняться Б < А. От перемены мест слагаемых и все такое прочее.
Душный Дотошный читатель мог обратить внимание, что моя на скорую руку написанная реализация compareTo сранивала хэш-коды на строгое больше и меньше и задаться вопросом: "А что будет, если хэш-коды у двух разных объектов будут одинаковыми? Это валидная ситуация?". И будет абсолютно прав в своей дотошности. Ситуация валидная, а я лопух, нарушивший контракт А > Б = Б < А
Т.к. метод сортировки применяется в ConcurrentSkipListMap для построения индекса, два объекта, которые при сравнении друг с другом с разных сторон давали разные ответы, приводили к ошибкам позиционирования в индексе. И вместо нахождения в индексе адреса нужного значения в дереве из двусвязных списков, индекс врезался в null.
Проблема решилась путем выкидывания наколеночной реализации compareTo и обычного сравнения по всем полям.
Можно было бы подумать, что это все жабо-проблемы, и в этом нашем 1С такого не может быть. Какие у нас интерфейсы, какие контракты?
А вот и нет. Есть у нас интерфейсы, и есть контракты. Не важно, какую библиотеку вы используете: Библиотеку стандартных подсистем с ее миллионом общих модулей и вязанкой "переопределяемых" методов, или, к примеру клевую библиотеку для сериализации SerLib1C от Артема Кузнецова (не реклама, честно, просто вспомнилось :) ) - автор может закладываться на какое-то ваше адекватное поведение в коде переопределяемых обработчиков. Хороший автор еще напишет об этом в документации.
Вот такое вам длиииииииинное субботнее чтиво.
Всем добра и RTFM!
Ключ = Новый Структура("Поле1, Поле2", "123", "456");
Карта.Вставить(Ключ, 1);
Ключ2 = Новый Структура("Поле1, Поле2", "789", "987");
Карта.Вставить(Ключ2, 2);
Значение = Карта.Получить(Ключ2);
Вроде ничего сложного, да? Сделали два ключа, положили по ним значение в Пример утрированный, эти операции размазаны по коду, но смысл такой.
Так вот. Как думаете, что будет в переменной Значение? По идее двойка, да?
По идее да. Двойка. И так и было примерно в 99.9% случаев. А в 0.01% в Значении было... Неопределено.
НедоумевающийДжекиЧан.джпг
Что, почему, как? Херня эта ваша джава, да?
Как и в большинстве случаев в программировании проблема оказалась в программисте.
Интерфейсы часто помимо, собственно, сигнатуры метода, содержат еще некоторую договоренность или контракт, описанный в документации к интерфейсу. Например, в случае Comparable есть требование возвращать -1, 0 или 1 в качестве результата метода compareTo для значений "меньше", "равно" или "больше" в плане сравнения порядка/сортировки двух объектов. Или рекомендация возвращать 0, если объекты равны между собой по equals, что действительно звучит логично - равные объекты и упорядочиваться должны одинаково.
Но есть и еще одно требование - если А > Б, то обязательно должно выполняться Б < А. От перемены мест слагаемых и все такое прочее.
Т.к. метод сортировки применяется в 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
Отладочные, закомментированные и ...
Общие
Ветка PR обновлена из develop
Отладочные, закомментированные и ...