Entries Tagged ‘работа’:

Ubuntu unable to fork

Недавно взятый мощный сервер с Ubuntu 11.10 Server на борту опечалил такими ошибками: fork failed: Cannot allocate memory.
При этом у сервера 16GB оперативки, из которых половина свободна.

В результате гуглинга выяснилось, что это баг, появившийся в версии 11.10: ссылка.
Вкратце: крон очистки сессий php использует утилиту fuser, которая вдруг начинает бесконечно размножаться, пока не уничтожает все ресурсы. Такая себе форк-бомба.

Воркераунд есть по ссылке выше.

Если честно, я в шоке. Совсем не ожидал такого от убунты.

mysql, postgre, mongodb и снова mysql

На работе столкнулся с досадным недостатком mysql: он не умеет делать слияние отсортированных индексом массивов.

На пальцах: пусть есть таблица  objects (id, category_id, time) с индексом (category_id, time). Задача – выбрать среди данных нескольки категорий N последних.

Запрос:
SELECT  * FROM objects WHERE category_id IN (10,11,12,13, 14) ORDER BY time DESC LIMIT 10;
даже не думает работать по индексу. Он отбирает все объекты из этих категорий, сортирует их filesort’ом и потом отбирает первые. Хотя очень логично поступить аналогично сортировке слиянием: взять отсортированные последовательности для каждой категории и сливать их, пока не получим N элементов.

Итак, мелькнула идея попробовать применить PostgreSQL. Поставил, перелил в него таблицу, сделал аналогичные запросы – он приятно удивил: 0.5-0.6 секунд против 2.5-3.0 в мускуле. Причём Постгре был под виндой, а Мускул под FreeBSD. Не могу точно утверждать, индексы разруливает лучше или просто сыграл тот факт, что движок быстрее (а он реально быстрее), потому что он и без проставленных индексов работал быстрее мускула (в районе 1.0-1.5 сек).

Я бы на этом и остановился, но шеф настоял, чтобы я попробовал MongoDB. Опустив лирику, могу только подписаться под резюме: “Быстрый, как понос”. Для той же самой задачи он дал результаты порядка 0.2-0.3 сек.

И уже все были готовы перейти на использование MongoDB, как вдруг мелькнула шальная мысль. Сделали копию таблицу в Mysql MEMORY engine, внесли данные в нужном порядке, убрали (!) все индексы. Ура! Результаты порядка 0.02-0.05 сек.

Что тут сказать… Универсальных решений не бывает, вот и всё.

Opera лидирует

На моём подопечном сайте www.bisound.com в браузерах лидирует Opera. Приятно. Особенно, учитывая, что я именно её никогда не пиарил.

_Screenshot_-_26.11.2009_19_01_07
кликабл

Хранение паролей онлайн

Сегодня занялся проблемой удобного и безопасного хранений паролей онлайн.

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

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

Сегодня добрый человек подкинул ссылочку www.clipperz.com (она же выдаётся второй в гугле по запросу online password manager).

Без лишних слов, что понравилось: 

  • полностью аяксово-жаваскриптный, страница не перегружается;
  • не хранит авторизацию нигде. После закрытия вкладки авторизация пропадает;
  • есть режим временной блокировки страницы без закрытия; 
  • может создавать одноразовые пароли для входа на этот сервис с небезопасных мест;
  • твои записи группируются в "карточки", для каждой можно сохранить урл, логин, пароль, дату или любые текстовые записи;
  • пароль скрыт звёздочками, удобно и почти незаметно для наблюдателей показывается для ctrl+C (сам выделяется и ридонли, радует);
  • пасворд генератор присутствует;
  • для карточки можно сформировать "direct login", ссылку, которая тебя приводит на сайт и авторизирует. Довольно удобно: зайти на нужный сайт, сфокусировать форму логина, нажать на их букмарклет, скопипастить кусочек кода на их сайт, забиндить поля формы с введёнными для карточки логином-паролем;
  • умеет логиниться на сайты по http-авторизации (например, phpmyadmin). Как direct login, только чуть-чуть сложнее сделать;
  • умеет располагаться на боковой панели Оперы или ФФ в компактном режиме;
  • умеет экспортироваться в json, показываться в печатаемом виде;
  • умеет импортироваться из csv, xls и форматов популярных менеджеров паролей;
  • умеет сохранять полностью функциональную локальную оффлайн-копию себя как один .html файл (вот это действительно поразило!). оффлайн-версия, кстати, тоже защищена паролем;
  • умеет хранить всякие визитки, банковские акаунты, адреса и прочее, не разбирался, т.к. не нужно.

