Mandrill всё? Как я искал замену и нашел 2 прекрасные альтернативы Мандрилу

TL;DR: Mandrill захотел поднять цены в 4 раза. Они нашли способ через интеграцию с MailChimp.

В феврале этого года, как гром среди ясного неба, пришло письмо от Mandrill о том, что с 27го апреля он перестаёт существовать как независимый сервис и теперь чтобы им пользоваться нужно интегрировать свой Mandrill аккаунт в платный аккаунт MailChimp. Именно платный, пусть даже и самый дешевый. Вот как выглядит ценник MailChimp:

Напомню, что раньше Mandrill был бесплатным для небольших проектов до 12.000 писем в месяц (около 400 в день). Сейчас же как минимум $20 + сколько напосылаешь писем.

«Вот негодяи!» — подумал я про себя и отправился гуглить и тестить альтернативы, потому как мне как пользователю неприемлемо такое отношение со стороны сервиса.

Детально рассматриваемые в статье альтернативы:

  • MailGun — популярная
  • SparkPost — не такая популярная, но еще лучше

У обоих вариантов есть свои преимущества.


Альтернатива # 1: MailGun — The Email Service For Developers

  • 10,000 бесплатных емайлов в месяц
  • Следующие 500,000 — $0.00050 за штуку
  • Следующие 1,000,000 — $0.00035
  • Следующие 5,000,000 — $0.00015
  • Все остальные будут по $0.00010

Прайсинг довольно простой и без подводных камней.

Теперь что касается процесса интеграции. Здесь и дальше в статье я буду смотреть на мир глазами PHP разработчика, да простят меня остальные сообщества 🙂

MailGun любят и часто интегрируют поддержку в фреймворки (например, в Laravel) за отличный API. Для того чтобы его попробовать достаточно зарегистрироваться и curl-ом обратиться к endpoint-u со своим API ключом:

curl -s --user 'api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0' \     https://api.mailgun.net/v3/samples.mailgun.org/messages \     -F from='Excited User <excited@samples.mailgun.org>' \     -F to='devs@mailgun.net' \     -F subject='Hello' \     -F text='Testing some Mailgun awesomeness!' 

Для PHP на гитхабе лежит официальная библиотека mailgun-php.

Панель управления содержит удобный dashboard и логи всех писем:

Есть вебхуки для реагирования на различные события:

Для некоторых своих проектов я остановился именно на Майлгане. 10,000 бесплатных писем в месяц хватает за глаза. В случае с Laravel интеграция занимает полчаса, из которых 5 мин вы тратите на указание API ключа и 25 мин на тестирование 🙂


Альтернатива # 2: SparkPost — Better Email Delivery for Better Customer Engagement

100,000 бесплатных емайлов в месяц (это в 10 раз больше чем у MailGun).

По неизвестным мне причинам, этот сервис не такой популярный и узнал я о нем совершенно случайно — из комментов к какому-то посту.

Кроме 100 тысяч бесплатных писем у него есть еще одна киллер-фича — subaccounts, которую они запилили две недели зазад.

Subaccounts это когда вы каждому своему пользователю выделяете подаккаунт с независимой репутацией. Это даёт много преимуществ. Во-первых, вы можете посмотреть логи по каждому подаккаунту отдельно. Во-вторых, независимая репутация подаккаунтов позволяет применять те или иные меры для пользователей вашего проекта в зависимости от их «кармы» 🙂

Для моего проекта массовых email-открыток и приглашений Subaccounts API — жизненно необходимая функциональность для выявления и заблаговременного блокирования спамеров.

API у них такой же отличный как и у MailGun и использовать его можно как угодно, хоть из командной строки:

curl -XPOST \   https://api.sparkpost.com/api/v1/transmissions \   -H "Authorization: <YOUR API KEY>" \   -H "Content-Type: application/json" \   -d '{"content": {"from": "testing@sparkpostbox.com", "subject": "Oh hey", "text":"Testing SparkPost - the most awesomest email service in the world"}, "recipients": [{"address": "developers+curl@sparkpost.com"}]}'  

Интеграция с PHP происходит с помощью официальной open source библиотеки php-sparkpost и не вызывает никаких затруднений:

