We rise up for the things we believe in over and over again
Энтерпрайзный софт. Вроде как должен быть мегастабильным, меганадежным. Ага, только вот нервов на него подчас уходит куда больше, чем на какие-нибудь кустарные поделки. Не буду описывать всех деталей запуска приложения, которое меня бесит (и это оооооооочень сильное преуменьшение, я натурально в голос матерюсь каждый раз, когда его запускаю, если дело идет по ночам). Каждый раз ошибки разные. Сегодня и ругался и хохотал, хотя ошибка к этому софту не относится. Судите сами:

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

@музыка: Major Lazer x DJ Snake feat. MØ - Lean on

@темы: Этот безумный мир

We rise up for the things we believe in over and over again

Пользовательский ввод. Обычно его ожидание программируется без особых проблем - ставишь read-host где нужно с нужными параметрами, и дело почти всегда с концом. А сегодня задачка попалась более заковыристая. Скрипт должен ждать Х секунд, после чего запуститься заново, НО! Если в течение этих Х секунд нажата любая кнопка - скрипт должен перезапуститься сразу же. Как решать?
Быстрый гуглеж подсказывает вот такую конструкцию:

где $SleepTimeout - переменная с числом секунд до перезапуска.
Если не нажата никакая кнопка и счетчик после приращения одной единицы меньше, чем таймаут, просто ждем одну секунду. Если какое-либо из этих условий не выполняется, выходим из while, и идем к команде перезапуска. Все бы ничего, первую итерацию скрипт проходит на ура, а вот дальше начинаются проблемы. На второй и последующих итерациях скрипт считает, что "любая кнопка" уже нажата, и ничего не ждет, уходя на следующую итерацию. Сразу же. Понятное дело, что проблема кроется где-то в двух условиях.
Проверяем. counter послушно сбрасывается при каждой итерации скрипта, так что дело не в нем. Остается только $Host.UI.RawUI.KeyAvailable, статус которой не обновляется. Значит, надо как-то сбросить его принудительно. Как? Учитывая, что это буфер клавиатуры, нужно его обнулить. А обнуляется он вот так:
$Host.UI.RawUI.FlushInputBuffer()

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

@музыка: клац-клац-клац

@темы: PowerShell, Scripting

23:27

Mass Effect

We rise up for the things we believe in over and over again
"Тогда мы можем лишь надеяться, что судьба не покарает вас настолько большим состоянием, что вам понадобятся мои услуги" (с) Барла Вон
Да, я знаю, что слоупок, знаю, что это игра фиг знает каких годов :)

@настроение: :)

@темы: In-game

We rise up for the things we believe in over and over again
На волне давешней фотографии нашего нового коллеги полез смотреть, а кого еще можно попытаться в наш стан переманить. Нашел просто прекрасное:
Зелёная птица (Хэл)
В полете при активации ведёт себя как бумеранги — разворачивается и с мощным ускорением летят в обратную сторону. Очень хорошо пробивают дерево и лёд.


Мда... Тут и сказать-то нечего, кроме извечного - знающие оценят :)

@музыка: Koto - Minoan War

@настроение: ушел искать свиней...

@темы: Этот веселый мир

20:12

KOTO...

We rise up for the things we believe in over and over again
Знаком с группой уже бог знает сколько лет. А вот этот трек смог "услышать" только теперь. Черт возьми, он ведь шикарен!


@музыка: KOTO - Minoan war

@темы: Music

10:55

Newbie

We rise up for the things we believe in over and over again
В нашем славном рабочем коллективе недавно появился новый сотрудник. Знакомьтесь, Red :)


@музыка: клац-клац-клац

@настроение: рабочее

@темы: Этот веселый мир

