Перейти к содержимому

Default channel что это

  • автор:

Default channel что это

Рисунок 15.10. Диалог « Каналы »

Диалог «Каналы»

Этот диалог является основным инструментом для редактирования и управления каналами изображения. Каналы используются в двух целях, поэтому диалог каналов разделён на две части: первая часть для цветовых каналов и вторая для масок выделения.

Color channels apply to the image and not to a specific layer. Basically, three primary colors are necessary to render all the wide range of natural colors. As other digital software, GIMP uses Red, Green, and Blue as primary colors. The first and primary channels display the Red , Green , and Blue values of each pixel in your image.

Next to the channel name is a thumbnail displaying a grayscale representation of each channel, where white is 100% and black is 0% of the primary color. Alternatively, if your image is not a colored but a Grayscale image, there is only one primary channel called Gray . For an Indexed image with a fixed number of known colors there is also only one primary channel called Indexed .

Then there is an optional channel called Alpha . This channel displays transparency values of each pixel in your image (See Alpha Channel in Glossary). In front of this channel is a thumbnail displaying a grayscale representation of the transparency where white is opaque and visible, and black is transparent and invisible. If you create your image without transparency then the Alpha channel is not present, but you can add it from the Layers dialog menu. Also, if you have more than one layer in your image, GIMP automatically creates an Alpha channel.

GIMP не поддерживает цветовые модели CMYK или YUV.

Рисунок 15.11. Представление изображения с помощью каналов

Источники трафика в GoogleAnalytics. Часть 1

Отчет «Источники трафика» содержит информацию по канальным группам.

Источник трафика

Группа каналов — это набор меток, которые можно присваивать различным источникам трафика на основании некоторых правил. Например, стандартная группа каналов «Default Channel Grouping» включает в себя 9 различных меток, принадлежность к каждой из которых определяется соответствующими правилами.

  1. Direct — прямой трафик.
  2. Organic Search — поисковый трафик из органической выдачи.
  3. Social — трафик из соцсетей.
  4. Email — трафик с email-рассылок.
  5. Affiliates — трафик с сайтов-партнеров.
  6. Referral — трафик переходов с сайтов.
  7. Paid Search — поисковый трафик с платных каналов.
  8. Other Advertising — другой трафик с UTM-метками, которые GoogleAnalytics не смог распознать по предустановленным правилам.
  9. Display — медийная или баннерная реклама.

Зайдите во вкладку «Администратор», в разделе «Настройки представления» перейдите в подраздел «Настройки канала» и выберите графу «Группа каналов»:

Группа каналов

Если не настроены пользовательские группы каналов, вы увидите единственную группу «Default Channel Grouping», где можно посмотреть, обнаружение каких меток подключено. Нажав на символ «Изменить» , вы увидите правила, по которым присваивается метка:

Default Channel Grouping

В настройках канальных групп есть возможность создать собственную, например, для отнесения трафика с определенной UTM-меткой к отдельному типу.

В отчете «Обзор» каждой метке группы используемых по умолчанию каналов «Default Channel Grouping» соответствуют показатели трех блоков: «Источники трафика», «Действия» и «Конверсии». Такое сочетание параметров в Google Analytics называют группами метрик ABC:

Группа метрик ABC

  1. Группа A (Acquisition — привлечение трафика) — показатели, характеризующие входящий трафик;
  2. Группа B (Behavior — поведение) — показатели, демонстрирующие поведение пользователей на сайте;
  3. Группа C (Conversion — конверсии) — показатели, характеризующие выполнение целевых действий пользователями.

Кликнув на любую из групп каналов, вы, например, можете перейти из отчета «Обзор» в отчет «Источники трафика → Весь трафик → Каналы». В зависимости от выбранной группы изменяется основной параметр, по которому строится таблица. Так, перейдя в «Organic Search» (органический поисковый трафик), вы увидите отчет по этой группе каналов в разрезе ключевых слов:

