-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed.xml
433 lines (250 loc) · 109 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru"><generator uri="https://jekyllrb.com/" version="3.6.2">Jekyll</generator><link href="https://denisnovikov.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://denisnovikov.github.io/" rel="alternate" type="text/html" hreflang="ru" /><updated>2017-12-15T15:19:20+03:00</updated><id>https://denisnovikov.github.io/</id><title type="html">denisnovikov.github.io</title><subtitle>Хранилище разнообразной информации</subtitle><entry><title type="html">Черные методы продвижения сайтов. Что не стоит делать, если хотите вывести сайт в ТОП</title><link href="https://denisnovikov.github.io/blog/black-website-promotion-how-not-to-do/" rel="alternate" type="text/html" title="Черные методы продвижения сайтов. Что не стоит делать, если хотите вывести сайт в ТОП" /><published>2017-10-30T21:15:00+03:00</published><updated>2017-10-30T21:15:00+03:00</updated><id>https://denisnovikov.github.io/blog/black-website-promotion-how-not-to-do</id><content type="html" xml:base="https://denisnovikov.github.io/blog/black-website-promotion-how-not-to-do/"><p>Задача владельцев сайтов — поднять свой ресурс на самое высокое место в поисковой выдаче. Они готовы сделать все, чтобы увидеть свой проект в ТОПе: кто-то применяет белые методы продвижения сайта, а кто-то не прочь воспользоваться и черным продвижением, лишь бы его детище было на вершине.</p>
<p>Поисковые системы уже давно научились распознавать недобросовестные манипуляции, разрабатывая новые алгоритмы. Они стараются избавиться от сайтов, которые продвигаются нечестным путем, и отдают предпочтение только качественным и грамотно оптимизированным ресурсам.</p>
<h2 id="Черные-методы-раскрутки-которые-мыНЕ-рекомендуем">Черные методы раскрутки, которые мы НЕ рекомендуем</h2>
<ul>
<li><strong>Спам.</strong> Не пытайтесь упоминать о своем ресурсе везде, особенно там, где это не уместно. Информация о вашем сайте на форумах, в блогах, на досках объявлений, в рассылках должна быть по делу. Не стоит, например, размещать рекламу о сайте с кальянами на форуме молодых мам.</li>
<li><strong>Обмен и покупка ссылок.</strong> Начиная с 2013 года, Яндекс стал активно бороться с некачественными ссылками. Многие владельцы сайтов с большим количеством входящих ссылок столкнулись с Минусинском. Не занимайтесь покупкой ссылок, все ссылки должны быть с хороших ресурсов, тематически подходящих вашему. Помните, что для ссылочной массы сейчас важно не количество, а их качество.</li>
<li><strong>Дорвеи и клоакинг.</strong> Дорвей — сайт, созданный для перенаправления пользователя на продвигаемый ресурс. Для перенаправления используется redirect. Содержимое таких страниц состоит из бессвязных предложений с огромным количеством ключевых запросов. Такие сайты захламляют просторы Интернета и жестоко караются поисковыми системами.</li>
<li><strong>Размещение невидимого или плохо заметного текста.</strong> Размещение такого текста грозит получением фильтра от Яндекса, поисковики страницы со скрытым текстом исключают из поиска.</li>
<li><strong>Накрутка поведенческих факторов.</strong> Когда-то можно было повлиять на выдачу за счет накрутки ПФ, но сейчас поисковики умеют определять, был ли применен данный инструмент и все ли показатели естественные. Не заказывайте накрутку поведенческих факторов у посредников, ни к чему хорошему это не приведет.</li>
<li><strong>Переспам текста ключевыми запросами.</strong> Все чаще владельцы сайтов сталкиваются с фильтром Баден-Баден, борющимся с текстовым спамом. Лайфхак от копирайтеров: на 300–500 символов рекомендуется использовать 1 ключевой запрос.</li>
<li><strong>Много ссылок и кнопок на главной странице.</strong> Допустимо, если в этом есть реальная необходимость.</li>
<li><strong>Flash-анимация.</strong> Такие сайты продвигать очень трудно. Найти их в ТОПе практически невозможно, но исключения бывают. Старайтесь не строить свой ресурс полностью на flash-элементах.</li>
</ul>
<p>Каждый владелец веб-сайта должен поставить перед собой задачу не просто раскрутить свой проект, а сделать его интересным и удобным для пользователей. Сайты создаются в первую очередь для людей, а поисковые системы всячески способствуют тому, чтобы ресурсы развивались и были качественными.</p>
<h2 id="Несколько-советов-как-продвигать-сайт">Несколько советов, как продвигать сайт</h2>
<ul>
<li><strong>Уделите внимание дизайну вашего сайта и удобству для посетителей.</strong> Дизайн должен быть приятным, без ярких режущих глаз цветов. Делайте цветовую гамму размеренной, сочетайте шрифты. Создайте удобное меню, чтобы человек не ломал голову, где и что искать ему на сайте.</li>
<li><strong>Грамотно оптимизируйте контент</strong> (составьте семантическое ядро, оптимизируйте под него тексты, метатеги и пр.).</li>
<li><strong>Настройте все технические параметры</strong> (правильно подберите URL (лучше если ЧПУ будут с включением ключевых запросов), настройте файлы sitemap.xml и robots.txt для правильной индексации сайта, настройте редиректы для зеркал сайта, исключите все дубли, настройте разметку контактов и карточек товаров и т. д.).</li>
<li><strong>Добавьте сайт в Вебмастера</strong> Яндекса, Гугла, также нелишним будет добавление в Майле и Бинге.</li>
<li><strong>Займитесь узнаваемостью сайта (компании) в сети.</strong> Добавьте информацию о сайте на самые популярные площадки Интернета (Яндекс и Гугл Карты, справочники организаций (2ГИС, Фламп, Желтые страницы и др.)).</li>
<li><strong>Займитесь наращиванием ссылочной массы,</strong> но помните, что выше мы говорили о покупных и обменных ссылках. Еще один лайфхак: ссылки можно получать с помощью крауд-маркетинга, но делать это нужно правильно.</li>
<li><strong>Разработайте мобильную версию сайта.</strong> Пользователей из мобильных источников становится все больше и больше, сделайте свой ресурс удобным для просмотра на смартфонах и планшетах.</li>
<li><strong>Используйте SMM-продвижение.</strong> Продвижение в социальных сетях очень актуально в наше время. Большая ошибка — пренебрегать созданием групп в соцсетях и их продвижением.</li>
<li><strong>Всегда помните о своем проекте.</strong> Не забывайте вовремя оплачивать хостинг и домен. Если робот или пользователь зайдут на неработающий сайт из-за несвоевременной оплаты, это скажется только отрицательно. Также всегда старайтесь обновлять контент, особенно это важно для новостных ресурсов. Если на сайте есть новости, обновляйте их хотя бы раз в месяц, чтобы пользователь видел, что над ресурсом работают.</li>
</ul>
<p>Данные рекомендации общие, каждый сайт имеет свою направленность. Сайт интернет-магазина и портал продвигаются разными способами, и план раскрутки для каждого будет свой.</p></content><author><name>1ps.ru</name></author><category term="other" /><summary type="html">Задача владельцев сайтов — поднять свой ресурс на самое высокое место в поисковой выдаче. Они готовы сделать все, чтобы увидеть свой проект в ТОПе: кто-то применяет белые методы продвижения сайта, а кто-то не прочь воспользоваться и черным продвижением, лишь бы его детище было на вершине.</summary></entry><entry><title type="html">Как изменить мета теги для определенных разделов в 1С-Битрикс</title><link href="https://denisnovikov.github.io/blog/how-to-change-meta-tags-for-certain-sections-to-1c-bitrix/" rel="alternate" type="text/html" title="Как изменить мета теги для определенных разделов в 1С-Битрикс" /><published>2017-10-10T00:00:01+03:00</published><updated>2017-10-10T00:00:01+03:00</updated><id>https://denisnovikov.github.io/blog/how-to-change-meta-tags-for-certain-sections-to-1c-bitrix</id><content type="html" xml:base="https://denisnovikov.github.io/blog/how-to-change-meta-tags-for-certain-sections-to-1c-bitrix/"><p>Для того чтобы изменить шаблоны для целых разделов в битриксе, нужно всего-лишь пара строчек кода.</p>
<p>Вы уже могли читать на этом блоге <a href="http://forwww.com/bitrix-how-to-show-information-on-the-main-page/">Как отображать информацию только на главной странице</a>, а если нет — обязательно сделайте это.</p>
<p>Для более лучшего понимания статьи я также вам рекомендую прочесть <a href="http://forwww.com/how-set-meta-in-bitrix/">Как задавать мета свойства в 1С-Битрикс</a>, поверьте, сегодня нам это всё понадобится.</p>
<h2 id="Как-задать-тайтл-ключевые-слова-и-дескрипшен-для-определенного-раздела-в-битриксе">Как задать тайтл, ключевые слова и дескрипшен для определенного раздела в битриксе</h2>
<p>Для самых ленивых небольшой фрагмент кода:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">SetPageProperty</span><span class="p">(</span><span class="s2">"title"</span><span class="p">,</span> <span class="nv">$myTitle</span><span class="p">);</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">SetPageProperty</span><span class="p">(</span><span class="s2">"keywords"</span><span class="p">,</span> <span class="nv">$myKeywords</span><span class="p">);</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">SetPageProperty</span><span class="p">(</span><span class="s2">"description"</span><span class="p">,</span> <span class="nv">$myDescription</span><span class="p">);</span></code></pre></figure>
<p>Именно так можно повлиять на мета свойства <strong>title</strong>, <strong>description</strong> и <strong>keywords</strong>. Не забывайте, что вам нужно перед этим записать что-то в соответствующие переменные.</p>
<p>Ну а теперь что касается самого решения — как же можно повлиять на SEO данные?</p>
<p>Данный код помещаем в самый низ футера вашего шаблона (<em>footer.php</em>):</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span><br data-jekyll-commonmark-ghpages="" /><span class="k">if</span> <span class="p">(</span><span class="nx">CSite</span><span class="o">::</span><span class="na">InDir</span><span class="p">(</span><span class="s1">'/catalog'</span><span class="p">)</span> <span class="o">||</span> <span class="nx">CSite</span><span class="o">::</span><span class="na">InDir</span><span class="p">(</span><span class="s1">'/manufacturing'</span><span class="p">))</span><span class="o">:</span><br data-jekyll-commonmark-ghpages="" /> <span class="nv">$TITLE</span> <span class="o">=</span> <span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">sDocTitle</span><span class="p">;</span><br data-jekyll-commonmark-ghpages="" /><br data-jekyll-commonmark-ghpages="" /> <span class="nv">$myTitle</span> <span class="o">=</span> <span class="nv">$TITLE</span><span class="o">.</span><span class="s1">' – купить недорого в Москве с доставкой'</span><span class="p">;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nv">$myDescription</span> <span class="o">=</span> <span class="nv">$TITLE</span><span class="o">.</span><span class="s1">' – купить по низкой цене у лучших поставщиков.'</span><span class="p">;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">SetPageProperty</span><span class="p">(</span><span class="s2">"title"</span><span class="p">,</span> <span class="nv">$myTitle</span><span class="p">);</span><br data-jekyll-commonmark-ghpages="" /> <span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">SetPageProperty</span><span class="p">(</span><span class="s2">"description"</span><span class="p">,</span> <span class="nv">$myDescription</span><span class="p">);</span><br data-jekyll-commonmark-ghpages="" /><span class="k">endif</span><span class="p">;</span><br data-jekyll-commonmark-ghpages="" /><span class="cp">?&gt;</span></code></pre></figure>
<p>Для решения поставленной задачи мы использовали <strong>CSite::InDir</strong>, текущий заголовок мы брали при помощи <strong>$APPLICATION</strong> — в этом объекте много чего хранится, но нас интересовало лишь свойство <strong>sDocTitle</strong>.</p>
<p>Сейчас в битриксе часто используют вкладку SEO, в которой можно удобно настроить шаблоны как для элементов так и для разделов, но это уже совсем другая история.</p></content><author><name>forwww.com</name></author><category term="bitrix" /><summary type="html">Для того чтобы изменить шаблоны для целых разделов в битриксе, нужно всего-лишь пара строчек кода.</summary></entry><entry><title type="html">Open Graph разметка в 1С-Битрикс</title><link href="https://denisnovikov.github.io/blog/open-graph-markup-to-1c-bitrix/" rel="alternate" type="text/html" title="Open Graph разметка в 1С-Битрикс" /><published>2017-09-22T00:00:01+03:00</published><updated>2017-09-22T00:00:01+03:00</updated><id>https://denisnovikov.github.io/blog/open-graph-markup-to-1c-bitrix</id><content type="html" xml:base="https://denisnovikov.github.io/blog/open-graph-markup-to-1c-bitrix/"><p>Open Graph — это стандарт метатегов, разработанный соц.сетью Facebook для передачи информации различным сервисам о содержании страницы.</p>
<p>Стандартной разметкой Open Graph пользуется большинство популярных социальных сетей Facebook, Вконтакте, Google+, Twitter, LinkedIn, Pinterest и другие.</p>
<p>Данные добавляются в секцию &lt;head&gt; в виде метатегов:</p>
<figure class="highlight"><pre><code class="language-html" data-lang="html"><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:url"</span> <span class="na">content=</span><span class="s">"https://keengo.ru"</span><span class="nt">&gt;</span></code></pre></figure>
<p>В качестве свойств данной разметкой могут передаваться следующие параметры:</p>
<ul>
<li><strong>og:url</strong> — ссылка на страницу</li>
<li><strong>og:type</strong> — тип передаваемого объекта</li>
<li><strong>og:title</strong> — заголовок страницы или объекта</li>
<li><strong>og:description</strong> — описание страницы или объекта</li>
<li><strong>og:image</strong> — превью изображение</li>
</ul>
<p>Как же добавить данные параметры в шапку шаблона 1С-Битрикс, чтобы они автоматически отображали информацию текущей страницы, которой делится в соц.сети пользователь?</p>
<p>Для начала определим некоторые параметры, которые так же пригодятся для дальнейшего использования на сайте, в самом начале файла header.php вашей темы добавляем код:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span><br data-jekyll-commonmark-ghpages="" /><span class="nb">define</span><span class="p">(</span><span class="s2">"SITE_SERVER_PROTOCOL"</span><span class="p">,</span> <span class="p">(</span><span class="nx">CMain</span><span class="o">::</span><span class="na">IsHTTPS</span><span class="p">())</span> <span class="o">?</span> <span class="s2">"https://"</span> <span class="o">:</span> <span class="s2">"http://"</span><span class="p">);</span> <span class="c1">// Переменная определяет протокол, по которому работает ваш сайт<br data-jekyll-commonmark-ghpages="" /></span><span class="nv">$curPage</span> <span class="o">=</span> <span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">GetCurPage</span><span class="p">();</span> <span class="c1">// Получаем текущий адрес страницы<br data-jekyll-commonmark-ghpages="" /></span><span class="cp">?&gt;</span></code></pre></figure>
<p>Затем в секции &lt;head&gt; добавляем наши метатеги с параметрами для вывода Open Graph разметки:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:url"</span> <span class="na">content=</span><span class="s">"</span><span class="cp">&lt;?=</span><span class="nx">SITE_SERVER_PROTOCOL</span> <span class="o">.</span> <span class="nx">SITE_SERVER_NAME</span> <span class="o">.</span> <span class="nv">$curPage</span><span class="cp">?&gt;</span><span class="s">"</span><span class="nt">&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:type"</span> <span class="na">content=</span><span class="s">"website"</span><span class="nt">&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:title"</span> <span class="na">content=</span><span class="s">"</span><span class="cp">&lt;?</span><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">ShowProperty</span><span class="p">(</span><span class="s2">"title"</span><span class="p">)</span><span class="cp">?&gt;</span><span class="s">"</span><span class="nt">&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:description"</span> <span class="na">content=</span><span class="s">"</span><span class="cp">&lt;?=</span><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">ShowProperty</span><span class="p">(</span><span class="s2">"description"</span><span class="p">)</span><span class="cp">?&gt;</span><span class="s">"</span><span class="nt">&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:image"</span> <span class="na">content=</span><span class="s">"</span><span class="cp">&lt;?=</span><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">ShowProperty</span><span class="p">(</span><span class="s2">"og:image"</span><span class="p">)</span><span class="cp">?&gt;</span><span class="s">"</span><span class="nt">&gt;</span></code></pre></figure>
<p>Для вывода og:url воспользовались конструкцией, которая формирует полную ссылку на текущую страницу:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?=</span><span class="nx">SITE_SERVER_PROTOCOL</span> <span class="o">.</span> <span class="nx">SITE_SERVER_NAME</span> <span class="o">.</span> <span class="nv">$curPage</span><span class="cp">?&gt;</span></code></pre></figure>
<p>Параметр og:type в нашем случае принимает значение website.</p>
<p>Для вывода заголовка og:title и описания og:description воспользовались функцией 1С-Битрикс $APPLICATION-&gt;ShowProperty, которая является отложенной функцией и позволяет выводить информацию выше того места, где она была задана. Т.е. при формировании страницы из блока новости, в заголовок будет попадать информация из title и description текущей новости, а не стандартные параметры раздела.</p>
<p>Остается последний очень важный параметр — превью нашей записи. Изображение можно создать из детальной картинки записи, обрезав его под размер 1200х630 px и передать в параметр og:image. Но при включенном автокешировании данные перестанут передаваться, когда страница будет загружена из кеша и вся конструкция развалится. Для этого необходимо сделать следующее:</p>
<p>1) В папке с шаблоном детальной страницы создать файл <strong>result_modifier.php</strong> и в нем добавить параметры, которые будут передаваться после кеширования:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span><br data-jekyll-commonmark-ghpages="" /><span class="c1">// Создаем изображение для превью соц.сетей<br data-jekyll-commonmark-ghpages="" /></span><span class="nv">$image_social</span> <span class="o">=</span> <span class="nx">CFile</span><span class="o">::</span><span class="na">ResizeImageGet</span><span class="p">(</span><span class="nv">$arResult</span><span class="p">[</span><span class="s2">"DETAIL_PICTURE"</span><span class="p">],</span> <span class="k">array</span><span class="p">(</span><span class="s1">'width'</span><span class="o">=&gt;</span><span class="s1">'1200'</span><span class="p">,</span> <span class="s1">'height'</span><span class="o">=&gt;</span><span class="s1">'630'</span><span class="p">),</span> <span class="nx">BX_RESIZE_IMAGE_EXACT</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$arResult</span><span class="p">[</span><span class="s2">"DETAIL_PICTURE"</span><span class="p">][</span><span class="s2">"SOCIAL"</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$image_social</span><span class="p">[</span><span class="s2">"src"</span><span class="p">];</span><br data-jekyll-commonmark-ghpages="" /><br data-jekyll-commonmark-ghpages="" /><span class="c1">// Передаем данные в результат после кеширования<br data-jekyll-commonmark-ghpages="" /></span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">__component</span><span class="o">-&gt;</span><span class="na">SetResultCacheKeys</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><br data-jekyll-commonmark-ghpages="" /> <span class="s2">"DETAIL_PICTURE"</span><br data-jekyll-commonmark-ghpages="" /><span class="p">));</span><br data-jekyll-commonmark-ghpages="" /><span class="cp">?&gt;</span></code></pre></figure>
<p>2) Далее добавляем файл component_epilog.php, который формируется уже после вывода информации из кеша и в нем добавляем код, задающий изображение:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">SetPageProperty</span><span class="p">(</span><span class="s2">"og:image"</span><span class="p">,</span> <span class="nx">SITE_SERVER_PROTOCOL</span> <span class="o">.</span> <span class="nx">SITE_SERVER_NAME</span> <span class="o">.</span> <span class="nv">$arResult</span><span class="p">[</span><span class="s1">'DETAIL_PICTURE'</span><span class="p">][</span><span class="s1">'SOCIAL'</span><span class="p">]);</span><br data-jekyll-commonmark-ghpages="" /><span class="cp">?&gt;</span></code></pre></figure>
<p>Вот таким способом мы можем добавить информацию о разметке Open Graph в шапку шаблона 1С-Битрикс.</p>
<p>Поделимся еще полезной ссылкой, которая позволяет проверить вид ссылок, которые будут публиковаться в Facebook и устранить ошибки: <a href="https://developers.facebook.com/tools/debug/">https://developers.facebook.com/tools/debug/</a></p></content><author><name>keengo.ru</name></author><category term="bitrix" /><summary type="html">Open Graph — это стандарт метатегов, разработанный соц.сетью Facebook для передачи информации различным сервисам о содержании страницы.</summary></entry><entry><title type="html">Параллельное выполнение ssh команд на серверах</title><link href="https://denisnovikov.github.io/blog/parallel-execution-of-ssh-commands-on-servers/" rel="alternate" type="text/html" title="Параллельное выполнение ssh команд на серверах" /><published>2017-08-22T17:28:39+03:00</published><updated>2017-08-22T17:28:39+03:00</updated><id>https://denisnovikov.github.io/blog/parallel-execution-of-ssh-commands-on-servers</id><content type="html" xml:base="https://denisnovikov.github.io/blog/parallel-execution-of-ssh-commands-on-servers/"><p>При управлении большим количеством серверов часто приходится выполнять одну и ту же команду сразу на нескольких серверах (десятках/сотнях/тысячах).</p>
<p>Существует немало инструментов для решения этой задачи. В .io мы применяем простое решение pssh.</p>
<p>На Ubuntu этот инструмент доступен в пакетах:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="nb">sudo </span>apt-get install pssh</code></pre></figure>
<p>Перед использованием инструмента необходимо подготовить текстовые файлы с адресами серверов в формате:</p>
<figure class="highlight"><pre><code class="language-text" data-lang="text">10.10.0.1<br data-jekyll-commonmark-ghpages="" />10.10.0.2<br data-jekyll-commonmark-ghpages="" />10.10.0.3<br data-jekyll-commonmark-ghpages="" />...</code></pre></figure>
<p><em>Список IP серверов для выполнения команд с помощью pssh</em></p>
<p>Мы активно используем микросервисную архитектуру, поэтому у нас есть десятки сервисов. Поэтому мы создали общий файл со списком всех серверов и по файлу для каждого сервиса:</p>
<ul>
<li><code class="highlighter-rouge">all.txt</code> хранит список всех серверов системы. Используется крайне редко;</li>
<li><code class="highlighter-rouge">serviceX.txt</code> хранит список всех серверов конкретного сервиса.</li>
</ul>
<p>Для выполнения команды на всех серверах:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash">parallel-ssh <span class="nt">-h</span> all.txt <span class="nt">-o</span> /tmp/ssh <span class="nb">ls</span> <span class="nt">-la</span></code></pre></figure>
<p><em>Выполнит команду “ls -la” на всех серверах из файл all.txt</em></p>
<p>Результат команды будет записан в папку <code class="highlighter-rouge">/tmp/ssh</code> — в отдельный файл для каждого сервера:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># ls -la /tmp/ssh/</span><br data-jekyll-commonmark-ghpages="" /><span class="nt">-rw-r--r--</span> 1 root root 1238 Aug 22 16:46 10.10.0.1<br data-jekyll-commonmark-ghpages="" /><span class="nt">-rw-r--r--</span> 1 root root 1269 Aug 22 16:46 10.10.0.2<br data-jekyll-commonmark-ghpages="" /><span class="nt">-rw-r--r--</span> 1 root root 1110 Aug 22 16:46 10.10.0.3<br data-jekyll-commonmark-ghpages="" /><span class="nt">-rw-r--r--</span> 1 root root 950 Aug 22 16:46 10.10.0.4</code></pre></figure>
<p>Для использовании авторизации по ключам:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash">parallel-ssh <span class="nt">-h</span> all.txt <span class="nt">-x</span> <span class="s2">"-i key.rsa"</span> <span class="nt">-o</span> /tmp/ssh <span class="nb">ls</span> <span class="nt">-la</span></code></pre></figure>
<p><em>key.rsa будет использовать для доступа ко всем серверам</em></p>
<p>Вы можете вручную задать количество потоков для выполнения команд:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash">parallel-ssh <span class="nt">-h</span> all.txt <span class="nt">-p</span> 10 <span class="nt">-o</span> /tmp/ssh <span class="nb">ls</span> <span class="nt">-la</span></code></pre></figure>
<p><em>команды будут выполняться в 10 потоков</em></p>
<h2 id="tldr">TL;DR</h2>
<p>Используйте <a href="https://github.com/robinbowes/pssh">pssh</a> для выполнения команд на большом количестве серверов:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash">parallel-ssh <span class="nt">-h</span> all.txt <span class="nt">-o</span> /tmp/ssh <span class="nb">ls</span> <span class="nt">-la</span></code></pre></figure>
<p><em>В all.txt нужно добавить список серверов, каждый ip адрес на новой строке</em></p></content><author><name>ruhighload.com</name></author><category term="linux" /><summary type="html">При управлении большим количеством серверов часто приходится выполнять одну и ту же команду сразу на нескольких серверах (десятках/сотнях/тысячах).</summary></entry><entry><title type="html">Как вывести имя раздела и ссылку на него в 1С-Битрикс</title><link href="https://denisnovikov.github.io/blog/how-do-i-output-section-name-and-link-to-it-in-1c-bitrix/" rel="alternate" type="text/html" title="Как вывести имя раздела и ссылку на него в 1С-Битрикс" /><published>2017-07-05T00:00:01+03:00</published><updated>2017-07-05T00:00:01+03:00</updated><id>https://denisnovikov.github.io/blog/how-do-i-output-section-name-and-link-to-it-in-1c-bitrix</id><content type="html" xml:base="https://denisnovikov.github.io/blog/how-do-i-output-section-name-and-link-to-it-in-1c-bitrix/"><p>Зная ID раздела, в битриксе очень просто вывести его имя, а также узнать, по какой ссылке он доступен.</p>
<p>Ссылка формируется из настроек инфоблока. Чтобы все ваши ссылки отображались корректно, настройки внутри инфоблока и вашего компонента должны совпадать.</p>
<p>Для того чтобы вывести имя раздела будем использовать <strong>API Битрикса</strong>.</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$res</span> <span class="o">=</span> <span class="nx">CIBlockSection</span><span class="o">::</span><span class="na">GetByID</span><span class="p">(</span><span class="nv">$arItem</span><span class="p">[</span><span class="s1">'IBLOCK_SECTION_ID'</span><span class="p">]);</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ar_res</span> <span class="o">=</span> <span class="nv">$res</span><span class="o">-&gt;</span><span class="na">GetNext</span><span class="p">();</span><br data-jekyll-commonmark-ghpages="" /><span class="cp">?&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"</span><span class="cp">&lt;?</span> <span class="k">echo</span> <span class="nv">$ar_res</span><span class="p">[</span><span class="s1">'SECTION_PAGE_URL'</span><span class="p">];</span> <span class="cp">?&gt;</span><span class="s">"</span><span class="nt">&gt;</span><span class="cp">&lt;?</span> <span class="k">echo</span> <span class="nv">$ar_res</span><span class="p">[</span><span class="s1">'NAME'</span><span class="p">];</span> <span class="cp">?&gt;</span><span class="nt">&lt;/a&gt;</span></code></pre></figure>
<ul>
<li><strong>$arItem[‘IBLOCK_SECTION_ID’]</strong> — ID раздела, имя которого мы хотим вывести;</li>
<li><strong>$ar_res[‘SECTION_PAGE_URL’]</strong> — ссылка на раздел;</li>
<li><strong>$ar_res[‘NAME’]</strong> — имя раздела.</li>
</ul></content><author><name>forwww.com</name></author><category term="bitrix" /><summary type="html">Зная ID раздела, в битриксе очень просто вывести его имя, а также узнать, по какой ссылке он доступен.</summary></entry><entry><title type="html">Как в шаблоне выводить информацию на всех страницах, кроме главной</title><link href="https://denisnovikov.github.io/blog/as-in-template-display-information-on-all-pages-except-main-one-to-1c-bitrix/" rel="alternate" type="text/html" title="Как в шаблоне выводить информацию на всех страницах, кроме главной" /><published>2017-06-20T00:00:01+03:00</published><updated>2017-06-20T00:00:01+03:00</updated><id>https://denisnovikov.github.io/blog/as-in-template-display-information-on-all-pages-except-main-one-to-1c-bitrix</id><content type="html" xml:base="https://denisnovikov.github.io/blog/as-in-template-display-information-on-all-pages-except-main-one-to-1c-bitrix/"><p>Очень часто бывает ситуация когда нам нужно вывести информацию для всех разделов сразу, но исключив корневую страницу. Рассмотрим пример как это сделать.</p>
<h2 id="1С-Битрикс--Как-вывести-блок-с-заголовком-для-всех-страниц-кроме-главной">1С-Битрикс — Как вывести блок с заголовком для всех страниц кроме главной</h2>
<p>Необходимо создать условие — <strong>показывать код на всех страницах кроме главной</strong>. Этот код можно записать в шаблоне вашего сайта.</p>
<p>Код для header.php нашего шаблона:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">GetCurPage</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span> <span class="o">!=</span> <span class="nx">SITE_DIR</span><span class="p">)</span><span class="o">:</span> <span class="cp">?&gt;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nt">&lt;section</span> <span class="na">class=</span><span class="s">"main"</span><span class="nt">&gt;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"container"</span><span class="nt">&gt;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nt">&lt;h1&gt;</span><span class="cp">&lt;?</span><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">ShowTitle</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span><span class="cp">?&gt;</span><span class="nt">&lt;/h1&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="cp">&lt;?</span> <span class="k">endif</span><span class="p">;</span> <span class="cp">?&gt;</span></code></pre></figure>
<p>Код для <strong>footer.php</strong> шаблона:</p>
<figure class="highlight"><pre><code class="language-php" data-lang="php"><span class="cp">&lt;?</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$APPLICATION</span><span class="o">-&gt;</span><span class="na">GetCurPage</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span> <span class="o">!=</span> <span class="nx">SITE_DIR</span><span class="p">)</span><span class="o">:</span> <span class="cp">?&gt;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nt">&lt;/div&gt;</span><br data-jekyll-commonmark-ghpages="" /> <span class="nt">&lt;/section&gt;</span><br data-jekyll-commonmark-ghpages="" /><span class="cp">&lt;?</span> <span class="k">endif</span><span class="p">;</span> <span class="cp">?&gt;</span></code></pre></figure>
<p>Мы используем <strong>GetCurPage</strong> и выводим заголовок только на тех страницах, на которых соблюдается условие. <strong>SITE_DIR</strong> — константа, которая отвечает за папку сайта (чаще всего используется в многосайтовости). Таким образом можно править код шаблона в 1С-Битрикс, и применять данный метод в своих скриптах и компонентах.</p></content><author><name>forwww.com</name></author><category term="bitrix" /><summary type="html">Очень часто бывает ситуация когда нам нужно вывести информацию для всех разделов сразу, но исключив корневую страницу. Рассмотрим пример как это сделать.</summary></entry><entry><title type="html">Oh My Zsh!</title><link href="https://denisnovikov.github.io/blog/oh-my-zsh/" rel="alternate" type="text/html" title="Oh My Zsh!" /><published>2017-06-19T14:36:00+03:00</published><updated>2017-06-19T14:36:00+03:00</updated><id>https://denisnovikov.github.io/blog/oh-my-zsh</id><content type="html" xml:base="https://denisnovikov.github.io/blog/oh-my-zsh/"><p>Хочу поделиться очень отличным шелом, а по большей части, фреймворком созданным для него, который превратит вашу консоль в очень информативный и продуктивный инструмент.</p>
<p>Данный материал пригодет только для пользователей unix-подобных систем, а именно Linux и MacOS. На MacOS не знаю что да как, но судя по всему установка и настройка совершенно не отличаются друг от друга. Соответственно его можно ставить и на веб-сервера.</p>
<h2 id="Что-это-и-зачем-оно">Что это и зачем оно</h2>
<p>Немного введу в курс дела, чтобы вы понимали что это такое и что оно даст. Во-первых, потребуется установить новую оболочку для терминала Zsh и переключиться на неё (кто не в курсе, они живут рядом с друг-другом и не затирают аналоги, так что можно всегда вернуться обратно, например на bash в ubuntu, + можно каждому юзеру выбирать свою, так что это совершенно безопасно). Во-вторых, мы поставим фреймворк для Zsh, который позволяет писать различные плагины, темы и т.д. для данной оболочки, что, собственно, и делает её такой удобой, так как люди написали кучу годноты.</p>
<p><a href="/assets/images/linux/oh-my-zsh/oh-my-zsh-01.png"><img src="/assets/images/linux/oh-my-zsh/oh-my-zsh-01.png" alt="Пример с GitHub" /></a></p>
<p>Я не могу вам описать всех возможностей, ибо некоторые из них не так заметны и не сразу бросаются в глаза. Например, при указании пути до файла\папки Tab в Zsh, делает то же самое что и в bash, но куда круче, а я заметил это спустя неделю, так как не обращал внимания. Он мало того что может учитывать регистры папок и поправлять вас, так и список папок также можно визуально перебирать табом, что просто очень удобно и ускоряет работу.</p>
<p>Я вообще изначально ставил данный шелл и фреймворк только ради Git плагина, который показывает (если вы находитесь в папках с репозиторием), актуально ли текущее состояние репозитория, в какой ветке находимся, имеются ли новые изменения в файлах, есть ли коммиты или изменения. В общем всю необходимую информацию. Не нужно проверять ветку через <code class="highlighter-rouge">git branch -v</code>, проверять есть ли изменения через <code class="highlighter-rouge">git status</code> и т.д.</p>
<p>У него есть куча интеграций с различными программами и системными утилитами, которые позволяют сделать работу с терминалом намного, намного приятнее. Ведь, особенно, с Drupal 8, работать с ним нужно все чаще и больше.</p>
<h2 id="Установка-zsh-и-oh-my-zsh">Установка Zsh и Oh My Zsh</h2>
<p>Первым делом нужно установить оболочку Zsh, для этого в Ubuntu необходимо просто запросить данный пакет, так как он находится в официальных репозиториях:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="nb">sudo </span>apt install zsh</code></pre></figure>
<p>Далее нам необходимо поставить фреймворк <a href="https://github.com/robbyrussell/oh-my-zsh">Oh My Zsh</a>. Разработчики предлагают два варианта установки, по сути они одинаковые, вам просто предоставляется выбор как вытянуть скрипт установщика, <code class="highlighter-rouge">wget</code> или <code class="highlighter-rouge">curl</code>, это лишь важно в тех случаях, когда на системе нет одного из них (частенько можно встретить отсутствие curl), и вы не хотите ставить пакет ради этого, или нет прав. Я также пишу вам два варианта, а какой использовать решайте сами:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># curl</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>sh <span class="nt">-c</span> <span class="s2">"</span><span class="k">$(</span>curl <span class="nt">-fsSL</span> https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh<span class="k">)</span><span class="s2">"</span><br data-jekyll-commonmark-ghpages="" /><span class="c"># wget</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>sh <span class="nt">-c</span> <span class="s2">"</span><span class="k">$(</span>wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh <span class="nt">-O</span> -<span class="k">)</span><span class="s2">"</span></code></pre></figure>
<p>После данной установки, у вас запросят пароль чтобы переключить шел для текущего пользователя на Zsh. Вводим, и всё готово!</p>
<p><a href="/assets/images/linux/oh-my-zsh/oh-my-zsh-02.png"><img src="/assets/images/linux/oh-my-zsh/oh-my-zsh-02.png" alt="Oh My Zsh после установки" /></a></p>
<p>Из коробки он хоть уже и дает больше информации, как по мне, он выглядит хуже оригинального. Для этого в OMZ есть поддержка тем и плагинов, которые могут в корне менять оболочку.</p>
<h2 id="Где-и-что-находится">Где и что находится</h2>
<p>Данный раздел я не мог упустить так как он может очень сильно помочь в дальнейшем. Фреймворк Oh My Zsh находится в папке ~/.oh-my-zsh — там, в свою очередь, находятся все файлы фреймворка. А сама папка ничто иное как репозиторий Oh My Zsh. Но удалять папку просто так не стоит, там для этого есть специальный скрипт, ниже напишу как.</p>
<p>Все настройки для Oh My Zsh находятся в файле ~/.zshrc. О нем подробнее будет ниже.</p>
<h2 id="Установка-плагинов">Установка плагинов</h2>
<p>Начнем с установки нужных нам плагинов. Из коробки там стоит только git, больше никакие плагины не активированы. Список всех додступных плагинов поставляемых с фреймворком можно посмотреть на <a href="https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins">странице wiki</a>, с описанием для чего они используются.</p>
<p>Например я хочу поставить себе следующие плагины:</p>
<ul>
<li><strong>npm</strong> — добавлят поддержку автодополнения к команде npm</li>
<li><strong>vagrant</strong> — так как я часто пользуюсь vagrant из-за Drupal VM, то мне он тоже не помешает. Также как и npm добавляет поддержку автодополнения. Там же есть и <strong>docker</strong>;</li>
<li><strong>composer</strong> — в 8-ке очень активно использую composer, а данный плагин опять же, добавляет автодополнение, и помимо этого различные полезные синонимы команд. Например <code class="highlighter-rouge">cu</code> = <code class="highlighter-rouge">composer update</code>;</li>
<li><strong>sudo</strong> — частенько бывает и такое, что вбиваешь или копируешь команду из интернета, но для неё требуются права супер-пользователя. Постоянно переводить курсор и дописывать муторно, а данный плагин позволяет просто нажать два раза <code class="highlighter-rouge">Esc</code>, и он сам добавит sudo в начало команды;</li>
<li><strong>web-search</strong> — а иногда случается ситуация, что роешься в консоли и забыл какую-то команду, нужно гуглануть, и чтобы не переключаться на браузер, не кликать на строку поиска, данный плагин позволяет написать <code class="highlighter-rouge">google drupal 8 composer</code>, и в браузере по умолчанию сразу откроются результаты.</li>
</ul>
<p>Там куча других плагинов, можно писать свои, выбирайте на свой вкус и под свои задачи, я продолжу гайд как поставить указаныне выше плагины (остальные ставятся абсолютно также).</p>
<p>Для того чтобы включить данные плагины (они уже есть в комплекте), достаточно отредактировать файл <code class="highlighter-rouge">~/.zshrc</code>. Для этого, в ubuntu, достаточно написать <code class="highlighter-rouge">nano ~/.zshrc</code> или <code class="highlighter-rouge">vi ~/.zshrc</code>, что вам удобнее. Открываем данный файл на редактирование и ищем строку <code class="highlighter-rouge">plugins=(git)</code> и добавляем туда все нужные нам плагины, учитывая список выше, вышло следующее: <code class="highlighter-rouge">plugins=(git npm vagrant composer sudo web-search)</code>. После изменения данного файла, <strong>всегда</strong> необходимо прописывать <code class="highlighter-rouge">source ~/.zshrc</code>, иначе изменения вступят в силу только после перезагрузки.</p>
<h2 id="Установка-тем-оформления">Установка тем оформления</h2>
<p>Из коробки оформление Zsh кому-то может и приглянуться, но мне оно не зашло. Называется она <code class="highlighter-rouge">robbyrussell</code>. Но есть куча других тем, по ссылке <a href="https://github.com/robbyrussell/oh-my-zsh/wiki/themes">полный список тем</a> которые идут в комплекте Oh My Zsh.</p>
<p>Я покажу как включать темы на примере оформления <strong>agnoster</strong>, так как оно больше всего мне по душе и иногда также требует дополнительных действий для корректной работы.</p>
<p>Для включеня данной темы нам опять, достаточно открыть <code class="highlighter-rouge">~/.zshrc</code> файли найти строку <code class="highlighter-rouge">ZSH_THEME="robbyrussell"</code> и заменить стандартную тему на нужную, в моем случае <code class="highlighter-rouge">agnoster</code>, итого получается <code class="highlighter-rouge">ZSH_THEME="agnoster"</code>. Не забываем про <code class="highlighter-rouge">source ~/.zshrc</code>. И всё уже работает!</p>
<p><a href="/assets/images/linux/oh-my-zsh/oh-my-zsh-03.png"><img src="/assets/images/linux/oh-my-zsh/oh-my-zsh-03.png" alt="Установленая тема: agnoster" /></a></p>
<p>Если у вас вместо иконок Git или нету “уголков” в строке навигации, то вам нужно поставить спец. шрифты с данными иконками. Множество тем требует установки данных шрифтов, они никак не помешают, но будет работать как нужно. Если всё как и на скринах - ставить не нужно, если же нет, то ниже инструкция для вас.</p>
<p>Давайте установим <a href="https://github.com/powerline/fonts">пропатченные шрифты</a>:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># clone</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>git clone https://github.com/powerline/fonts.git<br data-jekyll-commonmark-ghpages="" /><span class="c"># install</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span><span class="nb">cd </span>fonts<br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>./install.sh<br data-jekyll-commonmark-ghpages="" /><span class="c"># clean-up a bit</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span><span class="nb">cd</span> ..<br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>rm <span class="nt">-rf</span> fonts</code></pre></figure>
<p>Этого уже будет достаточно, можно работать. Но некоторые моменты я ещё затрону.</p>
<h2 id="Настройки">Настройки</h2>
<p>Я их не правлю, но выписал с обьяснением чтобы было проще ориентироваться. Напоминаю что все они в <code class="highlighter-rouge">~/.zshrc</code>. Если настройка закомментирована, то вы можете расскоментировать её удалив <code class="highlighter-rouge">#</code>, то что указано в значении которое закомментировано - является противоположным значению по умолчанию.</p>
<ul>
<li><strong>CASE_SENSITIVE=”true”</strong> — чуствительность к регистру. Как я указал в начале статьи, он сам может исправлять регистр если видит что в текущем ничего не найдено. Если это мешает, установив данный параметр в true, поведение будет привычное bash;</li>
<li><strong>HYPHEN_INSENSITIVE=”true”</strong> — включает автоматическую замену между “_” и “-“. Аналогично параметру выше, но касается только дефиса и подчеркивания;</li>
<li><strong>DISABLE_AUTO_UPDATE=”true”</strong> — позволяет отключить автоматическое обновления Oh My Zsh;</li>
<li><strong>export UPDATE_ZSH_DAYS=13</strong> — задает переодично проверки обновлений;</li>
<li><strong>DISABLE_LS_COLORS=”true”</strong> — позволяте отключить цветовую палитру при выводе команды <code class="highlighter-rouge">ls</code>;</li>
<li><strong>DISABLE_AUTO_TITLE=”true”</strong> — отключение автоматического заголовка терминала;</li>
<li><strong>ENABLE_CORRECTION=”true”</strong> — включает корректировку команд. Например, вводя <code class="highlighter-rouge">compozer</code> он выдаст запрос: <code class="highlighter-rouge">correct 'compozer' to 'composer'?</code>;</li>
<li><strong>COMPLETION_WAITING_DOTS=”true”</strong> — включает точки ожидания ввода аргументов. Например введя <code class="highlighter-rouge">composer</code> и нажав <code class="highlighter-rouge">Tab</code>, он будет перебирать доступные команды (из-за одноименного плагина), а если ввести <code class="highlighter-rouge">java</code> и нажать таб, у него нет вариантов автодополнения (они будут появляться по мере их успешнного ввода в терминале и кэшироваться) он будет отображать красные точки для обязательного ввода которые можно отменить только <kbd>Ctrl + C</kbd>;</li>
<li><strong>DISABLE_UNTRACKED_FILES_DIRTY=”true”</strong> — отключает пометку неиспользуемых файлов в пределе Git репозитория как “гразных”, что увеличивает скорость скана для git. Не могу сказать точнее что это и как это работает, но это напрямую связанно с git вообще, а не только плагином;</li>
<li><strong>HIST_STAMPS=”mm/dd/yyyy”</strong> — позволяет менять формат даты для команды <code class="highlighter-rouge">history</code>;</li>
<li><strong>ZSH_CUSTOM=/path/to/new-custom-folder</strong> — позволяет добавить дополнительный путь до папки где будут храниться кастомные плагины и темы. По дефолту <code class="highlighter-rouge">~/.oh-my-zsh/custom</code>, она также будет функционаривать, т.е. параметр не перезатерающийся.</li>
</ul>
<h2 id="Фиксим-проблему-с-path">Фиксим проблему с PATH</h2>
<p>В Linux (не знаю как в MacOS), и в текущей версии я такой проблемы не словил, есть или можеть быть проблема что вы вбиваете команду в Zsh, а он говорит её нет. И это нормальное поведение, ведь в момент установки у вас был другой шелл, и возможно путь до бинарника указан в его индивидуальных настройках. Чтобы это исправить, достаточно указать путь до папки с бинарником(ами) в PATH переменную системы. Но bash’овский вариант <code class="highlighter-rouge">export PATH=/usr/local/bin:$PATH</code> прокатит до перезагрузки.</p>
<p>Вариант первый, это в файле конфига <code class="highlighter-rouge">~/.zshrc</code> раскомментировать соответсвующую строку в самом начале и добавить нужные пути, либо добавить их прямо из терминала:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># Добавить в конец переменной</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>path+<span class="o">=(</span><span class="s1">'/home/USERNAME/SOMEPATH/bin'</span><span class="o">)</span><br data-jekyll-commonmark-ghpages="" /><span class="c"># Добавить в начало переменной</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ path</span><span class="o">=(</span><span class="s1">'/home/USERNAME/SOMEPATH/bin'</span> <span class="nv">$path</span><span class="o">)</span><br data-jekyll-commonmark-ghpages="" /><span class="c"># Отгрузить новую переменную</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span><span class="nb">export </span>PATH</code></pre></figure>
<h2 id="Удаляем-oh-my-zsh">Удаляем Oh My Zsh</h2>
<p>Если вам потребуется полностью удалить Oh My Zsh и сам шелл с системы, то это делается достаточно просто:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># Удаляем Oh My Zsh и всё что с ним связано</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span>uninstall_oh_my_zsh<br data-jekyll-commonmark-ghpages="" /><span class="c"># Удаляем Zsh</span><br data-jekyll-commonmark-ghpages="" /><span class="nv">$ </span><span class="nb">sudo </span>apt uninstall zsh</code></pre></figure></content><author><name>niklan.net</name></author><category term="linux" /><summary type="html">Хочу поделиться очень отличным шелом, а по большей части, фреймворком созданным для него, который превратит вашу консоль в очень информативный и продуктивный инструмент.</summary></entry><entry><title type="html">Скачать Видео с YouTube из Командной Строки в Linux</title><link href="https://denisnovikov.github.io/blog/download-youtube-videos-from-command-line-in-linux/" rel="alternate" type="text/html" title="Скачать Видео с YouTube из Командной Строки в Linux" /><published>2017-06-09T16:18:27+03:00</published><updated>2017-06-09T16:18:27+03:00</updated><id>https://denisnovikov.github.io/blog/download-youtube-videos-from-command-line-in-linux</id><content type="html" xml:base="https://denisnovikov.github.io/blog/download-youtube-videos-from-command-line-in-linux/"><p>Мы можем скачивать видеофайлы с YouTube из <strong>командной строки в Linux</strong> с помощью программы <strong>youtube-dl</strong>.</p>
<p>Это небольшая консольная утилита, которая умеет <strong>скачивать видео с youtube.com</strong> и еще ряда сайтов.</p>
<p>В данной статье вы найдете информацию о том, как в зависимости от используемого <strong>Linux</strong> дистрибутива, <strong>установить загрузчик для YouTube</strong>.</p>
<p>Также, вы узнаете как из командной строки в Linux <strong>загрузить видео, канал или плейлист с YouTube</strong> в определенном качестве и формате.</p>
<h2 id="Установка-youtube-Загрузчика-в-linux">Установка YouTube Загрузчика в Linux</h2>
<blockquote>
<p><strong>Самый простой способ:</strong> Один из самых простых способов установки последней версии <code class="highlighter-rouge">youtube-dl</code> — с помощью утилиты для командной строки, под названием <code class="highlighter-rouge">pip</code> — установщик python приложений.</p>
</blockquote>
<h3 id="linux-mint-ubuntu-debian">Linux Mint, Ubuntu, Debian</h3>
<p>Установите <code class="highlighter-rouge">pip</code>:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="nb">sudo </span>apt-get install python-pip</code></pre></figure>
<p>Установите <code class="highlighter-rouge">youtube-dl</code> в <strong>Linux Mint</strong>, <strong>Ubuntu</strong> или <strong>Debian</strong>:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="nb">sudo </span>pip install <span class="nt">--upgrade</span> youtube_dl</code></pre></figure>
<h3 id="centos-rhel">CentOS, RHEL</h3>
<p>В базовых репозиториях <strong>CentOS</strong> и <strong>RHEL</strong> пакет <code class="highlighter-rouge">pip</code> отсутствует, но он может быть взят из EPEL.
Установите <code class="highlighter-rouge">pip</code> после добавления EPEL репозитория:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="nb">sudo </span>yum install python-pip</code></pre></figure>
<p>Установите <code class="highlighter-rouge">youtube-dl</code> в <strong>CentOS</strong> или <strong>RHEL</strong>:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span><span class="nb">sudo </span>pip install <span class="nt">--upgrade</span> youtube_dl</code></pre></figure>
<h2 id="Скачать-Видео-с-youtube-в-linux">Скачать Видео с YouTube в Linux</h2>
<blockquote>
<p><strong>Полезная информация:</strong> По умолчанию, <code class="highlighter-rouge">youtube-dl</code> скачивает видеофайл в лучшем качестве и формате.</p>
</blockquote>
<p>Чтобы скачать видео с YouTube, просто запустите <code class="highlighter-rouge">youtube-dl</code>, как показано ниже:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl &lt;VIDEO URL&gt;</code></pre></figure>
<p>Например, чтобы скачать <a href="https://www.youtube.com/watch?v=hTWKbfoikeg">Nirvana — Smells Like Teen Spirit</a>, выполните:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl https://www.youtube.com/watch?v<span class="o">=</span>hTWKbfoikeg</code></pre></figure>
<h3 id="Качество-и-Форматы">Качество и Форматы</h3>
<p>Используйте опцию <code class="highlighter-rouge">-F</code> для отображения списка всех доступных форматов:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-F</span> https://www.youtube.com/watch?v<span class="o">=</span>hTWKbfoikeg<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>youtube] Setting language<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>youtube] hTWKbfoikeg: Downloading webpage<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>youtube] hTWKbfoikeg: Downloading video info webpage<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>youtube] hTWKbfoikeg: Extracting video information<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>youtube] hTWKbfoikeg: Encrypted signatures detected.<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>youtube] hTWKbfoikeg: Downloading js player vflBb0OQx<br data-jekyll-commonmark-ghpages="" /><span class="o">[</span>info] Available formats <span class="k">for </span>hTWKbfoikeg:<br data-jekyll-commonmark-ghpages="" />format code extension resolution note <br data-jekyll-commonmark-ghpages="" />171 webm audio only DASH audio , audio@ 48k <span class="o">(</span>worst<span class="o">)</span><br data-jekyll-commonmark-ghpages="" />140 m4a audio only DASH audio , audio@128k<br data-jekyll-commonmark-ghpages="" />160 mp4 144p DASH video , video only<br data-jekyll-commonmark-ghpages="" />133 mp4 240p DASH video , video only<br data-jekyll-commonmark-ghpages="" />242 webm 240p DASH video , video only<br data-jekyll-commonmark-ghpages="" />17 3gp 176x144<br data-jekyll-commonmark-ghpages="" />36 3gp 320x240<br data-jekyll-commonmark-ghpages="" />5 flv 400x240<br data-jekyll-commonmark-ghpages="" />18 mp4 640x360<br data-jekyll-commonmark-ghpages="" />43 webm 640x360 <span class="o">(</span>best<span class="o">)</span></code></pre></figure>
<p>Как видите, YouTube хранит видеофайлы в разных форматах и разрешениях.</p>
<p>Чтобы скачать видеофайл определенного формата, используйте опцию <code class="highlighter-rouge">-f</code> с кодом формата (<code class="highlighter-rouge">format code</code>).
Код формата можно узнать из вывода предыдущей команды.</p>
<p>Например, если мы хотим скачать видео с YouTube в формате <code class="highlighter-rouge">FLV</code> и разрешением <code class="highlighter-rouge">400x240</code>, нам необходимо указать в качестве кода формата цифру <code class="highlighter-rouge">5</code>:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-f</span> 5 https://www.youtube.com/watch?v<span class="o">=</span>hTWKbfoikeg</code></pre></figure>
<h2 id="Скачать-Список-Видеофайлов-с-youtube">Скачать Список Видеофайлов с YouTube</h2>
<p>Чтобы скачать несколько видеофайлов с YouTube, создайте список ссылок <code class="highlighter-rouge">links.txt</code> и запустите <code class="highlighter-rouge">youtube-dl</code> следующим образом:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-a</span> links.txt</code></pre></figure>
<h2 id="Скачать-Канал-с-youtube">Скачать Канал с YouTube</h2>
<p>Скачать весь канал какого-либо пользователя <code class="highlighter-rouge">USER</code> с YouTube:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-citw</span> ytuser:&lt;USER&gt;</code></pre></figure>
<p>Например, чтобы скачать весь канал пользователя <a href="https://www.youtube.com/user/NirvanaVEVO">NirvanaVEVO</a>, выполните:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-citw</span> ytuser:NirvanaVEVO</code></pre></figure>
<h2 id="Скачать-Плейлист-с-youtube">Скачать Плейлист с YouTube</h2>
<p>Скачать все видеофайлы с какого-либо плейлиста на YouTube:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-citw</span> &lt;PLAYLIST URL&gt;</code></pre></figure>
<p>Например, чтобы скачать весь плейлист <a href="https://www.youtube.com/playlist?list=PL71D5FDBC8F7CA3B8">Nirvana</a>, выполните:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>youtube-dl <span class="nt">-citw</span> https://www.youtube.com/playlist?list<span class="o">=</span>PL71D5FDBC8F7CA3B8</code></pre></figure>
<p>Чтобы узнать больше о возможностях <code class="highlighter-rouge">youtube-dl</code> — читайте man:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>man youtube-dl</code></pre></figure></content><author><name>shellhacks.com</name></author><category term="shell" /><summary type="html">Мы можем скачивать видеофайлы с YouTube из командной строки в Linux с помощью программы youtube-dl.</summary></entry><entry><title type="html">Принципы дизайна для снижения когнитивной нагрузки</title><link href="https://denisnovikov.github.io/blog/design-principles-to-reduce-cognitive-load/" rel="alternate" type="text/html" title="Принципы дизайна для снижения когнитивной нагрузки" /><published>2017-06-07T21:15:00+03:00</published><updated>2017-06-07T21:15:00+03:00</updated><id>https://denisnovikov.github.io/blog/design-principles-to-reduce-cognitive-load</id><content type="html" xml:base="https://denisnovikov.github.io/blog/design-principles-to-reduce-cognitive-load/"><p>Когнитивная нагрузка — ментальное усилие, необходимое для произведения любого действия. Это конечный ресурс, поэтому пользовательский интерфейс должен быть спроектирован так, чтобы минимизировать когнитивную нагрузку для пользователя.</p>
<p>Следуя перечисленным принципам, вы сможете значительно уменьшить когнитивную нагрузку, а также сконцентрировать внимание пользователя на тех элементах, которые действительно важны в каждый определенный момент. Важно помнить, что у пользователя всегда есть цель, будь то покупка товара, усвоение информации, или просто потребление контента. Чем меньше пользователю необходимо думать о способах достижения цели, тем вероятнее цель будет достигнута.</p>
<h2 id="Принципы">Принципы</h2>
<ol>
<li>Избегайте ненужных элементов;</li>
<li>Пользуйтесь шаблонами;</li>
<li>Исключайте лишние задачи;</li>
<li>Ограничивайте выбор;</li>
<li>Группируйте варианты выбора;</li>
<li>Стремитесь к читаемости;</li>
<li>Используйте иконки с осторожностью.</li>
</ol>
<h3 id="1-Избегайте-ненужных-элементов">1. Избегайте ненужных элементов</h3>
<p>Как и в любом дизайне, в проектировании UI меньше значит больше. Любой элемент, который не помогает пользователю достичь цели, работает против него, потому что пользователь вынужден отвлекаться на ненужный элемент, помнить о нём наряду с полезными элементами. Отказ от избыточных цветов, изображений, визуальных эффектов и слоев имеет решающее значение. Но тут стоит оговориться — не гонитесь за простотой за счёт понятности.</p>
<h3 id="2-Пользуйтесь-шаблонами">2. Пользуйтесь шаблонами</h3>
<p>Используя шаблоны там, где это уместно, вы даете в руки пользователю знакомые инструменты. Это снижает количество новой информации, которую пользователь должен усвоить для достижения цели, соответственно приближая пользователя к цели.</p>
<h3 id="3-Исключайте-лишние-задачи">3. Исключайте лишние задачи</h3>
<p>Всякий раз, когда вы требуете от пользователя усвоить контент или принять решение — вы увеличивает когнитивную нагрузку. Когда это только возможно, старайтесь избавить пользователя от лишних задач, чтобы ему было проще фокусироваться на достижении цели. Когда невозможно полностью избавиться от лишних задач, как правило, есть возможность установить настройки по умолчанию, которые могут быть отредактированы при необходимости, либо задействовать ранее полученную информацию. Некоторые компании в таких случаях идут на шаг впереди, применяя упреждающий дизайн.</p>
<h3 id="4-Ограничивайте-выбор">4. Ограничивайте выбор</h3>
<p>Наша оперативная память ограничена. Сталкиваясь с большим количеством вариантов, когнитивная нагрузка возрастет из-за проблемы выбора. Важно минимизировать количество вариантов, между которыми может выбирать пользователь в каждый конкретный момент. Особенно обратите внимание на навигацию, формы и выпадающие меню.</p>
<h3 id="5-Группируйте-варианты-выбора">5. Группируйте варианты выбора</h3>
<p>Когда варианты, между которыми должен выбирать пользователь, разнесены по нескольким группам, пользователь может принять одну из групп за всё поле выбора. В таком случае выбор будет не только ограниченным, но и более сложным, так как будет доступна только часть всех вариантов. Всегда объединяйте варианты выбора в одну группу — это поможет избежать лишней когнитивной нагрузки.</p>
<h3 id="6-Стремитесь-к-читаемости">6. Стремитесь к читаемости</h3>
<p>Просто разборчиво писать текст недостаточно — необходимо сделать его легким для восприятия. Типографика должна быть эстетически приятной, подходить под контент и быть легкочитаемой, а дизайн — незаметным. Чем меньше моментов будет отвлекать пользователя, тем легче ему будет понять контент.</p>
<h3 id="7-Используйте-иконки-с-осторожностью">7. Используйте иконки с осторожностью</h3>
<p>Исследования показали, что иконографика тяжело запоминается, и, вопреки нашему интуитивному представлению, может увеличить когнитивную нагрузку, направленную на распознавание смысла. В то время как общепринятые иконки работают хорошо (такие как «печать», «закрыть», «воспроизвести/остановить», «ответить, «твитнуть», «поделиться»), узнаваемость остальных построена на обращении к прошлому опыту пользователя, в котором не может быть никаких стандартов. Чтобы избежать двусмысленности при использовании иконок, комбинируйте их с надписями.</p></content><author><name>awdee.ru</name></author><category term="front-end" /><summary type="html">Когнитивная нагрузка — ментальное усилие, необходимое для произведения любого действия. Это конечный ресурс, поэтому пользовательский интерфейс должен быть спроектирован так, чтобы минимизировать когнитивную нагрузку для пользователя.</summary></entry><entry><title type="html">Как ускорить gzip сжатие?</title><link href="https://denisnovikov.github.io/blog/how-to-speed-up-gzip-compression/" rel="alternate" type="text/html" title="Как ускорить gzip сжатие?" /><published>2017-04-25T12:44:27+03:00</published><updated>2017-04-25T12:44:27+03:00</updated><id>https://denisnovikov.github.io/blog/how-to-speed-up-gzip-compression</id><content type="html" xml:base="https://denisnovikov.github.io/blog/how-to-speed-up-gzip-compression/"><p>Когда нужно сжимать большие объемы текста на мощном железе, gzip может работать не так эффективно, как хотелось бы. Gzip работает в 1 поток и эффективно будет использовать только одно ядро.</p>
<p>Есть несколько альтернативных утилит, которые сжимают файлы используя все ядра. Одна из них — <a href="http://zlib.net/pigz/">pigz</a>. Установить ее можно из пакетов:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash">apt-get install pigz</code></pre></figure>
<p>Для сравнения мы взяли текстовый файл на <code class="highlighter-rouge">4.6Гб</code> и запускали оба архиватора на 8-ядерном сервере:</p>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># Обычный gzip</span><br data-jekyll-commonmark-ghpages="" />gzip test.txt<br data-jekyll-commonmark-ghpages="" />...<br data-jekyll-commonmark-ghpages="" /><span class="k">done in </span>25.1s</code></pre></figure>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># Многопоточный pigz</span><br data-jekyll-commonmark-ghpages="" />pigz test.txt<br data-jekyll-commonmark-ghpages="" />...<br data-jekyll-commonmark-ghpages="" /><span class="k">done in </span>7.5s</code></pre></figure>
<blockquote>
<p>pigz отработал <strong>в 4</strong> раза быстрее</p>
</blockquote>
<p>Есть и <a href="https://github.com/klauspost/pgzip">другие инструменты сжатия</a>, которые используют современные процессоры намного эффективнее стандартного gzip’a.</p></content><author><name>ruhighload.com</name></author><category term="linux" /><summary type="html">Когда нужно сжимать большие объемы текста на мощном железе, gzip может работать не так эффективно, как хотелось бы. Gzip работает в 1 поток и эффективно будет использовать только одно ядро.</summary></entry></feed>