use SparkPost\SparkPost; use GuzzleHttp\Client; use Ivory\HttpAdapter\Guzzle6HttpAdapter;  $httpAdapter = new Guzzle6HttpAdapter(new Client()); $sparky = new SparkPost($httpAdapter, ['key'=>'<YOUR API KEY>']);  $results = $sparky->transmission->send([     'from'=>'testing@sparkpostbox.com',     'html'=>'<html><body><p>Testing SparkPost - the world\'s most awesomest email service!</p></body></html>',     'subject'=> 'Oh hey!',     'recipients'=>[       ['address'=>['email'=>'developers+php@sparkpost.com']]     ] ]); 

Кроме того, слоган SparkPost и данные eDataSource говорят о хорошей доставляемости:


В конце отмечу, что мы рассматривали и другие сервисы такие как:

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

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


Ну и опрос на последок. Если вы не пользователь Mandrill, пожалуйста, нажмите «Воздержаться».

Я пользователь Mandrill и я…

Никто ещё не голосовал. Воздержавшихся нет.

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

ссылка на оригинал статьи https://habrahabr.ru/post/280634/

Мобильные устройства стали основными инструментами для потребления контента

image

Появление новых устройств зачастую меняет тенденции на рынке. Так, мобильные девайсы полностью изменили схему потребления контента среди пользователей. Согласно последнему исследованию от аналитиков из ComScore в срезе пользователей в возрасте от 18 и до 34 лет, практически больше не используют традиционные компьютеры для просмотра контента в сети.

На текущий момент доля потребления контента с использованием компьютера упала с 47% в 2013 году до 35%. С учётом планшетов, на долю мобильного трафика приходится 65% в США — по этому показателю местный рынок начинает напоминать индийский. На последнем только у 20% пользователей есть персональные компьютеры, в то время как мобильные телефоны есть у подавляющего большинства.

image

В результате среди тысячи самых популярных изданий на долю мобильных устройств приходится около 11,3 млн визит в среднем в месяц против 7 млн со стационарных компьютеров. Только за два года число посетителей с мобильных устройств удвоилось и продолжает расти.

image

Для сравнения — на долю мобильных устройств приходится 2 из 3 минут потраченного на просмотр любого контента в сети. Лидером в этой области остаётся Facebook. Если объединить время, проводимое пользователями в Facebook, Facebook Messenger, WhatsApp и Instargam, то на долю Facebook придётся более одной из пяти минут, проводимых американцами в сети через мобильные устройства.

image

Одним из новых игроков, с постоянно растущей капитализацией и пользовательской базой остаётся Snapchat, но даже его взрывной рост среди молодёжной аудитории не позволяет и близко приблизиться к Facebook. Так, капитализация компании за последние годы выросла на рекордные 275% и продолжает расти за счет уверенности инвесторов в росте аудитории, даже несмотря на наличие конкурентов.

Тут стоит понимать, что все существующие проекты в виде Vine, Snapchat, Tumblr и другие ощутимо меньше и моложе Facebook — именно поэтому руководство социальной сети может продолжить скупать новые проекты, как это уже произошло с Instagram и WhatsApp.

ссылка на оригинал статьи https://megamozg.ru/post/25232/

Пример программирования в Puppet версии 3.8 с использованием Hiera и R10K


Пример программирования в Puppet версии 3.8 с использованием Hiera и R10K

We Need To Go Deeper.
Inception.

Здесь я хочу описать примеры/приёмы программирования. Причина всё та же: в интернете должно быть больше доков. В моей прошлой статье было рассказано про установку и нaстройку Puppet версии 3.8 на примере Centos 6.5. Там же бы простейший пример, чтобы проверить работоспособность связки клиент-сервер. Теперь посмотрим как это можно усложнить и для чего это надо.

