Ctrl + ↑ Позднее

Если вы встретились с подобной хернёй в логах, то сразу отключать весь APC будет слишком расточительным решением.

Достаточно просто прописать в его конфигурацию следующие строки:

apc.stat=1 
apc.stat_ctime=1
13 июля 2014, 12:57

Умный фильтр

Если вы делаете умный фильтр на своём сайте, будет полезным показать посетителю количество результатов после очередного поиска. Например 2ГИС показывает на несколько секунд количество результатов поиска:

С помощью <meta>-тега viewport можно сделать так, чтобы адресная строка браузера в Сафари, а также нижняя панель с кнопками была по-умолчанию скрыта:

Для этого в значение тега через запятую допишите minimal-ui, вот так:

<meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui" />

Дополнено: при нажатии на заголовок все элементы управления (адресная строка и нижняя панель) вернутся на экран.

Помните, этот анекдот?

— Простите, бабушка, я вам на ногу наступил!
— Не волнуйся, внучек, я тебе уже на спину плюнула.

Сегодня его можно перефразировать в такое:

— Простите, что мы плохо вас обслужили!
— Не беспокойтесь, я вас уже во всех соцсетях обосрал.

27 июня 2014, 19:07

Ctrl+

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

И выдаёт ошибку вида:

[root@host.ru ~]# service nginx start
Starting nginx: nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 268435456) failed (12: Cannot allocate memory) [FAILED]

Решение:

  1. Заходим в файл /etc/nginx/bx/conf/im_settings.conf
  2. Уменьшаем значение памяти в директиве push_stream_shared_memory_size до 1-2 МБайт.

После этого nginx запустится успешно.

11 июня 2014, 20:02

Блокировки в Javascript

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

Для этого можно пользоваться очень простой и короткой «библиотекой» (не уверен, что так можно назвать пять строк кода, но всё же):

(function() {
    var blocks = {};
    window.setBlock = function(name) { if (name in blocks) return false; return blocks[name] = true; }
    window.clearBlock = function(name) { delete blocks[name]; return true; }
})();



Как это действует:

  1. Функция setBlock() ставит блокировку по указанному коду. Если блокировки не было — возвращает true, если блокировка уже есть, возвращает false.
  2. Функция clearBlock() снимает блокировку по указанному коду.

Пример использования данных функций:

$('.my-submit').on('click', function() {
    if (setBlock('my-form-submit')) {
        // Устанавливаем блокировку в первый раз.
        // Тут можно ещё, например, выставить кнопке параметр disabled.

        // Отправляем нашу форму
        $.post('form-submit.php', function() {
            // Обрабатываем ответ формы, как это необходимо.

            // После обработки снимаем блокировку: теперь форму можно отправлять снова
            clearBlock('my-form-submit');
        }).fail(function() {
            // Эта функция будет выполнена, если произойдёт ошибка связи (скажем, у пользователя сломается интернет).
            // В таком случае нам важно снять блокировку, чтобы пользователь мог отправить форму снова,
            // когда его интернет заработает.
            clearBlock('my-form-submit');
        });
});

В приведённом примере до тех пор, пока не будет вызвана одна из функций clearBlock(), повторные нажатия на кнопку ни к чему не приведут, поскольку функция setBlock() будет возвращать false.

В качестве имени блокировки можно использовать любой текст. Например, на одном из разрабатываемых сейчас проектов я таким образом реализовал работу лайков: при добавлении лайка к элементу на странице ставится блокировка с именем "like" + elementID, таким образом, одновременно может идти несколько блокировок на разные действия.

Черновик этой заметки лежит в моём блоге уже больше года, и, в очередной раз убедившись в его актуальности, я решил, что пора дописать и опубликовать данный пост.

99% сервисов для обмена мгновенными сообщениями работают за счёт промежуточных серверов, которые занимаются передачей сообщений между адресатами. Это выглядит так: вы отправляете сообщение; оно попадает на промежуточный сервер; далее сервер находит получателя и передаёт ему ваше сообщение.

При этом, если сервер получил ваше сообщение, то вы ему больше не нужны: сообщение хранится на сервере и ждёт, пока получатель станет доступен для доставки.

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

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

С точки зрения организации архитектуры это гениально и очень экономично: компании Майкрософт, которая владеет скайпом, не нужно тратить деньги на покупку и сопровождение промежуточных серверов для передачи сообщений.

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

Чаще всего это происходит следующим образом: вы отправляете сообщение коллеге, который сейчас не онлайн, в скайп, спустя некоторое время выключаете свой компьютер (или, скажем, отправляете его в спящий режим), а после этого в сети появляется ваш собеседник. В итоге сообщение ваш собеседник не получит до тех пор, пока вы оба одновременно не окажетесь онлайн.

От этого и все беды: верстальщик отправляет архив программисту в скайп и, выключив компьютер, уходит на обед. Пришедший с обеда пораньше программист вынужден ждать возвращения верстальщика, поскольку получить сообщение не может. Ну, аналогичных примеров можно придумать массу.

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

8 июня 2014, 9:56

Пепяка

расскажи
друзякам
про
пепяку!

Ctrl + ↓ Ранее