Так получилось, что с появлением телевидения и интернета, радио никуда не исчезло, а ушло в совершенно новый — иной формат, в формат потокового вещания. У меня давно появилась идея создать приёмник онлайн радио, который был бы всегда доступен, и не зависел от компьютера. Для этого идеально подошёл мини компьютер Raspberry Pi B и старые, уже не нужные, 20-ваттные колонки. В простейшем виде онлайн-радио было готово спустя полчаса после начала работы над ним....
Функции pack и unpack. Работа с бинарными данными.
Вероятно большинство веб-программистов никогда не работали напрямую с бинарными данными из php. И так получилось не только потому, что, чаще всего бинарную обработку берут на себя разнообразные расширения или библиотеки. Часто это связано ещё и с тем, что информации в интернете не очень много, а та что есть - сложна для восприятия и далека от потребностей конкретного разработчика. Для чтения и записи бинарных данных в php есть две полезные функции:...
Сокеты — введение
Ещё один вид транспорта в unix системах, про который я пока не успел ничего рассказать - это сокеты. В переводе с английского, сокет - это штекер, т.е. элемент, позволяющий соединять между собой всякую фигню, например приборы. Для лучшего объяснения работы сокетов, удобно использовать популярный в интернете пример с телефоном и телефонной станцией. Где телефонная станция, словно сервер, держит соединения с сотнями или может тысячами различных телефонных аппаратов, а телефоны, эпизодически устанавливают соединение со станцией, и обмениваются своими данными....
Принимаем аргументы из командной строки
Вот как обычно бывает: Нам нужно написать малюсенький консольный скрипт бекапа, который, может запускаться из крона, и при этом скрипт должен принимать параметры для соединения с базой данных. Функции argv и argc Самое простейшее что мы начнём писать будет выглядеть примерно так: cli-argv-argc.php // Ожидаем что скрипт будет вызываться с такими параметрами: // php backup.php dbuser dbpassword database host if ($argc != 5) { die(PHP_EOL . 'Use: php backup....
Консольные программы для работы с ipc функциями
Наверняка после обзора очередей, сигналов, общей памяти и семафоров, появляется особая нужда в быстрых системных инструментах. Так как эти функции из php только транслируются на уровень ядра системы, поэтому многие инструменты уже разработаны и служат системным программистам верой и правдой уже много лет :-) sysctl С помощью этой утилиты можно просмотреть и отредактировать некоторые параметры системы. Например: u% sudo sysctl -a | grep queue error: permission denied on key 'vm.compact_memory' error: "Invalid argument" reading key "fs....
Демоны, shared memory и семафоры
Итак, продолжим тему системного программирования на php. Мы уже научились работать с очередями, по которым можно пересылать небольшие системные сообщения, и наверняка, столкнулись с задачей передавать большие объёмы данных. В наших любимых системах типа System V уже давно решена задача быстрой передачи и сохранения больших данных в памяти. И этот механизм называется Shared Memory. Если вкратце, то данные в Shared Memory живут до перезагрузки системы. Так как данные находятся в памяти, то работают они намного быстрее чем если бы сохранялись в базе, где-нибудь в файле, или, прости господи, на стороннем сетевом ресурсе....
Демоны — очереди сообщений
Всем привет! В предыдущих выпусках мы уже узнали как можно создавать простых демонов, как правильно посылать демонам сигналы, и эти же самые, принятые сигналы, корректно обрабатывать. Теперь мы вплотную подошли к моменту, когда наш демон должен научиться общаться с другими программами, или сам с собой, но в разных экземплярах. В мире unix, существует немыслимое множество способов передать команду или сообщение от демона к веб-скрипту и наборот. Но сейчас я хочу рассказать только про очереди сообщений — «System V IPC Messages Queues»....
Демоны — сигналы
Демоны — сигналы Итак, овладев навыками создания простейшего демона, нам нужно научить его принимать сигналы из внешнего мира. Внимание! В статье требуется расширение php pcntl Сигналы — введение Отправка сигналов демону, как и любой другой программе в unix системах, выполняется совершенно нелогичной командой «kill». И для нас очень важно что бы программа могла правильно отработать своё «убиение». Завершить все незавершённые дела, или оставить их другому демону. Убийство происходит посредством передачи программе kill специального системного сигнала, например SIGTERM и идентификатора процесса PID....
Демоны — Основы
Сегодня я расскажу один удивительный факт: Большинство веб-разработчиков ни разу в своей жизни не писали демонов. И не то что бы им это было не нужно, они просто никогда не задумывались о том что бы написать демона. Внимание! В статье требуется расширение php pcntl Введение Иногда их даже можно понять. Ведь все мы привыкли считать что прекрасно знаем как работает сайт, знаем наизусть эту идеологию MVC и забивать свою голову чем-то лишним нам совершенно не нужно....
Jelly — Пишем сложные запросы
Все разработчики, рано или поздно, начинают понимать что стандартными средствами ORM библиотеки невозможно реализовать сложные и удобные запросы. То тут, мы не знаем как написать простейших запрос для подсчёта суммы, без вынимания всех значений, то там, мы не можем составить нетривиальное условие. В большинстве случаев, кроме удобного доступа к данным, ORM библиотеки доставляют нам головную боль с составлением сложных запросов и огромное количество избыточных выборок. Сегодня я хочу рассказать, как мы можем обойти часть сложностей и упростить себе работу и, возможно, снизить нагрузку на сервер, используя ORM Jelly....