For developers /

Описание для системных настроек MODX из словаря

Есть распространённая проблема: компоненты из репозитория обычно идут с системными настройками, которые выглядят примерно так:

А хотелось бы вот так:

Все потому, что у объекта modSystemSetting нет полей для хранения ключа записи в словаре, в отличии от параметров сниппетов или плагинов.

Лично мне было лень разбираться, откуда же берутся нормальные записи для настроек ядра, если в объекте и БД их нет, но сегодня я себя переборол и всё прояснилось.
24 january 2013, 16:34    Василий Наумкин
2    1018    8 0
For developers /

IDE phpStorm как инструмент разработки в MODX

Долгое время я пользовался простыми и быстрыми редакторами для разработки, типа Geany и Notepad++. Просто не понимал, зачем мне тяжеловесная IDE, если и этих редакторов хватает с головой?

Я помню свой код, что откуда выходит и как работает, зачем мне подсказки от программы, которая грузится полторы минуты? Тем более, я люблю по-быстрому забежать на сервер, подправить пару опечаток и сохранить файл. Мне не нужно создавать проект, синхронизировать его с сервером и т.д.

Однако, всё поменялось, когда я написал miniShop. Компонент вышел большой, и со временем я понял, что просто запутываюсь в нём. Заодно я понял, что допустил много грубых ошибок, по незнанию — например доставучие уведомления о необъявленных переменных или ключах массива, те самые — E_NOTICE.

Поэтому, когда я засел за Tickets, сразу решил писать его в IDE phpStorm, чтобы таки разобраться в ней и упростить себе разработку. Поначалу было непросто, но я быстро втянулся.

Сразу говорю, всё освоено методом тыка, без чтения литературы или чьих-то инструкций. Подозреваю, что освоил я процентов 5 от общего функционала, однако и этот объем позволил мне работать радикально быстрее и выдавать в разы более качественный код.
24 january 2013, 09:47    Василий Наумкин
3    6016    35 0
For developers /

Неверная работа isError() в PHP 5.4

В последнее время появилось много жалоб на странные глюки в компоненте Tickets. Вот тут не редактируется тикет, а вот тут — не выводятся секции и комментарии.

Оказывается, всему виной функция isError() в классе modX::modProcessorResponse
public function isError() {
    return empty($this->response) || empty($this->response['success']);
}
20 january 2013, 09:31    Василий Наумкин
0    515    1 0
Hosting /

Защита 22го порта сервера - ssh

Многие недооценивают опасность от автоматического подбора паролей на 22м порту — это, который ssh.

Я тоже раньше не заморачивался по этому поводу, пока, несколько лет назад, у меня не увели сервер с 12символьным цифробуквенным паролем в разных регистрах.

Ну то есть, вчера я мог на него зайти, а сегодня — уже не пускает! И чем он там занимается, под руководством новых хозяев, в каком ботнете учавствует — мне не ведомо. Хорошо, что к этому серверу у меня был физический доступ, и я смог сбросить пароль через LiveCD.

Заодно посмотрел в /var/log/auth.log и ужаснулся: десятки тысяч попыток логина с разных китайских айпишников, под разными именами, типа root, user, ftp, www-data и пр.

Собственно, с тех пор я и выработал свои правила защиты 22го порта.
18 january 2013, 10:54    Василий Наумкин
1    3210    16 0
Hosting /

Nginx: защита по ip + ограничение частых запросов

Поразбирался с правилами nginx и написал для себя универсальную «закрывашку» системных директорий для всех ip кроме нужных.

Сюда попадут любые запросы в директории manager, core и connectors. Все адреса, кроме разрешенных получат отлуп, а разрешенные обработаются. Так как nginx начинает применять правила после первого точного совпадения — отдельно указываем как обрабатывать *.php файлы.
location ~* ^\/(manager|core|connectors)\/(?:.*)$ {
	allow		айпиадмина-1;
	allow		айпиадмина-2;
	deny		all;
	
	location ~* \.php$ {
		include		fastcgi_params;
		fastcgi_param	SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_pass	backend-имясайта;
        }
}
15 january 2013, 22:05    Василий Наумкин
3    8896    9 0
Hosting /

Ubuntu 10.04 + 3g от Мегафон

Сегодня ночью, ровно 00:10 опять отрубился интернет от ЗАО "Системы телеком".

Конечно, за весь день ничего выяснить не смогли (даже не буду описывать эти переговоры с ТП), поэтому приедут лично, завтра в 12:00.

А я пока на модеме посижу, не гордый. Правда, в доме 2 ноутбука, телефоны и PS3 — всем надо интернет через Wi-Fi. Интернет у меня раздаётся роутером, а он получает его с сервера, который работает шлюзом и файерволом.

Поэтому, сегодня добил настройку 3G модема с симкой от Мегафон на сервере, чтобы вся аппаратура даже не заметила подмены. Пишу скорее для себя, но вдруг и еще кому пригодится. Итак:
14 january 2013, 20:53    Василий Наумкин
1    1039    0 0
For developers /

Самые быстрые сниппеты с pdoTools

Давно изместно, что xPDO не нужен для выборки и вывода большого количества данных. Зачем его использовать, создавая кучу объектов, жрать процессор и память, если мы хотим просто выбрать 100 строк из БД и вывести их на экран?

Тут больше подойдет специальный сниппет, который будет работать через PDO, без объектов. Таких сниппетов я написал немало, и в один момент мне надоело их копипастить с разных проектов и изменять.

Тогда я написал себе список хотелок:
— Быстрое создание готового сниппета.
— Любые выборки, из любых таблиц с любыми условиями и джоинами.
— Учет времени на каждую операцию, подробный лог для выявления узких мест.
— Итоговые сниппеты должны работать с getPage, автоматически.
— Лёгкая кастомизация, оно не должно меня ограничивать.
— Самый быстрый рендер чанков, быстрее только вообще без них.

Simple Dream дали добро на это дело, и в итоге вышла мини-библиотека pdoTools, которая уже входит в состав Tickets и войдёт в miniShop2.

Она отвечает всем моим требованиям и позволяет писать самые быстрые сниппеты для MODX Revolution, всего за 10 минут.
11 january 2013, 08:42    Василий Наумкин
6    4299    50 0
For developers /

Работа с #хэшем в url + history api

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

Если кто не в курсе, хэшем url зовется всё, что идет после символа #. Изначально это было придумано для якорей и используется до сих пор всякими способами из-за одной особенности — изменение хэша не обновляет страницу.
31 december 2012, 12:26    Василий Наумкин
7    8116    14 0
Hosting /

Новый год у Linode

И сразу же хорошая новость — Linode бесплатно увеличивают HDD своих юзеров на 20%.

На моём тарифе прибавилось дополнительно 6144 Mb.
15 december 2012, 08:38    Василий Наумкин
0    361    1 0
For developers /

Подсчёт значений из присоединённой таблицы на xPDO

Сегодня понадобилось вывести список блогов с подсчетом количества тикетов внутри. Желательно, за один запрос, и чтобы обращал внимание на состояние дочернего тикета.

В итоге вышел простой и быстрый сниппет getSections:
10 december 2012, 09:02    Василий Наумкин
4    791    0 0