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-программиста

Knockout и this

4 июля 2014

Knockout, безусловно, весьма мощная библиотека, которая позволяет сэкономить море времени, но некоторые моменты в её работе, мне показались неудобными. Про один из них эта заметка. Binding «click» просит указать метод, но особенности JavaScript-а, не позволяют удобным способом указать метод и объект this, для его вызова. В итоге мы имеем вот такие вот уродливые конструкции

<span data-bind="click: $root.save.bind($root)"></span>
<span data-bind="click: $root.edit.bind($root, 'someParameter')"></span>

У меня возникло желание как это дело упростить. Я решил остановиться на таком варианте:

<span data-bind="click: @save"></span>
<span data-bind="click: [@edit, 'someParameter']"></span>

Возможно, не очень очевидный синтаксис, но никто не мешает придумать свой :) Итак, задача состоит в том, чтобы заставить knockout эти конструкции принимать за нужный метод. Для этого воспользуемся хаком preprocess для bindingclick. У меня получилось примерно так:

    ko.bindingHandlers.click.preprocess = function( val )
    {
        val = $.trim( val );

        if( val[ 0 ] === '@' )
        {
            var method = val.substr( 1 );
            return 'function(){ return $root["' + method + '"].apply( $root, arguments ); }';
        }

        if( val[ 0 ] === '[' && val[ val.length - 1 ] === ']' )
        {
            val = $.trim( val.substr( 1, val.length - 2 ) );
            var params = val.split( /\s*,\s*/ );
            if( params[ 0 ] && params[ 0 ][ 0 ] === '@' )
            {
                var method = params.shift().substr( 1 );
                var args = params.join(', ');
                var js = 'function()\n' +
                    '{\n' +
                        '\tvar args = [ ' + params + ' ].concat( _.toArray( arguments ) );\n' +
                        '\treturn $root["' + method + '"].apply( $root, args );\n' +
                    '}';
                return js;
            }
        }

        return val;
    }

Решение пока черновое и не обкатанное. К тому же на click-е мир клином не сошёлся и нужно что-то более универсальное.

InoReader как замена усопшему Google Reader-у

23 апреля 2014

В прошлом, кажется, году Google приняла решение убить свой успешный продукт — Google Reader, который к этому моменту, успели полюбить миллионы, если не десятки миллионов. Причины указаны не были, но народ решил, что всё дело в не очень большой популярности их социальной сети Google+. В любом случае проект закрыли, а необходимость удобно читать и не только RSS никуда не исчезла. 

Какое то время хабрахабр был атакован десятками статей про различные RSS-агрегаторы, число которых росло как на дрожжах. Многие из них были написаны только из-за закрытия Google Reader-а. Самым популярным, как мне показалось, на тот момент был Feedly. Причём уже тогда у него была мобильная версия. Я попробовал 4-5 различных сервисов, в том числе и Feedly. Больше всего мне не понравился как раз он. Разработчики решли отойти от изначальной концепции и родить что-то своё, оригинальное и не на что не похожее. У них это получилось. Как этим пользоваться, я, право, так и не разобрался. В особенности в мобильнике. В итоге про Feedly я забыл и стал искать более googlereader-like аналоги. Названия их я не запомнил, почти все не умели чего то очень важного для меня, какой-то из них внезапно стал "чисто для своих", а некоторые закрылись. 

В итоге мой выбор пал на InoReader. Пользуюсь им уже где-то полгода-год и проблем не знаю. На какое то время, как мне показалось, на проект подзабили. Но пару месяцев назад все update-ы стали отображаться с просьбами обновить страницу, ну или посмотреть на список изменений. Был редизайн (в лучшую сторону). В конечном итоге получился довольно вкусный продукт. На мой взгляд лучший, чем был Google Reader. Посему рекомендую :)

подробности…

PHP-FPM и short_open_tag

19 апреля 2014

Перенеся сервер, на котором расположен deltaplan.kz, с apache2 на php-fpm, я столкнулся с неожиданной проблемой. Несмотря на правильным образом настроенные nginx конфиг и php-fpm pool GPS-подсайта — сервер упрямо, вместо того, чтобы запускать PHP файлы, возвращал их исходный код. Первым делом я вспомнил про security.limit_extensions = .php. Затем полез мучить различные fastcgi-параметры nginx хоста. Однако враг зашёл с другой стороны. Дело в том что в /etc/php5/fpm/php.ini по непонятным мне причинам был установлен short_open_tag: Off, в то время как XC Leonardo вовсю использует сокращённый вариант <? ?>. Разрешив эту опцию и перегрузив php5-fpm всё взлетело.

Пишем плагин для CKEditor 4

30 ноября 2013

CKEditor - это WYSIWYG редактор HTML-кода для браузеров. Всякий раз, сталкиваясь с его документацией или же с его исходным кодом, с исходным кодом его плагинов я терялся. И это не мудрено, ведь CKEditor это очень большой продукт, имеющий довольно сложную инфраструктуру. Но, зачастую, стандартных возможностей не хватает и требуется добавить свою. В этой статье я хотел бы остановиться на плагине, который позволяет встраивать и оперировать в редакторе Yandex-картами. Вот так это будет выглядеть по окончанию редактирования:

534e37778bc3f.png

подробности…

Sublime Text 2

18 июля 2012

534e2c96ca7ea.pngПару месяцев назад я случайно наткнулся на массу положительных отзывов о текстовом редакторе Sublime Text 2. Попробовав его в деле, я не разочаровался. Теперь это мой основной рабочий инструмент. Sublime Text 2 - это платный текстовый редактор, написанный на C++, который:

  • Работает в LinuxOS X и Windows
  • Обладает приличной скоростью работы
  • Приятным интерфейсом (включая всевозможные анимации)
  • Гибко настраиваем (правда, не в GUI, а в json-конфигах)
  • Имеет множество плагинов, число которых растёт как на дрожжах
  • Поддерживает VIM-режим
  • Использует fuzzy-поиск

подробности…