28 июня 2012 г.

Почему я больше не делаю мобильные версии сайтов


Мобильная версия будет отвлекать силы и время на ее поддержание. Смартфоны с удобным выходом в интернет сделают эту работу просто бессмысленной. Они стали доступнее, их качество выросло.
Вот, какие гейши...
Мобильные устройства быстро развиваются, в 2010 году смартфон с разрешением экрана 320 на 480 пикселей стоил около 9 тыс. руб. в 2012 около 4,5 тыс (мой телефон смартфон обесценился в 2 раза! и он все еще продается в магазинах). По собственному опыту могу сказать, что комфортное просматривание страниц начинается именно с этого разрешения экрана. Браузеры  для  смартфонов выполнены на более высоком уровне, чем для обычных мобильных телефонов, которые с малой вероятности вообще будут обновляться. Смартфоны уже  позволяют совмещать  функции некоторых уже привычных устройств, таких как навигаторы, электронные читалки, медиа плееры и будильники, органайзеры, калькуляторы и др, что позволит смартфонам занять место в карманах людей.  Стандартные браузеры для устройств на Android до 4.0 и IOs, Windows Phone, скорее всего, обновляться не будут, но будут доступны устанавливаемые альтернативные браузеры, что позволяет предположить, что качество отображение страниц в браузере будет повышаться.
К тому же, всякая попытка «пересаживать» посетителей на урезанную мобильную версию будет вызывать раздражение у них.
Что будет с мобильными телефонами
Мобильные телефоны с номинальной возможностью выхода в интернет существуют, но их доля среди владельцев будет снижаться и останется на определенном нишевом уровне. Выход в интернет с этих устройств не рассматривается их владельцами в качестве приоритетных опции телефона.
Что делать с сайтом
Теперь сайт будет необходимо тестировать для отображения на мобильных устройствах, применять техники адаптивной верстки с явным использованием viewport-а.

20 июня 2012 г.

Ruby, регулярные выражения и Windows XP


Ruby хоть и является одним из наикроссплатформейших языков общего назначения с которыми мне приходилось работать, но в нем то и дело спотыкаюсь о грабли ее реализации на разных платформах.
Так сегодня мне потребовалось написать скрипт на ruby, который должен был запускаться на Windows XP (При этом я еще хотел его запускать дома, уже на Linux).  Проблема заключалось в том что регулярные выражения, которые я применял к импортируемому тексту из стороннего файла напрачь не работали. Как заведено, в опенсорсе, раскажу о своей проблеме и как ее решал, кому нибудь пригодиться.
Что было:
  • Windows XP
  • ruby (MRI v1.9.3)
  • Большой текстовый файл в кодировке utf-8, почти все содержимое набрано кириллицей.
Соответственно требовалось написать консольный скрипт, который бы потрашил этот злополучный файл регулярными выражениями. Регулярные выражения, конечно же были с модификатором "u", ибо содержали все бе кириллические символы.
Как иследовало ожидать проблемы в Windows XP были в двух кодировках. Консоль в Windows XP в IBM866 (соответственно импортируемый текст тоже был в ней), сам файл в utf-8.

Вообщем пришел к такому варианту:
# coding: utf-8
# Попутно, в Windows, импортированный utf-8 текст (через File) будет в utf-8 (а не IBM866)
Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
# регулярное выражение:
FIOPATTERN=/^Имя:\s*([^\n^\r]+)/u

31 мая 2012 г.

Депозитный калькулятор


Если Вы ищете легкий инструмент с помощью, которого можно посчитать доход по вкладу.
Представляю общественному вниманию свою недавнюю работу, приложение для браузера Chrome - депозитный калькулятор Deposit Calculation Tool.
Приложение создано, чтобы помочь определить вероятный доход по вкладу. В приложение cуществует возможность расчета дохода:

  • с ежемесячной капитализации;
  • с пополнениями вкладов (с частичным снятием я делать не стал, так как не встречал людей, которые такое планировали, но пожеланию такую возможность можно добавить);
  • с различным сроком (с точностью до нескольких дней).
