Как мы автоматизировали ежедневный твит проекта 100DaysOfCode

Как мы автоматизировали ежедневный твит проекта 100DaysOfCode
В этом посте я покажу вам способ сделать автоматический твит о прогрессе в испытании #100DaysOfCode Challenge. После этого у вас останется больше времени на разработку. Супер, да?

Это день 007 нашего испытания 100 Days of Code. Весь код проекта хранится здесь.

Подготовка

Итак, нам понадобятся pytz, tweepy и requests. Вы можете установить их все разом командой:

pip install -r requirements.txt если вы склонировали репозиторий. Также рекомендую использовать virtualenv для изоляции окружений.

Вам также понадобятся Consumer Key/Secret и Access Token (Secret) из Twitter. Я добавил их в .bashrc, который я загружаю через os.environ в config.py. Там же запускается обработчик логгирования, записывающий исходящие твиты и все возможные ошибки.

Главный скрипт

Согласно PEP8, вначале импортируем стандартную библиотеку, затем внешние модули, а ниже — модули проекта:

import datetime
import os
import re
import sys

import requests
import pytz

from config import logging, api
Мой сервер запущен в часовом поясе Mountain Time, а мне необходимо было работать с поясами в EMEA. В этом нам поможет pytz, с ним очень легко работать с любыми часовыми поясами:

tz = pytz.timezone('Europe/Amsterdam')
now = datetime.datetime.now(tz)
start = datetime.datetime(2017, 3, 29, tzinfo=tz) # = PyBites 100 days :)

По PEP8 константы зададим символами в верхнем регистре с разделителем в виде подчёркивания. Очень удобный расчёт дат:

CURRENT_CHALLENGE_DAY = str((now - start).days).zfill(3)
LOG = 'https://raw.githubusercontent.com/pybites/100DaysOfCode/master/LOG.md'
LOG_ENTRY = re.compile(r'\[(?P.*?)\]\((?P<day>\d+)\)')<br /> REPO_URL = 'https://github.com/pybites/100DaysOfCode/tree/master/'<br /> TWEET_LEN = 140<br /> TWEET_LINK_LEN = 23</code><br /> Ну и куда без requests? Так одной строкой я получаю файл LOG.md из <a href="https://github.com/pybites/100DaysOfCode" target="_blank">репозитория</a>:</p><p><code>def get_log():<br /> return requests.get(LOG).text.split('\n')</code><br /> Получим название скрипта и строку с соответствующей датой из LOG.md (сегодня = ‘007’):</p><p><code>def get_day_progress(html):<br /> lines = [line.strip()<br /> for line in html<br /> if line.strip()]</p><p> for line in lines:<br /> day_entry = line.strip('|').split('|')[0].strip()<br /> if day_entry == CURRENT_CHALLENGE_DAY:<br /> return LOG_ENTRY.search(line).groupdict()</code><br /> Создаём твит. Я добавил немного кода для сокращения названия скрипт, если он превышает допустимый размер твита:</p><p><code>def create_tweet(m):<br /> ht1, ht2 = '#100DaysOfCode', '#Python'<br /> title = m['title']<br /> day = m['day']<br /> url = REPO_URL + day<br /> allowed_len = TWEET_LEN + len(url) - TWEET_LINK_LEN</p><p> fmt = '{} - Day {}: {} {} {}'<br /> tweet = fmt.format(ht1, day, title, url, ht2)<br /> surplus = len(tweet) - allowed_len</p><p> if surplus > 0:<br /> new_title = title[:-(surplus + 4)] + '...'<br /> tweet = tweet.replace(title, new_title)<br /> return tweet</code><br /> Метод tweet_status() отправляет твит. Здесь мы используем импортированный объект api (из config.py) для отправки твита, а также запишем в лог информацию об успешной отправке или об ошибке:</p><p><code>def tweet_status(tweet):<br /> try:<br /> api.update_status(tweet)<br /> logging.info('Posted to Twitter')<br /> except Exception as exc:<br /> logging.error('Error posting to Twitter: {}'.format(exc))</code><br /> Будем запускать наш скрипт из main. Также я добавил несколько переменных для проверок:</p><p><code>if __name__ == '__main__':<br /> import socket<br /> local = 'MacBook' in socket.gethostname()<br /> test = local or 'dry' in sys.argv[1:]</code><br /> В режиме тестирования я использую локальный файл LOG:</p><p><code> if test:<br /> log = os.path.basename(LOG)<br /> with open(log) as f:<br /> html = f.readlines()<br /> else:<br /> html = get_log()</code><br /> Если по какой-то причине я не смогу получить данные из get_day_progress(), скрипт прекратит работу и в лог запишется ошибка:</p><p><code> m = get_day_progress(html)<br /> if not m:<br /> logging.error('Error getting day progress from log')<br /> sys.exit(1)</code><br /> Создаём твит. В режиме тестирования просто запишем его в лог, иначе — отправляем:</p><p><code> tweet = create_tweet(m)<br /> if test:<br /> logging.info('Test: tweet to send: {}'.format(tweet))<br /> else:<br /> tweet_status(tweet)</code></p><h6>Деплой</h6><p>Есть несколько вещей, которые необходимо сделать для работы нашей программы: source .bashrc для загрузки переменных среды, экспортировать PYTHONPATH, задать полный путь до python3. И как <a href="https://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-command-with-existing-environmental-variables/27291#27291" target="_blank">сказано здесь</a>: «Cron ничего не знает о вашей оболочке; он запускается системой, поэтому у него минимум данных о среде.»</p><p><code>$ crontab -l<br /> ...<br /> 34 14 * * * source $HOME/.bashrc && export PYTHONPATH=$HOME/bin/python3/lib/python3.5/site-packages && cd $HOME/code/100days/007 && $HOME/bin/python3/bin/python3.5 100day_autotweet.py</code></p><h6>Результат</h6><p>Какое совпадение: твит о прогрессе за сегодня как раз <a href="https://twitter.com/pybites/status/849721815538712576" target="_blank">ушёл</a> 🙂</p><p><img title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" src="https://tehnojam.pro/uploads/images/00/00/24/2017/04/21/a7ac1c02ac.png" class="image-center" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" /></p><h6>Логгирование</h6><p>Очень полезная фишка модуля логгирования — автоматическое получение лога всех внешних модулей. Посмотрите в лог, там намного больше, чем пишет моя программа:</p><p><code>$ vi 100day_autotweet.log<br /> ...<br /> ...<br /> 14:34:02 tweepy.binder INFO PARAMS: {'status': b'#100DaysOfCode - Day 007: script to automatically tweet 100DayOfCode progress tweet https://github.com/pybites/100DaysOfCode/tree/master/007 #Python'}<br /> ...<br /> many more log entries ...<br /> ...<br /> 14:34:02 requests.packages.urllib3.connectionpool DEBUG https://api.twitter.com:443 "POST /1.1/statuses/update.json?status=%23100DaysOfCode+-+Day+007%3A+script+to+automatically+tweet+100DayOfCode+progress+tweet+https%3A%2F%2Fgithub.com%2Fpybites%2F100DaysOfCode%2Ftree%2Fmaster%2F007+%23Python HTTP/1.1" 200 2693<br /> 14:34:02 root INFO Posted to Twitter ==> my message</code><br /> Конечно, это можно отключить, повысив уровень логгирования (INFO или ещё выше) в logging.basicConfig (в config.py). Ну и почитайте <a href="https://docs.python.org/3/library/logging.html" target="_blank">документацию</a> про это.</p><p>По материалам <a href="http://pybit.es/100days-autotweet.html" target="_blank">«How we Automated our 100DaysOfCode Daily Tweet»</a>.</p><div class="saboxplugin-wrap"><div class="saboxplugin-gravatar"><img title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" alt='' src='https://secure.gravatar.com/avatar/3c9a724edc3d5745342294aed20872a8?s=100&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/3c9a724edc3d5745342294aed20872a8?s=200&d=mm&r=g 2x' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="saboxplugin-authorname"><a href="https://tehnojam.pro/category/author/fokusov" class="vcard author"><span class="fn">Фокусов Игорь</span></a></div><div class="saboxplugin-desc"><div><p>Разработчик: java, kotlin, c#, javascript, dart, 1C, python, php.</p><p>Пишите: <a href="https://t.me/ighar">@ighar</a>. <a href="https://money.yandex.ru/to/410011020365993">Buy me a coffee, please</a> :).</p></div></div><div class="clearfix"></div><div class="saboxplugin-socials "><a target="_self" href="mailto:igor@fokusov.com" rel="nofollow" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-user_email" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"></path></svg></span></a></div></div><div class="post-views post-504 entry-meta"> <span class="post-views-icon fa fa-eye"></span> <span class="post-views-count">0</span></div><div id="ssba-classic-2" class="ssba ssbp-wrap left ssbp--theme-1"><div style="text-align:left"><span class="ssba-share-text">Поделись...</span><br/><a data-site="vk" class="ssba_vk_share ssba_share_link" href="http://vkontakte.ru/share.php?url=https://tehnojam.pro/category/development/kak-my-avtomatizirovali-ezhednevnyj-tvit-proekta-100daysofcode.html" target="_blank" ><img src="https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/buttons/simple/vk.png" style="width: 38px;" title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" class="ssba ssba-img" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" /><div title="VK" class="ssbp-text">VK</div></a><a data-site="" class="ssba_facebook_share" href="http://www.facebook.com/sharer.php?u=https://tehnojam.pro/category/development/kak-my-avtomatizirovali-ezhednevnyj-tvit-proekta-100daysofcode.html" target="_blank" ><img src="https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/buttons/simple/facebook.png" style="width: 38px;" title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" class="ssba ssba-img" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" /><div title="Facebook" class="ssbp-text">Facebook</div></a><a data-site="" class="ssba_google_share" href="https://plus.google.com/share?url=https://tehnojam.pro/category/development/kak-my-avtomatizirovali-ezhednevnyj-tvit-proekta-100daysofcode.html" target="_blank" ><img src="https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/buttons/simple/google.png" style="width: 38px;" title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" class="ssba ssba-img" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" /><div title="Google+" class="ssbp-text">Google+</div></a><a data-site="" class="ssba_twitter_share" href="http://twitter.com/share?url=https://tehnojam.pro/category/development/kak-my-avtomatizirovali-ezhednevnyj-tvit-proekta-100daysofcode.html&text=%D0%9A%D0%B0%D0%BA%20%D0%BC%D1%8B%20%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BB%D0%B8%20%D0%B5%D0%B6%D0%B5%D0%B4%D0%BD%D0%B5%D0%B2%D0%BD%D1%8B%D0%B9%20%D1%82%D0%B2%D0%B8%D1%82%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0%20100DaysOfCode%20" target="_blank" ><img src="https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/buttons/simple/twitter.png" style="width: 38px;" title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" class="ssba ssba-img" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" /><div title="Twitter" class="ssbp-text">Twitter</div></a><a data-site="linkedin" class="ssba_linkedin_share ssba_share_link" href="http://www.linkedin.com/shareArticle?mini=true&url=https://tehnojam.pro/category/development/kak-my-avtomatizirovali-ezhednevnyj-tvit-proekta-100daysofcode.html" target="_blank" ><img src="https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/buttons/simple/linkedin.png" style="width: 38px;" title="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" class="ssba ssba-img" alt="Как мы автоматизировали ежедневный твит проекта 100DaysOfCode" /><div title="Linkedin" class="ssbp-text">Linkedin</div></a></div></div></div><footer class="entry-meta"> <span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://tehnojam.pro/category/category/development" rel="category tag">Разработка</a></span> <nav id="nav-below" class="post-navigation"> <span class="screen-reader-text">Post navigation</span><div class="nav-previous"><span class="prev" title="Previous"><a href="https://tehnojam.pro/category/development/generirovanie-dokumentov-odt-s-secretary-v-django.html" rel="prev">Генерирование документов ODT с Secretary в Django</a></span></div><div class="nav-next"><span class="next" title="Next"><a href="https://tehnojam.pro/category/back-to-the-future/baidu-vypustit-svobodnuju-operacionnuju-sistemu-dlja-bespilotnyh-avtomobilej.html" rel="next">Baidu выпустит свободную операционную систему для беспилотных автомобилей</a></span></div> </nav> </footer></div> </article><div class="comments-area"><div id="comments"><div id="respond" class="comment-respond"><h3 id="reply-title" class="comment-reply-title">Leave a Comment <small><a rel="nofollow" id="cancel-comment-reply-link" href="/category/development/kak-my-avtomatizirovali-ezhednevnyj-tvit-proekta-100daysofcode.html#respond" style="display:none;">Отменить ответ</a></small></h3><form action="https://tehnojam.pro/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-form-comment"><label for="comment" class="screen-reader-text">Comment</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p><label for="author" class="screen-reader-text">Name</label><input placeholder="Name *" id="author" name="author" type="text" value="" size="30" /> <label for="email" class="screen-reader-text">Email</label><input placeholder="Email *" id="email" name="email" type="email" value="" size="30" /> <label for="url" class="screen-reader-text">Website</label><input placeholder="Website" id="url" name="url" type="url" value="" size="30" /><div class="gglcptch gglcptch_v2"><div id="gglcptch_recaptcha_1747635036" class="gglcptch_recaptcha"></div> <noscript><div style="width: 302px;"><div style="width: 302px; height: 422px; position: relative;"><div style="width: 302px; height: 422px; position: absolute;"> <iframe src="https://www.google.com/recaptcha/api/fallback?k=6LdLqnYUAAAAAKcMT7b_RIlsSEvVHpIWIBaI6X-x" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe></div></div><div style="border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px; height: 60px; width: 300px;"><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px !important; height: 40px !important; border: 1px solid #c1c1c1 !important; margin: 10px 25px !important; padding: 0px !important; resize: none !important;"></textarea></div></div> </noscript></div><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='504' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /></p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="13705b4efc" /></p><p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="102"/></p></form></div></div></div></main></div><div id="right-sidebar" itemtype="https://schema.org/WPSideBar" itemscope="itemscope" class="widget-area grid-25 tablet-grid-25 grid-parent sidebar"><div class="inside-right-sidebar"> <aside id="social_icon_widget-2" class="widget inner-padding widget_social_icon_widget"><h2 class="widget-title">Подпишись на нас</h2><a title="Twitter" target="_blank" href="https://twitter.com/tehnojampro"><i class="fa fa-twitter"></i></a><a title="Facebook" target="_blank" href="https://www.facebook.com/tehnojam"><i class="fa fa-facebook"></i></a><a title="Google Plus" target="_blank" href="https://plus.google.com/communities/101049307081024540315"><i class="fa fa-google-plus"></i></a><a title="Telegram" target="_blank" href="http://t.me/tehnojam"><i class="fa fa-telegram"></i></a><a title="VK" target="_blank" href="https://vk.com/tehnojam"><i class="fa fa-vk"></i></a></aside><aside id="categories-2" class="widget inner-padding widget_categories"><h2 class="widget-title">Категории</h2><ul><li class="cat-item cat-item-113"><a href="https://tehnojam.pro/category/category/it-comics" title="В Этой категории размещаются юморные картинки и комиксы из мира IT">IT Комиксы</a></li><li class="cat-item cat-item-12"><a href="https://tehnojam.pro/category/category/secure" title="В этой категории размещаются статьи о компьютерной и интернет безопасности">Безопасность</a></li><li class="cat-item cat-item-8"><a href="https://tehnojam.pro/category/category/hardware" title="Категория о компьютерном железе, презентации нового оборудования и обсуждения старого оборудования.">Железо</a></li><li class="cat-item cat-item-10"><a href="https://tehnojam.pro/category/category/internet-of-things" title="Интернет вещей всё плотнее входит в нашу жизнь, потому эта рубрика об этом.">Интернет вещей</a></li><li class="cat-item cat-item-9"><a href="https://tehnojam.pro/category/category/back-to-the-future" title="Статьи о новейших технологиях">Назад в будущее</a></li><li class="cat-item cat-item-6"><a href="https://tehnojam.pro/category/category/it-news" title="Здесь размещаются Новости мира информационных технологий">Новости IT</a></li><li class="cat-item cat-item-5"><a href="https://tehnojam.pro/category/category/development" title="Статьи так или иначе касающиеся разработки программного обеспечения. Здесь размещаются мануалы и практическое руководство мира разработки.">Разработка</a></li><li class="cat-item cat-item-4"><a href="https://tehnojam.pro/category/category/software" title="Категория со статьями о программном обеспечении">Софт</a></li><li class="cat-item cat-item-11"><a href="https://tehnojam.pro/category/category/itagregator" >Техноагрегатор</a></li><li class="cat-item cat-item-7"><a href="https://tehnojam.pro/category/category/technologies" title="Статьи о новых технологиях и инновациях">Технологии</a></li></ul> </aside><aside id="better_recent_comments-2" class="widget inner-padding widget_recent_comments"><h2 class="widget-title">Свежие комментарии</h2><ul id="better-recent-comments" class="recent-comments-list with-avatars"><li class="recentcomments recent-comment"><div class="comment-wrap" style="padding-left:50px; min-height:44px;"><span class="comment-avatar"><img alt='' src='https://secure.gravatar.com/avatar/468360045d5802e8cf831fb83056c729?s=40&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/468360045d5802e8cf831fb83056c729?s=80&d=mm&r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /></span> <span class="comment-author-link">Марк</span> on <span class="comment-post"><a href="https://tehnojam.pro/category/software/delaem-krasivye-shrifty-s-novym-freetype2-v-linux.html#comment-334">Делаем красивые шрифты с новым freetype2 в Linux</a></span></div></li><li class="recentcomments recent-comment"><div class="comment-wrap" style="padding-left:50px; min-height:44px;"><span class="comment-avatar"><img alt='' src='https://secure.gravatar.com/avatar/0c40ffbd3645e1b4478470fe161e91cf?s=40&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/0c40ffbd3645e1b4478470fe161e91cf?s=80&d=mm&r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /></span> <span class="comment-author-link"><a href='https://manjaro.ru' rel='external nofollow' class='url'>manjarqo</a></span> on <span class="comment-post"><a href="https://tehnojam.pro/category/software/delaem-krasivye-shrifty-s-novym-freetype2-v-linux.html#comment-333">Делаем красивые шрифты с новым freetype2 в Linux</a></span></div></li><li class="recentcomments recent-comment"><div class="comment-wrap" style="padding-left:50px; min-height:44px;"><span class="comment-avatar"><img alt='' src='https://secure.gravatar.com/avatar/468360045d5802e8cf831fb83056c729?s=40&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/468360045d5802e8cf831fb83056c729?s=80&d=mm&r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /></span> <span class="comment-author-link">Марк</span> on <span class="comment-post"><a href="https://tehnojam.pro/category/software/delaem-krasivye-shrifty-s-novym-freetype2-v-linux.html#comment-332">Делаем красивые шрифты с новым freetype2 в Linux</a></span></div></li><li class="recentcomments recent-comment"><div class="comment-wrap" style="padding-left:50px; min-height:44px;"><span class="comment-avatar"><img alt='' src='https://secure.gravatar.com/avatar/0c40ffbd3645e1b4478470fe161e91cf?s=40&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/0c40ffbd3645e1b4478470fe161e91cf?s=80&d=mm&r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /></span> <span class="comment-author-link"><a href='https://manjaro.ru' rel='external nofollow' class='url'>manjarqo</a></span> on <span class="comment-post"><a href="https://tehnojam.pro/category/software/delaem-krasivye-shrifty-s-novym-freetype2-v-linux.html#comment-331">Делаем красивые шрифты с новым freetype2 в Linux</a></span></div></li><li class="recentcomments recent-comment"><div class="comment-wrap" style="padding-left:50px; min-height:44px;"><span class="comment-avatar"><img alt='' src='https://secure.gravatar.com/avatar/468360045d5802e8cf831fb83056c729?s=40&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/468360045d5802e8cf831fb83056c729?s=80&d=mm&r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /></span> <span class="comment-author-link">Марк</span> on <span class="comment-post"><a href="https://tehnojam.pro/category/software/delaem-krasivye-shrifty-s-novym-freetype2-v-linux.html#comment-330">Делаем красивые шрифты с новым freetype2 в Linux</a></span></div></li><li class="recentcomments recent-comment"><div class="comment-wrap" style="padding-left:50px; min-height:44px;"><span class="comment-avatar"><img alt='' src='https://secure.gravatar.com/avatar/3c9a724edc3d5745342294aed20872a8?s=40&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/3c9a724edc3d5745342294aed20872a8?s=80&d=mm&r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /></span> <span class="comment-author-link">Фокусов Игорь</span> on <span class="comment-post"><a href="https://tehnojam.pro/category/software/luchshie-generatory-shuma-dlja-uluchshenija-vashej-produktivnosti.html#comment-326">Лучшие генераторы шума для улучшения вашей продуктивности</a></span></div></li></ul></aside><aside id="recent-posts-widget-with-thumbnails-2" class="widget inner-padding recent-posts-widget-with-thumbnails"><div id="rpwwt-recent-posts-widget-with-thumbnails-2" class="rpwwt-widget"><h2 class="widget-title">Свежие записи</h2><ul><li><a href="https://tehnojam.pro/category/development/nastraivaemaja-forma-nizhnej-paneli-v-android.html"><img width="70" height="70" src="https://tehnojam.pro/wp-content/uploads/2018/11/1_hlunqt_xgbem-kv68bywsg-150x150.png" class="attachment-70x70 size-70x70 wp-post-image" alt="Настраиваемая форма нижней панели в android" /><span class="rpwwt-post-title">Кастомная нижняя панель в android</span></a></li><li><a href="https://tehnojam.pro/category/software/kak-ubrat-razryvy-jekrana-tiring-v-linux.html"><img width="70" height="70" src="https://tehnojam.pro/wp-content/uploads/2018/11/tearinglinux-150x150.jpg" class="attachment-70x70 size-70x70 wp-post-image" alt="Как убрать разрывы экрана (тиринг) в Linux" /><span class="rpwwt-post-title">Как убрать разрывы экрана (тиринг) в Linux</span></a></li><li><a href="https://tehnojam.pro/category/development/autentifikacija-v-prilozhenii-flutter.html"><img width="70" height="70" src="https://tehnojam.pro/wp-content/uploads/2018/11/flutter_fire-150x150.png" class="attachment-70x70 size-70x70 wp-post-image" alt="Аутентификация в приложении Flutter" /><span class="rpwwt-post-title">Аутентификация в приложении Flutter</span></a></li><li><a href="https://tehnojam.pro/category/development/top-10-javascript-i-css-bibliotek-noyabrja-2018-goda-2.html"><img width="70" height="70" src="https://tehnojam.pro/wp-content/uploads/2018/11/top101-150x150.jpg" class="attachment-70x70 size-70x70 wp-post-image" alt="Топ 10 JavaScript и CSS библиотек ноября 2018 года" /><span class="rpwwt-post-title">Топ 10 JavaScript и CSS библиотек ноября 2018 года</span></a></li><li><a href="https://tehnojam.pro/category/software/luchshie-generatory-shuma-dlja-uluchshenija-vashej-produktivnosti.html"><img width="70" height="70" src="https://tehnojam.pro/wp-content/uploads/2018/11/tqhdstvfi60-150x150.jpg" class="attachment-70x70 size-70x70 wp-post-image" alt="Лучшие генераторы шума для улучшения вашей продуктивности" /><span class="rpwwt-post-title">Лучшие генераторы шума для улучшения вашей продуктивности</span></a></li><li><a href="https://tehnojam.pro/category/software/obnovlenie-1c-na-mac-os.html"><img width="70" height="70" src="https://tehnojam.pro/wp-content/uploads/2018/11/1c-macos-150x150.png" class="attachment-70x70 size-70x70 wp-post-image" alt="Обновление 1С на Mac OS X" /><span class="rpwwt-post-title">Обновление 1С на Mac OS X</span></a></li></ul></div> </aside></div></div></div></div><div class="site-footer grid-container grid-parent "><div id="footer-widgets" class="site footer-widgets"><div class="footer-widgets-container grid-container grid-parent"><div class="inside-footer-widgets"><div class="footer-widget-1 grid-parent grid-50 tablet-grid-50 mobile-grid-100"> <aside id="categories-3" class="widget inner-padding widget_categories"><h2 class="widget-title">Категории</h2><ul><li class="cat-item cat-item-113"><a href="https://tehnojam.pro/category/category/it-comics" title="В Этой категории размещаются юморные картинки и комиксы из мира IT">IT Комиксы</a></li><li class="cat-item cat-item-12"><a href="https://tehnojam.pro/category/category/secure" title="В этой категории размещаются статьи о компьютерной и интернет безопасности">Безопасность</a></li><li class="cat-item cat-item-8"><a href="https://tehnojam.pro/category/category/hardware" title="Категория о компьютерном железе, презентации нового оборудования и обсуждения старого оборудования.">Железо</a></li><li class="cat-item cat-item-10"><a href="https://tehnojam.pro/category/category/internet-of-things" title="Интернет вещей всё плотнее входит в нашу жизнь, потому эта рубрика об этом.">Интернет вещей</a></li><li class="cat-item cat-item-9"><a href="https://tehnojam.pro/category/category/back-to-the-future" title="Статьи о новейших технологиях">Назад в будущее</a></li><li class="cat-item cat-item-6"><a href="https://tehnojam.pro/category/category/it-news" title="Здесь размещаются Новости мира информационных технологий">Новости IT</a></li><li class="cat-item cat-item-5"><a href="https://tehnojam.pro/category/category/development" title="Статьи так или иначе касающиеся разработки программного обеспечения. Здесь размещаются мануалы и практическое руководство мира разработки.">Разработка</a></li><li class="cat-item cat-item-4"><a href="https://tehnojam.pro/category/category/software" title="Категория со статьями о программном обеспечении">Софт</a></li><li class="cat-item cat-item-11"><a href="https://tehnojam.pro/category/category/itagregator" >Техноагрегатор</a></li><li class="cat-item cat-item-7"><a href="https://tehnojam.pro/category/category/technologies" title="Статьи о новых технологиях и инновациях">Технологии</a></li></ul> </aside></div><div class="footer-widget-2 grid-parent grid-50 tablet-grid-50 mobile-grid-100"> <aside id="meta-2" class="widget inner-padding widget_meta"><h2 class="widget-title">Мета</h2><ul><li><a rel="nofollow" href="https://tehnojam.pro/wp-login.php?action=register">Регистрация</a></li><li><a rel="nofollow" href="https://tehnojam.pro/wp-login.php">Войти</a></li><li><a href="https://tehnojam.pro/feed"><abbr title="Really Simple Syndication">RSS</abbr> записей</a></li><li><a href="https://tehnojam.pro/comments/feed"><abbr title="Really Simple Syndication">RSS</abbr> комментариев</a></li><li><a href="https://ru.wordpress.org/" title="Сайт работает на WordPress — современной персональной платформе для публикаций.">WordPress.org</a></li></ul> </aside></div></div></div></div> <footer class="site-info" itemtype="https://schema.org/WPFooter" itemscope="itemscope"><div class="inside-site-info grid-container grid-parent"><div class="copyright-bar"> © 2018 All rights reserved Tehnojam.pro</div></div> </footer></div> <script type="text/javascript" >(function(d,w,c){(w[c]=w[c]||[]).push(function(){try{w.yaCounter34533870=new Ya.Metrika({id:34533870,clickmap:true,trackLinks:true,accurateTrackBounce:true});}catch(e){}});var n=d.getElementsByTagName("script")[0],s=d.createElement("script"),f=function(){n.parentNode.insertBefore(s,n);};s.type="text/javascript";s.async=true;s.src="https://mc.yandex.ru/metrika/watch.js";if(w.opera=="[object Opera]"){d.addEventListener("DOMContentLoaded",f,false);}else{f();}})(document,window,"yandex_metrika_callbacks");</script> <noscript><div><img src="https://mc.yandex.ru/watch/34533870" style="position:absolute; left:-9999px;" alt="" /></div></noscript><a title="Scroll back to top" rel="nofollow" href="#" class="koromo-back-to-top" style="opacity:0;visibility:hidden;" data-scroll-speed="400" data-start-scroll="300"> <span class="screen-reader-text">Scroll back to top</span> </a><div class="koromo-side-left-cover"></div><div class="koromo-side-right-cover"></div></div><div style="position:fixed;bottom: -999999999999999999999px;"><div class="sg-popup-builder-content" id="sg-popup-content-wrapper-2086" data-id="2086" data-events="[{"param":"load","value":"10","hiddenOption":[]}]" data-options="YTo4MTp7czoyMzoic2dwYi1zdWJzLWZvcm0tYmctY29sb3IiO3M6NzoiIzM4M2M0OCI7czoyNToic2dwYi1zdWJzLWZvcm0tYmctb3BhY2l0eSI7czoxOiIxIjtzOjIyOiJzZ3BiLXN1YnMtZm9ybS1wYWRkaW5nIjtzOjE6IjIiO3M6Mjc6InNncGItc3Vicy1lbWFpbC1wbGFjZWhvbGRlciI7czo3OiJFbWFpbCAqIjtzOjE5OiJzZ3BiLXN1YnMtZ2Rwci10ZXh0IjtzOjM2OiLQntGB0YLQsNCy0LvRj9GPINGB0LLQvtGOINC/0L7Rh9GC0YMiO3M6Mjg6InNncGItc3Vicy12YWxpZGF0aW9uLW1lc3NhZ2UiO3M6Nzk6ItCS0LLQtdC00LjRgtC1INGB0LLQvtC5IEVtYWlsINC40LvQuCDQvdCw0LbQvNC40YLQtSDQutC90L7Qv9C60YMg0LfQsNC60YDRi9GC0YwiO3M6MjA6InNncGItc3Vicy10ZXh0LXdpZHRoIjtzOjU6IjMwMHB4IjtzOjIxOiJzZ3BiLXN1YnMtdGV4dC1oZWlnaHQiO3M6NDoiNDBweCI7czoyNzoic2dwYi1zdWJzLXRleHQtYm9yZGVyLXdpZHRoIjtzOjM6IjJweCI7czoyMzoic2dwYi1zdWJzLXRleHQtYmctY29sb3IiO3M6NzoiIzM4M2M0OCI7czoyNzoic2dwYi1zdWJzLXRleHQtYm9yZGVyLWNvbG9yIjtzOjc6IiM0ODg5ZGUiO3M6MjA6InNncGItc3Vicy10ZXh0LWNvbG9yIjtzOjc6IiNmZmZmZmYiO3M6MzI6InNncGItc3Vicy10ZXh0LXBsYWNlaG9sZGVyLWNvbG9yIjtzOjc6IiNDQ0NDQ0MiO3M6MTk6InNncGItc3Vicy1idG4td2lkdGgiO3M6NToiMzAwcHgiO3M6MjA6InNncGItc3Vicy1idG4taGVpZ2h0IjtzOjQ6IjQwcHgiO3M6MTk6InNncGItc3Vicy1idG4tdGl0bGUiO3M6MTY6ItCf0L7QtNC/0LjRgdC60LAiO3M6Mjg6InNncGItc3Vicy1idG4tcHJvZ3Jlc3MtdGl0bGUiO3M6NDI6ItCf0L7QttCw0LvRg9C50YHRgtCwINC/0L7QtNC+0LbQtNC40YLQtS4uLiI7czoyMjoic2dwYi1zdWJzLWJ0bi1iZy1jb2xvciI7czo3OiIjNENBRjUwIjtzOjI0OiJzZ3BiLXN1YnMtYnRuLXRleHQtY29sb3IiO3M6NzoiI0ZGRkZGRiI7czoyMzoic2dwYi1zdWJzLWVycm9yLW1lc3NhZ2UiO3M6MTE0OiJU0JLQviDQstGA0LXQvNGPINC+0YLQv9GA0LDQstC60Lgg0LTQsNC90L3Ri9GFINC/0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAuINCf0L7Qv9GA0L7QsdGD0LnRgtC1INC10YnRkSDRgNCw0LciO3M6MjU6InNncGItc3Vicy1pbnZhbGlkLW1lc3NhZ2UiO3M6Nzg6ItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSBlbWFpbCDQsNC00YDQtdGBLiI7czoyNjoic2dwYi1zdWJzLXN1Y2Nlc3MtYmVoYXZpb3IiO3M6MTE6InNob3dNZXNzYWdlIjtzOjI1OiJzZ3BiLXN1YnMtc3VjY2Vzcy1tZXNzYWdlIjtzOjg2OiLQn9C+0LfQtNGA0LDQstC70Y/QtdC8INCy0Ysg0L/QvtC00L/QuNGB0LDQvdGLINC90LAg0L3QvtCy0L7RgdGC0Lgg0KLQtdGF0L3QvtCU0LbQtdC8ISI7czozMDoic2dwYi1zdWJzLXN1Y2Nlc3MtcmVkaXJlY3QtVVJMIjtzOjA6IiI7czoxNToic2dwYi1zdWJzLWVtYWlsIjtzOjA6IiI7czoyMDoic2dwYi1zdWJzLWZpcnN0LW5hbWUiO3M6MDoiIjtzOjE5OiJzZ3BiLXN1YnMtbGFzdC1uYW1lIjtzOjA6IiI7czoyNDoic2dwYi1zdWJzLWhpZGRlbi1jaGVja2VyIjtzOjA6IiI7czo5OiJzZ3BiLXR5cGUiO3M6MTI6InN1YnNjcmlwdGlvbiI7czoxNToic2dwYi1pcy1wcmV2aWV3IjtzOjE6IjAiO3M6MTQ6InNncGItaXMtYWN0aXZlIjtzOjc6ImNoZWNrZWQiO3M6MzQ6InNncGItYmVoYXZpb3ItYWZ0ZXItc3BlY2lhbC1ldmVudHMiO2E6MTp7aTowO2E6MTp7aTowO2E6MTp7czo1OiJwYXJhbSI7czoxMjoic2VsZWN0X2V2ZW50Ijt9fX1zOjIwOiJzZ3BiLWNvbnRlbnQtcGFkZGluZyI7czoyOiIxMiI7czoxODoic2dwYi1wb3B1cC16LWluZGV4IjtzOjQ6Ijk5OTkiO3M6MTc6InNncGItcG9wdXAtdGhlbWVzIjtzOjEyOiJzZ3BiLXRoZW1lLTYiO3M6MjU6InNncGItb3ZlcmxheS1jdXN0b20tY2xhc3MiO3M6MTg6InNncGItcG9wdXAtb3ZlcmxheSI7czoxODoic2dwYi1vdmVybGF5LWNvbG9yIjtzOjA6IiI7czoyMDoic2dwYi1vdmVybGF5LW9wYWNpdHkiO3M6MzoiMC44IjtzOjI1OiJzZ3BiLWNvbnRlbnQtY3VzdG9tLWNsYXNzIjtzOjE2OiJzZy1wb3B1cC1jb250ZW50IjtzOjIwOiJzZ3BiLXNob3ctYmFja2dyb3VuZCI7czoyOiJvbiI7czoyMToic2dwYi1iYWNrZ3JvdW5kLWNvbG9yIjtzOjc6IiMzODNjNDgiO3M6MjA6InNncGItY29udGVudC1vcGFjaXR5IjtzOjE6IjEiO3M6MjE6InNncGItYmFja2dyb3VuZC1pbWFnZSI7czowOiIiO3M6MjY6InNncGItYmFja2dyb3VuZC1pbWFnZS1tb2RlIjtzOjU6ImNvdmVyIjtzOjEyOiJzZ3BiLWVzYy1rZXkiO3M6Mjoib24iO3M6MjQ6InNncGItZW5hYmxlLWNsb3NlLWJ1dHRvbiI7czoyOiJvbiI7czoyMzoic2dwYi1jbG9zZS1idXR0b24tZGVsYXkiO3M6MToiMCI7czoyNjoic2dwYi1jbG9zZS1idXR0b24tcG9zaXRpb24iO3M6ODoidG9wUmlnaHQiO3M6MTc6InNncGItYnV0dG9uLWltYWdlIjtzOjA6IiI7czoyMzoic2dwYi1idXR0b24taW1hZ2Utd2lkdGgiO3M6MjoiMzAiO3M6MjQ6InNncGItYnV0dG9uLWltYWdlLWhlaWdodCI7czoyOiIzMCI7czoxNzoic2dwYi1ib3JkZXItY29sb3IiO3M6NzoiIzAwMDAwMCI7czoxODoic2dwYi1ib3JkZXItcmFkaXVzIjtzOjE6IjAiO3M6MjM6InNncGItYm9yZGVyLXJhZGl1cy10eXBlIjtzOjE6IiUiO3M6MTY6InNncGItYnV0dG9uLXRleHQiO3M6NToiQ2xvc2UiO3M6MTg6InNncGItb3ZlcmxheS1jbGljayI7czoyOiJvbiI7czoyNToic2dwYi1wb3B1cC1kaW1lbnNpb24tbW9kZSI7czoxNDoicmVzcG9uc2l2ZU1vZGUiO3M6MzM6InNncGItcmVzcG9uc2l2ZS1kaW1lbnNpb24tbWVhc3VyZSI7czo0OiJhdXRvIjtzOjEwOiJzZ3BiLXdpZHRoIjtzOjU6IjY0MHB4IjtzOjExOiJzZ3BiLWhlaWdodCI7czo1OiI0ODBweCI7czoxNDoic2dwYi1tYXgtd2lkdGgiO3M6MDoiIjtzOjE1OiJzZ3BiLW1heC1oZWlnaHQiO3M6MDoiIjtzOjE0OiJzZ3BiLW1pbi13aWR0aCI7czozOiIxMjAiO3M6MTU6InNncGItbWluLWhlaWdodCI7czowOiIiO3M6MjU6InNncGItc2hvdy1wb3B1cC1zYW1lLXVzZXIiO3M6Mjoib24iO3M6MzE6InNncGItc2hvdy1wb3B1cC1zYW1lLXVzZXItY291bnQiO3M6MToiMSI7czozMjoic2dwYi1zaG93LXBvcHVwLXNhbWUtdXNlci1leHBpcnkiO3M6MzoiMzY1IjtzOjE5OiJzZ3BiLW9wZW4tYW5pbWF0aW9uIjtzOjI6Im9uIjtzOjI2OiJzZ3BiLW9wZW4tYW5pbWF0aW9uLWVmZmVjdCI7czoxMDoic2dwYi1zaGFrZSI7czoyNToic2dwYi1vcGVuLWFuaW1hdGlvbi1zcGVlZCI7czoxOiIxIjtzOjIwOiJzZ3BiLWNsb3NlLWFuaW1hdGlvbiI7czoyOiJvbiI7czoyNzoic2dwYi1jbG9zZS1hbmltYXRpb24tZWZmZWN0IjtzOjEwOiJzZ3BiLXNoYWtlIjtzOjI2OiJzZ3BiLWNsb3NlLWFuaW1hdGlvbi1zcGVlZCI7czoxOiIxIjtzOjI5OiJzZ3BiLWVuYWJsZS1jb250ZW50LXNjcm9sbGluZyI7czoyOiJvbiI7czoxNjoic2dwYi1wb3B1cC1vcmRlciI7czoxOiIwIjtzOjE2OiJzZ3BiLXBvcHVwLWRlbGF5IjtzOjE6IjAiO3M6MTI6InNncGItcG9zdC1pZCI7czo0OiIyMDg2IjtzOjE2OiJzZ3BiLXN1YnMtZmllbGRzIjthOjY6e3M6NToiZW1haWwiO2E6NDp7czo2OiJpc1Nob3ciO3M6MToiMSI7czo1OiJhdHRycyI7YTo2OntzOjQ6InR5cGUiO3M6NToiZW1haWwiO3M6MTM6ImRhdGEtcmVxdWlyZWQiO3M6MToiMSI7czo0OiJuYW1lIjtzOjE1OiJzZ3BiLXN1YnMtZW1haWwiO3M6MTE6InBsYWNlaG9sZGVyIjtzOjc6IkVtYWlsICoiO3M6NToiY2xhc3MiO3M6Mzk6ImpzLXN1YnMtdGV4dC1pbnB1dHMganMtc3Vicy1lbWFpbC1pbnB1dCI7czoyNDoiZGF0YS1lcnJvci1tZXNzYWdlLWNsYXNzIjtzOjI5OiJzZ3BiLXN1YnMtZW1haWwtZXJyb3ItbWVzc2FnZSI7fXM6NToic3R5bGUiO2E6Nzp7czo1OiJ3aWR0aCI7czo1OiIzMDBweCI7czo2OiJoZWlnaHQiO3M6NDoiNDBweCI7czoxMjoiYm9yZGVyLXdpZHRoIjtzOjM6IjJweCI7czoxMjoiYm9yZGVyLWNvbG9yIjtzOjc6IiM0ODg5ZGUiO3M6MTY6ImJhY2tncm91bmQtY29sb3IiO3M6NzoiIzM4M2M0OCI7czo1OiJjb2xvciI7czo3OiIjZmZmZmZmIjtzOjEyOiJhdXRvY29tcGxldGUiO3M6Mzoib2ZmIjt9czoyMToiZXJyb3JNZXNzYWdlQm94U3R5bGVzIjtzOjU6IjMwMHB4Ijt9czoxMDoiZmlyc3QtbmFtZSI7YTo0OntzOjY6ImlzU2hvdyI7czowOiIiO3M6NToiYXR0cnMiO2E6Njp7czo0OiJ0eXBlIjtzOjQ6InRleHQiO3M6MTM6ImRhdGEtcmVxdWlyZWQiO3M6MDoiIjtzOjQ6Im5hbWUiO3M6MjA6InNncGItc3Vicy1maXJzdC1uYW1lIjtzOjExOiJwbGFjZWhvbGRlciI7czowOiIiO3M6NToiY2xhc3MiO3M6NDQ6ImpzLXN1YnMtdGV4dC1pbnB1dHMganMtc3Vicy1maXJzdC1uYW1lLWlucHV0IjtzOjI0OiJkYXRhLWVycm9yLW1lc3NhZ2UtY2xhc3MiO3M6MzQ6InNncGItc3Vicy1maXJzdC1uYW1lLWVycm9yLW1lc3NhZ2UiO31zOjU6InN0eWxlIjthOjc6e3M6NToid2lkdGgiO3M6NToiMzAwcHgiO3M6NjoiaGVpZ2h0IjtzOjQ6IjQwcHgiO3M6MTI6ImJvcmRlci13aWR0aCI7czozOiIycHgiO3M6MTI6ImJvcmRlci1jb2xvciI7czo3OiIjNDg4OWRlIjtzOjE2OiJiYWNrZ3JvdW5kLWNvbG9yIjtzOjc6IiMzODNjNDgiO3M6NToiY29sb3IiO3M6NzoiI2ZmZmZmZiI7czoxMjoiYXV0b2NvbXBsZXRlIjtzOjM6Im9mZiI7fXM6MjE6ImVycm9yTWVzc2FnZUJveFN0eWxlcyI7czo1OiIzMDBweCI7fXM6OToibGFzdC1uYW1lIjthOjQ6e3M6NjoiaXNTaG93IjtzOjA6IiI7czo1OiJhdHRycyI7YTo2OntzOjQ6InR5cGUiO3M6NDoidGV4dCI7czoxMzoiZGF0YS1yZXF1aXJlZCI7czowOiIiO3M6NDoibmFtZSI7czoxOToic2dwYi1zdWJzLWxhc3QtbmFtZSI7czoxMToicGxhY2Vob2xkZXIiO3M6MDoiIjtzOjU6ImNsYXNzIjtzOjQzOiJqcy1zdWJzLXRleHQtaW5wdXRzIGpzLXN1YnMtbGFzdC1uYW1lLWlucHV0IjtzOjI0OiJkYXRhLWVycm9yLW1lc3NhZ2UtY2xhc3MiO3M6MzM6InNncGItc3Vicy1sYXN0LW5hbWUtZXJyb3ItbWVzc2FnZSI7fXM6NToic3R5bGUiO2E6Nzp7czo1OiJ3aWR0aCI7czo1OiIzMDBweCI7czo2OiJoZWlnaHQiO3M6NDoiNDBweCI7czoxMjoiYm9yZGVyLXdpZHRoIjtzOjM6IjJweCI7czoxMjoiYm9yZGVyLWNvbG9yIjtzOjc6IiM0ODg5ZGUiO3M6MTY6ImJhY2tncm91bmQtY29sb3IiO3M6NzoiIzM4M2M0OCI7czo1OiJjb2xvciI7czo3OiIjZmZmZmZmIjtzOjEyOiJhdXRvY29tcGxldGUiO3M6Mzoib2ZmIjt9czoyMToiZXJyb3JNZXNzYWdlQm94U3R5bGVzIjtzOjU6IjMwMHB4Ijt9czo0OiJnZHByIjthOjY6e3M6NjoiaXNTaG93IjtzOjA6IiI7czo1OiJhdHRycyI7YTo2OntzOjQ6InR5cGUiO3M6MTQ6ImN1c3RvbUNoZWNrYm94IjtzOjEzOiJkYXRhLXJlcXVpcmVkIjtzOjA6IiI7czo0OiJuYW1lIjtzOjE0OiJzZ3BiLXN1YnMtZ2RwciI7czo1OiJjbGFzcyI7czozODoianMtc3Vicy1nZHByLWlucHV0cyBqcy1zdWJzLWdkcHItbGFiZWwiO3M6MjoiaWQiO3M6MjE6InNncGItZ2Rwci1maWVsZC1sYWJlbCI7czoyNDoiZGF0YS1lcnJvci1tZXNzYWdlLWNsYXNzIjtzOjIzOiJzZ3BiLWdkcHItZXJyb3ItbWVzc2FnZSI7fXM6NToic3R5bGUiO2E6MTp7czo1OiJ3aWR0aCI7czo1OiIzMDBweCI7fXM6NToibGFiZWwiO3M6MTI6IkFjY2VwdCBUZXJtcyI7czo0OiJ0ZXh0IjtzOjM2OiLQntGB0YLQsNCy0LvRj9GPINGB0LLQvtGOINC/0L7Rh9GC0YMiO3M6MjE6ImVycm9yTWVzc2FnZUJveFN0eWxlcyI7czo1OiIzMDBweCI7fXM6MTQ6ImhpZGRlbi1jaGVja2VyIjthOjM6e3M6NjoiaXNTaG93IjtzOjA6IiI7czo1OiJhdHRycyI7YTo1OntzOjQ6InR5cGUiO3M6NjoiaGlkZGVuIjtzOjEzOiJkYXRhLXJlcXVpcmVkIjtzOjA6IiI7czo0OiJuYW1lIjtzOjI0OiJzZ3BiLXN1YnMtaGlkZGVuLWNoZWNrZXIiO3M6NToidmFsdWUiO3M6MDoiIjtzOjU6ImNsYXNzIjtzOjQzOiJqcy1zdWJzLXRleHQtaW5wdXRzIGpzLXN1YnMtbGFzdC1uYW1lLWlucHV0Ijt9czo1OiJzdHlsZSI7YTozOntzOjg6InBvc2l0aW9uIjtzOjg6ImFic29sdXRlIjtzOjQ6ImxlZnQiO3M6NzoiLTUwMDBweCI7czo3OiJwYWRkaW5nIjtzOjE6IjAiO319czo2OiJzdWJtaXQiO2E6Mzp7czo2OiJpc1Nob3ciO3M6MToiMSI7czo1OiJhdHRycyI7YTo2OntzOjQ6InR5cGUiO3M6Njoic3VibWl0IjtzOjQ6Im5hbWUiO3M6MTY6InNncGItc3Vicy1zdWJtaXQiO3M6NToidmFsdWUiO3M6MTY6ItCf0L7QtNC/0LjRgdC60LAiO3M6MTA6ImRhdGEtdGl0bGUiO3M6MTY6ItCf0L7QtNC/0LjRgdC60LAiO3M6MTk6ImRhdGEtcHJvZ3Jlc3MtdGl0bGUiO3M6NDI6ItCf0L7QttCw0LvRg9C50YHRgtCwINC/0L7QtNC+0LbQtNC40YLQtS4uLiI7czo1OiJjbGFzcyI7czoxODoianMtc3Vicy1zdWJtaXQtYnRuIjt9czo1OiJzdHlsZSI7YTo1OntzOjU6IndpZHRoIjtzOjU6IjMwMHB4IjtzOjY6ImhlaWdodCI7czo0OiI0MHB4IjtzOjE2OiJiYWNrZ3JvdW5kLWNvbG9yIjtzOjc6IiM0Q0FGNTAiO3M6NToiY29sb3IiO3M6NzoiI0ZGRkZGRiI7czoxNDoidGV4dC10cmFuc2Zvcm0iO3M6MTU6Im5vbmUgIWltcG9ydGFudCI7fX19czoyMjoic2dwYi1idXR0b24taW1hZ2UtZGF0YSI7czowOiIiO3M6MjY6InNncGItYmFja2dyb3VuZC1pbWFnZS1kYXRhIjtzOjA6IiI7czoxNDoic2dwYkNvbmRpdGlvbnMiO047fQ=="><div class="sgpb-popup-builder-content-2086 sgpb-popup-builder-content-html"><p>Чтобы не пропустить новые статьи, оставь свой Email</p><div class="sgpb-subs-form-2086 sgpb-subscription-form"><div class="subs-form-messages sgpb-alert sgpb-alert-success sg-hide-element"><p>Поздравляем вы подписаны на новости ТехноДжем!</p></div><div class="subs-form-messages sgpb-alert sgpb-alert-danger sg-hide-element"><p>TВо время отправки данных произошла ошибка. Попробуйте ещё раз</p></div><form class="sgpb-form" id="sgpb-form" method="post"><div class="sgpb-form-wrapper"><div class="sgpb-inputs-wrapper js-email-wrapper js-sgpb-form-field-email-wrapper "> <input type = "email" data-required = "1" name = "sgpb-subs-email" placeholder = "Email *" class = "js-subs-text-inputs js-subs-email-input" data-error-message-class = "sgpb-subs-email-error-message" style="width:300px; height:40px; border-width:2px; border-color:#4889de; background-color:#383c48; color:#ffffff; autocomplete:off; "><div class='sgpb-subs-email-error-message'></div></div><div class="sgpb-inputs-wrapper js-first-name-wrapper js-sgpb-form-field-first-name-wrapper sg-js-hide"> <input type = "text" data-required = "" name = "sgpb-subs-first-name" placeholder = "" class = "js-subs-text-inputs js-subs-first-name-input" data-error-message-class = "sgpb-subs-first-name-error-message" style="width:300px; height:40px; border-width:2px; border-color:#4889de; background-color:#383c48; color:#ffffff; autocomplete:off; "><div class='sgpb-subs-first-name-error-message'></div></div><div class="sgpb-inputs-wrapper js-last-name-wrapper js-sgpb-form-field-last-name-wrapper sg-js-hide"> <input type = "text" data-required = "" name = "sgpb-subs-last-name" placeholder = "" class = "js-subs-text-inputs js-subs-last-name-input" data-error-message-class = "sgpb-subs-last-name-error-message" style="width:300px; height:40px; border-width:2px; border-color:#4889de; background-color:#383c48; color:#ffffff; autocomplete:off; "><div class='sgpb-subs-last-name-error-message'></div></div><div class="sgpb-inputs-wrapper js-gdpr-wrapper js-sgpb-form-field-gdpr-wrapper sg-js-hide"><div class="sgpb-gdpr-label-wrapper" style="color:; width:300px; "><input type = "checkbox" data-required = "" name = "sgpb-subs-gdpr" class = "js-subs-gdpr-inputs js-subs-gdpr-label" id = "sgpb-gdpr-field-label" data-error-message-class = "sgpb-gdpr-error-message" ><label class="js-login-remember-me-label-edit" for="sgpb-gdpr-field-label">Accept Terms</label><div class="sgpb-gdpr-error-message"></div></div><div class="sgpb-alert-info sgpb-alert sgpb-gdpr-info js-subs-text-checkbox sgpb-gdpr-text-js" style="color:; width:300px; ">Оставляя свою почту</div></div><div class="sgpb-inputs-wrapper js-hidden-checker-wrapper js-sgpb-form-field-hidden-checker-wrapper sg-js-hide"> <input type = "hidden" data-required = "" name = "sgpb-subs-hidden-checker" value = "" class = "js-subs-text-inputs js-subs-last-name-input" style="position:absolute; left:-5000px; padding:0; "><div class='sgpb-subs-hidden-checker-error-message'></div></div><div class="sgpb-inputs-wrapper js-submit-wrapper js-sgpb-form-field-submit-wrapper "> <input type = "submit" name = "sgpb-subs-submit" value = "Подписка" data-title = "Подписка" data-progress-title = "Пожалуйста подождите..." class = "js-subs-submit-btn" style="width:300px; height:40px; background-color:#4CAF50; color:#FFFFFF; text-transform:none !important; "><div class='sgpb-subs-submit-error-message'></div></div></div></form></div><script type="text/javascript">var sgpbSubsValidateObj={rules:{"sgpb-subs-email":{required:true,email:true}},};jQuery.extend(jQuery.validator.messages,{required:"Введите свой Email или нажмите кнопку закрыть"});</script> <style type="text/css">.sgpb-subs-form-2086{background-color:rgba(56,60,72,1);padding:2px}.sgpb-subs-form-2086 .js-subs-text-inputs::-webkit-input-placeholder{color:#CCC;font-weight:lighter}.sgpb-subs-form-2086 .js-subs-text-inputs::-moz-placeholder{color:#CCC;font-weight:lighter}.sgpb-subs-form-2086 .js-subs-text-inputs:-ms-input-placeholder{color:#CCC;font-weight:lighter}.sgpb-subs-form-2086 .js-subs-text-inputs:-moz-placeholder{color:#CCC;font-weight:lighter}</style></div></div></div><style type="text/css">.saboxplugin-wrap{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border:1px solid #eee;width:100%;clear:both;display:block;overflow:hidden;word-wrap:break-word;position:relative}.saboxplugin-wrap .saboxplugin-gravatar{float:left;padding:20px}.saboxplugin-wrap .saboxplugin-gravatar img{max-width:100px;height:auto}.saboxplugin-wrap .saboxplugin-authorname{font-size:18px;line-height:1;margin:20px 0 0 20px;display:block}.saboxplugin-wrap .saboxplugin-authorname a{text-decoration:none}.saboxplugin-wrap .saboxplugin-authorname a:focus{outline:0}.saboxplugin-wrap .saboxplugin-desc{display:block;margin:5px 20px}.saboxplugin-wrap .saboxplugin-desc a{text-decoration:underline}.saboxplugin-wrap .saboxplugin-desc p{margin:5px 0 12px}.saboxplugin-wrap .saboxplugin-web{margin:0 20px 15px;text-align:left}.saboxplugin-wrap .sab-web-position{text-align:right}.saboxplugin-wrap .saboxplugin-web a{color:#ccc;text-decoration:none}.saboxplugin-wrap .saboxplugin-socials{position:relative;display:block;background:#fcfcfc;padding:5px;border-top:1px solid #eee}.saboxplugin-wrap .saboxplugin-socials a svg{width:20px;height:20px}.saboxplugin-wrap .saboxplugin-socials a svg .st2{fill:#fff}.saboxplugin-wrap .saboxplugin-socials a svg .st1{fill:rgba(0,0,0,.3)}.saboxplugin-wrap .saboxplugin-socials a:hover{opacity:.8;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s;box-shadow:none!important;-webkit-box-shadow:none!important}.saboxplugin-wrap .saboxplugin-socials .saboxplugin-icon-color{box-shadow:none;padding:0;border:0;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s;display:inline-block;color:#fff;font-size:0;text-decoration:inherit;margin:5px;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;overflow:hidden}.saboxplugin-wrap .saboxplugin-socials .saboxplugin-icon-grey{text-decoration:inherit;box-shadow:none;position:relative;display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1;margin:10px 5px;color:#444}.clearfix:after,.clearfix:before{content:' ';display:table;line-height:0;clear:both}.ie7 .clearfix{zoom:1}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-twitch{border-color:#38245c}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-addthis{border-color:#e91c00}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-behance{border-color:#003eb0}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-delicious{border-color:#06c}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-deviantart{border-color:#036824}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-digg{border-color:#00327c}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-dribbble{border-color:#ba1655}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-facebook{border-color:#1e2e4f}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-flickr{border-color:#003576}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-github{border-color:#264874}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-google{border-color:#0b51c5}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-googleplus{border-color:#96271a}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-html5{border-color:#902e13}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-instagram{border-color:#1630aa}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-linkedin{border-color:#00344f}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-pinterest{border-color:#5b040e}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-reddit{border-color:#992900}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-rss{border-color:#a43b0a}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-sharethis{border-color:#5d8420}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-skype{border-color:#00658a}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-soundcloud{border-color:#995200}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-spotify{border-color:#0f612c}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-stackoverflow{border-color:#a95009}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-steam{border-color:#006388}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-user_email{border-color:#b84e05}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-stumbleUpon{border-color:#9b280e}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-tumblr{border-color:#10151b}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-twitter{border-color:#0967a0}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-vimeo{border-color:#0d7091}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-windows{border-color:#003f71}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-wordpress{border-color:#0f3647}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-yahoo{border-color:#14002d}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-youtube{border-color:#900}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-xing{border-color:#000202}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-mixcloud{border-color:#2475a0}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-vk{border-color:#243549}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-medium{border-color:#00452c}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-quora{border-color:#420e00}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-meetup{border-color:#9b181c}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-goodreads{border-color:#000}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-snapchat{border-color:#999700}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-500px{border-color:#00557f}.saboxplugin-socials.sabox-colored .saboxplugin-icon-color .sab-mastodont{border-color:#185886}.sabox-plus-item{margin-bottom:20px}@media screen and (max-width:480px){.saboxplugin-wrap{text-align:center}.saboxplugin-wrap .saboxplugin-gravatar{float:none;padding:20px 0;text-align:center;margin:0 auto;display:block}.saboxplugin-wrap .saboxplugin-gravatar img{float:none;display:inline-block;display:-moz-inline-stack;vertical-align:middle;zoom:1}.saboxplugin-wrap .saboxplugin-desc{margin:0 10px 20px;text-align:center}.saboxplugin-wrap .saboxplugin-authorname{text-align:center;margin:10px 0 20px}}body .saboxplugin-authorname a,body .saboxplugin-authorname a:hover{box-shadow:none;-webkit-box-shadow:none}a.sab-profile-edit{font-size:16px!important;line-height:1!important}.sab-edit-settings a,a.sab-profile-edit{color:#0073aa!important;box-shadow:none!important;-webkit-box-shadow:none!important}.sab-edit-settings{margin-right:15px;position:absolute;right:0;z-index:2;bottom:10px;line-height:20px}.sab-edit-settings i{margin-left:5px}.saboxplugin-socials{line-height:1!important}.rtl .saboxplugin-wrap .saboxplugin-gravatar{float:right}.rtl .saboxplugin-wrap .saboxplugin-authorname{display:flex;align-items:center}.rtl .saboxplugin-wrap .saboxplugin-authorname .sab-profile-edit{margin-right:10px}.rtl .sab-edit-settings{right:auto;left:0}.saboxplugin-wrap{border-color:#666b78}.saboxplugin-wrap .saboxplugin-socials{border-color:#666b78}.saboxplugin-wrap .saboxplugin-gravatar img{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%}.saboxplugin-wrap .saboxplugin-gravatar img{-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.saboxplugin-wrap .saboxplugin-gravatar img:hover{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.saboxplugin-wrap .saboxplugin-socials{background-color:#666b78}.saboxplugin-wrap .saboxplugin-desc p, .saboxplugin-wrap .saboxplugin-desc{color:#d8d8d8 !important}.saboxplugin-wrap .saboxplugin-desc a, .saboxplugin-wrap .saboxplugin-desc{color:#fff !important}.saboxplugin-wrap .saboxplugin-socials .saboxplugin-icon-grey{color:#b7b7b7}.saboxplugin-wrap .saboxplugin-authorname{font-family:"PT Sans"}.saboxplugin-wrap .saboxplugin-desc{font-family:PT Serif}.saboxplugin-wrap .saboxplugin-desc{font-style:italic}.saboxplugin-wrap{margin-top:0px;margin-bottom:0px;padding:0px 0px}.saboxplugin-wrap .saboxplugin-authorname{font-size:19px;line-height:26px}.saboxplugin-wrap .saboxplugin-desc p, .saboxplugin-wrap .saboxplugin-desc{font-size:16px !important;line-height:23px !important}.saboxplugin-wrap .saboxplugin-web{font-size:14px}.saboxplugin-wrap .saboxplugin-socials a svg{width:20px;height:20px}</style><style id='simple-share-buttons-adder-ssba-inline-css' type='text/css'>.ssba{}.ssba img{width:38px !important;padding:4px;border:0;box-shadow:none !important;display:inline !important;vertical-align:middle;box-sizing:unset}#ssba-classic-2 .ssbp-text{display:none!important}.ssba .fb-save{padding:4px;line-height:33px}.ssba, .ssba a{text-decoration:none;background:none;font-size:12px;color:#ffffff!important;font-weight:normal}@font-face{font-family:'ssbp';src:url('https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/fonts/ssbp.eot?xj3ol1');src:url('https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/fonts/ssbp.eot?#iefixxj3ol1') format('embedded-opentype'), url('https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/fonts/ssbp.woff?xj3ol1') format('woff'), url('https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/fonts/ssbp.ttf?xj3ol1') format('truetype'), url('https://tehnojam.pro/wp-content/plugins/simple-share-buttons-adder/fonts/ssbp.svg?xj3ol1#ssbp') format('svg');font-weight:normal;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}</style> <script type='text/javascript'>var wpcf7={"apiSettings":{"root":"https:\/\/tehnojam.pro\/wp-json\/contact-form-7\/v1","namespace":"contact-form-7\/v1"},"recaptcha":{"messages":{"empty":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0440\u043e\u0431\u043e\u0442."}},"cached":"1"};</script> <script type="text/javascript" src="https://tehnojam.pro/wp-content/cache/minify/0fef6.js"></script> <script type='text/javascript'>var PT_CV_PUBLIC={"_prefix":"pt-cv-","page_to_show":"5","_nonce":"f9c7487d8d","is_admin":"","is_mobile":"","ajaxurl":"https:\/\/tehnojam.pro\/wp-admin\/admin-ajax.php","lang":"","loading_image_src":"data:image\/gif;base64,R0lGODlhDwAPALMPAMrKygwMDJOTkz09PZWVla+vr3p6euTk5M7OzuXl5TMzMwAAAJmZmWZmZszMzP\/\/\/yH\/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAPACwAAAAADwAPAAAEQvDJaZaZOIcV8iQK8VRX4iTYoAwZ4iCYoAjZ4RxejhVNoT+mRGP4cyF4Pp0N98sBGIBMEMOotl6YZ3S61Bmbkm4mAgAh+QQFCgAPACwAAAAADQANAAAENPDJSRSZeA418itN8QiK8BiLITVsFiyBBIoYqnoewAD4xPw9iY4XLGYSjkQR4UAUD45DLwIAIfkEBQoADwAsAAAAAA8ACQAABC\/wyVlamTi3nSdgwFNdhEJgTJoNyoB9ISYoQmdjiZPcj7EYCAeCF1gEDo4Dz2eIAAAh+QQFCgAPACwCAAAADQANAAAEM\/DJBxiYeLKdX3IJZT1FU0iIg2RNKx3OkZVnZ98ToRD4MyiDnkAh6BkNC0MvsAj0kMpHBAAh+QQFCgAPACwGAAAACQAPAAAEMDC59KpFDll73HkAA2wVY5KgiK5b0RRoI6MuzG6EQqCDMlSGheEhUAgqgUUAFRySIgAh+QQFCgAPACwCAAIADQANAAAEM\/DJKZNLND\/kkKaHc3xk+QAMYDKsiaqmZCxGVjSFFCxB1vwy2oOgIDxuucxAMTAJFAJNBAAh+QQFCgAPACwAAAYADwAJAAAEMNAs86q1yaWwwv2Ig0jUZx3OYa4XoRAfwADXoAwfo1+CIjyFRuEho60aSNYlOPxEAAAh+QQFCgAPACwAAAIADQANAAAENPA9s4y8+IUVcqaWJ4qEQozSoAzoIyhCK2NFU2SJk0hNnyEOhKR2AzAAj4Pj4GE4W0bkJQIAOw==","is_mobile_tablet":"","sf_no_post_found":"\u0417\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e."};var PT_CV_PAGINATION={"first":"\u00ab","prev":"\u2039","next":"\u203a","last":"\u00bb","goto_first":"\u041d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443","goto_prev":"\u041d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443","goto_next":"\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443","goto_last":"\u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443","current_page":"\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","goto_page":"\u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443"};</script> <script type="text/javascript" src="https://tehnojam.pro/wp-content/cache/minify/2149b.js"></script> <script type='text/javascript'>var pvcArgsFrontend={"mode":"ajax","requestURL":"https:\/\/tehnojam.pro\/wp-content\/plugins\/post-views-counter\/includes\/ajax.php","postID":"504","nonce":"9edc60848f"};</script> <script type="text/javascript" src="https://tehnojam.pro/wp-content/cache/minify/b1f00.js"></script> <script type='text/javascript'>Main.boot([]);</script> <script type='text/javascript'>var sticky_anything_engage={"element":".main-nav","topspace":"0","minscreenwidth":"760","maxscreenwidth":"999999","zindex":"1","legacymode":"","dynamicmode":"","debugmode":"","pushup":"","adminbar":"1"};</script> <!--[if lte IE 11]> <script type='text/javascript' src='https://tehnojam.pro/wp-content/themes/koromo/js/classList.min.js?ver=1.0.1'></script> <![endif]--> <script type="text/javascript" src="https://tehnojam.pro/wp-content/cache/minify/8283e.js"></script> <script type='text/javascript' data-cfasync="false" async="async" defer="defer" src='https://www.google.com/recaptcha/api.js?render=explicit&ver=1.37'></script> <script type='text/javascript'>/*<![CDATA[*/var gglcptch={"options":{"version":"v2","sitekey":"6LdLqnYUAAAAAKcMT7b_RIlsSEvVHpIWIBaI6X-x","theme":"dark","error":"<strong>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/strong>: \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u043e\u0440\u043c\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 reCAPTCHA. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u0432\u0441\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 reCAPTCHA \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b."},"vars":{"visibility":false}};/*]]>*/</script> <script type="text/javascript" src="https://tehnojam.pro/wp-content/cache/minify/b3df2.js"></script> <style>code.hljs{}</style> <script type="text/javascript">(function($,window){var init_fn_flag=false;var init_fn=(function(){if(init_fn_flag) return;init_fn_flag=true;hljs.configure({"tabReplace":" "});$('pre code').each(function(i,block){hljs.highlightBlock(block);});});$(document).ready(init_fn);$(window).on("load",init_fn);})(jQuery,window);</script> </body></html>