Category: it

Category was added automatically. Read all entries about "it".

Chua

Верхний пост - об этом журнале :-)



География посетителей:


Locations of visitors to this page

RSS этого журнала

Облако слов


Мои "сериалы":

Воспоминания о доисторическом


1 2 3 4 5 6 7 8 9 10 11 12 13

Вирши


1 2 3 4

Впечатления от Америки


0 1 2 3 4 5 6 ...

Рецензии


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91


Collapse )
Matrix

Тряхнул стариной (и немного новизной)

Для нового проекта в области DevOps учу кучу незнакомых вещей: все эти IPMI, DCMI, SNMP и прочая, и прочая.
В одной из под-задачек понадобилось проверить, а открыт ли https-порт (прежде чем ломиться туда с криками "сова, открывай, медведь пришёл!"). Насколько мне было известно, для тупых проверок нужен 'nc хост порт', вот только в автоматическом режиме это не работает. Попробовал стандартный флаг "-z" - в нашей версии "nc" его тупо нет (sic!).

Ну чо, скачал сорцы nmap, сконфигурировал, собрал и установил - voila, система заговорила на нужном языке! Совсем как в старые добрые времена ./configure; make; make install

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

I like my job |-)

Collapse )
Matrix

У криворучек свои достижения

Кто-то учится ракеты на Марс отправлять, а ВПС к 50 с лишком годам научился Апач ставить, да чтоб со всеми нужными плагинами и клиентами. Задача была поставлена максимально приближенная к боевой - восстать из руин (что с давних пор официяльно называется би-си-пи, то есть "что будем делать, если всё пропало"). Мне предоставили голый-босый убунто-сервер дабы на нём восстановить фунциклирование нашей системы. Начал я с простого - воткнул все сорсы под /var/www/html. Поскольку веб-морда основана на вышеупомянутом Апаче, он был поставлен при помощи элементарного yum install httpd. Естественно, этого мало - нужна скотинка под названием пе-ха-пе: yum install php -y. Ну а дальше начался полный хаос: плагины сыпались отовсюду, это был и XML, и LDAP, и Оракл с Редисом. Естественно, Ораклу недостаточно было просто встать как приложение к пе-ха-пе, ему клиента подавай. Пришлось немного пожульничать и скопировать клиентские библиотеки. Но это не сильно помогло - динамические библиотеки Апач так и не увидел (а очень хотел - так в один голос советовали умные люди из разных нагугленных форумов). Пропустив мат-перемат пострадавших, нашёл в тех постингах зацепку - файл конфигурации должен определять переменные ORACLE_HOME и LD_LIBRARY_PATH (наши старые знакомые по аналогичным затыкам в Пайтоне). Каким-то чудом я прекратил безрезультатные поиски в /etc/httpd/conf* и подсмотрел /etc/sysconfig/httpd на "донорском" хосте - там-то всё и было прописано простым и понятным присвоением, как в шелле. После этого привычное телодвижение по рестарту service httpd restart и вуаля - приложение забежало как полагается.
Matrix

Почувствовал себя Митрофанушкой.

Оказывается, мои самодельные фреймворки (10-летней и более давности) на Перле и Пайтоне были ORM.

Действительно, интуитивно проще оперировать объектами и методами, а не запросами, но в какой-то момент всё упирается в какой-нибудь мудрёный JOIN и приходится вытаскивать на свет божий SQL. Зато как классно выглядит схема базы данных на языке высокого уровня или даже на Data Serialization Language вроде YAML. В результате можно деплоить базу прямо из аппликации.
Matrix

Back to the USSR

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

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

И чем же занимается ВПС в 2020-м годе от рождества Христова? Решаем проблемы передачи параметров в функцию. Только за окном другие времена, а на экране - сраный PHP (я уже подбирал разные эпитеты к этому недо-языку). Итак, задачка состояла в том, чтобы передать в функцию пары "название параметра" + "значение параметра". Проблема оказалась в том, что получив указатель на параметр, этот недо-язык не спешит извлечь его, а тупо хранит у себя внутри. И если не приведи боже это была переменная цикла, то он радостно скопирует N раз указатель на неё же, самодовольно лыбясь обезумевшему программисту в лицо: "ну вот, что передали, то и получили".

Collapse )
Matrix

Ну чо, я - зверь...

Серьезно, вот раньше бы я просто посыпал голову пеплом.

Итак, начну издалека. В своё время была написана на Пайтоне довольно мудрёная модульная система каталогизации коллекций. Отдельно - веб-морда (тоже на Пайтоне), отдельно - сервис для индексации коллекции на конкретном хосте (можно индексировать не только съемные носители, но и локальные диски, в том числе и удалённо). Ну и совсем отдельно - сами скрипты, которые просто заходят в нужную папочку и всё-всё там индексируют (согласно типу коллекции). То есть система масштабируется простым добавлением нового типа коллекции и реализацией её индексатора.