Organic Search

В группе «Direct» (прямой трафик) отчет будет строиться по страницам входа:

прямой трафик

Google Analytics определяет источники трафика посредством HTTP-заголовка, называемого реферером (referrer). Он содержит URL источника запроса и, если перейти с одной страницы на другую, в нем будет адрес первой из них. Код отслеживания Google Analytics анализирует реферер и извлекает из него нужную информацию, например, поисковый запрос пользователя.

Прямой трафик

Если у пользователя, пришедшего на сайт, нет реферера, сеанс относится к прямому трафику. Посетитель мог ввести адрес в поисковую строку браузера, использовать закладку или ссылку в журнале посещений. К прямому трафику также будут относиться переходы из различных приложений, например, из почтового клиента Microsoft Outlook. В GoogleAnalytics такой трафик имеет источник «direct» и канал «none».

Переходы из поисковых систем

Теоретически переход из поисковой системы ничем не отличается от перехода с любого другого сайта. Но Google Analytics обладает списком поисковых систем , с которым сравнивается реферер. Если есть совпадение, сеанс будет отнесен к органическому трафику с каналом «organic» и источником, соответствующим поисковой системе:

Обычно реферер, передаваемый поисковой системой, содержит в себе ключевое слово. В этом легко убедиться, посмотрев на URL в адресной строке:

реферер

GoogleAnalytics, анализируя реферер, определяет содержимое поискового запроса и заносит его в параметр «Ключевое слово».

Для просмотра отчета по ключевым словам из органического поиска перейдите по вкладкам «Источники трафика → Кампании → Неоплачиваемые ключевые слова»:

Неоплачиваемые ключевые слова

Как видим в приведенном примере, большая часть ключевых фраз зашифрована и скрыта в параметрах «(not provided)» и «(not set)».

С 2013 года Google ввел шифрование запросов для всех использующих HTTPS-протокол пользователей. При выполнении поиска в Google через HTTPS для параметра ключевика будет автоматически задано значение «(not provided)» — «не предусмотрено». Причина шифрования поисковых запросов в том, что история поиска — это, в сущности, персональные данные, которые Google, как поисковая система, стремится защитить. По данным сайта notprovidedcount.com процент «(not provided)» в общем количестве органического трафика Google занимает 78,24% (на февраль 2016 года).

Метка «(not provided)» встречается не только в Гугле, но и в других поисковых системах. Чтобы убедиться в этом, добавим еще один параметр «Источник» и отсортируем по ключевику «(not provided)»:

not provided

Яндекс в декабре 2013 года также начал эксперимент по кодировке текстов запросов в реферерах, а уже в июне 2014, по данным поисковой системы , стал шифровать 100% запросов. Трафик с таких переходов Яндекса отображается в отчетах Google Analytics с ключевым словом «(not set)».

not set

Если применить фильтр по источнику «yandex», можно увидеть, что не все ключевые слова из этого поисковика зашифрованы, что обусловлено наличием части посетителей, не использующих HTTPS-протокол (в этом случае шифрование запросов невозможно):

не все ключевые слова поисковика зашифрованы

По данным счетчиков Ingate, Яндекс шифрует порядка 85,4% поисковых запросов (HTTPS- протоколы).

При включенной интеграции Google Search Console1 (панель вебмастера Google) в отчете «Источники трафика → Поисковая оптимизация → Запросы» отображается больше поисковых запросов из Google, чем в отчете «Неоплачиваемые ключевые слова» (т. к. поисковая система отдает часть запросов в Google Search Console, но они обезличены):

Google Search Console

Обратите внимание, что в этом отчете отображается не показатель сеансов, а число кликов по сниппету сайта в поисковой выдаче Google по заданному запросу. Помимо этого в таблице можно посмотреть число показов, среднюю позицию сайта по запросу в выдаче поисковой системы и показатель CTR2, что может быть полезным для оценки эффективности поискового продвижения.

