misc/class
lib/jquery_pnotify, lib/moment, lib/lodash, misc/notification, site/engine, misc/social
if( $.browser.msie && $.browser.version <= 8 ) include('lib/respond'); $._social.__cfg = {"init":[{"service":"basic"},{"fb_app_id":"1997094873850041","service":"fb"},{"vk_app_id":"2978320","service":"vk"},{"service":"twi"}],"like":[{"service":"fb"},{"service":"vk"},{"via":"","channel":"","hash_tag":"","service":"twi"}]}; window._SiteEngine = new classes.SiteEngine( { user_id: 0, controller: 'content_tape', action: 'view', content_css_version: '1459538664', social_enabled: 0} );

Faiwer

Блог web-программиста

PHP-FPM и Nginx

7 ноября 2014

После обновления на живом сервере с php5.3 до php5.5 столкнулся с неприятной проблемой. Socket-файл, для прослушивания nginx-ом, который создаёт при старте демон php5-fpm, стал недоступен для nginx, который запускается от www-data. Лечится это дело очень просто, необходимо в pool-конфиги добавить следующее:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Думаю по названиям настроек всё более чем понятно. Жаль только, что когда я попробовал перенести эти настройки на уровень выше, в сам php-fpm.conf, демон споткнулся при старте. Так было бы удобнее.

В поисках замены Evernote

7 ноября 2014

В очередной раз наткнувшись на упоминание о заметках Evernote, а также, увидев сообщение на хабре: "а чем вас nixnote не устраивает", решил попробовать с ним поиграться. В итоге перебровал несколько клиентов и ещё больше разочаровался в подобном софте для linux...

NixNote

NixNote (ранее NeverNote) — open source linux (и не только) вариант EverNote. Имеет не самый симпатичный клиент, но достаточно функциональный. Доступны теги, каталоги, разметка, поиск и пр. штуки. Сравнить его функциональность с оригинальной не могу, ибо не пользовался оригинальными заметками. Их клиента под Linux попросту нет.

NixNote мне не подошёл ввиду того, что он попросту не может соединиться с серверами EverNote. Выкидывает OAuth ошибку. Подозреваю, что EverNote просто сменили API. Обновления от апреля 2014г. Отсутствие какого-то внятного сообщества или хотя бы bug-трекера… (или я плохо искал?). Пришлось забить. Да и зависимость от смены API не очень то радует.

Springseed

Имеет довольно симпатичную шкурку. Похоже, что написан на nodeJS. Ввиду чего deb-packet тянет аж 60 MiB чего-то там. С треем работать не умеет. Функциональность вообще близкая к нулю. А та что есть, работает чрезвычайно глючно. Окно настроек включает только about-вкладку и oauth-авторизацию с dropbox. Какой-то мертворожденный софт, замаскированный под нормальный. Тот самый случай, когда HTML5-like сайт сделали, а нормальную программу не сделали. Хлам. И стыд.

Geeknote

Консольный клиент для EverNote. Мне такой хардкор не нужен. Я как разбалованный GUI-пользователь хочу удобную интеграцию с треем, продуманные окошки, контролы, поиск и пр. радости жизни. Сий софт расчитан на бородатых админов, видимо, либо на тех, кто свой GUI будет писать сам. Очень понравилась иконка :)

Everpad

Everpad — похоже самый вменяемый linux-клиент для EverNote. Судя по скриншотам и описанию имеет добротный интерфейс, тянет за собой всего 20 MiB (а не 60 MiB js-библиотек как springseed). Вся беда оказалась в том, что он не совсестим с LinuxMint. Похоже, что он как то хитро связан с gnome-окружением и под mint-ом его everpad-provider просто умирает в страшных корчах. Я с таким уже сталкивался с Cardapio. Правда в случае Cardapio мне хватило времени и желания его поддомкратить и таки запустить. В everpad багтрекере много сообщений с такими же ошибками. Нормального решения пока не выкатили. Разместил и свой error-trace.

Время на эксперименты пока закончилось. Это ещё не весь подобный софт. Может быть, что-нибудь таки взлетит и полетит. Однако первые впечатления весьма не радужные. Список для проб взял здесь.

Нечёткий поиск по именам файлов в ChromeDevTools

24 сентября 2014

Случайно обнаружил, что ChromeDevTools поддерживают нечёткий поиск по именам файлов на вкладке Sources. Поиск доступен также как и в SublimeText2 по комбинации Ctrl + P. Enjoy! :)

 

Calibri и Ubuntu

30 июля 2014

В очередной раз увидев как рисует браузер латинские буквы в microsoft-овском шрифте Calibri, решил это дело как-нибудь починить. Эксперементальным путём выяснил, что шрифт в системе есть, и что браузеры его правильно подхватывают, что уродливыми края у букв становятся только у латинских символов, и что только при размере <=16px. В итоге Google дал мне такой ответ:

Calibri fonts and other cleartype fonts have bitmap versions embedded in them which activate at small sizes, which makes it look bad. To disable this and get correct smoothing at all sizes do this:
Create a .fonts.conf file in your home directory, paste this in it:

<match target="font">
         <edit name="embeddedbitmap" mode="assign">
             <bool>false</bool>
         </edit>
</match>

Перезагрузив браузер (похоже, что для Chromium-а теперь это тривиально сделать невозможно, т.к. он работает аки daemon, но никаких иконок в tray-е не рисует) — убедился что уродливые границы исчезли. 

Экономия на числе запросов

4 июля 2014

До недавнего времени я предполагал, что 1 кривой INSERT SQL-запрос c ON DUPLICATE KEY UPDATE, должен выполняться быстрее, чем 2400 простых UPDATE SQL-запросов. Но на деле оказалось, что пляски с ON DUPLICATE KEY очень сильно гасят производительность. Более того — 2400 простых INSERT-ов с 3 изменямыми полями выполняются всего за 500-1000ms.

Собственно макеты запросов. Вариант с ON DUPLICATE KEY:

INSERT tbl (id, f1, f2, f3)
VALUES (1, 1, '2', 3), (2, 4, '5', 6) ...
ON DUBLICATE KEY UPDATE f1=VALUES(f1), f2=VALUES(f2), f3=VALUES(f3);

Вариант с UPDATE-ом:

UPDATE tbl SET f1=1, f2='2', f3=6 WHERE id = 1

Возможно, есть более элегантный вариант сделать 2400 UPDATE-ов не по всем полям (что отсеивает REPLACE INTO), используя всего 1 запрос, но я его не знаю :(

UPD 0. Шеф подсказал, что можно поступить примерно следующим образом — сформировать временную таблицу, содержащую все изменяемые данные, а следующим запросом простым UPDATE-ом с JOIN-ом считать оттуда данные. Правда следует учесть все тонкости работы с временными таблицами в mySQL.