...

суббота, 1 ноября 2014 г.

Popcorn Time на русском

На Хабре не раз уже рассматривался Popcorn Time (тут, тут, тут и тут).

Но у этого проекта есть один небольшой недостаток. Фильмов в русской озвучке там нет. Я попробовал решить эту проблему.





На самом деле всё это громко сказано, функционал реализован базово, прошу это воспринимать не более чем proof of concept. За пару вечеров накидал небольшой парсер одного достаточно популярного торрент трекера с выгрузкой данных в базу и далее выдачу в виде понятного для Popcorn Time API.

В техническом плане ничего интересного. nginx, Node.js, Express, MongoDB(Mongoose). Пожалуй самым интересным о чем можно рассказать является преобразование торрент файла в magnet ссылку, но даже это при использовании пакета bencode становится очень простым:



var metadata = bencode.decode(body),
sha1 = crypto.createHash('sha1');
sha1.update(bencode.encode(metadata.info));
film['hash'] = sha1.digest('hex');
film['magnet'] = 'magnet:?xt=urn:btih:' + film['hash'] + '&dn=' + metadata.info.name;




Всё это запушено и работает. Опробывать можно 2я способами.

1. Скачать собранный мной Popcorn Time. К сожалению только Linux 64 bit.

2. Скачать Popcorn Time с git, в коде сделать изменения (под спойлером ниже) и собрать проект как написано тут

diff


diff --git a/src/app/lib/models/movie_collection.js b/src/app/lib/models/movie_collection.js
index bb73eaa..58f40e1 100644
--- a/src/app/lib/models/movie_collection.js
+++ b/src/app/lib/models/movie_collection.js
@@ -11,7 +11,7 @@
return {
torrents: App.Config.getProvider('movie'),
subtitle: App.Config.getProvider('subtitle'),
- metadata: App.Trakt
+ metadata: null
};
}
});
diff --git a/src/app/settings.js b/src/app/settings.js
index 291c07c..06fd21e 100644
--- a/src/app/settings.js
+++ b/src/app/settings.js
@@ -66,8 +66,8 @@ Settings.deleteTmpOnClose = true;
Settings.updateApiEndpoint = 'http://popcorntime.io/';
/* TODO: Buy SSL for main domain + buy domain get-popcorn.re for fallback
Settings.updateApiEndpointMirror = 'https://popcorntime.cc/'; */
-Settings.yifyApiEndpoint = 'http://yts.re/api/';
-Settings.yifyApiEndpointMirror = 'http://yts.im/api/';
+Settings.yifyApiEndpoint = 'http://ift.tt/1s3bsX1';
+Settings.yifyApiEndpointMirror = 'http://ift.tt/1s3bsX1';
Settings.connectionCheckUrl = 'http://google.com/';

// App Settings







Исходники backend части http://ift.tt/1s3bsX4

На этом пожалуй всё. Хорошего просмотра.



P.s надеюсь кто-нибудь продолжит идею :)


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Перевод] Facebook, скрытые сервисы и https-сертификаты

Facebook недавно открыл миру наличие скрытого tor-сервиса, дающего более безопасный доступ к их сайту. Пользователи и журналисты спрашивали комментариев у разработчиков Tor по этому вопросу. Перед вами их ответы и размышления.
Часть первая: да, в посещении сайта Facebook через Tor нет никаких противоречий



Мне казалось, что в этом пояснении нет нужды, пока я не услышал от журналиста вопрос – почему пользователи Tor не будут использовать Facebook. Оставляя в стороне отношение Facebook к приватности и их правила связанные с использованием настоящих имён, и надо ли вам что-то сообщать в Facebook о своей персоне,- главное здесь то, что анонимность не заканчивается только попыткой скрыться от сайта, на который вы ходите.



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

Кроме того, есть в мире места, откуда Facebook недоступен. Когда-то давно я разговаривал с человеком из Facebook, отвечающим за безопасность, который рассказал мне забавную историю. Когда он первый раз узнал про Tor, он ненавидел и боялся его, поскольку он «очевидно» предназначался для разрушения бизнес-модели Facebook – узнать всё про всех пользователей. Затем внезапно Иран заблокировал Facebook, после чего большая часть пользователей сервиса пересела на Tor для посещения Facebook, и человек превратился в фаната Tor, потому что без него все эти пользователи просто были бы отрезаны. Другие страны, к примеру Китай, после этого случая внедряли похожие меры. И эта перемена в отношении к Tor от «Tor – инструмент приватности, позволяющий пользователям контролировать их данные» к «Tor – инструмент общения, позволяющий пользователям выбирать самим, какие сайты они хотят посещать» — это отличный пример разнообразия возможностей использования Tor. Какое бы вы использование Tor не придумали, где-то найдётся человек, который использует его неожиданным для вас способом.


Часть вторая: мы с радостью встречаем расширение использования скрытых сервисов



