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

С переменным успехом

Мой сайт для записи списка продуктов оказался внезапно очень важным для всей семьи. Ещё бы: без обзвонов, диктовки, согласования и прочей ботвы, каждый член семьи может зайти на сайт и обновить информацию: добавить продукт в список, удалить неактуальное, отметить покупку в режиме онлайн. Я знаю, что есть всякие гуглоформы и приложения, но у меня это работает именно как интегральный продукт: название товара сопровождается картинкой, список общий для определённых пользователей, весь функционал одинаково доступен как на телефонах/планшетах, так и в обычном десктопном браузере.

И всё бы хорошо, но хостится эта аппликация у бесплатных провайдеров, то есть безо всякого суппорта. Например, пока я был в Румынии, провайдер зачем-то заблокировал аккаунт. Судя по тикету, ему не понравилось, что я зарегистрировался с мейлом из домена rambler.ru (за что и был коллективно наказан). Ладно, тот инцидент улажен, но вот вчера случилось что-то совсем странное: база не просто упала, а "поломалась". Причём поломалась как-то странно: в консоли MySQL выскакивают предупреждения о сбое системных таблиц, но дамп и прочие запросы отрабатываются (и слава богу, иначе со старыми бекапами я бы вообще потерял лицо перед тёщей). Ну ошибки ошибками, а в какой-то момент и аппликация перестала логиниться к базе: пароль не принимается, выдаётся системная ошибка. Ошибку эту в нормальном мире решают как два пальца об асфальт, перезапуском mysqld, но я тут не хозяин, чтобы сервера перезапускать (а суппорта нет!)... Попытка создать новый аккаунт и накатить на него базу проваливается, ибо сервак у них общий, и он не сотрудничает со следствием.

Ну и конечно же, вся эта халабуда упала именно тогда, когда мы всей семьёй составили список, и жена с дочкой уехали по нему закупаться. А аппликация-то "ку-ку". Что делать? Гипс снимают, клиент уезжает! Но мы тоже не пальцем деланные: быстро (пока не получил от тёщи выговор с занесением) ищу аналогичный бесплатный хостинг, очень быстро создаю аккаунт, подымаю базу из бекапа, заливаю сорсы, подправляю файл конфигурации ... и всё работает! Это реально был случай экстремального администрирования.

Что характерно, параллельно с конвенциональным хостингом я позарился на хостинг от Амазона. Тот самый, знаменитый, облачный. Там всё такое из себя, пальцы веером, сопли пузырём, какие-то облака, виртуальные сервисы и прочие достижения технической мысли. Но вот поднять базу к бесплатному веб-аккаунту - низзя. Только за очень большие доллары, причём не в год, а в месяц! И мигрировать обычный MySQL бекап через их веб-форму мне тоже не удалось, ибо потребовалось заполнить какие-то формуляры, понасоздавать секретных сертификатов, ещё какой-то хрени... Ребяты, вы создаёте сервис для бесплатного хостинга или предоставляете мне доступ к материалам министерства энергетики США (ЕВПОЧЯ)? Почему бесплатный хостер сходу открывает мне доступ по FTP к моим сорцам, а вы разрешаете мне закачать ... ОДИН ФАЙЛ и только через веб-интерфейс? И если вы такие вумные, то почему нельзя просто задеплоить проект из чего-то локального (если я правильно понял, там даже github оказался не в почёте). Короче, обиделся я на них и вернулся в лоно обычных провайдеров. Более того, им я охотнее заплачу свои кровные доллары, потому что тёплое, LAMPовое, красивое.
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! Вы поняли: интеграция интеграцией, но нормальная работа мессенджера возможна только через оригинальный интерфейс! Естественно, там можно и скачать ролик и послать медиа вместе с комментарием. Но вы подумайте, фирма с миллиардными прибылями, с гигантской клиентской базой, с такими мощностями и технологиями, не может корректно объединить интерфейсы двух собственных апликаций! Тихий ужас, у меня нет слов.