Я в интернете

РСС    Джейсон-фид

Есть автоматические трансляции в Тумблер и Же-же. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

Позднее Ctrl + ↑

Вопрос про фоновую работу ПХП

Эгея написана на ПХП как обычное веб-приложение, отвечающее на запросы браузера к серверу. Браузер просит страницу — Эгея её генерирует и отдаёт.

Часть работы, которую делает Эгея — медленная по своей природе, например создание бекапа или индексация большого блога для поиска. Но Эгея отдаёт страницы быстро.

Это потому что в Эгее реализован механизм фоновой работы через запрос к себе. Когда нужно сделать что-то долгое, Эгея устанавливает ХТТП-соединение сама с собой, как бы делая вид, что она браузер, отправляет запрос по специальному урлу, который означает «сделай бекап» или «поиндексируй поиск», и тут же обрывает соединение. В результате выполнение скрипта заканчивается быстро, а вся долгая работа делается незаметно, как раз в ответ на этот запрос к себе. О таком методе я узнал лет двенадцать назад от Романа Иванова, и с тех пор пользуюсь.

Асинхронное выполнение на ПХП

К сожалению, с этим методом возникла проблема, когда я стал поддерживать ХТТПС. Если просто отправлять запрос и сразу закрывать соединение, как я всегда делал, не происходит вообще ничего — с точки зрения сервера всё выглядит так, как будто к нему и не обращались. Если же попробовать прочитать ответ, то приходит 400 Bad Request, потому что я как бы пытаюсь говорить с ХТТПС-сервером на простом ХТТП. К сожалению, мне почему-то так и не удалось отправить самому себе запрос по ХТТПС с помощью функции fsockopen () и её родственников, хотя я вроде бы исчитал документацию со всех сторон.

Вместо запроса к себе можно использовать register_shutdown_function (). Но я когда-то пользовался ей, и у меня осталось ощущение ненадёжности — кажется, она выполнялась не всегда, и там были какие-то особенности внутри странные, например, что все пути к файлам должны быть указаны абсолютно. Короче, чтобы ей воспользоваться, нужно переструктурировать код. Женя Степанищев ещё рассказал про fastcgi_finish_request () — похожий вариант.

Эти схемы мне не нравятся непрозрачностью: часть скрипта будет выполняться в каком-то мире, который не виден никому. В варианте с запросом к себе мне ничто не мешает зайти браузером по моему служебному урлу и посмотреть, что происходит. А тут придётся что-то специальное изобретать для отладки. Кроме того, запрос к себе, разумеется, запускает новую копию ПХП, в которой заново начинается отсчёт времени. Выполняя такой запрос, я могу теоретически захотеть сделать что-то ещё так же, и инициировать запрос третьго уровня. И все эти запросы — одинаковой природы, просто заход по урлу. Мне нравится эта однородность.

Есть радикальный вариант — переделать всё так, чтобы по служебным урлам ходил аджаксом клиент, пока ни о чём не подозревающий пользователь смотрит на уже загрузившуюся страницу. Такая конфигурация мне не нравится уже эстетически. Что это за беспомощный сервер, что ему надо, чтобы его клиент приводил в чувство? Возможно, это бред, но я бы хотел, чтобы сервер мог работать самостоятельно.

Ну и пока умники в твиттере не начали писать «расскажите кто-нибудь Бирману про крон», объясню, что моя задача — сделать максимально автономное решение, не требующее от пользователя никакой специальной настройки сервера. Закачал на сервер папку — всё работает. Если вы матёрый программист в свитере, вам такое не понять.

Короче, в идеале я бы хотел заставить работать свою исходную конфигурацию. Для этого мне нужно научиться делать запрос к себе по ХТТПС. Причём мне нужно просто «потрогать» нужный урл и отвалиться — мне не нужно по нему передавать никаких данных, не нужно читать ответ. Как это сделать?

Ну и если вы знаете какой-то ещё способ добиться нужного результата, лишённый всех описанных недостатков, тоже расскажите.

Найки, Адоби и Тафти

Название компании Nike читается «Найки». По-русски Найк называет себя Найком, а не «Найки», потому что так удобнее: Найк понятно как склонять. Молодцы! Не то, что Микросо́фт, который зачем-то насилует русский язык и называет себя «Ма́йкрософтом».

Название компании Adobe читается «Эдоуби». Не знаю ничего о том, как они себя называют по-русски, но от людей регулярно слышу что-то вроде «Эдоуб». Меня не смущают варианты «Адоб», «Адобе», «Адоби», но «Эдоуб» — это как «Эйпл», так говорить нельзя.

Фамилия профессора Tufte читается «Тафти». Тут, слава богу, все говорят правильно — видимо, потому, что слышат это слово раньше, чем видят.

Но заметка не об этом. Дело в том, что я откуда-то взял, что название компании Bose (колонки там всякие) тоже из этой серии и читается «Боузи». И даже сказал об этом нескольким человекам. Но это не соответствует действительности: я посмотрел несколько источников, и везде сказано, что это «Боуз». Так что прошу прощения у всех, кого ввёл в заблуждение.

Добавлено в сентябре 2017-го. А, ещё Moscone.

Классический Мак в браузере

Хотите потыкать в настоящий чёрно-белый Мак в браузере?

Архив.орг теперь даёт это сделать. По ссылке — музей эмуляторов разных классических программ, включающий, например, Мак ОС 6.0.8. Причём это не то, что там кто-то нарисовал 10 экранов и даёт вам между ними переключаться — нет, это прям настоящая операционная система в браузере (до чего техника дошла!).

Сначала сам эмулятор грузится несколько минут. Потом грузится Мак:

Классический Мак в браузере

Добро пожаловать:

Классический Мак в браузере

Рабочий стол!

Классический Мак в браузере

Разрешение экрана — 512 × 342. Скриншоты почему-то мыльные получаются — ну фиг знает.

Можно зайти в яблоко и открыть Эбаут:

Классический Мак в браузере

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

Моя любимая деталь — это то, что когда кликаешь в кнопку закрытия окна, вокруг места клика рисуются такие штришочки, как в комиксах вокруг чего-то, что движется:

Классический Мак в браузере

Я это слизал для иллюстрации на 180-м развороте интерфейсной книги:

Пока кликал, вообще какой-то инсталлятор запустил:

Классический Мак в браузере

Ну, дальше сами.

Эгея v3109

Вышла новая сборка Эгеи, v3109.

В ней исправлен баг, который был случайно введён в сборке v3107 на днях. Из-за него редактор мог повесить браузер. С v3107 надо обновиться обязательно, с v3101 — если вас беспокоит баг с незагружаемостью картинок.

После выхода новой версии всегда есть небольшая турбулентность, пардон.

Эгея v3107

Вышла новая сборка Эгеи, v3107.

Из заметного с момента релиза 2.6 — исправлен баг, из-за которого картинки могли не загружаться у тех, у кого в урлах используется ?go=. Пока все те, кто поймал этот баг, в итоге перешли на чистые урлы, чем и исправили баг, и получили чистые урлы. Так что от бага они только выиграли.

О том, как сделать чистые урлы, написано в документации («Движок использует в урлах конструкцию ?go=, а я хочу чистые урлы без неё»). Эгея автоматически использует чистые урлы, когда уверена, что они у вас заработают, но она не всегда может быть уверена, поэтому иногда нужны такие пляски с бубном.

Но баг всё же стоило исправить, потому что на чистые урлы могут перейти не все.

ПХПШторм и рефакторинг при переименовании файла

В заметке о ВС Коде я написал:

Однажды я видел, как разработчик переименовывал файл в «ПХПШторме». На экране несколько секунд заполнялся прогрессбар. Нет, спасибо.

Мне написал Александр Яскевич:

То, что ты видел — рефакторинг. Если на этот файл в проекте были ссылки, ПХПШторм их также менял в то время, пока ты наблюдал прогрессбар. Ну или просто искал. Даже если ничего не нашел, время на поиск тратится. В таких мелочах ИДЕ от редактора и отличается.

Я в курсе, что это рефакторинг. Тут есть две проблемы.

Во-первых, непонятно, зачем ему искать? Он же ИДЕ. Даже «просто редактор» умеет индексировать проекты в фоновом режиме. Он безо всякого поиска знает, где упоминается мой файл. И даже если действительно нужно изменить упоминания в нескольких файлах, на современном компьютере это не займёт заметного времени. Поэтому рефакторинг прогрессбару не оправдание.

Во-вторых, непонятно, зачем мне показывать модальное окно с ним? Даже если работа действительно продолжительная, почему я не могу продолжать работать, пока он там переименовывает? По хорошему нужно было бы показать прогрессбар где-нибудь в строке состояния, и если какие-то файлы в итоге изменятся, я должен увидеть соответствующие отметки около них в списке файлов сбоку.

Живой микс: Дизайн

21 апреля сыграл техно в Студии Лебедева. Так:

Живой микс: Дизайн

Есть две грубых помарки. Грязь в районе 31:20 и забытый открытым канал в 1:20:11.

Плейлист:

0:00:00 Artefakt Tidal
0:01:52 Conrad Van Orton & VSK Angular Momentum
0:05:35 Shlømo Obsession
0:09:01 Antonio De Angelis Polar
0:11:58 Roman Flügel Pattern 13
0:17:45 Planetary Assault Systems Whistle Viper (Live Edit)
0:20:55 Sleeparchive Window 092 (Oscar Mulero Remix)
0:24:14 Tensal Achievement 3
0:26:50 Axkan Fear (Israel Toledo Remix)
0:29:01 Sleeparchive 1
0:30:26 P.E.A.R.L. Desolation (I/Y Reduction)
0:33:12 Ilya Birman Glass
0:35:21 Israel Toledo Standing
0:38:15 Developer Hooked In
0:41:31 Planetary Assault Systems Bell Blocker
0:45:06 Shifted Clairvoyance Part II
0:49:00 Truss Beacon (Original Mix)
0:50:59 Rumah & Progression SC3
0:54:18 Dense & Pika Lack Of Light
0:58:22 Robert Hood Shaker
1:02:38 NoizyKnobs Really Deep
1:07:13 Woo York Siberian Night
1:10:20 Sector Y Hit Control
1:14:34 Exium Monopoles
1:18:04 Ilya Birman I Will Always
1:19:10 Orion Forerunner (Original Mix)
1:23:43 Conrad Van Orton & VSK DP
1:26:56 Sleeparchive 7
1:27:52 Birth Of Frequency Gate (Oscar Mulero Remix)
1:31:08 Jen Series Shadow Dancer
1:33:08 Tørmented Sins Of Prophets (Original mix)
1:35:36 Ilya Birman Octomore
1:41:48 Alderaan Disturbed
1:44:13 Planetary Assault Systems Bawoo Bawoo
1:49:04 Birth Of Frequency Design
1:53:52 Sleeparchive Roses
1:55:19 Oscar Mulero Inclination

Кстати, все мои миксы называются по названию какого-нибудь из треков в них.

Есть страница микса на Промодиджее.

Предыдущий похожий микс: Уловка.

Ранее Ctrl + ↓