Я считаю – очень здорово со стороны Facebook было добавить себе адрес .onion. Бывают случаи, когда использованию этих адресов нет альтернатив: к примеру статья «использование скрытых сервисов с благими намерениями», или грядущие децентрализованные сервисы типа чата Ricochet, где каждый пользователь – это скрытый сервис, поэтому нет центральной точки, куда можно было бы подключиться для прослушки или давления. Но мы особенно не афишировали эти адреса, по крайней мере не так сильно, как делали это некоторые резонансные случаи типа «мой сайт хотят закрыть».

У скрытых сервисов есть много свойств, способствующих безопасности. Во-первых – благодаря устройству Tor тяжело выяснить, где именно находится сервис. Во-вторых – так как адрес сервиса одновременно является хэшем его ключа, идентификация происходит автоматически. Если вы ввели .onion-адрес, ваш клиент Tor гарантирует, что вы соединяетесь с сервисом, располагающим приватным ключом, соответствующим этому адресу. В-третьих – процесс диалога происходит с шифрованием, даже если на уровне приложений трафик не шифруется.


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


Ещё один приятный бонус – Facebook серьёзно относится к своим пользователям, приходящим к ним через Tor. Сотни тысяч людей таким образом используют Facebook уже несколько лет, но в наши дни, когда такой проект, как Википедия, запрещает редактирование материалов Tor-пользователям, такой крупный сайт решает что он не против того, чтобы его пользователи были в большей безопасности.


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


Часть третья: адрес немного помпезный, и что с того



Адрес скрытого сервиса Facebook — facebookcorewwwi.onion. Он не выглядит как случайный хэш публичного ключа. Многие интересовались, как же им удалось пробрутфорсить такое длинное имя.

Сначало было просто сгенерировано много строчек, начинающихся с «facebook». Затем они выбирали из этих строчек такие, вторая половина которых была наиболее красивой. Выбрали «corewwwi», про которую можно даже сочинить хорошее объяснение того, что она означает.


В связи с этим поясню – нет возможности сгенерить точное имя, которое вам нужно. Для этого пришлось бы брутфорсить все 80 бит. Для дальнейшего чтения рекомендуем «Атака дней рождения». Тем, кто хочет помочь сервису Tor, мы рекомендуем прочесть статьи «скрытым сервисам нужно немного любви» и «предложение по Tor 224».


Часть четвёртая: что мы думаем по поводу https-сертификата для адреса .onion ?



В Facebook не только подняли скрытый сервис, они ещё получили сертификат для https на этот сервис, подписанный Digicert. Это привело к жарким дискуссиям в сообществах людей, занимающихся сертификатами и браузерами – они пытаются решить, каким именам можно получать сертификаты. Диалог пока продолжается, и вот мои размышления по этому вопросу.

За сертификаты: мы, люди из сообщества специалистов по безопасности в интернете, учим людей, что https необходим, а http – опасен. Поэтому есть смысл в том, что пользователя хотят видеть https перед адресом.


Против: В Tor вся эта безопасность уже встроена, поэтому агитируя людей платить Digicert, мы пропагандируем эту бизнес-модель, в то время как мы должны пропагандировать альтернативу ей.


За: Вообще, в данном случае https даёт кое-какое преимущество – если tor-сервис находится не на том же сервере, на котором находится сам сайт. Конечно, эта «последняя миля» между сервисом и сайтом проходит по внутренним сетям компании, но тем не менее.


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


Одна из альтернатив – встроить в Tor Browser условие, чтобы он не показывал пугающее всплывающее окно для адресов в зоне .onion, работающих по https. Более интересный вариант – сделать так, чтобы скрытые сервисы могли сами генерить самоподписанные https-сертификаты, используя свой приватный onion-ключ, и научить Tor Browser подтверждать их – в общем, ввести децентрализованную систему выдачи сертификатов для адресов .onion, поскольку они и так автоматически идентифицируются. Тогда не надо будет заниматься ерундой с обычной процедурой получения сертификатов.


Можно также представить такую модель поведения, когда пользователь может сообщить своему Tor Browser, что вот этот адрес .onion – это Facebook. Или более прямолинейно – распространять список ссылок «известных» скрытых адресов вместе с Tor Browser, на манер своего собственного списка сертификатов. Тогда встанет вопрос – а какие сайты включать в этот список.


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


Часть пятая: что ещё нужно сделать?



В плане дизайна и безопасности скрытым сервисам нужно ещё немного любви. Мы планируем улучшения дизайна, но не имеем достаточно разработчиков и финансирования для их реализации. Мы беседовали с инженерами Facebook на этой неделе по поводу надёжности и масштабируемости скрытых сервисов, и мы рады, что Facebook раздумывает над тем, не помочь ли нам в развитии скрытых сервисов.

