понедельник, 28 ноября 2022 г.

Zabbix как мы заббикс переодевали

Неожиданно захотелось воспользоваться новым функционалом Zabbix, но как выяснилось обновить 4.4 до 6.2 не так просто. Для начала надо обновить операционную систему (у нас Ubuntu 16.04LTS), потом обновить сервер Zabbix. Попытка сделать это наскоком 16.04 = > 22.04 и 4.4 = > 6.2 провалилась и мы потеряли на этом около 7 часов. На самом деле это была вторая попытка, первая провалилась на этапе обновления операционной системы...

Но сразу спойлер - не пытайтесь обновлять по описанному ниже способу, потому что обновление провалилось. Я оставляю эту запись по двум причинам:

  1. кладезь ошибок и решений
  2. потрачено очень много времени на данную операцию, суммарно вышло более 4х суток, плюс фиксация здесь

воскресенье, 27 ноября 2022 г.

 За 6000 тенге (меньше 1000 рублей) мне поменяли колеса (с установкой резины на диски). В Питере с меня за это брали от 1500 и выше. 

Кто-то как-то сказал, что нормальный объем багажника должен вмещать в себя комплект резины для этой машины

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


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


Дальше придирка к переводу, суффикс "ш"/"их" (докторша, врачиха, кассирша и пр) в современном значении женщина указанной профессии, но оно прямо смердит уничижительной формой, принижая представителя профессии до третьесортного разряда! Если исходить из того, что запись была подтверждена по почте, то отношения между врачом и пациентом не холодные, а значит применение "врачиха" неприемлемо.

Гийом Мюссо Сентрал парк

Это попытка реабилитировать автора после провала с "Девушка из Бруклина", тем более, что я уже давно в план поставил 4 произведения данного автора...

суббота, 26 ноября 2022 г.

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

Собственно, как по мне, не очень удачная сказка...

Быть может это наказание за то, что я не сторонник прочтения краткого описания книги...

Владелец крови в комаре был занесен в базу в 2002 году, почему прогон по базе в 2005 не выявил ничего?

 Понятно для чего скрытие того, что ты жертва...

 Мда, водить мы не умеем, но машину с места сдвинули, ладно, но как, черт побери, она включила задний ход!?!??

Это напоминает мою жалкую попытку написать что то типа того же

пятница, 25 ноября 2022 г.


Сегодня махнул до Каракалпакстана с визарана целью (504 км туда и 504 км обратно). Я даже встал в 5.20, и выехал в 6.09

Выехал я с кабелем USB-C to USB-C для телефона, телефон заряжен на половину, и тут я понимаю, что воткнуть зарядку некуда! А телефон жрет как не в себя. Пришлось отключить все лишнее, потом аудиокнигу, потом и вовсе все отключить. На первой и второй заправке я забыл купить кабель. Целый час ехал в тишине без навигатора. И вот спустя 400 км я купил таки кабель, но до границы 90 км и телефон успел зарядится только до 20%. Останавливался (кроме заправок) один раз - 25 минут спал и снова в путь.


Вид не меняется



А вот холмик напомнил мне узбекскую халву

Пограничников забавило мое имя, из 6 человек четверо или пятеро переспрашивали и смаковали его. Без втыкания в телефон было сложновато. В общем прошел без проблем, правда дистанция это не про Казахстан или Узбекистан!

На территории Каракалпакстана решил перекусить, ибо уже 10 часов без еды. Зашел в ближайшее кафе и за 2600 тенге мне дали тушеную говядину с половинкой лука репчатого, чаем и хлебом. мясо пересолено, но обожрался еще на 10 часов. 

Обратно проехал без остановок на сон, чет не клонило. Зато водители бесили страшно. Я еду 70 (по спидометру, факт около 65), потому что ограничение 70, какой-то чудак на букву м прижимается, моргает фарами и под знак "обгон запрещен" обгоняет! Тут заканчивается ограничение скорости и запрет обгона, а он все равно тащится 75! Я смотрю воткнуть запрещенную оптику (в РФ такие запрещены), прижаться, слепить и моргать (читай - добивать) вместо обгона с поворотником и дистанцией, тут в порядке вещей. Я еще на выезде из города отметил одного чудака, который прижался и требовал его пропустить, чтобы через 300 метров повернуть направо. 

Прибыл в 22.55

У автора явно проблемы с нитью

Почему Марк и Рафаэль не задались вопросом - как Анна попала на этот склад? Если бы человек имел ключи, он бы не выламывал дверь напролом.

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

Почему все это всплыло спустя столько времени?

Почему Анна пыталась скрыться, она что то знала!

  Опять детектив!

Ох, как интересно, а можно мне тоже плинтус, за которым можно спрятать почти поллимона евро средними купюрами!

 "распорядок дня определяла работа..."

Гийом Мюссо - Девушка из Бруклина

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

- Ну и ведьма ты!

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

понедельник, 21 ноября 2022 г.

 Сбегал в ЦОН и прошел квест по получению ЭЦП и личного кабинета на егов. А там был паспорт вакцинации. Вообще день был плодотворный - я наконец получил комплект зимней резины из СПб, лекарства и кой-чего по мелочи. Обе доставки опоздали на неделю!

"- Что Вы делаете?

она сидела на полу в окружении фотографий

- Смотрю сны...."

воскресенье, 20 ноября 2022 г.

Мда....
 

 Сомерсет Моэм Театр

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

суббота, 19 ноября 2022 г.

Highlightjs добавляем перевод строки

Ну не красиво было - скроллы даже для однострочных вставок. В blogger в настройках Тема - Изменить HTML, добавляем стиль для pre:
pre {
	white-space:pre-wrap !important
}

Но у нее свои косяки, изначально просто некрасиво, а со стандартным "крутым" стилем вообще не видно, т.к. цвета что мой фон. Для себя сделал такой стиль:

MSerror Litemanager белое окно


Описание проблемы:

  • При подключении к серверу, превью - белый квадрат
  • Клик по превью не разворачивает подключение
Дополнительные наблюдения:
  • Проявляется на ПК при отключении от внешнего монитора, куда ранее выводилось данное подключение
  • Переустановка не помогает (ни сервер, ни клиент) или помогает, но не надолго

MSerror RDP не пробрасывается буфер обмена

 Описание проблемы:

  • Буфер обмена между RDP сервером и клиентом не синхронизируется
  • Буфер обмена работает по отдельности на сервере и клиенте
  • В настройках подключения разрешена передача горячих клавиш (на случай использования)
  • В настройках подключения включена передача буфера обмена
Дополнительные наблюдения:
  • Сеанс RDP активен давно
  • Проблема решается выходом (не отключением сеанса) и повторным входом
  • Процесс rdpclip.exe пользователя потребляет много больше (>20Мб), в сравнении с другими пользователями удаленного рабочего стола (~5 Мб)
Решение проблемы:
Собственно решений два - либо перезайти нормально или перезапустить процесс rdpclip.exe у пользователя с проблемой. 
taskkill /F /FI "USERNAME eq %username%" /IM rdpclip.exe && ping -n 5 127.0.0.1 >null && rdpclip.exe

 "физический труд излечивает от умственного переутомления"

 "брось в реку камень и вот ты уже чуть изменил вселенную"

 "Вы глубоко религиозный человек не верующий в Бога. Бог Вас разыщет..."

пятница, 18 ноября 2022 г.

MSError Синхронизация времени в домене

Так, собственно моя история борьбы с этой штукой

Проблема возникла давно (года три назад), время расходилось на некоторых ПК аж на час, при этом kerberos ничуть не смущался и спокойно пускал куда надо. Когда начал лечение, делал по различным инструкциям при помощи GPO, программ NetTime, пытался указать насильно сервер обновления времени (роутер) и т.д. Понятно что некоторые варианты прокатывали, но под одной из статей я увидел гневный коммент пользователя, который сетовал на горе-админов, у которых руки из жопы и они настраивают время при помощи GPO. Распространение времени должно работать из коробки силами контроллера домена, единственная задача админа - настроить DC с ролью FSMO - PDC на получение времени снаружи.

четверг, 17 ноября 2022 г.

MSError Не удалось запросить журнал событий DFS Replication на сервере

Банальная ошибка, решается также банально - проверь настройки брандмауэра:
Eng: Remote Event Log Management (RPC) и Remote Event Log Management (RPC-EPMAP)
Rus: Удаленное управление журналом событий (RPC) и Удаленное управление журналом событий (RPC-EPMAP)

В принципе оно не обязательно, т.к. запрашивает только лог, но я иногда смотрю журнал событий другого ПК через оснастку "Управление компьютером", поэтому в групповой политике FireWall добавил данные правила (предопределенные "Удаленное управление журналом")

MSError Некоторые подразделения (OU) в этом домене не защищены от случайного удаления.

Алерт ясен как божий день, но не ясно как определить проблемные OU и установить им автоматически параметр в Истину. Собственно для ручного варианта включаем дополнительные параметры и смотрим в свойствах OU


Для автоматического варианта (выполняется на контроллере домена через PowerShell)

получил справку о прохождении вакцинации, сказали сходить в ЦОН получить QR???

среда, 16 ноября 2022 г.

 "Друг-мошенник в первую очередь мошенник, а потом уже друг"

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

вторник, 15 ноября 2022 г.

MSError Пробрасываются только принтеры Microsoft

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

Говорит работало - принтер в RDP сеансе, да вроде я и сам видел...

Уточним:

  • клиент - Windows 7 x64
  • сервер Windows server 2019
  • принтер HP M125rnw (USB)
  • политика сначала EasyPrint, потом дрова
  • не пробрасывается на сервер
Собственно, если не обращать внимания на "раньше работало", решается установкой драйвера версии идентичной на клиенте (иногда и язык должен быть такой же). Что я благополучно сделал и отрапортовал об этом пользователю. 
- Не печатает с сервера - пишет на следующий день
- Вчера же работало
- Нет, я просто не стала писать сразу
- Но я же проверял - ага, проверял он, я просто отправил и увидел что ничего нигде не зависло

Т.о. подведем итог:
  • принтер работает локально
  • принтер пробрасывается на сервер
  • задание передается с сервера на клиент и уходит на принтер (задание не зависает в очереди)
  • принтер не печатает удаленно
Далее я решил использовать универсальный драйвер, который, по какой-то причине отсутствовал на страничке принтера на сайте производителя. Попробовал 3 разных принтера и на обоих получил интересный результат:
  • принтер не работает локально
  • задание улетает на принтер
  • принтер пробрасывается
  • принтер не работает удаленно
  • задание передается с сервера на клиента и уходит на принтер
Также были проверены: версия NetFramework >3.5, RDC version >6.1, настройки подключения
Дальше я решил проверить, а не в сервере ли проблема (хостер божился что нововведений не было). Открыл подключение с другого ПК с ОС Windows 10, и результат был такой же, пробросились только принтеры MS и те, драйвера которых, были установлены на сервере. Проверка еще на двух машинах дала ту же картину. Проверка  с больного клиента на другом сервере, того же хостера дала ту же картину, плюс пробросились принтеры с установленными драйверами.

В итоге отправил запрос хостеру на включение EasyPrint, ибо моих правей недостаточно.

Хостер включил EasyPrint, принтер установился с драйвером EasyPrint и работает

MSError Ошибка 80244019 на клиентах WSUS

 Сдох WSUS на базе WinSrv 2008R2, решили передать роль новому WinSrv2019.

Установил, изменил запись DNS, чтобы имя сервера обновлений передаваемое через GPO не менять. Клиенты в консоли появляться не стали, пробовал выполнять сброс wuauclt /resetauthorization и wuauclt /detectnow, ноль внимания, при этом на всех ПК при попытке запустить поиск выскакивает ошибка 80244019. Начал копать:

  • проверил что реестре сервер указан правильно (HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate)
  • проверил что имя резолвится, указывал не полное имя без домена
  • Поменял имя в записях DNS и в настройках GPO (с wsus на wsus2)
  • Проверил настройку WSUS что тачки падают в группы сразу (консоль WSUS - параметры -компьютеры- использовать на компьютерах групповую политику или параметры реестра)
  • Проверил в GPO куда складываются компьютеры (Разрешить клиенту присоединение к целевой группе)
  • открыл лог на стороне клиента и увидел забавную строчку:
    WARNING: DownloadFileInternal failed for http://wsus2/selfupdate/wuident.cab: error 0x80190194
Собственно тут пошел проверять и действительно, браузер возвращает 404. Поясню, я не переделывал с нуля, поэтому не обратил внимание на отсутствие порта в "Указать размещение службы  обновлений Майкрософт в интрасети". Проверил что файл скачивается с портом 8530, исправил политику и поиск запустился и тачки начали появляться в консоли WSUS


Далее примитивный скрипт обновления политик и перезапуска регистрации на сервере WSUS, не без изъянов, но в моем случае его достаточно, чтобы по быстрому увидеть изменения в консоли WSUS

Сайт 1С упал, успел вчера скачать.

Платформа X64 8.3.20.2180 (windows64full_8_3_20_2180)

Aladdin monitor

Надоело каждый раз искать

 Aladdin monitor HASP (Аладдин Монитор, Аладин монитор)

Напоминаю: Монитор не покажет ключи, если хоть одна лицензия не выдана!!!!

понедельник, 14 ноября 2022 г.

Чип проверили, добавили витаминок приживания для, сказали за справкой сегодня не ходи, завтра ходи, а лучше послезавтра. Также медсестра поделилась воспоминаниями о погоде в Атырау когда она ходила в школу, год то был 72 второй 20го столетия:

- Плюнешь и долетает сосулька

Где то я уже слышал о таком методе определения температуры, что то около -40.... Сейчас же, если верить тырнетам температура зимой не опускается ниже -5 градусов...

Хотя это нивелируется ветрами, порой кажется что ты не в городе, а на лодке в бурю...

А некоторые утро встречали так:


К середине дня палатку разобрали и увезли.

воскресенье, 13 ноября 2022 г.

 Сомерсет Моэм "Острие бритвы"


Легкий вечерний дождик....

Excel нельзя использовать относительные ссылки для цветовых шкал

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

По сути дела сама фича (цветовая шкала Excel) работает по принципу - значение ячейки (не важно сколько их в диапазоне, работает над каждой) в пределах диапазона соответствует рассчитываемому значению самим форматированием, а значение для диапазона считается  как МАКС(Выделенного диапазона):




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

А задачу надо решать, а как?

Типа картоха айдахо


Проспал 15 часов...

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


Решил постирать тапки, даже на балконе с открытым окном спустя 18 часов они мокрые, батареи чуть теплые, поэтому сушим над плитой...


Сегодня авария где-то на линии, поэтому бесят электролинию. А она, походу, связана с водой - горячей почти нету...

 Если бы не внутренний ханжа, то можно было бы сказать что книга не только навела на кое-какие мысли, но и принесла удовольствие большее...

суббота, 12 ноября 2022 г.

1СОшибка -2147221164(0x80040154): Класс не зарегистрирован

 Частая ошибка, решаемая банальной регистрацией comcntr.dll, но оказывается есть частные случаи, именно с таким я и столкнулся. Имеется сервер 2019, разработчик под учеткой с правами обычного пользователя получил такую ошибку. Что было предпринято:

  1. первое решение
    1. регистрация библиотеки требуемой версии платформы
  2. второе решение
    1. удалена регистрация билиотек других платформ (regsvr32.exe -u)
    2. зарегистрирована еще раз нужная
  3. третье решение
    1. удалены все платформы
    2. установлена требуемая по новой
    3. зарегистрирована библиотека
    4. перезагружен сервер
"Человек был не собственником планеты, а всего ее управителем, которому однажды придется отвечать за свое управление"

пятница, 11 ноября 2022 г.

 "Что же хранится по ту сторону Es muss sein .... он делал вещи, на которые ему было плевать и это было прекрасно, он внезапно понял счастье людей, до сих пор он всегда жалел, занимающихся профессиями которые не принуждают их ни к какой внутренней Es muss sein и о которых, покинув свое рабочее место, могут тотчас забыть. Никогда прежде он не знал этого благостного безразличия..."

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

 "Гавно, с теологической точки зрения, проблема более сложная, нежели зло..." какое интересное умозаключение....

четверг, 10 ноября 2022 г.

Zabbix боремся с автопереводом единиц измерения

 Сделал я себе триггер на изменение скорости порта и вот что он прислал мне:


Выясняется, что заббикс сам переводит Kilo=>Mega=>Giga=>Tera..., но блин, мне коммутатор отдает в мегабитах! И тут есть два варианта:
  1. Привести мегабиты в биты
  2. Добавить единицу измерения в черный список (include/func.inc.php)

Zabbix Шаблон D-Link SNMP discovery

 После этого квеста задался вопросом, а могу ли я при помощи заббикса отслеживать состояние порта на коммутаторах D-LINK? Оказывается могу, и опять при помощи SNMP. Нашел на узле элементы с OID 1.3.6.1.2.1.2.2.1.8 (ifOperStatus), создал триггер (1-UP,2-DOWN)
......
сижу
....
жду
....
ничего не происходит
.....
Понимаю что где-то косяк, поясняю у гугла, а он говорит что это значение говорит о потери сигнала, как будто кабель выдернули, а ты хочешь фиксировать именно отключение.

среда, 9 ноября 2022 г.

"Я все понимаю, я знаю чего ты хочешь, я все устроил. Просто взойдешь на вершину Петршин...
....
- Это точно Ваше желание?
- Да, это мое желание - сказала Тереза
- Не каждый готов умереть, поэтому мы должны быть уверены что это Ваше желание
- Да, это мое желание - произнесла Тереза
....
- Нет, это не мое желание - произнесла Тереза
- Тогда мы не можем этого сделать"

......

понедельник, 7 ноября 2022 г.

Mikrotik script как скрипт управления D-Link`ом по SNMP писали

Есть у меня сервер, с воткнутым в него свистком, который принимал смс. По крону смски проверялись и выполнялись определенные операции при поступлении управляющих кодов. Последнее время модем начал глючить, да и баланс уже год не показывает и сервер состарился, а тут еще и wAP LTE освободился. Я точно знаю что можно с него (аппарат на базе R11e-LTE) читать  и отправлять SMS, и даже USSD запросы.

 "но никто не дал им инструкций как поступать, когда на них будет направлен объектив фотоаппарата"
теперь инструкции есть....

Mikrotik Script Error: cannot substract nothing from string

 Сижу туплю, что за ошибка, ведь в консоли этот фокус прокатил. Добавил:

:put [:typeof $MyVar]

получил, как и ожидал, ответ:

array

- так что ты тогда хочешь?! - негодовал я

В итоге увидел случайно, что я не дописал извлечение элемента массива, я написал так:

:put ($MyVar-"exit-code")

а надо:

:put ($MyVar->"exit-code")

Глаз на столько замылился, что спустя 100+ таких конструкций, перестал замечать

 Кундера Милан Невыносимая легкость бытия

Mikrotik script проверить наличие другого экземпляра и вызвать исключение

 На sh мы можем заглянуть в диспетчер задач (ps) и найти процесс нашей программы, прежде чем ее запускать. На Mikrotik же такого нету, приходится извращаться. Зачем это надо?, если один из экземпляров программы по какой то причине зависнет, а еще он использует глобальные переменные, то мы можем получить неожиданный результат, поэтому лучше избегать таких коллизий. 

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

# ищем среди глобальных переменных. ошибки здесь не будет, либо "", либо id
# в отличии от поиска через get, там и ошибки, и "не моментальное заполнение" списка,
# т.е. первый экзепляр висит уже 10  сек, а переменные через get еще отсутствуют
:if ([/system script environment find where name=RunProgram]!="") do={
	:log error ("There is another instance of the program running, exit")
	:error message="There is another instance of the program running, exit"
}
# объявляем глобальную переменную
:global RunProgram true
...
...
...
# уничтожаем переменную
:set RunProgram


воскресенье, 6 ноября 2022 г.

Mikrotik script странности функций и массивов

 Привык использовать функции не только для повторяющихся задач, но и для массивных кусков кода. Например мне нужно сформировать строку с OID из массива и передать ее по ssh, я конечно могу ее сформировать прямо внутри блока, но такая политика сделает код менее читабельным. И вот тут у скрипта Mikrotik возникает проблема - функции должны быть глобальными. Стараюсь по минимуму использовать глобальный контекст, но вызвать локальную функцию из локальной функции нельзя. Только глобальную. Даже с передачей в локальной переменной именованного массива (:local MyVar{"X"="Y";"Y"="Z"}) бывают проблемы. Поэтому приходится использовать глобальный контекст. Не забываем для глобального контекста внутри функции объявлять функцию/переменную в глобальном контексте (я бы назвал не объявлять, а инициализировать, она как бы есть, но функция о ней ничего не знает, но на сайте микротика написано declared).

Не работает:

:global MyVar 0

:local MyFunc do={
	:put $MyVar
}

$MyFunc

работает:

:global MyVar 0

:local MyFunc do={
	:global MyVar
    :put $MyVar
}

$MyFunc

Не работает:

:local MyFunc2 do={
	:return ($1+$2)
}

:local MyFunc do={
	:return ([$MyFunc2 $a $b])
}

:put [$MyFunc a=2 b=3]

работает:

:global MyFunc2 do={
	:return ($1+$2)
}

:local MyFunc do={
	:global MyFunc2
	:return ([$MyFunc2 $a $b])
}

:put [$MyFunc a=2 b=3]

Собственно если внимательно прочитать это, то таких проблем возникать не должно

Mikrotik script удалить все глобальные переменные

 Примитивная задача, почему нельзя было придумать что-нибудь типа:

/system script environment clear

или

/system script environment remove *

или

:environment clear

???

приходится описывать так

:foreach var in=[/system script environment print as-value] do={
	/system script environment remove ($var->".id")
}

Mikrotik remove all global variables and function

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

# в самом начале объявляем локальную, просто чтобы видеть ее
:local pref "chksm"

# далее наша какая то программа начинается
:global chksmMyVar false
:local MyLocalVar 0
....
:global chksmTest do={
	:put "TEST"
}
....
:local chksmTestLocal do={
	:put "TEST LOCAL"
}
....
# далее наша какая то программа заканчивается

# удаляем глобальные переменные
:foreach var in=[/system script environment print as-value] do={
	:local prefVar [:pick ($var->"name") 0 [:len $pref]]; 
	:if ($prefVar=$pref) do={
		/system script environment remove ($var->".id")
	}
}


суббота, 5 ноября 2022 г.

пятница, 4 ноября 2022 г.

 "Дело в том, что мир понемногу идет к концу и такие вещи больше не случаются"

"Он верил что день его смерти предопределен и вера облекала его чудесной броней"

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

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

Mikrotik script добавление в массив

Задача простая - прочитать смс, сверить номер отправителя со списком разрешенных, проверить текст сообщения и принять решение. Соответственно после обработки смс, нужно его удалить, но удалять во время обхода списка смс нельзя, т.к. массив сломается. Поэтому будем складывать id сообщений в массив, а для лога мне нужны еще номер и текст, значит будет массив из массивов размерностью 3. Добавить новый элемент в массив, что может быть легче и зачем тратить на это несколько часов?

Начнем с примеров реализации добавления в массив в консоли (скрипте) Mikrotik

Первый вариант добавления в массив


[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {"0000000000001";"0000000000002";"0000000000003"} 
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003
[admin@mikrotik] > :put ($arr->1) 
0000000000002
[admin@mikrotik] > :set $arr ($arr,"000000000000X")
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003;000000000000X
[admin@mikrotik] > :put ($arr->3)
000000000000X

Второй вариант добавления в массив (используем длину массива для получения следующего индекса, муторный путь, но работает)


[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {"0000000000001";"0000000000002";"0000000000003"} 
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003
[admin@mikrotik] > :put ($arr->([:len $arr]-1)) 
0000000000003
[admin@mikrotik] > :set ($arr->([:len $arr])) "000000000000X"
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003;000000000000X
[admin@mikrotik] > :put ($arr->3)
000000000000X

Третий вариант добавления в массив - "именованный"


[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {"one"="0000000000001";"two"="0000000000002";"three"="0000000000003"} 
[admin@mikrotik] > :put $arr
one=0000000000001;two=0000000000002;three=0000000000003
[admin@mikrotik] > :put ("$arr"->"two")
0000000000002
[admin@mikrotik] > :set ("$arr"->"four") "0000000000004"
[admin@mikrotik] > :put $arr
four=0000000000004;one=0000000000001;three=0000000000003;two=0000000000002
[admin@mikrotik] > :put ($arr->"four")
0000000000004

Четвертый вариант добавления - массив в массив из массивов (2D массив)


[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {{"0000000000001";"0000000000002";"0000000000003"};{"0000000000011";"0000000000022";"0000000000033"};{"0000000000111";"0000000000222";"0000000000333"}} 
[admin@mikrotik] > :put ($arr->1) 
0000000000011;0000000000022;0000000000033
[admin@mikrotik] > :set $arr ($arr,{{"0000000000XXX";"0000000000ZZZ";"0000000000YYY"}})
[admin@mikrotik] > :put ($arr->3)
0000000000XXX;0000000000ZZZ;0000000000YYY
[admin@mikrotik] > :put ($arr->0)
0000000000001;0000000000002;0000000000003
[admin@mikrotik] > :put $arr 
0000000000001;0000000000002;0000000000003;0000000000011;0000000000022;0000000000033;0000000000111;0000000000222;0000000000333;0000000000XXX;0000000000ZZZ;0000000000YYY

А вот в скрипте возникает какая-то хрень, точнее вывод показывал какую-то хрень, а по факту выяснилось, что в 2х смс (но я не смог найти на телефоне) последним символом сообщения был мать его перенос строки! Да!, вот этот - "\n" символ переноса строки. Да, его видно в Winbox если поместить значение в глобальную переменную, но я грешил не на смс, а на формирование самого массива. В связи с чем пришлось искать методы обхода:


# Это функция, на входе текст, на выходе обработанный текст
:local RemoveLineBreak do={
	:local textM $1
	:local textMnew "";
	:for i from=0 to=([:len $textM] - 1) do={
	   :local char [:pick $textM $i];
       #:put ("|" . $char . "|") Вот так увидел что есть что-то лишнее еще на этапе получения текста из массива смс
	   :if ($char != "\n") do={
		   :set textMnew ($textMnew . $char);
		 };
	};
	:return $textMnew
}
#Применение, полагаем что TextSMS содержит в себе текст с переводом строки
:set TextSMS [ $RemoveLineBreak $TextSMS ]

вторник, 1 ноября 2022 г.

 "А вот розовых мы чуть оставили, чтобы у либералов вопросов не было"

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

К врачу днем надо было, а утром был град и шквальный ветер. Градинки напоминали крупную соль. Ветер плюс дождь оставили осадок на машине.

 а дети, как и везде, х**в понарисовали на машине.


Еще и поцарапали капот :-(

суббота, 29 октября 2022 г.

среда, 26 октября 2022 г.

1СЗаготовка Чтение CSV (ТонкийКлиент,ВебКлиент)

 Понадобилось использовать обработку на опубликованной базе и тут начались проблемы:

  1. Классический выбор файла здесь не работает
  2. Прочитать файл просто так не получилось
  3. Пришлось отказаться от чтения при помощи Excel (типа универсальная была)
Поэтому пришлось использовать БСП, сохранять во временный файл и читать оттуда:


&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
    ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
    
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Фильтр = "Excel CSV (*.csv)|*.csv"; 
	ДиалогВыбораФайла.МножественныйВыбор=Ложь;
	ДиалогВыбораФайла.Заголовок = "Выберите файл";
	ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
	ДиалогВыбораФайла.ИндексФильтра = 0;
    
    ПараметрыЗагрузки.Диалог = ДиалогВыбораФайла;
    
    ОповещениеЗавершенияВыбораФайла = Новый ОписаниеОповещения("ВыборФАйлаЗавершение", ЭтотОбъект);
    
    ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОповещениеЗавершенияВыбораФайла, ПараметрыЗагрузки); //БСП
КонецПроцедуры
&НаКлиенте
Процедура ВыборФАйлаЗавершение(Результат, ДополнительныеПараметры) Экспорт 
	Если Результат<>Неопределено Тогда
		ИмяФайла=Результат[0].ПолноеИмя;
		АдресВХранилище=Результат[0].Хранение;
		ПрочитатьФайлCSV(АдресВХранилище);
		Элементы.Таблица.Обновить();
		ДоступностьКнопкиСоздания();
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПрочитатьФайлCSV(АдресВХранилище)
	Данные = ПолучитьИзВременногоХранилища(АдресВХранилище);
	ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("csv");
	Данные.Записать(ИмяПромежуточногоФайла);
	УдалитьИзВременногоХранилища(АдресВХранилище);	//очищаем временное хранилище
	
	оТаблица=Новый ТаблицаЗначений;	
	//очищаем таблицу и удаляем колонки
	Таблица.Очистить();
	оТаблица=Таблица.Выгрузить();
	
	Разделитель=";";
	ЗаголовкиИзПервойСтроки=Истина;
	
	Текст = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
	
	 //создадим колонки
	ТекСтрока = Текст.ПрочитатьСтроку();
	Если ТекСтрока <> Неопределено Тогда
		МассивЗначений = СтрРазделить(ТекСтрока, Разделитель);
		ИндексКолонки = 0;
		Для Каждого ИмяКолонки Из МассивЗначений Цикл
			ИмяКолонки = ?(ЗаголовкиИзПервойСтроки, "Кол"+ИндексКолонки, ИмяКолонки);
			оТаблица.Колонки.Добавить(ИмяКолонки);
			ИндексКолонки = ИндексКолонки + 1;
		КонецЦикла;
		Если ЗаголовкиИзПервойСтроки Тогда
			ТекСтрока = Текст.ПрочитатьСтроку();
		КонецЕсли;
	КонецЕсли;

	Пока ТекСтрока <> Неопределено Цикл // строки читаются до символа перевода строки
		НоваяСтрока = оТаблица.Добавить();
		
		МассивЗначений = СтрРазделить(ТекСтрока, Разделитель);
		ИндексКолонки = 0;
		Для Каждого ТекЗначение Из МассивЗначений Цикл
			Попытка
				ЗначениеЯчейки=Дата(ТекЗначение+":00");
			Исключение
				ЗначениеЯчейки=Число(СтрЗаменить(ТекЗначение," ",""));
			КонецПопытки;
			НоваяСтрока[ИндексКолонки] = ЗначениеЯчейки;
			ИндексКолонки = ИндексКолонки + 1;
		КонецЦикла;

		ТекСтрока = Текст.ПрочитатьСтроку();
	КонецЦикла;
		
	//Возврат Результат;
	
	Таблица.Загрузить(оТаблица);
	
	//удаляем временный файл
	Попытка
		УдалитьФайлы(ИмяПромежуточногоФайла);
	Исключение
	   ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
КонецПроцедуры


Картины: Татьяна Ниловна Яблонская

 


вторник, 25 октября 2022 г.

- А нарисуй мне такую картину - прошу я
- Нарисую - отвечает Фрида Кало

В принципе я бы и не обратил внимания, т.к. мне не нравится ни художница ни ее работы, НО, при просмотре новых постов в каналах телеграмма я вижу выложенную картину именно за ее авторством.

Совпадение? - не думаю!



К полтретьего ночи понял, что план пойти пораньше, чтобы не проспать, провален с треском, поэтому далее было принято другое важное решение - не спать О_О

Пульмонолог сказал что не видит противопоказаний к прививке.

Чипирован Китаем, проверка чипа  на отторжение - 14 ноября.

воскресенье, 23 октября 2022 г.


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

суббота, 22 октября 2022 г.

Макс Фриш Назову себя Гантенбайн

 


До 5 утра не мог заснуть, очнулся в10:58 как огурчик.

Хотел прогуляться сегодня до Ретро-парка, но погода вообще не веселая - ветер холодный и сильный (((

Зато приготовил в гигантской кастрюле ))

 Опять же, жанр совсем не мой, один раз можно уделить внимание данному произведению, но не больше

пятница, 21 октября 2022 г.

Стою рядом с парадной (время - лето), на тарелке салатик из помидоров и огурцов со сметаной. С кем то говорю, подходит подозрительная женщина, жалом повела и отошла. Еще пара женщин прошла, некоторые подходят к парадной, некоторые заходят.

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

четверг, 20 октября 2022 г.

Mikrotik + EDGERouter ER-X VLANЫ

 Задача банальная:

Есть один клиент, у него торговый комплекс на два здания. Между зданиями 2 витых пары, одна под аналоговую камеру, а вторая под интернет. При этом, этим интернетом пользуется как минимум 4 разных группы людей. Из них одна группа доверенная, вторая частично (дает доступ к WiFi каждому), остальные вообще левые чуваки. Добрый арендодатель всем дает интернет....

пока на его принтере арендатор не распечатал....

Ну как обычно, враг ближе всех, Арнольд то не друг Сьюзи!

Лег ближе к 5 утра, сначала из-за Димы К., пытались настроить видеорегистратор - он все не подключался к облаку (в итоге проблема оказалась в dns сервере), а потом решал интересную задачку и как-то поперло. 

Встал в 11 и почти сразу звонок

- Алло, Андрей Владимирович?
- Да - отмечу, что на звонки я обычно отвечаю "Слушаю", чтобы не было возможности использовать как согласие, но здесь звонок поступил на номер Казахстана
- У Вас была запись к пульмонологу на субботу - отметил про себя "была"
- Да
- Врач не сможет прийти в субботу, можем перенести на понедельник, удобно будет?
- А время?
- Время то же
- Тогда давайте - тут как бы выбора особого нет


После умывально-едальных процедур решил все таки сходить в банк и забрать мультивалютную карту. Банки здесь жутко неудобно работают - с 9 до 18 с пн по пт (((



1СЗаготовка RegExp поиск слова

Задача: нужно проверять строку на наличие различных слов (масса, вес, длина, ширина, высота).

Решение: понятное дело, что простой поиск по строке СтрНайти(),Найти() не подойдут, т.к. вхождение может быть частью большего слова: масса = массаж, вес = весна и т.д. 

Решил использовать регулярные выражения, но и тут я обломался, т.к. регулярка \bbla\b не работает с Юникодом (кириллица), да и у 1С реализовано через ComObject(VBScript.RegExp), который принимает не все. Например параметр \i (регистронезависимость) вообще не принимает, в данном случае это параметр самого объекта (IgnoreCase), а не шаблона. В итоге использовав примеры гугла и поправки на VBScript.Regexp пришел к такой конструкции: 

"(^|[^А-Яа-яA-Za-z])(вес|масса)([^А-Яа-яA-Za-z]|$)"

Собственно разобрать такое легко:

(НачалоСтроки ИЛИ НеБуква(англ и кириллица)) И (вес ИЛИ масса) И (НеБуква ИЛИ КонецСтроки)

Для моей задачи подходит, мне нужно получить булево, а не замену. У данного варианта есть минусы, для меня не существенные:

  1. Любой небуквенный символ, предшествующий или последующий, попадает под шаблон, например "рполрволпва .вес. выраорл" вернет не "вес", а ".вес."
  2. Не работает с языками отличными от русского и английского

понедельник, 17 октября 2022 г.

Организм до сих пор не может привыкнуть к смене часовых поясов. Работаю до 3х ночи (час ночи по МСК) встаю в 10+ (8 утра по МСК).

1СЗаготовка Дублирование значение ячейки Ctrl+D (аналог Excel)

Готовый код для программного добавления кнопки (вызвать СоздатьКомандуДублироватьЗначение() из ПриСозданииНаСервере() формы), команды и сама процедура обработки:


&НаСервере
Функция СоздатьКомандуДублироватьЗначение()
	НоваяКоманда = Команды.Добавить("ДублироватьЗначение");
	НоваяКоманда.Действие= "ДублироватьЗначение";
	НоваяКоманда.Заголовок= "Дублировать значение";
	НоваяКоманда.ИзменяетСохраняемыеДанные = ?(найти(нрег(этаформа.ИмяФормы),"обработка")>0,Ложь,Истина);
	НоваяКоманда.Отображение= ОтображениеКнопки.Картинка;
	НоваяКоманда.Подсказка= "Дублируется значение предыдыущей ячейки, аналогично Excel. В т.ч. и выделенные строки";
	НоваяКоманда.СочетаниеКлавиш= Новый СочетаниеКлавиш(Клавиша.D, , Истина); // Ctrl+D
	
	// Опытным путем выявлено, что вызов команды сочетаниемклавиш не работает без кнопки
	// при этом кнопка должна быть на форме, Видимость=Истина
	// также замечено, что нажатие сочетанийклавишь активизирует кнопку
	// из-за чего ЭтаФорма.ТекущийЭлемент вернет кнопку
	// поэтому убираем кнопку в допМеню, этот фокус позволит получить именно текущий элемент
	НоваяКнопка=Элементы.Добавить("ДублироватьЗначение",Тип("КнопкаФормы"),ЭтаФорма.КоманднаяПанель);
	НоваяКнопка.вид=ВидКнопкиФормы.КнопкаКоманднойПанели;
	НоваяКнопка.ИмяКоманды="ДублироватьЗначение";
	НоваяКнопка.ПоложениеВКоманднойПанели=ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
КонецФункции

&НаКлиенте
Функция ДублироватьЗначение()
	Если Типзнч(этаформа.ТекущийЭлемент)=Тип("ТаблицаФормы") Тогда     //работаем только с таблицами
		ИмяТФ=этаформа.ТекущийЭлемент.Имя;	// имя ТаблицыФормы
		ИмяТЗ=ПолучитьПутьКДанным(ИмяТФ);	// имя элемента формы может отличатся от имени реквизита
		ТЗнаФорме=Вычислить(ИмяТЗ);	// данные формы коллекция
		ВыделенныеСтроки=Элементы[ИмяТФ].ВыделенныеСтроки;
		// Определяем источник - строка предшествующая первой выделенной 
		// При удалении, перемещении строк, их идентификатор не меняется, и очень похож на номер строки
		// при этом индекс строки меняется
		ИндексСтрокиИсточника=9999999;
		Для каждого ИдСтроки ИЗ ВыделенныеСтроки Цикл
			ИндексСтроки=ТЗнаФорме.Индекс(ТЗнаФорме.НайтиПоИдентификатору(ИдСтроки));
			ИндексСтрокиИсточника=?(ИндексСтрокиИсточника>ИндексСтроки,ИндексСтроки,ИндексСтрокиИсточника);
		КонецЦикла;                                 
		ИндексСтрокиИсточника=ИндексСтрокиИсточника-1;
		
		Если ИндексСтрокиИсточника>=0 Тогда
			// опять же, имя элемента формы может отличатся от имени реквизита
			// при этом ПутьКДанным колонки содержит и ПутьКДанным таблицы, исключаем
			// обращатся к колонке по индексу также не стоит, т.к. порядок на форме может отличаться от порядка реквизитов
			ИмяТекКолонки=стрзаменить(ПолучитьПутьКДанным(Элементы[ИмяТФ].ТекущийЭлемент.Имя),""+ИмяТЗ+".","");

			ЗначениеИсточника=ТЗнаФорме[ИндексСтрокиИсточника][ИмяТекКолонки];
			
			Для Каждого СтрТЧ ИЗ ВыделенныеСтроки Цикл
				// ВыделенныеСтроки хранит не индекс строк, а их иденитфикаторы
				// при удалении строк из середины обновляется индекс, но не номер строки
				ТЗнаФорме.НайтиПоИдентификатору(СтрТЧ)[ИмяТекКолонки]=ЗначениеИсточника;
			КонецЦикла;
			Элементы[ИмяТФ].Обновить();  //обновляем данные в ТаблицеФормы
		КонецЕсли;
	КонецЕсли;		
КонецФункции

&НаСервере
Функция ПолучитьПутьКДанным(ИмяЭлемента)
	Возврат(Элементы[ИмяЭлемента].ПутьКДанным);
КонецФункции

Собственно комментарии рассказывают все подводные камни.

В теории можно подключить интерактивную запись и тем самым вызывать событие ПриИзменении(), но:

  1. Мне лень
  2. Нужно немного переделать код
  3. Для поддержки выделенных строк не забыть предварительно скопировать массив со строками
Собственно решение доработано и переделано уже несколько раз здесь

Картины: Флорина Штеттхаймер

 


воскресенье, 16 октября 2022 г.

Очень резкие переходы (восхождение, в могиле, журналист), до момента создается ощущение что это другая книга, я даже открыл и проверил...

В местном минисквере есть вот такая ротонда, чисто мое мнение - она здесь хоть и смотрится, но лишняя



А это ответ, почему газон зеленый в парке, а в остальных местах его практически нету.


Здесь много бродячих собак, НО они скорее всех, чем ничьи. К многим тут относятся именно как к животному, а не к чему то противному. Почти все собаки имеют бирку.


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

Похоже это главное здание Лесотехнической Академии СПб, но если повернуться спиной к нему, то это не парк, а какой-то лес. Прохожу вдоль здания, вижу бежит ежиха и двумя ежатами, радуюсь этому и хочу с кем-то поделиться. Мимо проходит или пробегает человек, толи с собакой, толи без, ему не интересно, да и я потерял семейство ежей. Разворачиваюсь и бегу искать их обратно, на встречу пара людей со сворой собак (наверное проекция соседки с 4мя собаками):

- Я тут ежиков видел, а вот они - указываю пальцем на кого то с иголками, но нет, это не ежики ...

Сначала я вижу классическую рыжую белку, но с иголками и даже успеваю погладить, а потом серую, и тоже с иголками и их много О_О

1СЗаготовка Строка значение и единица измерения в число

 Простенькая функция приводит "480 г" в "0,48", "10 см" в "0,1" и т.д. 

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


// Функция - Значение в единицу измерения
//
// Параметры:
//  мНаименование	 - Строка - Наименование характеристики - может содержать единицу измерения Пример (Длина в упаковке, кг:)
//  мЗначение		 - Строка - Само значение, может содержать единцу измерения пример (10 грамм)
// 
// Возвращаемое значение:
//  Число - Коэффициент умножения для привидения к КГ или СМ
//
&НаСервере
Функция ЗначениеВЕдиницуИзмерения(мНаименование,мЗначение)
	ЗначЕдИзм=РегЭксп(мЗначение,"ОставитьЦифры",Истина,"");
	МножителиЕдиницИзмерения=Новый Соответствие;
	МножителиЕдиницИзмерения.Вставить("г","0,001");
	МножителиЕдиницИзмерения.Вставить("грамм","0,001");
	МножителиЕдиницИзмерения.Вставить("g","0,001");
	МножителиЕдиницИзмерения.Вставить("gram","0,001");
	МножителиЕдиницИзмерения.Вставить("кг","1");
	МножителиЕдиницИзмерения.Вставить("килограмм","1");
	МножителиЕдиницИзмерения.Вставить("kg","1");
	МножителиЕдиницИзмерения.Вставить("kilogram","1");
	МножителиЕдиницИзмерения.Вставить("т","1000");
	МножителиЕдиницИзмерения.Вставить("тонна","1000");
	МножителиЕдиницИзмерения.Вставить("ton","1000");
	МножителиЕдиницИзмерения.Вставить("мм","0,1");
	МножителиЕдиницИзмерения.Вставить("миллиметр","0,1");
	МножителиЕдиницИзмерения.Вставить("mm","0,1");
	МножителиЕдиницИзмерения.Вставить("milimetre","0,1");
	МножителиЕдиницИзмерения.Вставить("см","1");
	МножителиЕдиницИзмерения.Вставить("сантиметр","1");
	МножителиЕдиницИзмерения.Вставить("cm","1");
	МножителиЕдиницИзмерения.Вставить("centimetre","1");
	МножителиЕдиницИзмерения.Вставить("дм","10");
	МножителиЕдиницИзмерения.Вставить("дециметр","10");
	МножителиЕдиницИзмерения.Вставить("м","100");
	МножителиЕдиницИзмерения.Вставить("метр","100");
	МножителиЕдиницИзмерения.Вставить("m","100");
	МножителиЕдиницИзмерения.Вставить("metre","100");
	МножителиЕдиницИзмерения.Вставить("км","1000");
	МножителиЕдиницИзмерения.Вставить("километр","1000");
	МножителиЕдиницИзмерения.Вставить("km","1000");
	МножителиЕдиницИзмерения.Вставить("kilometre","1000");
	
	НаимЕдИзм="";
	НаимЕдИзмНайдено=Ложь;
	
	РегЭксп= Новый COMОбъект("VBScript.RegExp");
	РегЭксп.IgnoreCase = "True"; //Игнорировать регистр 
	РегЭксп.Global = Истина; //Поиск всех вхождений шаблона 
	РегЭксп.MultiLine = Ложь; //Многострочный режим 

	Для каждого ЭлементСоответствия Из МножителиЕдиницИзмерения Цикл
		РегЭксп.Pattern = строка("(^|[^А-Яа-яA-Za-z])("+ЭлементСоответствия.Ключ+")([^А-Яа-яA-Za-z]|$)");
		НаимЕдИзмНайдено=РегЭксп.Test(мЗначение);
		Если НЕ НаимЕдИзмНайдено Тогда
			НаимЕдИзмНайдено=РегЭксп.Test(мНаименование);
		КонецЕсли;
		Если НаимЕдИзмНайдено Тогда 
			НаимЕдИзм=ЭлементСоответствия.Ключ;
			Прервать;
		КонецЕсли;		
	КонецЦикла;

	Если МножителиЕдиницИзмерения.Получить(НаимЕдИзм)=Неопределено Тогда
		ЗначениеЕдИзм=мЗначение;
	Иначе
		ЗначениеЕдИзм=ЗначЕдИзм*МножителиЕдиницИзмерения[НаимЕдИзм];
	КонецЕсли;
	
	Сообщить(СтрШаблон("Значение ""%1"" => ""%2"" (%3)",мЗначение,ЗначениеЕдИзм,НаимЕдИзм));
	Возврат(ЗначениеЕдИзм);
	 
КонецФункции


суббота, 15 октября 2022 г.

 Марк Леви "Сильнее страха"

Это было сложно - встать в 8 утра, хоть и лег в 12, сон был беспокойный из-за знания того, что нужно не проспать.

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

А потом я поехал в ТК, поискать в местом аналоге Карусели разрыхлитель теста и перец черный маленьким объемом. Посмотрел столовые приборы, вилка меня интересует, я хочу вилку со своей грязью, если таковая имеется*, и был расстроен, тут вилки пластиковые или тупые. А потом кружился по городу в поисках простого магазина одежды или что то схожее, где бы продавали мужское нижнее белье:


 И таки нашел, но тут возник затык с размерами, я себя почувствовал просто жирным ибо 3-5XL это гигантский размер в моем понимании, а у них они практически не отличаются и близко к моему

_______________________________________________
если приглядеться к зубцам вилок, то между ними можно обнаружить толстый слой, а в некоторых случаях и посчитать количество помывок

 Вчера приехали тапочки, кофе полкило, новая бритва oneblade и еще по мелочи мелочи. Даже с доставкой из СПб бритва мне обошлась дешевле, чем покупка здесь. А смотря на цену кофе (от 2500 за кг), я также получал от мозга отказ в покупке, при знании того, что дома почти 3кг кофе, который практически никто не пьет.

- Но я не люблю когда меня окунают головой в бассейн, в Нью-Джерси меня так чуть не утопили 

- Тогда вам нужно отказаться от коктейлей

пятница, 14 октября 2022 г.

 За что действительно стыдно должно быть жителю СЗФО РФ - это за посредственное или полное отсутствие знания языка отличного от русского, да и русский у многих хромает. Когда обращаешься к кому-либо здесь, в Атырау, практически все могут тебе что-то объяснить на русском. Замечу, что это не сравнимо с попытками испанца объяснить на ломаном английском русскому, с еще более худшим знанием английского. Также отметим, что русскоязычные кичатся величием своего языка, но не могут в мере большей понимать смежные славянские языки, нежели те же украинцы и белорусы. Они понимают польский или сербский много раз легче, нежели русскоязычный,  а последний порой и с украинским и белорусским встает в ступор.

 Хм, здесь детская и взрослые поликлиники совмещены в одну...

Интересный диалог с медсестрой в поликлинике

- А Вы откуда?

- Из Санкт-Петербурга

- Ооо, прямо из Питера

- А вакцинация Вам зачем?

- Хочу дальше поехать

- А куда?

- Азербайджан, Грузия

- Что все туда едут, а у нас некуда ехать?

- Увы, дальше некуда

- Разбежались великие державы!


Врач при осмотре отказала мне вакцинации без консультации онколога и пульмонолога, потому как у меня заболевание легких и я на длительной гормональной терапии. При этом у них (городская поликлиника) я даже за платно не могу пройти к этим специалистам. Записался на субботу к онкологу, и на следующую субботу к пульмонологу. Т.о., плюс 25 дней на вакцинацию, я тут застреваю еще и на ноябрь.....

 Три часа, дам с детками заменил подростки на мопеде...

четверг, 13 октября 2022 г.

"С ним не о чем говорить" - описал про себя главный герой (рассказчик) Гэтсби

 Полвторого, на площадке смеется ребенок и разговоры говорят дамочки

Нет, ребенки, их там несколько, судя по голосу не более 5 лет....

" Сегодня ты обедаешь у меня и я подумал, что было бы неплохо вместе прокатится" - сказал Гэтсби, подъехав на своем автомобиле

И ведь реально есть люди, которые так себя ведут, беее

1СОшибка ODBC разделитель запятая

Тривиальная задача - импорт CSV в ТЗ, но CSV с точки зрения EXCEL кривой, т.к. имеет многострочные колонки:


Гугл докс нормально кушает файл, загрузка на сайт тоже, а вот Excel нет. Соответственно классический построчный перебор и конвертация строки в массив с последующим вложенным перебором нам не подходит. Наткнулся на статьи на Infostart  и обрадовался, узнав что вариации ODBC умеют многострочные колонки в CSV. Кстати, EXCEL понимает ограничитель строк, но только в том случае, если он на одной строке.

 В прошлом году клинануло и я сделал тыкву, в этом году не получится (((



 Сидя здесь, практически в изоляции, появилась возможность решить одну задачку.

Задачку я эту, изначально хотел сплавить беженцам из Украины, но увы первый отказался на следующий день, а второй (девушка) не выходила на связь на всем протяжении срока выполнения и даже больше, третий сразу отказался, ссылаясь на отсутствие опыта работы с системой.

Сама задача:

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

Технически, если упороться, то можно решить за 24-48 часов, я давал сначала неделю (парню), потом две недели (девушке), в рублях 15К если они самостоятельно решат, иначе меньше. В итоге спустя 1,5 месяца я сам решил решить эту задачу, деньги то не лишние.

Задачу я предлагал решать именно в экселе, так как он есть много где, а гибкости в нем прилично. Но одной гибкости ему не хватило, а именно ПоискПоз по синонимам, когда у тебя критериев больше одного, а искать нужно сначала первый, потом второй, потом третий и выбрать первую ИСТИНА. Это наверно можно решить макросом, но возникла другая проблема, где взять синонимы? Это нужно для автоматического сопоставления товара и категории, у разных поставщиков разные категории, у некоторых они глубже, а у кого то их нет вообще.

В итоге решил сверстать на коленке конфигурацию на базе 1С для конвертации выгрузок поставщиков. Собственно это я сейчас и делаю. 

А к чему это я?

Я уже неоднократно замечал, пишешь какой-то модуль, бывает по разному - 100-200-500-1000 строк кода, потом отлаживаешь, ловишь пару жуков и бац оно работает. А по пути решения в воображении понимаешь что такой подход не подойдет, меняешь на другой, вылавливаешь зависимость с третьим. И вот то самое чувство когда оно работает, просто не передаваемо.

Три часа ночи, воды нет, ни холодной, ни горячей О_О

среда, 12 октября 2022 г.

 Как говорится "вода дырочку найдет", из трех батарей у одной есть протечка

 Вода поползла по трубам...

 Дети не унимаются, почему они не могут пойти на улицу?

Кстати, детей тут очень много, а вот площадка подкачала...

Ты можешь подобрать новый телевизор? - говорит Ольга Л. (бухгалтер) - наш сдох, надо бы новый

Всё происходит в помещении в котором в реальности Ольга Л. никогда не была, оно больше похоже на помещение в котором сидит бухгалтер Елена Ш.. Ольга Л. протягивает листок, на котором указана модель старого телевизора и список уже подобранных самой Ольгой Л. телевизоров и их цен. Ладно, думаю я, я тоже поищу, а рядом стоит стеллаж, ставлю на него ноутбук и давай искать. Так на телевизоры у меня есть скидка, перепродам через себя, заработаю копеечку. 

Тут меня зовет Алексей К. (руководитель), вместе со мной подходит еще кто-то, они что то обсуждают, а я разглядываю помещение. В помещении стоит стол в виде буквы Т, отмечу, у Алексея такого стола никогда не было, такой стол есть у Инны Ф.Р.. Алексей сидит на вершине, слева от него окно, зарешечено в крупную такую клетку. В помещении, как и в предыдущем, почему то мало света, именно поэтому я замечаю собак справа от Алексея не сразу. Один пес - двор-терьер, а второй - бельгиец, и именно малинуа. Глажу пса, Алексей освобождается, садится на пол и тоже гладит пса. В этот момент я замечаю, что у него провал в верхней челюсти от ноздри и ниже, меня это удивляет, но момент спустя все исчезает. Остается только недельная небритость, которая нехарактерна для него.

-Это же бельгиец?

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

Дальше мы с ним обсуждаем что то, в том числе и здоровье, где он упоминает тот самый провал на лице. 

Все....

___________________________________________________

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

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

Наверное полумрак также относится к этому видео.

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

вторник, 11 октября 2022 г.

Что я слышу? барабанная дробь по отливу, это же дождь...


дождь кончился....

 "Я надеюсь она будет дурой, маленькой прекрасной дурой..."

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

Я что то обсуждаю с кем то, тут подходит София Я.

-На, Андрюша, я не знаю что это, оно мне не нужно - говорит София

Вручает мне нечто не особенно тяжелое, завернутое в пупырку, я разворачиваю и вижу кусок металла буквой П, с ушками для установки в серверную стойку. Это крышка (модуль защиты) для вот такого агрегата:


Только у него почему то есть слоты для USB-dongle, чего в оригинале нету. 

- Откуда это у Вас? - спрашиваю я. Вопрос резонный, т.к. агрегат рассчитан на 64 устройства, ни ей, ни юр лицам связанным с ней, такой объем не нужен и стоит эта дура под 200 000 рублей в полной комплектации, я знаю, потому что у меня есть такая

- Не знаю, хочешь забирай

Дальше я не помню