Îäíèì èç íàèáîëåå ðàñïðîñòðàíåííûõ âèäîâ îïòèìèçàöèè ðàáîòû âåá
ïðèëîæåíèé ÿâëÿåòñÿ êýøèðîâàíèå, ñóòü êîòîðîãî çàêëþ÷àåòñÿ â ñëåäó
þùåì. Çà÷àñòóþ ïðèëîæåíèþ ïðèõîäèòñÿ ðåøàòü ïî çàïðîñó ïîëüçîâà
òåëÿ îäíó è òó æå çàäà÷ó. Åñëè äëÿ ýòîãî íåîáõîäèìî ìíîãî âðåìåíè, òî ïðîèñõîäèò çíà÷èòåëüíîå óìåíüøåíèå ïðîèçâîäèòåëüíîñòè. ×òîáû èçáå
æàòü ðåøåíèÿ îäíîé è òîé æå çàäà÷è ìíîãî ðàç èñïîëüçóþò êýøèðîâà
íèå. Âìåñòî ìíîãîêðàòíîãî âûïîëíåíèÿ ïðîöåäóðû ïîëó÷åíèÿ äàííûõ èõ ïîëó÷àþò îäèí ðàç, à çàòåì ïðîñòî ñîõðàíÿþò. Òàêèì îáðàçîì, ïðè íåîáõîäèìîñòè ïîâòîðíîãî ðåøåíèÿ îäíîé è òîæå çàäà÷è íåîáõîäèìî ïðî
ñòî ïåðåäàòü ðåçóëüòàò, êîòîðûé áûë ñîõðàíåí ïðè ïåðâîì çàïðîñå ðåøå
íèÿ.  Ruby on Rails íàèáîëåå àêòèâíî èñïîëüçóþòñÿ ÷åòûðå âèäà êý
øèðîâàíèÿ: êýøèðîâàíèå îáúåêòîâ, êýøèðîâàíèå ñòðàíèö, êýøèðîâàíèå äåéñòâèé è êýøèðîâàíèå ôðàãìåíòîâ. Ðàññìîòðèì ïîäðîáíåå êàæäûé èç íèõ.
Êýøèðîâàíèå îáúåêòîâ
Íàèáîëåå î÷åâèäíûì âèäîì êýøèðîâàíèÿ ÿâëÿåòñÿ êýøèðîâàíèå îáúåê
òîâ, êîòîðîå ïîçâîëÿåò ïîìåùàòü ÷àñòî èñïîëüçóåìûå îáúåêòû âî âíåø
íåå õðàíèëèùå, äîñòóï ê êîòîðîìó ðåàëèçîâàí ýôôåêòèâíåå, ÷åì ïîëó÷å
íèå è ôîðìèðîâàíèå îáúåêòà âíóòðè ïðèëîæåíèÿ. Â äàííîé ðàáîòå ýòîò âèä êýøèðîâàíèÿ íå èñïîëüçóåòñÿ, ïîñêîëüêó, äðóãèå âèäû êýøèðîâàíèÿ â äàííîé ñèòóàöèè ÿâëÿþòñÿ áîëåå ïðåäïî÷òèòåëüíûìè â ñèëó òîãî, ÷òî
â ðàçðàáàòûâàåìîé ñèñòåìå áîëåå ïðèãîäíîé äëÿ êýøèðîâàíèÿ ÿâëÿåòñÿ íå ñàì îáúåêò, à åãî ïðåäñòàâëåíèå èëè ïðåäñòàâëåíèå íàáîðà ïîäîáíûõ îáúåêòîâ.
Êýøèðîâàíèå ñòðàíèö
Êýøèðîâàíèå ñòðàíèö íàèáîëåå ïðîñòàÿ è ýôôåêòèâíàÿ ôîðìà êýøè
ðîâàíèÿ ïðåäñòàâëåíèÿ äàííûõ, èìåþùàÿñÿ â Rails. Êîãäà ïîëüçîâàòåëè ïîñûëàþò ïåðâîíà÷àëüíûé çàïðîñ ïî êîíêðåòíîìó URL, ïðèëîæåíèå âû
ïîëíÿåò íåîáõîäèìûå äåéñòâèÿ è ñîçäàåò HTML-ñòðàíèöó. Ñîäåðæèìîå ýòîé ñòðàíèöû ñîõðàíÿåòñÿ â êýøå. Ïðè íåîáõîäèìîñòè ïîâòîðíîé îáðà
áîòêè çàïðîñà ñ òåì æå URL, HTML-êîä ýòîé ñòðàíèöû îòïðàâëÿåòñÿ ïðÿìî èç êýøà. Ïðè ýòîì ôàêòè÷åñêè ïðèëîæåíèå íå âñòóïàåò â ðàáîòó, âñþ ðàáîòó â ïîñëåäíåì ñëó÷àå âûïîëíÿåò âåá-ñåðâåð. Òàêèì îáðàçîì, îáðàáîòêà ïîäîáíûõ çàïðîñîâ çàíèìàåò ìèíèìàëüíî âîçìîæíîå âðåìÿ, êîòîðîå çàâèñèò îò ñêîðîñòè ðàáîòû âåá-ñåðâåðà.
Íåñìîòðÿ íà ïðîñòîòó, ïîäîáíûé ïîäõîä ê êýøèðîâàíèþ îêàçûâàåòñÿ íå ïðèãîäíûì â ðàìêàõ ñîçäàâàåìîãî ïðèëîæåíèÿ. Ïîñêîëüêó ïðè çàïðî
ñå ñòðàíèöû èç êýøà ïðèëîæåíèå íå çàäåéñòâóåòñÿ, òî ëþáîé ïîëüçîâà
òåëü ìîæåò ïîëó÷èòü ëþáóþ ñòðàíèöó, ñîõðàíåííóþ â êýøå.  ïðîåêòå æå èñïîëüçóåòñÿ ñòðîãàÿ äèôôåðåíöèàöèÿ ïðè ïîêàçå ñîäåðæèìîãî ðàç
ëè÷íûì ïîëüçîâàòåëÿì. Âî-ïåðâûõ, íåàâòîðèçîâàííûå ïîëüçîâàòåëè íå äîëæíû èìåòü âîçìîæíîñòü ïîëó÷àòü äîñòóï ê ñèñòåìå. Âî-âòîðûõ, èìå
åòñÿ çàâèñèìîñòü ìåæäó ðîëÿìè ïîëüçîâàòåëÿ è óðîâíåì äîñòóïíîñòè èíôîðìàöèè. Êàê ñëåäñòâèå ýòîìó, ïî îäíîìó è òîìó æå URL ðàçëè÷
íûå ïîëüçîâàòåëè áóäóò ïîëó÷àòü ðàçëè÷íûå HTML-ôàéëû.
Êýøèðîâàíèå äåéñòâèé
Äëÿ òîãî, ÷òîáû èìåòü âîçìîæíîñòü êýøèðîâàíèÿ ñòðàíèö, äîñòóï ê êî
òîðûì èìåþò ëèøü îãðàíè÷åííûå êàòåãîðèè ïðèâèëåãèðîâàííûõ ïîëüçî
âàòåëåé, èñïîëüçóåòñÿ êýøèðîâàíèå äåéñòâèé. Åãî öåëüþ òàêæå ÿâëÿåòñÿ êýøèðîâàíèå ñîäåðæèìîãî âñåé ñòðàíèöû öåëèêîì, îäíàêî îíî äàåò âîç
ìîæíîñòü ôèëüòðàöèè ïîëüçîâàòåëåé, êîòîðûì äîñòóïåí ïðîñìîòð ñòðà
íèöû. Îíî ïîçâîëÿåò ïåðåä ïåðåäà÷åé ñîäåðæèìîãî ïðèíÿòü ðåøåíèå î âîçìîæíîñòè ïðåäîñòàâëåíèÿ ïîëüçîâàòåëþ äîñòóïà ê çàïðàøèâàåìîìó èì äåéñòâèþ. Òàêîé ïîäõîä ïîçâîëÿåò èçáåæàòü ïðîáëåìû íåîãðàíè÷åí
íîãî äîñòóïà ê ñîäåðæèìîìó, îäíàêî íå ðåøàåò ïðîáëåìû ðàçëè÷èÿ ïå
ðåäàâàåìûõ HTML-ñòðàíèö îò ðîëè ïîëüçîâàòåëÿ.
 ðàçðàáîòàííîì ïðèëîæåíèè äàííûé âèä êýøèðîâàíèÿ òàêæå íå èñ