Внешний вид Deposit Calculation Tool 

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


23 мая 2012 г.

Все разумно в пределах потребностей


Сегодня в обеденный перерыв мне пришло озарение, очередное. Так часто бывает. Я как обычно вышел на улицу подышать воздухом. Взглядом пробежался по округе - машины, одуваньчики, девушки. Так вот, все на месте, только  с одуваньчиками было не все в порядке. В виду того, что снег в этом году растаял на месяц раньше чем в прошлом году и одуваньчики начали во всю цвести и заполонять собой все газоны и пустыри. Не заметить аномалию с поведением одуваньчиками было не возможно.
Я даже с фотографировал.
Часть газона, которая освещена солнцем, в отличие от той что находиться в теньке, вся усеяна одуванчиками с раскрывшимися цветками. В пику им, те что в теньке, наоборот собрали свои бутончики.

Вот она растительная жизнь. Есть у них чувство хода событий. Растения может быть и не чувствуют ход времени, но меряют свой день солнечными лучами.
П.С. В конце осени видел голубя, который прыгал через водосливной проем в бардюре. Одназначно, он "на глаз" мерил расстояние и необходимые усилия своим мозгом. Хотя как бы иначе они вообще летали.

П. П. С. Вообщем занят был я последнее время. Совсем недавно запустил сайт клининговой компании "Северный блик". Люди, если кому-нибудь, потребуются чистые окна или радующий глаза, диван заходите  http://www.blik-cleaning.ru/ .

30 марта 2012 г.

Поле для форматированного ввода числа

Вступление
Вам никогда не требовалось контролировать пользователя при вводе данных в форму на сайте? На этой недели такую задачу я получил на работе. Имелось поле для ввода ссумы. Но чтобы ввод был форматированным не "100000", а "100 000". И соответстенно только цифры.

Что нам Google подскажет
Как Google(Yandex) не борется за хороший поиск, а оригинальные варианты он не отбирает. Получается список почти идентичных вариантов контроля ввода через событие keypress. Html5 тоже не помог type="number" даже не контролирует ввод только цифр. Не много отвлекусь, поиск по блогам Google или Яндекса частично помогает разрядить выдачу однотипных решений. Но все равно чтобы найти хороший метод в выдаче нужно постараться.

Что нам понадобится
В стартное html поле ввода input можно ввести данные тремя спосбами:
  1. с клавиатуры. Это можно отловить слушая события keypress, keydown, keyup;
  2. вставить из буфера обмена;
  3. автоподстановка в браузере. 
Почти все найденные мной в поисковике решения борятся с первым способом, неучитывая два других. Для борьбы с вставкой из буфера обмена я воспользовался JQuery плагином jQueryTextChange (ссылка1, ссылка2).  Для борьбы с автоподстановкой в тег input можно добавить атрибут autocomplete со значением off:
<input autocomplete="off" autofocus="" id="principal_amount" name="principal_amount" required type="text">
Как это выглядит
Представляю свое решение
if (!Array.prototype.indexOf){// Привет IE
    Array.prototype.indexOf = function(elt/*, from*/){
        var len = this.length,
            from = Number(arguments[1]) || 0;
        from = (from < 0) ? Math.ceil(from) : Math.floor(from);
        if (from < 0) from += len;
        for (; from < len; from++){
            if (from in this && this[from] === elt)
                return from;
        }
        return -1;
    };
}
function numberFormat(str){ // форматируем строку 12000 -> 12 000
    var     str_array=[],
            length=str.length;
    var undefined2string=function(val){
        return val?val:"";
    }
    for(var i=length-1; i>=0;i-=3){
        str_array.unshift(
            undefined2string(str[i-2])+undefined2string(str[i-1])+undefined2string(str[i])
        );
    }
    var resStr=str_array.join(" ");
    return resStr;
}
function createFormatControl(element,onchange_callback){
    if (!(element instanceof HTMLInputElement))
        throw("Wrong type of node, need HTMLInputElement");
        
    onchange_callback=onchange_callback||function(){};
    /*
    @e.keyCode:
        9 - Tab
        8 - Backspace
        46 - Del
        48-57 - 0-9
        13 - Enter
        37-40 - arrow: left,top,right,bottom
        35 -Home
        36 -End
    */
    $(element).bind("keydown",function(e){//контролируем ввод с клавиатуры
        var     keyCodeArray=[8,9,13,46];
        if(
            (e.keyCode>47 &&  e.keyCode<58) ||
            keyCodeArray.indexOf(e.keyCode) >= 0 ||
            (e.keyCode>34 &&  e.keyCode<41)
        ){
            return true;
        }else{
            return false;
        }
    }).bind("textchange",function(e){// Контролируем изменение текста (вставку из буфера обмена.)
    
        var     $this=$(this),
                origStr=$this.val().replace(/\D+/g,""),
                str=numberFormat(origStr);
        if(!(e.keyCode>34 &&  e.keyCode<41)){
            $this.val(str);
        }
        onchange_callback(str);
    });
}
$(document).ready(function(){
    var     in2 = document.getElementById("in2"),
            $deb3=$("#deb3");
    createFormatControl(in2,function(e){$deb3.text(e);});
});
Верстка:
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="jquery.textchange.min.js"></script>
<p>
    <label>#2: </label>
    <input type="text" id="in2" autocomplete="off"/>
</p>
<p id="deb3"></p>

Скачать архив с исходниками

19 февраля 2012 г.

Как составить график в Excel по отдельным точкам из диапазона


На все запросы Google и Yandex дружно поднимают всякий шлак на тему «Как легко вставить график».
Все оказалось достаточно просто нужно лишь перечислить необходимые точки через точку запятую («;»).
Ниже на скриншотах приведены диалоговые окна Excel 2007. Но для OpenOffice/LibreOffice Calc все делается аналогично.
Оригинальный график из которого надо оставить несколько точек
Выбираем данные.
Диалоговое окно в котором можно указать необходимые точки

Значение поля «Диапазон данных для диаграммы»:
=Позиции_по_недельно!$B$2:$AC$2;Позиции_по_недельно!$B$4:$AC$4
Заменяем на:
=Позиции_по_недельно!$B$2:$D$2;Позиции_по_недельно!$I$2:$I$2;Позиции_по_недельно!$M$2:$M$2;Позиции_по_недельно!$R$2:$R$2;Позиции_по_недельно!$W$2:$W$2;Позиции_по_недельно!$AC$2:$AC$2;Позиции_по_недельно!$B$4:$D$4;Позиции_по_недельно!$I$4:$I$4;Позиции_по_недельно!$M$4:$M$4;Позиции_по_недельно!$R$4:$R$4;Позиции_по_недельно!$W$4:$W$4;Позиции_по_недельно!$AC$4:$AC$4

В колонке B – подпись ряда, в колонке D начинаются собственно данные.

Результат



Итоги конкурса сайтов банков Санкт-Петербург

В Санкт-Петербурге, где я живу и работаю, существует организация "Северо западная ассоциация банков" (www. nwab.ru), которая ежегодно проводит конкурс банковских сайтов.  В конкурсе участвуют только банки состоящие в этой ассоциации. Так как начальство направляет меня туда в качестве члена жюри, то в моих руках оказались итоги конкурса за 2010, 2011 годы.

В следующей таблице приведены итоги конкурса за 2011 год и для сравнения итоги за 2010 год.

Занятое место в 2011 Банк Занятое место в 2010 Изменение по сравнению с 2010
1 Альфа-Банк 1 0
2 Райффайзенбанк 17 +15
ЮниКредит Банк 6 +4
3 Северо-Западный банк Сберегательного банка России 19 +16
4 Росбанк 21 +17
5 Абсолют Банк 8 +3
Открытие 9 +4
ЮНИАСТРУМ БАНК 5 0
6 Русский Стандарт 13 +7
7 Банк БФА 63 +56
Московский Банк Реконструкции и Развития 2 -5
8 ГЛОБЭКС 10 +2
КИТ Финанс 22 +14
9 НОМОС-БАНК 15 +6
10 Ханты-Мансийский банк 24 +14
11 Связь-Банк 23 +12
12 Газпромбанк 3 -9
13 ПРОМСВЯЗЬБАНК 18 +5
14 Агросоюз
15 АГРОПРОМКРЕДИТ 4 -11
16 ВТБ 24 7 -9
17 Инвестбанк 17 0
18 БАЛТИНВЕСТБАНК 39 +21
19 МДМ Банк 10 -9
20 Национальный Залоговый Банк 46 +26
Национальный Резервный Банк 38 +18
21 Мираф-Банк 57 +36
22 Банк "Санкт-Петербург" 10 -12
Стройкредит 20 -2
Энергомашбанк 26 +4
23 ГОРОД 14 -9
24 Мастер-Банк 27 +3
25 Сведбанк 32 +7
26 РОССИЯ 40 +14
27 МОСОБЛБАНК 33 +6
28 Ланта-Банк 44 +16
29 ВТБ, Северо-Западный региональный центр 12 -17
30 Витабанк 25 -5
31 Огни Москвы
32 Кредит-Москва 37 +5
33 Охотный ряд 32 -1
34 ЗЕНИТ 34 0
Констанс-Банк 56 +22
35 Александровский 53 +18
36 МБА-Москва 35 -1
37 Севзапинвестпромбанк 48 +11
38 Петербургский Городской Банк 41 +3
39 ПромСервисБанк 49 +10
Эллипс банк
40 СЕВЕРГАЗБАНК 60 +20
41 Советский 36 -5
Экономический Союз 45 +4
42 СИАБ 31 -11
43 Адмиралтейский 42 -1
Балтика
44 Таврический 51 +7
45 Объединенный капитал 65 +20
46 Международный банк Санкт-Петербурга 55 +9
47 МОРСКОЙ БАНК 47 0
Рускобанк 57 +10
48 Тетраполис 52 +4
49 Викинг 59 +10
50 Невский банк 66 +16
51 Финансовый капитал 70 +19
52 Москомприватбанк 64 +12
53 Национальный Торговый Банк 43 -10
54 Банкирский Дом 67 +13
СЭБ Банк 58 +4
55 Северо-Западный 1 Альянс Банк
56 Инвест-Экобанк 72 +16
57 Санкт-Петербургский банк инвестиций 71 +14
58 Югра 69 +11
59 ЭКСИ-Банк 75 +16
60 НЕВАСТРОЙИНВЕСТ 74 +14
Банки которые участвовали в 2010, но  не приняли участие в 2011 году:
БИНБАНК - 11, АМТ-Банк - 16, Сосьете Женераль Восток - 28, Первый Республиканский Банк - 29, Эйч-Си-Би-Си Банк - 30, Балтийский Банк - 32, Алемар - 50, СИББИЗНЕСБАНК - 61, КОММЕРЦБАНК (ЕВРАЗИЯ) - 62, БНП Париба Восток - 68, Кредит Свис - 73.

Небольшие замечания к результатам:
  • В 2011 при определение мест учитывался  средний бал по всем параметрам оценки сайта (и видимо было округление), в то время как в 2010 все балы суммировались. Возможно этим можно объяснить большое количество банков на одних и тех же местах;
  • Некоторые изменения в позициях у некоторых банков можно объяснить уменьшением количества участников.
Что здесь можно сказать:
  • Сайты студии Артемия Лебедева в фаворитах (Альфа банк и Русский Стандарт);
  • Банки которые в 2011 году вложились в свои сайты довольно существенно поднялись по таблице - Банк БФА с 63 до 7-го, Росбанк с 21 до  4 и т. д.