Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Анатолий Буров

Avatar for FrontFest FrontFest
November 21, 2017

Анатолий Буров

Avatar for FrontFest

FrontFest

November 21, 2017
Tweet

More Decks by FrontFest

Other Decks in Programming

Transcript

  1. Сейчас 6500 посещений в день 5 запросов в секунду 5000

    символов в запросе 1 сек в среднем на запрос
  2. Бэк Дебиан Nginx Питон 3 и Джанго 1.11 MySQL Redis

    Система контроля версий и деплоя:
 Меркуриал + хуки
  3. jQuery → React за 5 минут Шаг 0 class Glavred

    extends React.Component { render() { <div class="root"></div> } componentDidMount() { $('.root').glavred() } }
  4. class Glavred extends React.Component { render() { <div class="root"></div> }

    componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Шаг 1
  5. class Glavred extends React.Component { render() { return <div className="root"></div>

    } componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Шаг 2
  6. class Glavred extends React.Component { render() { return <div className="root"></div>

    } componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Шаг 3
  7. class Glavred extends React.Component { render() { return <div className="root"></div>

    } componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Готово
  8. < text % lexema % grammar > мои Тип 2.

    Суперегекспы мой APRO=им, APRO, им, мн Правило: < % % APRO >
  9. < text % lexema % grammar > мой мои Тип

    2. Суперегекспы APRO=им, APRO, им, мн Правило: < % % APRO >
  10. 1. Синтаксис 1.1. Повторения 1.2. Группировка 1.3. Альтернативы 1.4. Начало

    и конец 2. Синтаксис описания слова 2.1. Полная форма 2.2. Сокращенные формы 2.3. Строгое условие 3. Синтаксис грамматических помет 3.1. Базовые штуки 3.2. Комбинации Тип 2. Суперегекспы
  11. !function(){var e=function(e,t){function n(e){return{status:"error",code:e,message:c[e]}}function r(e){var t="";for(var n in e)if(e.hasOwnProperty(n)){var r;for(r=e[n]instanceof Array?e[n]:[e[n]],i=0;i<r.length;i+

    +)t.length>0&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(r[i])}return t}function o(e,t,n,o,a){var s=new XMLHttpRequest;return s.open("POST",encodeURI(e)),s.setRequestHeader("Content-Type","application/x-www- form-urlencoded"),s.onload=function(){var e=s.responseText;try{e=JSON.parse(e)}catch(t){}200==s.status? n&&n(e):o&&o(e),a&&a(e)},s.send(r(t)),s}function a(e){for(var t,n=5e4,r=[],o=/[\.?!](\s*\r|\s*\n|\s*(<\/em>)| \s*(?=<)|\s+(?=[A-ZА-Я]))/g,a=0;null!==(t=o.exec(e))&&(end=o.lastIndex,! (end>n));)r.push({text:e.slice(a,end),start:a,end:end}),a=end;return e.length<n&&r.push({text:e.slice(a),start:a,end:e.length}),r}function s(e){for(var t={status:"ok",score: 0,fragments:[]},n=[],r=0;r<e.length;r++){for(var o=e[r],a=g[o.text],s=[],u=0;u<a.length;u++){var i=a[u],f={start:o.start+i.start,end:o.start+i.end,url:"https://glvrd.ru/? text="+encodeURIComponent(o.text),hint:p[i.hint]};t.fragments.push(f),s.push(f)} n.push({text:o.text,fragments:s})}return t.score=v.getScore(n),t}var u="https://api.glvrd.ru/ v1/",f={status:u+"status/",proofread:u+"proofread/"},c={unreadable_response:"Пришел непонятный ответ от сервера",failed_request:"Запрос неудачен"},l=null,d=!1,h=/[А-Яа-яA-Za-z0-9-]+([^А-Яа-яA-Za-z0-9-]+)?/ g,g={},p={},v={getStatus:function(r){o(f.status,{key:e,token:t},function(e){r(void 0===e.status? n("unreadable_response"):e)},function(){r(n("failed_request"))})},abortProofreading:function(){l&&(d=! 0,l.abort(),l=null)},proofread:function(r,u){for(var i={},c=a(r),h=[],v=[],m=0;m<c.length;m++){var x=c[m],r=x.text;g[r]?i[r]=g[r]:(h.push(x),v.push(r))}if(0==h.length){var w=s(c);return void u(w)} l=o(f.proofread,{key:e,token:t,chunks:v},function(e){if(void 0===e.status)return void u(n("unreadable_response"));if(e.fragments.length!=h.length)return void u(n("unreadable_response"));for(var t in e.hints)p[t]=e.hints[t];for(var r=0;r<e.fragments.length;r++)i[h[r].text]=e.fragments[r];g=i,u(s(c))},function() {d?d=!1:u(n("failed_request"))},function(){l=null})},getScore:function(e){for(var t=0,n=0,r=0,o=0;o<e.length;o+ +){var a=e[o].text.trim();t+=a?a.replace(h,".").length:0;for(var s=e[o].fragments,u=0;u<s.length;u++){var i=s[u];i.hint.penalty&&(n+=i.hint.penalty),r+=i.hint.weight/100}}return 0==t?0:(score=Math.floor(100*Math.pow(1- r/t,3))-n,score=Math.min(Math.max(score,0),100),score%10==0?score/=10:score=(score/ 10).toFixed(1),score)}};return v};window.glvrd=e("","1507381067:yyzNgTG-NznZsTopih90mmGq4Vs")}(); v1. glvrd.js