Архив категории coding

Контроль времени загрузки сайта в Google Analytics

Время загрузки сайта влияет на различные показатели. Если сайт грузится очень долго показатель отказов будет высоким. Значение времени загрузки можно мерить различными способами: на сервере, проводить нагрузочные тестирования и т.д.

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

pageTracker._trackPageLoadTime();

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

Пример отчета, который можно получить:

Подробнее про установку и возможности можно прочитать в статье или документации Google.

Также опубликована в marketing, web | Теги , | 2 Комментарии

Определение местоположения по Wifi и GSM

Компания Яндекс объявила об открытии нового API — Яндекс.Локатор, который позволяет определять местоположения пользователя по Wifi, GSM и IP адресу.

Как это работает?
Яндекс в своих сервисах определяет местоположение пользователя с помощью встроенных GPS датчиков и сопоставляет с данными Wifi и GSM обнаруженных вокруг. Далее с использованием триангуляции и др. алгоритмов сервис позволяет восстановить по Wifi и GSM местоположение с определенной точностью.
Уникальность данного предложения в том, что Яндекс владеет очень большим количеством статистических данных, что позволяет выдавать актуальные данные. Т.к. известно, что идентификаторы GSM вышек достаточно часто меняются, Wifi появляются и пропадают и т.д. только создав целую сеть постоянно используемых сервисов Яндекс сможет поддерживать систему в актуальном состоянии, что недоступно ни одной небольшой компании собирающих данные в одиночку.

Для чего это нужно?
В первую очередь это необходимо для мобильных приложений вроде Афиши или 4sq для того, чтобы выводить информацию актуальную местоположению пользователя.
Однако это может пригодиться и в обычных вебпроектах, т.к. проект может вести себя по разному в зависимости от того где находится пользователь.
Например:

  • показывать разную рекламу для разных регионов
  • показывать различные данные привязанные к положению
  • подсказывать данные при регистрации и т.п.
  • соц. состовляющие (друзья рядом и т.д.)

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

Документация по внедрению API доступна по соотвутствующей ссылке.

Также опубликована в marketing, web | Теги , , | 2 Комментарии

Бекап и восстановление OpenVZ серверов

Данные нужно бекапить — это закон. Однако хотелось бы это делать так, чтобы к рабочему состоянию можно было вернуться за короткий период времени.
Если вы бекапите всю БД + сохраняете архив с файлами сайта, то в случае уничтожения сервера вам сначала необходимо будет поднять новый сервер, настроить его, а затем разворачивать сайт. Если сайтов несколько (в моем случае живет 10 сайтов), то процедуру развертывания придется проводить для каждого сайта отдельно. Итого на восстановление может уйти много времени. Гораздо эффективнее и проще настроить бекап всего сервера разом, что я и реализовал.
Делается это с помощью технологии виртуализации OpenVZ.


Читать дальше »

Также опубликована в soft | Теги , , , , , | 4 Комментарии

Facebook Like, Twitter Share и др. модули для блога

Социализация прочно вошла в нашу жизнь и сейчас зачастую трафик с социальных сетей догоняет и обгоняет трафик из поисковых систем.
Найдя наконец пару часов решил привести блог в порядок, поправил свой wishlist, i am reading и добавил модули расшаривания в соц сети.
Итак попорядку:
Facebook Like button
По сути состоит из двух частей:

  • Like на конкретную страницу, который позволяет пользователям показывать интерес к данной странице и делить ей со своими друзьями.
  • Like на весь сайт, который дает пользователям высказывать любовь к сайту в целом на любой из страниц (у меня расположен в верхнем правом блоке).

Оба элемента вставляются iframe или XFBML блоком со страницы Facebook Like button, где вы можете сгенерировать тебе блок с помощью формы. Единственным отличием второго варианта является необходимость явно указать url сайта.
Twitter Share button
Тут все очень похоже, кнопка генерируется с помощью формы на странице Twitter Share button. Никакой URL указывать не нужно, скрипт сам определяет на какой странице он расположен.
Яндекс поделиться
Последним и достаточно быстрым способом создать Share модуль для сайта является сервис Яндекса «Блок поделиться». Аналогично с помощью форму генерируется блок на странице сайта и вставляется на любой страницу в вашем проекте. Дешево и сердито.

Также опубликована в usability, web | Теги , , , | Оставить комментарий

Бесплатный DNS хостинг

После того, как я обнаружил, что мой хостер перепродает серверы немецкого датацентра было принято решение переехать туда самостоятельно. Благо в наш век спокойно можно все обсудить на английском и затем оплатить кредитной картой. Я существенно выиграл, теперь за железку я плачу 29+1 евро вместо 49. Единственный открытый вопрос — DNS хостинг с гибкой настройкой, т.к. почта летит напрямую в Google Apps аккаунт + календарь + docs. Я уже был готов заплатить по 31 рублю за домен своему регистратору, как обнаружил, что компания Yandex предоставляет бесплатный DNS хостинг для всех желающих, при этом все настраивается очень легко и не нужно никаких дополнительных знаний.
Подробнее можно узнать по ссылке http://pdd.yandex.ru.

P.S. Основной плюс заключается в авторитете компании, который дает гарантии в безопасности предоставлении домена.

Также опубликована в soft, web | Теги , | 4 Комментарии

Настройка redmine и svn на Debian 5.0

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

Основной и самый работающий вариант описан в pdf документе: Redmine Installation on Debian
Единственное, что не заработало — автоматом ставится passenger-2.2.10, а в описании используется passenger-2.2.1, поэтому вместо gem install passenger нужно писать gem install passenger -v=2.2.1

