Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

Өгөгдлийн ангилал нь өөрөө сонирхолтой судалгааны сэдэв юм. Би шаардлагатай мэт санагдах мэдээлэл цуглуулах дуртай бөгөөд би файлууддаа логик лавлах шатлал үүсгэхийг үргэлж хичээдэг байсан бөгөөд нэг өдөр зүүдэндээ файлуудад шошго оноох сайхан, тохиромжтой програмыг хараад би амьдрах боломжгүй гэж шийдсэн. цаашид ч ийм байх.

Шаталсан файлын системийн асуудал

Хэрэглэгчид дараагийн шинэ файлаа хаана хадгалахаа сонгох, өөрийн файлаа олох зэрэг асуудалтай байнга тулгардаг (заримдаа файлын нэрийг хүн санахад зориулагдаагүй байдаг).

Нөхцөл байдлаас гарах арга зам нь уламжлалт файлын системийн нэмэлт хэрэгсэл болох семантик файлын систем байж болно. Тэдгээрийн лавлахууд нь шошго, категори, мета өгөгдөл гэж нэрлэгддэг семантик шинж чанаруудаар солигддог. Би "ангилал" гэсэн нэр томъёог илүү олон удаа ашиглах болно, учир нь ... Файлын системийн хувьд "шошго" гэдэг үг заримдаа жаахан хачирхалтай байдаг, ялангуяа "дэд хаяг" болон "шошго" гарч ирэх үед.

Файлд категори оноох нь файлыг хадгалах, хайх асуудлыг ихээхэн арилгадаг: хэрэв та файлд өгөгдсөн категориудын ядаж нэгийг нь санаж байвал (эсвэл таамаглаж байгаа бол) файл хэзээ ч харагдахаас алга болохгүй.

Өмнө нь энэ сэдвийг Хабре дээр нэг бус удаа хөндөж байсан.цаг хугацаа, два, гурав, дөрөв гэх мэт), энд би өөрийн шийдлийг тайлбарлав.

Бодит байдалд хүрэх зам

Дээр дурдсан мөрөөдлийн дараа би дэвтэртээ шаардлагатай категоритой ажиллах командын интерфейсийг дүрсэлсэн. Дараа нь би нэг эсвэл хоёр долоо хоногийн дараа Python эсвэл Bash ашиглан прототип бичиж, дараа нь Qt эсвэл GTK дээр график бүрхүүл үүсгэхээр ажиллах хэрэгтэй болно гэж шийдсэн. Бодит байдал урьдын адил илүү ширүүн болж, хөгжил хойшлогдож байв.

Анхны санаа нь юуны түрүүнд категори үүсгэх, устгах, файлд категори оноох, файлаас категори устгах зэрэг тохиромжтой, товч тушаалын мөрийн интерфейстэй программ хийх явдал байв. Би хөтөлбөр рүү залгалаа витис.

Бүтээх анхны оролдлого витис Ажил, коллежид маш их цаг зарцуулж эхэлсэн тул юу ч үгүй ​​болсон. Хоёрдахь оролдлого нь аль хэдийн ямар нэгэн зүйл болсон: магистрын диссертацийн хувьд би төлөвлөсөн төслөө дуусгаж, GTK бүрхүүлийн прототипийг ч хийж чадсан. Гэвч энэ хувилбар нь маш найдваргүй, тохиромжгүй болсон тул олон зүйлийг дахин бодож үзэх шаардлагатай болсон.