Параметр «Запрос» в отчете по поисковой оптимизации изолирован от остальных параметров Google Analytics, то есть сведения абсолютно обособлены от статистики сайта и, к сожалению, в этом случае нельзя сопоставить сеанс с поисковым запросом.

12 лет работаем с лидерами рынков и молодыми амбициозными компаниями

— Реализуем любой сервис с нетипичным функционалом;

— Переезды на Битрикс, интеграции со всем на свете;

— Налаженная система менеджмента: четкое соблюдение дедлайнов и ТЗ

ТОП 50
по России

1 место
в Краснодаре

Перевод «default channel» на русский

Возможно, вы захотите избежать канала 6, поскольку он интенсивно используется в качестве канала по умолчанию.

You might need to evade channel 6 in light of its overwhelming utilization as a default channel.

Возможно, вы захотите избежать канала 6, поскольку он интенсивно используется в качестве канала по умолчанию.

Why do so many business hotels have HLN as default channel?
Почему многие бизнес-отели имеют канал HLN, как канал по умолчанию?

The default channel groupings were also introduced by Google Analytics in order to help group traffic sources together in a more comprehensive manner following the rise of social media and the many ways in which this is labeled with the standard source and medium tags.

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

If you’re noticing performance issues with Wi-Fi, change the channel for the Wi-Fi frequency — most routers pick a default channel, which most likely is the same channel number as your neighbors.

Если вы заметили проблемы с производительностью Wi-Fi, измените канал для Wi-Fi частоты — большинство маршрутизаторов выбирают канал по умолчанию, который, скорее всего, имеет такой же номер канала, что и у ваших соседей.

But both the expensive business versions and the cheaper consumer versions are not all that clever: When they detect radar, they quickly shift traffic back to a set default channel in the non-DFS part of the 5-GHz band-a crowded spot.

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

Простой чат с помощью Channel API на Google App Engine для Python

Сегодня мы представляем вам новую статью для Google App Engine посвященную Сhannel API, которое появилось в декабре 2010 года в релизе 1.4. С этого момента стала возможной отправка сообщений напрямую с сервера клиенту и обратно без использования polling.
Поэтому стало достаточно просто реализовать чат на Google App Engine. Процесс реализации описан под катом.

Вы можете посмотреть демо по адресу http://chat-channelapi.appspot.com/.
Код проекта можно скачать здесь(код из ориганальной статьи лежит здесь).

image

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

Шаги:
1) Приложение создает id канала(channel id) и токен и отправляет их клиенту
2) Клиент использует токен, чтобы открыть сокет, который будет слушать канал
3) Клиент 2 отправляет сообщение для чата в приложение, вместе с его уникальным id канала
4) Приложение отправляет сообщение всем клиентам, которые слушают канал через сокет. Для этого используется id канала каждого клиента.

Прежде чем удут описаны все шаги, следует отметить, что мы упростили максимально сущности(entity) базы данных, которые будут принимать участие в программе. Мы создали две — модель User и Message.

class OnlineUser (db . Model):
nick = db . StringProperty(default = «» )
channel_id = db . StringProperty(default = «» )

class Message (db . Model):
text = db . StringProperty(default = «» )
user = db . ReferenceProperty(User)

В коде также используется механизм сессий, реализованный в библиотеке GAE utilities. Но не обращайте много внимания на сессии.

В этом шаге наше приложение для чата создает id канала и токен и отправляет их клиенту. Код этого шага достаточно прост. Только не забудьте импортировать Channel API:

from google.appengine.api import channel

После этого создайте обработчик(handler), который генерирует уникальный id каждому пользователю(мы воспользуемся функцией uuid4() из модуля uuid). Ниже приведенный обработчик как раз это делает и передает данные в шаблон клиенту:

class ChatHandler (webapp . RequestHandler):
def get ( self ):
self . redirect( ‘/’ )

