В апреле вышла наша книга "Корпоративный веб-сайт на 100%: требуйте от сайта большего!" под авторством президента компании Individ Романа Овчинникова и Сергея Сухова, директора по маркетингу Individ. Книга подготовлена на основе многолетнего опыта компании Individ (одного из крупнейших веб-разработчиков в России).
Применительно к блогам на блогхостах - едва ли не единственный способ получить внешнюю ссылку в начале существования это именно рейтинги, счётчики и каталоги, требующие обратной ссылки. Мы ведь честные профессионалы и не занимаемся спамом? Более того, мы даже покупкой ссылок заниматься не желаем. Мы занимаемся человеко-ориентированным SEO. Что это значит? Только то, что всё делаем для людей. И если тот или иной сервис кажется нам полезным и забавным для наших пользователей, мы должны его включить в свой блог. И сайт, соответственно. Чем это плохо? 1) геморрой при вставке кода, который я уже описывал в случае с счётчикам Яндекса. 2) появление внешних ссылок.
Стоит ли обсуждать сие подробнее? Не уверен, ведь как адаптировать счётчики, я уже писал, а в будущем думаю повторить, добавив множество новых. Что касается внешних ссылок... Против них может быть владелец сайта... Или сам блоггер, если он ведёт блог с целью извлечения прибыли - это внешняя ссылка через которую могут "утекать пузомерки", да и часть пользователей может уйти по ним, а не по платным баннерам-объявлениям...
Однако есть ряд сервисов, каталогов и счётчиков в интернете, которые вызывают действительно живой интерес. С парочкой из них я сегодня вас познакомлю. Сразу предупрежу, что это не реклама.
Интернет-карта сайтов. Можно найти многое. И самое главное, что при наборе 25 кликов по банеру можно будет найти этот блог. Господа, эксперимент сугубо бесплатный, потому я даже не собираюсь платить 7$ за размещение немедленное (без дурацких кликов). Пытайся я разместить сайт, мне бы пришлось накликать на порядок больше или заплатить порядка 25$... Но я ещё раз повторю. Мы пытаемся понять может ли стать блог на Битрикс авторитетным. И можно ли этого добиться используя стандартные средства силами самого блоггера. Если будут желающие - с удовольствием у них проведём эксперимент, когда помогать блоггеру будут админы, кастомизируя компоненты под нужды пользователя...
Довольно странный каталог-ерйтинг блогов и RSS-лент. Раньше он мне более чем нравился, тем паче там мой "гражданский" ЖЖ зарегистрирован. А вчера отправил им заявку, написал админу и... и данный блог был отклонён. На самом деле не понимаю толком причин. Блог хорошо и быстро индексируется яндексом. Блог пока не имеет читателей по версии яндекса (но по версии фидбулена подписалось уже 5 человек). И по непонятным причинам блог не индексируется гуглей. В теории это тема для отдельного разговора, но просто меня это уже напрягает. 0 страниц в индексе!..
Так вот чем я хотел бы завершить данный пост... Моё имхо - интересные счётчики безусловно нужны для сайта. Не какие-нибудь банальные ли.ру или мэйл.каталог. А НОРМАЛЬНЫЕ ИНТЕРЕСНЫЕ каталоги!!! Такие, слава богам ещё не перевелись в инете...
P.S. не понятен темп роста подписчиков. Ничего не происходило - 4 человека дополнительно подписалось. Подписал на своё мыло на куче сервисов - ничего не происходит. Каталоги тоже молчат...
Начали изучать Корпоративный Портал - установили на Windows server 2008. Установка прошла очень быстро, поскольку в процессе установки инсталлятор скачал и поставил веб-окружение. Решили пока не экспериментировать с IIS 7.
То что под Windows без условно надо ставить пользовать IIS, сомнений быть не может, Apatch под windows - крайне неустойчивая и не безопасная конструкция.
Наиудобнейший инструмент - синхронизация с AD/Ldap. У нас развернута локальная сеть с Active Directory (AD) и всех пользователей вносить руками, было бы крайне неудобно. Мастер импорта не только импортирует пользователей, но проводит соответствие между группами пользователей в КП и в AD, что крайне удобно.
Но все ложка дегтя в бочке меда оказалась. Старинная проблема Microsoft - представление имени и фамилии пользователей. Сколько проблем возникает при синхронизации контактов с Outlook различных сторонних программ и сотовых телефонов - знает каждый, кто хоть раз пытался это сделать. В профиле пользователя Корпоративного портала соответствие полей с данными из Active Directory, СООТВЕТСВЕННО, такое:
ИМЯ - Full Name Фамилия - Last Name
Вообще в AD есть такие поля:
Full Name First Name Last Name Display Name
Логичнее было бы передавать в ИМЯ - First Name.
То есть когда заводишь в AD пользователь, то заполняешь First Name и Last Name, а система тебе отдает Display Name и Full Name (одинаковые), в виде First Name + Last Name. Одним словом, при авторизации получается Александр Иванов Иванов.
Наладили XMPP сервер. Отлично работает и с QIP Infinium и с Miranda. Однако, при запуске сервера запускается окно консоли, что, видимо, есть издержки бета-версии.
В целом, очень позитивное впечатление. Прежде всего понравилась прозрачность продукта, его логичность, на фоне богатого функционала.
Привет всем. Решился начать вести блог, так как появились задачи, решением которых хотелось бы поделиться, и думаю, что эти решения нужны не только мне. Перейдем к делу Исходные данные - Инфоблок новостей. - Публичный раздел новостей, реализованный компонентом news (кастомизированным).
Постановка задачи: В детальном просмотре новости вывести баннер. Баннер нужно вывести после основного текста новости, перед дополнительными свойствами.
Решение Первая мысль, которая пришла в голову - это вставить вызов $APPLICATION->ShowBanner(...) в шаблон news.detail. Такое решение даже работало некоторое время, а именно, до тех пор, пока не включили кеширование. Если включить кеширование, а в шаблоне вызывать ShowBanner, то всё, что было в кеше до этого скинется. Т.е. у меня попадало в кеш всё после вызова баннера, остальное (то что ДО) пропадало.
В результате общения с ТП битрикса родилось следующее решение: 1. В шаблон вывода новости вставляется маркер, например #BANNER_INSIDE_NEWS# 2. Создается обработчик события OnEndBufferContent. 3. В обработчике маркер заменяется на нужную строку.
Затруднение вызвало то, что $APPLICATION->ShowBanner не возвращает строку. Порывшись в исходниках, выяснил, что $APPLICATION->ShowBanner вызывает CAdvBanner::Show, а CAdvBanner::Show как раз таки и возвращает строку.
В итоге получилось следующее решение
AddEventHandler("main", "OnEndBufferContent", "ShowBannerInsideNews");
function ShowBannerInsideNews(&$content)
{
if (CModule::IncludeModule("advertising"))
{
if (strpos($content, '#BANNER_INSIDE_NEWS#') !== false)
{
$content = str_replace('#BANNER_INSIDE_NEWS#', CAdvBanner::Show('...'), $content);
}
}
}
'...' - нужный тип баннера
С удовольствием выслушаю ваши предложения и замечания. Надеюсь этот материал будет вам полезен.
Хорошие новости! По просьбам слушателей вебинара было проведено тестирование работы SMS-модуля в среде «1С-Битрикс: Копроративный портал».
Теперь при установке модуля на «Корпоративный портал» будут доступны все SMS-функции, которые были ранее доступны в «1С-Битрикс: Управление сайтом»:
массовые рассылки SMS-сообщений (используется стандартный модуль «Подписка и рассылки»);
подписка на SMS-рассылки, как на обычные почтовые (используется усовершенствованный компонент подписки);
рассылка произвольных SMS из административного раздела сайта;
отправка SMS из произвольных мест в коде сайта (используется API модуля, подробно описанное в документации).
Также в настоящее время проектируется РАСШИРЕННАЯ ИНТЕГРАЦИЯ модуля с бизнес-логикой «Корпоративного портала». Таким образом, через некоторое время пользователи «Корпоративного портала» получат дополнительный функционал, специфичный для данного продукта. По интеграции SMS-модуля с «Корпоративным порталом» планируем провести отдельный вебинар.
Пожелания по специфичному функционалу для «Корпоративного портала» можно оставлять в комментариях или отсылать в личку.
Вполне возможно, что кому-то такой заголовок покажется странным. Однако, он не лишён определённой смысловой нагрузки - блог, который я веду здесь на сайте битрикс оставляет минимум свободы действий. Мы все знаем, что я не могу вставить ссылки привычным образом через тег а. Необходимо использовать тег урл. В принципе обычно, когда мы делимся мыслями друг с другом, это не принципиально, однако, если мы хотим вставить код счётчика яндекс, это становится смертельно. Ниже я приведу пример двух способов написания. Первый даёт яндекс (и в этом блоге он отображается как строка символов), а второй я сейчас на коленке сваял средствами блого-визуального редактора.
<a href="http://blogs.yandex.ru/button/?id=19645735&type=rating"><img src="http://button.blogs.yandex.net/57/35/19645735-rating-orange-male.gif" width="80" height="15" border="0" alt="Рейтинг блогов"/></a>
и
[URL_=http://blogs.yandex.ru/button/?id=19645735&type=rating][IMG_]http://button.blogs.yandex.net/57/35/19645735-rating-orange-male.gif[/IMG][/URL]
Чисто зрительно второй способ даёт практически такой же эффект. ОДНАКО, так не удаётся прописать альт к картинке, да и вообще будет ли это динамический элемент - вопрос времени. Я поставлю в данном посте два вида счётчиков яндекса из трёх. По двум причинам: 1) проверим работают ли они динамически и кушает ли их яндекс 2) Яндекс любит себя. в СЕО среде ходят слухи, что наличие таких счётчиков способно поднять авторитетность по мнению яндекса
последний счётчик я в столь ранний час не особенно представляю как адаптировать для местных нужд:
выходит название указано... нет дескрипшна... Почему яндекс так гнусно проигнорил название блога? Подождём увидим, возможно он исправится... Собственно с точки зрения блоггера довольно неприятно то, что стандартными средствами юзера мы не можем вмешаться и изменить название блога. Это означает, что все RSS подписчики получат его именно в таком виде. Что не есть хорошо...
Теперь, раз уж мы так яростно печёмся о рассылке, зададимся вопросом почему яндекс не видит ни единого подписчика??? Я сам себе точно выписываю эту ленту. чтобы получить 1 подписчика хотя бы. + добавление ленты в RSS каталоги было произведено. Могли не взять. или не успеть добавить. или не успеть проиндексировать... Но всё равно подозрительно, ведь видит же яндекс, что на блог идёт 1 ссылка!.. Собственно вопрос заключается в том, чтобы набрать откуда-то подписчиков (может своими силами съэмулировать ради эксперимента) и понять увидит ли их яша. Дальше не маловажный вопрос, подписываться люди должны собственно на этот блог или на фид? Или разницы нет?.. ИМХО - не очевидно...
И последний вопрос, который мучает меня сегодня. Почему блог не проиндексировался гуглей? Яша захвал его очень оперативно. Любовь к отечественной CMS? Слабо верится... Но другого объяснения пока не вижу...
Недавно столкнулся с очередным багом в IE 6, 7, 8. Но спустя минуту понял - это не баг, это фича! Почему фича? Потому, что больше ни один браузер так делать не умеет!
Я делаю свой плагин для jQuery, аналог ThickBox. Мне понадобилось сделать в правом верхнем углу иконку «крестик» для закрытия «окна». Нарисовал картинку по пикселям. Сохранил как прозрачный gif. Ну и «прикрутил» эту картинку.
Во всех браузерах как положено все, а в IE ...
Прошу прощения за убогость картинки
Как видите, крестик стал прозрачным, хотя должен быть белым, с небольшим градиентом. Причем прозрачным стал не только он, но и вся часть слоя под ним. Долго я пытался понять в чем дело. Дело оказалось в свойстве Opacity у родителького слоя (Хотя оно было 100%). Как только я удалил свойство всё стало отображаться нормально.
Opacity устанавливалось через jquery метод .show(); Честно говоря, не изучал проблему дальше... зависит ли это от position и т.п. Меня больше интересует сталкивался ли кто-нибудь с таким? Кстати. Если вместо моего крестика вставить каку-нибудь jpg картинку, то у неё становятся прозрачными полностью черные пиксели.
Проверял на разных компах.
p.s.: хочу ещё опубликовать на хабре, но я в минусе к сожалению Накиньте, если стоит того http://beono.habrahabr.ru/
Время идёт и мы идём вместе с ним. сегодня пообщались с комрадами из SEO-сообщества и выяснили определённые вещи. Само собой, никого там битрих не радует, но это к делу не относится. К делу относится то, что была поставлена под сомнение валидность отдачи RSS ленты. Что мы и проверили: 1) скормили десятку RSS-каталогов 2) скормили feeds2.feedburner.com/lexnekr, убрав жамкалку напротив учитывать клики по заголовкам (в противном случае создались бы редиректорные ссылки) 3) скормили feeds2.feedburner.com/lexnekr ЯППБ и гугле. Поскольку фид съедает точную копию этого блога на битрихе, по идее он должен лишь передать инфу о ней гугле\яше. Дальше всё должно стать хорошо и всё это добро проиндексится ПСами... в разделе "Блоги". Ждать результата придётся некоторое время. Если в течение 2 недель не произойдёт - будем писать в саппорт. Инструкция по созданию фида: - кормим фидбин.гугль.ком - Решения два:
1. Если вы только создаёте RSS-трансяляцию в FeedBurner, то на втором этапе не ставьте галочку “Clickthroughs“.
2. Если лента уже существует, то зайдите в раздел “Analize” - “Site Stats” и снимите галочку с “Item link clicks”.
Это всё. Теперь все ссылки на оригинал записи в ленте и в аггрегаторах будут вести прямо на ваш блог. Что от этого теряет статистика FeedBurner? Учёт кликов по заголовкам. Но его, в общем-то, никто и не смотрит.
теперь собственно дело за блог- и блоггер-сервисами. Многие из них хотят разместить счётчик или код. попробуем?.. <span id="5718c57b27b16d9cc7671b07faa42d11"></span>
Собственно вопрос в том, что обычно любая структура аля инфоблок начинает рано или поздно переносить свои элементы на другие страницы. в ЖЖ это грамотно сделано с помощью ссылки "ранее" в самом низу страницы. У битрикса пока скопилось уже 30 записей на одной странице. Я хз сколько ещё может скопиться. И доступом к ЭТОМУ сайту не отягощён... так что и интересно что есть у нас в стандартном решении НА ПРАКТИКЕ, а не в теории...
Для чего? Практика показывает, что если в интернете существует несколько блогов (например на бесплатных хостингах название аккаунта) с одинаковым названием, то при поиске по имени блога будет выдан наиболее авторитетный. Если же указать часть адреса блога, в этом поиске, то будет выдано его имя. Что следует из этого факта? Значительно более авторитетен блог-хост. Очевидно. Ведь каждый блог, зарегистрированный на нём будет ссылаться на него. Так же немаловажное значение имеет количество блогов. Посмотрите тот же Livejournal. Да там миллион записей! Да, большая часть из них сугубо боты, роботы и спамеры, но есть и весьма авторитетные товарищи. Платные аккаунты из них имеют десятые, если не сотые доли процента. Да и даже платный аккаунт совсем все ссылки не снимет. Это как проклятие так и благословение блог-хостинга. И знаете что? Битрикс с этой точки зрения так же блог-хост!.. Сам сайт битрикса!!! Подтверждение этому - поиск по имени блога Битрикс. Что в результате можно сказать уже сейчас? Сколько-нибудь плодотворной попытки вести блог на сайте Битрикса пока не было. По крайней мере блог популярно-транслируемый. Мы постараемся это исправить... Эксперимента ради...
Это один из самых важных вопросов для блоггеров. А в последнее время блог это не просто модно. Это теперь уже и прибыльно. Есть мнение, что даже волшебная кнопочка "добавить блог" в Яндексе для сайтов на Битиркс не сработает. Что нужно сделать для того, чтобы всё-таки оказаться в поиске по блогам? Как считаться блогом и для других сервисов? Это очень важно и очень интересно, ведь блоги - заработок для блоггеров. А блоггеры - почти неиссякаемый поток уникального и интересного контента для сайта. Естественно, если блоггеров найти грамотных. Данным блогом в целом и этим постом в частности мы положим начало громадному эксперименту что можно выжать из блога на битрикс. Просто блога.
Сегодня 3 апреля 2009 года я начинаю этот блог с конкретной целью. Выяснить отношения Битрикс и Поисковых систем. Основной упор будет сделан на поисковые системы Яндекс и Гугль, так же внимание будет оказано Рамблеру. Зарубежные поисковые системы могут быть упомянуты случайно или мельком, однако специально заострять внимания на них мы не будем.
Добро пожаловать к SEO-Графоману, 1С-Битрикс версия!
Примечание: Если вы устанавливаете «1С-Битрикс: Управление сайтом» на самостоятельно установленную MySQL, то необходимо помнить, что эта база данных в версии ниже 5 не поддерживает кодировку UTF-8.
Еще одно примечание по использованию SMS-модуля: В модуле есть возможность делать SMS-рассылки через битриксовый интерфейс(через тот же интерфейс, что и почтовые расссылки). Так вот, в настройках модуля "Подписка и рассылки" ("Настройки->Настройки Модулей->Подписка и Рассылки) есть поле "Кодировки сообщения в рассылку". Там должно быть значение UTF-8 для корректной отправки SMS-рассылки.
Более детальное описание появится завтра в документации по настройке модуля.
В следующей версии это скорее всего будет проверяться автоматически.
Удачного использования!
P.S. Если есть какие-то вопросы по настройке модуля, то у Вас есть возможность посетить вебинар, посвященный именно этой теме или можно задавать вопросы прямо здесь или в личку.
Столкнулся с проблемой корявого отображения в IE на главной странице сайта. Когда стал разбираться выяснилось что проблема возникает при превышение определенного порога подключаемых стилей.
А так как, на главной выводится большое количество компонентов то и количество подключаемых стилей превышает этот параметр. Причем, не просто не подключаются последние, а они как бы собой выдавливают предыдущие
В остальных браузерах все в норме.
Вот такие странности!
Придется видимо для главной делать отдельный шаблон и в нем прописывать все стили для компонентов
Сегодня, проанализировав статистику скачиваний SMS-модуля, были приятно удивлены. Постараемся тоже кое-чем вас порадовать.
Нередко новые технологии вызывают у разработчиков (а особенно их руководства) ощущение, что на их освоение уйдёт немало времени, а эффект от их применения проявится очень нескоро. В этой статье я постараюсь продемонстрировать простоту внедрения возможностей SMS-модуля в код web-приложения. На ПРИМЕРЕ. Почему же у меня заела кнопка shift на слове ПРИМЕРЫ? Да потому что в базовую поставку модуля входит лишь то, что придумали сами разработчики (причём за малый промежуток времени, который дали им менеджеры).
Кстати, я даже сам не подозревал, насколько SMS-ки могут облегчать жизнь в некоторых ситуациях. Не буду рассказывать о каких-нибудь уведомлениях о новых заказах в магазине: это не так интересно – и уже реализовано в модуле.
Давайте разберем такую ситуацию. Вы программист, работаете в небольшом web-отделе, состоящем из 30 человек. У вас есть злобный начальник отдела, но, тем не менее, уважающий всякую оптимизацию. И тут вы вспоминаете, что в пятницу, задержавшись на работе и отвечая на последнее письмо, допивая при этом третью бутылочку пива, скачали SMS-модуль с сайта www.sms4b.ru. И как же, думаете Вы, угодить начальнику в период кризиса-то. И думаете, что а вот замечательно было бы создать простую систему SMS-оповещения (как в докторе Хаусе, только там были пейджеры) сотрудников отдела, всего лишь одним движением руки.
Ну что ж, цель мы себе поставили, а в реализации я вам помогу =).
Итак, создаем новую страничку, и подключаем header нашего сайта.
Далее нам нужно подключить SMS-модуль для того, чтобы мы могли пользоваться его функционалом. Делается это так.
if (!CModule::IncludeModule("sms4b"))
{
ShowError("Неустановлен модуль SMS4B");
return;
}
Все, теперь у нас в системе есть объект под названием $SMS4B. Ну, при желании, конечно, можно создать и свой – с отдельным именем. Через этот объект Вам будут доступны все методы классов модуля. Их описание можно найти в документации для разработчиков.
Теперь нам понадобится что-то наподобие такой формочки
<form action="#" method="post">
Сотрудники отдела
<select name="webDepartmentNumbers[]" multiple>
<option value="79037976101">Кирюхова Татьяна Николаевна (79037976101)</option>
<option value="79037335489">Иванов Николай Иванович (79037335489)</option>
<option value="79037465489">Петров Александр Константинович (79037465489)</option>
<option value="79044568955">Сидоров Виталий Александрович (79037575489)</option>
<option value="79037115489">Плющенко Клим Андреевич (79037115489)</option>
</select>
Текст сообщения
<textarea name = "messageText"></textarea>
Транслитерировать сообщение
<input type="checkbox" name="translitMess" value="Y" checked />
<input type="submit" name = "formSend" value="Отослать" />
</form>
Выглядеть будет примерно так
Как мы видим здесь у нас есть список номеров, поле для ввода текста сообщения и галочка автоматической транслитерации текста сообщения. Список номеров я сформировал вручную, но Вы можете сделать формирование списка из инфоблока или еще как-нибудь. Для обработки номеров для отправки также будет полезно посмотреть функцию parse_numbers(). Текст сообщения будет автоматически кодироваться в нужную кодировку для SMS-сервера. И еще одна функция будет для транслитерации сообщения. Весь обработчик формы будет на несколько строчек...
if (isset($_REQUEST["formSend"]))
{
$messageText = htmlspecialchars($_REQUEST["messageText"]);
#транслитерируем текст сообщения
if ($_REQUEST["translitMess"] == "Y")
{
$messageText = $SMS4B->Translit(htmlspecialchars($_REQUEST["messageText"]));
}
$errorNumbers = array();
#рассылаем по всем выбраным номерам
foreach($_REQUEST["webDepartmentNumbers"] as $arIndex)
{
if (!$SMS4B->SendSMS($messageText, $arIndex))
{
$errorNumbers[] = $arIndex;
}
}
}
Итак, здесь все должно быть понятно. Вызов $messageText = $SMS4B->Translit($_REQUEST["messageText"]); транслитерирует сообщение, которое мы отсылаем через форму. Вызов $SMS4B->SendSMS($messageText, $arIndex) отсылает SMS с текстом $messageText на номер $arIndex. Все! Можно еще написать обработчик ошибок, т.е. все вместе будет выглядеть вот так вот.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("SMS-модуль и его возможности");
if (!CModule::IncludeModule("sms4b"))
{
ShowError("Неустановлен модуль SMS4B");
return;
}
?>
<form action="#" method="post">
<b>Сотрудники отдела</b>
<p>
<select name="webDepartmentNumbers[]" multiple>
<option value="79037976101">Кирюхова Татьяна Николаевна (79037976101)</option>
<option value="79037335489">Иванов Николай Иванович (79037335489)</option>
<option value="79037465489">Петров Александр Константинович (79037465489)</option>
<option value="79044568955">Сидоров Виталий Александрович (79037575489)</option>
<option value="79037115489">Плющенко Клим Андреевич (79037115489)</option>
</select>
</p>
<b>Текст сообщения</b>
<p>
<textarea name = "messageText"></textarea>
</p>
<b>Транслитерировать сообщение</b> <input type="checkbox" name="translitMess" value="Y" checked />
<p>
<input type="submit" name = "formSend" value="Отослать" />
</p>
</form>
<?
if (isset($_REQUEST["formSend"]))
{
$messageText = htmlspecialchars($_REQUEST["messageText"]);
#транслитерируем текст сообщения
if ($_REQUEST["translitMess"] == "Y")
{
$messageText = $SMS4B->Translit(htmlspecialchars($_REQUEST["messageText"]));
}
$errorNumbers = array();
#рассылаем по всем выбраным номерам
foreach($_REQUEST["webDepartmentNumbers"] as $arIndex)
{
if (!$SMS4B->SendSMS($messageText, $arIndex))
{
$errorNumbers[] = $arIndex;
}
}
}
if (count($errorNumbers) > 0 )
{
ShowError("Не отправлено на номера:");
foreach($errorNumbers as $arIndex)
{
ShowError($arIndex);
}
}
?>
Чувствую, если Ваш начальник прочтет эту статью, вы уже не отделаетесь от реализации чего-то подобного =).
Вы скажете что слишком дорого рассылать SMS-ки. А теперь давайте посчитаем. Пусть ЗП среднего начальника отдела 2000$. Т.е. в день зарабатывает около 90$, в час, соответственно, 11$. Сколько нужно времени чтобы обзвонить 30 человек? Ммм, да не меньше часа. Т.е. это 11$! А 30 SMS будет стоить Вам в самом худшем случае 42 рубля и 30 секунд для отправки. По-моему, совсем неплохо.
Итак, это был первый пример (how-to) по применению SMS-модуля. Думаю, в дальнейшем мы обсудим многие другие применения.
P.S. Данная статья подразумевает, что модуль на вашем сайте уже настроен в соответствии с описанием в документации. Дополнительно планируем провести небольшой вебинар по установке и настройке модуля.
Коллеги, я подключил на нашем проекте модуль Проактивной защиты.
Сейчас модуль доступен в режиме бета-тестирования и еще не включает некоторые функции. Но тем не менее, большая часть возможностей уже реализована.
Модуль «Проактивной защиты» - целый ряд технических решений по обеспечению безопасности продукта и разработанных веб-приложений, включающий несколько уровней защиты от большинства известных атак на веб-приложения и существенно повышающий уровень безопасности интернет-проектов.
«Проактивная защита» является существенным дополнением к стандартной политике безопасности продукта.
Модуль включает в себя комплекс систем по защите веб-приложений:
* Панель безопасности с уровнями защищенности * Проактивный фильтр (Web Application FireWall) * Технологию одноразовых паролей (OTP) * Защиту авторизованных сессий * Контроль активности * Журнал вторжений * Защиту административных разделов по IP * Стоп-листы * Контроль целостности * Рекомендации по настройке и ряд других решений
Я включил Проактивный фильр и пока не настраивал исключения для форумов, так что смотрите, код может повреждаться. Будет неудобно, настроим исключения для форумов.
Я так же включил защиту авторизованных сессий и они теперь хранятся в базе данных и меняются каждые 60 секунд. Если заметите что-то ненормальное в работе сайте - жалуйтесь пожалуйста
«Коллинеарный математический анализ: политическое учение Локка или политическое манипулирование?» Гуманизм представляет собой инвестиционный продукт, явно демонстрируя всю чушь вышесказанного. Пустое подмножество позиционирует гармонический интервал, впрочем, это несколько расходится с концепцией Истона. Селекция бренда последовательно имитирует мелодический нонаккорд, таким образом сбылась мечта идиота - утверждение полностью доказано. Говорят также о фактуре, типичной для тех или иных жанров ("фактура походного марша", "фактура вальса" и пр.), и здесь мы видим, что алеаторика образует бренд, указывает в своем исследовании К.Поппер. Умножение двух векторов (скалярное) нейтрализует потребительский рынок, при этом, вместо 13 можно взять любую другую константу.
Последствия медленной отправки почты на производительность Битрикс, влияние использования постоянных соединений с БД (MySQL Innodb) на блокировки
Партнёры "Битрикс" готовят к запуску сайт с высокой ожидаемой посещаемостью и большой активностью по добавлению и модификации контента (инфоблоки). Конфигурация: два выделенных сервера (для Веб и БД), в качестве БД использовалась MySQL с обязательным хранением таблиц в Innodb, учитывая планируемую нагрузку.
Предварительная конфигурация сайта, Apache и MySQL проводилась в соответствии с рекомендациями курса «Конфигурирование веб-систем для оптимальной работы» и активно используя "Монитор производительности" для диагностики "тяжёлых" страниц и запросов, мониторинга и настройки параметров БД (query_cache_size, tmp_table_size, max_heap_table_size, max_tmp_tables, table_cache и т.д.). Однако, когда уже казалось, что сайт показывает хорошие результаты по производительности, проявились 2 неприятные проблемы:
периодически без системы возникающие ошибки вида MySQL Query Error: UPDATE b_stat_day SET ... [Lock wait timeout exceeded; try restarting transaction], и в этом случае все серверные процессы Apache оказывались блокированными, сайт блокирован до перезапуска MySQL.
непредсказуемое бессистемное замедление формирования отдельных страниц, которое проявлялось либо в большом времени формирования страниц - 30-60 секунд, либо даже ошибке 504 nginx timeout!
Начали разбираться с MySQL, мониторинг состояния производился командами:
mysql> show full processlist; mysql> drop table if exists innodb_lock_monitor; mysql> CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB; mysql> SHOW ENGINE INNODB STATUS\G; mysql> DROP TABLE innodb_lock_monitor;
Выяснилось, что перед ошибкой, которую выводил PHP, в БД происходил deadlock на одних и тех же SQL-запросах типа
INSERT INTO b_iblock_section_element...
Попытались решить проблему на уровне приложения - уменьшая количество одновременных вставок элементов инфоблоков - безрезультатно. DEADLOCK этот довольно интересного типа insert intention waiting, описание которого можно посмотреть в багах MySQL. Возникает при множественных одновременных вставках в таблицу (как раз наш случай - активная работа с инфоблоками) и, по мнению специалистов MySQL, [как бы] багом вовсе не является, а есть правильное поведение MySQL+Innodb в определённых условиях. Ну да шут с ним Интереснее показалось нам другое: судя по диагностике блокировок Innodb (которая выводится в секции TRANSACTION команды SHOW ENGINE INNODB STATUS), всякий раз при возникновении проблем, блокирующей оказывалась транзакция с тем же OS thread id, что и транзакция, которую ранее MySQL выбирал в качестве "жертвы" при разборе DEADLOCK'а и должен был откатить. В подтверждение этого предположения, проблема с возникшими блокировками решалась силовым удалением "виновного" thread'а:
MYSQL> kill thread_id
Бесплатная служба поддержки MySQL пока не сильно помогла нам в анализе причин происходящего
По совету Максима Смирнова, обратили внимание на используемое постоянное соединение с БД, которое могло быть причиной подобного поведения - см., например, обсуждение в блоге Peter Zaitsev Are PHP persistent connections evil ?. Для исключения каких бы то ни было проблем и учитывая, что в случае с MySQL новые соединения создаются быстро и незначительно влияют на общую производительность сайта, мы отключили постоянное соединение с БД:
define("DBPersistent", false); в файле dbconn.php
Блокировки больше не проявлялись.
В это же время Денис Шаромов с Максимом Смирновым обнаружили похожую периодически возникающую проблему (nginx timeout) на другом сайте, связанную с медленной работой процедуры отправки почты.
Проверили на нашем проекте - 60 секунд на отправку сообщения! Это и была причина появления обеих проблем: и Nginx timeout, и MySQL Lock! В первом случае связь очевидна, во втором - задержка отправки почтового уведомления на хите задерживала завершение транзакции по добавлению/модификации элемента инфоблока, дальше - заложенный в MySQL-Innodb DEADLOCK и, видимо, проблема с открытыми транзакциями и постоянными соединениями. Возникала проблема неожиданно, при обработке события отправки почты на хите. Администраторы разобрались с почтой, обработка почтовых событий была перенесена на cron:
1) define("BX_CRONTAB_SUPPORT", true); в dbconn.php 2) добавить в crontab вызов php -f /..../bitrix/modules/main/tools/cron_events.php
Последнюю рекомендацию, с моей точки зрения, нужно применять на всех сайтах во избежание зависимости доступности сайта от работы службы почты. Либо постоянно мониторить скорость работы почты.