Но возникла ма-а-аленькая проблемка: в какой-то момент одна из коллекций на одном из носителей перестала индексироваться. Процесс (инициированный веб-сервером, запущенный из локального сервиса) где-то бухается и молча прерывает обновление данных. Что делать?

Если бы на моём месте был бы я пятилетней давности, то начал бы вставлять отладочные печати и городить аналогичную ерунду. Но на то мы и профессионалы - обернул подозрительные методы декоратором pysnooper и в два счёта нашел проблемный кусок кода, вызвавший exception.

Следующий этап: победив Пайтон, пытаюсь занести информацию в SVN, а не тут-то было - получаю какие-то странные сообщения, что путь к репозиторию не найден. Потыкался, сравнил путь - действительно, при переезде на новый лептоп облачное хранилище оказалось в другой папке. Но и мы не пальцем деланные - запускаю svn relocate с путём новой папки и ... svn commit работает! Облачный репозиторий принял мои изменения без проблем. Диффы правда лучше выглядят через TortoiseSVN - всё-таки GUI он и есть GUI.

I like my job :)
Matrix

Слово похвалы китайским программистам

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

Есть такое образное выражение "разбуди среди ночи и спроси ...". Вот так и у меня получилось - только продрал глаза по будильнику, и тут же получил задание от дражайшей половины: подключиться по Зуму к вещанию очередного онлайн-занятия от её тренера, причём перевести изображение на телевизор. Ну ладно, думаю, первая часть задания сводится к клику по линку. А вот вторая оказалась непростой: у меня-то в телефоне функция дублирования изображения на телевизор встроена в систему, даже думать ничего не надо, но у жены-то "Самсунг"... Потыкался по системному меню - хрена лысого. Поискал приложения - нет ничего похожего. Поставил первое попавшееся фирменное от Самсунга - задница: ребята разрешают каст изображения только на Самсунговский же телевизор! И только скачав не-фирменное приложение получил вещание на любой смарт-ТВ.

Обратная ситуация: поскольку универсальный пульт, купленный онлайн, не умеет регулировать таймер на наших кондиционерах, пришлось использовать "план Б" - инфракрасный порт и фирменное приложение от Щяоми. Там даже есть всякие экзотические настройки, для которых "конвенциональному" пульту просто не хватало кнопок. Ну всё было бы хорошо, но смартфон - штука индивидуальная. У меня он даже на отпечаток пальца настроен, так что не всякий его и откроет. Проверил, есть ли у жены в новом аппарате инфракрасный порт - фигушки. Зато он наличествует в старом, используемом без симки, для игр. Ура, пытаюсь найти что-то, рекомендуемое гуглом - выходит какая-то фигня. И тут мне на глаза в плей-маркете попадается знакомый значок Щяомайского пульта. Ставлю его на Самсунг, и ... всё работает! Без рекламы, с настройкой в три касания, со всеми плюшками. То есть Щяомайцы (в отличие от Самсунга) не стали гнуть пальцы веером "только для нашей техники", за что им мой низкий поклон.

UPDATE: у Самсунга обнаружена кнопка в главном меню, выполняющая Miracast вещание на любой смарт-TV. Мои извинения уважаемой фирме. Я хмар!
Matrix

Я стар, я суперстар

Покупаю новую клаву. Продавец говорит, что она вместе с мышью подключается к одному общему USB-донглу. Киваю головой, прихожу домой, открываю коробку - WTF? Мышь и клава на месте, а донгл-то где? На следующий день иду в ту же контору и начинаю заранее подготовленный монолог, мол где вставлялка. Продавец молча открывает ... крышечку для батарейки у мыши и вынимает оттуда ту самую фитюльку. Я публично объявляю "я хмар" *) и хлопаю себя по лбу.

Ну ладно, это конкретная модель от китайских дизайнеров, тут могут быть нюансы. А вот другая ситуация - надо переформатировать/заменить харддиск в дочкином лептопе. Приемщик спокойно забирает аппарат, а у меня всплывает вопрос - на диске же купленная винда, откуда туда попадет лицензия? На что мне спокойно сообщают, что в современных системах такая фигня уже прописана в BIOS! Чувствую себя совсем отставшим от жизни.

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

UPDATE

"вопрос на засыпку" снимается - мобильные браузеры тупо кешировали старые версии css-файла и доблестно гнали пургу.
Это были плохие новости. Хорошие новости состоят в том, что ко всем include-файлам в адресе надо приписывать версию, дабы выкрутить ручонки механизмам кеширования.

<link rel="stylesheet" href="main.css?ver=<?= $ver ?>">

Версию можно генерить в PHP-коде даже не заморачиваясь с препроцессингом перед аплоадом, а тупо подрядив CVS/SVN или другую систему сорс-контроля.