Би үнэндээ гурав дахь хувилбараа өөрөө маш удаан хугацаанд ашигласан бөгөөд хэдэн мянган файлаа категорид шилжүүлсэн. Энэ нь бас хэрэгжсэн bash бөглөхөд ихээхэн тус болсон. Гэхдээ автомат категори байхгүй, ижил нэртэй файлуудыг хадгалах чадвар зэрэг зарим бэрхшээлүүд хэвээр байсан бөгөөд програм нь өөрийн гэсэн нарийн төвөгтэй байдлын дор аль хэдийн нугарсан байв. Ингээд л би програм хангамж хөгжүүлэх нарийн төвөгтэй асуудлуудыг шийдэх шаардлагатай болсон: нарийвчилсан шаардлага бичих, функциональ туршилтын системийг боловсруулах, сав баглаа боодлын зааврыг судлах гэх мэт. Энэхүү даруухан бүтээлийг чөлөөт нийгэмд толилуулахын тулд би одоо төлөвлөгөөндөө хүрсэн. Ангиллын үзэл баримтлалаар дамжуулан удирдах гэх мэт тусгай файлын менежмент нь гэнэтийн асуудал, бэрхшээлийг бий болгож, тэдгээрийг шийдвэрлэхэд хүргэдэг. витис өөрийн эргэн тойронд дахин таван төслийг бий болгосон бөгөөд тэдгээрийн заримыг нь нийтлэлд дурдах болно. Одоог хүртэл витис Би график бүрхүүл худалдаж аваагүй байгаа ч командын мөрөөс файлын категорийг ашиглахад тав тухтай байдал нь ердийн график файлын менежерийн давуу талуудаас давж гарсан.

Хэрэглэх жишээ

Энгийнээр эхэлцгээе - ангилал үүсгэ:

vitis create Музыка

Үүний жишээ болгон зарим найрлагыг нэмье:

vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

Та "Show" дэд командыг ашиглан "Хөгжим" ангиллын агуулгыг үзэж болно.

vitis show Музыка

Та үүнийг "нээлттэй" дэд командыг ашиглан тоглуулж болно.

vitis open Музыка

Учир нь Хэрэв бидэнд "Хөгжим" ангилалд зөвхөн нэг файл байгаа бол зөвхөн тэр нь л нээгдэнэ. Файлуудыг анхдагч програмаар нь нээхийн тулд би тусдаа хэрэгсэл хийсэн vts-fs-нээлттэй (xdg-open эсвэл mimeopen гэх мэт стандарт хэрэгслүүд хэд хэдэн шалтгааны улмаас надад тохирохгүй байсан; гэхдээ ямар нэг зүйл байгаа бол тохиргоонд та бүх нийтийн файл нээх өөр хэрэгслийг зааж өгч болно). Энэ хэрэгсэл нь янз бүрийн ажлын орчинтой өөр өөр түгээлтүүд дээр сайн ажилладаг тул би үүнийг vitis-тай хамт суулгахыг зөвлөж байна.

Та мөн файлуудыг нээх програмыг шууд зааж өгч болно:

vitis open Музыка --app qmmp

Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

Илүү олон категори үүсгэж, "даалгах"-ыг ашиглан файл нэмье. Хэрэв файлууд хараахан байхгүй ангилалд хуваарилагдсан бол тэдгээрийг үүсгэхийг танаас хүсэх болно. -yes тугийг ашигласнаар шаардлагагүй хүсэлтээс зайлсхийх боломжтой.

vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes

Одоо бид "Statistical package R: probability theory and mathematical statistics.pdf" файлд "Математик" ангиллыг нэмэхийг хүсч байна. Энэ файлыг аль хэдийн "R" гэж ангилсан гэдгийг бид мэдэж байгаа тул Vitis системийн категорийн замыг ашиглаж болно:

vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"

Аз болоход, bash дуусгах нь үүнийг хялбар болгодог.

Файл бүрийн категорийн жагсаалтыг харахын тулд --categories тугийг ашиглан юу болсныг харцгаая:

vitis show R --categories

Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

Файлуудыг формат, төрөл (форматыг нэгтгэдэг) болон файлын өргөтгөлөөр автоматаар ангилсан болохыг анхаарна уу. Хэрэв хүсвэл эдгээр ангиллыг идэвхгүй болгож болно. Дараа нь би тэдний нэрийг заавал нутагшуулах болно.

Төрөл бүрийн хувьд "Математик"-д өөр зүйл нэмье:

vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu 

Тэгээд одоо бүх зүйл сонирхолтой болж байна. Категорийн оронд та нэгдэл, огтлолцол, хасах үйлдлээр илэрхийлэл бичиж, өөрөөр хэлбэл олонлог дээрх үйлдлүүдийг ашиглаж болно. Жишээлбэл, "Математик" ба "R" огтлолцол нь нэг файлтай болно.

vitis show R i: Математика

"Математик" хэлнээс "R" хэлний лавлагааг хасъя:

vitis show Математика  R  #или vitis show Математика c: R

Бид хөгжим болон R хэлийг зорилгогүйгээр хослуулж чадна:

vitis show Музыка u: R

-n туг нь хүсэлтийн үр дүнгээс шаардлагатай файлуудыг тоо болон/эсвэл мужаар "сугалах" боломжийг олгодог, жишээлбэл, -n 3-7, эсвэл илүү төвөгтэй зүйл: -n 1,5,8-10,13. Жагсаалтаас хүссэн файлаа нээх боломжийг олгодог нээлттэй дэд командын хувьд энэ нь ихэвчлэн хэрэгтэй байдаг.

Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

Бид ердийн лавлах шатлалыг ашиглахаас татгалзаж байгаа хэдий ч үүрлэсэн категориудтай байх нь ихэвчлэн ашигтай байдаг. "Математик" ангиллын доор "Статистик" дэд ангиллыг үүсгэж, энэ ангиллыг тохирох файлд нэмнэ үү.

vitis create Математика/Статистика

vitis assign Математика/Статистика -v "R/Введение в R.pdf"

vitis show Математика --categories

Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

Энэ файл одоо "Математик"-ын оронд "Математик/Статистик" гэсэн ангилалтай байгааг бид харж байна (нэмэлт холбоосыг хянаж байна).

Бүтэн замыг хаяглах нь тохиромжгүй байж болох тул "дэлхий" нэр үүсгэцгээе:

vitis assign Математика/Статистика -a Статистика

vitis show Статистика

Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

Зөвхөн ердийн файлууд биш

Интернет холбоосууд

Аливаа мэдээллийн хадгалалтыг нэгтгэхийн тулд хамгийн багадаа интернетийн эх сурвалжийн холбоосыг ангилах нь ашигтай байх болно. Мөн энэ нь боломжтой:

vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

HTML хуудасны толгой хэсэг болон .desktop өргөтгөлтэй тусгай газар файл үүсгэгдэнэ. Энэ бол GNU/Linux дээрх уламжлалт товчлолын формат юм. Ийм товчлолыг автоматаар NetworkBookmarks гэж ангилдаг.

Мэдээжийн хэрэг, товчлолыг ашиглахын тулд бий болгосон:

vitis open Цветоаномалия

Тушаалыг гүйцэтгэх нь хөтөч дээр шинээр хадгалагдсан холбоосыг нээхэд хүргэдэг. Интернетийн эх сурвалжийн ангилсан товчлолууд нь хөтчийн хавчуургыг орлуулах боломжтой.

Файлын хэсгүүд

Файлын тусдаа хэсгүүдийн ангилалтай байх нь бас ашигтай. Муу хүсэлт биш, тийм үү? Гэхдээ одоогийн хэрэгжүүлэлт нь зөвхөн энгийн текст файлууд, аудио болон видео файлуудад нөлөөлдөг. Та концертын тодорхой хэсгийг эсвэл киноны хөгжилтэй агшинг тэмдэглэх хэрэгтэй гэж бодъё, дараа нь assign-ийг ашиглахдаа -fragname, -start, -finish гэсэн тугуудыг ашиглаж болно. "DuckTales" дэлгэцийн амраагчийг хадгалцгаая:

vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"

vitis open Заставки

