рдПрдХреНрд╕-рд╕реВрдЪрдХред рд╣рдо рдЦрд╝рдмрд░рдЦрдмрд░ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд╕рдВрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ


рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд▓рдЧрдЗрди рд╣реИ, рдПрдХреНрд╕-рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ ред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдирдП рдкрддреНрд░, рд╕рдВрджреЗрд╢, рдФрд░ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред X-Notifier (Gmail, Yandex.Mail, Google+, Facebook, Twitter рдФрд░ рдЕрдиреНрдп) рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рднреА рд╣реЗрдмреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдЯрдХрдерд╛ рдирд╣реАрдВ рд▓рд┐рдЦреА рд╣реИ, рдпрд╣ рдЧрд▓рддрдлрд╣рдореА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рд╕реА рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдРрдб-рдСрди рдореМрдЬреВрдж рд╣реИред рд╣реИрдмрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХреЗрд╡рд▓ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ Google рдХреНрд░реЛрдо рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд╛рдж рдореЗрдВ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рддреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд▓реЗрдЦ рдирд╣реАрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ ред

рд▓рдХреНрд╖реНрдп рдЕрдзреНрдпрдпрди

рдпрджрд┐ рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рддрд╣реА рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ, рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдФрд░ рдкрд╛рд░реНрд╕ рдЯреНрд░реИрдХрд░ рдФрд░ рдбрд╛рдпрд▓реЙрдЧ рдХрд╛рдЙрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ!
рдкреГрд╖реНрда https://id.tmtm.ru/login/ (рд╣рдЯрд╛рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг) рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝реЙрд░реНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдЖрдХрд╛рд░


<form novalidate="" data-remote="true" method="post" id="login_form" class="s-form login_form validateble" action="/ajax/login/"> <input type="hidden" value="180351c318af67fa0ec59ecad9ebae72" name="state"> <input type="hidden" value="habrahabr" name="consumer"> <div class="s-field s-with-error"> <input type="email" data-validate_url="/ajax/validate/email/" id="email_field" tabindex="1" autofocus="" data-required="true" name="email" placeholder="E-mail" value=""> </div> <div class="s-field s-with-error"> <input type="password" tabindex="2" name="password" data-required="true" placeholder="" value=""> </div> <div class="s-field"> <input type="hidden" name="captcha"> <input type="hidden" id="recaptcha_challenge_field" name="recaptcha_challenge_field"> <input type="text" name="recaptcha_response_field" id="recaptcha_response_field" data-required="true" placeholder="  " value="" autocomplete="off" tabindex="3"> <div class="icon_captcha"></div> <script src="//www.google.com/recaptcha/api/challenge?k=6LftHuoSAAAAAORONRXn_6xb2f_QCtXqfbRPfY2e" type="text/javascript"> </script> <input type="hidden" value="recaptcha" name="captcha_type"> </div> </form> 


рдпрд╣рд╛рдВ рд╣рдо рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП 3 рджреГрд╢реНрдпрдорд╛рди рдлрд╝реАрд▓реНрдб (рдИрдореЗрд▓, рдкрд╛рд╕рд╡рд░реНрдб, recaptcha_response_field) рджреЗрдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдФрд░ 5 рдЫрд┐рдкреЗ рд╣реБрдП рднреА (рд░рд╛рдЬреНрдп, рдЙрдкрднреЛрдХреНрддрд╛, рдХреИрдкреНрдЪрд╛, recaptcha_challenge_field, captcha_type)ред state рдХреНрд╖реЗрддреНрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, consumer рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдореВрд▓реНрдп рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ captcha_type рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ captcha_type , captcha рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИ, recaptcha_challenge_field рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреИрдкреНрдЪрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, captcha_type рд╣рдореЗрд╢рд╛ captcha_type рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рдкрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЕрдм рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрдирд▓ рд╣реИред
рдкреИрдирд▓

 <div class="userpanel silver"> <div class="bottom"> <a href="http://habrahabr.ru/tracker/"></a> <a class="count" href="http://habrahabr.ru/tracker/">+2</a> <a href="http://habrahabr.ru/conversations/"></a> <a href="http://habrahabr.ru/users/BloodUnit/favorites/"></a> </div> </div> 


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╣рдореЗрдВ рдмрд╕ рдирд┐рдпрдорд┐рдд рд╕реАрдЬрди рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдЯреНрд░реИрдХрд░ рдФрд░ рд╕рдВрд╡рд╛рджреЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдкрдХрдбрд╝реЛ, рдпрджрд┐ рдХреЛрдИ рд╣реЛред
рдЖрдЗрдП рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВред

рдПрдкреАрдЖрдИ

рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдПрдкреАрдЖрдИ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдкрд╛рдИ рдЧрдИ, рд╡рд╣ рдереА рдХрд┐ рд▓реЙрдЧ рдХреЛ рдХреИрд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдРрдб-рдСрди рдбреЗрд╡рд▓рдкрд░ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реА рдкреЛрд╕реНрдЯ рдХреЛ рдХреИрд╕реЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ ...

рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдХреБрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 5 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдЪрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ:

рдХреБрдЫ рдЪрд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ ST_LOGIN, рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд░рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗред

рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд╣рдо рдХреБрдЫ рд╕реНрдЯреИрдЯрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╡рд╣ рдЪрд░рдг рдЬрд┐рд╕рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 function init() { this.initStage = ST_PRE; //  ,    ST_LOGIN,       ,     this.loginData = ["https://id.tmtm.ru/ajax/login/", "email", "password", "consumer=habrahabr&captcha_type=recaptcha&captcha="]; //    URL   ,      name   e-mail  ,    this.dataURL = "http://habrahabr.ru/"; // URL   this.viewURL = "http://habrahabr.ru/tracker/"; // URL      this.cookieDomain = "habrahabr.ru"; //       } 


рдЕрдЧрд▓рд╛ рдЪрд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реИ, рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 function process(aData, aHttp) { switch (this.stage) { /*    ,     state */ case ST_PRE: this.getHtml("https://auth.habrahabr.ru/login/"); return false; /*    ,  state     recaptcha,        */ case ST_PRE_RES: var recaptchaScriptLink = aData.match(/(\/\/www.google.com\/recaptcha\/api\/challenge\S+?)"/); var state = aData.match(/state=([\w\n]+)/); if (recaptchaScriptLink && state) { this.originPostData = this.loginData[LOGIN_POST]; this.loginData[LOGIN_POST] += "&state=" + encodeURIComponent(state[1]); this.referer = this.loginData[LOGIN_URL] + "?" + "&state=" + encodeURIComponent(state[1]) + "&consumer=habrahabr"; this.getHtml("https:" + recaptchaScriptLink[1]); return false; } this.onError(); break; /*          */ case ST_PRE_RES + 1: var recaptchaUid = aData.match(/challenge\s*:\s*'(\S+?)'/); if (recaptchaUid) { this.loginData[LOGIN_POST] += "&recaptcha_challenge_field=" + encodeURIComponent(recaptchaUid[1]); this.openCaptchaDialog(this.id, this.user, "https://www.google.com/recaptcha/api/image?c=" + recaptchaUid[1]); return false; } this.onError(); break; /*       */ case ST_PRE_RES + 2: this.loginData[LOGIN_POST] += "&recaptcha_response_field=" + encodeURIComponent(aData); this.stage = ST_LOGIN; return this.process(aData, aHttp); break; /*    */ case ST_LOGIN: this.getHtml(this.loginData[LOGIN_URL], this.loginData[LOGIN_POST], { Referer: this.referer }); return false; /*            */ case ST_LOGIN_RES: this.loginData[LOGIN_POST] = this.originPostData; var habrRedirectLink = aData.match(/'(.*?)'/); if (habrRedirectLink) { this.getHtml(habrRedirectLink[1]); } this.stage = ST_DATA; return true; } return this.baseProcess(aData, aHttp); } 


рдХреБрдЫ рдмрд┐рдВрджреБ рд╣реИрдВред

рд▓реЙрдЧрд┐рди рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 function checkLogin(aData, aHttp) { switch (this.stage) { /*  HTML   */ case ST_CHECK: this.getHtml(this.dataURL); return false; /*     ,   ,  */ case ST_CHECK + 1: var loginLink = aData.match(/<a.+?class="login"/); if (!loginLink) { this.stage = ST_DATA; this.getHtml(this.dataURL); return true; } else { this.stage = this.initStage; return this.process(""); } } this.onError(); return true; } 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рдЙрдВрдЯрд░:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 function getCount(aData) { var userMenu = aData.match(/userpanel[\s\S]*?charge_string/); if (!userMenu) { return -1; } else { var counter = 0; var counterRegex = /class="count"[^>]*>\+?(\d*)/g var counterResult; while ((counterResult = counterRegex.exec(userMenu[0])) !== null) { counter += +counterResult[1] || 0; } return counter; } } 


рдпрд╣рд╛рдВ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдирд┐рдпрдорд┐рдд рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд╕рд╛рдЗрдЯ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдпреЛрдЬрдирд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреИрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯред 30 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ)ред


Habr рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ X-Notifier рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреЗрдЬ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрд╛ GitHub рдкрд░ рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред рдХрд╛рдВрдЯреЗ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдРрдб-рдСрди рдкреЗрдЬ ред

Source: https://habr.com/ru/post/In210020/


All Articles