Онлайн
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.
- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proЛог жизни
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
Самый длинный день в году и информационная разгрузка
Сегодня был день солнцестояния — самый длинный день в году. Обычно я проводил его на даче, с прогулкой к реке и жарке шашлыка. Но в этом году году такой возможности не было. Даже не получилось выбраться к реке, хотя была такая мысль. Зато получился день информационной разгрузки: в Интернет только несколько раз за день выскакивал ненадолго. Только совсем уже вечером вышел нормально и почти доделал то, что обещал GoRo по SuperMon_Bot. И настроился было лечь спать пораньше, но в итоге получилось как всегда: только сейчас собираюсь выключить компьютер.
Спад продолжается
После слишком активной недели, когда безвылазно дома я провёл всего два дня: пятницу и воскресенье, наконец-то возникла возможность замедлить жизнь и отсидеться дома. Ничем полезным, правда, заниматься не получается, все ресурсы уходят просто на то, чтобы прийти в себя. Да и биоритмический спад продолжается.
Только вчера с 10geekом обсудили его CSS framework. Получилась очень годная стилизация форм, и теперь я планирую начать его использовать при разработке своих проектов на базе MLFW. Только вот гостевую опять переделывать придётся, хоть и не слишком много.
Ещё возникла мысль перевести/дописать несколько своих статей об оптимизации времени загрузки сайта из профблога и опубликовать их на Hashnode. В частности, по тому, как улучшить показатель CLS (content layout shift). Они по формату и тематике вполне там будут уместны! И шансы быть замеченным там достаточно существенны.
Только вчера с 10geekом обсудили его CSS framework. Получилась очень годная стилизация форм, и теперь я планирую начать его использовать при разработке своих проектов на базе MLFW. Только вот гостевую опять переделывать придётся, хоть и не слишком много.
Ещё возникла мысль перевести/дописать несколько своих статей об оптимизации времени загрузки сайта из профблога и опубликовать их на Hashnode. В частности, по тому, как улучшить показатель CLS (content layout shift). Они по формату и тематике вполне там будут уместны! И шансы быть замеченным там достаточно существенны.
Перепрошёл Starcraft
Сегодня закончил перепроходить Starcraft. В отличие от первого прохождения (которое было, кажется, в 2000 или 2001 году), эмоций было гораздо меньше. Даже от эпической последней битвы протоссов и землян против зергов и героического самопожертвования Тассадара, которая так впечатлила меня прошлый раз. То ли потому что уже знал основные сюжетные повороты (хотя множество второстепенных деталей уже забыл), то ли потому, что в этот раз играл на английском, то ли по каким-то ещё причинам.
Последнюю карту сначала пытался пройти полностью землянами, а протоссов использовал только для обороны и добычи ресурсов. Но не тут-то было. Несколько волн атак захлёбывались: не успеваю координировать действия всех отрядов. И тогда построил протоссами 6 carrierов, провёл их по краю карты к силам землян (3 боевых крейсера и два отряда морпехов), и этих сил хватило прорвать оборону противника. А чтобы поставить красивую точку, последний удар по зерговскому Overmindу нанёс ядерной бомбой.
Ещё обратил внимание на то, что в игре появился такой показатель как APM — количество действий в минуту. У меня этот показатель лежит в диапазоне 25-30, но каково же было моё удивление, когда узнал, что у игроков мирового уровня он достигает значений порядка 200. Как они успевают так быстро мышкой шевелить? (Пусть даже делая часть действий с клавиатуры.)
Последнюю карту сначала пытался пройти полностью землянами, а протоссов использовал только для обороны и добычи ресурсов. Но не тут-то было. Несколько волн атак захлёбывались: не успеваю координировать действия всех отрядов. И тогда построил протоссами 6 carrierов, провёл их по краю карты к силам землян (3 боевых крейсера и два отряда морпехов), и этих сил хватило прорвать оборону противника. А чтобы поставить красивую точку, последний удар по зерговскому Overmindу нанёс ядерной бомбой.
Ещё обратил внимание на то, что в игре появился такой показатель как APM — количество действий в минуту. У меня этот показатель лежит в диапазоне 25-30, но каково же было моё удивление, когда узнал, что у игроков мирового уровня он достигает значений порядка 200. Как они успевают так быстро мышкой шевелить? (Пусть даже делая часть действий с клавиатуры.)
Возвращение домой и решение вопроса с пылесосом
Сегодня наконец-то вернулся в Москву. Хотел было выехать часов в 14, но опять получилось так, что день шёл мимо. Опять это отвратительное чувство беспомощности перед утекающим непонятно куда временем, почти как в моих ночных кошмарах! Только в 15:30 сел на электричку, и то пришлось ехать без обеда (так как запаниковал, что ничего не успеваю) и обедать во «Вкусно и Точка» в Новогиреево, куда добрался почти в еле живом состоянии. В общем, повторяется 2019 год, который я тогда обозвал «годом тяжёлой дороги».
Добравшись до дома и немного отлежавшись после поездки, отправился на почту — забирать посылку с аккумулятором для пылесоса, который ещё в апреле заказал на AliExpress. Хотелось проверить, получится ли пылесос оживить. Вернувшись домой, вскрыл коробку, померил напряжение на аккумуляторе. Вроде всё хорошо: 15 Вольт, как полагается. Но я был бы не собой, если бы просто сделал что-то с первого раза!
Дальше всё происходило так: установил установил аккумулятор в пылесос, попытался сразу запустить — никакой реакции. Решил, что аккумулятор недостаточно заряжен, поставил на зарядку — вроде всё хорошо, процесс пошёл. Где-то через час зарядка закончилась. Я попытался включить пылесос снова, но безрезультатно. Решил, что дело не в аккумуляторе, и пошёл мыться. И только уже когда сидел в ванной, пришло озарение, что я делаю не так! (Почти как у Архимеда, хех.) Дело в том, что у этого пылесоса сбоку есть аппаратный выключатель, про который я благополучно забыл, так как давно им не пользовался. И конечно же, он был выключен! После включения всё заработало. Так что робот-пылесос снова на боевом дежурстве! А общий итог этой истории — -1200 кзолоту деньгам, но +1 к боевому духу и +1% к навыку ремонта.
Добравшись до дома и немного отлежавшись после поездки, отправился на почту — забирать посылку с аккумулятором для пылесоса, который ещё в апреле заказал на AliExpress. Хотелось проверить, получится ли пылесос оживить. Вернувшись домой, вскрыл коробку, померил напряжение на аккумуляторе. Вроде всё хорошо: 15 Вольт, как полагается. Но я был бы не собой, если бы просто сделал что-то с первого раза!
Дальше всё происходило так: установил установил аккумулятор в пылесос, попытался сразу запустить — никакой реакции. Решил, что аккумулятор недостаточно заряжен, поставил на зарядку — вроде всё хорошо, процесс пошёл. Где-то через час зарядка закончилась. Я попытался включить пылесос снова, но безрезультатно. Решил, что дело не в аккумуляторе, и пошёл мыться. И только уже когда сидел в ванной, пришло озарение, что я делаю не так! (Почти как у Архимеда, хех.) Дело в том, что у этого пылесоса сбоку есть аппаратный выключатель, про который я благополучно забыл, так как давно им не пользовался. И конечно же, он был выключен! После включения всё заработало. Так что робот-пылесос снова на боевом дежурстве! А общий итог этой истории — -1200 к
О неприятии гендерной роли
Похоже, у меня опять биоритмический спад. Причём и по физической составляющей биоритма, и по интеллектуальной. Даже скорость чтения упала очень сильно. А сегодня ещё плохо спал, сны были неприятные и тревожные, несколько раз просыпался. Встал поздно, и день прошёл куда-то мимо. Даже за компьютер толком не садился, только перед отъездом синхронизацию провел.
Зато в эти дни осознал то, что установки типа «нужно не лениться и тогда заработаешь много, а если не можешь — сам виноват» вызывают у меня неприятие не сами по себе, а именно потому что где-то в глубинах сознания они у меня связаны с мужской гендерной ролью.
А ещё осознал, насколько же масштабную роль играет в моей жизни неприятие этой роли, борьба за право не быть мужиком, если так можно выразиться. Фактически, почти всё, что вызывает у меня агрессию, злость и т.п., так или иначе, если как следует покопаться, уходит корнями туда: в угрозу, что меня в эту роль будут запихивать либо через принуждение, неоправданные ожидания, либо через пассивную агрессию. И когда я рассуждал об обществе, где каждый может быть собой, по сути, я хотел одного: общества, где можно не бояться подобного.
Зато в эти дни осознал то, что установки типа «нужно не лениться и тогда заработаешь много, а если не можешь — сам виноват» вызывают у меня неприятие не сами по себе, а именно потому что где-то в глубинах сознания они у меня связаны с мужской гендерной ролью.
А ещё осознал, насколько же масштабную роль играет в моей жизни неприятие этой роли, борьба за право не быть мужиком, если так можно выразиться. Фактически, почти всё, что вызывает у меня агрессию, злость и т.п., так или иначе, если как следует покопаться, уходит корнями туда: в угрозу, что меня в эту роль будут запихивать либо через принуждение, неоправданные ожидания, либо через пассивную агрессию. И когда я рассуждал об обществе, где каждый может быть собой, по сути, я хотел одного: общества, где можно не бояться подобного.
Ещё одно изменнеие планов
И снова внезапное изменение планов. Вчера был весьма результативный день в плане работы над MLFW. Дописал модуль flash-уведомлений, кое-что переделал в классе шаблонов, сделал валидатор имён файлов. Понял, что потребуется ещё рефакторинг — всё-таки вынесу HTML-код полностью в отдельные файлы вместо классов-обёрток, как задумывал изначально. Кроме того, это даст единый подход при использовании любых шаблонов: хоть на чистом PHP, хоть с шаблонизаторами типа Twig или MtHAML.
Но, как уже давно известно, за днём больших результатов следует день спада. Поэтому решил не пытаться заставлять себя повторять вчерашний результат, а отправиться на прогулку на велосипеде. Сначала хотел съездить куда-нибудь к Карпятнику, но решил, что в выходные там будет слишком много народа. И вдруг пришла в голову совершенно неожиданная идея: поехать на новую квартиру, оставить велосипед там и погулять по окрестностям. Потом оказалось, что это была подсказка от высших сил. Подъехав к дому, я обнаружил, что 14-ого числа будет проверка газа и вентиляции, и нужно обеспечить присутствие кого-либо в квартире. В итоге планы пришлось корректировать: завтра вместо того, чтобы ехать днём в Москву, вечером поеду на квартиру, там переночую, и в Москву вернусь уже послезавтра.
А вот прогулка получилась просто отличной! Посмотрел стадион, местный ДК, в итоге только пешком находил 4300 шагов, и суммарно (с учётом поездки на велосипеде) набрал 70 баллов активности по данным Google Health. Но домой приехал сильно уставший, и остаток дня прошёл куда-то мимо.
Но, как уже давно известно, за днём больших результатов следует день спада. Поэтому решил не пытаться заставлять себя повторять вчерашний результат, а отправиться на прогулку на велосипеде. Сначала хотел съездить куда-нибудь к Карпятнику, но решил, что в выходные там будет слишком много народа. И вдруг пришла в голову совершенно неожиданная идея: поехать на новую квартиру, оставить велосипед там и погулять по окрестностям. Потом оказалось, что это была подсказка от высших сил. Подъехав к дому, я обнаружил, что 14-ого числа будет проверка газа и вентиляции, и нужно обеспечить присутствие кого-либо в квартире. В итоге планы пришлось корректировать: завтра вместо того, чтобы ехать днём в Москву, вечером поеду на квартиру, там переночую, и в Москву вернусь уже послезавтра.
А вот прогулка получилась просто отличной! Посмотрел стадион, местный ДК, в итоге только пешком находил 4300 шагов, и суммарно (с учётом поездки на велосипеде) набрал 70 баллов активности по данным Google Health. Но домой приехал сильно уставший, и остаток дня прошёл куда-то мимо.
День ЖЖ
Сегодня у меня получился день ЖЖ какой-то. Началось всё с того, что в еженедельной рассылке обнаружил статью про неэкономных людей. Сама по себе статья достаточно банальна и особой ценности не представляет. Но вот в комментариях обнаружилось противостояние адекватных людей и любителей вскукарекнуть на тему «нужно больше зарабатывать, тогда вся эта хрень с попытками экономии улетучится». Естественно, пройти мимо такого я не мог! И тут же начал строчить ответы. К моему удивлению, из трёх человек, с которыми я вступил в спор, двое оказались вполне адекватными людьми. А вот с третьим нормально говорить не получилось — он выдавал сплошной поток либо необоснованных утверждений, либо просто общих рассуждений. А любые попытки что-либо конкретизировать уходили в никуда. Но увы, даже в таких условиях почувствовать себя победителем сложно, поскольку непонятно, слился человек окончательно или взял паузу и через пару-тройку дней сможет что-то ответить.
Впрочем, дело не конкретно в нём, а в том, что меня по-прежнему бесит, что есть люди, которые тот факт, что они тратят деньги на всякую фигню, считают обоснованием своего превосходства над теми, кто живёт экономя. Конечно, можно было бы потыкать им в нос статьёй «Богатство — это то, чего вы не видите», но, думаю, бесполезно. Причём, сколько я ни сталкивался с такими, складывается впечатление, что у них мышление как под копирку. Интересно, откуда это берётся. Это что, пережиток того, что феминистки называют МГС (мужской гендерной социализацией)?
Пока я писал эти комментарии, на глаза попалась ссылка, ведущая в блог scinquisitor.
Впрочем, несмотря на эти бурные дискуссии, за сегодня успел ещё и кое-что по MLFW сделать, и шашлык пожарить, и на короткую прогулку сходить, и даже попытаться начать обновление своего сервера, но неудачно.
Впрочем, дело не конкретно в нём, а в том, что меня по-прежнему бесит, что есть люди, которые тот факт, что они тратят деньги на всякую фигню, считают обоснованием своего превосходства над теми, кто живёт экономя. Конечно, можно было бы потыкать им в нос статьёй «Богатство — это то, чего вы не видите», но, думаю, бесполезно. Причём, сколько я ни сталкивался с такими, складывается впечатление, что у них мышление как под копирку. Интересно, откуда это берётся. Это что, пережиток того, что феминистки называют МГС (мужской гендерной социализацией)?
Пока я писал эти комментарии, на глаза попалась ссылка, ведущая в блог scinquisitor.
(Кстати, вот она, польза ссылок на другие материалы, нужно у себя на сайте, пожалуй сделать хотя бы вывод ссылок на следующую/предыдущую записи или записи с теми же тегами.)
Просмотрев несколько последних материалов, я увидел статью про борьбу с мракобесием. Она вызвала у меня противоречивую реакцию, и я даже решил написать ответ у себя на сайте http://4xpro.ru/science/mrakobesie/.Впрочем, несмотря на эти бурные дискуссии, за сегодня успел ещё и кое-что по MLFW сделать, и шашлык пожарить, и на короткую прогулку сходить, и даже попытаться начать обновление своего сервера, но неудачно.
Обновление VDS откладывается
Мда, с великим обновлением сервера всё оказалось не так просто. Сегодня попытался было сделать dist-upgrade. Вроде всё начиналось нормально: пакеты скачались. Но при попытке обновить libc появилось сообщение, что нужна более новая версия ядра. А ядро я обновить не могу, потому что там тип виртуализации — Xen, и за ядро отвечает хостер. Так что обновление откладывается. Жаль только, что 60 руб на включение платных backupов на момент обновления потратил…
Стал искать альтернативные варианты. Пока смотрю в сторону тарифа «Прогрев» на FirstVDS, он всего 199 руб/мес. При этом оперативки даётся целый гигабайт, а не 512 Мб, как у меня сейчас (а можно взять с SSD вместо NVMe и будет ещё дешевле, при этом при моих нагрузках разница по скорости вряд ли будет существенной). Но с другой стороны, перетаскивать все сайты и переносить настройки DNS — это столько времени уйдёт… В общем, видимо, займусь этим либо когда в Москву вернусь, либо вовсе дождусь, когда у них Debian 12 появится. (Как выяснилось, он вышел прямо сегодня.)
Стал искать альтернативные варианты. Пока смотрю в сторону тарифа «Прогрев» на FirstVDS, он всего 199 руб/мес. При этом оперативки даётся целый гигабайт, а не 512 Мб, как у меня сейчас (а можно взять с SSD вместо NVMe и будет ещё дешевле, при этом при моих нагрузках разница по скорости вряд ли будет существенной). Но с другой стороны, перетаскивать все сайты и переносить настройки DNS — это столько времени уйдёт… В общем, видимо, займусь этим либо когда в Москву вернусь, либо вовсе дождусь, когда у них Debian 12 появится. (Как выяснилось, он вышел прямо сегодня.)
Внезапное изменение планов
Внезапно изменились все планы. Вчера отправился на длинную велопрогулку. Побывал в ближнем сосновом бору, оттуда выехал на Великий луг и добрался до Нового Капрятника, возле которого стал бывать очень редко после строительства новой дороги — слишком уж неудобно добираться. Посидел на его берегу, сфотографировал ставший уже классическим вид, и ушёл глубоко-глубоко в себя, почувствовав гармонию с миром. После всего этого расхотелось уезжать! Тем более выяснилось, что скорее всего, быстро приехать снова не получится. В итоге решил остаться на даче до вторника, а не ехать сегодня.
Второе изменение планов произошло вечером. Изначально я планировал вернуться к работе над MLFW и сделать класс для flash-уведомлений (уведомления о последних действиях, которые либо всплывают, либо выводятся на следующей после редиректа странице, при этом нужно сделать их запоминание на сервере). Но не тут то было!
Началось всё с того, что я обнаружил у себя письмо от FirstByte, где когда-то держал VDS для socionics.me, а потом там же размещал и SiteKnockerBot. Потом я тот VDS удалил, но пустой аккаунт остался. И вот FirstByte написал об акции, где бывшим клиентам дарится промокод на два месяца бесплатного VDS. Упускать халяву — это не моё, поэтому я решил использовать эту возможность, чтобы всё-таки попытаться поставить и потестировать движок сообщества Forem. Но оказалось, что это не так просто! Сначала хотел было ставить полностью вручную, но почитав мануал, понял, что это плохая идея: слишком много всего ставить и настраивать. Решил пойти более простым путём — установить через docker-compose, как уже пытался когда-то на виртуальной машине. На этот раз установка прошла чуть дальше, но всё равно без проблем не обошлось. Сначала долго писалось, что нет возможности подключиться к какому-то узлу. И в процессе начального заполнения базы посыпались ошибки. Потом это решилось, но из-за того, что база не заполнена, попытка зайти на сайт стала приводить к ошибке 500.
С docker-compose я дела особо не имел, и поэтому как перевыполнить нужную задачу, не знаю. Стал было пытаться разобраться, но тут снова случилось непредвиденное: в полночь пришло уведомление, что новый серверпревратился в тыкву отключили за неуплату! Вот тебе и обещанные два месяца халявы! Скорее всего, дело в криво настроенном биллинге, куда, видимо, забыли заложить информацию об этой акции, либо же в том, что у меня старый аккаунт с ежесуточной оплатой, а там предполагалась ежемесячная. Конечно, можно было бы написать в техподдержку и решить этот вопрос. Но я решил истолковать это как сигнал от высших сил, что нужно не распыляться, а продолжать заниматься MLFW (первый раз они давали такую подсказку через Таро), и завтра вернусь к нему.
А ещё я хотел сегодня выбраться на вечернюю прогулку, но из-за проблем с Forem упустил момент. Пришлось ограничиться созерцанием последних моментов заката через окно.
Второе изменение планов произошло вечером. Изначально я планировал вернуться к работе над MLFW и сделать класс для flash-уведомлений (уведомления о последних действиях, которые либо всплывают, либо выводятся на следующей после редиректа странице, при этом нужно сделать их запоминание на сервере). Но не тут то было!
Началось всё с того, что я обнаружил у себя письмо от FirstByte, где когда-то держал VDS для socionics.me, а потом там же размещал и SiteKnockerBot. Потом я тот VDS удалил, но пустой аккаунт остался. И вот FirstByte написал об акции, где бывшим клиентам дарится промокод на два месяца бесплатного VDS. Упускать халяву — это не моё, поэтому я решил использовать эту возможность, чтобы всё-таки попытаться поставить и потестировать движок сообщества Forem. Но оказалось, что это не так просто! Сначала хотел было ставить полностью вручную, но почитав мануал, понял, что это плохая идея: слишком много всего ставить и настраивать. Решил пойти более простым путём — установить через docker-compose, как уже пытался когда-то на виртуальной машине. На этот раз установка прошла чуть дальше, но всё равно без проблем не обошлось. Сначала долго писалось, что нет возможности подключиться к какому-то узлу. И в процессе начального заполнения базы посыпались ошибки. Потом это решилось, но из-за того, что база не заполнена, попытка зайти на сайт стала приводить к ошибке 500.
С docker-compose я дела особо не имел, и поэтому как перевыполнить нужную задачу, не знаю. Стал было пытаться разобраться, но тут снова случилось непредвиденное: в полночь пришло уведомление, что новый сервер
А ещё я хотел сегодня выбраться на вечернюю прогулку, но из-за проблем с Forem упустил момент. Пришлось ограничиться созерцанием последних моментов заката через окно.
Как уложить сайт на полдня
Вчера заглянул в настройки VDS и обратил внимание, что в качестве имени хоста там прописан не 4xpro.ru, который на данный момент является главным сайтом из всех расположенных там, а typologies.ru. Решил поменять это, а потом сразу же ушёл спать, будучи уверенным, что на работу сайтов это никак не повлияет. Но не тут-то было. Оказывается, если имя хоста на сервере совпадает с именем хоста в запросе, то Apache использует конфигурацию по умолчанию вместо той, где это имя хоста прописано явно. А у меня конфигурация по умолчанию вела на мои сайты на TextCMS, так как их у меня много, и прописывать ServerAlias для всех было лень. В итоге вместо моего личного сайта стал выдаваться один из них.
Это отследил мой SiteKnockerBot и начал заваливать меня уведомлениями, что с сайта пропали ключевые слова. Но тогда я ушёл спать и отключил Интернет на мобильных устройствах, а днём хотел успеть на прогулку в солнечное время, поэтому в Интернет не выходил. В итоге то, что сайт не работает, обнаружил только вечером. И ещё пришлось повозиться с настройками Apache, чтобы решить эту проблему с сохранением имени хоста.
В общем, порой даже такие мелкие изменения могут иметь серьёзные последствия!
Это отследил мой SiteKnockerBot и начал заваливать меня уведомлениями, что с сайта пропали ключевые слова. Но тогда я ушёл спать и отключил Интернет на мобильных устройствах, а днём хотел успеть на прогулку в солнечное время, поэтому в Интернет не выходил. В итоге то, что сайт не работает, обнаружил только вечером. И ещё пришлось повозиться с настройками Apache, чтобы решить эту проблему с сохранением имени хоста.
В общем, порой даже такие мелкие изменения могут иметь серьёзные последствия!
Страницы:
- 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
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136