170618_100

Банановые панкейки.


Всем доброго воскресного утра! Любви и тепла!
Решила сегодня на завтрак порадовать своих мальчиков вот такими вкуснейшими банановыми панкейками. Без сахара и муки!
Делюсь с вами рецептом:
— 2 банана;
— 300 мл молока;
— 2 яйца;
— 160 гр овсянки, перемолотой в муку;
— треть чайной ложки соды;
— ванилин по вкусу 🙂
— йогурт и фрукты.
Read more

DSC_10441

Спагетти по-итальянски


Состав:

— 1 сладкий перец;

— 4-5 средних помидор;

— 100-150 гр. бекона;

— 50 гр твердого сыра (пармезан);

— 400 гр. итальянских спагетти Barilla (или каких то других из твердых сортов пшеницы);

— соль, зелень по вкусу (предпочтительней базилик).

Read more

munin

Установка Munin в Debian для мониторинга сервера.


Заметка для тех кто в танке и не знает как установить и сконфигурировать бесплатное средство для мониторинга серверов — munin. Хотите красивые графики? — вы на верном пути.

Munin — это простейшее удобное средство мониторинга серверов. Простота в использовании/установке и последующей настройки делают munin очень привлекательным продуктом, он уже занял свое место в этой нише, я же в свою очередь давно использую этот софт из за того что достаточно просто можно писать свои плагины. Мунин прекрасное универсальное решение для мониторинга серверов!!!

Сразу после установки мунина доступно несколько базовых плагинов которые позволяют следить за основными параметрами сервера, например la, network, cpu, hdd, smta, mysql и все в том духе, так же можно скачать и подключить сторонние плагины с официального сайта (их там очень много, можно подобрать на все случаи жизни). Всю собранную информацию Munin представляет в виде красивых графиков которые доступны через web интерфейс. Сам мунин написан на языке Perl и использует для хранения и обработки данных RRDTool что вполне разумно.

Munin состоит из двух частей/приложений, master и node. Уже из названия можно понять какую роль выполняет master и node, мастер это сердце мониторинга он опрашивает свои node и рисует красивые графики, node может быть несколько (из 1 веб морды можно мониторить множество серверов).

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

Установка Munin в Debian

Смотрим какие пакеты есть с упоминанием слова munin:

root@Debian ~ # aptitude search munin
p   munin                                                                  - network-wide graphing framework (grapher/gatherer)
p   munin-common                                                           - network-wide graphing framework (common)
p   munin-java-plugins                                                     - network-wide graphing framework (java plugins for node)
p   munin-libvirt-plugins                                                  - Munin plugins using libvirt
p   munin-node                                                             - network-wide graphing framework (node)
p   munin-plugins-extra                                                    - network-wide graphing framework (user contributed plugins for node)
root@Debian ~ #

Ставим сам munin и munin-node (в моем случае для теста все будет на 1 сервере)

aptitude install munin munin-node

Все конфиги располагаются в директории /etc/munin, после успешной установки можно приступать к настройке мастера. На все про все уйдет не более 5 минут =)

root@Debian ~ # aptitude search munin
i   munin                                                                  - network-wide graphing framework (grapher/gatherer)
i A munin-common                                                           - network-wide graphing framework (common)
p   munin-java-plugins                                                     - network-wide graphing framework (java plugins for node)
p   munin-libvirt-plugins                                                  - Munin plugins using libvirt
i   munin-node                                                             - network-wide graphing framework (node)
p   munin-plugins-extra                                                    - network-wide graphing framework (user contributed plugins for node)
root@Debian ~ # ls /etc/munin/
apache.conf  munin.conf  munin-conf.d  munin-node.conf  plugin-conf.d  plugins  templates
Настройка Munin сервера

Открываем в редакторе munin.conf

nano /etc/munin/munin.conf

ищем строки

[localhost.localdomain]

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

[localhost]

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

У меня нету apache поэтому я его доставлю

aptitude install apache2-mpm-prefork

Проверим вирт хост для веб морды minin

root@Debian ~ # ls /etc/apache2/conf.d/
charset  localized-error-pages  other-vhosts-access-log  security
root@Debian ~ # ls /etc/munin/
apache.conf  munin.conf  munin-conf.d  munin-node.conf  plugin-conf.d  plugins  templates

у меня вирт хост мунина не лежит в /etc/apache2/conf.d/ добавим

root@Debian ~ # ls /etc/apache2/conf.d/
charset  localized-error-pages  munin  other-vhosts-access-log  security
root@Debian ~ # cp /etc/munin/apache.conf /etc/apache2/conf.d/munin
root@Debian ~ # service apache2 reload

закомментируйте в /etc/apache2/conf.d/munin

# Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1

или укажите свой ip в Allow from

иначе доступа не будет — You don’t have permission to access

Настройка Munin ноды
nano /etc/munin/munin-node.conf

для локал хоста все уже настроено, я раскомментировал только

host_name localhost

если вы используете внешнее подключение то нужно прописать ip адрес мастер сервера (дать доступ мастеру что бы он мог забирать инфу с ноды) в таком виде дописывайте ip адрес мастера

allow ^127.0.0.1

root@Debian ~ # service munin-node restart

идем в браузер http://ip/munin и ждем.

Можно принудительно запустить опрос нод, так же поможет для отладки

root@Debian ~ # su - munin --shell=/bin/bash
munin@Debian:~$  /usr/share/munin/munin-update --nofork --debug
exit

Если все ок то вскоре появятся файлики с графиками в /var/cache/munin/www а тем временем в браузере

25-05-2012-7-35-37-300x206
Ну и напоследок приведу несколько графиков уже с боевого сервера

tr_munin ng-munin mem_munin cpu_munin

wp-url

Настройка ЧПУ и автоматическая транслитерация url в WordPress


ЧПУ — один из критериев ранжирования сайта в поисковых системах, поэтому вопрос настройки ЧПУ в WordPress актуален.

wp-url

WP позволяет выбрать несколько вариантов формирования URl:

  • /?p=123
  • /2014/06/25/sample-post/
  • /2014/06/sample-post/
  • /archives/123
  • /sample-post/
  • Произвольно

Можно выбрать префикс для

  • Префикс для рубрик
  • Префикс для меток

wp-set-url

Какие настройки лучше выбрать?

На мой взгляд, лучше выбрать вариант с названием постов сразу от корня сайта (т.е. пятый вариант: /sample-post/). Из плюсов: посты будут с ЧПУ, позволит безболезненно менять рубрики и структуру блога. Из минусов: длинный url, возможно появление кириллических символов в URL.

Для рубрик и меток можно выбрать префиксы на свой вкус, я использую: cat и tags соответственно.

Как исправить этот недостаток у выбранного варианта?

URL с названиями разделов и страниц автоматически подставляется на русском языке (если Вы ведёте блог на русском языке). Это не очень хорошо по многим причинам, например:

  • русские буквы кодируются — из-за это урлы становятся очень длинными, непонятными, нечитабельными
  • неудобно анализировать ссылочную массу: как внутреннюю, так и внешнюю, потому что ссылки имеют не читабельный вид
  • такими ссылками не удобно делиться пользователям

Как решить?

Конечно, можно переделывать url каждой страницы делать транслитерацию вручную, но можно установить плагин — Cyr to Lat enhanced. Для этого необходимо зайти в раздел «Плагины» -> «Добавить новый» -> найти через поиск по названию и установить.

cyr-to-lat-enhanced-in-wp

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

Какие опасности подстерегают?

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

2. Транслитерация урлов произойдёт не только на страницах и постах, но и в рубриках, метках, т.е. на всём сайте целиком.

Источник: http://web-optimizator.com/nastrojka-chpu-avtomaticheskaya-transliteratsiya-url-v-wp/

css

Скрытое меню на чистом CSS


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

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

Начнем с HTML

Разметка для скрытого меню будет немного отличаться от варианта для стандартного меню навигации. Вместо того чтобы поместить меню внутри шапки сайта (header), мы поместим его сразу после открывающего тега body. Базовая структура выглядит так:


<ul class="navigation">

<li class="nav-item"><a href="#">Главная</a></li>


<li class="nav-item"><a href="#">Портфолио</a></li>


<li class="nav-item"><a href="#">О нас</a></li>


<li class="nav-item"><a href="#">Блог</a></li>


<li class="nav-item"><a href="#">Контакты</a></li>

</ul>

 
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger"></label>
 

<div class="site-wrap">
    <!-- здесь идет вся остальная разметка страницы -->
</div>

Как видите, разметка нашего сайта состоит из трех основных элементов: навигация, чекбокс (checkbox) и парный тег label, а также непосредственно контент сайта. Здесь следует отметить несколько моментов:

  • Разметка навигации размещается в коде в первую очередь, т.к. навигации находится «позади» всех остальных элементов сайта. Для создания навигации вы можете использовать любые HTML-теги. В данном случае я использую привычный ненумерованный список.
  • Триггером для выдвижения нашего меню послужит тег input с типом checkbox и тег label. Обычно тег label располагается перед тегом input или тег input оборачивается тегом label. Но в данном случае тег input должен идти непосредственно перед тегом label. И далее, при добавлении CSS-стилей, мы увидим почему.
  • Все остальные элементы сайта должны быть обернуты в отдельный тег div. Это необходимо сделать для того, чтобы при открытии меню все остальное содержимое съезжало немного за границы экрана, чтобы показать скрытые элементы навигации.

Теперь, когда у нас есть базовая HTML структура, мы можем заняться внешним видом нашего меню!

CSS-стили для пунктов меню

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

.navigation {
    list-style: none;
    background: #111;
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 0;
}

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

CSS-стили для «обертки» сайта

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

.site-wrap {
    min-width: 100%;
    min-height: 100%;
    background-color: #fff;
    position: relative;
    top: 0;
    bottom: 100%;
    left: 0;
    z-index: 1;
}

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

.site-wrap {
    /* ... предыдущие стили находятся здесь ... */
    padding: 4em;
    background-image: linear-gradient(135deg, 
                      rgb(254,255,255) 0%,
                      rgb(221,241,249) 35%,
                      rgb(160,216,239) 100%);
    background-size: 200%;
}

CSS-стили для триггера меню

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

.nav-trigger {
    position: absolute;
    clip: rect(0, 0, 0, 0);
}

Примечание редактора: изначально, в данном коде использовалось свойство display: block вместе с указанием нулевого значения для ширины и высоты самого чекбокса, чтобы сделать его невидимым, но доступным (активным). Но оказалось, что такое сочетание стилей в операционной системе iOS приводило к сбою в работе браузера и его закрытию, каждый раз, когда меню открывалось. Я изменил эту технику и стал использовать вместо этого свойство clip, которое, похоже, имеет такой же уровень доступности.

Итак, мы прячем чекбокс, используя свойство clip, которое требует применения свойства position: absolute для заданного элемента. Теперь мы задаем стили для элемента label:

label[for="nav-trigger"] {
    position: fixed;
    top: 15px;
    left: 15px;
    z-index: 2;
}

Прежде всего, мы задаем свойство position: fixed, чтобы элемент оставался на прежнем месте при прокрутке страницы пользователем. Свойства top и left определяют, как далеко от края окна просмотра будет находиться иконка. Мы также должны убедиться в том, что значение для свойства z-index у триггера выше хотя бы на единицу, чем значение этого свойства для элемента с классом .site-wrap. Затем, мы добавляем еще стилей для того, чтобы сделать из элемента label иконку «гамбургер».

label[for="nav-trigger"] {
    /* ... предыдущие стили находятся здесь ... */
    width: 30px;
    height: 30px;
    cursor: pointer;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='30px' height='30px' viewBox='0 0 30 30' enable-background='new 0 0 30 30' xml:space='preserve'><rect width='30' height='6'/><rect y='24' width='30' height='6'/><rect y='12' width='30' height='6'/></svg>");
    background-size: contain;
}

Я использовал в качестве фонового изображения встроенный элемент SVG, но вы можете использовать любую другую иконку, включая использование псевдо-элементов :before и :after, чтобы переделать иконку «гамбургер» на чистом CSS. Обратите внимание, что я также добавил свойство cursor: pointer;, чтобы визуально выделить иконку при наведении.

CSS-стили, чтобы триггер стал активным

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

.nav-trigger:checked + label {
    left: 215px;
}
 
.nav-trigger:checked ~ .site-wrap {
    left: 200px;
    box-shadow: 0 0 5px 5px rgba(0,0,0,0.5);
}

Вторая часть из вышеприведенного блока со стилями гарантирует нам то, что «обертка» сайта вместе с содержимым будет отодвинута на 200 пикселей. Я также добавил тень (свойство box-shadow) для «обертки» сайта, что придаст дополнительное ощущение того, что она находится сверху меню.

Первый селектор (.nav-trigger:checked + label) контролирует расположение триггера при открытии меню. Вам нужно будет прибавить число, которое мы использовали ранее для label[for=»nav-trigger»], к тому значению, которое отвечает за то, на какое расстояние «обертка» сайта будет отодвигаться. В данном случае это: 15px + 200px = 215px.

Вот когда становится важным порядок следования элементов триггера в коде. Второй селектор использует символ ~ для управления родственными элементами, чтобы указать на элемент с классом .site-wrap, когда элемент с классом .nav-trigger будет активным. Порядок следования в коде тега input с типом checkbox здесь не так важен.

Однако, мы должны указать и на элемент с классом .site-wrap и на наш тег label, основываясь на том, будет наш чекбокс активным или нет. Для этого, мы используем + (селектор соседних элементов), чтобы указать на элемент label, который следует за активным чекбоксом. Если бы мы сначала указали тег label, тогда у нас бы не было никакой возможности передвигать его вместе с «оберткой» сайта при активации триггера.

В качестве завершающего штриха мы можем добавить CSS-переход (transition) и для триггера и для «обертки» сайта, чтобы открытие нашего меню сопровождалось плавной анимацией. Только убедитесь в том, что вы указали в свой варианте необходимые вендорные префиксы или использовали что-то наподобие плагина Autoprefixer.

.nav-trigger + label, .site-wrap {
    transition: left 0.2s;
}

Один последний момент: используйте свойство overflow, чтобы избежать выхода контента у элемента body за границы окна просмотра по оси x. Если вы этого не сделаете, тогда у пользователей появится горизонтальная полоса прокрутки при открытии меню.

body {
    overflow-x: hidden;
}

Конечный результат

Вот и все! Мы успешно создали скользящее скрытое меню без использования JavaScript.

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

Источник: https://webformyself.com/skrytoe-menyu-na-chistom-css/