طبقه بندی داده ها خود یک موضوع تحقیقاتی جالب است. من عاشق جمع آوری اطلاعاتی هستم که به نظر ضروری می رسند و همیشه سعی کرده ام سلسله مراتبی دایرکتوری منطقی برای فایل هایم ایجاد کنم و یک روز در خواب برنامه ای زیبا و راحت برای اختصاص تگ به فایل ها دیدم و به این نتیجه رسیدم که نمی توانم زندگی کنم. اینجوری دیگه
مشکل سیستم های فایل سلسله مراتبی
كاربران اغلب با مشكل انتخاب محل ذخيره فايل جديد بعدي و مشكل پيدا كردن فايل هاي خود مواجه مي شوند (گاهي اوقات نام فايل ها اصلاً براي به خاطر سپردن افراد در نظر گرفته نشده است).
راه برون رفت از این وضعیت ممکن است سیستم های فایل معنایی باشد که معمولاً افزودنی به سیستم فایل سنتی هستند. دایرکتوری ها در آنها با ویژگی های معنایی جایگزین می شوند که به آنها برچسب ها، دسته ها و ابرداده نیز می گویند. من از اصطلاح "مقوله" بیشتر استفاده خواهم کرد، زیرا ... در زمینه سیستم های فایل، کلمه "تگ" گاهی اوقات کمی عجیب است، به خصوص زمانی که "subtags" و "تگ های مستعار" ظاهر می شوند.
اختصاص دادن دستهها به فایلها تا حد زیادی مشکل ذخیرهسازی و جستجوی یک فایل را برطرف میکند: اگر حداقل یکی از دستههای اختصاص دادهشده به یک فایل را به خاطر بسپارید (یا حدس بزنید)، آنگاه فایل هرگز از نظر محو نخواهد شد.
قبلاً این موضوع بیش از یک بار در Habré مطرح شده بود (
مسیر تحقق
بلافاصله پس از رویای ذکر شده، رابط فرمانی را که کار لازم را با دسته ها ارائه می دهد، در دفترچه یادداشتم شرح دادم. سپس تصمیم گرفتم که ظرف یک یا دو هفته بتوانم یک نمونه اولیه با استفاده از پایتون یا Bash بنویسم و سپس باید روی ایجاد یک پوسته گرافیکی در Qt یا GTK کار کنم. واقعیت، مثل همیشه، بسیار خشنتر بود و توسعه به تعویق افتاد.
ایده اولیه این بود که اول از همه برنامهای با رابط خط فرمان مناسب و مختصر بسازیم که میتواند دستهها را ایجاد کند، حذف کند، دستهها را به فایلها اختصاص دهد و دستهها را از فایلها حذف کند. به برنامه زنگ زدم ویتیس.
اولین تلاش برای ایجاد ویتیس به هیچ نتیجه ای ختم نشد، زیرا زمان زیادی برای کار و دانشگاه صرف شد. تلاش دوم قبلاً چیزی بود: برای پایان نامه کارشناسی ارشد، من موفق شدم پروژه برنامه ریزی شده را تکمیل کنم و حتی یک نمونه اولیه از پوسته GTK بسازم. اما آن نسخه آنقدر غیرقابل اعتماد و ناخوشایند بود که باید در مورد چیزهای زیادی تجدید نظر می شد.
من در واقع برای مدت طولانی از نسخه سوم استفاده کردم و چندین هزار فایل خود را به دسته ها منتقل کردم. این نیز با تکمیل bash اجرا شده تا حد زیادی تسهیل شد. اما برخی از مشکلات مانند عدم وجود دسته بندی خودکار و امکان ذخیره فایل هایی با همین نام همچنان پابرجا بود و برنامه قبلاً تحت پیچیدگی خود خم شده بود. اینگونه بود که به نیاز به حل مشکلات پیچیده توسعه نرم افزار رسیدم: نوشتن الزامات دقیق، توسعه یک سیستم تست عملکردی، مطالعه دستورالعمل های بسته بندی و موارد دیگر. اکنون به طرح خود رسیده ام تا این خلق حقیر به جامعه آزاد عرضه شود. مدیریت فایل های خاص مانند مدیریت از طریق مفهوم دسته بندی مسائل و مشکلات غیرمنتظره را مطرح می کند و در حل آنها ویتیس پنج پروژه دیگر در اطراف خود ایجاد کرد که برخی از آنها در مقاله ذکر خواهد شد. تا به حال ویتیس من پوسته گرافیکی نخریدهام، اما راحتی استفاده از دستههای فایل از خط فرمان برای من از مزایای یک مدیر فایل گرافیکی معمولی بیشتر است.
نمونه هایی از استفاده
بیایید ساده شروع کنیم - یک دسته ایجاد کنید:
vitis create Музыка
بیایید به عنوان مثال مقداری ترکیب به آن اضافه کنیم:
vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"
میتوانید با استفاده از دستور فرعی «نمایش» محتویات دسته «موسیقی» را مشاهده کنید:
vitis show Музыка
می توانید با استفاده از دستور فرعی "open" آن را پخش کنید.
vitis open Музыка
زیرا اگر فقط یک فایل در دسته "موسیقی" داشته باشیم، فقط آن فایل راه اندازی می شود. برای باز کردن فایلها با برنامههای پیشفرض، یک ابزار مجزا ساختم vts-fs-open (ابزارهای استانداردی مانند xdg-open یا mimeopen به دلایلی برای من مناسب نبودند؛ اما در هر صورت، در تنظیمات میتوانید ابزار دیگری را برای باز کردن فایل جهانی مشخص کنید). این ابزار به خوبی در توزیع های مختلف با محیط های کاری متفاوت کار می کند، بنابراین توصیه می کنم آن را همراه با vitis نصب کنید.
همچنین می توانید مستقیماً برنامه را برای باز کردن فایل ها مشخص کنید:
vitis open Музыка --app qmmp
بیایید دسته بندی های بیشتری ایجاد کنیم و با استفاده از "تخصیص" فایل ها را اضافه کنیم. اگر فایلها به دستههایی اختصاص داده میشوند که هنوز وجود ندارند، از شما خواسته میشود آنها را ایجاد کنید. با استفاده از پرچم -yes می توان از درخواست غیر ضروری جلوگیری کرد.
vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes
حال می خواهیم دسته “ریاضیات” را به فایل “بسته آماری R: تئوری احتمال و آمار ریاضی.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
. اغلب با دستور فرعی open که به شما امکان می دهد فایل های مورد نظر را از یک لیست باز کنید مفید است.
در حالی که ما از استفاده از سلسله مراتب دایرکتوری معمولی دور می شویم، اغلب داشتن دسته های تو در تو مفید است. بیایید یک زیر شاخه "آمار" در زیر دسته "ریاضیات" ایجاد کنیم و این دسته را به فایل مناسب اضافه کنیم:
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 و پسوند دسکتاپ ایجاد می شود. این فرمت میانبر سنتی در گنو/لینوکس است. چنین میانبرهایی به طور خودکار به عنوان 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 راه اندازی می شود، بنابراین باید در سیستم نیز باشد. در ابتدا می خواستم این کار را بر اساس mplayer انجام دهم، اما به دلایلی با موقعیت یابی در لحظه مناسب بسیار کج بود.
در مثال ما، فایل "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
بدون ذخیره خودکار، هنگام استفاده از دستور فرعی «assign»، اگر می خواهید فایل اضافه شده را در فضای فایل ذخیره کنید، پرچم --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
، می بینید که به طور پیش فرض دسته بندی های خودکار بر اساس فرمت (Format and Type) و پسوند فایل (Extension) اختصاص داده می شوند.
این زمانی مفید است که، به عنوان مثال، شما نیاز دارید چیزی را در بین PDF ها پیدا کنید یا به آنچه از EPUB و FB2 ذخیره کرده اید نگاه کنید، می توانید به سادگی درخواست را اجرا کنید.
vitis show Format/MOBI u: Format/FB2
اتفاقاً ابزارهای استاندارد گنو/لینوکس مانند فایل یا mimetype دقیقاً برای من مناسب نبودند زیرا همیشه قالب را به درستی تعیین نمیکنند؛ من مجبور شدم پیادهسازی خودم را بر اساس امضاها و پسوندهای فایل انجام دهم. به طور کلی مبحث تعریف فرمت فایل ها موضوعی جالب برای تحقیق است و جای مقاله جداگانه ای دارد. در حال حاضر می توانم بگویم که شاید من شناخت درستی برای همه فرمت های جهان ارائه نکرده ام، اما به طور کلی در حال حاضر به خوبی کار می کند. درست است، EPUB اکنون فرمت را به صورت ZIP تعریف می کند (به طور کلی، این قابل توجیه است، اما در عمل این نباید رفتار عادی در نظر گرفته شود). در حال حاضر، این ویژگی را آزمایشی در نظر بگیرید و هر گونه اشکال را گزارش دهید. در موقعیتهای عجیب، همیشه میتوانید از دستههای پسوند فایل، به عنوان مثال، Extension/epub استفاده کنید.
اگر دستهبندیهای خودکار براساس قالب فعال باشند، دستهبندیهای خودکار که برخی از قالبها را بر اساس نوع گروهبندی میکنند نیز فعال میشوند: «بایگانیها»، «تصاویر»، «ویدئو»، «صدا» و «اسناد». نام های محلی نیز برای این زیر مجموعه ها ساخته خواهد شد.
آنچه گفته نشده است
ویتیس معلوم شد که این یک ابزار بسیار چند وجهی است و پوشاندن همه چیز به یکباره دشوار است. اجازه دهید به طور خلاصه اشاره کنم که چه کارهای دیگری می توانید انجام دهید:
- دسته ها را می توان از فایل ها حذف و حذف کرد.
- نتایج پرس و جوهای عبارت را می توان در دایرکتوری مشخص شده کپی کرد.
- فایل ها را می توان به عنوان برنامه اجرا کرد.
- دستور show گزینههای زیادی دارد، به عنوان مثال، مرتبسازی بر اساس نام/تاریخ اصلاح یا دسترسی/اندازه/افزودن، نمایش ویژگیهای فایل و مسیرهای اصلی، امکان نمایش فایلهای مخفی و غیره.
- هنگامی که پیوندها را به منابع اینترنتی ذخیره می کنید، می توانید نسخه های محلی صفحات HTML را نیز ذخیره کنید.
جزئیات کامل را می توان در راهنمای کاربر یافت.
چشم انداز
افراد بدبین اغلب می گویند که "هیچ کس خودش این برچسب ها را تنظیم نمی کند." با استفاده از مثال خودم، میتوانم خلاف آن را ثابت کنم: من قبلاً بیش از شش هزار پرونده را دستهبندی کردهام، بیش از هزار دسته و نام مستعار ایجاد کردهام و ارزشش را داشت. وقتی یک تیم vitis open План
لیست کارهای خود را یا زمانی که با یک دستور باز کنید vitis open LaTeX
وقتی کتاب استولیاروف را درباره سیستم چیدمان LaTeX باز میکنید، از نظر اخلاقی استفاده از سیستم فایل "به روش قدیمی" دشوار است.
بر این اساس، تعدادی ایده مطرح می شود. به عنوان مثال، می توانید یک رادیو خودکار بسازید که موسیقی موضوعی را با توجه به آب و هوا، تعطیلات، روز هفته، زمان روز یا سال روشن می کند. حتی نزدیکتر به موضوع، پخشکنندهای موسیقی است که در مورد دستهها میداند و میتواند موسیقی را با بیان با عملکرد دستهها مانند مجموعهها پخش کند. ساختن دیمونی که دایرکتوری «دانلودها» را کنترل میکند و دستهبندی فایلهای جدید را پیشنهاد میکند، مفید است. و البته باید یک فایل منیجر معنایی گرافیکی معمولی بسازیم. روزی روزگاری من حتی یک وب سرویس برای سازمانی برای استفاده جمعی از فایل ها ایجاد کردم، اما این یک اولویت نبود و بی ربط شد، اگرچه به سطح بالایی از عملکرد دست یافت. (با توجه به تغییرات عمده در ویتیس، دیگر قابل استفاده نیست.)
در اینجا یک نسخه ی نمایشی کوچک است
نتیجه
ویت اولین تلاش برای تغییر اساسی سبک کار با داده نیست، اما من اجرای ایده های خود و در دسترس قرار دادن اجرای آن تحت مجوز GNU GPL را مهم می دانم. برای راحتی، یک بسته deb برای x86-64 ساخته شده است؛ این بسته باید روی همه توزیعهای مدرن دبیان کار کند. مشکلات جزئی در ARM وجود داشت (در حالی که تمام برنامه های دیگر مربوط به ویتیس، کار خوب است)، اما در آینده یک بسته کاری برای این پلتفرم (armhf) تدوین خواهد شد. من در حال حاضر به دلیل مشکلات موجود در فدورا 30 و دشواری انتشار در بسیاری از توزیعهای RPM، ایجاد بستههای RPM را متوقف کردهام، اما بستههای بعدی همچنان برای حداقل چند مورد از آنها ساخته میشوند. در ضمن میتونید استفاده کنید make && make install
یا checkinstall
.
با تشکر از همه شما برای توجه شما! امیدوارم این مقاله و این پروژه بتواند مفید واقع شود.
منبع: www.habr.com