Бодит байдал дээр файл огтлохгүй, оронд нь файлын төрөл, файлд хүрэх зам, фрагментийн эхлэл ба төгсгөлийг дүрсэлсэн фрагментийн заагч файлыг үүсгэдэг. Фрагментуудад заагч үүсгэх, нээх нь миний эдгээр зорилгоор тусгайлан хийсэн хэрэгслүүдэд хуваарилагдсан - эдгээр нь mediafragmenter болон fragplayer юм. Эхнийх нь бүтээдэг, хоёр дахь нь нээгддэг. Аудио болон видео бичлэгийн хувьд медиа файлыг VLC тоглуулагч ашиглан тодорхой байрлалаас тодорхой байрлалд ажиллуулдаг тул энэ нь бас системд байх ёстой. Эхэндээ би үүнийг mpplayer дээр тулгуурлан хийхийг хүсч байсан ч яагаад ч юм энэ нь зөв мөчид байрлал тогтооход маш их хазайсан.
Бидний жишээн дээр “Duck Tales intro.fragpointer” файлыг үүсгэсэн (тусгай газар байрлуулсан), дараа нь фрагментийг файлын эхнээс (үүсгэх үед –start заагаагүй) 59 хүртэл тоглуулдаг. хоёр дахь тэмдэг, үүний дараа VLC хаагдана.

Өөр нэг жишээ бол алдартай уран бүтээлчийн концертын ганц тоглолтыг ангилахаар шийдсэн явдал юм.

vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

vitis open "Спасите наши души"

Нээх үед файлыг хүссэн байрлалдаа оруулах бөгөөд дөрвөн минут хагасын дараа хаагдах болно.

Энэ бүхэн хэрхэн ажилладаг + нэмэлт функцууд

Ангилал хадгалах

Семаль файлын системийг зохион байгуулах талаар бодож эхлэхэд симбол холбоосыг хадгалах, мэдээллийн баазаар дамжуулан, XML-д тайлбар хийх гэсэн гурван арга бий. Эхний арга ялсан, учир нь... Нэг талаас, хэрэгжүүлэхэд хялбар, нөгөө талаас хэрэглэгч категориудыг файлын системээс шууд харах боломжтой (мөн энэ нь тохиромжтой бөгөөд чухал юм). Ашиглалтын эхэнд витис "Vitis" лавлах болон ".config/vitis/vitis.conf" тохиргооны файлыг хэрэглэгчийн гэрийн лавлахад үүсгэсэн. Ангилалд тохирох лавлахуудыг ~/Vitis-д үүсгэсэн бөгөөд эдгээр категорийн лавлахуудад эх файлуудын симбол холбоосууд үүсдэг. Ангиллын нэрс нь зөвхөн тэдгээрт холбогдох холбоос юм. Мэдээжийн хэрэг, гэрийн лавлахад "Vitis" лавлах байгаа нь зарим хүмүүст тохирохгүй байж магадгүй юм. Бид өөр ямар ч байршил руу шилжиж болно:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Тодорхой мөчид өөр өөр газар тараагдсан файлуудыг ангилах нь утгагүй болох нь тодорхой болно, учир нь тэдгээрийн байршил өөрчлөгдөж болно. Тиймээс, эхлээд би өөртөө зориулж лавлах үүсгэсэн бөгөөд би бүх зүйлийг тэнэг байдлаар хаяж, бүх категорийг өгсөн. Дараа нь би энэ мөчийг хөтөлбөрийн түвшинд албан ёсны болгох нь зүйтэй юм байна гэж шийдсэн. "Файлын орон зай" гэсэн ойлголт ингэж гарч ирэв. Ашиглалтын эхэнд витис Ийм байршлыг нэн даруй тохируулж (бидэнд хэрэгтэй бүх файлууд тэнд хадгалагдах болно) автоматаар хадгалахыг идэвхжүүлэх нь гэмтээхгүй.

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Автоматаар хадгалахгүйгээр "тохирох" дэд командыг ашиглах үед хэрэв та нэмсэн файлыг файлын зайд хадгалахыг хүсвэл --save туг шаардлагатай болно.

Нэмж дурдахад та хэд хэдэн файлын зай нэмж, тэдгээрийн тэргүүлэх чиглэлийг өөрчлөх боломжтой бөгөөд энэ нь олон файл байгаа бөгөөд тэдгээр нь өөр өөр медиа дээр хадгалагдсан үед хэрэг болно. Би энэ боломжийг энд авч үзэхгүй, дэлгэрэнгүй мэдээллийг програмын тусламжаас олж болно.

Семаль файлын системийн шилжилт