ïîëüçóåòñÿ, ïîòîìó ÷òî íà êàæäîé ñòðàíèöå èíôîðìàöèîííîé ñèñòåìû ïîëüçîâàòåëþ îòîáðàæàåòñÿ ìåíþ, êîòîðîå çàâèñèò îò ïðèâèëåãèé êîí
êðåòíîãî ïîëüçîâàòåëÿ.
Êýøèðîâàíèå ôðàãìåíòîâ
Êàê áûëî ïîêàçàíî ðàíåå, ïðè ñîçäàíèè äèíàìè÷åñêèõ âåá-ïðèëîæåíèé êýøèðîâàíèå ñòðàíèöû öåëèêîì îêàçûâàåòñÿ âîçìîæíûì òîëüêî â î÷åíü ðåäêèõ ñëó÷àÿõ, ïîñêîëüêó ðàçëè÷íûå ôðàãìåíòû ñòðàíèöû ñòàíîâÿòñÿ èíäèâèäóàëüíûìè äëÿ êàæäîãî ïîëüçîâàòåëÿ. Êýøèðîâàíèå îòäåëüíûõ ôðàãìåíòîâ ñòðàíèöû ñïîñîáíî ðàçðåøèòü ýòó ïðîáëåìó. Îíî ïîçâîëÿåò õðàíèòü â êýøå íå ñòðàíèöó öåëèêîì, à ëèøü íåêîòîðóþ åå ÷àñòü. Ïðè ýòîì îòñóòñòâóåò îãðàíè÷åíèå íà êîëè÷åñòâî êýøèðóåìûõ ôðàãìåíòîâ íà ñòðàíèöå. Ïîñêîëüêó â ýòîì ñëó÷àå ðåçêî óâåëè÷èâàåòñÿ îáúåì õðàíè
ìîé èíôîðìàöèè äëÿ êàæäîé ñòðàíèöû, òî âñòàåò âîïðîñ îá ýôôåêòèâ
íîì ñðåäñòâå äëÿ õðàíåíèÿ êýøà. Ruby on Rails ïðåäîñòàâëÿåò íåñêîëüêî ñòðàòåãèé õðàíåíèÿ: â ïàìÿòè, â îòäåëüíîì êàòàëîãå, íà îòäåëüíîì ñåð
âåðå è äð. Íàèáîëåå ðàöèîíàëüíûì ñðåäñòâîì äëÿ êýøèðîâàíèå ôðàã
ìåíòîâ íà ñåãîäíÿøíèé äåíü ÿâëÿåòñÿ memcached [48]. Memcached âûñîêîïðîèçâîäèòåëüíàÿ ðàñïðåäåëåííàÿ ñèñòåìà êýøèðîâàíèÿ. Ïî ñóòè êýøèðîâàíèå ñ ïîìîùüþ memcached ïðåäñòàâëÿåò ñîáîé íåêîå ïîäîáèå ãëîáàëüíîãî àññîöèàòèâíîãî ìàññèâà, â êîòîðîì êàæäîìó êëþ÷ó ñîîòâåò
ñòâóåò îïðåäåëåííîå çíà÷åíèå (ôðàãìåíò) [49].
Êýøèðîâàíèå ôðàãìåíòîâ ÿâëÿåòñÿ î÷åíü ãèáêèì èíñòðóìåíòîì è ïîç
âîëÿåò áåç îñîáûõ çàòðóäíåíèé ñîõðàíÿòü ðàçëè÷íûå ÷àñòè ñòðàíèöû, òåì ñàìûì çíà÷èòåëüíî óñêîðÿÿ ðàáîòó ïðèëîæåíèÿ. Ïðè ýòîì îáëàñòü ïðèìåíåíèÿ êýøèðîâàíèÿ ôðàãìåíòîâ ïðàêòè÷åñêè íå îãðàíè÷åíà. Îä
íàêî ýòîò âèä êýøèðîâàíèÿ ìåíåå ýôôåêòèâåí ïî ñðàâíåíèþ ñ êýøèðî
âàíèåì äåéñòâèé.
 êà÷åñòâå ïðèìåðà ìîæíî ïðèâåñòè êýøèðîâàíèå ôðàãìåíòà ñòðà
