Заметки
Позднее Ctrl + ↑
Из чего сделаны наши девчонки?
На фоне скандальной рекламы «Reebok» (я в этой теме полный мимокрокодил, но взрывная волна даже до меня докатилась) на ютубе попался классный ролик их конкурентов. Ему уже пара лет, но он ровно про то же и, блин! Реклама здорового человека — не знаю, как лучше выразиться.
Показал мелкой — смотрела глазами по пять копеек. Покажу ещё раз, когда опять будет батониться вместо тренировки :-)
9 февраля 2019 семья тем временем
Внезапный барабанщик
Я пишу на платформе 1С довольно давно и повидал некоторое дерьмо, но такое, честно говоря, вижу первый раз.
Поначалу я даже не понял, с какого конца это жевать. Поискал перевод иероглифа — Википедия лишь сухо сообщила, что это такой тип чашки, а Google Translate вообще развёл руками.
Коллега заметил, что символ отдаленно похож на складского сортировщика — мол, перекладывает что-то там себе между коробками. Не знаю, не знаю. По-моему, больше напоминает барабанщика за работой. Но что, черт побери, это значит? Может быть, 1С пытается что-то мне сказать? Что-то про музыку?
Может, мне нужно было стать басистом, а не вот это всё.
9 февраля 2019 1С
Удаление временных таблиц
Любопытная деталь: при закрытии менеджера временных таблиц не происходит удаления этих таблиц из tempdb. Актуально и для прямого вызова метода Закрыть() объекта менеджера, и для неявного варианта (когда объект менеджера уничтожается при завершении метода, в котором он был создан). На деле в обеих случаях выполняется только TRUNCATE, который удаляет данные таблицы; сама же таблица остаётся на случай, если пользователь снова выполнит запрос с таким же составом полей (это выгоднее, чем заново её создавать).
То же самое (удаление данных, но не самой таблицы) происходит при прямом вызове УНИЧТОЖИТЬ из текста запроса. К слову, эта команда вообще редко бывает осмыслена — разве что если объект менеджера живет сравнительно долго, а во временную таблицу помещён большой объем данных, от которого хочется побыстрее избавиться.
Что до удаления таблицы, то оно выполняется только при закрытии соединения с сервером приложений.
7 февраля 2019 1С
Конкатенация строк
Как и многие другие компании, мы даем соискателям тестовое задание. Оно намеренно несложное и нужно больше для того, чтобы посмотреть — насколько кандидат понимает платформу? Как аккуратно работает с объектами конфигурации и её кодом?
Одна из множества мелких штук, которые там проверяются — это формирование длинного сообщения для пользователя, включающее множество параметров. Разработчик может делать это через СтрШаблон() или СтрСоединить(), а может — через простую конкатенацию (соединение) строк. Если кандидат использует последний вариант — это считается небольшим минусом: для пользователя результат будет тот же, но вот понять из кода, как он будет примерно выглядеть — заметно сложнее.
Однако тут есть другой аспект. В первой половине прошлого года «Рарус» опубликовал отчет о работах, проделанных для «Билайна». Там много любопытного, но среди прочего есть совершенно оглушительный пункт: за счет отказа от соединения строк разработчики добились 40% снижения нагрузки на процессоры! От двух дополнительных серверов после этих изменений вообще отказались, так как они стали не нужны.
Проблема возникала из-за того, чтобы рабочие процессы тратили слишком много времени на распределение памяти для склейки строк. В случае однократного соединения заметной нагрузки не возникает, однако когда мы, например, собираем большой запрос в цикле и делаем это многократно — нагрузка растет лавинообразно. Конкатенацию в таких случаях использовать нельзя, правильный вариант — все те же СтрШаблон() или СтрСоединить(). На старых версиях платформы, где этих методов нет, можно применять объект текстового документа — добавлять в него строки, а потом получать текст.
Не скомпилированный код
Не очевидная штука: абстрактная внешняя обработка работает заметно медленнее точно такой же, но встроенной в конфигурацию или её расширение. Причина — её код нужно заново компилировать для каждого пользователя при каждом запуске (тогда как код встроенных обработок компилируется один раз и для всех). Судя по статье в базе знаний 1С, для платформы 8.3.10 это было прямо катастрофа, но и пятидесятипроцентный рост нагрузки на процессор в 8.3.13 — тоже, в общем, ничего хорошего.
Другой подход с тем же эффектом — это хранение кода внутри базы (в реквизитах служебных справочников, например). Каждый раз, когда такой код нужно запустить, он извлекается из БД и компилируется. Например, у нас в конфигурации можно создавать регламентные задания без изменения метаданных — просто добавляем элемент специального справочника, загружаем в него код и настраиваем расписание работы.
Это относительно нормально — регламентные задания обычно выполняются не слишком часто и компиляция, скорее всего, не создаст сколько-либо заметной нагрузки на процессор. Однако этот же справочник может использоваться и для автоматического вызова какого-либо кода после произвольного события: например, после сохранения документа определенного типа. В таких случаях, если есть понимание, что код будет выполняться постоянно и множеством пользователей — стоит перенести логику в метод общего модуля из расширения, а в самом хранимом коде оставить только вызов этой логики.
А ещё можно вообще отказаться от хранения кода и сделать весь механизм в виде расширения. Возможно, решение будет менее гибким, но все же это лучше, чем потом медитировать над низким APDEX'ом.
27 января 2019 1С
Поездка на Кок-Коль
Летом катался с друзьями на границу с Монголией (на машинах доехали до Ташанты, а оттуда — на велосипедах до Кок-Коля). Вымотались как проклятые, однако это того определенно стоило — виды с гор невероятно крутые! Одно жаль, животные попадались нечасто — даже чумных сусликов не встретили, хотя их нам каждый встречный анонсировал, включая погранцев :-)
6 января 2019 спорт
Знак амперсанда в 1С
При обработке символа амперсанда в тексте надписей платформа применяет стандартный подход Windows: то есть, сам амперсанд не отобразится, а следующий после него символ станет горячей клавишей для действия, закрепленного за надписью (например, обработчика команды или события элемента).
Пример ниже выведется как «Project Costing». Символ «P» в ней будет подчеркнут и станет горячей клавишей; если это, например, заголовок команды, то её можно будет вызвать, нажав Alt + P.
ТекстНадписи = "&Project Costing";
Единственное неудобство — если нужно вывести амперсанд прямо в надпись. В этом случае символ следует удвоить: так, пример ниже будет выглядеть как «Project P&L». Никаких горячих клавиш в таком случае создано не будет.
ТекстНадписи = "Project P&&L";
27 декабря 2018 1С
Как Valve в посудной лавке
Ребята из Valve продолжают заигрывать с поклонниками своих игр — то ли по привычке, то ли там и правда кто-то считает, что это отличный способ напоминать о себе.
Конечно, с этой компанией как разработчиком игр всё в целом понятно. Мало кто всерьёз ждет третий Half-Life или, скажем, продолжение Portal. Но меня каждый раз умиляет это непринужденное изящество слона в посудной лавке, с которым Valve работает со своей аудиторией.
10 декабря 2018 видеоигры
Эффект сноуборда
Летишь такой вниз по склону, в который раз пытаясь почувствовать точку равновесия и не полететь кубарем, но чувствуешь только отбитую задницу, а из головы не идет знаменитый спич Васа из третьего Far Cry.
Я уже говорил тебе, что такое безумие, а? Безумие — это точное повторение одного и того же действия. Раз за разом, в надежде на изменение. Это есть безумие.
― Ваас Монтенегро, Far Cry 3
Но вниз все равно приезжаешь невероятно довольный.
Магия какая-то.
1 декабря 2018 спорт
Ссылка нового объекта
Уникальный идентификатор — удобный критерий при сопоставлении объектов в разных конфигурациях. Например, когда нужно передавать инвойсы из одной базы в другую. Как второй базе понять, загружался полученный инвойс или нет? Первое, что приходит в голову — просто выполнить поиск объекта по его UUID:
ИнвойсЗагружен = Документы.Инвойс.ПолучитьСсылку(UUID).Пустая();
Однако иногда уникальный идентификатор используют для связи объектов в одной конфигурации. Например, если условия задачи мешают добавить обычный ссылочный реквизит и мы не можем в документе А прямо сослаться на документ Б. Или, скажем, если мы создаем элемент справочника на основании документа и хотим иметь между ними прямую связь — присваивая элементу справочника ссылку, полученную по уникальному идентификатору документа. Платформа гарантирует уникальность идентификатора в пределах таблицы, так что такие трюки вполне безопасны.
Я это к чему. Метод УстановитьСсылкуНового() в коде нужно использовать с осторожностью! Проверяйте, что ссылка ещё не установлена до выполнения вашего кода:
СсылкаЗадана = ПолучитьСсылкуНового().Пустая();
Если ссылка задана, то это надо как-то обработать — либо не заменять её вашей (если логика задачи позволяет), либо создать исключение. Иначе может возникнуть нарушение связности данных, которое будет непросто расследовать — да и вообще заметить.
Ну и, конечно, эта штука работает в обе стороны — я имею в виду, что установленную вами ссылку тоже может потереть какой-нибудь посторонний код (например, обработчик события объекта или подписка на него). Это надежно решается только тестированием.
29 ноября 2018 1С
Распределенный дизайн
Дизайнер из «Stack Overflow» написал о том, как они организуют удаленную работу. Понравилась структура текста — не просто «как мы это делаем», а прямо парами: проблема + решение.
У нас в компании почти вся разработка — удаленная и сам я — тоже удаленщик. Мне очень нравится так работать; главное тут — помнить, как легко нахватать самых неожиданных проблем, когда твое рабочее место и твой дом — одно и то же место. Советы из статьи пить воду и вылезать под солнце вполне себе актуальны, например — в ходе какого-нибудь кранча про это и правда легко забыть.
20 октября 2018 работа
Идеальное произношение
Примерно то же самое я услышал несколько лет назад от инженера Bloomberg'а — мы тогда писали для заказчика программу, автоматически следящую за курсами акций, и столкнулись с кучей проблем (для работы с финансовыми инструментами Bloomberg дает мощный, но довольно сложный API).
В конце концов дело дошло до диалога с техподдержкой, и после обмена несколькими сообщениями коллега предложил пообщаться голосом. Я здорово смутился и заметил, что, мол, так-то можно, но my English isn't fluent enough. На это собеседник лишь пожал плечами: мол, мы привыкли — английский используется повсеместно, и обратная сторона медали в том, что его везде крутят на свой лад. Так что правильное ударение — последнее, что его будет волновать, лишь бы была понятна мысль.
15 октября 2018 английский
Принцип не-осуждения
Хорошая заметка Максима Ильяхова про анализ чего-то такого, что вроде бы вас не касается, но почему-то невероятно раздражает. Напомнило американский принцип не-осуждения, про который я читал пару лет назад; тут немного другие формулировки, но суть — точно та же.
У нас этот подход, в общем, тоже есть — даже в фольклоре осел со знаменитым «не суди и не судим будешь». Жаль, что пока не так широко применяется.
2 сентября 2018 тем временем
СКД и право просмотра
Универсальный подход системы компоновки данных «если у пользователя нет права на просмотр чего-то, то этого как бы нет» иногда заставляет платформу выкидывать знатные фортели. Нет, сферический отчет в вакууме и правда работает хорошо — например, если нет права на просмотр какого-то справочника, то в отчете он фигурировать не будет. Однако реальные примеры бывают посложнее.
Например, пару недель назад я отлаживал отчет, который при попытке генерации выдавал понятную на первый взгляд ошибку:
Отчет гигантский — запрос на добрую тысячу строк, сложная настройка, здоровенный макет, запутанный код компоновки. Первое подозрение пало на ошибку в настройке, но расследование быстро дошло от ссылки на валюту в выборке данных до чтения константы с этой валютой на самом нижнем уровне отчета, на которую не было права просмотра.
Не скажу сходу, что именно тут сбило платформу с толку и привело к не очевидной диагностике — то ли манипуляции с временной таблицей, куда эта константа была прочитана, то ли то, что читалась она в конструкции ВЫБОР, то ли то, что на сам справочник валют все необходимые права были. Искать конкретное условие или их сочетания я не стал — думаю, это просто специфика реализации движка СКД, которая может меняться от версии к версии. Достаточно не забывать о праве просмотра, и проблемы не будет.
Что касается ошибки, при столкновении с ней стоит вывести проблемный отчет под полными правами. Если тут всё о'кей, нужно набросать список таблиц, откуда отчет читает данные, и проверить — все ли они с правами на чтение и просмотр.
Нудно, но может сэкономить прилично времени.
Беги от дочери морей
Наталья О'Шей озвучила русский ролик для грядущего обновления World of Warcraft. У неё круто получаются такие образы — умеет и настроение создать, и стали в голос припустить.
Вообще, если говорить о ней и «Мельнице» в целом — самые сильные песни у них именно те, где речь о чем-то конкретном. Были весной на концерте в честь выхода «Люциферазы» — прямо небо и земля; то ли мне не хватало знания контекста, то ли многие тексты и правда были здорово абстрактными, не знаю. Но в итоге местами было трудно понять, о чем песня, и настроение порядком сбивалось.
А тут даже знать особо ничего не нужно. Я в WoW не играл и не буду, но от финальных интонаций морозом по коже все равно отдает :-)
29 июля 2018 видеоигры
Печать ГПиМРМ
Возможно, вы уже слышали про то, что русский перевод «Методов рационального мышления» Элиезера Юдковского пошел в некоммерческую печать (спасибо «Эволюции» и другим инфопартнерам), но на всякий случай напомню ещё раз.
Книжка и правда хороша, я про неё уже писал пару лет назад. Учит правильным штукам и в такой форме, что не оторваться. Текст есть в свободном доступе, но если вы вдруг хотите бумажную копию — прием заявок еще идет.
22 июля 2018 книги
Результаты FCE
Кембридж прислал результаты июньских экзаменов. И — вступают трубы — FCE я сдал! Судя по баллам, ухитрился в чём-то налажать во время письменной части, зато неплохо отыгрался во время разговорной. Жаль, что экзаменаторы не дают более подробных комментариев; впрочем, и так понятно, куда дальше воевать :) Преподаватель заметила, что раньше вообще сообщали только итоговый балл — мол, понимайте как хотите, уважаемые претенденты.
В общем, в следующем году перевешу планку повыше — видимо, нужно готовиться к CAE.
По этому поводу вспомнился Фейнман со своей знаменитой «Вы, конечно, шутите». Среди прочего он рассказывал, как во время жизни в Бразилии учился играть на фригидейре и доучился до того, что его стали ставить в пример местным музыкантам:
Я думаю, это напоминает ситуацию, когда человек, который говорит по-французски, приезжает в Америку. Сначала он делает все ошибки, которые можно сделать, и понимать его очень сложно. Но он непрерывно занимается, до тех пор пока не начинает говорить довольно хорошо, и манера речи этого человека начинает доставлять вам истинное удовольствие: у него очень милый акцент, и его приятно слушать.
― Ричард Фейнман
Между «все ошибки» и «приятно слушать» непринужденно опущено целое море труда, но в целом этот синопсис мне нравится. Работаем куда-то туда!
15 июля 2018 книги готово английский
Kona
У игры есть сильные стороны, которые честно старались удержать мое внимание: тут есть где погулять, что почитать, о чем подумать и на что посмотреть. Если вы цените это в играх — возможно, вам понравится. От прогулок и размышлений почти ничего не отвлекает — умереть от чего бы то ни было тут довольно сложно. Ровно как и заблудиться — у главного героя есть карта и автомобиль, а позже можно раздобыть ещё и снегоход.
Но сюжет меня здорово расстроил. Интригующая детективная завязка, не успев обрасти деталями, тает в воздухе и уступает место откровенной мистике. Всё бы ничего, но вместе с этим исчезает всякая интрига — зачем искать улики, строить догадки, вообще о чём-то волноваться? Необъяснимые видения из ниоткуда расскажут и покажут всё, что и как тут было, и вот ты уже невольно заражаешься меланхоличным отношением героя к паранормальщине вокруг.
При этом мистическая сторона сюжета сама по себе зияет здоровенными дырами. Да, картина трагедии ближе к концу становится более или менее понятна — но даже последнее, самое полное видение само по себе рождает целую кучу вопросов, на которые никто не трудится отвечать. Сюжет в этой игре вообще здорово напоминает её же карту — выглядит цельным, но по факту доступна от силы половина, а остальное скомкано под отчетливо читаемое «ну, потому что магия, магия такая, понимаете?».
Нет, блин, не понимаю.
29 мая 2018 видеоигры
Сообщение пользователю
В 1С:Предприятии есть удобный метод вывода сообщений — объект СообщениеПользователю. Он выводит их в нижней части формы и это, внезапно, потенциальная проблема: дело в том, что большинство пользователей туда не смотрит. Мол, если никаких явных ошибок на экране нет — беспокоиться не о чем.
Поэтому в случае, когда происходит сбой или просто нужно донести какую-то критично важную информацию, сообщение нужно выводить в диалоговом окне — например, через методы ПоказатьВопрос() или ПоказатьПредупреждение(). В противном случае пользователь может не обратить внимания на проблему и продолжить работу — несмотря на то, что какое-то действие не было выполнено или было выполнено не так. Впоследствии это станет явным и в проблеме (справедливо) обвинят вас.
До кучи можно вспомнить небольшие служебные формы: в них СообщениеПользователю вообще противопоказано. Да, на маленьком полотне сложнее не заметить всплывший внизу текст, однако тут дело в другом — одно-два сообщения буквально пожирают рабочее пространство формы и работать с ней становится неудобно.
30 апреля 2018 1С
Эти мерзкие смартфоны
Художник — Адам Эллис.
По-моему, это отличная иллюстрация к вечному стону «чего они все таращатся в телефоны, бла-бла-бла». Причина проста, как три копейки — у людей в телефоне их друзья и подружки, книжки и подкасты, игры и ютуб. Всё это куда интереснее, чем, скажем, хмурый дядька или мрачная тётка с синдромом гуру.
То же касается и детей. Соцсети набиты спорами по этому поводу, как бочка селедкой, однако причина проблемы остаётся точно такой же: если подросток при виде вас утыкается в телефон, ему с вами попросту не интересно и проблема, очевидно, в вас самих.
31 марта 2018 тем временем
Ранее Ctrl + ↓