Ямар ч байсан Vitis лавлах болон файлын зай нь онолын хувьд заримдаа нэг газраас нөгөө рүү шилжиж болно. Үүнийг ажиллуулахын тулд би тусдаа хэрэгсэл үүсгэсэн холбоос засварлагч, холбоосыг бөөнөөр нь засварлаж, замын зарим хэсгийг бусадтай сольж болно:

cp -r /mnt/MyFavoriteDisk/Vitis/ ~/Vitis
link-editor -d ~/Vitis/ -f /mnt/MyFavoriteDisk/Vitis/ -r ~/Vitis/ -R
cp -r /mnt/MyFavoriteDisk/Filespace/ ~/MyFiles
link-editor -d ~/Vitis/ -f /mnt/FlashDrive-256/Filespace/ -r ~/MyFiles -R

Эхний тохиолдолд, бид /mnt/MyFavoriteDisk/Vitis/-аас гэрийн лавлах руу шилжсэний дараа нэрстэй холбоотой симбол холбоосуудыг засварлана. Хоёр дахь тохиолдолд, файлын зайны байршлыг өөрчилсний дараа Vitis дахь бүх холбоосууд замынхаа хэсгийг солих хүсэлтийн дагуу шинэ холбоосуудаар солигдоно.

Автомат ангилал

Хэрэв та тушаалыг ажиллуулбал vitis service get autocategorization, та анхдагчаар автомат категориудыг формат (Формат ба төрөл) болон файлын өргөтгөлөөр (Өргөтгөл) хуваарилдаг болохыг харж болно.

Жишээлбэл, та PDF файлуудаас ямар нэг зүйл хайх эсвэл EPUB болон FB2-ээс хадгалсан зүйлээ харах шаардлагатай үед энэ нь хэрэг болно.

vitis show Format/MOBI u: Format/FB2

Файл эсвэл mimetype гэх мэт стандарт GNU/Linux хэрэгслүүд форматыг үргэлж зөв тодорхойлж чаддаггүй тул надад яг тохирохгүй байсан тул би файлын гарын үсэг болон өргөтгөл дээр үндэслэн өөрийн хэрэгжилтийг хийх шаардлагатай болсон. Ерөнхийдөө файлын форматыг тодорхойлох сэдэв нь судалгааны сонирхолтой сэдэв бөгөөд тусдаа нийтлэл байх ёстой. Одоогоор би дэлхийн бүх форматыг үнэн зөвөөр таньж чадаагүй гэж хэлж болно, гэхдээ ерөнхийдөө энэ нь аль хэдийн сайн ажиллаж байна. Үнэн, EPUB одоо форматыг ZIP гэж тодорхойлдог (ерөнхийдөө энэ нь үндэслэлтэй боловч бодит байдал дээр үүнийг ердийн зан үйл гэж үзэх ёсгүй). Одоохондоо энэ функцийг туршилтын шинж чанартай гэж үзээд аливаа алдааг мэдээлнэ үү. Хачирхалтай тохиолдолд та үргэлж файлын өргөтгөлийн ангиллыг ашиглаж болно, жишээ нь Extension/epub.

Хэрэв форматаар автомат ангиллыг идэвхжүүлсэн бол "Архив", "Зураг", "Видео", "Аудио" болон "Баримт бичиг" гэсэн зарим форматыг төрлөөр нь бүлэглэх автомат ангиллыг мөн идэвхжүүлнэ. Эдгээр дэд категориудад нутагшуулсан нэрсийг мөн хийнэ.

Юу хэлэхгүй байна

витис Энэ нь маш олон талт хэрэгсэл болж хувирсан бөгөөд бүгдийг нэг дор хамрахад хэцүү байдаг. Та өөр юу хийж болохыг товч дурдъя:

  • категориудыг файлаас устгах, устгах боломжтой;
  • илэрхийллийн асуулгын үр дүнг заасан лавлах руу хуулж болно;
  • файлуудыг програм хэлбэрээр ажиллуулж болно;
  • Show команд нь олон сонголттой, жишээлбэл, нэр/өөрчлөгдсөн огноо эсвэл хандалт/хэмжээ/өргөтгөлөөр эрэмбэлэх, файлын шинж чанар, эх рүү очих замыг харуулах, далд файлуудыг харуулах гэх мэт;
  • Та интернетийн эх сурвалжийн холбоосыг хадгалахдаа HTML хуудасны локал хуулбарыг хадгалах боломжтой.