И наконец, раз уж речь зашла о том, чтобы рассказывать людям о свойствах сайтах .onion, касающихся безопасности – не значит ли это, что название «скрытый сервис» уже не является самым подходящим. Изначально мы называли их «сервисы со скрытым расположением», что быстро сократилось до «скрытых сервисов». Но защита местоположения сервиса – это только одно из множества свойств. Может быть, нам следует объявить конкурс на лучшее новое название для этих защищённых сервисов? Даже «луковичный сервис» будет лучшим вариантом, если он заставит людей разбираться в том, что это такое.


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Работа веб-проекта в условиях нестабильного подключения

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

Рассмотрим 3 примера: интернет-магазин, кинотеатр и онлайн-плеер. Для магазина и кинотеатра так же идет разделение на 2 части — что делать на стороне пользователя и на стороне оператора/продавца.


Я не буду рассуждать из-за чего происходят проблемы с подключением и разделять их каким-либо образом. Так же, в рамках данной статьи, потеря подключения рассматривается как редкий случай, а не постоянное состояние. Для подобного функционирования требуется связь с сервером хотя бы раз в день. У каждой задачи есть множество вариантов её решить. Нет смысла писать «тут можно было просто в памяти хранить, незачем писать в LocalStorage», спасибо. Так же обращаю внимание что я специально не писал никакого кода в статье, т.к. в каждом случае требуется индивидуальный подход, да и с течением времени ограничения хранилищ или особенности работы браузеров могут меняться, но суть останется прежней.


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


Всё это будет работать в случае OnePageApplication, в иных случаях решения додумывайте сами :-)




Интернет-магазин




Со стороны пользователя:




Вы лазаете по страницам, выбираете товары, складываете в корзину. Внезапно пропадает соединение с магазином. Тут же появляется окно со списком уже сложенных товаров и специально сформированный номер телефона, позвонив по которому оператор сразу же уточняет куда всё доставлять и желаете ли вы что-то ещё. Особенно применимо к доставке еды. Бывает, интернет отключается, когда уже вводишь номер телефона, жмешь перейти на следующий шаг, и получаешь ошибку подключения. А назад уже не вернуться и номер телефона не посмотреть. Заказ потерян.

Оператор




Оператору имеет возможность на отдельной странице посмотреть заказы «в процессе», так же получает сообщения о потерявших связь клиентах. Если пользователь был авторизован, то ему можно перезвонить (прямо в браузере), либо по получению звонка с добавочным номером АТСка сразу выводит данные о заказе. Все довольны.

Кинотеатр




Возможность онлайн заказа билета + интерфейс оператора работающий через браузер (может быть и отдельная программа, сути это не меняет) с моментальной отправкой данных о купленных билетах на сервер.

Со стороны кассира:




Вырубился интернет, билеты надо печатать, да так, чтобы их не купили онлайн. В браузере блокируется определённое количество мест (прогнозируемое количество покупок онлайн), остальные можно выбирать/печатать без проблем. Данные аккумулируются и оправляются, как только соединение появляется. В случае если места заканчиваются — оператор связывается по телефону с ответственным за работу сайта, и последний имеет возможность выделить ещё участок для продажи оффлайн, а кассир в ручную добавить их как «свободные».

Со стороны клиента при покупке онлайн.




Клиент видит на сайте сообщение что нет связи с кассой кинотеатра, но всё так же имеет возможность купить ограниченное количество билетов (либо возможность забронировать билеты по телефону, позвонив прямо из браузера). На билетах печатается специальный уникальный QR код, который проверяется на соответствие при входе в зал.

Онлайн-плеер




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

Но вот отключается интернет, и ты сидишь без музыки. Не круто.

Как вам вариант что, например, «любимые» треки всегда доступны? Уже лучше, когда есть, хотя бы, пара сотен треков.

Как определить, что сервер не доступен (с клиента)?

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

Как определить, что клиент (пользователь, АРМ оператора) отвалились?

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


Онлайн плеер




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

В каком виде хранить треки?

Base64 или любое текстовое представление файла.


Как воспроизводить из строки?

Самый простой способ это просто генерация audio элемента с указанием в качестве источника “data:audio/wav;base64, …”. Есть масса библиотек, найти их не составит труда.


Погоди, так это получается никакого стриминга, проигрывание только после загрузки?

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


Так, хорошо, и где нам это хранить?

Вот тут уже сложнее. В зависимости от ситуации (браузера, устройства и т.п.) нам нужно использовать разные хранилища.

IndexedDB: firefox и chrome на мобильных устройствах, chrome, firefox, IE на десктопах

WebSQL: android browser, safari, ios web view на мобильных, safari на десктопах

SessionStorage для android browser, если 200мб websql недостаточно. Но нужно учитывать, что сохранение идет только на сессию.

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


Что в итоге то?

У пользователя отключился интернет, даём доступ на страницу с любимыми треками / плейлистами, играем из хранилища по запросу :-)


Кинотеатр




Для кассы




Задача: работать при отсутствии подключения к основному сервису.

Какие данные хранить?

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


Где хранить?

В данном случае LocalStorage с 5мб должно хватить более чем.


Механизм работы

Потеряно подключение -> ограничиваем места в интерфейсе, помечаем проданные билеты флагом что они не сохранены. Для оператора, в целом, ничего не меняется. При появлении подключения отправляем обновлённые данные, получаем данные о проданных онлайн билетах и сеансах на ближайшие пару днейю


На сайте (при недоступности кассы)




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

Решение: Заранее помечаем прогнозируемое количество мест как «онлайн покупки», в случае потери соединения продаем только их или предлагаем возможность позвонить кассиру.


На сайте (при обрыве связи клиента)




Задача: показать секту сеансов, цены, телефоны для бронирования.

Решение: сразу загружаем эти данные в LocalStorage, отображаем при потере подключения.


Интернет-магазин




На клиенте




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

На сервере




Сохраняем данные о всех положенных товарах с привязкой к добавочному номеру. При звонке АТС передает добавочный номер, и оператору сразу выводится вся информация по заказу.

В случае если это был авторизованный клиент, и нам известен его номер телефона — можно сразу же совершить звонок.

Решать, стоит ли внедрение таких систем затрат, конечно же вам.

Главный плюс — пользователю не надо устанавливать никакого дополнительного ПО, надстроек и т.п. Всё сразу же работает.

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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


ТОП-5 стартапов VCStart. Прощальная гастроль нашего блога на Хабре

Здравствуй, хабражитель!

Компания «Тематические медиа» решила не продлевать с нами контракт на ведение корпоративного блога. Поэтому, это наша последняя здесь статья. Мы прощаемся с вами на Хабре и напоследок представляем вам ТОП-5 самых интересных проектов.



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


№1: «Грузопоиск» — информационно-логистическая b2b-платформа, в которую вложились 72 инвестора на сумму $22 265. А вернее, 73 — во время первого раунда финансирования (изначально сумма была $150 тысяч) один из инвесторов пришел и все купил выразил желание приобрести всю отчуждаемую стартапом долю и войти в команду проекта на правах члена совета директоров. Подробнее об этом — тут.



№2LeClick.ru – CRM-платформа для ресторанов и b2c -площадка для их постоянных клиентов с очаровательной лидершей майкрософтовской закалки во главе.



№3 Запишись.com — сервис оптимизации работы служб персонала и кадровых агентств. Стартап практически на стадии идеи, сумел по финансовым показателям выйти на третье место, обогнав многие уже работающие и приносящие прибыль бизнесы.



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



№5 Adaperio — сервис проверки подержанных автомобилей. Проникновенные истории создателей стартапа о том, как они дошли до жизни такой, задели читателей за живое.



И это далеко не все. За три месяца на платформе разместили свои проекты несколько сотен стартапов, около ста из них прошли модерацию и доступны для инвестиций. b2b и b2с-сервисы, туристические агрегаторы, информационные онлайн-издания, студии разработчиков игр и мобильных приложений ждут своих инвесторов, средства которых помогли бы проектам в развитии и выходе на рынок. Да, некоторые из них, кроме идеи ничего не имеют, другие, наоборот, уже состоялись как бизнес-предприятия и приносят прибыль. Объединяет их стремление. Стремление дать миру то, что по мнению авторов стартапов, ему так остро не хватает.


Следить за деятельностью платформы коллективных инвестиций VCStart можно на нашем официальном сайте и в социальных сетях, ссылки на наши сообщества в них вы найдете в сайд-баре.



This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Писать скрипты для Mikrotik RouterOS — это просто

RouterOS — сетевая операционная система на базе Linux. Данная операционная система предназначена для установки на аппаратные маршрутизаторы Mikrotik RouterBoard. Также данная система может быть установлена на ПК (или виртуальную машину), превращая его в маршрутизатор. Изначально довольно богатая функционалом ОС нет нет да и удивит отсутствием какой-нибудь нужной фишки из коробки. К сожалению, доступ к Linux-окружению очень сильно ограничен, поэтому, «это есть под Linux» абсолютно не равнозначно «это есть в RouterOS». Но не надо отчаиваться! Эта система предоставляет несколько возможностей для расширения своего функционала. Первая — самая простая и нативная — это возможность писать скрипты на встроенном языке.

В данной статье, в качестве примера будет рассмотрен скрипт, преобразующий DNS-имена в списки IP-адресов (address lists).

Зачем он может быть нужен? Многие сайты используют Round Robin DNS для распределения нагрузки (а некоторые и не только для этого). Чтобы управлять доступом к такому сайту (создать правило маршрутизации или фаервола) нам потребуются все IP-адреса, соответствующие этому доменному имени. Более того список IP-адресов по истечении времени жизни данной DNS-записи (в данном случае речь идёт об A-записи) может быть выдан абсолютно новый, поэтому информацию придётся периодически обновлять. К сожалению в RouterOS нельзя создать правило

блокировать все TCP соединения на порт 80 по адресу example.com



на месте example.com должен быть IP-адрес, но как мы уже поняли, example.com соответствует не один, а несколько IP-адресов. Чтобы избавить нас от мучения создания и поддержки кучи однотипных правил, разработчики RouterOS дали возможность создавать правило так:

блокировать все TCP соединения на порт 80 по любому адресу из списка с именем DenyThis



Дело осталось за малым — автоматически формировать этот самый список. Кто ещё не утомился от моей писанины приглашаю под хабракат.



Сразу приведу текст скрипта, далее последует его пошаговый разбор


:local DNSList {"example.com";"non-exist.domain.net";"server.local";"hostname"}
:local ListName "MyList"
:local DNSServer "8.8.8.8"
:foreach addr in $DNSList do={
:do {:resolve server=8.8.8.8 $addr} on-error={:log debug ("failed to resolve $addr")}
}
/ip firewall address-list remove [find where list~$ListName]
/ip dns cache all
:foreach i in=[find type="A"] do={
:local bNew true
:local cacheName [get $i name]
:local match false
:foreach addr in=$DNSList do={
:if (:typeof [:find $cacheName $addr] >= 0) do={
:set $match true
}
}
:if ( $match ) do={
:local tmpAddress [/ip dns cache get $i address]
:if ( [/ip firewall address-list find ] = "") do={
:log debug ("added entry: $[/ip dns cache get $i name] IP $tmpAddress")
/ip firewall address-list add address=$tmpAddress list=$ListName comment=$cacheName
} else={
:foreach j in=[/ip firewall address-list find ] do={
:if ( [/ip firewall address-list get $j address] = $tmpAddress ) do={
:set bNew false
}
}
:if ( $bNew ) do={
:log debug ("added entry: $[/ip dns cache get $i name] IP $tmpAddress")
/ip firewall address-list add address=$tmpAddress list=$ListName comment=$cacheName
}
}
}
}





Текст скрипта нужно добавить в репозиторий скриптов, находящийся в разделе /system scripts.

Скрипт выполняется построчно. Каждая строка имеет следующий синтаксис:



[prefix] [path] command [uparam] [param=[value]] .. [param=[value]]


[prefix] — ":" — для глобальных комманд, с символа "/" начинается командная строка, которая будет выполняться относительно корня конфигурации, префикс может отсутствовать, тогда командная строка выполняется относительно текущего раздела конфигурации;

[path] — путь до требуемого раздела конфигурации, по которому происходит переход перед выполнением команды;

command — непосредственно действие, выполняемое командной строкой;

[uparam] — безымянный параметр команды;

[param=[value]] — именованные параметры и их значения.

Итак, первым делом, определим параметры работы скрипта в виде переменных. Переменная объявляется командами :local и :global, соответственно получаем локальную переменную, доступную только внутри своей зоны видимости, или глобальную, которая добавляется в список переменных окружения ОС и будет доступна откуда угодно. Локальные переменные живут, пока выполняется их зона видимости, глобальные — пока мы не удалим их.



:local DNSList {"example.com";"non-exist.domain.net";"server.local";"hostname"}
:local ListName "MyList"
:local DNSServer "8.8.8.8"


Переменная DNSList содержит массив доменов, с которым мы хотим работать. Переменная ListName содержит строку, которой будет называться полученный address-list. Переменная DNSServer — содержит адрес DNS-сервера, который будет использоваться для получения информации о записях доменов.

:foreach addr in $DNSList do={
:do {:resolve server=$DNSServer $addr} on-error={:log debug ("failed to resolve $addr")}
}


В цикле «для каждого» обойдём массив доменов и отрезолвим их IP-адреса. Конструкция

:do {command} on-error={command}


служит для отлова runtime-ошибок. Если не использовать её, то скрипт может прервётся при ошибке резолва несуществующего или ошибочного адреса.

/ip firewall address-list remove [find where list~$ListName]




Перейдём в раздел конфигурации /ip firewall address-list и удалим все записи, в которых название списка содержит значение переменной $ListName. Конструкция из квадратных скобок позволяет в рамках текущей команды выполнить другую, а результат выполнения передать текущей в виде параметра.

