Linux + i3wm + NVIDIA 

Решил усложнить себе существование и перейти на оконный менеджер i3. На данный момент, я использую Schenker Key 15, он же Clevo P955 (мой за задней крышке имеет буквенный суффикс ER). System76 выпускали его под именем Oryx Pro 4 в 2018. Моя конфигурация включает встроенную видео-карту Intel и дискретную GeForce 1070 Max-Q. Железо обусловило выбор дистрибутива: я взял Pop!_Os от System76, являющийся сборкой Ubuntu с необходимыми дополнительными инструментами, среди которых также можно найти и скрипт переключения видео-карт. Дистрибутив, по умолчанию, работает в конфигурации GDM + собственный WM, который, опять же, по-видимому, является Gnome 3. Конфигурация стабильна и позволяет переключать видео-карты без каких-либо проблем. Однако, при переходе на i3, одна, все-таки, появляется: если переключить компьютер на видео-карту от NVIDIA, то, после входа, i3 не показывается. Вместо него я вижу черный экран. При этом, различные горячие клавиши могут продолжать работать, что позволяет, например, завершить сессию и выйти на экран входа в систему. Переключение на отдельную TTY через Ctrl+Alt+<Num> так же работает, что явно намекает на проблемы настройки графики для отдельно взятой учетной записи пользователя. На то же указывает и тот факт, что переключение обратно на видео от Intel с последующей перезагрузкой дает картинку с работающим WM. Короче говоря, после кучи попыток и интенсивных упражнений с поисковыми запросами, я накопал решение:

  1. Использовать lightdm вместо gdm: aptitude install lightdm от рута, и, если конфигурационный скрипт, по какой-либо причине, не запустился после установки, то, от рута же, dpkg-reconfigure lightdm и выбрать lightdm для управления средой рабочего стола,
  2. Сконфигурировать экран монитора лаптопа предстартовым скриптом. Для этого, в /etc/lightdm/lightdm.conf, в секции [Seat:\*], первой строкой поставить
display-setup-script=xrandr --output eDP-1-1 --mode 1920x1080

Откуда взять eDP-1-1? Отсюда: xrandr | grep connected или просто xrandr. Будет много текста, нужно найти connected дисплей, который по описанию подходит нужному. Там же можно найти и режимы отображения. Следует быть аккуратным с указанием частоты развертки. Я указал просто разрешение, и, опять же, судя по играм и выводу inxi, экран монитора был переключен в его рекомендованную частоту:

$ inxi -G
Graphics:  Device-1: Intel driver: i915 v: kernel
           Device-2: NVIDIA GP104M [GeForce GTX 1070 Mobile] driver: nvidia v: 418.43
           Display: x11 server: X.Org 1.20.1 driver: modesetting,nvidia unloaded: fbdev,nouveau,vesa
           resolution: 1920x1080~144Hz
           OpenGL: renderer: GeForce GTX 1070 with Max-Q Design/PCIe/SSE2 v: 4.6.0 NVIDIA 418.43

Почему именно lightdm? Потому что, по какой-то причине, описанный выше скрипт не запускается, если я помещаю его в ~/.xinitrc. Возможно, вернусь к этому вопросу позже.

Я пока не подключал второй монитор, для него может понадобиться дополнительная настройка. Но это другая история. Как я понял из истории с настройкой дисплея, утилиты xrandr и arandr (графический аналог первой) – must-have при использовании i3.

Скачивание сайта с wget 

Постоянно забываю о том, как скачивать сайт при помощи wget. Требуется это нечасто, но иногда очень нужно, а скачивать специализированные программы для этого не хочется, ведь знаешь же, что wget всё это может легко и быстро. Информация об этом есть по всему интернету, но хочется, чтобы всё было под рукой. Так что теперь не забуду :)

wget -r -k -l 7 -p -E -nc http://example.com/

Хочу обратить внимание на параметр -l, которому отправляется максимальное значение уровня вложенности, на котором wget перестанет бегать по ссылкам страниц и скачивать контент. Также, можно записать

wget -r -k -l 7 -p -E -nc --user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.12011-10-16 20:23:00" http://example.com/

…чтобы “прикинуться” нормальным браузером. Это может помочь в случаях, если раздающий контент веб-сервер настроен на блокировку wget. Ведь по умолчанию wget отправляет запрос, заполняя user-agent своим значением. Можно отправить в качестве аргумента этому параметру "" (пустую строку), тогда wget не будет вообще указывать user-agent. В случае, если контент защищен http-авторизацией, и у вас есть учетные данные для сайта, можно воспользоваться параметрами --http-user и --http-password для отправки серверу ваших данных. Само собой, если сервер не отдает трафик по защищенному каналу, ваши учетные данные поступают в сеть в открытом виде. Впрочем, также происходит и в случае, если вы используете обычный браузер.

Несколько IP на одном инстансе AWS 

Тема, можно сказать, закрыта. Наконец-то Amazon предоставила возможность цеплять больше 1 IP-адреса на инстанс. Судя по информации, которую я получил в рассылке по почте, а также по документации и документации, повесить на один инстанс можно до 30 IP-адресов. Реализовано это все немного заумно, как мне кажется. Хотя и понятно, что это сделано для легкости управления IP-адресами c технической стороны вопроса. Для того, чтобы повесить несколько IP-адресов на инстанс, как я понял, требуется сначала создать виртуальный сетевой интерфейс в консоли, назначить ему несколько IP-адресов из приватной сети, а затем уже “повесить” на эти приватные адреса адреса Elastic IP. Заниматься такими веселыми штуками можно, имеючи как минимум Small-инстанс. Такового у меня сейчас нет, так что удостовериться и потыкать в новый функционал пальчиками мне пока не доводится. Безусловно, можно купить Small-инстанс и погонять всё это дело, но я лучше пойду в море искупаюсь ;)

Письмо от Amazon

UPD: Вот тут можно посмотреть и почитать, как настроить несколько IP на одном инстансе.

Умирающие плагины 

За последние пару лет WordPress из движка для блоггинга превратился в достаточно мощное программное обеспечение, при помощи которого можно создавать функциональные проекты малого/среднего масштаба. Несмотря на то, что изначально движок предназначен для создания блогов, его функционал можно просто расширить при помощи плагинов, коих написано великое множество.

За три года существования этого блога я опробовал на нем разные плагины, и до недавнего времени набор плагинов был стабилен. Ситуация начала меняться спустя некоторое время после выхода WP версии 3.3.1. Разработчики движка постепенно обновляют API, добавляют новые функции, обновляют старые или вовсе удаляют их. В результате, многие плагины начинают работать плохо либо перестают работать вовсе. Конечно же, проблему можно решить, поставив другой плагин. А можно и самому включиться в разработку и поддержку компонента. Другое дело, если разработчик у плагина есть, и ты ждешь от него реакции на протяжении продолжительного времени. Так, например, происходит с плагинами OpenID и Loginza. Эти два замечательных плагина перестали работать после одного из последних обновлений. Касаемо Loginza, плагин, конечно работает, но сыплет Warning’и в лог сервера из-за устаревших функций. В результате, при продолжительной работе в таком режиме через fastcgi (здесь не важно, что именно используется как cgi), скрипт просто прибивается сервером из-за большого количества ошибок. Понятное дело, это тянет за собой весь движок, и сайт становится недоступен для посетителей. С OpenID всё ещё сложнее — он вообще не пашет. То есть никак. И если Loginza можно поменять на что-то, либо потерпеть без него, то для OpenID альтернативы просто нет. Как следствие, приходится использовать другого OpenID-провайдера для целей авторизации. Аналогично было ещё с парой плагинов. В результате, за пару месяцев зимы набор плагинов сократился на пять штук. На данный момент я могу сделать вывод, что функциональность этого сайта определенно уменьшилась. У меня в голове уже бродила мысль о том, чтобы форкнуть OpenID-плагин и допилить его до нормального состояния, но пока я этим делом заниматься не могу. Так что, остаётся только ждать подвижек со стороны авторов.

Code Assist для внешней библиотеки PHP на примере WordPress и Aptana Studio 3 

Code Assist — чрезвычайно удобная и в тоже время настолько привычная и интуитивная штука в современных средах разработки, что некоторые порой просто не знают, как она называется :). В Microsoft Visual Studio этот функционал называется IntelliSense. В Eclipse/Aptana — Content Assist. А бывает что и по всякому — и Code Assist, и Code completion, и даже иногда, по аналогии с упомянутым Visual Studio — IntelliSense. В Aptana Studio 3, по сравнению со второй версией, некоторые настройки реализованы иначе. Из-за этого включить Code Assist для какой-либо внешней библиотеки бывает не очень понятно. Когда я писал свой плагин фильтрации постов, я столкнулся с необходимостью подключения исходников WordPress. Копание было недолгим и результативным. Ниже я покажу, как подключить внешнюю php-библиотеку к проекту для получения Code Assist по нужным классам и функциям. [ ... ]