Бүрэн дэлгэрэнгүй мэдээллийг хэрэглэгчийн тусламжаас авах боломжтой.

Ойрын ирээдүй

Эргэлзэгчид ихэвчлэн "эдгээр хаягийг хэн ч өөрөө тохируулахгүй" гэж хэлдэг. Би өөрийн жишээн дээр эсрэгээр нь нотолж чадна: Би аль хэдийн зургаан мянга гаруй файлыг ангилж, мянга гаруй ангилал, нэр үүсгэсэн бөгөөд энэ нь үнэ цэнэтэй байсан. Нэг баг байхад vitis open План хийх ажлын жагсаалтаа эсвэл нэг командаар нээх vitis open LaTeX LaTeX зохион байгуулалтын системийн тухай Столяровын номыг нээхэд файлын системийг "хуучин хэв маягаар" ашиглах нь аль хэдийн ёс суртахууны хувьд хэцүү байдаг.

Үүний үндсэн дээр хэд хэдэн санаа гарч ирдэг. Жишээлбэл, та цаг агаар, амралт, долоо хоногийн өдөр, өдөр, жилийн цаг зэргийг харгалзан сэдэвчилсэн хөгжмийг асаадаг автомат радио хийж болно. Сэдвийн хувьд ч илүү ойртсон зүйл бол категориудын талаар мэддэг хөгжим тоглуулагч бөгөөд иж бүрдэл дээрх зэрэг категориудын үйлдлээр илэрхийллээр хөгжим тоглуулж чаддаг. "Татаж авах" лавлахыг хянах, шинэ файлуудыг ангилахыг санал болгох демон хийх нь ашигтай. Мэдээжийн хэрэг, бид ердийн график семантик файлын менежер хийх ёстой. Нэгэн удаа би аж ахуйн нэгжид файлуудын хамтын хэрэглээнд зориулсан вэб үйлчилгээг бий болгосон боловч энэ нь нэн тэргүүний зорилт биш байсан бөгөөд өндөр гүйцэтгэлтэй байсан ч хамааралгүй болсон. (Үндсэн өөрчлөлтийн улмаас витис, үүнийг ашиглах боломжгүй болсон.)

энд бяцхан демо байна

Лавлахын оронд категориуд эсвэл Линуксийн семантик файлын систем

дүгнэлт

Вит Энэ нь өгөгдөлтэй ажиллах хэв маягийг үндсээр нь өөрчлөх анхны оролдлого биш боловч GNU GPL лицензийн дагуу санаагаа хэрэгжүүлж, хэрэгжилтийг олон нийтэд нээлттэй болгох нь чухал гэж би үзсэн. Тохиромжтой болгох үүднээс x86-64-д зориулсан deb багцыг хийсэн бөгөөд энэ нь орчин үеийн бүх Debian түгээлтүүд дээр ажиллах ёстой. ARM-д бага зэргийн бэрхшээл тулгарсан (энэтэй холбоотой бусад бүх програмууд витис, сайн ажилладаг), гэхдээ ирээдүйд энэ платформд зориулж ажлын багцыг эмхэтгэх болно (armhf). Fedora 30 дээрх асуудлууд болон олон RPM түгээлтүүдэд тархахад хүндрэлтэй байгаа тул би RPM багц үүсгэхээ больсон ч дараа нь ядаж хэд хэдэн багцад зориулж багцуудыг хийх болно. Энэ хооронд та ашиглаж болно make && make install буюу checkinstall.

Анхаарал тавьсан та бүхэнд баярлалаа! Энэ нийтлэл болон энэ төсөл хэрэг болно гэж найдаж байна.

Төслийн агуулах руу холбох

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх