sysadminИсправление задержки в подключении к локальным сервисам в Windows Vista, 7, 8 и Windows Server 2008

Столкнулся с странной проблемой — после переезда на Windows 8 RP появилась задержка в работе всех сайтов на локальном веб-сервере. После некоторых проверок стало понятно, что задержка возникает только если скрипты используют какие-то сторонние сервисы, будь то MySQL база, MongoDB, Memcached или что-то другое,  к чему скрипт подключается по сети. После ещё пары экспериментов стало понятно, что задержка именно на этапе подключения, так как сами запросы и обмен данными осуществлялись быстро.

После непродолжительного поиска причин и решения в гугле, наткнулся на несколько записей на StackOverflow и ServerFault, где у людей была похожая проблема. Связано это было, чаще всего, с проблемами в DNS, а именно с тем, что, начиная с Windows Vista у IPv6 приоритет выше, чем у IPv4 (интересно, что до переезда на восьмёрку я использовал и висту, и семёрку,  подобных проблем не было) . Это означает, что при резолве адреса «localhost», сервис сначала получал локальный IPv6 адрес (::1), и только потом, поняв что по этому адресу сервиса нет (так как и MySQL, и Memcached по-умолчанию слушают IPv4-адрес), нужный нам 127.0.0.1. Чтобы проверить, в этом ли проблема, можно просто попробовать подключиться не к домену «localhost», а напрямую по IP-адресу 127.0.0.1. Когда я изменил в конфигах домен на прямой адрес, проблема исчезла, что означает, что проблема была действительно в медленном (а точнее, неправильном) резолве.

Когда мы знаем конкретную проблему — найти её решение уже проще, и мы быстро находим эту статью на сайте Майкрософта, из которой и узнаём решение. Для удобства, приведу его здесь.

Открываем редактор реестра (Win+R, затем пишем «regedit» и нажимаем Enter), находим ветку «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\». Находим там параметр «DisabledComponents», или создаём его, в случае если его нет (тип параметра — DWORD), и меняем его значение на «0x20» (разумеется, без кавычек), что установит приоритет IPv4 над IPv6. Перезагружаемся и проверяем.

 

CodingНежадные(ungreedy) регулярные выражения в Javascript

Привет.

Как вы, наверное, знаете, джаваскрипт не поддерживает никакие другие модификаторы шаблонов регулярных выражений, кроме «g»(глобальная подстановка), «i»(игнорировать регистр символов) и «m»(многострочная подстановка). В частности, нет такого полезного модификатора, как «Ungreedy». Но, как оказалось, его можно включить, но немного по-другому.

Например у нас есть задача: заменить все {$var} в строке «Some variable here: {$var} and there: {$var}» на «<a>var</a>». Если мы попробуем использовать регулярное выражение «/{\$(.*)}/g», то получим следующее: «Some variable here: <a>var} and there: {$var</a>», что явно нам не подходит. Это произошло потому, что по-умолчанию в JS регулярные выражения «жадные» — т.е. пытаются взять максимально подходящее под шаблон количество символов. В нашем случае под шаблон подошла вся строка от первого «{$» до последнего «}». Нам же нужно другое поведение.

Для этого используем хитрое сочетание специальных символов(подсмотренное в MDN), и наш шаблон обретает следующий вид: «/{\$(.+?)}/g». Теперь при замене мы получаем именно то, что нам требуется «Some variable here: <a>var</a> and there: <a>var</a>».

Удачи!

CodingПростой способ синхронизации структуры и данных MySQL при работе с Mercurial

Привет. Недавно перевёл работу на Mercurial и встала задача организовать синхронизацию MySQL. Погуглив, ничего простого и надёжного не было найдено, поэтому пришлось самому решать эту задачу.

Продолжить чтение →

sysadminЗапуск приложений до входа в Windows

Самый простой способ запустить приложение, или что-либо другое, сразу после загрузки системы — использовать встроенный в windows планировщик заданий. Расскажу на примере Windows Server 2003. Предположим, нам нужно запустить Денвер, причём именно до входа пользователя в систему.

Открываем «Назначенные задания» (Пуск → Все программы → Стандартные → Служебные → Назначенные задания), там нажимаем «Добавить задание». В окне выбора приложения нажимаем «Обзор» и выбираем файл run.exe в папке c:/webservers/denwer/ (путь по-умолчанию, у вас может быть другим).

Затем нажимаем «Далее» и переходим к выбору режима запуска. Тут нас интересует режим «при загрузке компьютера».

После этого снова нажимаем «Далее» и указываем имя и пароль пользователя, от имени которого вы хотите выполнить запуск приложения. Для денвера лучше использовать аккаунт администратора, чтобы избежать проблем с подключением дисков и изменением hosts-файла. Затем осталось лишь нажать «Готово», и проверить задание, перезагрузив компьютер.

P.S. Несмотря на то, что в статье, в качестве примера, используется денвер, я крайне не рекомендую использовать его на «боевых» серверах. По крайней мере без должной кропотливой настройки его компонентов.

sysadminПодключение PPPoE с указанием имени службы в Ubuntu

Провайдер требует указать имя службы для подключения PPPoE?
Немного подправим конфиги, и все получится.
Например, в файле /etc/ppp/peers/dsl-provider у нас хранятся настройки подключения.
Находим строку:
plugin rp-pppoe.so eth0
Дописываем: rp_pppoe_service имя_службы
plugin rp-pppoe.so rp_pppoe_service имя_службы eth0
Если используется пакет pppoe, то находим строку:
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452"
Дописываем: -S имя_службы
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452 -S имя_службы"

(c) http://my.runtu.org/blog/maksipes

CodingРаскрась машинку, %USERNAME%!

Снова привет.
Нашёл в дебрях компьютера одну забавную штуку, которую мы с Лёшей в студии делали для одного клиента. Она была задумана как главная «замануха» для посетителей, но клиент не принял, к сожалению. Выкладываю её вам на пощупать, посмотреть код и сказать мнение.

В процессе создания было прочитано несколько статей по теме цвета, сделан не один десяток экспериментов, и взорван мозг :). Основой всего стала png-маска машинки, под которой лежит див. Цвет дива как раз и настраивается бегунками. Все вычисления и формулы вы можете сами найти и почитать в dragger.js, может быть потом подробнее расскажу как там и что.

Буду рад услышать ваше мнение.

En taro Adun, Executor!

CodingКроссбраузерный placeholder

Добрый день.

Наконец-то дошли руки до написания первого тематического поста в блог. Им я начну цикл статей о jQuery плагинах, которые мы активно используем в студии. Итак, статья о такой полезной вещи как плэйсхолдер (placeholder).
Продолжить чтение →

rootСборщик багов

Hello, there.
Так как я пока осваиваюсь в Вордпрессе, и могу где нибудь накосячить, прошу вас писать о обнаруженных багах в комментах к этому посту.
Постепенно буду делать свою тему на дизайне, который нарисовал мой друг и коллега tetzkatlipoka.
До встречи :)

rootПервый пост

Он трудный самый… :) Привет, мир!