def post ( self ):
# сессия из библиотеки http://gaeutilities.appspot.com/
self . session = Session()
# получаем ник
nick = self . request . get( ‘nick’ )
if not nick:
self . redirect( ‘/’ )
# проверяем, не существует ли пользователя с таким ником
user = OnlineUser . all() . filter( ‘nick =’ , nick) . get()
if user:
self . session[ ‘error’ ] = ‘That nickname is taken’
self . redirect( ‘/’ )
return
else :
self . session[ ‘error’ ] = »
# генерируем уникальный id канала для Channel API
channel_id = str (uuid . uuid4())
chat_token = channel . create_channel(channel_id)
# сохраняем пользователя
user = OnlineUser(nick = nick,channel_id = channel_id)
user . put()
# получаем последние 100 сообщений
messages = Message . all() . order( ‘date’ ) . fetch( 1000 )
# генерируем шаблон и отправляем его в качестве ответа клиенту
template_vars = < 'nick' :nick, 'messages' :messages, 'channel_id' :channel_id, 'chat_token' :chat_token>
temp = os . path . join(os . path . dirname(__file__), ‘templates/chat.html’ )
outstr = template . render(temp, template_vars)
self . response . out . write(outstr)

Чтобы не перегружать данную статью, я не привожу здесь код шаблона. Его вы можете посмотреть в github.

Теперь клиент отвечает за извлечение токена и открытие сокета. Мы используем jQuery для уменьшения кода javascript. Ниже приведен наш код:

var chat_token = $( ‘#channel_api_params’ ).attr( ‘chat_token’ );
var channel = new goog.appengine.Channel(chat_token);
var socket = channel.open();
socket.onopen = function () >;
socket.onmessage = function (m) var data = $.parseJSON(m.data);
$( ‘#center’ ).append(data[ ‘html’ ]);
$( ‘#center’ ).animate(, 500 );
>;
socket.onerror = function (err) alert( «Error => » + err.description);
>;
socket.onclose = function () alert( «channel closed» );
>;

На этом шаге Клиент 2 отправляет сообщение в наш чат через интерфейс. Для этого надо только сделать текстовое поле и кнопку отправки сообщения. Сообщение будет отправляться javascript кодом с помощью простого слушателя(listener), которого мы реализуем с помощью jQuery. Вы можете использовать вместо этого любую javsctipt библиотеку или просто с помощью объекта XMLHttpRequest. Только учтите, что обязательно посылать уникальный id канала клиента, чтобы верно идентифицировать клиента в приложении.

$( ‘#send’ ).click( function () var text = $( ‘#text’ ).val();
var nick = $( ‘#nick’ ).attr( ‘value’ );
var channel_id = $( ‘#channel_api_params’ ).attr( ‘channel_id’ );
$.ajax( url : ‘/newMessage/’ ,
type : ‘POST’ ,
data : text : text,
nick : nick,
channel_id : channel_id,
>,
success : function (data) >,
complete : function () <
>
>);
>);

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

class NewMessageHandler (webapp . RequestHandler):
def post ( self ):
# получаем параметры
text = self . request . get( ‘text’ )
channel_id = self . request . get( ‘channel_id’ )
q = db . GqlQuery( «SELECT * FROM OnlineUser WHERE channel_id = :1» , channel_id)
nick = q . fetch( 1 )[ 0 ] . nick
date = datetime . datetime . now()
# сохраняем сообщение
message = Message(user = nick,text = strip_tags(text), date = date, date_string = date . strftime( «%H:%M:%S» ))
message . put()
# генерируем шаблон сообщения
messages = [message]
template_vars = < 'messages' :messages>
temp = os . path . join(os . path . dirname(__file__), ‘templates/messages.html’ )
outstr = template . render(temp, template_vars)
channel_msg = json . dumps(< 'success' : True , "html" :outstr>)
# отправляем всем клиентам сообщение
users = OnlineUser . all() . fetch( 100 )
for user in users:
channel . send_message(user . channel_id, channel_msg)

Дополлнительный шаг

На данном этапе заканчивается исходная статья, но мне захотелось внести несколько изменений в код, связанные со следующей задачей. В исходной статье имена пользователей блокируются после входа в чат и уже под этим ником нельзя войти. Уберем данное ограничение. Для этого надо удалять после завершения действия ключа данные пользователя из базы данных. Ключ перестает действовать либо пока не пройдет два часа, либо пока клиент не вызовет функцию close() у сокета. После чего вызывается обработчик, зарегистрированный по адресу /_ah/channel/disconnected/. Напишем такой обработчик.

class ChannelDisconnectHandler (webapp . RequestHandler):
def post ( self ):
channel_id = self . request . get( ‘from’ )
q = OnlineUser . all() . filter( ‘channel_id =’ , channel_id)
users = q . fetch( 1000 )
db . delete(users)

В javascript код добавим обработку события, которое возникает при уходе пользователя с данной страницы:

$( window ).unload( function () socket.close();
>);

Осталось обработать следующую ситуацию. Если пользователь вошел в чат, но достаточно быстро закрыл окно, то не происходит открытие канала. Это приводит к ситуации, что запись о пользователе есть в базе, но она не удаляется из-за того, что не закрывается канал. Изменим нашу модель данных пользователя:

class OnlineUser (db . Model):
nick = db . StringProperty(default = «» )
channel_id = db . StringProperty(default = «» )
creation_date = db . DateTimeProperty(auto_now_add = True )
opened_socket = db . BooleanProperty(default = False )

Теперь у нас есть время создания записи(creation_date) и информация о том, пришло ли подтверждение со стороны клиента об открытии канала(opened_socket). При открытии канала со стороны клиента с помощью вызова channel.open() на стороне сервера вызывается обработчик, зарегистрированный по адресу /_ah/channel/connected/. Этот обработчик будет выставлять у пользователя подтверждение открытия канала:

class ChannelConnectHandler (webapp . RequestHandler):
def post ( self ):
channel_id = self . request . get( ‘from’ )
q = OnlineUser . all() . filter( ‘channel_id =’ , channel_id)
user = q . fetch( 1 )[ 0 ]
user . opened_socket = True
user . put()

Данный код отправляет серверу id канала для идентификации. Обработчик представлен ниже:

class RegisterOpenSocketHandler (webapp . RequestHandler):
def post ( self ):
channel_id = self . request . get( ‘channel_id’ )
q = OnlineUser . all() . filter( ‘channel_id =’ , channel_id)
user = q . fetch( 1 )[ 0 ]
user . opened_socket = True
user . put()

Последним этапом будет запуск c помощью сron-а обработчика, который будет выделять все записи из модели пользователей OnlineUser, у которых yе будет подтверждения открытия канала и время создание от текущего будет больше 120 секунд:

class ClearDBHandler (webapp . RequestHandler):
def get ( self ):
q = OnlineUser . all() . filter( ‘opened_socket =’ , False )
users = q . fetch( 1000 )
for user in users:
if ((datetime . datetime . now() — user . creation_date) . seconds > 120 ):
db . delete(user)

Нам удалось построить простое приложение для чата. Четырех шагов из исходной статьи достаточно, чтобы показать Channel API, добавление в код было сделано чтобы приложение выглядело, на мой взгляд, более законченным.

P.S.Реальная работа приложения показала, что надо фильтровать сообщения, исключая из них html тэги. Для этого импортируем функцию strip_tags из фреймворка django:

from django.utils.html import strip_tags

В обработчике новых сообщений(NewMessageHandler) заменим код создания нового сообщения на следующий:

message = Message(user = nick,text = strip_tags(text), date = date, date_string = date . strftime( «%H:%M:%S» ))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *