Рубрики
Разное (Без рубрики)

Как ускорить загрузку сайта на WordPress?


Установили на сайт метрику и чат jivosite и скорость загрузки увеличилась с 3 сек до 8 (*в мобильной версии ).
К сожалению чаты и метрика нам жизненно необходимы, но и загрузка долгая мешает жить.
Как можно решить проблему скорости загрузки?

https://toster.ru/q/669745#answer_1460876

Я делаю по-другому — оборачиваю код в скролл-ивент + задержка в 1 секунду. То есть, сайт загрузился быстро, и как только пользователь начал скроллить хоть чуть-чуть — секундный таймаут и загрузка дополнительных ресурсов. Гугл доволен, пользователи вообще не замечают задержки:

var fired = false;

window.addEventListener('scroll', () => {
    if (fired === false) {
        fired = true;
        
        setTimeout(() => {
            // Здесь все эти тормознутые трекеры, чаты и прочая ересь,
            // без которой жить не может отдел маркетинга, и которые
            // дико бесят разработчиков, когда тот же маркетинг приходит
            // с вопросом "почему сайт медленно грузится, нам гугл сказал"
        }, 1000)
    }
});
Рубрики
Разное (Без рубрики)

Что нового в WordPress 5.1?


Состояние здоровья сайта

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

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

Производительность редактора

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

Радость разработчикам

Метаданные для сайтов сети

В выпуске 5.1 была добавлена новая таблица базы данных для хранения метаданных о сайтах сети, она хранит данные относящиеся к сайтам в контексте мультисайтовой/сетевой установки WordPress.

Cron API

Cron API был обновлен новыми функциями возвращающими данные на выходе, а также включает новые фильтры для изменения хранилища cron. Другие изменения меняют поведение запуска cron на серверах с FastCGI и PHP-FPM версии 7.0.16 и выше.

Новые процессы сборки JS

WordPress 5.1 предоставляет новую возможность сборки JavaScript, продолжая реорганизацию кода, начатую в выпуске 5.0.

Другие улучшения для разработчиков

Разные улучшения включают обновления значений для константы WP_DEBUG_LOG, новой константы файла конфигурации для набора тестов, новые хуки для действий плагинов, фильтры короткого замыкания для wp_unique_post_slug(), WP_User_Query и count_users(), новую функцию human_readable_duration, улучшенную санитизацию метабокса таксономий, ограниченную поддержку LIKE для мета ключей при использовании WP_Meta_Query, новое уведомление «делается не так» при регистрации конечных точек вхождения REST API, и многое ещё!

Оставить классику

Предпочитаете остаться со старым, добрым классическим редактором? Без проблем! Поддержка плагина Classic Editor останется в WordPress до 2021 года включительно.

Плагин Classic Editor оставляет старый вариант редактора WordPress и экрана редактирования записи. Он позволяет использовать расширяющие его плагины, добавлять поля метаданных в старом стиле или иные вещи, зависимые от старого редактора. Для его установки зайдите на страницу плагинов и нажмите на кнопку “Установить” рядом с “Classic Editor”. После установки нажмите “Активировать”. Всё!

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

Рубрики
Разное (Без рубрики)

Что такое домен .tech?


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

  • специалистов в области ИТ;
  • веб-разработчиков;
  • разработчиков программного обеспечения;
  • менеджеров по управлению проектами;
  • дизайнеров пользовательского интерфейса.

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

Займите свое место на передовом рубеже.

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

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

Давайте поговорим о технологии.

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

Позвольте людям ознакомиться с .tech

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

Не отставайте от технологий.

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

Рубрики
Разное (Без рубрики)

Как сделать preloader для карусели (слайдера) Slick?


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

Но на долю секунды посетитель сайта видит не приятную картину — изображения слайдера отображаются друг под другом. Данную проблему описывал один из пользователей на форуме вопросов и ответов «Тостер»:

Для показа слайдов/банеров использую slick slider. Проблема в том, что при загрузке страницы возникает секундное появление всех картинок слайдер в столбик, и только после их полной загрузке формируется слайдер. Выглядит очень неопрятно. Как вы обычно делаете preloader для слайдера, который сначала формируется, а только потом отображает картинки?

Есть много вариантов решения данной задачи:

  • грузить в верхней части скрипты и стараться инициализировать плагин после разметки HTML слайдера,
  • воспользоваться сторонним плагином, например, imagesLoaded и до полной загрузки страницы и инициализации всех плагинов отображать тот самый preloader (прелоадер), как правило в виде анимации.

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

На примере CMS WordPress это будет выглядеть следующим образом:


wp_add_inline_script( 'slick', "jQuery(document).ready(function(){
  $('#front-slider').slick({
    dots: true,
    infinite: true,
    arrows: true,
    slidesToShow: 1,
    slidesToScroll: 1,
    focusOnSelect: true,
    lazyLoad: 'ondemand',
  });

  $('#front-slider .slide').removeClass( 'd-none' );
});" );

Давайте немного разберем этот снипет. Первая строчка — это функция «WordPress», которая добавляет наш скрипт после зависимого скрипта, который мы указали первым аргументом, далее, вторым аргументом, идет JS-функция инициализации нашего слайдера в определенном селекторе «#front-slider». А вот предпоследняя строчка эта и есть наш трюк! С помощью метода библиотеки jQuery — «removeClass()» мы удаляем CSS-класс из нашего слайдера, который , как можно догадаться, скрывал его, то есть имел свойство и значение display: none;.

Этот способ гарантирует что слайдер не отобразится до тех пор, пока не проинициализируется.
Любителям чистого JavaScript посвящается этот снипет:

<script>
function myFunction() {
   var element = document.getElementById("myDIV");
   element.classList.remove("mystyle");
}
</script>

JS-функция достаточно проста. Мы «кладем» в переменную element нужный селектор, а затем следующим действием, обратившись к свойству classList, методом remove удаляем класс, у которого было значение свойства display: none;. Вот и вся магия 🙂

Рубрики
Разное (Без рубрики)

Как зарабатывать на партнерских программах? Модель с компанией «Timeweb»


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

В компании Timeweb действует две партнерские программы – «Вебмастер» и «Интегратор».

Вебмастер

В программе «Вебмастер» могут участвовать граждане РФ, иностранные граждане (проживающие и работающие за пределами РФ) и российские юридические лица. За каждого привлеченного клиента, который оплачивает услуги Timeweb, вебмастер получает вознаграждение – процент от суммы платежа клиента. Он варьируется в зависимости от вида услуги, которой пользуется клиент:

Исключением является оплата регистрации и продления доменных имен, покупка CMS, оплата SeoPult, SSL-сертификатов и других услуг, которые не относятся к услугам хостинга.

Пример. У вас есть 7 клиентов, которые пользуются тарифом Optimo+ (149 рублей в месяц), 4 клиента используют тариф мощного хостинга 1Сайт (99 рублей в месяц) и 11 клиентов заказали тариф VDS Master (390 рублей в месяц). Значит, за клиентов виртуального хостинга вы получите 417 рублей, за клиентов мощного хостинга – 40 рублей, а за клиентов VDS – 858 рублей. Итого: 1315 рублей в месяц.

Также можно привлекать в партнерскую программу Timeweb и других вебмастеров – вы получите 10% от суммы первого платежа каждого привлеченного ими клиента. Это распространяется на все тарифы виртуального хостинга.

Как стать вебмастером?

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

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

Более подробно о работе в панели управления вебмастера читайте в нашем Справочном центре.

Выплаты

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

Вы можете вывести вознаграждение на:

  • аккаунт хостинга;
  • банковский счет (только для граждан РФ и юридический лиц, зарегистрированных на территории РФ);
  • рублевый кошелек в Яндекс.Деньгах.

Интегратор

Интегратор – это вторая разновидность партнерской программы Timeweb для вебмастеров и IT-компаний, которая позволяет продавать услуги Timeweb под брендом своей компании.

При таком виде сотрудничества вы, во-первых, сможете получать прибыль за счет привлечения клиентов (как и в программе «Вебмастер»); во-вторых, будете централизованно следить за аккаунтами привлеченных клиентов и управлять ими. А за организацию работы сервисов и техническую поддержку будем отвечать мы.

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

Вознаграждение также зависит от количества активных в данных момент клиентов интегратора и может достигать 50%:

программа интегратор

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

Пример. У вас есть 40 клиентов, половина из которых использует тариф виртуального хостинга Year+, а другая половина – Century+. То есть в месяц за хостинг находящихся под вашим управлением клиентов вам нужно заплатить 7160 рублей (у двадцати клиентов хостинг стоит 99 рублей в месяц, у других двадцати – 259 рублей в месяц при годичной оплате). Вы можете положить на свой счет 8000 рублей и получить 40% вознаграждения (серебряный уровень интегратора) – 3200 рублей; итого 11 200 рублей на вашем счету. Эти деньги вы распределяете между аккаунтами клиентов для оплаты услуг хостинга.

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

В рядах интеграторов Timeweb мы будем рады видеть не только опытных вебмастеров и развивающиеся вебстудии, но и тех, кто только собирается открыть свой бизнес в IT-сфере. Партнерская программа «Интегратор» позволит вам легко и быстро начать свой собственный бизнес в сфере хостинга.

Как стать интегратором ?

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

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

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

интеграторам

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

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

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

5 преимуществ партнерских программ Timeweb

  1. Мы – крупная компания, входящая в тройку крупнейших хостеров России.
  2. Сотрудничать с нами могут любые физические и юридические лица, вне зависимости от места их регистрации и проживания.
  3. Сотрудничество с нами происходит строго в соответствии с законодательством РФ.
  4. Мы предоставляем вашим клиентам все технические возможности нашей компании, помогаем рекламными и обучающими материалами. При возникновении вопросов или проблем ваши клиенты всегда могут обратиться в нашу службу поддержки.
  5. Мы предлагаем высокие проценты и возможность быстро начать зарабатывать.

Регистрируйтесь сейчас!

Зарегистрироваться

Рубрики
Разное (Без рубрики)

Какой домен лучше выбрать для сайта или интернет-магазина?


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

Например, давайте вспомним советскую юмористическую повесть Андрея Некрасова «Приключения капитана Врунгеля», где яхта с названием «Победа», потеряв пару первых букв, уже носит новое название – «Беда». Скажите, если бы Вы решили сделать вклад в сберегательный банк и Вам встретились бы два банка с одинаковыми условиями, которые Вы и искали, но с разными названиями: первый – «Победа», второй — «Беда» , то какому бы из них Вы доверили Ваши средства при этой дилемме? Полагаю, ответ очевиден – первому. И если это так, то значит, название какую-никакую, а играет роль.

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

Что такое доменное имя?

По сути, доменное имя — это просто символы, которые внедрены для удобства. Ну согласитесь, что намного проще и быстрее набрать в строке протокола HTTP адрес:  ya.ru, нежели «ай пи» адрес этого ресурса, который звучит следующим образом:  87.250.250.242

Пинг Яндекса

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

Друзья, это работающие ресурсы!

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

В 2017 году было зарегистрировано 330,6 млн. доменных имен, как Вы понимаете это безумно прибыльный бизнес, так как деньги просто рождаются из воздуха, мы платим за аренду виртуальных букв – не более того. Если Вы думаете, что покупаете домен, то очень сильно ошибаетесь J  Попробуйте-ка вовремя его не продлить и Вы тут же рискуете потерять его, а его обладателем может стать абсолютно любой человек, и если Ваша компания не такая, как «Google», то вернуть его может быть совсем не просто.

Давайте вспомним подобную щепетильную ситуацию, главными героями которой стали:  Sanmay Ved  и компания «Google». В своем сообщении от 29 сентября 2015г (https://www.linkedin.com/pulse/i-purchased-domain-googlecom-via-google-domains-sanmay-ved/). Сэнмей Вед рассказал нам, как он смог стать обладателем самого посещаемого домена в мире –google.com

 Sanmay Ved
Sanmay Ved

Если вкратце об этой истории, то Сэнмей по всем правилам произвел регистрацию и стал новым владельцем домена google.com, а затем его покупку просто аннулировали, что в принципе и следовало ожидать. В последствии компания «Гугль» связалась с Сэнмей и предложила ему денежное вознаграждение, которое он направил в благотворительный фонд Индии. Достойный поступок, не правда ли? Вы поступили бы так же? 🙂

Именно поэтому важно понимать, что мы просто арендуем эти буквы и цифры и за продлением их арендой нужно четко следить. Я тщетно пытался понять, почему домен в зоне RU стоит именно столько, сколько он стоит, а в зоне РФ, например, дороже, но,  увы, так и не понял J (P.S. если Вы знаете почему, то напишите мне, я с удовольствием ознакомлюсь).

Исторические скриншоты от Sanmay Ved:

Но вернемся к доменам, ниже приведен схематический рисунок иерархии уровней доменов.

The hierarchy of labels in a fully qualified domain name.

Здесь мы видим иерархию доменов от его корня (в данном случае «точки»), где:

  •  com, org, net, pl — это домены верхнего, так называемого первого уровня (англ. top-level domain, TLD )
  • wikipedia.org, fsf.org — второй уровень
  • ru.wikipedia.org — третий

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

Идеология доменов

Первое коммерческое доменное имя в домене TLD com (в английском языке домен часто произносится как «dot-com» вместе с предшествующей точкой) было зарегистрировано 15 марта 1985 года на имя symbolics.com фирмой «Symbolics Inc.», компанией компьютерных систем в Кембридже, штат Массачусетс. А к 1992 году было зарегистрировано не менее 15 000 доменов в зоне .com

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

http://symbolics.com/
http://symbolics.com/

Вообще, как мне кажется, изначально все было задумано по уму. Например, домен «.com» не что иное, как сокращение, от слова «коммерческий», вытекающие из него домены второго уровня предназначались и подразумевали отношение веб-ресурса к коммерческой деятельности , зарегистрированные коммерческими организациями. Домен «.org»  (от англ. organizations) —первоначально предполагался использоваться некоммерческими организациями, а домен «.net» — (от слова «сеть»), указывает на своё первоначальное назначение — регистрацию организаций, занятых сетевыми технологиями.

Но больше всего мне симпатична идея, которая успешно внедрилась, о национальных доменах верхнего уровня, то есть каждой стране – свой домен, согласно двух-буквенному коду этой страны (по стандарту ISO 3166-1), вот поэтому RU- Россия, UA- Украина, не трудно догадаться каким странам какая аббревиатура будет присуща и дальше…

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

История появления некоторых национальных доменов верхнего уровня:

1985 год:

  • домен .us, США.
  • домен .uk, Великобритания.
  • домен .il, Израиль.

1990 год:

  • домен .su, Советский Союз (Soviet Union).
  • домен .cn, Китай.

1992 год:

  • домен .ua, Украина.
  • домен .ge, Грузия.

1994 год:

  • 7 апреля: домен .ru, Российская Федерация.
  • 10 мая: домен .by, Белоруссия.
  • 26 августа: домен .am, Армения.
  • 19 сентября: домен .kz, Казахстан.

1995 год:

  • домен .uz, Узбекистан.

2010 год:

  • 12 мая: IDN-домен .рф, Российская Федерация.

домен dot-me

Сегодня, например, популярный домен .me (национальный домен  для Черногории, происходит от слова Montenegro — английского названия Черногории) служит совсем для других задач и целей, «точку ми» можно понять как: «мне», «меня» и в связи с этим он приобрел популярность по всему миру. Вот наиболее удачные примеры его реализации — сайты:

  • about.me («про меня»),
  • present.me («покажи мне»)

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

Так, какой домен верхнего уровня выбрать?

Если в зоне .RU название, которые Вы желаете, свободно, то безусловно стоит занимать именно его, сделав, например, «зеркало» некий домен-синоним в зоне .РФ, для того что бы Вас быстро набрать, попасть к Вам на сайт.

Где проверить доступность домена?

Эту услугу, как правило, предлагает любая хостинг-компания, любой регистратор. Предположим название Вашей компании, носит название «Снег и Буря» и компания занимается производством теплой одежды для суровых погодных условий.

Воспользовавшись сервисом проверки доступных к регистрации доменов, обнаруживаем следующее:

Регистрация и выбор домена

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

Регистрация и выбор домена

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

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

Современный подход

На дворе 21-ый век и с выходом новой программы «New gTLD Program» скупой выбор среди доменных имен (когда красивые и короткие имена разобрали еще в 90-х и начале 2000-х) уже остался где то позади… Теперь на любой вкус и цвет, почти каждый регистратор Вам предлагает подобрать домен в тематической зоне:

регистрация доменов

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

Какой домен подойдет для интернет-магазина?

Давайте посмотрим в категории «Торговля» возможные варианты зон:

Выбор домена для интернет-магазина

Наиболее привлекательными выглядят домены:

  • .shop
  • .shopping
  • .store
  • .sale

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

  • snowandstorm.shop
  • snowstorm.shop
  • storm.shop

рассматривая последний вариант, предположим, что нам удалось завладеть доменным именем storm.shop и теперь, уже владея представлениями о доменах, нам нетрудно предположить, что для продаж в России мы можем использовать домен третьего уровня и получим российский адрес магазина: https://ru.storm.shop, для других стран соответственно их кодировке. Данный трюк позволяет однозначно привязать торговую марку к виду деятельности. В нашем портфолио (примерах выполненных заказов) есть подобный реальный случай решения похожей задачи, ознакомьтесь при желании с ним.

Рубрики
Разное (Без рубрики)

Чем отличается параметр функции от аргумента?


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

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

Теперь немного теории и примеров …

Вообще функция служит для выполнение каких то повторяющихся действий. Предположим мы пишем некую программу, в которой постоянно вычисляем количество часов до конца рабочего дня. Очевидно, что здесь у нас будет первое значение — это текущая дата и время, а второе значение — вечер пятницы, предположим 18 часов вечера. Но у нас есть другой офис, а то и два, где люди работают до 19 и до 21-го часа, следовательно писать три раза с разными значениями код уже не целесообразно и следуя принципам DRY (Don’t repeat yourself, (не повторяйся) ) мы не будет использовать код три раза, а оформим его в виде функции, которая будет ожидать один параметр — это конец рабочего дня того или иного офиса. Следовательно при объявлении функции, данные которые она ожидает получить для обработки называются параметрами:

function final_day ($параметр) {
   // код, который необходимо выполнить
}

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

final_day (аргумент);

Вот и все.

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


function имя_функции (п а р а м е т р 1 , п а р а м е т р 2 , п а р а м е т р З ) {

}
При вызове функции передаем то же количество аргументов, в том же порядке:


имя_функции(аргумент1, аргумент2, аргумент3);

Рубрики
Разное (Без рубрики)

Новая версия WordPress 4.7 «Vaughan»


Кодекс Источник 1
Кодекс Источник 2

WordPress не перестает приятно удивлять своими обновлениями. С каждой новой версией разработчики открывают для нас новые, полезные возможности в виде функций и дизайна. Не стал исключением выход и этой новой версии за номером 4.7 от 6 декабря 2016 года, названной в честь джазового музыканта Sarah «Sassy» Vaughan. 

Sarah "Sassy" Vaughan

Давайте познакомимся с некоторыми особенностями:

Особенности

Новая тема по умолчанию — Twenty Seventeen.

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

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

Примечание : Тема «Twenty Seventeen» (Двадцать Семнадцать) работает только на WordPress версии 4.7 и выше. Это связанно с некоторыми особенностями функционала, который доступен исключительно с версии 4.7.

Еще…

  • Возможность изменения стартового содержимого (контента) — это доступно только при новых установках WordPress, т.е. при установке с новой версией 4.7

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

  • Изменения в кастомайзере и ярлыки редактировании

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

 

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

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

  • Пользовательские CSS, возможность добавлений правил CSS и в режиме реального времени наблюдение изменений

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

  • отображение PDF миниатюр с предпросмотром

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

Для разработчиков

  • возможность разработчикам зарегистрировать свои собственные «массовые действия» на экранах списков записей и страниц

  • поддержка пользовательских шаблонов с возможностью их указания ( Template Post Type: post, page, product )
  • новый WP_Taxonomy класс и новые методы для работы с  таксономиями
  • новые функции и хуки для разработчиков тем (например, get_theme_file_uri() )
  • изменения на уровне ядра в хуках («экшены» и «фильтры») подробнее …
  • добавлены возможности при работе с новыми атрибутами требуемых спецификацией W3C, возможность с помощью фильтра wp_resource_hints вносить подсказки
  • Новые функции wp_list_sort() и WP_List_Util 

И это еще не все!

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

  • Из  виджета «Облако Тегов» (Tag-Cloud) была удалена возможность выбора популярных тегов.
  • Улучшения при работе с изображениями, теперь WordPress для изображений с пустым alt — значением, будет пытаться использовать либо текст заголовка, либо название.
  • улучшен кастомайзер
  • незначительные изменения в ядре WordPress, например, использовать новую функцию get_bloginfo( ‘version’ ) вместо глобальной переменной $wp_version, в случаях, если необходимо проверить версию WP
Рубрики
Разное (Без рубрики)

Настройка редактора кода Visual Studio Code


Официальный сайт

Более 5 лет для своей работы я использовал редактор кода Notepad ++, это действительно простая «рабочая лошадка», которая, не смотря на свою простоту,имеет все необходимые базовые функции для написании кода и большой потенциал для расширяемости. Но, как говорится, все когда то заканчивается… Конечно же время не стоит на месте, все развивается, движется вперед, совершенствуется… Чего нельзя, к сожалению, сказать о Notepad++ 🙁 Особенно огорчает дизайн и его привязка к ОС «Windows».

И вот ответ на мою боль — редактор исходного кода «Visual Studio Code»! Современный, бесплатный и кроссплатформенный, созданный в компании Microsoft.

Редактор кода Visual Studio Code
Редактор кода Visual Studio Code

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

  • C++
  • C#
  • CSS
  • Dockerfile
  • HTML
  • JavaScript
  • Java
  • JSON
  • Less
  • Markdown
  • PHP
  • Python
  • Sass
  • TypeScript
  • Shell Script (Bash)
  • Rust
  • Swift
  • Visual Basic
  • XML, XSL, YAML

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

Поддержка синтаксиса Emmet

Внимание верстальщики! В «Visual Studio Code» уже включена поддержка Emmet. И вызывается ее исполнение простым нажатием клавиши TAB (табуляция). Для тех кто не в курсе приведу простой пример: что бы нам получить подобную HTML-структуру

emmet

нам достаточно ввести в документе следующего рода комбинацию и нажать клавишу табуляции, вуаля! И строчка превращается …

div>div>p>ul>li*5

Ну а каркас HTML документа по стандартам W3 HTML5 и подавно создать легко:

emmet

Освоив не хитрый синтаксис emmet вы определенно сэкономите свое время и нервы при работе с кодом HTML и CSS 🙂 Попробуйте …

Расширения

Как упоминалось выше к данному редактору существует огромное количество расширений, которые что то добавляют, что то меняют в нем… Я приведу лишь ту малую часть, которая полезна в моей работе, а это:

  • PHP Debug (использует библиотеку XDebug и незаменим при отладке PHP-кода )
  • Bootstrap 3 Snippets (сниппеты популярного HTML-CSS-JS фреймворка)
  • Debugger for Chrome (Отладка кода JavaScript в браузере Chrome)
  • WordPress Snippet (функции WordPress)

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

Как установить расширение?

Установка происходит проще-простого. Либо из меню интерфейса редактора, где необходимо в разделе расширений ввести ключевое слово и воспользоваться поиском:

2016-10-14_204814

Либо (для более продвинутых) с помощью комбинации клавиш Ctrl+P и в появившуюся строку поиска необходимо забить ключевое слово, либо прямую ссылку для установки расширения, которую можно найти под каждым расширением на его странице, на сайте редактора «Visual Studio Code»:

2016-10-14_205637

При помощи специальных команд, в строке поиска можно осуществить фильтрацию к вашим расширениям по :

  • @popular (популярные)
  • @recommended (рекомендуемые)
  • @outdated (требуемые обновления)

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

Файл → Параметры → Параметры пользователя

2016-10-14

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

Пользовательская настройка редактора

В своем предыдущем редакторе Notepad++ я определенно привык к двум вещам:

  1. При открытии новых файлов они не должны вызывать открытие новой копии редактора, а должны открываться в текущей копии, в новых вкладках. За это отвечает следующий параметр: «window.openFilesInNewWindow»: false, значение которого необходимо поменять с true на false
  2. Управление переносом строк

Все это мгновенно настраивается. Ниже приведен список настроек редактора с комментариями. Ознакомьтесь на досуге.

Полезные ссылки:

  1. Будет полезна заметка для PHP-разработчиков на «Хабре»
  2. Обучающее видео по Visual Studio Code
  3. Блог команды разработчиков VS Code
// Перезапишите параметры, поместив их в файл параметров.
// Наиболее часто используемые настройки см. по адресу http://go.microsoft.com/fwlink/?LinkId=808995.
{

// Редактор

    // Определяет семейство шрифтов.
    "editor.fontFamily": "Consolas, 'Courier New', monospace",

    // Управляет насыщенностью шрифта.
    "editor.fontWeight": "normal",

    // Управляет размером шрифта в пикселях.
    "editor.fontSize": 14,

    // Управляет высотой строк. Укажите 0 для вычисления высоты строки по размеру шрифта.
    "editor.lineHeight": 0,

    // Управляет видимостью номеров строк.
    "editor.lineNumbers": "on",

    // Столбцы, в которых должны отображаться вертикальные линейки
    "editor.rulers": [],

    // Символы, которые будут использоваться как разделители слов при выполнении навигации или других операций, связанных со словами.
    "editor.wordSeparators": "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?",

    // Число пробелов в табуляции. Эта настройка переопределяется на основании содержимого файла, когда включен параметр "editor.detectIndentation".
    "editor.tabSize": 4,

    // Вставлять пробелы при нажатии клавиши TAB. Эта настройка переопределяется на основании содержимого файла, когда включен параметр "editor.detectIndentation".
    "editor.insertSpaces": true,

    // При открытии файла editor.tabSize и editor.insertSpaces будут определяться на основе содержимого файла.
    "editor.detectIndentation": true,

    // Определяет, будут ли выделения иметь скругленные углы.
    "editor.roundedSelection": true,

    // Определяет, будет ли содержимое редактора прокручиваться за последнюю строку.
    "editor.scrollBeyondLastLine": true,

    // Определяет число символов, после которых текст будет перенесен на следующую строку. Если этот параметр имеет значение 0, используется перенос по ширине окна просмотра (перенос по словам). Если задать значение –1, то в редакторе не будет выполняться перенос по словам.
    "editor.wrappingColumn": 300,

    // Определяет, должны ли строки переноситься. Строки будут переноситься по значению min(editor.wrappingColumn, viewportWidthInColumns).
    "editor.wordWrap": false,

    // Управляет отступом строк с переносом по словам. Допустимые значения: "none", "same" или "indent".
    "editor.wrappingIndent": "same",

    // Множитель, используемый для параметров deltaX и deltaY событий прокрутки колесика мыши.
    "editor.mouseWheelScrollSensitivity": 1,

    // Определяет, должны ли при вводе текста отображаться краткие предложения.
    "editor.quickSuggestions": true,

    // Управляет длительностью задержки (в мс), перед отображением кратких предложений.
    "editor.quickSuggestionsDelay": 10,

    // Включение подсказок для параметров
    "editor.parameterHints": true,

    // Определяет, должен ли редактор автоматически закрывать скобки после открытия.
    "editor.autoClosingBrackets": true,

    // Управляет параметром, определяющим, должен ли редактор автоматически форматировать строку после ввода.
    "editor.formatOnType": false,

    // Определяет, должны ли при вводе триггерных символов автоматически отображаться предложения.
    "editor.suggestOnTriggerCharacters": true,

    // Определяет, можно ли принимать предложения клавишей ВВОД в дополнение к клавише TAB. Это помогает избежать неоднозначности между вставкой новых строк или принятием предложений.
    "editor.acceptSuggestionOnEnter": true,

    // Управляет отображением фрагментов вместе с другими предложениями и их сортировкой.
    "editor.snippetSuggestions": "bottom",

    // Включите предложения на основе слов.
    "editor.wordBasedSuggestions": true,

    // Вставка фрагментов при совпадении их префиксов. Функция работает оптимально, если параметр "quickSuggestions" отключен.
    "editor.tabCompletion": false,

    // Определяет, будет ли редактор выделять фрагменты, совпадающие с выделенным текстом.
    "editor.selectionHighlight": true,

    // Определяет, сколько украшений могут отображаться на одном месте в обзорной линейке.
    "editor.overviewRulerLanes": 3,

    // Управляет стилем анимации курсора. Допустимые значения: "blink", "smooth", "phase", "expand" и "solid"
    "editor.cursorBlinking": "blink",

    // Изменение размера шрифта в редакторе при нажатой клавише CTRL и движении колесика мыши
    "editor.mouseWheelZoom": false,

    // Определяет стиль курсора. Допустимые значения: "block", "line" и "underline"
    "editor.cursorStyle": "line",

    // Включает лигатуры шрифта.
    "editor.fontLigatures": false,

    // Управляет скрытием курсора в обзорной линейке.
    "editor.hideCursorInOverviewRuler": false,

    // Определяет, должен ли редактор обрабатывать символы пробела; возможные значения: "none", "boundary" и "all". Параметр "boundary" не обрабатывает единичные пробелы между словами.
    "editor.renderWhitespace": "none",

    // Определяет, должны ли в редакторе отображаться управляющие символы.
    "editor.renderControlCharacters": false,

    // Определяет, должны ли в редакторе отображаться направляющие отступа.
    "editor.renderIndentGuides": false,

    // Определяет, должен ли редактор отображать текущее выделение строки
    "editor.renderLineHighlight": true,

    // Управляет показом групп связанных элементов кода в редакторе
    "editor.codeLens": true,

    // Определяет, включено ли сворачивание кода в редакторе.
    "editor.folding": true,

    // Вставка и удаление пробелов после позиции табуляции
    "editor.useTabStops": true,

    // Удалить автоматически вставляемый конечный пробел
    "editor.trimAutoWhitespace": true,

    // Оставлять просматривающие редакторы открытыми, даже если дважды щелкнуто их содержимое или нажата клавиша ESC.
    "editor.stablePeek": false,

    // Определяет, как редактор несовпадений отображает отличия: рядом или в тексте.
    "diffEditor.renderSideBySide": true,

    // Определяет, должен ли редактор несовпадений трактовать несовпадения символов-разделителей как различия.
    "diffEditor.ignoreTrimWhitespace": true,


// Emmet

    // Если включено, сокращения Emmet разворачиваются при нажатии клавиши TAB.
    "emmet.triggerExpansionOnTab": true,

    // Настройки, которые используются для изменения поведения некоторых действий и сопоставителей Emmet.
    "emmet.preferences": {},

    // Задайте профиль для указанного синтаксиса или используйте свой собственный профиль с определенными правилами.
    "emmet.syntaxProfiles": {},

    // Массив языков, в которых не должны развертываться сокращения Emmet.
    "emmet.excludeLanguages": [],


// Workbench

    // Определяет, должны ли открытые редакторы отображаться на вкладках или нет.
    "workbench.editor.showTabs": true,

    // Определяет, должны ли открытые редакторы отображаться со значком. Требует включить тему значков.
    "workbench.editor.showIcons": true,

    // Определяет, отображаются ли открытые редакторы в режиме предварительного просмотра. Редакторы с предварительным просмотром повторно используются до сохранения (например, с помощью двойного щелчка или изменения).
    "workbench.editor.enablePreview": true,

    // Определяет, отображаются ли редакторы из Quick Open в режиме предварительного просмотра. Редакторы в режиме предварительного просмотра повторно используются до сохранения (например, с помощью двойного щелчка или изменения).
    "workbench.editor.enablePreviewFromQuickOpen": true,

    // Определяет место открытия редакторов. Выберите "Слева" или "Справа", чтобы открывать редакторы слева или справа от активного сейчас редактора. Выберите "Первый" или "Последний", чтобы открывать редакторы независимо от активного сейчас редактора.
    "workbench.editor.openPositioning": "right",

    // Управляет автоматическим закрытием Quick Open при потере фокуса.
    "workbench.quickOpen.closeOnFocusLost": true,

    // Управляет открытием редактора с отображением всех настроек по умолчанию при открытии настроек.
    "workbench.settings.openDefaultSettings": true,


// Окно

    // Если этот параметр включен, файлы будут открываться в новом окне, а не в существующем экземпляре.
    "window.openFilesInNewWindow": true,

    // Управляет повторным открытием папок после перезапуска. Выберите значение "none", чтобы не открывать папку повторно, "one", чтобы открывалась последняя папка, с которой вы работали, или "all", чтобы открывались все папки последнего сеанса.
    "window.reopenFolders": "one",

    // Определяет, должно ли окно восстанавливаться в полноэкранном режиме, если оно было закрыто в полноэкранном режиме.
    "window.restoreFullscreen": false,

    // Настройте масштаб окна. Исходный размер равен 0. Увеличение или уменьшение значения на 1 означает увеличение или уменьшение окна на 20 %. Чтобы более точно задать масштаб, можно также ввести десятичное число.
    "window.zoomLevel": 0,


// Файлы

    // Настройка стандартных масок для исключения файлов и папок.
    "files.exclude": {
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/.DS_Store": true
    },

    // Настройте сопоставления файлов с языками (например, "*.extension": "html"). У них будет приоритет перед заданными по умолчанию сопоставлениями установленных языков.
    "files.associations": {},

    // Кодировка набора символов по умолчанию, используемая при чтении и записи файлов
    "files.encoding": "utf8",

    // Символ конца строки по умолчанию.
    "files.eol": "\r\n",

    // Если этот параметр включен, при сохранении файла будут удалены завершающие символы-разделители.
    "files.trimTrailingWhitespace": false,

    // Управляет автоматическим сохранением измененных файлов. Допустимые значения: "off", "afterDelay", "onFocusChange" (редактор теряет фокус) и "onWindowChange" (окно теряет фокус). Если задано значение "afterDelay", можно настроить задержку в "files.autoSaveDelay".
    "files.autoSave": "off",

    // Определяет задержку в мс, после которой измененный файл сохраняется автоматически. Действует, только если параметр files.autoSave имеет значение "afterDelay".
    "files.autoSaveDelay": 1000,

    // Настройте стандартные маски путей файлов, чтобы исключить их из списка отслеживаемых файлов. После изменения этого параметра потребуется перезагрузка. При отображении сообщения "Код потребляет большое количество процессорного времени при запуске" вы можете исключить большие папки, чтобы уменьшить первоначальную загрузку.
    "files.watcherExclude": {
        "**/.git/objects/**": true
    },

    // Форматирование файла при сохранении. Модуль форматирования должен быть доступен, файл не должен сохраняться автоматически, а работа редактора не должна завершаться.
    "editor.formatOnSave": false,


// Проводник

    // Число редакторов, отображаемых на панели открытых редакторов. Задайте значение 0, чтобы скрыть панель.
    "explorer.openEditors.visible": 9,

    // Определяет, будет ли высота раздела открытых редакторов динамически адаптироваться к количеству элементов.
    "explorer.openEditors.dynamicHeight": true,

    // Определяет, следует ли обозревателю автоматически отображать файлы при их открытии.
    "explorer.autoReveal": true,

    // Определяет, разрешено ли перемещение файлов и папок перетаскиванием в проводнике.
    "explorer.enableDragAndDrop": true,


// Поиск

    // Настройте стандартные маски для исключения файлов и папок при поиске. Все стандартные маски наследуются от параметра file.exclude.
    "search.exclude": {
        "**/node_modules": true,
        "**/bower_components": true
    },

    // Настройте для включения результатов поиска глобальных символов в файлы по запросу для Quick Open.
    "search.quickOpen.includeSymbols": false,


// Обновить

    // Настройте канал обновления, по которому вы будете получать обновления. После изменения значения необходим перезапуск.
    "update.channel": "default",


// Git

    // С поддержкой GIT
    "git.enabled": true,

    // Путь к исполняемому файлу GIT
    "git.path": null,

    // Включено ли автоматическое обновление
    "git.autorefresh": true,

    // Включено ли автоматическое получение.
    "git.autofetch": true,

    // Следует ли предупреждать о длинных сообщениях о фиксации.
    "git.enableLongCommitWarning": true,

    // Всегда разрешать Code управлять большими репозиториями.
    "git.allowLargeRepositories": false,

    // Подтвердите синхронизацию репозиториев Git.
    "git.confirmSync": false,

    // Управляет счетчиком эмблем Git.
    "git.countBadge": "all",


// HTTP

    // Используемый параметр прокси. Если он не задан, он будет взят из переменных среды http_proxy и https_proxy.
    "http.proxy": "",

    // Должен ли сертификат прокси-сервера проверяться по списку предоставленных ЦС.
    "http.proxyStrictSSL": true,

    // Значение, отправляемое как заголовок "Proxy-Authorization" для каждого сетевого запроса.
    "http.proxyAuthorization": null,


// CSS

    // Controls CSS validation and problem severities.

    // Enables or disables all validations
    "css.validate": true,

    // When using a vendor-specific prefix make sure to also include all other vendor-specific properties
    "css.lint.compatibleVendorPrefixes": "ignore",

    // When using a vendor-specific prefix also include the standard property
    "css.lint.vendorPrefix": "warning",

    // Do not use duplicate style definitions
    "css.lint.duplicateProperties": "ignore",

    // Do not use empty rulesets
    "css.lint.emptyRules": "warning",

    // Import statements do not load in parallel
    "css.lint.importStatement": "ignore",

    // Do not use width or height when using padding or border
    "css.lint.boxModel": "ignore",

    // The universal selector (*) is known to be slow
    "css.lint.universalSelector": "ignore",

    // No unit for zero needed
    "css.lint.zeroUnits": "ignore",

    // @font-face rule must define 'src' and 'font-family' properties
    "css.lint.fontFaceProperties": "warning",

    // Hex colors must consist of three or six hex numbers
    "css.lint.hexColorLength": "error",

    // Invalid number of parameters
    "css.lint.argumentsInColorFunction": "error",

    // Unknown property.
    "css.lint.unknownProperties": "warning",

    // IE hacks are only necessary when supporting IE7 and older
    "css.lint.ieHack": "ignore",

    // Unknown vendor specific property.
    "css.lint.unknownVendorSpecificProperties": "ignore",

    // Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect
    "css.lint.propertyIgnoredDueToDisplay": "warning",

    // Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.
    "css.lint.important": "ignore",

    // Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.
    "css.lint.float": "ignore",

    // Selectors should not contain IDs because these rules are too tightly coupled with the HTML.
    "css.lint.idSelector": "ignore",


// SCSS (Sass)

    // Controls SCSS validation and problem severities.

    // Enables or disables all validations
    "scss.validate": true,

    // When using a vendor-specific prefix make sure to also include all other vendor-specific properties
    "scss.lint.compatibleVendorPrefixes": "ignore",

    // When using a vendor-specific prefix also include the standard property
    "scss.lint.vendorPrefix": "warning",

    // Do not use duplicate style definitions
    "scss.lint.duplicateProperties": "ignore",

    // Do not use empty rulesets
    "scss.lint.emptyRules": "warning",

    // Import statements do not load in parallel
    "scss.lint.importStatement": "ignore",

    // Do not use width or height when using padding or border
    "scss.lint.boxModel": "ignore",

    // The universal selector (*) is known to be slow
    "scss.lint.universalSelector": "ignore",

    // No unit for zero needed
    "scss.lint.zeroUnits": "ignore",

    // @font-face rule must define 'src' and 'font-family' properties
    "scss.lint.fontFaceProperties": "warning",

    // Hex colors must consist of three or six hex numbers
    "scss.lint.hexColorLength": "error",

    // Invalid number of parameters
    "scss.lint.argumentsInColorFunction": "error",

    // Unknown property.
    "scss.lint.unknownProperties": "warning",

    // IE hacks are only necessary when supporting IE7 and older
    "scss.lint.ieHack": "ignore",

    // Unknown vendor specific property.
    "scss.lint.unknownVendorSpecificProperties": "ignore",

    // Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect
    "scss.lint.propertyIgnoredDueToDisplay": "warning",

    // Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.
    "scss.lint.important": "ignore",

    // Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.
    "scss.lint.float": "ignore",

    // Selectors should not contain IDs because these rules are too tightly coupled with the HTML.
    "scss.lint.idSelector": "ignore",


// LESS

    // Controls LESS validation and problem severities.

    // Enables or disables all validations
    "less.validate": true,

    // When using a vendor-specific prefix make sure to also include all other vendor-specific properties
    "less.lint.compatibleVendorPrefixes": "ignore",

    // When using a vendor-specific prefix also include the standard property
    "less.lint.vendorPrefix": "warning",

    // Do not use duplicate style definitions
    "less.lint.duplicateProperties": "ignore",

    // Do not use empty rulesets
    "less.lint.emptyRules": "warning",

    // Import statements do not load in parallel
    "less.lint.importStatement": "ignore",

    // Do not use width or height when using padding or border
    "less.lint.boxModel": "ignore",

    // The universal selector (*) is known to be slow
    "less.lint.universalSelector": "ignore",

    // No unit for zero needed
    "less.lint.zeroUnits": "ignore",

    // @font-face rule must define 'src' and 'font-family' properties
    "less.lint.fontFaceProperties": "warning",

    // Hex colors must consist of three or six hex numbers
    "less.lint.hexColorLength": "error",

    // Invalid number of parameters
    "less.lint.argumentsInColorFunction": "error",

    // Unknown property.
    "less.lint.unknownProperties": "warning",

    // IE hacks are only necessary when supporting IE7 and older
    "less.lint.ieHack": "ignore",

    // Unknown vendor specific property.
    "less.lint.unknownVendorSpecificProperties": "ignore",

    // Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect
    "less.lint.propertyIgnoredDueToDisplay": "warning",

    // Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.
    "less.lint.important": "ignore",

    // Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.
    "less.lint.float": "ignore",

    // Selectors should not contain IDs because these rules are too tightly coupled with the HTML.
    "less.lint.idSelector": "ignore",


// HTML

    // Maximum amount of characters per line (0 = disable).
    "html.format.wrapLineLength": 120,

    // List of tags, comma separated, that shouldn't be reformatted. 'null' defaults to all tags listed at https://www.w3.org/TR/html5/dom.html#phrasing-content.
    "html.format.unformatted": "a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var",

    // Indent and sections.
    "html.format.indentInnerHtml": false,

    // Whether existing line breaks before elements should be preserved. Only works before elements, not inside tags or for text.
    "html.format.preserveNewLines": true,

    // Maximum number of line breaks to be preserved in one chunk. Use 'null' for unlimited.
    "html.format.maxPreserveNewLines": null,

    // Format and indent {{#foo}} and {{/foo}}.
    "html.format.indentHandlebars": false,

    // End with a newline.
    "html.format.endWithNewline": false,

    // List of tags, comma separated, that should have an extra newline before them. 'null' defaults to "head, body, /html".
    "html.format.extraLiners": "head, body, /html",

    // Configures if the built-in HTML language support suggests Angular V1 tags and properties.
    "html.suggest.angular1": true,

    // Configures if the built-in HTML language support suggests Ionic tags, properties and values.
    "html.suggest.ionic": true,

    // Configures if the built-in HTML language support suggests HTML5 tags, properties and values.
    "html.suggest.html5": true,


// JSON

    // Associate schemas to JSON files in the current project
    "json.schemas": [],


// Markdown

    // A list of URLs or local paths to CSS style sheets to use from the markdown preview. Relative paths are interpreted relative to the folder open in the explorer. If there is no open folder, they are interpreted relative to the location of the markdown file. All '\' need to be written as '\\'.
    "markdown.styles": [],


// PHP

    // Включена ли проверка PHP.
    "php.validate.enable": true,

    // Указывает на исполняемый файл PHP.
    "php.validate.executablePath": null,

    // Запускается ли Linter при сохранении или в типе.
    "php.validate.run": "onSave",


// TypeScript

    // Указывает путь к папке, содержащей файлы tsserver и lib*.d.ts, которые необходимо использовать.
    "typescript.tsdk": null,

    // Проверка наличия версии TypeScript в рабочей области
    "typescript.check.workspaceVersion": true,

    // Проверка отличия компилятора TypeScript глобальной установки (например, tsc) от используемой языковой службы TypeScript.
    "typescript.check.tscVersion": true,

    // Включение трассировки сообщений, отправленных на сервер TS
    "typescript.tsserver.trace": "off",

    // Дополните функции сигнатурами их параметров.
    "typescript.useCodeSnippetsOnMethodSuggest": false,

    // Включить или отключить проверку TypeScript
    "typescript.validate.enable": true,

    // Определяет метод обработки пробелов после разделителя-запятой
    "typescript.format.insertSpaceAfterCommaDelimiter": true,

    //  Определяет метод обработки пробелов после точки с запятой в операторе for
    "typescript.format.insertSpaceAfterSemicolonInForStatements": true,

    // Определяет метод обработки пробелов после двоичного оператора
    "typescript.format.insertSpaceBeforeAndAfterBinaryOperators": true,

    // Определяет метод обработки пробелов после ключевых слов в операторе потока управления
    "typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": true,

    // Определяет метод обработки пробелов после ключевого слова анонимной функции
    "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,

    // Определяет метод обработки пробелов после открытия и до закрытия непустых круглых скобок
    "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,

    // Определяет метод обработки пробелов после открытия и до закрытия непустых квадратных скобок
    "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,

    // Определяет, помещается ли открывающая фигурная скобка в новую строку для функций
    "typescript.format.placeOpenBraceOnNewLineForFunctions": false,

    // Определяет, помещается ли открывающая фигурная скобка в новую строку для управляющих блоков
    "typescript.format.placeOpenBraceOnNewLineForControlBlocks": false,

    // Включить или отключить проверку JavaScript
    "javascript.validate.enable": true,

    // Определяет метод обработки пробелов после разделителя-запятой
    "javascript.format.insertSpaceAfterCommaDelimiter": true,

    //  Определяет метод обработки пробелов после точки с запятой в операторе for
    "javascript.format.insertSpaceAfterSemicolonInForStatements": true,

    // Определяет метод обработки пробелов после двоичного оператора
    "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": true,

    // Определяет метод обработки пробелов после ключевых слов в операторе потока управления
    "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": true,

    // Определяет метод обработки пробелов после ключевого слова анонимной функции
    "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,

    // Определяет метод обработки пробелов после открытия и до закрытия непустых круглых скобок
    "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,

    // Определяет метод обработки пробелов после открытия и до закрытия непустых квадратных скобок
    "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,

    // Определяет, помещается ли открывающая фигурная скобка в новую строку для функций
    "javascript.format.placeOpenBraceOnNewLineForFunctions": false,

    // Определяет, помещается ли открывающая фигурная скобка в новую строку для управляющих блоков
    "javascript.format.placeOpenBraceOnNewLineForControlBlocks": false,


// Расширения

    // Автоматически обновлять расширения
    "extensions.autoUpdate": false,


// Внешний терминал

    // Настройка терминала, который будет запущен в Windows.
    "terminal.external.windowsExec": "%COMSPEC%",

    // Настройка приложения терминала для запуска в OS X.
    "terminal.external.osxExec": "Terminal.app",

    // Настройка терминала для запуска в Linux.
    "terminal.external.linuxExec": "xterm",


// Интегрированный терминал

    // Путь оболочки, который используется терминалом в Linux.
    "terminal.integrated.shell.linux": "sh",

    // Аргументы командной строки, которые следует использовать в терминале Linux.
    "terminal.integrated.shellArgs.linux": [],

    // Путь оболочки, который используется терминалом в OS X.
    "terminal.integrated.shell.osx": "sh",

    // Аргументы командной строки, которые следует использовать в терминале OS X.
    "terminal.integrated.shellArgs.osx": [],

    // Путь оболочки, который используется терминалом в Windows. При работе с оболочкой, поставляемой с Windows (cmd, PowerShell или Bash на Ubuntu), укажите C:Windowssysnative вместо C:WindowsSystem32 для использования 64-разрядных версий.
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\system32\\cmd.exe",

    // Определяет семейство шрифтов терминала, значение по умолчанию — editor.fontFamily.
    "terminal.integrated.fontFamily": "",

    // Определяет, будут ли включены лигатуры шрифтов для терминала.
    "terminal.integrated.fontLigatures": false,

    // Определяет размер шрифта (в пикселях) для терминала; значение по умолчанию — editor.fontSize.
    "terminal.integrated.fontSize": 0,

    // Определяет высоту строки терминала; это число умножается на размер шрифта терминала, что дает фактическую высоту строки в пикселях.
    "terminal.integrated.lineHeight": 1.2,

    // Управляет миганием курсора терминала.
    "terminal.integrated.cursorBlinking": false,

    // Управляет заданием переменных при запуске терминала, значение по умолчанию: "True" для OS X и "False" для других платформ.
    "terminal.integrated.setLocaleVariables": false,

    // Набор идентификаторов команд, настраиваемые сочетания клавиш которых не будут передаваться в оболочку, а вместо этого будут всегда обрабатываться Code. Это позволяет использовать настраиваемые сочетания клавиш, которые при обычных условиях были бы использованы оболочкой и работали бы так же, как если бы терминал не имел фокуса, например клавиши CTRL+P запускали бы Quick Open.
    "terminal.integrated.commandsToSkipShell": [
        "editor.action.toggleTabFocusMode",
        "workbench.action.quickOpen",
        "workbench.action.showCommands",
        "workbench.action.terminal.clear",
        "workbench.action.terminal.copySelection",
        "workbench.action.terminal.focus",
        "workbench.action.terminal.focusNext",
        "workbench.action.terminal.focusPrevious",
        "workbench.action.terminal.kill",
        "workbench.action.terminal.new",
        "workbench.action.terminal.paste",
        "workbench.action.terminal.runSelectedText",
        "workbench.action.terminal.scrollDown",
        "workbench.action.terminal.scrollDownPage",
        "workbench.action.terminal.scrollUp",
        "workbench.action.terminal.scrollUpPage",
        "workbench.action.terminal.toggleTerminal"
    ],


// Представление "Проблемы"

    // Определяет, следует ли представлению "Проблемы" отображать файлы при их открытии
    "problems.autoReveal": true,


// Телеметрия

    // Разрешить отправку сведений об использовании и ошибках в корпорацию Майкрософт.
    "telemetry.enableTelemetry": true,

    // Разрешить отправку отчетов о сбоях в корпорацию Майкрософт.
	// Чтобы этот параметр вступил в силу, требуется перезагрузка.
    "telemetry.enableCrashReporter": true

}
Рубрики
Разное (Без рубрики)

Не приходят оповещения от WooCommerce


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

А дело все в адресе отправителя, который прописывается в настройках. Зайдите в панель управления сайтом WordPress и перейдите по следующему пути:

Woocommerce → Настройки → Email’ы

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

  • Проверьте включены ли они вообще у Вас. Перейдите по ссылке Новый заказ

2016-09-15_005202

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

2016-09-15_005342

  • Если в этом разделе все в порядке, то вероятней всего проблема заключается в адресе почты отправителя. Woocommerce → Настройки → Email’ы , далее следует «прокрутить» пониже страницу и проверить какой адрес почты указан в качестве Отправителя. Он должен совпадать с доменом Вашего сайта 🙂

2016-09-15_005442

Удачи!

Рубрики
Разное (Без рубрики)

Не приходят письма от WooCommerce на Mail.ru


Репозиторий Источник 1
Репозиторий Источник 2

Недавно пришлось столкнуться с интересной ситуацией: сайт работает под управлением WordPress, с плагином WP Mail SMTP, соответственно было настроено соединение по SMTP, чтобы правильно и должным образом доставлялись письма-оповещения о новых заказах от плагина для интернет-торговли WooCommerce.

Письма приходили на сервера Gmail, но совсем отсутствовали в почтовом ящике от Mail.ru (папка для спама тоже была пуста). Тогда то и пришлось немного загорячиться и благодаря советам своего коллеги Геннадия Ковшенина быстро получилось разобраться с этой проблемой. Поэтому чтобы сэкономить время людей, которые могут оказаться в подобной ситуации я постараюсь описать все в этой заметке.

Не секрет что все письма с сайта на WordPress используют системный транспорт в лице функции  wp_mail(), которая в свою очередь работает на библиотеке PHP, следовательно в заголовках мы можем передать все что угодно, например, в качестве почтового адреса отправителя указать ложный адрес почты, который не будет иметь цифровой подписи естественно. Это может быть существенным недостатком во многих ситуациях, особенно если у Вас интернет-магазин. Рассматривать мы их не будет.

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

Познакомится с настройкой плагина можно по этой ссылке

Так в чем же была проблема? Спросите Вы…

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

И так, если не приходят письма или в служебном режиме плагина при отправке вместо ожидаемого true возвращается false, то рекомендуются следующие действия:

Вернул плагин

  • Если в качестве сервера используется smtp.gmail.com, то тут нас поджидает первая проблема. Во-первых, в целях безопасности Google запрещает сторонним приложениям осуществлять вход в Ваш аккаунт и поэтому стоит убедиться, что в настройках у вас стоит разрешение для доступа ненадежным приложениям (этим самым Вы делаете Ваш аккаунт более уязвимым, понимайте это)

Разрешения для ненадежных приложений

во-вторых, и это еще не все! Тема была рассмотрена на форуме WordPress, где пользователь sockscap64, за что ему выражаю отдельное спасибо, отметил что требуется еще таким образом подтвердить свое действие выбранное ранее и проследовать по этой ссылке https://accounts.google.com/DisplayUnlockCaptcha — после этого доступ приложения к Gmail будет беспрепятственный и письма отправляться должны (отмечу что это в том случае, если Вы решили задействовать для транспортировки писем сервера Gmail и настроив верно плагин письма не отправляются)

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

Проблема: на ящики MAIL.RU не приходит почта

Вот под таким заголовком встретилась аналогичная проблема и дискуссия, но только сообщества CMS Drupal, но так как обе CMS написаны на PHP, тема была изучена. Всем помогла настройка SMTP, но у нас уже он был настроен! Тогда был задействован прекрасный сервис для отслеживания и анализа доставки электронных писем.

Сервис тестирования

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

Сервис www.mail-tester.com/

Вообщем оказалось, что IP адрес сервера хостера был в «черных списках» и почтовый сервис mail.ru, видимо, руководствуясь этими списками попросту не пропускал это письмо 🙂 Хостинг был недорогим shared-хостингом, где могла быть еще порядком нескольких десятков сайтов и всех их объединял соответственно один IP адрес, возможно кто то делал спам-рассылку и этот «айпишник» попал в «черные списки», вот и все …

Проверить айпи-адрес можно, например, по этой ссылке

Как решить проблему?

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

Рубрики
Разное (Без рубрики)

Навыки при работе с WordPress


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

Система управления версиями

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

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

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

WP-CLI — работа в командной строке

Страшного в этих словах ничего на самом деле нет. WP-CLI — это утилита, позволяющая работать с WordPress при помощи специальных команд, без графического интерфейса: модерировать комментарии, обновлять ядро системы, обновлять плагины, управлять ими. Например, чтобы создать новую директорию (папку), Вы кликаете правой кнопкой мыши, затем в контекстном меню выбираете «Создать новую папку» и т.п.; работая же с утилитой WP-CLI, этот процесс состоит всего из одной команды: mkdir ИМЯ_ПАПКИ

Установить и настроить программу можно как на UNIX-подобных системах, так и на Windows. Более подробно с работой утилиты советую познакомится по этой ссылке.

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

Можно рассмотреть простой пример. Зачастую, в связи с изменением дизайна, нам необходимо изменить размер всех миниатюр сайта. Да, безусловно это можно сделать с помощью плагина, но изящней выполнить это именно из консоли командой: sips -Z 150 *.jpg

Учтите, что знание и навык работы с консолью — это признак профессионализма.

ООП (Объе́ктно-ориенти́рованное программи́рование)

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

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

Дополнительные инструменты

Необходимо знакомится и осваивать и дополнительные технологии и инструменты веб-разработчика: например программа CodeKit, которая по сути является аналогом grunt/gulp

CodeKit умеет компилировать Less, Sass, Stylus, CoffeeScript, Typescript, Jade, Haml, Slim, Markdown & Javascript; оптимизировать, минифицировать, сжимать все то, что можно оптимизировать, минифицировать и сжать; проверять синтаксис JavaScript и CoffeeScript; создавать LiveReload соединение, которое будет доступно в любом браузере, на любом устройстве. самые распространенные фреймворки (Foundation, Bourbon, Compass) уже внутри …

Подробнее можно почитать здесь.