/ip dns cache all
:foreach i in=[find type="A"] do={


перейдём в раздел конфигурации /ip dns cahe all. Там содержатся DNS-кэш роутера в виде таблицы Name — Type — Data — TTL. Выполним отбор по типу — нам требуются только A-записи. И результат отбора обойдём в цикле «для каждого». Это и будет главным циклом нашего скрипта.

:local bNew true
:local cacheName [get $i name]
:local match false




Создадим переменные, обновляемые в каждом цикле: два флага — bNew, исключающий дублирования, match, показывающий, входит ли текущая запись кэша в наш список доменов; переменная cacheName содержит поле Name текущей записи кэша, то есть домен.

:foreach addr in=$DNSList do={
:if (:typeof [:find $cacheName $addr] >= 0) do={
:set $match true
}
}




Обойдём список доменов и для каждого проверим, содержится ли в строке cacheName подстрока в виде домена из этого списка.
Почему не использовать сравнение на равенство?

Очень просто — логика скрипта предполагает что под-домены должны обрабатываться так же как домены. Если мы хотим блокировать социалочки, то имеет смысл блокировать не только основной домен, но и, к примеру, сервера отдающие статику, картинки, скрипты, и находящиеся на под-доменах данного сайта. Так же это позволит избежать перечисления отдельно доменов с «www» и без. То что, эти домены не попали в кэш при резолве — не страшно, т.к. они могут попасть туда при резолве браузером пользователя (правда для этого нужно, чтобы DNS-запросы пользователя обрабатывались в RouterOS).



Если содержится, установим значение флага match в true.

:if ( $match ) do={
:local tmpAddress [/ip dns cache get $i address]
:if ( [/ip firewall address-list find ] = "") do={
:log debug ("added entry: $[/ip dns cache get $i name] IP $tmpAddress")
/ip firewall address-list add address=$tmpAddress list=$ListName comment=$cacheName
} else={
:foreach j in=[/ip firewall address-list find ] do={
:if ( [/ip firewall address-list get $j address] = $tmpAddress ) do={
:set bNew false
}
}
:if ( $bNew ) do={
:log debug ("added entry: $[/ip dns cache get $i name] IP $tmpAddress")
/ip firewall address-list add address=$tmpAddress list=$ListName comment=$cacheName
}
}
}




В заключающем этапе если текущий адрес требует добавления (match установлен в true), то мы его добавляем в список адресов. Коментарий к добавляемой записи будет содержать домен, к которому она относится. При этом выполняем несколько проверок. Если address-list пустой, то добавляем сразу, если что-то там есть, проверяем, нет ли там уже записи с таким IP-адресом и если нет — добавляем.

Список адресов нужно периодически обновлять. Для этого в RouterOS есть диспетчер заданий. Задание можно добавить из консоли или из графического интерфейса winbox



/system scheduler
add interval=5m name=MyScript on-event="/system script run MyScript" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=may/08/2014 \
start-time=10:10:00


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

Чёрный список:



/ip firewall filter
add chain=forward protocol=tcp dst-port=80 address-list=DenyThis \
action=drop




Статический маршрут до данных узлов

/ip firewall mangle
add action=mark-routing chain=prerouting dst-address-list=AntiZapret \
in-interface=bridge_lan new-routing-mark=RouteMe

/ip route
add distance=1 gateway=172.16.10.2 routing-mark=RouteMe




Сбор информации о клиентах

/ip firewall mangle
add action=add-src-to-address-list address-list=FUPer chain=prerouting \
dst-address-list=Pron log=yes log-prefix=critical


Список источников:

Документация по написанию скриптов

Простые примеры от разработчиков RouterOS

Скрипты, добавленные пользователями


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Хакспейс в столице Китая, что там?


Начинаются выходные — время отдохнуть от работы и поработать в свое удовольствие — то есть заняться любимым делом. Для кого-то это создавать роботов, прошивать микроконтроллеры, кодировать коптеры, и многое другое — это всё можно осуществить в хакспейсах — открытых клубах технического и IT творчества, которые созданы энтузиастами, в сотнях городах по всему миру.


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


А в конце поста озвучим победителей конкурса по проектам по VoCore.



Хакспейс в Пекине (сайт) основан 3 года назад. На второй год существования подключилось государство.


В хакспейсе сейчас порядка 300 участников, минимальная стоимость членства 100 юаней.


Тип членства зависит от времени в которое вы собираетесь посещать хакспейс. Подробно написано в буклете. Но никто этого не проверяет — всё остаётся на совести участников, обстановка вполне неформальная.


Типы членства в хакспейсе:



  • 100 юаней

  • 300 юаней

  • 1000 юаней


1 юань ≈ 6,7 руб.


Поступления от участников не покрывают расходы на содержание хакспейса, дополнительные поступления идут от мероприятий. Такие компании, как Lenovo проводят свои мероприятия и платят за это деньги хакспейсу.


Два воркшопа в неделю, как правило посвящены тому как что-то сделать своими руками. Скидки 70% для мемберов. Плюс к этому проводится обучение по работе с оборудованием.


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


Начинаем



Вот вход в хакспейс:


вдалеке — конференц зал, где что-то проходит.


Взгляд из конференц зала (коридор):


Присматриваемся слева внизу — видим 3д-принтер в кустах :)


И кстати, сбоку находится комнатка с 3д принтером:


Вот мы и в конференц зале:



сейчас здесь проходит встреча волонтёров по проведению MakerFaire (в октябре в Пекине)


Кстати, если приглядеться, то можно увидеть информацию о бесплатном wi-fi :)


Вот слушатели докладчика (с левой стороны):



за их спиной находится система для хранения


Вот как она выглядит:



Здесь участники хакспейса могут хранить свои проекты/работы.


А вот что находится справа от конференц зала — удобные комнаты для работы:


Рядом с конференц залом, есть ещё одна просторная комната для работы и обсуждения:


Теперь из конференц зала перейдём в зону где можно не только поговорить, но и поработать руками:


Видим творческий беспорядок — но это значит что здесь происходит зарождение чьей то идеи.


На столе 3д принтер, и рядом с ним собирается ещё один принтер.


Так же вдоль стен — удобные и просторные зоны для хранения комплектующих и проектов.


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


Вот какие-то микроконтроллеры:


ардуинка и макетка (и так же дефицитный у нас USB-TTL переходник):


Целая россыпь микроконтроллеров:


Вот маленький 3д принтер, и результаты его работы:


У кого-то Стив Джобс лазерной гравировкой


Вот поближе стойка:



видим что на столе собирается дельта-принтер!


Вот дельта 3д принтер крупным планом:



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


Вот противоположный стол поближе:


Осциллограф — без которого невозможно настроить сложную электронику.


Рядом находятся ещё зоны, для работы:


А вы думали, что на вашем столе беспорядок? %)


Ещё одно рабочее место:


Мастерская



Здесь есть все возможные инструменты для столярных работ.


Сверлильный станок:


Работа с деревом


Токарник!


Фрезерно-сверлильный станок:


ЧПУ фрезерные и лазерные станки




Два лазерных станка (лазерная резка/гравировка):


ЧПУ станки с гигантским полотном:


Рабочие места

Вот такого плана стол предоставляется участникам хакспейса для работы:


Достаточно много света:


Вот и ретро телевизор с антенной:


Зона хранения и питания



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


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


В качестве резюме



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

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


Спасибо targence за предоставленные фотографии.


Победители голосования по VoCore



Скрытый текст
Напомним, мы проводили голосование среди 15 проектов, и голосовали читатели хабра. Авторам проектов набравших большинство голосов — мы высылаем микрокомпьютер VoCore.

Кстати, мы решили раздать все 4 шт. VoCore которые у нас есть, поэтому публикуем первых 4-х участников, набравших большинство голосов (первая цифра):























29211. ОБЧР в миниатюреДмитрий
28912. MeshVoCoreИван
28613. Платформа умного домаЯрослав
2631. Прошивка для CyberWrtАлекс

Ещё раз спасибо всем, кто принимал участие — авторам проектов, и кто отдал свой голос за один из проектов.




This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Facebook официально доступен в Tor

Произошло то, что как бы совсем не ждали, совершенно. У Facebook появилось официальное зеркало в Tor.

facebookcorewwwi.onion/

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


Зеркало доступно только по HTTPS. Как сообщается в анонсе, это сделано из-за архитектурных особенностей: Tor-демон работает как реверс-прокси в основную инфраструктуру через интернет, и HTTPS применяется для шифрования и аутентификации на транспортном уровне от Tor до серверов Facebook.


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Перевод - recovery mode ] 5 убийц унылых лэндингов

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

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


Мы вступили в новую эру оптимизации посадочных страниц. Дизайнеры, профессиональные маркетологи, SЕО-оптимизаторы, CRO, UX-эксперты и другие специалисты объединили свою коллективную мудрость для разработки нового типа посадочных страниц, которые выходят за стандартные рамки и не поддаются традиционной логике. Это будут посадочные страницы будущего.


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


image



1. Множественные призывы к действию




Здравый смысл: используйте один качественный призыв к действию;

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

Может показаться, что использование нескольких призывов к действию должно запутать пользователя. Но этого не произойдет если все сделать правильно.


Прежде всего, позвольте мне рассказать вам о неправильном пути:

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

Не стоит просить пользователя одновременно подписаться на рассылку, поставить лайк на Facebook, получить бесплатную триальную версию и купить ваш продукт;

Ни в коем случае не делайте этого. Одно действие! Только одно действие!

Даже если у вас есть несколько различных призывов к действию, все они должны выполнять одну и ту же функцию.


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

Длинные посадочные страницы

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

Эффект параллакса

Страницы с эффектом параллакса или динамическими элементами могут повысить эффективность посадочной страницы, так как каждый раздел страницы может включать собственную целевую страницу внутри основного сайта. Раздел, который пользователь видит в данный момент времени, может иметь свой собственный заголовок, изображение, преимущество и отдельный призыв к действию.

Плавность повествования

Наиболее разумный способ использования нескольких призывов к действию — размещение их в соответствии с ходом мысли вашего пользователя. Например всё, что пользователь видит в первом блоке посадочной страницы, а именно изображения, заголовок и текст, как правило отвечают на вопрос «О чем этот сервис или продукт?». Некоторым импульсивным пользователям бывает достаточно этой информации для совершения целевого действия, и обычно такие ребята не любят читать. Вы же не хотите заставлять их это делать? Поэтому правильной стратегией было бы размещение на этой части страницы призыва к действию.


Если пользователь ещё не готов к совершению действия, он прокручивает страницу вниз, к следующему разделу. Этот раздел отвечает на вопрос: «Как это может решить мою проблему?» Опять же, после убеждительного контента должен быть призыв к действию. Есть вероятность, что пользователь закажет в этот момент. Если же нет, то ниже есть дополнительный раздел, который обращает внимание на дополнительные преимущества — стоимость, гарантию, сравнение и т.д. Каждый раздел имеет свой ​​собственный отдельный призыв к действию.


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


Посадочная страница Basecamp выглядит, как страница без прокрутки с полужирным заголовком и БОЛЬШОЙ кнопкой-призывом заказа:


image


Но на самом деле их посадочная страница намного длиннее.


image


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


Внешний вид целевой страницы компании Dell для накопителей информации демонстрирует аналогичный подход. Безобидный текст «Узнать больше» — не самый сильный призыв к действию из тех, что я видел, но вы можете найти его более 15 раз на одной странице.


image


Посадочные страницы с большим количеством призывов к действию повышают шанс заказа. Чем более интуитивно и разумно размещены эти призывы, тем лучше.


2. Полноформатное содержание




Здравый смысл: сделайте вашу целевую страницу короткой;

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

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


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


В ходе A/B тестирования мы обнаружили, что производительность полноформатной целевой страницы на 220% выше, чем у короткой страницы с тем же призывом:


image


Длинные посадочные страницы имеют неотъемлемое SEO преимущество из-за их обширного контента. К тому же, они предоставляют вам возможность для использования широкого спектра инструментов для убеждения пользователя, что в итоге увеличивает шанс конверсии посетителя в клиента.


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


image

Картинка с сайта http://ift.tt/1wOctWd


Эксперты из компании Conversion Rate Experts создали целевую страницу для Moz, которая была эффективно использована для продаж на миллионы долларов. И вот что они рассказали:


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


Когда Conversion Rate Experts закончили редизайн целевой страницы Moz, она стала в 6 раз длиннее оригинала.


image


И она стала в десяток раз эффективнее.


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


image


3. Сильные визуальные преимущества




Здравый смысл: посадочные страницы должны быть максимально просты для понимания.

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

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


VW.com использует посадочные страницы со множеством визуальных элементов. Эта компания продаёт автомобили, и для их клиентов важно знать как они выглядят. Обратите внимание на представленные фотографий на этой посадочной странице.


image


Посадочная страница “Scripted” больше напоминает инфографику, чем целевую страницу:


image


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


image


Я также обнаружил, что видео является частью привлекающей силы страницы. Vidyard недавно вставил тестовое видео на свою страницу, что в итоге привело к увеличению конверсии на 100%.


image


Претендент “D” – видео в лайтбоксе.

Претендент “H” – видео во встроенном фрейме.

Претендент “J” – версия страницы без видео.


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


4. Интерактивные элементы




Здравый смысл: единственная задача посадочной страницы это мотивация для заполнения формы или для отправки e-mail.

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

Когда я думаю об оптимизации посадочной страницы, первое что мне приходит на ум – это интерактивные элементы. Под интерактивными элементами я подразумеваю элементы, с которыми должен взаимодействовать пользователь, и это не только слайдеры и скроллинг эффекты. Я бы добавил к этому списку видеоролики, особенно те, которые запускаются с помощью клика мышки.


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


CommVault использует интерактивный калькулятор на своей посадочной странице:


image


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


5. Как можно короче




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

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

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


Мой персональный сайт, Neilpatel.com, краток, но очень эффективен. Используя менее пятидесяти слов, одно изображение и однин цвет заливки, я многократно увеличил конверсию.


image


Простота это главное.


Я поддерживаю идею длинных посадочных страниц, но лишь для некоторых типов конверсионных действий.


“CrazyEgg” испытал такую же модель — максимально короткую посадочную страницу.


image


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


Например Optimizely используют аналогичную технику. Коротко и просто.


image


Заключение




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

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


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


Мой совет — выходите за рамки шаблонного мышления, экспериментируйте, открывайте для себя неизведанную силу инновационных инструментов (и не забывайте про А/B тестирование).


С наилучшими пожеланиям, команда проектов Generate.club и Multi-landing


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.