Далее было еще несколько различных багов, а также с добавление функционала SVN помогли следующие доки:
http://www.redmine.org/wiki/1/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl (тут как привязать к redmine)
http://www.debuntu.org/2006/05/20/54-how-to-subversion-svn-with-apache2-and-dav (описание как поднять svn)
http://www.redmine.org/boards/2/topics/6387 (столкнулся с похожей проблемой при привязке)
http://www.redmine.org/wiki/redmine/HowTo_to_handle_SVN_repositories_creation_and_access_control_with_Redmine (тут описано как автоматически создавать репозитории при создании проекта)

В общем все, от себя добавлю, что после полноценной привязки чтобы репозиторий был недоступен без авторизации необходимо снять галку «общедоступно» в настройках проекта, а чтобы получить доступ к репозиторию под своей учеткой redmine необходимо добавить себя к проекту даже если вы администратор.

Также опубликована в soft | Теги | 2 Комментарии

Создание подблога в WordPress

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

Требования:

  • записи из личного не должны попадать на главную страницу
  • под записи из личного должна быть отдельная категория (подблог)
  • в новом подблоге должна быть своя RSS лента
  • в основной RSS ленте не должно быть записей из личного подблога

Решение:

  1. Создаем рубрику, в моем случае рубрика личное с urlname private
  2. Узнаем ID новой категории, его можно подсматреть напрямую в БД или в админке при редактировании категории ссылка будет содержать данное число
  3. Редактируем файл functions.php темы, которую вы используете. Добавляем следующие строчки:

    function filter_subblog_entries($query)
    {
    if (!$query->is_admin &&
    (!isset($query->query_vars->category_name) || $query->query_vars->category_name != 'private')
    ) //exclude private from main and not admin
    {
    $query->set('cat','-44');
    }

    return $query;
    }
    add_filter('pre_get_posts','filter_subblog_entries');

    Вместо 44 подставляем число, полученное из третьего пункта, вместо private подставляем urlname нашей категории

Готово. Теперь главная страница и RSS лента не содержит сообщений из личного подблога, а в категории личного подблога и RSS содержатся только нужные нам посты.

P.S.
Если вы используете widgets и там есть ссылки на RSS, то необходимо при просмотре подблога показывать другой вариант widget’a (с другой ссылкой на RSS) для этого идеально подходит плагин Widget Logic, который показывает виджеты в зависимости от логического условия.

Также опубликована в soft, web | Теги , | 10 Комментарии

Генерация рыбы для баннеров

При разработке и тестировании веб проектов удобно забивать сайт рыбой — бессмысленным текстом, который показывает как будет отображаться информация.
Чаще всего тексты генерируются на http://vesna.yandex.ru или http://www.lipsum.com/.

На место баннеров генерируются заглушки с указанием размера. Для того, чтобы не терять время на их создание и облегчить труд вебразработчикам создали проект http://dummyimage.com. Он геренирует картинку по размеру, переданную последним параметром.
Например, по адресу http://dummyimage.com/468×60 мы получаем вот такую картинку:

а по адресу http://dummyimage.com/30×30, вот такую:

Также опубликована в web | Оставить комментарий

Просмотр сайта в различных браузерах

Все верстальщики держат семейство браузеров, для того, чтобы проверить, что сайт смотрится везде одинаково.
Запускать отдельно каждый и просматривать неудобно и отнимает много времени.
Быстрое решение — проект от Adobe Adobe browser lab.
Вы просто выбираете список браузеров, вставляете ссылку и через некоторое время сравниваете результат в виде скриншотов.

Замечательная возможность — наложение картинок друг на друга, для того, чтобы более точно понять где верстка едет.

adobe

Adobe browser lab

Также опубликована в web | Теги , , , | Оставить комментарий

Интеграция сайта с Invision Power Board

Разрабатывая новую версию сайта http://beproplayer.ru столкнулись с необходимостью привязать пользователей сайта к пользователям форума.
Необходима полная интеграция (добавление, удаление, редактирование и т.д.). С учетом того, что на сайте у пользователя есть очень много дополнительных свойств (анкета, принадлежность группе, биллинг, купленные пакеты и многое другое), решили закрыть все, что связано с пользователем на форуме (прячем регистрацию, удаление и т.д.) и реализовать все через сайт.
Проект разрабатывается на фреймворке Codeigniter.
Изучив готовые решения и опыт сообществ остановился на проекте IPWI — Api для работы с Invision Power Board. Реализовано все достаточно удобно и красиво, и особо приятно наличие хорошей документации, доступной по адресу http://docs.ipbwi.com/.
Разработчикам, использующим Codeigniter, известно, что классы нужно использовать через библиотеки.

Для этого, внедрим в движок Codeigniter класс IPWI.

  1. Скачиваем последнюю версию IPWI
  2. Копируем папку ipwi в папку system\application\libraries
  3. Редактируем файл config.inc.php, там необходимо прописать адрес до форума, до нашего класса и адрес сайта
  4. Переименовываем файл ipbwi.inc.php в ipbwi.php
  5. В переименованном файле ipbwi.php комментируем строчку $ipbwi = new ipbwi();
  6. Готово.

Теперь можно писать любую интеграцию с форумом. Например, чтобы при регистрации на сайте автоматически добавить пользователя на форуме нужно:

$this->load->library('ipbwi/ipbwi'); //подключаем библиотеку
$this->ipbwi->member->create($login, $password, $email); //регистрируем пользователя

Все интерфейсы достаточно подробно описаны в документации.

logo_728x90

Опубликовано в рубрике coding | Теги , , , | 4 Комментарии