Пример №1: Использование пераметров в манифестах модуля
class test1 {   # Это пример комментария     $text1 = “our” 		# Переменная раз   $text2 = “text” 		# Переменная два   file { 'puppetenv file': 		# создание файла, где «puppetenv file» – уникальное имя для  						# вызова ресурса file. Нельзя использовать в манифесте повторно.     path    => '/tmp/puppetenv',		# имя создаваемого файла     ensure  => file, 				# тип ресурса     content => "test: ${text1} - ${text2}"	# содержимое файла с использоваинем параметров   } } 

Цепочка передачи нашего текста в параметрах:
class ($text1 $text2) -> file (content (${text1}-${text2})

Пример №2: Единое хранение пераметров в манифесте модуля

Итак следующий уровень: у нас много классов и мы хотим сделать аналог библиотеки переменных. Параметры можно хранить в одном рецепте и потом использовать уже по всему модулю. К примеру мы хотим собрать некие ситемные переменные и добавить что-то своё.

Немного повторим основы:

Заходим на Мастер-сервере в /etc/puppet/modules и генерируем скелет:

puppet module generate myname-test1 

Жмём 8 раз ввод, ибо это всё потом можно переделать. Получаем каталог myname-test1, который переименуем в test1. Полное имя нужно, если вы хотите сбилдить и загрузить свой модуль на общественный Puppet forge.

Создаём файл /etc/puppet/modules/test1/manifests/init.pp

class test1 (				 $envname = $test1::params::env,	# подгрузка параметров из манифеста params $text1 = $test1::params::text1	 ) inherits test1::params {         	# подгрузка класса через inherits   file { 'puppetenv file':      path    => '/tmp/puppetenv', 		     ensure  => file,      content => "${env} - test: ${text1}"    } } 

Создаём файл /etc/puppet/modules/test1/manifests/params.pp

class test1::params {     $env = $settings::environment 	# внутренняя переменная puppet     $text1 = 'ptestint' 			# наш дефолтовый текст } 

Пояснения:
test1 – Имя модуля – Корневое имя проекта в системе ценностей puppet.
init.pp, params.pp – манифесты – Один манифест хранит один класс. Имя файла и класса должны совпадать.
class test1 – начальный класс, код которого работает по дефолту при простом вызове потом класса через простой include test1
При желании можно оставлять пустым и создавать отдельные именные классы (см ниже).
class test1::params – именной класс. Имя params выбран для удобства и может быть любым.

Проверить заранее синтаксис кода можно 2 способами:
— Изначально доступный через команду типа:

puppet parser validate /etc/puppet/modules/test1/manifests/* 

— Поставить более продвинутый спеллчекер рpuppet-lint через gem install puppet-lint и затем проверять файлы (заодно можно чуть причесать синтаксис ключём —fix):

puppet-lint --fix /etc/puppet/modules/test1/manifests/* 

Но не надейтесь особо на них, можно легко пропустить ошибку вроде неверного имени манифеста что выдаст ошибку уже при запуске на кленте вроде:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find parent resource type 'test::params' of type hostclass in production at /etc/puppet/modules/test1/manifests/init.pp:1 on node stage.test.net 

Снова хочу предупредить, что я заметил, что в ветке 3.8.4 теперь изменив код модуля, приходится перезапустить сервис puppetmaster или httpd, чтобы изменения в модулях применились сразу, раньше он это не игнорировал. Возможно в других версиях это и не проявится. Подозреваю где то залипает кэш модулей.

Добавляем вызов нашего модуля test1 в файл /etc/puppet/manifests/site.pp для тест узла stage.test.net.

node default { } node 'stage.test.net' {   include test1 } 

Проверка на клиенте:
Можно настроить сервис и ждать ХХ(обычно 30) минут, пока он сработает и потом глянуть логи. А можно запустить всё вручную:

[root@stage ~]# puppet agent --test Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for stage.test.net Info: Applying configuration version '1459348679' Notice: /Stage[main]/Test1/File[puppetenv file]/ensure: defined content as '{md5}af1b5424181346c5f4827af742b07abf' Notice: Finished catalog run in 0.12 seconds [root@stage ~]# cat /tmp/puppetenv production - test: ptestint 

Как видим файл успешно создался. Если кто хочет посмотреть до чего может дойти использование параметров, то вот пример модуля для apache.

Цепочка передачи нашего текста ptestint:
manifests/site.pp -> modules/test1/init.pp($test1::params::text1) -> file (content (${text1})

Теперь как можно изменить дефолтные переменные в /etc/puppet/manifests/site.pp, т. к. у них выше приоритет.

node 'stage.test.net' { #  include test1   class  { 'test1':      text1 => 'newparam',   } } 

Проверка на клиенте:

-production — test: ptestint
\ No newline at end of file
+production — test: newparam
\ No newline at end of file

Как видим апдейт прошёл удачно.
Цепочка передачи нашего текста newparam:
manifests/site.pp($text1) -> modules/test1/init.pp(text1) -> file (content (${text1})

Такое хранение параметров также удобно, если мы не создаём все манифесты в одном каталоге, а сделали ещё один уровень в вида /test1/manifests/check/time.pp
И потом используем этот класс где угодно через вызов вида:

class { '::test1::check::time': } 
Пример №3: Добавляем шаблон.

Минус варианта из прошлого примера, что в content только одна строка. Поэтому для генерирования больших файлов лучше использовать шаблоны.

Добавим в тест:
— Файл /etc/puppet/modules/test1/manifests/usetmpl.pp – новый класс для работы с шаблоном

class test1::usetmpl ( $envname = $test1::params::env,  #1 $text1 = $test1::params::text1   #2 ) inherits test1::params {    file { 'puppetenv file from tmpl':     path    => '/tmp/puppetenv',     ensure  => file,     content => template('test1/puppetenv.erb'),   } } 

Изменения в замене текста content на вызов шаблона puppetenv.erb плюс мы всё вывели в отдельный класс, хотя могли бы добавить создание второго файла в init.pp.

— Файл /etc/puppet/modules/test1/templates/puppetenv.erb — Наш шаблон-генератор.

# Created by puppet Our text: <%= @text1 %> Env: <%= @envname %> Host: <%= @hostname %> 

Переменные ${text1} тут передаются в Ruby-формате как <%= @text1 %>. $envname берётся из params.pp, $text1 я опять переопределил в site.pp и заодно добавил «системную» переменную (в puppet они называются фактами) <%= @hostname %>

Проверка на клиенте:

[root@stage ~]# puppet agent --test ... -production - test: newparam \ No newline at end of file +# Created by puppet +Our text: param_tmpl +Env: production +Host: stage ... 

Итог:

[root@stage ~]# cat /tmp/puppetenv # Created by puppet Our text: param_tmpl Env: production Host: stage  

Цепочка паредачи нашего текста param_tmpl:
manifests/site.pp($text1) -> modules/test1/init.pp::usetmpl($text1) -> file(content(puppetenv.erb(<%= @text1 %>)))

Пример №4: Hiera или ещё больше централизации

Если надо работать с 1-10 серверами, то вполне хватит и обычных модулей, однако если их стало больше плюс пошло разделение на подкластеры, где каждый модуль настраивается по-своему, то можно запутаться в распухшем от параметров модулей site.pp, либо в почти одноимённых модулях и их версиях. Мы идём глубже и настраиваем Hiera.

Hiera — библиотека Ruby, по умолчанию включена в Puppet и помогает организовать данные для всех модулей в едином каталоге.

Для работы нашего хранилища нужно:

— Создать файл /etc/puppet/hiera.yaml примерно такого вида:

:hierarchy:     - "%{::clientcert}"     - "%{::custom_location}"     - "nodes/%{::fqdn}"     - "nodes/%{::environment}"     - "virtual/%{::virtual}"     - common     - "%{::environment}"  :backends:     - yaml  :yaml:     :datadir: "/etc/puppet/hieradata" 

Здесь нас ждёт заподлянка от системы в виде приоритета родного файла /etc/hiera.yaml
Т. ч. надо заменить его на симлинк /etc/hiera.yaml -> /etc/puppet/hiera.yaml

— Создать папку /etc/puppet/hieradata (можно дать своё имя и указать его в :datadir)
Файлы в этой папке обязательно должны иметь расширение .yaml и формат данных YAML.

— Создать файл /etc/puppet/hiera/common.yaml
К примеру здесь мы можем записать доступный всем узлам второй тестовый параметр

test::text2: common-hiera 

Т. к. мы задали точкой хранения параметров узлов каталог — «nodes/%{::fqdn}», то для нашего тестового узла создаём файл /etc/puppet/hiera/nodes/stage.test.net.yaml. В нём мы теперь можем задать наш третий тестовый параметр и небольшой массив в котором будет параметр и ещё один массив

testparam::text3: ‘node stage hiera’ arrexmpl::colors:   bw: "B&W"   rgb:      - red      - blue      - green 

Проверка доступности параметров из командной строки в дебаг и простом режиме:

[root@pmaster /etc]# hiera -d test::text2 DEBUG: Wed Mar 30 13:06:13 -0400 2016: Hiera YAML backend starting DEBUG: Wed Mar 30 13:06:13 -0400 2016: Looking up test::text2 in YAML backend DEBUG: Wed Mar 30 13:06:13 -0400 2016: Looking for data source common DEBUG: Wed Mar 30 13:06:13 -0400 2016: Found test::text2 in common common-hiera [root@pmaster /etc]# hiera testparam::text3 ::fqdn=stage.test.net node stage hiera hiera arrexmpl::colors ::fqdn=stage.test.net {"rgb"=>["red", "blue", "green"], "bw"=>"B&W"} 

Теперь нам надо сохранить их в параметрах и использовать в шаблоне.
/etc/puppet/modules/test1/manifests/params.pp

class test1::params {     # sss     $env = $settings::environment         $text1 = 'ptestint'     $text2 = hiera('test::text2', 'ptestint2') # читаем параметр 'test::text2'. В случае неудачи сохраняем в нём 'ptestint2'     $text3 = hiera('testparam::text3', 'ptestint3')     $colors = hiera('arrexmpl::colors', 'nohiera') # читаем весь массив arrexmpl::colors     if $colors != 'nohiera' {			    # проверка и первый парсинг массива       $c1 = $colors['bw']       $c2 = $colors['rgb']     }     else     {       $c1 = "lost"     } } 

/etc/puppet/modules/test1/manifests/usetmpl.pp

class test1::usetmpl ( $envname = $test1::params::env, $text1 = $test1::params::text1, $text2 = $test1::params::text2, # передали все новые параметры $text3 = $test1::params::text3, $c1 = $test1::params::c1, $c2 = $test1::params::c2 ) inherits test1::params {    file { 'puppetenv file':     path    => '/tmp/puppetenv',     ensure  => file,     content => template('test1/puppetenv.erb'),   }    file { 'hiera test':     path    => '/tmp/phiera',     ensure  => file,     content => template('test1/hieratst.erb'),   } } 

/etc/puppet/modules/test1/templates/hieratst.erb

# Hiera test # Created by puppet Our text1: <%= @text1 %> Our text2: <%= @text2 %> Our text3: <%= @text3 %> Colors: BW = <%= @c1 %> <% if c1 == "lost" %>  # проверка на фэил  ! Hiera fail ! <% end -%> RGB = <%- c2.each do |colors| -%>  # второй  парсинг массива arrexmpl::colors::rgb: - <%= colors %> <%- end -%> 

Проверка на клиенте:

[root@stage ~]# puppet agent --test ... [root@stage /etc/puppet]# cat /tmp/phiera # Hiera test # Created by puppet Our text1: paramtmpl Our text2: common-hiera Our text3: node stage hiera Colors: BW = B&W RGB = - red - blue - green 
Пример №5: R10K или ещё ещё ещё больше централизации

Собственно если счёт серверов пошёл на десятки сотни то становится безопаснее делить их на environments. Можно делать это ручками, но лучше использовать R10K, который позволяет запускать отдельную конфигурацию использования модулей, которая хранится в его личных настройках. Т. е. По сути он заменяет единый гигантский site.pp на своё дерево конфигов.

Я не буду делать тест, просто приведу условный алгоритм такой настройки на примере моей рабочей конфигурации.

— Сервера делятся на группы настройки которые хранятся в отдельных каталогах в /etc/puppet/environments

К примеру будем тестить наш рецепт на группе серверов test_devops

Дерево хиеры

— хранится на гите/битбакете
— клонится для обновления применении измений на Мастер сервер
— в hiera.yaml добавлено в :hierarchy:

  - %{environment}/%{role}/%{calling_module}   - %{environment}/%{role}   - %{role}   - %{environment}/%{environment} 

— Наши параметры будут условно храниться в файлах
/etc/puppet/hieradata/test_devops/ test_devops.yaml — для всех узлов через доп метку для R10K

     classes:        - roles::base 

/etc/puppet/hieradata/test_devops/stage.test.net.yaml для сервера плюс нужна метка для R10K

    classes:       - roles::stagesrv::test 

Настройка запуска модуля для test_devops через R10K

— На узле stage.test.net в файл /etc/puppet/puppet.conf нужно добавить строчку

environment = stage_nbc210 

/etc/puppet/environments/test_devops/Puppetfile – тут хранятся все используемые модули.
Примеры записи

mod 'saz/sudo', '3.0.1' mod 'stdlib',   :git => 'git://github.com/puppetlabs/puppetlabs-stdlib.git',   :ref => '4.1.0'  mod 'test1',         :git => 'git://github.com/fake_link/test1.git',         :ref => 'master' 

Они потом скачаваются/обновляются в консоли через команду типа

sudo r10k deploy module test1 -e test_devops  

/etc/puppet/environments/test_devops/modules/test1 — Место куда свалился наш модуль

/etc/puppet/environments/test_devops/dist/profiles/manifests/ — дерево манифестов запуска модулей. Имена файлов не должны совпадать с именами модулей.

Создаём тут файл типа runtest1.pp

   class profiles::runtest1{    class  { 'test1':      text1 => 'newparam',   } 

Как видим узлы теперь не указываются. Если другим узлам нужны другие параметры то можно создать runtest2.pp и т. д. Поддерживаются доп уровни. Например можно создать файл /etc/puppet/environments/test_devops/dist/profiles/manifests/ver2/runtest3.pp

class profiles::ver2::runtest3 class { 'test1': text1 => 'newparam v2', } } 

— Теперь надо привязать манифесты запуска модулей к узлам:
/etc/puppet/environments/test_devops/dist/roles/manifests/init.pp

class roles { } class roles::base inherits roles {     include profiles::base } class roles::private inherits roles {     include profiles::private } class roles::public inherits roles {     include profiles::public } class roles::stagesrv::test {	# <- Помните мы забивали метку в Hiera ?      include profiles::runtest1 } 	# Причём при желании мы можем ещё и наследовать запуск модулей, чтобы не повторяться. В данном примере будет небольшой конфликт, когда runtest3 перезапишет совпадающий фйал от наследуемого runtest1 	class roles::ver2::runtest3 inherits roles::stagesrv::test { 	  include profiles::ver2::runtest3 	} 

— Собственно остался дамп итогов настройки

sudo r10k deploy environment test_devops 

И потом это применится на узле по автозапуску или можно пртестить вручную через puppet agent —test

На это собственно всё. Спасибо, что дочитали до сюда.

Дополнения или варианты для других версий от желающих могу включить в данную статью.

Сравнивать с опытом использования chef client-server / chef+berkshelf / chef + AWS Opswork не буду, т. к. там совсем другой алгоритм организации кукбоков-«модулей» и более чистый Ruby в рецептах-«манифестах».

Доп доки:
1. По микропримерам Puppet кода.
2. По введению в Hiera
3. Немного по R10K

ссылка на оригинал статьи https://habrahabr.ru/post/280632/

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

Приветствуем всех в блоге компании Тион. Продолжаем тему пыльцы и поллиноза. О том, как выглядит аллергенная пыльца и сколько ее летает вокруг нас, мы уже писали. Теперь разберем на клеточном уровне, почему и как возникает аллергия на пыльцу.



Почему пыльца вызывает аллергию

Аллергенные белки в пыльце по составу напоминают белки червей-паразитов. Это открытие британских ученых (настоящих, а не из мемов).

Возьмем для примера белок, который выделяет человеческая аскарида. И сравним его с белком Bet V1, который содержится в березовой пыльце. Оказалось, что они совпадают на 27%. Причем совпадают именно те части белков, на которые реагирует иммунная система. Эти части белков называются эпитопами. На картинке ниже 3D модели белков: синий из аскариды, зеленый из пыльцы. Рамкой выделены их эпитопы, в тексте над молекулами — последовательность эпитопов. Как видим, они действительно похожи.

Растительный белок Bet V1 никак не влияет на здоровье. Но из-за такого подозрительного эпитопа наша иммунная система реагирует на березовый белок, как на выделения аскариды. Так безобидная пыльца становится аллергеном.

Всего ученые обнаружили 1400 таких аналогий между растениями и паразитами. Выходит, аллергия — это цена, которую мы платим за иммунитет к паразитическим инфекциям.

Интересный факт: чем реже человек контактирует с паразитами, тем острее он реагирует на пыльцу. В странах третьего мира с плохой санитарно-гигиенической обстановкой люди реже страдают от аллергии. Если они эмигрируют в развитые «чистые» страны, со временем их чувствительность к аллергенам растет. Об этом говорят статистические исследования. Объяснение такой закономерности простое. В реакциях на паразитов и пыльцу участвуют одни и те же иммунные клетки и белки. И если они расходуются на паразитов, то на пыльцу их просто не хватает.

Как пыльца вызывает аллергию

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


(Видео на английском, но все ясно и без субтитров)

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

Этап №1: первый контакт с аллергеном и появление «иммунной памяти»

Действующие лица первого этапа: антигенпредставляющие клетки, Т-клетки, В-клетки и тучные клетки. У каждой своя роль.

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

Первыми на пыльцу набрасываются антигенпредставляющие клетки. Они «переваривают» ее и превращают в небольшие белки. В случае с березой это тот самый Bet V1. Это и есть пыльцевой антиген, или аллерген.

Аллерген — это ключ зажигания. Он «заводит» Т-клетки, и те рассылают по организму сигнал бедствия: «Внимание! В организме аллерген! И не просто аллерген, а именно Bet V1». На этот SOS-сигнал реагируют B-клетки и тучные клетки.

В-клетки вырабатывают иммуноглобулины IgE, которые специфичны именно к березовому аллергену.

IgE — антитела, ключевые белки в иммунном ответе. Они связываются с аллергеном.

Тучные клетки в ответ на SOS-сигнал начинаются активно размножаться. На их поверхности много рецепторов, к которым присоединяются антитела IgE.

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

Этап №2: повторный контакт с аллергеном и «запуск» тучных клеток

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

Все начинается с повторного контакта с аллергеном Bet V1. Иммунная система уже знает его и сразу связывает тучными клетками с антителами IgE.

После связывания с аллергеном внутри тучных клеток лопаются гранулы с особыми веществами: гистамин, тромбоцитактивирующие факторы (ТАФ), лейкотриены и простагландины. Все эти вещества меняют самочувствие человека.

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

Этап №3: появление аллергических симптомов

Для каждого вещества из второго этапа в разных клетках организма есть свои рецепторы. Возьмем гистамин. Для него известны 4 типа гистаминовых рецептора H1, H1, H3 и H4. Каждый рецептор запускает разные реакции организма на гистамин.

  • Гистамин + H1-рецепторы
    Увеличивается проницаемость мембран между кровеносными сосудами и тканями. Жидкость легче проходит через эту мембрану и скапливается в тканях, появляются отеки, насморк и слезотечение. Раздражаются нервные окончания в коже и слизистых оболочках, появляются крапивница, зуд. Сжимаются стенки бронхов, появляются бронхоспазмы, кашель и одышка.
  • Гистамин + H2-рецепторы
    Выделяется соляная кислота и пищеварительные ферменты. Увеличивается риск возникновения гастрита или язвы желудка.
  • Гистамин + H3-рецепторы
    Вырабатываются нейромедиаторы, увеличивается скорость передачи нервных сигналов. Мозг работает быстрее.
  • Гистамин + H4-рецепторы
    Размножаются клетки иммунной системы, усиливается иммунный ответ и аллергические симптомы.

Другие биологически активные вещества тоже запускают аллергические симптомы:

  • Тромобоцитактивирующие факторы (ТАФ)
    Привет от капитана очевидности: ТАФ активируют тромбоциты. А тромбоциты, в свою очередь, выделяют гистамин и серотонин. Серотонин вызывает бронхоспазмы (кашель). Что делает гистамин, мы уже знаем.
  • Лейкотриены и простагландины
    Эти вещества усиливают сокращения гладкой мускулатуры, вызывают приступы чихания и кашля.

Заключение

Итог третьего этапа и всего аллергического ответа в целом — одышка, кашель, насморк, слезы из глаз, раздражения на коже. Эти симптомы будут появляться у аллергика при каждой встрече с аллергеном.

Аллерген может попасть в организм не только с пыльцой. Тот же белок Bet V1 содержится в яблоках, персиках, грушах, вишне, сое, арахисе, фундуке, моркови, петрушке и других пищевых растениях. Так аллергия на березовую пыльцу перерастает в пищевую аллергию. Это называется «перекрестная аллергическая реакция».

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

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

ссылка на оригинал статьи https://geektimes.ru/post/273492/

Чего боятся бренды?

30 марта в студии Mediametrics.ru Руслан Куваев, основатель и генеральный директор мобильной рекламной платформы BYYD, провел интервью с Михаилом Гейшериком, Главный операционный директор GRAPE.

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

Изменения на рынке рекламы и медиа в целом и в работе агентства Grape в частности.

С 2009 года произошел “взрывной” рост агентства как места, куда рекламодатели приносят свои бюджеты. Grape также выросло с точки зрения сложности осуществляемых проектов.

Полностью поменялась медиа-среда. Например, сейчас очень сложно найти человека, у которого нет аккаунта в социальных сетях, хотя в начале 2000-х они только зарождались. Бум смартфонов.

Самое важное, что произошло за последнее время, — “мобилизация” населения и необходимость рекламодателям находить новые решения для коммуникации с потребителями.

Методы по приобретению и сохранению пула лояльных клиентов. Отличие Grape от других digital-агентств.

Присутствие названия агентства на первых строчках рейтинга — в первую очередь, показатель доверия клиентов. Grape как агентство делает некий микс между креативом и клиентским сервисом. У каждого клиента есть свой определенный индивидуальный набор задач. Нас ценят за накопленный опыт, знания (мы на рынке с 2002 года) и возможность экспертизы.

Мы выпускаем порядка 100 кампаний в год, десятки сложных высоконагруженных сайтов, приложений. За годы поисков ключевых звезд на рынке мы собрали сильную команду. Это позволяет предлагать клиентам лучшие решения и достигать лучших результатов.

Консервативный подход клиентов как препятствие на пути к развитию инновационных маркетинговых каналов.

Мы работаем с глобальными офисами и глобальными командами. Помогаем им выстраивать отношения.
Сейчас идет обратная тенденция — не глобальных, а региональных офисов. Россия становится важным “хабом” для Восточной Европы.

Опыт экспорта услуг агентства Grape в другие страны. Выход российского рынка из роли “догоняющего” в более технологичный и продвинутый.

Мы регулярно получаем признание Западных фестивалей. Работа российских агентств (и нашего агентства в частности) находятся на мировом уровне. Мы ездим на мероприятия, ключевые для интерактивной индустрии. Мы видим, что работы наших агентств — на одном уровне с мировыми, и активно работаем над сотрудничеством с Западными клиентами.

Бренды и мобайл. Глобальные страхи брендов в связи с возникновением новых каналов коммуникации и пути борьбы с ними. Бренды-новаторы и бренды-консерваторы.

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

Основной страх брендов — нехватка статистики, когда нет четких источников данных. Поскольку нет измерений, есть опасения, что на определенном канале нет необходимой ЦА.

Сейчас в мобайле с каждым годом — все больше инструментов для измерения. Это помогает “продавать” интересные каналы с точки зрения присутствия там необходимой аудитории.

Еще один страх — отсутствие гарантии того, вложения клиентов принесут желаемый эффект.
Чем раньше ты начинаешь инвестировать в канал, тем быстрее ты разбираешься, как именно он работает на твою аудиторию и твой бренд, где ключевые точки роста. Те, кто пришли первыми, получили первую долю внимания — было проще выходить на рынок.
Рекламодатели, пришедшие позже, вынуждены платить дороже за те же показатели.

Первые кейсы рекламодателей в мобайле. Опыт Grape.

Мы делали те же “детские шаги”, что и все — первые версии адаптивных сайтов, мобильных приложений.

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

“Флайты” как основа “мышления” digital и рекламных агентств. Принципы построения долгосрочной коммуникации с лояльной аудиторией.

При определении стратегии бренда в мобильном пространстве мы прописываем те touch point’ы, по которым нам нужно провести пользователя. Мы разрабатываем с брендом Mobile ready platform — изначальный актив бренда для мобильного пространства, который будет развиваться дальше после этапа “флайтов”. Это базовый функционал. Например, шагомер, который будет работать всегда.
Этапы развития мобайла для различных брендов.

Мобайл прошел несколько этапов: “mobile ok”, “mobile must”, “mobile first” (сейчас) и следующий этап — “mobile only”.
Сейчас Mobile only очень хорошо виден в стартапах. Бренды подходят преимущественно со стороны mobile first.

Более развернутый вариант интервью смотрите на нашем YouTube канале:

www.youtube.com/watch?time_continue=1958&v=SaNblMKJBoI

BYYD • Мобильная рекламная платформа

ссылка на оригинал статьи https://megamozg.ru/post/25230/