íèöû c æóðíàëîì íà÷èñëåíèÿ ðåéòèíãîâûõ áàëëîâ ïî äèñöèïëèíå, íà êîòîðîé ñîäåðæèòñÿ òàáëèöà ñ ðàñïðåäåëåíèåì âñåõ ðåéòèíãîâûõ áàëëîâ ñòóäåíòîâ ïî äíÿì (ðèñ. 6). Ïðè îòñóòñòâèè êýøèðîâàíèÿ ïðèâåäåííûé ôðàãìåíò ãåíåðèëñÿ, â ñðåäíåì, çà 3,58 c. Ïîñëå äîáàâëåíèÿ êýøèðîâàíèÿ îïåðàöèÿ ïî ïîëó÷åíèþ ôðàãìåíòà èç êýøà è åãî îáðàáîòêå ñòàëà çàíè
ìàòü, â ñðåäíåì, 0,08 c. Òàêèì îáðàçîì, áûëî ïîëó÷åíî ïî÷òè 45-êðàòíîå óñêîðåíèå . Ñòîèò îòìåòèòü, ÷òî â äåéñòâèòåëüíîñòè èíòåãðàëüíûé ðîñò
ïðîèçâîäèòåëüíîñòè áóäåò íåñêîëüêî ìåíüøå â ñèëó òîãî, ÷òî íà÷èñëå
íèå ðåéòèíãîâûõ áàëëîâ ïî ëþáîìó âèäó ðàáîòû ïðèâåäåò ê ïîòåðå àê
òóàëüíîñòè äàííîé òàáëèöû öåëèêîì è, êàê ñëåäñòâèå, íåîáõîäèìîñòè åå ïîâòîðíîé ãåíåðàöèè ïðè ïîïûòêå ïðîñìîòðà. Äëÿ ïðîâåðêè àêòóàëü
íîñòè ôðàãìåíòà èñïîëüçóåòñÿ ñïåöèàëüíàÿ ñèñòåìà êëþ÷åé êýøèðîâà
íèÿ, îñíîâàííàÿ íà âðåìåííûõ øòàìïàõ è èçëîæåííàÿ íà êîíôåðåíöèè RailsClub [50].
Ðèñ.6.Ôðàãìåíòñòðàíèöû¾Æóðíàëíà÷èñëåíèÿ ðåéòèíãîâûõáàëëîâïîäèñöèïëèíå¿
Çàêëþ÷åíèå
 ðåçóëüòàòå ïðîäåëàííîé ðàáîòû ïîëó÷åíà ïðîñòàÿ, ãèáêàÿ è ñîâðåìåí
íàÿ èíôîðìàöèîííàÿ ñèñòåìà, îñíîâàííàÿ íà îòêðûòûõ òåõíîëîãèÿõ è ïðîäóêòàõ, ïðåäíàçíà÷åííàÿ äëÿ îðãàíèçàöèè ó÷åáíîãî ïðîöåññà ñòóäåí
òîâ âûñøèõ ó÷åáíûõ çàâåäåíèé. Èñïîëüçîâàííûå ïðè ðàçðàáîòêå ñèñòå
ìû ïðèíöèïû äàþò âîçìîæíîñòü åå èñïîëüçîâàíèÿ äëÿ ëþáûõ ôîðì è íàïðàâëåíèé îáó÷åíèÿ.
Ñîçäàííîå âåá-ïðèëîæåíèå èñïîëüçóåòñÿ â ÃÎÓ ÌÃÈÓ äëÿ îðãàíèçà
öèè ó÷åáíîãî ïðîöåññà ñòóäåíòîâ, îáó÷àþùèõñÿ ïî íàïðàâëåíèþ ¾Èíôîð
ìàòèêà è âû÷èñëèòåëüíàÿ òåõíèêà¿ è ñïåöèàëüíîñòè ¾Ìàòåìàòè÷åñêîå îáåñïå÷åíèå è àäìèíèñòðèðîâàíèå èíôîðìàöèîííûõ ñèñòåì¿. Çà 3,5 ìå
ñÿöà îñåííåãî ñåìåñòðà 20102011 ó÷åáíîãî ãîäà ïîëüçîâàòåëè ñèñòåìû ñîâåðøèëè áîëåå 23 000 âõîäîâ â ñèñòåìó è ïîñåòèëè ðàçëè÷íûå ñòðà
íèöû ïîðòàëà áîëåå 65 000 ðàç. Îáùåå âðåìÿ èõ íåïðåðûâíîé ðàáîòû ïðåâûñèëî 750 ÷àñîâ. Çà ýòîò ïåðèîä ïîëüçîâàòåëÿìè áûëî çàãðóæåíî áîëåå 750 ôàéëîâ, à ïðåïîäàâàòåëè âûñòàâèëè ñòóäåíòàì 7000 îöåíîê.
Èñïîëüçîâàíèå èíôîðìàöèîííîé ñèñòåìû ïîçâîëèëî ïîâûñèòü ýôôåê
òèâíîñòü îáðàçîâàòåëüíîãî ïðîöåññà, çíà÷èòåëüíî óâåëè÷èòü êîëè÷åñòâî îáúåêòèâíûõ ñòàòèñòè÷åñêèõ ïîêàçàòåëåé, õàðàêòåðèçóþùèõ ðàáîòó ñòó
äåíòîâ è ïðåïîäàâàòåëåé, ñîçäàòü íîâûå ìåõàíèçìû óïðàâëåíèÿ.
 áëèæàéøåì áóäóùåì ïëàíèðóåòñÿ äàëüíåéøåå ðàçâèòèå ñèñòåìû:
ïåðåõîä íà íîâóþ âåðñèþ ñðåäû Ruby on Rails 3.0 (òåêóùàÿ âåðñèÿ 2.3.8), èñïîëüçîâàíèå ÿçûêà ðàçìåòêè HTML 5 è ñòàíäàðòà CSS 3. Ïëàíè
ðóåòñÿ òàêæå ðàçðàáîòêà ñïåöèàëüíîé âåðñèè âåá-ñàéòà äëÿ ìîáèëüíûõ óñòðîéñòâ (âêëþ÷àÿ óñòðîéñòâà ðàáîòàþùèå ïîä óïðàâëåíèåì ìîáèëü
íûõ îïåðàöèîííûõ ñèñòåì Windows Phone, Android, iOS).
Ïðèëîæåíèå A
Ïîëíàÿ ñõåìà äàííûõ ñèñòåìû
ActiveRecord::Schema.define(:version => 20101205183604) do
create_table "audits", :force => true do |t|
t.integer "auditable_id"
t.string "auditable_type"
t.integer "user_id"
t.string "user_type"
t.string "username"
t.string "action"
t.text "changes"
t.integer "version", :default => 0 t.string "comment"
t.datetime "created_at"
end
create_table "clicks", :force => true do |t|
t.integer "user_id"
t.integer "page_id"
t.integer "quantity"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "contents", :force => true do |t|
t.text "body"
t.integer "ctype"
t.integer "page_id"
t.integer "position"
t.datetime "visible_at"
t.boolean "visible", :default => true t.integer "user_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "courses", :force => true do |t|
t.string "name"
t.string "fullname"
t.integer "position"
t.integer "study_year_id"
t.string "external_id"
t.integer "ctype"
t.integer "marks_status", :default => 0 t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "courses_groups", :id => false, :force => true do |t|
t.integer "course_id"
t.integer "group_id"
end
create_table "courses_users", :id => false, :force => true do |t|
t.integer "course_id"
t.integer "user_id"
end
create_table "delayed_jobs", :force => true do |t|
t.integer "priority", :default => 0 t.integer "attempts", :default => 0 t.text "handler"
t.text "last_error"
t.datetime "run_at"
t.datetime "locked_at"
t.datetime "failed_at"
t.string "locked_by"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "emails", :force => true do |t|
t.string "email"
t.string "activation_code"
t.integer "user_id"
t.integer "mode", :default => 0 t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "groups", :force => true do |t|
t.string "name"
t.integer "study_year_id"
t.datetime "start"
t.datetime "finish"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "groups_users", :id => false, :force => true do |t|
t.integer "group_id"
t.integer "user_id"
end
create_table "items", :force => true do |t|
t.string "name"
t.string "fullname"
t.integer "course_id"
t.integer "position"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "lofiles", :force => true do |t|
t.string "filename"
t.string "content_type"
t.integer "loid"
t.string "filesize"
t.integer "message_id"
t.integer "visibility", :default => 0 t.datetime "visible_at"
t.string "dirname"
t.string "comment"
t.integer "user_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "mark_names", :force => true do |t|
t.integer "course_id"
t.string "name"
t.integer "min_value"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "marks", :force => true do |t|
t.integer "user_id"
t.integer "ritem_id"
t.integer "value"
t.string "comment"
t.integer "quiz_id"
t.integer "operator_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "messages", :force => true do |t|
t.string "theme"
t.text "body"
t.integer "sender_id"
t.datetime "send_at"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "parent_id"
end
create_table "pages", :force => true do |t|
t.integer "position"
t.integer "item_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "quizzes", :force => true do |t|
t.string "name"
t.integer "ritem_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "readings", :force => true do |t|
t.integer "user_id"
t.integer "message_id"
t.datetime "read_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "relationships", :force => true do |t|
t.integer "user_id"
t.integer "parent_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "rights", :force => true do |t|
t.string "name"
t.string "description"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "rights_roles", :id => false, :force => true do |t|
t.integer "right_id"
t.integer "role_id"
t.datetime "deleted_at"
end
create_table "ritems", :force => true do |t|
t.string "name"
t.string "fullname"
t.integer "max_value"
t.integer "position"
t.integer "course_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "roles", :force => true do |t|
t.string "name"
t.string "fullname"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "roles_users", :id => false, :force => true do |t|
t.integer "role_id"
t.integer "user_id"
end
create_table "study_years", :force => true do |t|
t.string "name"
t.string "fullname"
t.boolean "current"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "subscribes", :force => true do |t|
t.integer "user_id"
t.integer "item_id"
t.integer "stype"
t.datetime "last_mailed_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", :force => true do |t|
t.string "login"
t.string "name"
t.integer "external_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "visits", :force => true do |t|
t.string "ip"
t.integer "user_id"
t.integer "study_year_id"
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
end end
Ëèòåðàòóðà è ãèïåðññûëêè
[1] Ä. Òîìàñ, Ä. Õ. Õýíññîí ¾Ãèáêàÿ ðàçðàáîòêà âåá-ïðèëîæåíèé â ñðåäå Rails¿ ÑÏá.: Ïèòåð, 2008 716ñ.: èë.
[2] Ôóëòîí Õ. ¾Ïðîãðàììèðîâàíèå íà ÿçûêå Ruby¿ Ì.: ÄÌÊ Ïðåññ, 2007. 688ñ.: èë.
[3] Ñòàòüÿ î ñèñòåìàõ ýëåêòðîííîãî îáó÷åíèÿ.
URL: http://ru.wikipedia.org/wiki/E-learning (äàòà îá
ðàùåíèÿ: 11.12.2010).
[4] Èíòåðíåò óíèâåðñèòåò èíôîðìàöèîííûõ òåõíîëîãèé.
URL: http://www.intuit.ru (äàòà îáðàùåíèÿ: 09.12.2010).
[5] Èíôîðìàöèîííî-îáðàçîâàòåëüíûé ïîðòàë ÃÎÓ ÂÏÎ ¾Òþìåíñêèé ãîñóäàðñòâåííûé óíèâåðñèòåò¿. URL: http://www.distance.ru (äàòà îáðàùåíèÿ: 18.11.2010).
[6] Îáðàçîâàòåëüíûé ïîðòàë Öåíòðà äèñòàíöèîííîãî îáó÷åíèÿ Ìîñ
êîâñêîãî ãîñóäàðñòâåííîãî èíñòèòóòà ýëåêòðîíèêè è ìàòå
ìàòèêè. URL: http://dlc.miem.edu.ru (äàòà îáðàùåíèÿ:
18.11.2010).
[7] Ñèñòåìà äèñòàíöèîííîãî îáðàçîâàíèÿ Ìîñêîâñêîãî ãîñóäàðñòâåí
íîãî èíäóñòðèàëüíîãî óíèâåðñèòåòà. URL: http://sde.ru (äàòà îáðàùåíèÿ: 16.11.2010).
[8] Moodle learning management system.
URL: http://www.moodle.org (äàòà îáðàùåíèÿ: 15.11.2010).
[9] Còàòèñòèêà èñïîëüçîâàíèÿ Moodle â Ðîññèè.
URL: http://moodle.org/sites/index.php?country=RU (äà
òà îáðàùåíèÿ: 09.12.2010).
[10] Sakai learning management system.
URL: http://www.sakaiproject.org/portal (äàòà îáðàùåíèÿ:
07.12.2010).
[11] Ruby programming language. URL: http://www.ruby-lang.org (äàòà îáðàùåíèÿ: 07.12.2010).
[12] Ñòàòüÿ î ÿçûêå ïðîãðàììèðîâàíèÿ Ruby.
URL: http://ru.wikipedia.org/wiki/Ruby (äàòà îáðàùåíèÿ:
07.12.2010).
[13] Ñòàòüÿ î ñðåäå Ruby on Rails.
URL: http://ru.wikipedia.org/wiki/Ruby_on_Rails (äàòà îáðàùåíèÿ: 07.12.2010).
[14] Ruby on Rails framework. URL: http://www.rubyonrails.org (äàòà îáðàùåíèÿ: 07.12.2010).
[15] PostgreSQL database. URL: http://www.postgresql.org (äàòà îáðàùåíèÿ: 07.12.2010).
[16] Ðåçóëüòàòû ñåðòèôèêàöèè êà÷åñòâà PostgreSQL.
URL: http://www.postgresql.org/about/news.363 (äàòà îá
ðàùåíèÿ: 08.12.2010).
[17] Mongrel web-server repository. URL: http://github.com/
fauna/mongrel (äàòà îáðàùåíèÿ: 08.12.2010).
[18] Unicorn HTTP server. URL: http://unicorn.bogomips.org (äà
òà îáðàùåíèÿ: 08.12.2010).
[19] Phusion Passenger. URL: http://www.modrails.com (äàòà îáðà
ùåíèÿ: 08.12.2010).
[20] The Apache Software Foundation. URL: http://www.apache.org (äàòà îáðàùåíèÿ: 08.12.2010).
[21] Netcraft Web Server Survey. URL: http://news.netcraft.com/
archives/2010/12/01/december-2010-web-server-survey.html (äàòà îáðàùåíèÿ: 09.12.2010).
[22] Ñòàòüÿ î òåõíîëîãèè Adobe Flash.
URL: http://ru.wikipedia.org/wiki/Adobe_Flash (äàòà îá
ðàùåíèÿ: 09.12.2010).
[23] Ñòàòüÿ î ÿçûêå ïðîãðàììèðîâàíèÿ JavaScript.
URL: http://ru.wikipedia.org/wiki/JavaScript (äàòà îá
ðàùåíèÿ: 09.12.2010).
[24] Ñòàòüÿ î ñòðàòåãèè AJAX. URL: http://ru.wikipedia.org/
wiki/AJAX (äàòà îáðàùåíèÿ: 09.12.2010).
[25] jQuery JavaScript library. URL: http://jquery.com (äàòà îáðà
ùåíèÿ: 09.12.2010).
[26] Git Version Control System. URL: http://git-scm.com (äàòà îá
ðàùåíèÿ: 09.12.2010).
[27] Capistrano utility. URL: http://github.com/capistrano/
capistrano (äàòà îáðàùåíèÿ: 09.12.2010).
[28] Capistrano: óäàëåííîå ðàçâåðòûâàíèå ïðèëîæåíèé.
URL: http://habrahabr.ru/blogs/webdev/49127 (äàòà îáðà
ùåíèÿ: 09.12.2010).
[29] IDC Russia. URL: http://www.idcrussia.com (äàòà îáðàùåíèÿ:
09.12.2010).
[30] Sphinx Search Server. URL: http://sphinxsearch.com (äàòà îá
ðàùåíèÿ: 10.12.2010).
[31] Textile Markup language. URL: http://textile.
thresholdstate.com (äàòà îáðàùåíèÿ: 08.12.2010).
[32] RedCloth module. URL: http://redcloth.org (äàòà îáðàùåíèÿ:
08.12.2010).
[33] Ñèñòåìà ó÷åòà ïîñåùàåìîñòè çàíÿòèé ÃÎÓ ÌÃÈÓ.
URL: http://absences.msiu.ru (äàòà îáðàùåíèÿ: 10.12.2010).
[34] Ñîöèàëüíàÿ ñåòü Facebook. URL: http://facebook.com (äàòà îáðàùåíèÿ: 08.12.2010).
[35] Âñòðàèâàåìûé ìîäóëü äëÿ ôîíîâîãî âûïîëíåíèÿ çàäàíèé.
URL: https://github.com/tobi/delayed_job (äàòà îáðàùåíèÿ:
08.12.2010).
[36] Rake utility. URL: http://rake.rubyforge.org (äàòà îáðàùå
íèÿ: 3.12.2010).
[37] Ïëàíèðîâùèê çàäà÷ Cron. URL: http://crontab.org (äàòà îá
ðàùåíèÿ: 25.11.2010).
[38] Âåá-ñåðâèñ ýëåêòðîííîé ïî÷òû GMail. URL: http://gmail.com (äàòà îáðàùåíèÿ: 12.12.2010).
[39] Âñòðàèâàåìûé ìîäóëü àóäèòà èçìåíå
íèé äëÿ ñðåäû Ruby on Rails.
URL: https://github.com/collectiveidea/acts_as_audited (äàòà îáðàùåíèÿ: 29.11.2010).
[40] Âñòðàèâàåìûé ìîäóëü áåçîïàñíîãî óäàëå
íèÿ îáúåêòîâ äëÿ ñðåäû Ruby on Rails.
URL: https://github.com/technoweenie/acts_as_paranoid (äàòà îáðàùåíèÿ: 29.11.2010).
[41] Thinking Sphinx library. URL: http://freelancing-god.
github.com/ts/en (äàòà îáðàùåíèÿ: 11.12.2010).
[42] jHtmlArea WYSIWYG-editor. URL: http://jhtmlarea.
codeplex.com (äàòà îáðàùåíèÿ: 09.12.2010).
[43] WYSIWYG-ñïîñîá ðåäàêòèðîâàíèÿ.
URL: http://ru.wikipedia.org/wiki/WYSIWYG (äàòà îáðàùå
íèÿ: 09.12.2010).
[44] Ïðîôèëèðîâàíèå Rails-ïðèëîæåíèÿ.
URL: http://rubybrothers.ru/2008/4/8/
simple-rails-profiling-and-benchmarking (äàòà îáðàùåíèÿ:
11.12.2010).
[45] Ñòàòüÿ î íîðìàëèçàöèè ðåëÿöèîííûõ áàç äàííûõ.
URL: http://ru.wikipedia.org/wiki/Íîðìàëüíàÿ_ôîðìà (äàòà îáðàùåíèÿ: 11.12.2010).
[46] Áðþñ Òýéò ¾Ïðàêòè÷åñêîå èñïîëüçîâàíèå
Rails: ×àñòü 3. Îïòèìèçàöèÿ ActiveRecord¿
URL: http://www.ibm.com/developerworks
/web/library/wa-rails3/ (äàòà îáðàùåíèÿ: 11.12.2010).
[47] Ñòàòüÿ îá èíäåêñàõ â ðåëÿöèîííûõ áàçàõ äàííûõ.
URL: http://ru.wikipedia.org/wiki/Èíäåêñ_(áàçû_äàííûõ) (äàòà îáðàùåíèÿ: 12.12.2010).
[48] Memcached caching system. URL: http://www.memcached.org (äàòà îáðàùåíèÿ: 12.12.2010).
[49] Ñòàòüÿ î ñèñòåìå êýøèðîâàíèÿ Memcached.
URL: http://www.insight-it.ru/unix-way/obzor-memcached (äàòà îáðàùåíèÿ: 12.12.2010).
[50] ¾Óìíîå¿ êýøèðîâàíèÿ â Rails.
URL: http://univerty.ru/video/informatika/
programmirovanie/ruby_on_rails_moscow/
umnoe_keshirovanie_v_rails (äàòà îáðàùåíèÿ: 12.12.2010).