Не понравилось: 

  • нет никакой группировки, иерархии, структурированности записей. Все заметки в одном списке, поиска нет. 
  • грузный. Стартовая страница ест полметра, аякс работает через https. Подозреваю, через мобильный инет работать будет крайне тяжело (хотя оффлайн-версия частично решает эту проблему)
  • отсутствие лёгкой версии – просмотр прямо с телефона исключён. Через Оперу мини – возможно, но явно крайне тяжело. 

А чем пользуешься ты? Что ты думаешь по поводу такого сервиса? Что можешь ещё посоветовать?

осторожно, SQL_CALC_FOUND_ROWS

Я всегда считал, что SQL_CALC_FOUND_ROWS – это круто.

Для тех, кто ещё не знает, что это – позволяет два запроса типа
“SELECT * FROM tbl WHERE somecondition LIMIT 100,10″,
“SELECT COUNT(*) FROM tbl WHERE somecondition”

выполнить в одном:
“SELECT SQL_CALC_FOUND_ROWS * FROM tbl WHERE somecondition LIMIT 100,10″
и затем вытащить количество найденных строк дополнительным запросом
“SELECT FOUND_ROWS()”.

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

Оказывается, может.
Статья с Хабра, букв много, рекомендую глянуть сразу диаграмму результатов. Для тех кто не верит – более авторитетный источник на английском.

То есть, не так уж она хороша, эта удобная конструкция =(

народ жжот

Если кто не знает, я по работе веду Bisound.com, и на нём есть страница помощи для особо одарённых. Ссылки смотреть не обязательно. Ключевой фрагмент:

Я не могу скачать файл
1. если Вы не вошли на сайт как зарегистрированный пользователь, то можете скачать не больше 10 песен в день. Чтобы скачать больше, зарегистрируйтесь или, если уже регистрировались, войдите на сайт.
1a. если Вы зарегистрировались и вошли на сайт, но всё равно видите сообщение что лимит закачек исчерпан, вероятно Ваш браузер кеширует страницы. Попробуйте обновить страницу (F5)
2. проверьте, правильно ли вводите код капчи (картинки с цифрами).

Так вот, сегодня приходит гениальнейший мейл в службу поддержки(дословно):
“Как зайти на сайт 1а? И обновить страницу F5?”

Я, как говорится, плакал.

А потом взгрустнулось – пора выпускать ликбез по интернету прямо.

фича switch в php

Вчера наткнулся в комментариях php.net на забавную недокументированную особенность switch в php: возможность писать после case не только конкретные значения переменной, но и вполне самостоятельные условия, в т.ч. никак не связанных с самой переменной. Например:

$age = 8;
$disableAgeCheck = false;

switch($age)
{
case ($disableAgeCheck): echo “Проверка возраста отключена”;break;
case ($age<0): echo “Ещё не родился?”;break;
case 5: echo “Ровно 5 лет”;break;
case ($age<10): echo ‘Ребёнок';break;
case ($age<20): echo ‘Подросток';break;
default: echo ‘Взрослый';
}

Удивительно, но все ветки, включая первую – работают правильно.
Подытожив, case работает стандартно, если в нём константа, если переменная или выражение – вычисляет и проверяет логическое значение.

темы к phpmyadmin

сегодня попробовал возможность встроить в PMA больше тем. Немножко тем нашёл здесь: http://www.phpmyadmin.net/home_page/themes.php#pma_3_1 – мне хватило. Теперь страницы PMA стали на порядок красивее, в добавок выбрал разные темы для разных серверов – перестал путаться. Советую.
P.S. в последней версии PMA настраивается цвет фона – тоже полезная фича.