We rise up for the things we believe in over and over again
- Черт, что за...? Куда мана делась?
- Гы, мобы, что, научились ее откачивать? :)
- Да не было такого заявлено.
- Ну так регень ее.
- Не могу, нет у меня сейчас регена.
- Эх, хорошо быть соркой, мана всегда регенится.
...
- Эй, сорка, давай, запускай свои хваленые ветерки, которые мобов будут изо всех щелей вытаскивать!
- Не могу, маны нет :(
- Гы, хорошо быть соркой, хорошо быть соркой...

@музыка: Amethystium - Ethereal

@темы: In-game

22:40

Errors

We rise up for the things we believe in over and over again
Богат вечер на ошибки, богат.
Для начала порадовала наша новая "самая любимая ОС" (с). Винда-десятка то есть. Причем порадовала ошибкой, которую я прежде вообще никогда в глаза не видел:

Это все результат действия двух программ - Firefox и Diablo 3. Причем вторая сама по себе может если не завесить систему, то заставить ее шататься - уж точно. Славно нынче пишут код в Blizzard.

Затем уже порадовал Imgur, на котором все картинки хранятся:

Вот как так можно внедрять новые фичи, а? Впрочем, вопрос риторический, на самом деле.

И да, у того же Imgur в последнее время нелады с блоком гиперссылок. Вся структура поехала. Ладно, переживем.

@музыка: Amethystium - Enchantment

@темы: Этот безумный мир

07:52

Squirrel...

We rise up for the things we believe in over and over again
Обычно они таки рыжие. Но не всегда...


@музыка: Amethystium - Shadow to Light

@темы: Этот веселый мир

We rise up for the things we believe in over and over again
Да, не обманули, вкрапления юмора в этом сериале таки есть :)
Первый и Четвертый ведут поиски свалившего Шестого. Поиски заводят их в компанию, предоставляющую возможность путешествовать через джамп-клонов (это если в терминах Eve online). Естественно, это стоит денег. Сотрудница конторы допытывается:
- Ну... а сейчас мы вас зарегистрируем. Да, кстати, вы пара?
- НЕТ! / - А скидки есть?
- 10%
- Тогда да, мы - пара.

@настроение: :)

We rise up for the things we believe in over and over again
Есть такой весьма наркомановский продукт - Microsoft System Center Data Protection Manager. На сегодняшний день - аж в версии 2012. Почему наркомановский - это достойно отдельного поста, но он тут появится еще не скоро, ибо я сам только-только начинаю постигать логику этого монстра (а она своеобразна). А вот что "радует" уже сейчас - это локализованная версия оного. Впрочем, "локализацией" грешит почти весь софт, что системный, что прикладной, что (и тем более) игровой. Вот что отловилось на этот раз.
Перед нами - контекстное меню, вызываемое в консоли DPM для какого-либо из агентов, установленных на защищаемых серверах:

В английской версии назначение первого и последнего пунктов сомнений никаких не вызвает. Первый - обновить версию самого агента на целевом сервере. Последний - тоже обновить, но уже информацию о данном агенте в консоли DPM. В русской версии видим просто потрясающее: что там, что сям просто "Обновить". Догадаться о том, что и где обновляется, можно только по пиктограммкам рядом с надписями. А парадокс в том, что я навскидку даже и не предложу иного варианта перевода, настолько эти термины уже устоялись.
А ведь где-то на горизонте еще маячит термин Upgrade, который в некоторых случаях тоже переводят как "обновить"...

@музыка: W.A.S.P. - Forever Free

@темы: Этот безумный мир

We rise up for the things we believe in over and over again

Продолжаем разборки с SNMP и Powershell. Выяснилось, что использование сторонних библиотек очень криво работает в том случае, когда эта самая библиотека лежит на каком-нибудь сетевом ресурсе. Попытка дать в скрипте команду
[reflection.assembly]::LoadFrom( (Resolve-Path "$includeDir\SharpSnmpLib.dll") )
в случае $includeDir, равному \\server\share, приведет к фиаско.
Проковыряв советы с ServerFault и им подобных, в итоге не нашлось ничего лучшего, чем решение "в лоб" - берем эту библиотеку и тупо копируем в профиль пользователя. И подключаем ее оттуда. Просто и понятно. Параллельно еще подправили пару косяков с "лишними" слешами в путях.
Еще одна засада поджидала там, где не ждали вообще. Различие в версиях Powershell. На v2 все отрабатывает без проблем, а вот с v3 "косяки стаями пошли". Ну, не то, чтобы стаями, но в одной функции пришлось кое-что подправить. Итак, что у нас получается.
Главный скрипт:


Исправленный Invoke-SNMPGet.ps1:

По хорошему нужно было бы еще исправить и Invoke-SNMPWalk.ps1, но он не используется.

@музыка: Electronic Arts - RAP sheet

@темы: PowerShell, Scripting

We rise up for the things we believe in over and over again
Кажется, пора заводить новый тег, специально под такие вот услышанные перлы в конференции :)
- Самый лол в том, что у топов рейтинга (варваров) это самое копье стоит.
- Так оно ж только милишникам? Значит, колдунам его пристроить некуда?
- Да, так что все логично. Бонус работает тогда, когда бьют тебя. Варвары, крестоносцы, монахи - да, их таки бьют. А колдуна, по идее, бить-то вообще не должны, он же RDD.
- Ты знаешь, колдуна просто читать дальше

@настроение: Ржать, но ржать нельзя, спать пора.

@темы: Этот веселый мир, In-game

13:20

Passwords

We rise up for the things we believe in over and over again

Британская спецслужба попросила граждан не придумывать длинные пароли - Клац!

Устали, бедняги, черт их дери, расшифровывать награбленное (grab). :)

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

@музыка: Cyan Worlds - Rest area music

@темы: Security

We rise up for the things we believe in over and over again
Отсмотрено. По итогу скажу следующее - первый мульт от Диснея, во время просмотра которого не было такого нещадного желания стебать и анализировать все происходящее на экране, хотя и для того, и для другого объекты есть.
А вообще - как норн (или же Hikeda'ya, если уж совсем по-уму) - всецело одобряю :)

We rise up for the things we believe in over and over again
Это самое правосудие все же существует. Не далее, как вчера в этом убедился.
Почти весь день проторчал в серверном помещении, наблюдал за тем, как там стены красят. Ничего не поделаешь, согласно "правилам игры" в этом помещении, коли оно открыто, всегда должен находиться кто-то из IT-службы, для контроля. Оно и правильно, вообще-то.
Замерз как самая последняя собака. Уже когда вылез оттуда после завершения всех работ, понял, что в столовую зайти не вариант, она банально закрыта. Из всего, что может предложить хоть какую-то снедь - автомат по продаже всяких шоколадок и им подобного. Стою, смотрю на него, верчу в руках полтиник и думаю, чего бы оттуда извлечь. Взгляд упирается в гофры с начинкой, после чего я понимаю - ОНО! Скармливаю купюру, набираю код и вижу, что в отсек для получения товара падает сникерс. Проклятие, не иначе как мозги вконец замерзли, ибо код товара я набрал не тот.
Нихрена, второй заход, я хочу эти несчастные вафли. Дважды проверяю, что пальцы нажимают нужные цифры. Вожделенная коробка падает со своей удерживающей спирали, а в полете каким-то образом целпяет с собой упаковку твикса и пачку M&Ms. Твою ж кавалерию, вот это поворот!
Есть все же справедливость, есть. Пусть немного и не в той форме, в какой ее обычно ожидаешь.

P.S.  Шан, вот не поверишь, не пришлось пнуть автомат НИ РАЗУ :)

@музыка: Aion - Ophidan bridge - Chanter's view

@темы: Этот веселый мир

We rise up for the things we believe in over and over again

Это приложение явно живет своей жизнью. Его особенность в том, что где-то через сутки после того, как телефон теряет доступ к интернету, Onedrive напрочь забывает идентификационную информацию. Иными словами - просит заново пароль ввести. Вводишь его - и клиент ругается, мол, неправильно ввели. Вводишь второй раз - и все отрабатывает как часы. И так каждый божий раз.
Ради интереса провел эксперимент. Когда клиент в очередной раз ругнулся на то, что слишком долго не мог войти в веб-службу, скормил ему заведомо неправильный пароль. И меня пропустили!
Чудны дела твои, Майкрософт...

@музыка: клац-клац-клац

@темы: Этот безумный мир, Security, Этот веселый мир

We rise up for the things we believe in over and over again
- Серега, знай, яд - это стихия!
- Да знаю. Кстати, физика - тоже стихия.
- Вот до сих пор не могу в мозгах уложить, как можно воздействовать физикой так же, как лучом. Например, холодным.
- Да как-как? Берешь в руки молоток...
---
- Кулл, смотри. Это Аз-Турраск. Хочу такой же, только древний!
---

@настроение: ржать!

@темы: Этот веселый мир, In-game

05:41

Coffee

We rise up for the things we believe in over and over again
На часах - 5:35. Сна - ни в одном глазу, проснулся 20 часов назад. Обычно в таких условиях меня уже должно нещадно рубить.
Наверное, за последние пару лет это первый случай, когда кофе из автомата, выпитый до полуночи, настолько долго меня "держит". И не дай бог не отпустит по выходу со смены, это будет весьма некстати.

@настроение: Как бы все же через 4 часа себя вырубить... Кувалдол не предлагать.

@темы: Этот безумный мир

We rise up for the things we believe in over and over again

В работе администратора есть такая штука, как наблюдение за параметрами среды. Иными словами - контроль температуры, влажности воздуха в помещениях. Не буду расписывать, зачем это требуется, это очевидно. Речь о другом, как это делать.
В прошлом подобная задача уже поднималась, только наблюдали не за температурой, а за состоянием серверного хозяйства. Знаю, что стандартный Ping не есть исчерпывающий и достоверный показатель работоспособности сервисов (именно сервисов, не серверов), но для серверов этого хватает, чего и добивались. Теперь задача почти такая же - есть кучка теплодатчиков, за которыми надо присматривать. Вся проблема в том, что датчики эти разбросаны георгафически, а штатные методы наблюдения за ними предполагают открытие большого количества разных программ. Поскольку всякого рода следящих утилит открыто уже и так немало, хотелось бы данный беспорядок причесать. Отдельным недостатком всех этих консолей-мониторов является то, что они молчаливы. То есть, на экране-то они покажут. что есть проблема, но за всем на экране не уследишь. А вот если будет, скажем, писк, это точно привлечет внимание. Попробуем поступить так же, как в свое время и с серверами.
Известно, что эти теплодатчики всю информацию, которую накапливают, отдают наблюдающим консолям через протокол SNMP - Simple Network Management Protocol. Несколько раз с ним сталкивался в прошлом, и всякий раз убеждался, что слово Simple там явно лишнее. Однако, в этот раз деваться некуда, с датчиками можно общаться только посредством SNMP.
Начинаем ковырять предметную область в надежде подружить SNMP и ставший уже просто незаменимым Powershell. Результат плачевен - "из коробки" Powershell работать с SNMP не умеет. Вместо этого предлагается к покупке целый набор надстроек для "мощной ракушки", который обещает нужный функционал. Ключевое слово - покупка. Понятное дело, что никто просто так "космокредитами" не поделится. И тут взгляд цепляется за следующую ссылку: vwiki.co.uk/SNMP_and_PowerShell
Ключевым моментом является библиотека со всеми необходимыми функциями. И там же представлена обвязка на Powershell для вызова этих фукнций. Утаскиваем, настраиваем, проверяем. На входе подаем IP адрес и OID сенсора. На что консоль возвращает - таймаут. Что-то не так. А что там может быть не так? Разрешенные адреса, Community name, пожалуй и все. Стоп. А ведь Community name ведь и забито нестандартное. Немного поменяв одну из функций получаем требуемый результат: скрипт подцепился к указанному сенсору, считал его показания и вывел их на экран. Почти победа, почти - потому что теперь нужно написать обвязку для проверки всех сенсоров, но это уже мелочи жизни. Итогом стал скрипт примерно следующего содержания:

Традиционно, пара слов о том, как это все готовить.
Исходные данные скрипту подаются методом, сходным с предыдущим скриптом: в каталоге с файлом самого скрипта есть папка с простыми текстовыми файлами, в которых и описаны все сенсоры для обхода. Формат данных там вот такой:
IP,OID,Community,Name,MinValue,MaxValue
где IP - адрес сенсора в сети, OID - идентификатор этого же сенсора (именно они являются чуть ли не ядром всего SNMP), Community - имя "сообщества" - читай, логина, Name - отображаемое имя (пример: "Датчик температуры в комнате 1234"), MinValue и MaxValue - соответственно, минимальное и максимальное значение для показаний с данного сенсора.
Строк заголовков в текстовиках быть не должно, скрипт сам все поймет. Самих текстовиков в каталоге config может лежать сколько угодно.
Отдельно о каталоге Include. Там хранится та обвязка на Powershell, через которую вызываются функции стащенного DLL-файла. Обвязка эта выполнена в виде трех файлов, описывающих три разные фукции. Можно их все свести в отдельный файл, но мне показалось удобнее держать их так, разбитыми. Возможно, в дальнейшем я это мнение поменяю.
Изначально фукнции Invoke-SNMPGet и Invoke-SNMPWalk содержат в себе жестко прописанный параметр Community, равный стандартному public. Поскольку это далеко не всегда выполняется, требуется изменить эти фукнции так, чтобы они принимали параметр Community в качестве аргумента. Делается это просто:

меняется на

И, соответственно:

меняется на

Вот, пожалуй, и все.

@музыка: Within Temptation - Shot in the dark

@темы: PowerShell, Scripting