рдмреИрдХрдмреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЗрд╕ рд╕реНрдЯрдбреА

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

рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╡рд┐рд╖рдп рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╣реА рд╕рддрд╣реА рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рд╣реА рд╣реИ: рдмреИрдХрдмреЛрди Jquery рдЬреИрд╕реА рдЬрдЯрд┐рд▓ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЗрд╕реЗ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ; рд╣рдо рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдореВрд░реНрддрд┐рдХрд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ: рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдкрддреНрд░-рджрд░-рдЕрдХреНрд╖рд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреБрдирд░реНрдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВред

рддреЛ, рдЖрдкрдиреЗ рд╣реИрдмреНрд░реИрдЯ рдХреА рд░реЗрдЦрд╛ рдкрд╛рд░ рдХрд░ рд▓реА рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рдереЗ:
habrahabr.ru/blogs/javascript/129928
habrahabr.ru/blogs/javascript/118782
habrahabr.ru/blogs/webdev/123130

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рддреАрдиреЛрдВ рдмреИрдХрдмреЛрди рдХреЗ рдорд╛рдирдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ? рд╕рднреА Backbone.sync рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рднреА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд╛рдХреНрдп рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╡рд╛рдХреНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЙрд╕рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрдЧреЗ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдбрд┐рдЯрд┐рдВрдЧ рдиреЛрдЯреНрд╕ рд▓рд┐рдЦреЗрдВрдЧреЗред рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реМрдВрджрд░реНрдп рд╕рдВрдмрдВрдзреА рдЗрдЪреНрдЫрд╛рдУрдВ рдФрд░ рдЪреБрдирдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рджреЛрдиреЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ: рдореИрдВ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЕрдВрдд рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдХреЛрдб рдХреЗ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╣рдо рдПрдХ рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдПрдХреНрд╕рдПрдЪрдЯреАрдПрдордПрд▓ рдкреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛрдХреНрд╡реЗрд░реА, рдЕрдВрдбрд░рд╕реНрдХреЛрд░, рдмреИрдХрдмреЛрди (рдЙрд╕ рдХреНрд░рдо рдореЗрдВ) рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл, рд╣рдо рдПрдХ php рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧреА (рдпрд╣ рдкреБрд░рд╛рд▓реЗрдЦ, app.php рдореЗрдВ рд╣реИ, рдореИрдВ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╕ рдлреЙрд░реНрдо рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ? рд╡рд┐рдзрд┐ =)ред

рдЬрдм рддреИрдпрд╛рд░реА рдкреВрд░реА рд╣реЛ рдЬрд╛рдПрдЧреА, рддреЛ рд╣рдо js рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдореЙрдбрд▓ рдФрд░ рд▓реЙрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдВ:
app = { debug: true, log: function(obj) { if(this.debug) { console.log(obj); } }, models: {} } 

Backbone.sync рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреА рдЕрдкрдиреА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЕрдиреБрдорд╛рди рдХрд░реЗрдВ рдХрд┐ рдЗрд╕реЗ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?)ред рд╣рдо рдЕрдкрдиреА рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдП рдЧрдП рдЙрджреНрджреЗрд╢реНрдп:

рдореБрдЭреЗ рдХреНрдпрд╛ рд╣реБрдЖ (рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):
 Backbone.sync = function(method, model, options) { //     var method = (method=='update'||method=='create')?'save':method; //    if(model.loading && model.loading.method == method) { model.loading.xhr.abort(); } app.log('  "'+model.url(method)+'"'); var xhr = $.ajax({ type: 'POST', url: model.url(method), data: (model instanceof Backbone.Model)?model.toJSON():{}, success: function(ret) { //    if(ret.is_error) { app.log(' '); } else { app.log(' '); (function(data){ app.log('Backbone.sync  :', data); if(data.res) { //  - ,   model.trigger('load:res', data.res); } else { //  - ,   options.success(data.rows?data.rows:data); } model.trigger((method=='save')?'save':'load', data); })(ret.data); } }, error: function (req_obj, msg, error) { app.log(' '); }, dataType: 'json' }); //       model.loading = { method: method, xhr: xhr } }; 

рдореИрдВ рдереЛрдбрд╝рд╛ рдЪрд╛рд▓рд╛рдХ рдерд╛ред рдпрджрд┐ рдЖрдк рдореЙрдбрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╣рддреЗ рд╣реИрдВ: рдкрдврд╝реА рдЧрдИ рд╕реВрдЪреА рдкрдврд╝реЗрдВ, рддреЛ рдЕрдВрддрд┐рдо рд░реАрдб рдкрд╣рд▓реЗ рдирд╣реАрдВ рдЯреВрдЯреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдмреЛрд▓реНрдЯ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рд░рд┐рдХреЙрд░реНрдб рдореЙрдбрд▓ рдХреЛрдб:
 app.models.note = (Backbone.Model.extend({ defaults: { id: 0, text: '' }, url: function(method){ return './app.php?method='+method; } })); app.models.Note = (Backbone.View.extend({ tagName: 'li', className: 'entity', render: function(){ var data = this.model.toJSON(); var that = this; $(this.el).html('').data('rowId', data.id); $(this.el).append($('<input type="text" />').val(data.text)); $(this.el).append($('<button></button>').click(function(){ app.models.page.trigger('post:save', { 'id': $(this).closest('li').data('rowId'), 'text': $(this).closest('li').find('input').val() }); })); $(this.el).append($('<button></button>').click(function(){ if(!confirm(' ,     ?')) return; app.models.notes.get($(this).closest('li').data('rowId')).destroy(); })); return this; } })); 

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА:
 app.models.notes = new (Backbone.Collection.extend({ model: app.models.note, initialize: function(){ this.bind('destroy', function(){ this.reload(); }, this); }, reload: function(){ var that = this; var options = ({ error:function(){ app.log('  !'); that.trigger('change'); }, success: function(){ app.log(' '); that.trigger('change'); } }); app.log(' ...'); this.fetch(options); }, url: function(method){ return './app.php?method=list'; } })); 

рдФрд░ рдЕрдВрддрд┐рдо, рдкреГрд╖реНрда рдореЙрдбрд▓:
 app.models.page = new (Backbone.View.extend({ el: null, el_list: null, notes: null, initialize: function(){ this.bind('page:load', this.pageLoad, this); this.bind('list:reload', this.listReload, this); this.bind('post:save', this.postSave, this); this.notes = app.models.notes; this.notes.bind('change', this.onListChange, this); this.notes.bind('load:res', this.onListChange, this); return this; }, pageLoad: function(data) { var that = this; this.el = $('.layout'); this.el_list = this.el.find('.items-list'); //   this.el.find('.title .refresh').bind('click', function(){ that.trigger('list:reload') }); //   this.el.find('.items-add-submit').bind('click', function(){ that.trigger('post:save', { id: false, text: $('.items-add-text').val() }); }); this.trigger('list:reload'); }, render: function(ret){ $(this.el_list).html(''); if(!ret) { app.log(' . : '+this.notes.length); _(this.notes.models).each(function(item){ this.appendItem(item); }, this); } else { app.log(' . : "'+ret+'"'); $(this.el_list).html('').append($('<li class="res"></li>').text(ret)); } return this; }, appendItem: function(item) { var view = new app.models.Note({ model: item }); $(this.el_list).append(view.render().el); }, onListChange: function(ret){ this.render(ret); }, postSave: function(obj){ var model = new app.models.note(); if(obj.id) { model.set({ id:obj.id }); } model.set({ text:obj.text }); model.save(); this.trigger('list:reload'); }, listReload: function(){ this.notes.reload(); } })); 

рд╡реЗ рдХреБрдЫ рднреВрд▓ рдЧрдП ... рдУрд╣ рд╣рд╛рдБ, рд╣рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
 $(document).ready(function(){ app.models.page.trigger('page:load'); }); 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрдмрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХреЛрдб рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦ рдПрдХ рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬреЛ рдХрдо рд╕реЗ рдХрдо js / рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдВрдХ рджрд┐рдП, рд╕рдм рдХреБрдЫ рд╡рд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рдпрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ - рддреЛ рд▓рд┐рдЦреЗрдВред
рдХреЛрдб рдЗрди рдПрдХреНрд╢рди: рдпреБрд░реЛрд╡.рдорд╛рд░реНрдЯ / рдХрд╛рд░реНрдЯ
рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рднреА рдХреЛрдб: yurov.me/art/art.tar.gz

рд╕рд░реНрд╡рд░ рдкрд░ рдкреАрдПрд╕ рдХреЛрдб рдУрдХ рд╣реИ, рдЧреНрд▓рд┐рдЪ рд╕рдВрднрд╡ рд╣реИрдВред рдпрд╣ рджреГрд╢реНрдпрдкрдЯрд▓ рджрд┐рдЦрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

PPS рдХреЙрдорд░реЗрдб oWeRQ рдиреЗ рдХреЛрдб рдХреЛ рдХреНрд░рдо рдореЗрдВ рд░рдЦрд╛, рдореИрдВ рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ (рдЗрд╕рдХрд╛ рдХреЛрдб рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ):
owerq.dyndns.org/test/art

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


All Articles