$rev = str_replace(' $', '', str_replace('$Rev: ', '', '$Rev: 6.00 $'));

Так что пользуйтесь автоматизацией и не изобретайте велосипед.
_____________________

* [я хмар] = "вот осёл" (арабск.)
Matrix

Пейсбук - очередной рекорд неудобства интерфейса

Вы наверняка слышали, насколько ужасен интерфейс у "синей соцсети". Гугл-поиск на всех языках мира забит вопросами "как в Фейсбуке ..." и далее идёт список всего, что только можно. То есть глядя на экран, догадаться как им пользоваться - задачка для самых зорких и находчивых. Приведу простой пример: кликаем на "колокольчик" оповещений - открывается список событий. Хотите отметить все как прочитанные - вуаля, прямо между списком и колокольчиком есть такая строчка. А теперь кликаем на соседнюю иконку "сообщения мессенждера" - открывается список последних сообщений, но отметить все как прочитанные, используя ту же позицию в меню, уже нельзя - этот пункт оказался ... внизу списка сообщений.

Интегрируя тот же мессенджер в ленту, эти гении сделали в десктопной версии такое манюсенькое окошко, что на нем невозможно выбрать ни одну опцию при просмотре видео. Хотите посмотреть видео как белый человек? Ищите в меню опцию "открыть в мессенджере". При этом вы остаетесь в домене фейсбука, но вам открывается абсолютно другой интерфейс на весь экран. Вы думаете, что теперь можно комфортно пользоваться мессенджером? Зубби-ба-рубби! При попытке переслать полученное видео вам не дадут возможности добавить к нему комментарий. Вот такой замечательный мессенджер, без текста при форварде медиа-объектов. Тыкаться в меню бесполезно. Бесполезно пытаться сохранить ролик - нет такой опци, хоть лопни.

Естественно, я пошел на поклон ко всезнающему Гуглу и он выдал мне подробный видеоролик, как эту пакость обмануть. Пропустив вступление про мобильную версию, я перешел к десктопной. И что же я вижу во первых строках? Откройте сайт messenger.com! Вы поняли: интеграция интеграцией, но нормальная работа мессенджера возможна только через оригинальный интерфейс! Естественно, там можно и скачать ролик и послать медиа вместе с комментарием. Но вы подумайте, фирма с миллиардными прибылями, с гигантской клиентской базой, с такими мощностями и технологиями, не может корректно объединить интерфейсы двух собственных апликаций! Тихий ужас, у меня нет слов.
Matrix

Не было счастья, да несчастье помогло

Как я уже упоминал, на моём рабочем компе после очередного обновления винды перестали работать все "самодельные" ассоциации приложений по расширению файла. Вот такой лес, без деревьев. Офисные - пожальте, а всякие VNC, Пайтон, и медиафайлы - пошли на мороз. Хорошо хоть картинки через Пикасу открываются.

Погоревал я, и ... накатал скриптик. Ясное дело, работает он только из командной строки FAR, зато как работает! Просто загляденье. Итак, чтобы открыть автоматически ассоциированную программу надо в командной строке добавить имя бат-файла (для скорости названного AA.BAT) и закинуть ему через Ctrl+Enter файл в качестве аргумента. Всё, батничек вызывает через виндовую команду START интерпретатор Пайтона (специальную не-консольную версию) и он спокойненько открывает файл при помощи расписанного в собственной конфигурации приложения, будь то GIMP, MediaMonkey, SumatraPDF или VLC. Пара часов сидения за компом, и проблема решена, причём теперь я сам решаю, какое действие будет по умолчанию (опционально можно добавлять альтернативные действия, например "редактировать" или "распечатать").

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

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

Ну и чтобы вы не скучали, расскажу ещё одну байку, но для баланса - из мира Линуксов. ВПС получил как-то задачу: научить систему распаковывать архивы на экзотической платформе (Винда ARM64). Решение было простым - использовать пайтоновскую библиотеку, которая распаковывает хоть чёрта лысого, независимо от операционки и типа процессора. И вот, через месяц, у линуксовых групп начались проблемы: тот самый скрипт падает на распаковке архива. Что за ёперный балет, подумал я, - у всех работает, а у них - падает. Начал копать, посмотрел сообщение об ошибке и о...бомлел: архив содержал некорректные симлинки! Открываю его через less - действительно сплошные линки на самого себя, кому же такое понравится? Впрочем, штатный tar раскрывал такой архив без проблем. Пришлось искать виноватых и наказывать непричастных. Оказалось, что при создании архива tar получил очень противоречивые аргументы - одна и та же папочка упоминалась дважды. Что же сделал этот *** умник? Создал внутри архива линки на самих себя!!! Реально, попробуйте запаковать через tar директорию и тут же вместе с ней - её поддиректорию. Получите того самого монстра. И пусть на распаковке падал только старый Пайтон2, всё равно, история не из приятных.