Ускорение работы веб-сервера Apache

С момента запуска виртуального сервера на LAMP и блога на WordPress в январе этого года загрузка сайта и всех его страниц вместе с админкой WordPress происходила весьма небыстро, а местами затягивалась на 15-20 секунд. В январе я мало заходил на сайт и почти ничего не писал, поэтому проблема долгой загрузки страниц оставалась нерешенной.

Когда я стал настраивать онлайн-дозиметр две недели назад, то это потребовало регулярного посещения и загрузки страниц сайта. Вот тут частые зависания и долгая загрузка меня вконец достали и я стал разбираться в чем дело. Первым делом с помощью команды top я проверил потребление ресурсов сервером во время загрузки сайта — оказалось, что потребление памяти и загрузка процессора в это время были весьма скромны. Дальше я заподозрил в тормознутости сам WordPress, поскольку вся структура сайта построена на PHP скриптах и страницы могли тормозить из-за этого. Но в силу неопытности долго не мог разобраться, что и где нужно поменять, чтобы расшевелить WordPress или хотя бы проверить, как он работает.

Для онлайн дозиметра мне потребовалось создать страничку с графиком, но поскольку я не смог интегрировать код для построения графика на CanvasJS в стандартную страницу PHP WordPress, то по совету из Интернета создал статичную HTML страницу. Когда же и она стала загружаться с тормозами, я понял, что дело совсем не в WordPress, и стал копать настройки веб-сервера Apache.

Поиски материала по оптимизации веб-сервера привели навели меня на эту прекрасную статью.
В ней написано, что одной из причин долгой загрузки сайта может являться работа многопроцессорного модуля Apache (MPM). По-умолчанию в Apache установлен MPM prefork (он же оказался и у меня), который отличается своей надежностью и стабильностью работы, но проигрывает в скорости обработки запросов. По инструкции из статьи я переключил MPM модуль на MPM-Event. И что вы думаете — 80% зависаний тут же ушли, сайт стал гораздо отзывчивее и быстрее. Вот уж не думал, что одна настройка веб-сервера может настолько сильно повлиять на его работу!

Онлайн дозиметр на трубке СТС-5 и микроконтроллере ESP 8266

С давнишних времен в моих запасах лежала трубка Гейгера-Мюллера СТС-5 выпуска годов так 70-х. Точно помню, что снял ее с военного дозиметра ДП-5, того самого дозиметра «судного дня» с пределом измерения 200 Р/ч. В школьные годы я собрал на базе СТС-5 простой дозиметр с динамиком, который в нормальных условиях издавал мирное потрескивание. В годы студенчества я пересобрал дозиметр по более современной и компактной схеме с той же звуковой индикацией пролета высокоэнергетических частиц сквозь трубку.

Плата дозиметра (трубка снята)

Схема работала исправно, правда для питания требовалась Крона и корпус я так и не придумал. Оценку радиационного фона с его помощью можно выполнить весьма условно по темпу потрескивания динамика.

В связи с настройкой и запуском собственного виртуального сервера и блога в этом году появилась идея допилить дозиметр для передачи показаний на сервер и отображения их в онлайн режиме. Прежде всего рассмотрел вариант использования уже имеющейся платы дозиметра с источником высокого напряжения и звуковой цепью. И сразу же его отмёл из-за относительно высокого напряжения питания 9В и сложности в сопряжении цепей 9 вольт с 3,3 вольтовой ESP 8266.

Значит, собираем схему по-новой. Сказано — сделано! Готовой схемы под свои нужны, конечно же найти не удалось, поэтому получился гибрид, собранный по узлам из разных источников!

Схема дозиметра

Узел генератора собран на популярной NE555, включенной по типовой схеме. Один из резисторов сделан подстроечным для регулирования частоты сигнала генератора. В качестве ключа выбран полевой транзистор 5N60C — зачем такой мощный с током 5А, спросите вы?? Это единственный высоковольтный транзистор с напряжением исток-сток, равным 600 В, который нашелся в моих запасах. Транзистор здесь не критичен, главное, чтобы был высоковольтным. Диод D1 и конденсатор C1 также должны быть высоковольтными, это обязательное условие.

Отдельно хочу сказать про цепь калибровки. Для трубки СТС-5 рабочее напряжение, соответствующее середине счетной характеристики, равное примерно 400 В. Важно правильно выставить это напряжение при наладке схемы. Но проблема в том, что высоковольтный генератор имеет малую мощность, а современные цифровые мультиметры имеют сравнительно низкое входное сопротивление, поэтому при прямом измерении напряжения мультиметром получим большую его просадку, что не позволит корректно настроить высоковольтную цепь. Я нашел решение вопроса калибровки напряжения в описании дозиметра Geiger-Counter-RadiationD-v1.1-CAJOE-. В схему высоковольтной цепи после диода D1 ставится резистор 10 МОм, а также калибровочный джампер JP1 с резистором на 50 МОм, к которому подключается мультиметр. Таким образом образуется делитель напряжения. Затем в зависимости от внутреннего сопротивления мультиметра по формуле определяется напряжение, которое он должен показывать при напряжении 400 В в высоковольтной цепи. Это напряжение и выставляем в мультиметре путем вращения подстроечного резистора R2.

Идем дальше. Да, я в курсе, что ESP 8266 питается от 3,3 В и по-хорошему его входные и выходные цепи нужно согласовывать с цепями другого напряжения. Но, я проверил свой экземпляр ESP, и он прекрасно работает при подаче входного сигнала напряжением 5В с транзистора Q2. Питание на ESP я подаю, конечно, 3,3 В как положено. Схему дозиметра оформил на монтажной плате, ESP 8266 развел на кусочке пластиковой карты. Схему запитал от старого блока питания телефона через разъем. Всю конструкцию поместил в корпус от старого роутера. Получилось так.

Онлайн дозиметр

Принцип работы дозиметра основан на регистрации пролета высокоэнергетических частиц через трубку Гейгер-Мюллера. Пролет частицы сопровождается возникновением в трубке разряда, который преобразуется выходной цепью в короткий импульс, фиксируемый ESP. Алгоритм работы ESP прост — считаем количество импульсов за минуту, затем с помощью масштабного коэффициента преобразуем это число в дозу в мкР/ч (или мкЗв/ч).

Эталонного дозиметра у меня пока нет, поэтому для правильной настройки счетного алгоритма мне нужно было сравнивать свои показания с каким-либо достоверным измерением. На сайте местного Гидрометцентра (https://khabmeteo.ru/) я нашел ежедневную сводку по уровню радиации в Хабаровске (где я живу). Уровень радиации в черте города в среднем находится в пределах 0.1 — 0.13 мкЗв/ч, что соответствует естественному радиационному фону. Микрозиверты соотносятся с микрорентгенами по следующей формуле:

мкЗв = 0,008695652 × мкР.

Значит, 0.1 — 0.13 мкЗв/ч = 11.5 — 14.95 мкР/ч.

Для трубки СТС-5 наравне с другими распространенными трубками (например, СБМ-20) в сети я нашел много справочной информации тут и тут. В частности, средний коэффициент перевода количества отсчетов в минуту в мкР/ч составляет 0.57. Также важный фактор, который нужно учесть, это собственный фон трубки за единицу времени — для трубки СБМ-20 по справочным данным равен 0.1 имп/сек, для СТС-5 равен 0.45 имп/сек. Для своего расчета взял 8 имп/мин, что соответствует 0.13 имп/сек. Итого получаем следующую картину: при естественном радиационном фоне, которому соответствует около 30 имп в минуту уровень радиации составит:

Фон = (30 — 8) х 0.57 = 12.5 мкР/ч = 0.11 мкЗв/ч, что вполне соответствует данным Гидромета.

ESP выполняет расчет количества входящих импульсов за период 5 минут и расчитывает усредненное значение мкР/ч за этот период. Далее информация передается на мой VPS сервер по MQTT протоколу. На сервере скрипт Python в фоне записывает полученные данные с меткой времени в CSV файл, из которого путем использования библиотеки CanvasJS строится график за сутки и выдается на страничку Онлайн дозиметр. Формат графика пока такой, но хочу докрутить оси и сетку в более наглядный формат.

На сегодня все! Спасибо за внимание!

Модификация прошивки трансивера Yaesu FT-8000

Продублирую свой пост 2023 года с Радиосканнера. Он хоть и давнишний, но не потерявший от этого своей актуальности. Поехали!

Приобрёл себе УКВ трансивер FT-8000 с заводскими диапазонами 144-146 МГц, 430-440 МГц на приём и передачу.

УКВ трансивер Yaesu FT-8000

Захотелось расширить диапазон приёма, поскольку родной диапазон достаточной узкий, а железо трансивера может работать в куда более широком диапазоне частот. Перечитал кучу разрозненной информации и нашёл два способа — железный и софтовый, решил в трансивер не лезть, попробовал софтовый. Поскольку универсальной инструкции не нашёл, то сделал свою:

1. Первое, что требуется для перепрошивки трансивера, это кабель-программатор. Нашел в интернете несколько вариантов схем – самой подходящей оказалась схема на базе преобразователя USB–UART, поскольку железного COM порта у меня на ноутбуке нет, а USB хоть отбавляй (несмотря на то, что на схеме указана модель FT-7900, он вполне подходит и для FT-8000).

    Схема переходника для программирования трансивера Yaesu FT-8000

    Преобразователь USB – UART взят самый что ни на есть ходовой и дешевый на чипе CH 340. Микросхема логики CD 4069, кабель взят от старой мышки с разъемом PS /2. Получилась такая конструкция.

    Конструкция программатора

    2. Переходим к программе для прошивки. Для прошивки нужна программа ADMS-2d, она есть в файловом архиве radioscanner.ru. Программу проверял в среде WinXP, а также в Win 98, в более новых версиях Win скорее всего работать не будет. Итого все действия с чтением и записью прошивки трансивера у меня сработали в WinXP. В Win98 почему-то работало только чтение, а запись не пошла=(

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

    Я поступил так: в программе выбрал меню – сохранить образ флоппи-диска, написал название образа «ADMS2.IMA» и сохранил его на диск.

    Идем далее — поскольку флоппи-диски на современных компьютерах уже давно не используются, то чтобы открыть инсталлятор, я с помощью Virtual Floppy Drive создал виртуальный флоппи-диск и смонтировал в него образ дискеты с инсталлятором ADMS2.IMA.

    После установки программы необходимо подключить к компьютеру адаптер, установить драйвера CH340 и выставить номер COM порта в настройках программы.

    3. Настройки диапазонов работы трансивера на прием и передачу могут быть считаны и записаны в ADMS-2d через файл Template. При первичном подключении трансивера к ADMS-2d программа предложит выгрузить и сохранить настройки трансивера в файл .TPL.

    4. Файл .TPL необходимо открыть в HEX редакторе. По адресу 0630H находятся записанные в HEX формате диапазоны по частоте UHF диапазона, по адресу 0730H – VHF диапазона. Я сделал такую табличку для более простой ориентации в адресах (здесь приведены мои исходные исключительно любительские диапазоны):

    BandRX lower limitRX upper limitTX lower limitTX upper limit
    UHF (630H)419CE0
    (430.000.0)
    432380
    (440.000.0)
    419CE0
    (430.000.0)
    432380
    (440.000.0)
    VHF (730H)15F900
    (144.000.0)
    164720
    (146.000.0)
    15F900
    (144.000.0)
    164720
    (146.000.0)

    Далее в HEX редакторе прописываются нужные диапазоны и файл сохраняется.

    5. Для того, чтобы записать модифицированный файл Template в трансивер в ADMS-2d есть отдельное меню «Send data to». После окончания записи в трансивер у меня появилась и стала мигать двойная надпись Err на экране, что по инструкции программы означало неудачную запись прошивки, но после перезагрузки трансивера, все применилось и новые диапазоны заработали.

    Кстати, хочу отметить, что программе ADMS-2d в справке расписаны все действия по чтению и записи прошивки и настроек в трансивер как со стороны самой программы, так и со стороны трансивера (какие кнопки и когда нужно нажимать).

    Спасибо за внимание, на сегодня все!

    P.S. Хочу сказать, что данный трансивер с момента его приобретения в 2023 году по настоящее время показал себя только с положительной стороны. Из основных плюсов отмечу его неприхотливость, компактность и устойчивость работы. С этим трансивером я с «полей» весной 2023 года и зимой 2025 года участвовал в региональных соревнованиях УКВ и занял в обоих соревнованиях второе место!

    Одноплатный компьютер на Z80. Часть 1

    Я увлекаюсь электроникой уже достаточно давно, и в основном мои интересы были связаны с радиоприемными и передающими устройствами. Собирал КВ приемники и передатчики, различные генераторы, частотомеры. Программировал микроконтроллеры Atmel для каких-то утилитарных задач вроде мигалки светодиодами или управления синтезатором частоты. Arduino UNO — так до сих пор рабочая лошадка. Но тем не менее весь интерес в основном крутился вокруг радио.

    Два с половиной года назад я заинтересовался программированием, и, решив освоить что-то простое, взялся за Python. Попутно появилось желание расширить свои знания в области работы компьютера с самых его основ. Микроконтроллеры для этой цели не совсем подходили, поскольку их архитектура, представляющая собой процессор, ОЗУ, ПЗУ, устройства ввода-вывода, упакованные в один корпус, не позволяла взглянуть на работу процессора изнутри и досконально разобраться. Нужно было что-то более простое и основополагающее.

    В поисках подходящего для себя материала я наткнулся на 4-битный процессор TD-4:

    — ссылка на Гитхаб: https://github.com/wuxx/TD4-4BIT-CPU?ysclid=mk6b8drmhv370966218

    — исчерпывающее описание на Хабр: https://habr.com/ru/companies/ruvds/articles/742466/?ysclid=mk6vs8rvy8340831492

    Процессор TD-4

    На дискретной логике, сумматорах, дешифраторах собраны основные узлы процессора (АЛУ, регистры, блок декодирования команд, ввод-вывод), а также собранное на механических DIP переключателях оригинальное ПЗУ. По-моему просто гениально! Я не собирал его в натуре, а сделал модель в Proteus. Все заработало, хоть и не с первого раза. Этот проект вполне подойдет для ознакомления с основными узлами процессора и принципами их совместной работы.

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

    — 4-битный процессор MP-4 (https://www.instructables.com/Simplest-4-Bit-TTL-CPU/).

    — Процессор на дискретной логике «Big mess of wires» (https://www.bigmessowires.com/bmow1/). Судя по писанию монструозная конструкция процессора с большим количеством проводов (откуда, собственно, и такое название), которая, тем не менее, вполне себе работоспособна.

    Процессор Big Mess of Wires

    — Процессор «Simple as possible» (SAP-1) (https://github.com/KarenOk/SAP-1-Computer?ysclid=mk6wm79jb990278743). Собран в виде модели в симуляторе логических схем Logisim. Есть несколько версий проекта SAP-1, SAP-2, SAP-3, отличающихся архитектурой и набором команд.

    Процессор SAP-1

    Далее в поисках других интересных конструкций я наткнулся на проект NAND-TO-TETRIS (https://www.nand2tetris.org/). Детище двух профессоров из Израиля — Ноама Нисана (Noam Nisan) и Шимона Шокена (Shimon Schocken). Проект состоит из двух курсов — создание модели процессора (Hardware) и написание программного обеспечения для него (Software).

    Процессор NAND-TO-TETRIS

    В первом курсе из базовых строительных блоков дискретной логики (элементов AND, OR, NOT) путем моделирования постепенно создаются и связываются друг с другом основные элементы процессора (АЛУ, регистры, ПЗУ, ОЗУ и т. д.). Также в курсе предлагается и объясняется простая система команд процессора, и далее для нее дается задание по написанию ассемблера.

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

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

    Поскольку весь проект изначально заточен только на программную реализацию, то с микросхемами, платами и паяльником возиться не придется. В ходе освоения курса потребуется освоить язык описания аппаратуры интегральных схем HDL, а для написания ассемблера, и остальных программ со второй части курса — использовать любой другой язык программирования.

    Я прошел полностью первый курс, собрал процессор, написал для него ассемблер на Python, начал писать виртуальную машину из второй части курса и где-то тут мой запал угас…. Я понял, что хочу изучать не виртуальные команды для процессора и городить интерпретатор для него, а окунуться в реальное железо. Хотя если довести дело до конца, результат будет весьма впечатляющим. Авторы проекта на своем сайте приводят примеры законченных проектов NAND-TO-TETRIS своих учеников — там и графические приложения, и математические расчеты, и даже игры. В общем для погружения в тему весьма советую!

    И вот тут наконец я подобрался к своему первому 8-битному компьютеру на процессорах 70-х — 80-х годов. О нем в следующем посте.