<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی یوسفی</title>
        <link>https://virgool.io/feed/@aliyousefi</link>
        <description>ادیولوژیست ( شنوایی شناس ) - توسعه دهنده اندروید</description>
        <language>fa</language>
        <pubDate>2026-06-16 05:51:27</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2548966/avatar/bHH07X.jpg?height=120&amp;width=120</url>
            <title>علی یوسفی</title>
            <link>https://virgool.io/@aliyousefi</link>
        </image>

                    <item>
                <title>و چنین گفت سیلبرشاتس - فصل 9 - بخش 2</title>
                <link>https://virgool.io/@aliyousefi/%D9%88-%DA%86%D9%86%DB%8C%D9%86-%DA%AF%D9%81%D8%AA-%D8%B3%DB%8C%D9%84%D8%A8%D8%B1%D8%B4%D8%A7%D8%AA%D8%B3-%D9%81%D8%B5%D9%84-9-%D8%A8%D8%AE%D8%B4-2-j3zevm3kuu7v</link>
                <description>⭕ 9.1.3 فضای آدرس‌های منطقی در مقابل فضای آدرس‌های فیزیکییک آدرس که توسط پردازنده صادر می‌شود، عموماً به عنوان آدرس منطقی شناخته می‌شود، در حالی که آدرسی که توسط واحد حافظه دیده می‌شود معمولاً به عنوان آدرس فیزیکی شناخته می‌شود.وقتی آدرس‌ها در زمان کامپایل یا بارگذاری برنامه (binding) می‌شوند، آدرس‌های منطقی و فیزیکی یکسان هستند. اما زمانی که binding آدرس‌ها در زمان اجرا انجام می‌شود، آدرس‌های منطقی و فیزیکی متفاوت خواهند بود. در این حالت، ما معمولاً به آدرس منطقی، آدرس مجازی (virtual address) نیز می‌گوییم. در این متن، ما از اصطلاحات آدرس منطقی و آدرس مجازی به جای یکدیگر استفاده می‌کنیم.مجموعه تمام آدرس‌های منطقی، فضای آدرس منطقی (logical address space) نام دارد. مجموعه تمامی آدرس‌های فیزیکی که با این آدرس‌های منطقی مرتبط هستند، فضای آدرس فیزیکی (physical address space) نامیده می‌شود. بنابراین، در حالت binding در زمان اجرا، فضای آدرس منطقی و فیزیکی متفاوت هستند.در حالت binding در زمان اجرا ،mapping آدرس‌های مجازی به آدرس‌های فیزیکی توسط واحد مدیریت حافظه (Memory-Management Unit یا MMU) انجام می‌شود (تصویر 9.4).ما می‌توانیم روش‌های مختلفی برای انجام این mapping انتخاب کنیم، همان‌طور که در بخش‌های 9.2 تا 9.3 بحث می‌شود.فعلاً، این mapping را با یک طرح ساده از MMU نشان می‌دهیم که بر اساس base register است، که در بخش 9.1.1 توضیح داده شد و در اینجا (relocation register) نامیده میشود. مقدار موجود در relocation register به هر آدرس منطقی در زمانی که آدرس به حافظه فرستاده می‌شود، اضافه می‌شود (نگاه کنید به شکل 9.5).برای مثال، اگر مقدار relocation register برابر با 14000 باشد، هر وقت پردازه تلاش کند به مکان 0 آدرس دهی کند، این آدرس به صورت دینامیک به مکان 14000 تغییر پیدا می‌کند؛ و اگر آدرسی مانند 346 باشد، این آدرس به مکان 14346، map می‌شود.برنامه کاربر هرگز به آدرس‌های فیزیکی واقعی دسترسی ندارد. برنامه فقط می‌تواند پوینتری به مکان 346 بسازد، آن را در حافظه ذخیره کند، با آن عملیات انجام دهد، و با آدرس‌های دیگر مقایسه کند(برنامه اینطور فکر میکند که کل حافظه متعلق به اوست) ؛ (پردازه ها به شکل ناجوانمردانه ای دچار درون گرایی تحمیلی هستند 😔)در یک جمله ، وظیفه MMU برقراری ارتباط بین آدرس های منطقی و فیزیکی است.⭕ 9.1.4 بارگذاری پویا (Dynamic Loading)در بحثی که تا اینجا داشتیم، لازم بود که کل برنامه و تمام داده‌های آن برای اجرای در حافظهٔ فیزیکی قرار داشته باشند. بنابراین، احتمال کمبود فضای حافظه همواره وجود داشت. برای به‌دست آوردن استفادهٔ بهتر از فضای حافظه، می‌توانیم از بارگذاری پویا استفاده کنیم.در بارگذاری پویا، یک روال (routine) تا زمانی که فراخوانی نشود، بارگذاری نمی‌شود. همهٔ routine ها روی دیسک، در قالبی از برنامه که قابلیت جابه‌جایی دارد (relocatable load format) نگهداری می‌شوند.برنامهٔ اصلی در حافظه بارگذاری می‌شود و اجرا می‌گردد. وقتی یک routine نیاز داشته باشد routine دیگری را فراخوانی کند، routine یی که فراخوانی را انجام می‌دهد ابتدا بررسی می‌کند که آیا routine مدنظرش بارگذاری شده است یا نه. اگر نشده باشد، relocatable linking loader فراخوانی می‌شود تا routine موردنظر را در حافظه بارگذاری کند و جدول‌های آدرس برنامه را به‌روزرسانی کند تا این تغییر در جدول آدرس اعمال شود. سپس کنترل روند به routine تازه بارگذاری‌شده منتقل می‌شود.مزیت بارگذاری پویا این است که یک routine فقط زمانی بارگذاری می‌شود که واقعاً به آن نیاز باشد. این روش به‌ویژه وقتی مفید است که مقدار زیادی کد برای رسیدگی به حالت‌هایی که به‌ندرت رخ می‌دهند لازم باشد، مانند routine های خطا. در چنین وضعیتی، هرچند اندازهٔ کل برنامه ممکن است بزرگ باشد، بخشی که مورد استفاده قرارمیگیرد ممکن است خیلی کوچک‌تر باشد.بارگذاری پویا به پشتیبانی ویژه‌ای از سوی سیستم‌عامل نیاز ندارد. این وظیفهٔ کاربران است که برنامه‌های خود را طوری طراحی کنند که از چنین روشی بهره ببرند. با این حال، سیستم‌عامل‌ها ممکن است با فراهم کردن روال‌های کتابخانه‌ای برای پیاده‌سازی بارگذاری پویا، به برنامه‌نویس کمک کنند.داخل برنامه هامون وقتی که میایم یه کتابخونه رو import میکنیم ، عملا داریم از این مدل بارگزاری استفاده میکنیم⭕ 9.1.5 پیوند پویا و کتابخانه‌های مشترک (Dynamic Linking and Shared Libraries)کتابخانه‌های پیوند پویا (dynamically linked libraries یا DLLها) کتابخانه‌های سیستمی هستند که هنگام اجرای برنامه‌ها به آن‌ها پیوند داده می‌شوند (به شکل 9.3 مراجعه کنید). برخی سیستم‌عامل‌ها فقط پیوند ایستا (static linking) را پشتیبانی می‌کنند؛ در این حالت، کتابخانه‌های سیستم مانند هر ماژول شیء دیگری در نظر گرفته می‌شوند و توسط (loader) با فایل دودویی برنامه ترکیب می‌شوند.در مقابل، پیوند پویا شبیه بارگذاری پویا است. با این تفاوت که در اینجا پیوند دادن، نه بارگذاری، تا زمان اجرا به تعویق می‌افتد. این ویژگی معمولاً برای کتابخانه‌های سیستمی، مانند کتابخانهٔ استاندارد زبان C، استفاده می‌شود. بدون این امکان، هر برنامه در یک سیستم باید یک نسخه از کتابخانهٔ زبان خود را (یا دست‌کم روال‌هایی را که برنامه به آن‌ها ارجاع می‌دهد) در فایل اجرایی خود داشته باشد. این الزام نه‌تنها اندازهٔ فایل اجرایی را افزایش می‌دهد، بلکه ممکن است باعث هدر رفتن حافظهٔ اصلی نیز شود.مزیت دوم DLLها این است که این کتابخانه‌ها می‌توانند بین چندین پردازه به اشتراک گذاشته شوند، به‌طوری‌که فقط یک نمونه از DLL در حافظهٔ اصلی وجود داشته باشد به همین دلیل، DLLها همچنین با نام کتابخانه‌های مشترک (shared libraries) شناخته می‌شوند و به‌طور گسترده در سیستم‌های Windows و Linux استفاده می‌شوند.وقتی برنامه‌ای به routine ارجاع می‌دهد که در یک کتابخانهٔ پویا قرار دارد، (loader) DLL را پیدا می‌کند و اگر لازم باشد آن را در حافظه بارگذاری می‌کند. سپس آدرس‌هایی را که به توابع موجود در کتابخانهٔ پویا ارجاع می‌دهند، با مکان حافظه‌ای که DLL در آن ذخیره شده است تنظیم می‌کند.یک کتابخانه ممکن است با نسخهٔ جدیدی جایگزین شود و همهٔ برنامه‌هایی که به آن کتابخانه ارجاع می‌دهند، به‌طور خودکار از نسخهٔ جدید استفاده خواهند کرد. بدون پیوند پویا، همهٔ این برنامه‌ها باید دوباره پیوند داده شوند تا بتوانند به کتابخانهٔ جدید دسترسی پیدا کنند.برای اینکه برنامه‌ها به‌اشتباه ، نسخه‌های جدید اما ناسازگار کتابخانه‌ها را اجرا نکنند، اطلاعات نسخه (version information) هم در برنامه و هم در کتابخانه گنجانده می‌شود. ممکن است بیش از یک نسخه از یک کتابخانه در حافظه بارگذاری شود، و هر برنامه از اطلاعات نسخهٔ خود برای تصمیم‌گیری دربارهٔ اینکه کدام نسخهٔ کتابخانه را استفاده کند بهره می‌گیرد.نسخه‌هایی که تغییرات جزئی دارند، همان شمارهٔ نسخه را حفظ می‌کنند، در حالی که نسخه‌هایی با تغییرات عمده، شماره را افزایش می‌دهند. بنابراین، فقط برنامه‌هایی که با نسخهٔ جدید کتابخانه کامپایل شده‌اند، تحت تأثیر تغییرات ناسازگار موجود در آن قرار می‌گیرند. سایر برنامه‌هایی که پیش از نصب کتابخانهٔ جدید پیوند داده شده‌اند، همچنان از نسخهٔ قدیمی کتابخانه استفاده خواهند کرد.برخلاف بارگذاری پویا ، پیوند پویا معمولاً به کمک سیستم‌عامل نیاز دارند. اگر فرایندهای موجود در حافظه از یکدیگر محافظت شده باشند، تنها موجودیتی که می‌تواند بررسی کند آیا روال موردنیاز در فضای حافظهٔ فرایند دیگری قرار دارد یا نه، یا می‌تواند اجازه دهد چند فرایند به همان آدرس‌های حافظه دسترسی داشته باشند، سیستم‌عامل است.ما این مفهوم را، و همچنین اینکه DLLها چگونه می‌توانند توسط چندین فرایند به اشتراک گذاشته شوند، هنگام بحث دربارهٔ صفحه‌بندی در بخش 9.3.4 بیشتر توضیح خواهیم داد.</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Sun, 17 May 2026 17:50:08 +0330</pubDate>
            </item>
                    <item>
                <title>و چنین گفت سیلبرشاتس - فصل 9 مدیریت حافظه- بخش 1</title>
                <link>https://virgool.io/softIran/%D9%88-%DA%86%D9%86%DB%8C%D9%86-%DA%AF%D9%81%D8%AA-%D8%B3%DB%8C%D9%84%D8%A8%D8%B1%D8%B4%D8%A7%D8%AA%D8%B3-%D9%81%D8%B5%D9%84-9-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AD%D8%A7%D9%81%D8%B8%D9%87-%D8%A8%D8%AE%D8%B4-1-yds0dto0ygbn</link>
                <description>⭕ مقدمه فصلدر فصل ۵ دیدیم که چگونه می‌توان CPU را بین مجموعه‌ای از پردازه‌ها (processes) به اشتراک گذاشت. با زمان‌بندی منسب CPU می‌توانیم:بهره‌ وری CPU (CPU Utilization) را افزایش دهیمسرعت پاسخ‌گویی سیستم به کاربران را بهتر کنیماما برای رسیدن به این بهبود عملکرد، باید چندین پردازه را هم‌زمان در حافظه نگه داریم؛ یعنی لازم است حافظه را نیز بین پردازه ها به اشتراک بگذاریم.در این فصل، روش‌های مختلف مدیریت حافظه (Memory Management) بررسی می‌شود.الگوریتم‌های مدیریت حافظه از یک روش ابتدایی مثل (bare-machine) تا راهبردهای پیشرفته‌ای مانند صفحه‌بندی (Paging) متنوع هستند.هر روش:مزایا و معایب خاص خود را داردانتخاب آن به عوامل مختلفی بستگی دارد، مخصوصاً طراحی سخت‌افزار سیستمهمان‌طور که خواهیم دید، بسیاری از این الگوریتم‌ها نیاز به پشتیبانی سخت‌افزاری دارند. به همین دلیل در بسیاری از سیستم‌ها، مدیریت حافظه با همکاری سخت‌افزار و سیستم‌عامل انجام می‌شود.اهداف این فصلدر این فصل یاد می‌گیرید:تفاوت بین آدرس منطقی (Logical Address) و آدرس فیزیکی (Physical Address) را توضیح دهیم.نقش واحد مدیریت حافظه (MMU) در تبدیل آدرس‌ها را درک کنیم.الگوریتم‌های تخصیص پیوسته حافظه مانند:First Fit ، best Fit ، worst Fitتفاوت بینInternal Fragmentation و External Fragmentationرا توضیح دهیم .در سیستم paging ، تبدیل آدرس منطقی به فیزیکی با استفاده از TLB را انجام دهیم.روش‌های:صفحه‌بندی سلسله‌مراتبی (Hierarchical Paging)صفحه‌بندی هش‌شده (Hashed Paging)جدول صفحه معکوس (Inverted Page Table)را توضیح دهیم.نحوه ترجمه آدرس در معماری‌های:IA-32x86-64 ،ARMv8 ،را شرح دهیم.⭕ 9.1 پیش‌زمینه (Background)حافظه یکی از مهم‌ترین بخش‌های یک سیستم کامپیوتری مدرن است.حافظه شامل:آرایه بزرگی از بایت‌هاستکه هر بایت یک آدرس منحصر به فردی داردچرخه اجرای دستور (Instruction Execution Cycle)در اینجا CPU :دستور را از حافظه می‌خواند (Fetch)آن را رمزگشایی می‌کند (Decode)ممکن است داده‌های دیگه ای رو هم نیاز باشه که مجددا از حافظه بخواند (Operands)دستور اجرا می‌شود (Execute)نتیجه دوباره در حافظه ذخیره می‌شود (Store)بنابراین واحد حافظه صرفا جریان و توالی آدرس‌های حافظه را می‌بیند و :حافظه نمی‌داند این آدرس‌ها چگونه تولید شده‌اند.نمی‌داند مربوط به داده‌اند یا دستور.در نتیجه هنگام مطالعه مدیریت حافظه، ما به این کاری نداریم که برنامه چگونه آدرس تولید می‌کند؛ بلکه فقط به توالی آدرس‌هایی که برنامه در حال اجرا تولید می‌کند توجه داریم.آدرس منطقی vs آدرس فیزیکیوقتی برنامه می‌گوید:متغیر X در آدرس 1000 است این عدد 1000 یک آدرس منطقی (Logical Address) است.اما در حافظه واقعی ممکن است متغیر در خانه 45872 باشد ، این آدرس واقعی را آدرس فیزیکی (Physical Address) می‌گویند.تبدیل این دو به هم توسط سخت‌افزار ( MMU ) انجام می‌شود.چرا این جداسازی مهم است؟چون:هر برنامه فضای آدرس مخصوص خودش را دارد.دو برنامه می‌توانند هر دو آدرس 1000 داشته باشند ولی در حافظه فیزیکی در محل‌های کاملاً متفاوتی قرار می‌گیرند.این کار باعث:امنیتجداسازی پردازه‌هاامکان اجرای همزمان چند برنامهمی‌شود.نقش سخت‌افزاربسیاری از روش‌های مدیریت حافظه نیاز دارند که:CPUMMUکشTLB (Translation Lookaside Buffer) -&gt; همون بافر cpu هستشهمگی با سیستم‌عامل هماهنگ باشند.بنابراین مدیریت حافظه یک موضوع ترکیبی از سخت‌افزار و نرم‌افزار است.⭕ 9.1.1 سخت‌افزار پایه (Basic Hardware)حافظه اصلی (Main Memory) و رجیسترهای داخل هر هسته پردازنده تنها حافظه‌های عمومی هستند که CPU می‌تواند مستقیماً به آن‌ها دسترسی داشته باشد.دستورهای سیستمی می‌توانند آدرس‌های حافظه (RAM) را به عنوان ورودی بگیرند،اما هیچ دستوری وجود ندارد که مستقیماً با آدرس دیسک(حافظه های ثانویه) کار کند.بنابراین ، هر دستوری که اجرا می‌شود و هر داده‌ای که آن دستور استفاده می‌کندباید در یکی از این حافظه‌های با دسترسی مستقیم (رجیستر یا RAM) قرار داشته باشد .اگر داده‌ای در حافظه اصلی نباشد، باید قبل از اجرا از دیسک به حافظه منتقل شود . سرعت رجیستر در مقابل حافظه اصلی🔹 رجیسترها:داخل هسته CPU هستندمعمولاً در یک سیکل کلاک  قابل دسترسی‌اندبعضی CPUها می‌توانند در هر سیکل چند عملیات روی رجیستر انجام دهند منظور از یک سیکل کلاک ، همان واحدِ زمانِ پایه‌ی کارِ CPU استمثلاً اگر کلاک اسپید پردازنده 3 گیگاهرتز باشد یعنی CPU در هر ثانیه ۳ میلیارد سیکل کلاک خواهد داشت حافظه اصلی (RAM):از طریق گذرگاه حافظه (Memory Bus) در دسترس استدسترسی به آن ممکن است چندین سیکل کلاک طول بکشدهنگام انتظار برای دسترسی به داده های آن، CPU مجبور به توقف ( Stall ) می‌شودمشکل Stall چیست؟اگر CPU داده مورد نیاز را نداشته باشد:باید صبر کنداجرای دستور متوقف می‌شودکارایی کاهش پیدا می‌کنداز آنجا که دسترسی به حافظه بسیار زیاد اتفاق می‌افتد، این وضعیت قابل قبول نیست. راه‌حل : Cacheبرای حل مشکل، یک حافظه سریع بین CPU و RAM قرار داده می‌شود:✅ Cache Memoryمعمولاً داخل خود چیپ CPU است ( ولی مانند رجیسترها درون هسته های پردازشی نیست )بسیار سریع‌تر از RAM ( ولی از رجیستر ها کند تر است)به صورت خودکار توسط سخت‌افزار مدیریت می‌شودسیستم‌عامل در مدیریت مستقیم آن دخالتی ندارددر پردازنده‌های Multithreaded Core وقتی حافظه در حالت انتظار باشد،  هسته می‌تواند به یک thread دیگر سوئیچ کند تا زمان تلف نشود. مسئله مهم‌تر: حفاظت (Protection)فقط سرعت مهم نیست — امنیت هم مهم است.باید مطمئن شویم:برنامه‌های کاربر به حافظه سیستم‌عامل دسترسی نداشته باشند (وارد فضای کرنل مود نشود)برنامه‌های کاربران به حافظه یکدیگر دسترسی نداشته باشندو این حفاظت باید توسط سخت‌افزار انجام شود ، چون برای اینکه سیستم‌عامل بتواند هر دسترسی حافظه را کنترل کند نیازمند صرف توان پردازشی زیادی خواهیم بود که کارایی سیستم را به شدت کاهش می‌ دهد.سلسله‌مراتب حافظه (Memory Hierarchy)از سریع‌ترین به کندترین:رجیسترکش (L1, L2, L3)حافظه اصلی (RAM)دیسک (SSD/HDD)ظرفیت بیشترسرعت کمترچرا CPU مستقیم به دیسک دسترسی ندارد؟دیسک میلیون‌ها برابر کندتر از رجیستر استمعماری CPU برای کار با حافظه سریع طراحی شدهچرا حفاظت سخت‌افزاری ضروری است؟برای اینکه هر پردازه (process) فضای حافظه‌ی جداگانه داشته باشد، ابتدا باید از این جداسازی مطمئن شویم ؛ وقتی جدا سازی فیزیکی حافظه رو داشته باشیم ، عملا تداخل رو غیر ممکن کردیم.این فضای حافظه‌ی جداگانه برای هر پردازه باعث می‌شود پردازه‌ها از هم محافظت شوند و این جداسازی ، شرط اصلی اینه که بتوانیم چند پردازه را هم‌زمان در حافظه بارگذاری کنیم و اجرای هم‌زمان (concurrent execution) اونها رو داشته باشیم.برای جداسازی حافظه باید :تعیین کنیم پردازه فقط می‌تواند چه بازه‌ای از آدرس‌ها را استفاده کندتضمین کنیم پردازه فقط همان آدرس‌های مجاز را قابل دسترسی داشته باشدراه‌حل با دو رجیستر: Base و Limitاین حفاظت معمولاً با دو رجیستر انجام می‌شود: Base و Limit (در شکل 9.1).Base: کوچک‌ترین آدرس فیزیکیِ مجاز (پایین ترین خونه مجاز)Limit: اندازه / طول بازه مجازمثال:اگر base = 300040و limit = 120900پس برنامه می‌تواند از 300040 تا 420939 (شامل هر دو) را به صورت قانونی دسترسی داشته باشد.سخت‌افزار CPU طوری تنظیم می‌شود که:در حالت user mode هر آدرسی که برنامه تولید/درخواست می‌کند را با رجیسترهای base و limit بررسی کند.اگر برنامه ای در user mode تلاش کند به حافظه‌ی سیستم‌عامل (operating-system memory)یا حافظه‌ی پردازه‌ی دیگری دست بزند، یک trap (تله/استثنا) به سیستم‌عامل رخ می‌دهد.تفاوت Trap و Interrupt : این آقایون دو تاشونم یه جور پیام به سییستم عامل هستن منتهی با این تفاوت که Interrupt توسط سخت افزار تولید میشه و میتونه maskable  یا  unMaskable باشه ولی Trap توسط پردازه در حال اجرا ایجاد میشه و بلافاصله پس از اجرا تاثیر خودش رو در روند کاری سیستم نشون میده. سیستم‌عامل این تلاش را به عنوان یک خطای کشنده (fatal error) تلقی می‌کند. (تصویر 9.2)نتیجه: هیچ برنامه‌ی User Mode (چه تصادفی چه عمدی) نمی‌تواند کد یا داده‌های سیستم‌عاملی یا داده های دیگر برنامه ها را تغییر دهد.چرا فقط سیستم‌عامل می‌تواند Base و Limit را تغییر دهد؟base و limit فقط توسط سیستم‌عامل و با دستور privileged instruction قابل مقدار دهی و تغییر اند و چون privileged instructions فقط در kernel mode اجرا می‌شوند ، کاربرهای user Mode نمی‌توانند محتویات این رجیسترها را دستکاری کنند.سیستم‌عامل در kernel mode دسترسی نامحدود دارددر kernel mode سیستم‌عامل دسترسی کامل به حافظه‌ی پردازه های سیستمی و حافظه‌ی پردازه‌های عادی دارد؛ بنابراین می‌تواند کارهای لازم را انجام دهد مثل:بارگذاری برنامه‌ ها در حافظهدر صورت وقوع خطا حذف/بررسی پردازه از حافظهدستکاری پارامترهای فراخوانی‌های سیستمی (system calls)انجام I/O از/به حافظه‌ی کاربرو خدمات دیگر⭕ 9.1.2 مقیدسازی آدرس (Address Binding)معمولاً یک برنامه به صورت یک فایل اجرایی دودویی روی دیسک(حافظه ثانویه) است. برای اجرا باید:برنامه از دیسک به حافظه (RAM) آورده شوددر قالب یک (process context) قرار بگیردتا CPU بتواند آن را اجرا کند .و وقتی کار پردازش پردازه تمام شد، حافظه‌اش برای پردازه‌های دیگر آزاد می‌شود.برنامه می‌تواند در هر جای RAM قرار بگیردبیشتر سیستم‌ها اجازه می‌دهند پردازه کاربر در هر بخشی از حافظه‌ی فیزیکی باشد.پس اگر فضای آدرس سیستم از 00000 شروع شود، الزاماً اولین آدرسِ پردازه‌ی کاربر هم 00000 نیست.برنامه در مراحل مختلف ، آدرس دهی های متفاوتی خواهد داشتاغلب قبل از اجرا، برنامه چند مرحله را طی می‌کند (شکل 9.3).Program : هنوز در حافظه ثانویه هستیم .Process :در حافظه اصلی هستیم.در این مراحل، آدرس‌ها می‌توانند به شکل‌های متفاوت نمایش داده شوند:در سورس کد برنامه، آدرس‌ها معمولاً نمادین (symbolic) هستند مثل نام یک متغیر: String userNameکامپایلر این آدرس‌های نمادین را به آدرس‌های قابل جابه‌جایی (relocatable) تبدیل می‌کند، مثل:«32 بایت بعد از ابتدای فضای حافظه این ماژول»سپس لینکر/لودر (در Section 2.5) آدرس‌های قابل جابه‌جایی را به آدرس‌های مطلق (absolute) تبدیل می‌کند مثل: خونه شماره 6354 از حافظه. Data Binding رو میتونیم توی این مراحل انجام بدیم :Compile time (زمان کامپایل)اگر از قبل بدانیم پردازه در حافظه دقیقاً کجا قرار می‌گیرد، آدرس دهی مطلق (absolute) رو خواهیم داشت و اگر بعداً محل قرار گیری پردازه داخل حافظه عوض شود، باید دوباره کامپایل کنیم.Load time (زمان بارگذاری)اگر در زمان کامپایل محل دقیق را ندانیم، کامپایلر کد قابل جابه‌جایی  (relocatable) تولید می‌کند و بایند نهایی تا زمان بارگذاری عقب می‌افتد.اگر آدرس شروع تغییر کند، فقط باید کد کاربر را دوباره با آن مقدار بارگذاری کنیم.Execution time (زمان اجرا/Run time)اگر بتوانیم در طول اجرای پردازه آن را از یک بخش حافظه به بخش دیگر منتقل کنیم، mapping باید در run time انجام شود.این کار نیاز به سخت‌افزار ویژه دارد (توضیحات در Section 9.1.3 ).بسیاری از سیستم‌عامل‌ها از این قابلیت پشتیبانی میکنندعلی یوسفی - اردیبهشت ماه 1405 (در میانه خدمت مقدس سربازی 🤕)</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Sat, 16 May 2026 13:51:07 +0330</pubDate>
            </item>
                    <item>
                <title>برگه تقلبی برای گیت</title>
                <link>https://virgool.io/softIran/%D8%A8%D8%B1%DA%AF%D9%87-%D8%AA%D9%82%D9%84%D8%A8%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%AF%DB%8C%D8%AA-ratuitbc5dae</link>
                <description>git init  ساخت ریپازیتوری جدید&lt;git clone &lt;url  کلون کردن پروژه از ریموتgit statusبررسی وضعیت فایل‌ها&lt;git add &lt;file  افزودن فایل به مرحله استیج&quot; &quot; git commit -m  ثبت تغییرات در تاریخچهgit log  دیدن تاریخچه‌ی commit هاgit branch  لیست کردن شاخه‌هاgit branch &lt;branch_name  ساخت شاخه جدید&lt;git checkout &lt;branch_name  سوئیچ به شاخه‌ای دیگر&lt;git merge &lt;branch_name  ادغام شاخه‌ها&lt;git branch -d &lt;branch_name  حذف شاخه&lt;git remote add origin &lt;url  افزودن ریموت جدید&lt;git push -u origin &lt;branch  ارسال تغییرات به ریموتgit pull  دریافت و ادغام تغییرات ریموتgit fetch  گرفتن تغییرات ریموت بدون ادغامgit push  آپلود کردن تغییراتgit reset --hard  برگرداندن به وضعیت آخرین commit (حذف تغییرات محلی)&lt;git checkout -- &lt;file  لغو تغییرات در فایل خاص&lt;git revert &lt;commit_hash  برگرداندن تغییرات یک commit خاصgit stash  موقتا ذخیره تغییرات بدون commitgit stash pop  بازیابی تغییرات ذخیره شدهgit diff  دیدن تفاوت‌ها بین فایل‌ها</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Sat, 09 May 2026 17:40:27 +0330</pubDate>
            </item>
                    <item>
                <title>همه چیز راجب Resource ها در اندروید استدیو</title>
                <link>https://virgool.io/softIran/%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%B1%D8%A7%D8%AC%D8%A8-resource-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D8%AF%DB%8C%D9%88-zuabqz2ygpdy</link>
                <description>بنام خود خدابطور کلی در پروژه‌های اندروید هر چیزی که کد نیست، یعنی فایل‌های ثابت رابط کاربری یا تنظیمات اپ (مثل رنگ، تصویر، استایل، متن و غیره)، به‌عنوان Resource (منبع) در فولدر res/ نگهداری می‌شه.app/ └── src/      └── main/           ├── java/...             ← فایل‌های کد           ├── res/                 ← منابع (Resources)           │    ├── drawable/       ← تصاویر و پس‌زمینه‌ها           │    ├── layout/         ← فایل‌های رابط کاربری XML           │    ├── values/         ← رنگ‌ها، استایل‌ها، رشته‌ها و...           │    ├── mipmap/         ← آیکون‌های اپلیکیشن           │    ├── menu/           ← منوی اپ           │    ├── anim/           ← انیمیشن‌ها           │    └── xml/            ← تنظیمات خاص‌تر (مثل preferences)🟪 ۱. پوشه drawable/برای تعریف گرافیک‌ها، پس‌زمینه‌ها، شکل‌ها و افکت‌ها در XML (بدون نیاز به تصویر PNG/JPG).🔸 انواع فایل‌های رایج در Drawable: shape رسم اشکال ساده (مستطیل، دایره، گوشه گرد) background_shape.xml selector انتخاب حالت‌های مختلف (مثلاً فشار دادن، فوکوس، نرمال) button_selector.xml layer-list چند پس‌زمینه روی هم layer_bg.xml ripple افکت کلیک مدرن (API 21+) ripple_bg.xml inset / scale / rotate / clip تغییر ابعاد یا موقعیت drawable پوشش و جلوه‌های دلخواه✅ مثال‌ها1️⃣ shape (شکل ثابت)&lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:shape=&quot;rectangle&quot;&gt;
    &lt;solid android:color=&quot;@color/purple_200&quot;/&gt;
    &lt;corners android:radius=&quot;12dp&quot;/&gt;
    &lt;padding
        android:left=&quot;8dp&quot;
        android:right=&quot;8dp&quot;/&gt;
&lt;/shape&gt;🔹 استفاده: android:background=&quot;@drawable/rounded_bg&quot;2️⃣ selector (تغییر پس‌زمینه در حالت‌های مختلف)&lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
    &lt;item android:drawable=&quot;@color/teal_700&quot; android:state_pressed=&quot;true&quot;/&gt;
    &lt;item android:drawable=&quot;@color/purple_200&quot;/&gt;
&lt;/selector&gt;🔹 در حالت کلیک → سبز تیره🔹 در حالت معمولی → بنفش روشن3️⃣ ripple (افکت کلیک مدرن)&lt;ripple xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:color=&quot;?attr/colorControlHighlight&quot;&gt;
    &lt;item android:drawable=&quot;@color/purple_200&quot;/&gt;
&lt;/ripple&gt;4️⃣ layer-list (چند لایه پشت‌سرهم)&lt;layer-list xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;    &lt;item android:drawable=&quot;@color/purple_200&quot;/&gt;    &lt;item android:drawable=&quot;@drawable/rounded_border&quot;/&gt;&lt;/layer-list&gt;🟩 ۲. پوشه values/حاوی فایل‌های XML تعریف مقادیر ثابت مثل رنگ‌ها، رشته‌ها، ابعاد و استایل‌ها است. colors.xml تعریف رنگ‌ها &lt;color name=&quot;purple_200&quot;&gt;#BB86FC&lt;/color&gt; strings.xml تعریف متن‌های ثابت &lt;string name=&quot;app_name&quot;&gt;MyApp&lt;/string&gt; dimens.xml تعریف اندازه‌ها &lt;dimen name=&quot;padding_small&quot;&gt;8dp&lt;/dimen&gt; styles.xml ساخت استایل کلی Themeها و استایل‌های ویو themes.xml از Android 10+ برای تعریف تم‌ها و MaterialTheme🟨 ۳. پوشه layout/در اینجا فایل‌های رابط کاربری (UI) اپ رو می‌سازی.هر فایل یک Activity یا Fragment یا Component رو نمایش می‌ده.📄 مثال:&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:padding=&quot;16dp&quot;
    android:background=&quot;@drawable/ripple_bg&quot;&gt;

    &lt;TextView
        android:id=&quot;@+id/txt_hello&quot;
        android:text=&quot;@string/hello_world&quot;
        android:textSize=&quot;@dimen/text_large&quot;
        android:textColor=&quot;@color/black&quot;/&gt;
&lt;/LinearLayout&gt;🟦 ۴. پوشه mipmap/برای ذخیره آیکون‌های اپلیکیشن (در اندازه‌های مختلف).🧠 تفاوت با drawable: فقط برای آیکون‌ها بهینه‌سازی شده (automatic scaling در لانچر).🟥 ۵. پوشه menu/تعریف منوهای OptionMenu یا ContextMenu در XML.&lt;menu xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
    &lt;item android:id=&quot;@+id/action_settings&quot;
        android:title=&quot;@string/settings&quot;
        android:icon=&quot;@drawable/ic_settings&quot;/&gt;
&lt;/menu&gt;🟧 ۶. پوشه anim/ و animator/برای تعریف انیمیشن‌های حرکتی (ترجمه، چرخش، شفافیت، مقیاس و …).&lt;alpha xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:fromAlpha=&quot;0.0&quot;
    android:toAlpha=&quot;1.0&quot;
    android:duration=&quot;500&quot; /&gt;🟫 ۷. پوشه xml/برای تعریف تنظیمات خاصه مثل:Preference screensFile provider pathsBackup rulesمثلاً res/xml/file_paths.xml:&lt;external-files-path name=&quot;my_images&quot; path=&quot;pictures/&quot; /&gt;
&lt;/paths&gt;</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Tue, 28 Apr 2026 13:10:26 +0330</pubDate>
            </item>
                    <item>
                <title>و چنین گفت سیلبرشاتس - فصل 1 بخش 1</title>
                <link>https://virgool.io/softIran/%D9%88-%DA%86%D9%86%DB%8C%D9%86-%DA%AF%D9%81%D8%AA-%D8%B3%DB%8C%D9%84%D8%A8%D8%B1%D8%B4%D8%A7%D8%AA%D8%B3-%D9%81%D8%B5%D9%84-1-%D8%A8%D8%AE%D8%B4-1-lv0bv6sitddf</link>
                <description>بنام سینگل پراسِسِ کرنل موودِ عالممقدمه فصل 1سیستم عامل یه نرم افزاریه که سخت افزار کامپیوتر رو مدیریت میکنه و شرایط رو برای اجرا شدن نرم افزار های دیگه که ما باهاشون کار میکنیم فراهم میکنه ، در واقع سیستم عامل واسطه ای هستش بین اجزای فیزیکی کامپیوتر و کسایی که با اون اجزای فیزیکی میخوان سر و کله بزنن ، یعنی کاربر ها و باقی نرم افزار ها .امروزه سیستم عامل ها رو توی هر سوراخی میتونیم ببینیم ، از موبایل ها و کامپیوتر های شخصیمون گرفته تا ماشین لباسشویی هوشمندی که گوشه آشپزخونه تون داره ایفای نقش میکنه .برای اینکه دقیق بفهمیم سیستم عامل داره چه غلطی میکنه ، اول بهتره اجزای اصلی کامپیوتر که سیسی باهاشون سر و کار داره رو بشناسیم :واحد پردازش مرکزی -&gt; CPUواحد حافظه -&gt; MUواحد ورودی خروجی -&gt; IOUاساسی ترین وظیفه سیسی اینه که این منابع رو بطور مناسب در اختیار برنامه های مختلفی که در حال اجرا هستن قرار بده بدون این که تداخلی بینشون پیش بیاد.از اونجایی که سیستم عامل یه نرم افزار فوق گولاخ هستش ، از قسمت های مختلفی تشکیل میشه و تیکه تیکه میسازن و سر همش میکنن ؛ توی فصل اول کتاب میاد و تک تک این بخش هاش رو واسمون باز میکنه و راجبش توضیح میده.فصل 1 بخش 1 :یک سیستم کامپیوتری رو میتونیم به چهار قسمت تقسیم کنیم : 1 - سخت افزار 2 - سیستم عامل 3 - اپلیکیشن ها 4 - کاربرسیستم عامل در واقع مثل دولت عمل میکنه که خودش کار خاصی انجام نمیده و صرفا فضا رو برای کارکرد مناسب سایرین فراهم میکنه ( دولت ایران رو نمیگه هاااا )در ادامه برای اینکه بهتر متوجه نقش سیسی بشیم ، اون رو از دید کاربر و سیستم بطور جداگانه بررسی میکنیماز دید کاربر :دیدگاه کاربر نسبت به سیسی برمیگرده به اینترفیسی که استفاده میکنه مثلا کاربر های موبایل ، از طریق صفحه نمایش و اسپیکر و ... با سیستم عامل موبایلشون ارتباط برقرار میکنناز این منظر ، وظیفه سیستم عامل اینه که بیشترین خدمت رو در حد اعلا با توجه به سخت افزاری که در اختیار داره قرار بدهیه سری از سیستم عامل ها هم هستند که عملا سر و کاری با کاربر ندارن و کار خودشون رو انجام میدن ، مثلا سیستم عامل مورد استفاده توی سیستم روشنایی خونه های هوشمند ، بدون اینکه بخاد با کاربر تعاملی داشته باشه ، خودش با توجه به اطلاعاتی که از سنسور هاش میکیره ، تصمیم میگیره که لامپ ها رو روشن یا خاموش کنهاز دید سیستم :از نگاه سیستم ، سیسی نرم افزاری هستش که باید با سخت افزار سر و کله بزنه و اون رو به عنوان یه resource allocator میبینه که وظیفه داره اختصاص منابع مختلف سخت افزاری رو مدیریت کنهدر ادامه این قسمت ، کتاب مختصری از تاریخچه سیستم های کامپیوتری میگه که اوایل صرفا برای امور خاصی طراحی میشدن و شرکت های تولیدی مثل آی بی ام ، خودشون نرم افزاری که نیاز بود رو روش نصب میکردن و تمام! و عملا این سخت افزار فقط و فقط یه برنامه رو به یه منظور خاص اجرا میکرد ؛ فک کنید الان برید خدا تومن پول بدید یه آمن بخرید که فقط فیفا 25 روش نصب باشه و تماااام و در ادامه میگه که ظهور سیستم های عامل انقلابی توی این زمینه بود که باعث شد بتونیم از سخت افزار هایی که داریم بیشترین بهره رو ببریم ؛توی این قسمت قانون مور رو هم واسمون توضیح میده که بر اساس اون توی اون برهه زمانی پیش بینی کرده بوده که حدودا هر 18 ماه ، تعداد ترانزیستور های چیپ ست ها و به طبع اون کلاک اسپید کامپیوتر ها دو برابر میشه.23 آبان ماه 1404قبلیبعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Fri, 14 Nov 2025 00:35:31 +0330</pubDate>
            </item>
                    <item>
                <title>و چنین گفت سیلبرشاتس - قسمت 0</title>
                <link>https://virgool.io/softIran/%D9%88-%DA%86%D9%86%DB%8C%D9%86-%DA%AF%D9%81%D8%AA-%D8%B3%DB%8C%D9%84%D8%A8%D8%B1%D8%B4%D8%A7%D8%AA%D8%B3-%D9%82%D8%B3%D9%85%D8%AA-0-lkkivovjxxig</link>
                <description>بنام سینگل پراسِسِ کرنل موودِ عالممهم نیس که میخوای مهندس نرم افزار باشی و برنامه سازی کنی یا متخصص شبکه باشی و بخوای سیم کشی کنی ؛ دانشجوی کامپیوتری و داری درسشو میخونی یا فقط عشقشو داری بالا بری پایین بیای باید بفهمی که این جعبه ای که بهش میگیم کامپیوتر چطوری کار میکنه و چطوری میتونیم ازش بیشترین بهره رو ببریم ، یکی از کانسپت هایی که توی این مسیر بهش نیاز داریم اینه که بدونیم سیستم عامل چیه و چطوری کار میکنه و با نحوه تعاملش با سخت افزار و کاربر آشنا بشیم .وقتی اسم سیستم عامل میاد وسط در واقع با دنیای غول ها سر و کار خواهیم داشت ؛ از دنیس ریچی و اندرو تننبام گرفته تا نابغه ای بنام لینوس توروالدز ، این قسمت از علوم رایانه تا دلتون بخاد آدم گنده و خفن داشته و داره .برای این درس توی دانشگاه ها معمولا دو تا سورس بطور تردیشنال ارائه میشه که یکیش کتاب آقاوی تننبام هستش و یکی دیگه هم کتاب حاج آقا سیلبرشاتس ، من جفتشون رو خوندم و الحق و والانصاف که هر دوتاشون عالی ان ولی خودم با کتاب آبراهام سیلبرشاتس راحت تر بودم و تصمیم گرفتم که خلاصه این کتاب رو یه جایی به زبون خودمونی خلاصه اش کنم که هم خودم بتونم راحت تر و سریعتر مرورش کنم هم اینکه شما زیبایان بتونید باهاش مفاهیم رو مرور کنید علل خصوص که این کتاب  همیشه یکی از پایه ثابت های کنکور ارشد هم هستش .اینجا من قصد دارم کتاب رو پاراگراف به پاراگراف خلاصه اش کنم و اگه حس کردم که جایی نیاز به نکته اضافی داره و مجبور شدم که خودم راجبش سرچ کنم ، اینجا هم قرارش میدم .امیدوارم که این یکی مثل کتاب هربرت شیلد نشه و بتونم کامل ارائه اش کنم.  </description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Thu, 13 Nov 2025 23:20:19 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم های بازگشتی Recursive</title>
                <link>https://virgool.io/softIran/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D8%A8%D8%A7%D8%B2%DA%AF%D8%B4%D8%AA%DB%8C-recursive-r8critvngvzw</link>
                <description>بنام زبان آفرینبعد پنج شیش ماه هوس کردم بیام ویرگول یچی بنویسم اونم درست زمانی که سه تا پروژه سنگین دست گرفتم و کار هام مونده ، گفتم چی بنویسم که هم کاربردی باشه هم کوتاه ، رسیدم به موضوع الگوریتم های ریکرسیو که دیشب یه مقاله جوندار در موردش خوندم ، با خودم گفتم بدی نیس ، هم واسه خودم مرور میشه هم یه چیزی نوشتم .توی یه جمله بخوام کلیت الگوریتم های ریکرسیو رو بگم اینه که این مدل الگوریتم ها قابلیت اینو دارن که در بخش هایی از پراسسشون بتونن خودشون رو مجددا و با یه حجم ورودی معولا کمتر ، کال کنن یه نمونه ساده و دم دستی این الگوریتم ها ، الگوریتم محاسبه فاکتوریل هستش کد فانکشنش رو داخل جاوا مینویسم براتون : public int fact (int x){
if(x == 1)  return 1;
return x * fact( x - 1 );
}خب همونطور که میبینید اینجا یه کد خیلی جمع و جور داریم که بطور بازگشتی اونقدر خودش رو کال میکنه که به حالت بیس که همون 1 هست برسه و چرخه فراخوانی بسته بشه ، توی بیان الگوریتم های بازگشتی مشخص کردن نقطه پایان الگوریتم اهمیت خیلی بالایی داره ، که اگه تعریف نشه بلاتردید دچار stack over flow خواهیم شد و پراسس بووم!الگوریتم های بازگشتی درسته خیلی جمع و جور و تر و تمیز هستن ولی از اونجایی که مغز ما فرایند ها رو بطور خطی تحلیل و پردازش میکنه ، معمولا کسی سراغ این مدل الگوریتم نمیره ، علاوه بر تنبلی ما یه دلیل قابل قبول برای این مورد هستش که سراغ این مدل الگوریتم نریم و اونم احتمال بالای وقوع stack over flow هستش ، شما حتی توی مواقعی که الگوریتم رو کاملا درست و بی نقص پیاده کرده باشی هم احتمال سرریز رو بخاطر ذات ریکرسیو الگوریتم داری .یه مدل الگوریتم بازگشتی دیگه هم هستش که بهش میگیم الگوریتم بازگشتی چند گانه که بخوام ساده بگم ، این داداشمون هر دفعه خودش رو چندبار کال میکنه و به مراتب هم طراحیش شخمی تر و سخت تر از اولیه😂یکی از معروف ترین مثال های این الگوریتم هم ، یه الگوریتم سورتینگ هستش که کد اون رو هم براتون این زیر کپی پیست میکنم ( با عرض پوزش )  :private int partition ( int arr[] , int low , int high) {    
 int pivot = arr[high];
int i = (low - 1);
for (int j = low; j &lt;= high - 1; j++) {
    if (arr[j] &lt;= pivot){
        i++; 
        swap(arr[i], arr[j]);}
}     
swap(arr[i + 1], arr[high]);
 return (i + 1);و در نهایت این که اگه نمیخواید ارشد بدید یا امتحانشو ندارید ، بیخیال ایشون بشید که عملا کابرد چندانی نداره :)9 اردیبهشت ماه 1404 - خوابگاه دستغیب شیراز</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Tue, 29 Apr 2025 00:09:13 +0330</pubDate>
            </item>
                    <item>
                <title>اپ بغلی چه خبره - قسمت 2</title>
                <link>https://virgool.io/@aliyousefi/%D8%A7%D9%BE-%D8%A8%D8%BA%D9%84%DB%8C-%DA%86%D9%87-%D8%AE%D8%A8%D8%B1%D9%87-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-gdqmvx6ywomp</link>
                <description>سلام زیبایان ،میخوام توی این سری مقاله در مورد سرک کشیدن توی اپ های مختلف و خوندن لاگ هاشون با هدف دسترسی به آدرس api هاشون و نهایتا دسترسی به دیتایی که دریافت میکنن صحبت کنم و ببینیم آیا اصلا این کار شدنیه و اگه شدنیه چطور میتونیم مرتکب این عمل قبیح بشیم و در نهایت میگم که چطور میتونیم از اپلیکیشنمون و دیتا های با ارزشش در برابر این مدل سرقت حفاظت کنیم.توی این قسمت که قسمت دوم این مجموعه محسوب میشه قراره root کردن ایمن دستگاهمون رو بطور گام به گام توضیح بدیم.هشدار : از اونجایی که گوشی موبایل شما در مود رووت در آسیب پذیر ترین حالت ممکن قرار میگیره  و حتی ممکنه بفنا بره (یجورایی مثل قضیه پیجر ها توی لبنان) ، توصیه میکنم همینجا بیخیال قضیه بشید و صرفا با یه لایک روانمون رو شاد کنید ؛ بطور کاملا رسمی و از طریق همین تریبون اعلام میکنم که حاجی ما چیزی رو گردن نمیگیریما 😁ریسک های root کردن سیستماول از همه ریسک هایی که توی رووت کردن سیستم باهاشون مواجهیم رو بررسی میکنیم :1 - باطل شدن گارانتی دستگاه و عدم دریافت بروزرسانی ها: اکثر تولید کننده ها و شرکت های وارد کننده ،  گوشی رو بعد از این که رووت بشه ، هیچجوره گردن نمیگیرن و بروزرسانی های نرم افزاری رو هم نخواهید داشت.2  -  بریک شدن : یجورایی میشه بگیم ترسناک ترین مورد ایشون هستن که شاید مجبور بشیم با گوشی نانازمون و خاطراتی که باهاش داشتیم خداحافظی کنیم ؛ با توجه به اهمیتی که داره لازم میدونم این مورد رو یکم بیشتر توضیح بدم :توی این وضعیت دیگه سیستم شما کلا از کار میوفته و عملا بلااستفاده میشه ، که با توجه به دلیل وقوع ،     بریک شدن رو میتونیم به دو دسته تقسیم کنیم 1 - soft break : توی این وضعیت سیستم عامل بالا نمیاد که عمدتا هم مشکل از بووت لودر هستش ، اگه خیلی خوش شانس باشیم گیر این مدل بریک شدن میوفتیم که معمولا مشکلمون با فلش کردن دستگاه حل میشه هر چند باید با خیلی چیزا وداعی سخت داشته باشیم . 2 - Hard break  :  توی این حالت گوشی توی دستتون با دمپایی حمومتون تفاوت چندانی نداره و هیچ مدل ری اکتی نشون نمیده ولی بازم اگه اندکی خوش شانس باشید ، شاید بتونید با هزینه ای معادل قیمت خودش جونش رو در بیارید و اگه نباشید هم که باید محوش کنید ☺یه موردی که با رعایتش میتونید ریسک این مورد رو به شدت پایین بیارید اینه که رووت کردن سیستم رو با باتری صد درصدی انجام بدید.3 - آسیب پذیری امنیتی : اگه احیانا دور و برتون بدافزار مدافزاری باشه ، با رووت کردن سیستم انگاری بهش تعارف زدید که &quot;  ... Come Eat It &quot;4 - پاک شدن اطلاعات : سعی کنید قبلش از دیتا هاتون یه بکاپ بگیرید .چگونگی رووت شدن سیستمدر طول بووت شدن سیستم عامل یه سری ابزار هستن که نوع دسترسی اجزا مختلف رو مشخص میکنن ، اصطلاحا Mount میکنن که ابزار های رووتینگ ، با تغییراتی که در روند کاری این ابزار ها انجام میدن ، دسترسی رووت رو به خودشون اعطا میکنن ( این نوشابه باز کردن برای خودش رو حین پروسه init انجام میده).توی نسخه های قدیمی تر اندروید ، شاهد امنیت بووت لودر به مراتب ضعیف تری نسبت به نسخه های فعلی بودیم و  ابزار هایی مثل KingRoot میتونستن به نرم افزار بوت لودر نفوذ کنن و از این طریق دسترسی سوپروایزر رو بگیرن چیزی که امروزه عملا شده کشک ، بووت لودر اندروید میشه گفت که به خوبی تونسته درز و دورز هاشو ببنده و دیگه نمیشه البختکی بهش نفوذ کرد ، ولی از اونجایی که امنیت صد در صدی جوکی بیش نیست ، آزادی پژوهان این حوزه ، Magisk (مجیسک) رو روو کردن که نه تنها خوب به دروز نفوذ میکنه ، بلکه هربار که اندروید اپدیت میشه ، ایشون رو هم آپدیت میکنن و درز نو ، روزی نو . قدم قدم تا رووت1  - ابتدا firmware  متناسب با مدل گوشی خودتون رو دانلود کنید : از این سایت میتونید دانلود کنید ، مطمئن بشید که دقیقا مال مدل گوشی خودتون رو دانلود کنید که بفنا نرید.فایل زیپی که دانلود کردید رو اکسترکت کنید و دنبال این 3 تا بگردید (boot.img و init_boot.img  و vbmeta.img ) و به حافظه اصلیتون منتقلون کنید.2- برنامه magisk   رو دانلود کنید :از این ( لینک ) magisk را دانلود و نصب کنید. وارد برنامه بشید و از قسمت Select and Patch a File  وارد فضای ذخیره سازی گوشیتون بشین و فایل boot.img رو که بعد اکسترکت firmware کپی کردید رو انتخاب کنید.دکمه lets go رو بفشارید و منتظر پیام !all done  بشید.3- فایل بووت جدید رو منتقل کنید :فایل بووت پچ شده جدیدی که واستون ساخته شد رو به کامپیوترتون منتقل کنید 4-گزینه Developer options دستگاهتون رو فعال کنید :با 7 بار کلیک روی بیلد نامبر ، میتونید Developer options دستگاهتون رو فعال کنید.5- گزینه OEM unlocking رو enable  کنید( از درون زبانه دولوپر آپشن)6 - درایور های ADB (لینک) و FastBoot (لینک) را روی کامپیوتر خود نصب کنید7 - گوشیتون رو با نگه داشتن دکمه پاور و کاهش صدا ، به حالت فست بووت ببرید8 - توی همون حالت فست بووت ، گوشیتون رو به سیستم متصل کنید و دستور( fastboot flashing unlock ) رو داخل cmd ویندوز اجرا کنید.9 - با اجرا شدن این کامند ، یه پجره داخل گوشیتون باز میشه که داخلش گزینه ( Unlock the Bootloader  ) رو انتخاب کنید ( به مک کلید های کاهش و افزایش صدا میتونید بین گزینه ها جا بجا بشید)  10 - فایلی که توی مرحله 3 به سیستمتون منتقل کردید رو داخل محیط ترمینال اجرا کنید و دستورات زیر رو داخلش به ترتیب اجرا کنید :- fastboot flash init_boot magisk_patched_init_boot.img - fastboot flash boot magisk_patched_boot.img- fastboot reboot bootloader11 - در انتها با دستور ( fastboot reboot ) ، گوشیتون رو ریستارت کنیدمعمولا اگه این مراحل رو به ترتیب اجرا کنیم ، الان در حال رووت هستیم ، موارد مختلفی میتونن باعث بشن که این بین به مشکل بخوریم که مهم ترینشون بنظر من ، استفاده از نسخه firmware اشتباهی هستش .خب الان نرم افزار های مختلف در بی دفاع ترین حالت ممکنشون هستن و خیلی راحت میتونیم وارد محیط حافظه اینترنالشون بشیم و به دیتاهاشون دسترسی داشته باشیمتوی قسمت بعدی در این مورد صحبت میکنیم که چطور میتونیم از اپلیکیشن خودمون در برابر این مدل سرقت محافظت کنیم .23 - آذر - 1403قسمت قبلیقسمت بعدی &gt; </description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Fri, 13 Dec 2024 00:13:25 +0330</pubDate>
            </item>
                    <item>
                <title>اپ بغلی چه خبره - قسمت ۱</title>
                <link>https://virgool.io/@aliyousefi/httpsvirgoolioaliyoosefiread-and-use-data1-kzapnpvvwfgw</link>
                <description>سلام زیبایان ،میخوام توی این سری مقاله در  مورد سرک کشیدن توی اپ های مختلف و خوندن لاگ هاشون با هدف دسترسی به آدرس api هاشون و نهایتا دسترسی به دیتایی که دریافت میکنن صحبت کنم و ببینیم آیا اصلا این کار شدنیه و اگه شدنیه چطور میتونیم مرتکب این عمل قبیح بشیم و در نهایت میگم که چطور میتونیم از اپلیکیشنمون و دیتا های با ارزشش در برابر این مدل سرقت حفاظت کنیم.توی این قسمت که قسمت اول این مجموعه محسوب میشه قراره لاگ ها رو واستون تا خصوصی ترین عضوشون تشریح کنیم. اصلا لاگ ( Log ) چیهلاگ ها پیام هایی هستند که سیستم طی وقوع فرایند های مختلف ایجادشون میکنه که این فرایند ها میتونن مستقیما توسط خود سیستم رخ داده باشن یا یه اپلیکیشنی ایجادشون کرده باشه ، از تاچ شدن صفحه گوشی و روشن کردن بلوتوث بگیرید تا خطایی که یه اپلیکیشن حین اجرا باهاش مواجه میشه .این پیام ها که از اینجا به بعد مستقیما &quot; لاگ (Log)&quot; خطابشون میکنیم چند دسته اند  خطا ها (Errors) :      اطلاعاتی در خصوص مشکلاتی که در حین اجرا برنامه رخ داده .  هشدار ها (Warnings)  :     اطلاعاتی در خصوص یه سری سوتی که فعلا مشکلی ایجاد نکردن ولی ممکنه در آینده دردسر ساز بشن .اطلاعات (Information) :     یه سری اطلاعات کلی در خصوص فرایند های مختلف مثل این که آیا درست انجام شده یا نه ، استیت اون   فرایند و یه سری مورد عمومی دیگه که نسبت به باقی لاگ ها اهمیت چندانی ندارن. پیغام های دیباگ (Debugging Messages ) :     این ها لاگ هایی هستند که خودمون تعریفشون میکنیم که بطور اختصاصی در جریان کار فرایند های   مدنظرمون قرار بگیریم ، مثلا از این لاگ ها میتونیم توی بلاک catch برای دریافت پیغام exception استفاده   کنیم (بجای  کثیف کاری هایی مثل  Toast و SOUT  ☺ ) .اگه از لاگ کت درون پروژه تون استفاده میکنید میتونید با این متد ها لاگ های مدنظرتون رو ایجاد کنید :Log.v(tag , message);   for Verbose
Log.d(tag , message);   for Debug
Log.i(tag , message);   for Info
Log.w(tag , message);   for Warning
Log.e(tag , message);   for Errorلاگ ها چه کاربرد هایی دارن ؟از اونجایی که این سوال طنزی بیش نیس ، صرفا کاربرد هاش رو واستون لیست میکنم :Debugging and TroubleshootingMonitoring Application BehaviorAudit Trails ( امنیت اپلیکیشن و مدیریت رفتار کاربر ها )Performance AnalysisAlerts and Notificationsسلسله مراتب اهمیتی لاگ هالاگ ها هم مثل ما انسان ها ( بهتره بگیم آدم ها ... )  ، بنا به مسئولیتی که به عهده دارن ، توی رده های مختلفی قرار میگیرن که میتونیم با تعریف فیلتر فقط گروه خاصی رو مانیتور کنیم سلسله مراتب لاگ ها به ترتیب اولویت : 1 - FATAL2 - ERROR3 - WARN4 - INFO5 - DEBUG6 - TRACEمحتویات هر لاگلاگ ها معمولا بطور پیشفرض  شامل این دیتا ها هستند : زمان وقوعمرتبه اهمیتی لاگاطلاعاتی از منبع یا ماژولی که لاگ رو ایجاد کردهپیغام لاگکه میتونیم مشخص کنیم که کدوما رو بهمون نمایش بده و همچنین با تعریف فیلتر بر اساس همین اجزا میتونیم لاگ هامون رو دسته بندی کنیم.ابزار های کارخب دیگه فکر کنم چیزی از لاگ ها نموند که نگفته باشم ( سوادم بیشتر قد نمیده ) ، توی این بخش یه لیست واستون آماده کردم از ابزار هایی که میتونیم باهاشون لاگ های سیستم رو بخونیم و مدیریتشون کنیم  به همراه  لینک دانلود :Android Studio Logcat (  دانلود  )ADB (Android Debug Bridge) (  دانلود  )MatLog (  دانلود  )Log Viewer (  دانلود  )Timber (  دانلود  )  #گیت هابFirebase Crashlytics (  دانلود  )  #پلاگینLogDNA (  دانلود  )  # گیت هابSentry (  دانلود  )توی قسمت بعدی مجموعه در مورد root کردن موبایل و دسترسی به لاگ ها اپلیکیشن های مختلف صحبت میکنیم .29 - آبان - 1403قسمت بعدی &amp;gt; </description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Tue, 19 Nov 2024 23:34:33 +0330</pubDate>
            </item>
                    <item>
                <title>گذر  از  Applet ها - قسمت 6</title>
                <link>https://virgool.io/@aliyousefi/%DA%AF%D8%B0%D8%B1-%D8%A7%D8%B2-applet-%D9%87%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-%D8%B4%D8%B4%D9%85-khrkhfipil7m</link>
                <description>بنام یگانه دولوپر عالمتوی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم.منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.همین الانی که در خدمت شماییم ، حدود 2 دهه از انتشار اولین نسخه جاوا میگذره و توی این سال ها هر چی پیش رفتیم شاهد تغییرات مختلفی توی ساختار و قابلیت های جاوا بوده ایم ،در زمان شروع به کار جاوا به عنوان یک زبان برنامه نویسی ، شرایط به نحوی بود که اینترنت تازه پا گرفته بود و ترند تکنولوژی روز بود ( مثل شرایط هوش مصنوعی در حال حاضر ) و مرورگر ها با سرعت چشمگیری در حال پیشرفت بودن و میتازوندن ، اون زمان تلفن های هوشمند هنوز اختراع نشده بودن .با در نظر گرفتن تغییراتی به این حجم در دنیای تکنولوژی و انتظارات کاربران ، این که شاهد یه سری تغییرات در ساختار زبان های برنامه نویسی به عنوان زیربنای نرم افزار ها کاملا منطقی و قابل انتظار هستش و ما این تغییر رو توی جاوا ، با تغییراتی که واسه اپلت ها اتفاق افتاد میتونیم به وضوح ببینیم .همونطور که توی قسمت های قبلی هم اشاره کردیم ، اپلت ها برگه برنده مهمی واسه جاوا بودن و از دست دادنشون ضرر بزرگی به محبوبیت این زبان وارد میکرد ولی مشکلی که وجود داشت این بود که اپلت ها روی مرورگر ها اجرا میشدن و نیاز داشتن که مرورگر های هدف از اونها پشتیبانی کنن ولی  طی حرکتی ناجوانمردانه و به دور از مردونگی ، مرورگر ها به مرور دیگه  پلاگین هایی که برای اجرای اپلت ها نیاز بود رو ارایه نکردن و جاوا یه جورایی مجبور شد از این جگرگوشش دل بکنه و بدین ترتیب ، از JDK 9 به بعد شاهد deprecate شدن و آغاز روند خروج اپلت ها بودیم و متاسفانه توی نسخه JDK 17 کلا هیچ خبری از اپلت ها و پشتیبانی شون نبود :(پیش از این هم مشابه اتفاقی که واسه اپلت ها افتاد رو داشتیم ، ( Java Web Start ) ها ، این قابلیت هم این امکان رو میداد که برنامه هایی داشته باشیم که بطور خودکار دانلود بشن و توی سیستم کابر قابل اجرا باشن که خب این قابلیت هم چندان عمری نکرد و مثل اپلت ها ناکام موند و در حال حاضر توی نسخه های مدرن جاوا خبری از هیچکدوم از این دو قابلیت که یه روزی گل مجلس بودن نیست &quot; آرره دایی جان زندگی همینه گهی زین به پشت گهی زین به ....&quot;.17 -مردادماه - 1403پایان قسمت ششمقسمت قبلیقسمت بعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Wed, 07 Aug 2024 00:13:31 +0330</pubDate>
            </item>
                    <item>
                <title>اپلیکیشن وب ویو</title>
                <link>https://virgool.io/@aliyousefi/%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86-%D9%88%D8%A8-%D9%88%DB%8C%D9%88-on45kjnugodf</link>
                <description>بنام حضرت دوستاپلیکیشن وب ویو برای بسیاری از افرادی که دارای وب‌سایت هستند امکانات و مزیت‌های فوق‌العاده بالایی دارد. افرادی که قصد تبدیل وب‌سایت به اپلیکیشن وب ویو اندروید و یا ios را دارند به ‌راحتی و با استفاده از امکانات خاصی که در این مدل اپلیکیشن وجود دارد می‌توانند این کار را انجام دهند، ما ایجا قراره در مورد این مدل اپلیکیشن صحبت کنیماپ وب ویو چیه؟اپلیکیشن وب ویو نرم افزاری هستش که با داشتن قابلیت‌ها و ویژگی‌های مختلف و کاربردی موجب شده  تا امکان نمایش یک صفحه‌ی سایت، به عنوان یه قسمت از اپلیکیشن اصلیمون قابل انجام باشه و عملکردش مثل یه مرورگره  و باعث می‌شود تا که بتونیم یه نسخه اندرویدی یا ios از وبسایتمون داشته باشیم و اینطوری اکوسیستممون رو گسترش بدیممزیتی که وب ویو داره اینه که میتونیم اون قسمت از اپلیکیشنمون رو به صورت کاملا ریسپانسیو در بیاریم و محتوا و ساختارش رو به راحتی تغییر بدیم مثل کاری که با یه سایت معمول میتونیم انجام بدیمفرقی هم نمیکنه که بک گراند سایتتون رو با چی نوشته باشید ، صرف اینکه سایتمون روی سرور آپلود شده باشه کافیه چون اینجا فقط با url صفحه مدنظرمون کار داریمیه مزیت دیگه ای که این مدل اپلیکیشن ها دارن ، هزینه تولیدشون هست که خیلی پایینه و صاحب وب‌سایت نیازی نیست که بخاد به اندازه ای که واسه سایتش هزینه کرده اینجا هم پول بدهمعایب وب ویواگه بخوایم از ایشون ایراد بگیریم میتونیم بگیم این آقا مثل شترمرغیه که وقت سواری دادن مرغه وقت تخم گذاشتن شتره😂نه میتونیم به چشم یه اپ موبایلی بهش نگاه کنیم نه یه وب‌سایت،  ولی خوب ، خووب چیزیه اگه سایت دارید اینم بزنید بغل دستش میارزهامروزه برنامه های ترند روز مثل اینستاگرام و کست باکس و ... همشون از این قابلیت وب ویو دارن استفاده می‌کنن و حالشو میبرن.2 - تیرماه - 1403کانال تلگراممون رو دوست داشتید دنبال کنین🌼@geekland_ir</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Sat, 22 Jun 2024 23:44:36 +0330</pubDate>
            </item>
                    <item>
                <title>بایت کد و JVM -   قسمت 5</title>
                <link>https://virgool.io/softIran/%D9%85%D8%AA%D8%AE%D8%B5%D8%B5-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-5-%D8%A8%D8%A7%DB%8C%D8%AA-%DA%A9%D8%AF-%D9%88-jvm-zen4qhpp2xu2</link>
                <description>بنام یگانه دولوپر عالمتوی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم.منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.بایت کد ، جادوی جاواچیزی که باعث شد که جاوا بطور همزمان پاسخگوی امنیت و قابلیت حمل پذیری برنامه ها باشد ، این بود که کامپایلر جاوا بجای اینکه خروجی قابل اجرا ( executable ) بهمون بده ، خروجی از جنس بایت کد بهمون میده .بایت  کد ها مجموعه ای از محتوایی هستند که قابلیت اجرا روی ماشین مجازی جاوا ( JVM) رو دارن  در واقع JVM به این منظور طراحی شده که ابزاری باشه برای تفسیر بایت کد های جاوا توی سیستم های مختلف.این که خروجی های جاوا برای اجرا شدن به یه واسطه ای نیاز دارن یه قدری موجب کاهش پرفورمنس میشه ولی این جناب بایت کد بقدری تر و تمیز پیاده شده و به قدری با JVM هماهنگ و داداچی اند که این کاهش پرفورمنس به حداقل مقدار ممکنش میرسه ، هر چند رفع دو چالشی که با هاش مواجه بودیم اینقدر ارزشمند هست که دیگه کسی به این ریزه میزه ها توجهی نداشته باشه.تبدیل شدن کد های جاوا به بایت کد ، از این جهت کار ما رو واسه portable بودن برنامه هامون ساده تر میکنه که دیگه نیازی نیست که بخوایم واسه هر پلتفرم و هر سیستمی یه برنامه جداگونه بنویسیم ، اینجا فقط کافیه که اون سیستم هدف ، JVM مخصوص به خودش رو نصب داشته باشه ، که بطور معمول بطور پیشفرض رو همه پلتفرم های امروزی نصب هستش.امنیت با sandboxیکی دیگه از چالش هایی که داشتیم امنیت بودش که همین اجرا شدن برنامه ها با واسطه گری JVM باعث میشه که روند اجرا شدن نرم افازر های مختلف تحت کنترل باشه ، JVM یه محیط محدود وکنترل شده بنام sandbox  رو برای اجرا شدن در اختیار برنامه ها قرار میده که توی این محیط دسترسی های حساس اپلیکیشن ها رو محدود میکنه و دیگه نمیتونن هر بلابی که دلشون میخواد رو سر سیستم کاربر بیارن  و این مدلی ، امنیت کاربرای گوگولی مگولی فضای اینترنت هم تامین میشه.به یاد گذشتگان ، JIT Compilerجاوا به عنوان یه زبان مفسری شناخته میشه ولی اصلا خودش رو به این مورد محدود نمیکنه توی یه سری موارد به زبان نیتیو پلتفرم هدفش تبدیل میکنه و میزنه توی جاده اجرای کامپایلری که اینکارش باعث افزایش پرفورمنس وسرعت و نیاز کمتر به منابع سیستمی در زمان اجرا میشه.برای این منظور ، تکنولوژی ارایه شد بنام HotSpot که قابلیت JIT Compiling رو واسه بایت کد های جاوا فراهم میکرد . JIT Compiler ، بخشی از JVM هست که باعث میشه قسمت های تکراری برنامه ، بجای اینکه در هربار اجرا بخان از اول تفسیر بشن ، یکبار بطور کامل کامپایل بشن ( مستقیما به کد ماشین تبدیل بشن)  و هربار که بهشون نیاز داشتیم ، مستقیما اجرا بشن ، البته اینطور هم نیست که کل برنامه قرار باشه تبدیل به فایل اجرایی بشه هاا ، نه - فقط اون بخش هایی که بطور مکرر بهشون نیاز پیدا میکنیم.مدل های مختلف کامپایلر رو هم توی نسخه های مختلف جاوا داشتیم مثل ahead-of-time compiler که اگه خودتون دوست داشتید در موردش مطالعه کنید یا بگید که خودم در موردشون مفصل بنویسم واستون. ( برای اینکه بهتر متوجه بشید که زبان مفسری و کامپایلری چیه چه تفاوت هایی موقع اجرا دارن این مقاله رو مطالعه کنید)30 - خردادماه - 1403پایان قسمت پنجمقسمت قبلیقسمت بعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Wed, 19 Jun 2024 01:39:55 +0330</pubDate>
            </item>
                    <item>
                <title>تاریخچه زبان جاوا - قسمت 4</title>
                <link>https://virgool.io/softIran/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-4-aorubuun6r43</link>
                <description>بنام یگانه دولوپر عالمتوی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم.منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.جاوا ، الگوی موفقیتقدرت و تاثیرگذاری زبان جاوا توی دنیای کامپیوتر کاملا مشهود هستش ، یکی از نمونه های این تاثیرگذاری زبان #C هستش (نمونه کد) که توسط شرکت فخیمه مایکروسافت به منظور پشتیبانی از فریمورک NET. ساخته شده.سینتکس و مدل شی گرایی که توی سی شارپ استفاده شده شباهت خیلی زیادی به جاوا داره ، در واقع یه جورایی از جاوا الگو برداری کرده (مثل همون کاری که جاوا در مواجه با  ++C و  C کرد) .این تاثیری که جاوا توی پروسه تولید سی شارپ داشته این مفهوم رو میرسونه که جاوا یه خط فکری جدید رو توی دنیا کامپیوتر به وجود آورده.جاوا در تعاملی سازنده با اینترنتچالش برنامه نویسی برای فضای اینترنت موجب شده جاوا به صدر جدول زبان های موجود برسه ، جاوا علاوه بر اینکه موجب سهولت برنامه نویسی وب میشد ، یه قابلیت جذاب رو ارایه میکرد و اون برنامه های اینترنتی جدیدی بودند بنام Applet  ها  همچنین جاوا دو چالش عمده این فضا رو هم حل کرد  portability  , security . در ادامه به بررسی جداگونه هر کدوم از این قابلیت های جذاب میپردازیم.قابلیتی انقلابی ، Java Appletsیکی از جذابیت های نسخه های اولیه جاوا این قابلیت بود که به موجب اون میتونستیم اپلیکیشن هایی طراحی کنیم که داخل مرورگر های قابلیت اجرا داشته باشند . با کلیک کردن لینکی که حاوی اپلت بود ، این برنامه دانلود و اجرا میشد ، اپلت ها معمولا برنامه های سبک و کم حجمی بودند و یه سری کار های ساده و دم دستی مثل دریافت اطلاعات کاربر و ماشین حساب و ... رو انجام میدادند.اپلت ها برای اولین بار موجب شدند که بتونیم وبسایت ها داینامیک رو بصورت خیلی ساده پیاده سازی کنیم.اوایل کار جاوا به شدت پز این اپلتش رو میداد و حسابی توو بورس بود ولی به مرور و با به وجود اومدن ابزر های مشابه و به شدت خفن تر ، اپلت ها جذابیت خودشون رو از دست دادن و نهایتا توی JDK 9 به کلی کنار گذاشته شدند و امروزه کسی ازشون سراغی نمیگگیره.(  هعی یالان دونیا :(   )ایمن و قابل حملداینامیک بودن و پویایی برنامه های تحت وب همون قدر که جذاب بود ، از لحاظ امنیتی ترسناک و چالش برانگیز بود . اپلت هایی که با یه کلیک کاربر دانلود و اجرا میشدن دوتا چالش همراه خودشون داشتند :نباید میتونستند هر کاری که دلشون میخاد بتونن بخورن روی انواع سیستم های مقصد قابل اجرا باشندجاوا جفت این چالش ها رو با ارایه یه چیز به شدت جدید ، ضربه فنی کرد ماشین مجازی جاوا (JVM) و JavaByteCode  برگه برنده ای بود که جیمزگاسلینگ و داداشیاش کوبیدن رو میزایشالا اون رو فردا شب مینویسم ( فردا امتحان دارم :)  ) 26 - خردادماه - 1403پایان قسمت چهارمقسمت قبلیقسمت بعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Sun, 16 Jun 2024 00:19:10 +0330</pubDate>
            </item>
                    <item>
                <title>تاریخچه زبان جاوا - قسمت 3</title>
                <link>https://virgool.io/softIran/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-3-r6b49sxbmztv</link>
                <description>بنام یگانه دولوپر عالمتوی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم.منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.صحنه را برای ورود جاوا آماده کنید !در اواخر دهه 1980 و اوایل دهه 1990، ملت همیشه در صحنه ، حسابی با ++C و برنامه نویسی شی گرا حال کرده بودند و میتازوندن که یهو :موجودی جدید به نام شبکه جهانی ( وب ) روی کار اومده بود و حجم سیستم هایی که روز به روز  بهش اضافه می شدند بطور وحشتناکی در حال رشد بود و متاسفانه ++C  هم خیلی زود به بن بست خورد و صحنه رو ترک کرد ، نیاز جامعه برنامه نویسی چیزی فراتر از نظمی بود که  ++C تامین میکرد.تولد گل پسری جذاب  ، جاوا !جاوا رو جیمز گاسلینگ، و رفقاش  توی سال 1991  درون شرکت سان مایکروسیستمز  طراحی کردند.ساخت اولین نسخه جاوا که واقعا بتونه کار کنه چیزی حدود 18 ماه طول کشید (بله عزیزم ، اگه اپی که ساختی توی شیش ماه میلیاردی فروش نرفت ، نا امید نشو!).این زبان اول کاری &quot;Oak&quot;  به معنی بلوط نام گذاری شد، اما نامش رو در سال 1995 به &quot;Java&quot; تغییر دادند (خدا امواتشون رو بیامرزه).بین انتشار نسخه اولیه Oak توی پاییز  سال 1992 و انتشار عمومی جاوا توی بهار 1995، افراد زیادی روی تکامل جاوا کار کردن .هر چند اون روز بحث داغ و ترند دنیای تکنولوژی اینترنت بود ، ولی هدف طراحی جاوا هم راستا با شبکه وب نبود ، جیمز گاسلینگ و بروبچ سان ، همه همم و غمشون این بود که یه زبانی بسازن که بتونه مستقل از بستر (کراس پلتفرم خودمون) کار کنه و نیاز نباشه که یه برنامه واحد رو برای سیستم عامل های مختلف جداگونه بنویسن و طراحی کنن ، چیزی که پاشنه آشیل برنامه نویسی با C  و  ++C بود.برنامه هایی که با نوشته میشدند نیاز داشتند که همون اول کار بطور کامل برای کار روی یه سیستم از قبل مشخص کامپایل بشن که با توجه به تنوع و گوناگونی سیستم ها یه امتیاز فوق منفی محسوب  میشد مثلا شما تصور کنید که قراره یه اپلیکیشن آموزش زبان تولید کنید و مجبور باشید واسه گوشی های سامسونگ یه برنامه بنویسید واسه شیائومی ها یکی واسه نوکیا نفتی ها یکی و … تازه به این حجم کار این رو هم اضافه کنید که مدل  های مختلف یه برند هم قرار نیست همگی از یه معماری و ساختار مشابه استفاده کنن ، بخوام خلاصه اش کنم اینکه آقا دهن مهن برنامه نویسا اون موقع سرویس بوده واسه این که توو بیوی اینستاش بزنه پروگرمممر ، پدرش در میومده.این ویژگی مستقل از پلتفرم بودن جاوا یجورایی همون چیزی هم بود که توی شبکه وب بهش نیاز داشتیم ، این شبکه مثل دریایی بود که انواع و اقسام سیستم ها با CPU ها و سیستم عامل های مختلف رو داخلش داشتیم و میطلبید محصولی که تولید میکنیم بتونه روی همه این دستگاه ها به خوبی کار کنه .جاوا سینتکس خودش رو از C و شی گرایی رو از ++C الهام گرفته و به قابلیت های کاربردی این دو تا زبان ، ویژگی های جدید منحصر به خودش رو هم اضافه کرده.جاوا زبانی هستش که دسترسی و آزادی بیشتری رو به برنامه نویس ها میده و شما هر چقدر برنامه نویس خفن تر و مسط تری باشید برنامه تون هم بهتر از آب در میاد.24  -  خردادماه  -  1403پایان قسمت سومقسمت قبلی قسمت بعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Thu, 13 Jun 2024 22:56:03 +0330</pubDate>
            </item>
                    <item>
                <title>تاریخچه زبان جاوا - قسمت 2</title>
                <link>https://virgool.io/softIran/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-2-jcwxsmf6pvip</link>
                <description>بنام یگانه دولوپر عالمتوی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم.منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.اختراع C توسط دنیس ریچی ، در ادامه روند توسعه زبانی بود تحت عنوان BCPL (نمونه کد) که قبل تر توسط مارتین ریچارد توسعه یافته بود . در روند توسعه ای زبان قبل از اختراع زبان C ، شاهد اختراع زبان B (نمونه کد)توسط کن تامسون بودیم که اختراع اون هم مثل C تحت تاثیر BCPL بوده.دنیس ریچی برای اولین بار زبان سی رو روی یه سیستم از مدل DEC PDP-11 که سیستم عامل یونیکس رو داشت پیاده سازی و  اجرا کرد که طی چند سال بعد از اختراع هم زبان C فقط با سیستم عامل یونیکس قابل دسترسی بود.سیستم عامل یونیکس رو هم همین جناب آقای دنیس ریچی و کن تامسون توسعه دادند که یه جورایی پدر جد سیستم عامل های ترند مروزی محسوب میشهزبان سی در سال 1989 بطور رسمی در سازمان ANSI  ( سازمان استاندارد آمریکا ) ثبت شد.یه سری ها معتقدند که اختراع سی ، شروع عصر برنامه نویسی مدرن بود دلیل این ادعایی که دارند اینه که سی کاری کرده کارستون و اون این بوده که برای اولین بار یک سری ویژگی ها و کارکرد ها رو بطور همزمان پیاده سازی کرده که توی زبان های قبلی مجبور بودن یکی رو قربانی اون یکی کنن مثلا قدرت و پرفورمنس زبان رو قربانی سهولت سینتکس میکردن( توی BASIC ).یه مورد دیگه ای که موجب محبوبیت عجیب غریب سی شده بود  این بود که این اولین زبانی بود که توسط یه برنامه نویس باحال و خفن طراحی میشد نه توسط یه سری آکادمی و استاد عصا قورت داده و خود خفن پندار ، سی اون روزا یه جورایی مثل یه زبان خودمونی و کوچه بازاری بود که همه باهاش حال کردند و یه عده هم هنوز که هنوزه دارن تعصبشو میکشن ( این اتفاق واسه جاوای خودمون هم صادقه)قدمی رو به جلو ++Cبا توجه به رشد وحشتناکی که توی سال های 1970 تا 1980 توی حوزه کامپیوتریجات داشتیم ، برنامه هایی که مورد نیاز و تقاضای بازار بودند هم پیچیده تر میشدند مثلا اوایل کار مش قربون فقط یه سایتی میخواست که شماره موبایل و آدرس مغازه اش رو توش بزاره و توی چهار خط توضیح بده که آقاجان ما چیپس و بفک و تمثالهم رو میفروشیم ولی یکم که پیشرفت به سرش زد که سفارش مشتری هاش رو اینترنتی بگیره و محصول رو ببره دم در خونشون . خیلی هم عالی 🙂حالا اینور قضیه ما دهن برنامه نویس ها رو داشتیم که برای پیاده سازی این همه قابلیت جدید قرار بود سرویس بشه ، عمده مشکل برنامه نویس ها نظم و ترتیب پروژه هایی بود که داشتند ، چیزی که عملا با ساختار و رویکرد Procedural کد ها توی زبان سی همخونی نداشت و عملا نیاز به یه مدل پیاده سازی جدید بود.اینجای کار بودیم که یه شخصی بنام  ( بی‌یارنه استراس‌تروپ 🙂) شروع کرد به کرم ریزی سر سی کهنتیجه این انگولک کردن ها این شد که رویکرد شی گرایی رو توی سی پیاده سازی کرد.اول کار  اسم زبون جدیدی که ساخته بود رو گذاشت ( سی با کلاس ها 😎) ولی بعد تغییرش داد به ++C .برنامه نویسی با رویکرد شی گرا دقیقا همون چیزی بود که برنامه نویس های اون روز برای نظم دادن به پروژه هاون نیاز داشتند ، پس زدند و حالشو بردند 😀23  -  خردادماه  -  1403پایان قسمت دومقسمت قبلیقسمت بعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Thu, 13 Jun 2024 01:58:34 +0330</pubDate>
            </item>
                    <item>
                <title>تاریخچه زبان جاوا - قسمت 1</title>
                <link>https://virgool.io/softIran/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-1-mmqy152c5kb7</link>
                <description>بنام یگانه دولوپر عالمتوی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم. منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش  (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.تاریخچه زبان جاوا - بخش نخستبرای درک کامل جاوا، باید اول از بفهیم که جاوا رو به چه دلیلی و برای حل چه مشکلاتی ایجاد کرده اند.مانند زبان‌های کامپیوتری موفقی که قبلاً معرفی شدند، جاوا ترکیبی از بهترین ویژگی ها و قابلیت های زبان های برنامه نویسی قبل از خودش  و مفاهیم نوآورانه مورد نیاز برای حل چالش های جدید زمان است.اجداد و اصل و نسب جناب جاواجاوا با ++C  در ارتباط است که بطور مستقیم از  C نشات گرفته است.جاوا  بیشتر خصوصیات خود را از این دو زبان به ارث برده است.جاوا syntax خود را از C و بسیاری از ویژگی های شی گرایی خود را از ++C به ارث برده است.جاوا قابلیت های جدید منحصر به فردی هم دارد که در واقع راه حلی هستند واسه بن بست هایی که زبان های قبلی باهاش مواجه بودن.تولد  C ، شروع عصر برنامه نویسی مدرنزبان C دنیای کامپیوتر و برنامه نویسی را تکان داد و موجب تغییر روش برنامه نویسی و نوع تفکر در مورد آن شد.تولید C نتیجه نیازمندی به یک زبان ساختاریافته ، کارآمد و سطح بالا بود که بتواند جایگزین کد های اسمبلی در برای ایجاد برنامه های سیستمی شود.زمانی که یک زبان کامپیوتری طراحی می شود، باید یک سری توازن و تعادل را رعایت کند، مانند موارد زیر:• سهولت استفاده در مقابل قدرت• ایمنی در مقابل کارایی• انسجام در مقابل انبساط پذیریقبل از C، برنامه نویسان معمولاً مجبور بودند بین زبان هایی که یک مجموعه از ویژگی ها را بهینه و سایر ویژگی ها را قربانی میکردند ، یکی را انتخاب کنند.برای  مثال در حالی که یادگیری BASIC آسان بود، به اندازه کافی قدرتمند نبود، و عدم ساختارمندی و نظم درونی آن، مفید بودنش را برای برنامه ها و پروژه های بزرگ را زیر سوال می برد.از زبان اسمبلی می توان برای تولید برنامه هایی با پرفورمنس فوق العاده استفاده کرد ولی یادگیری اون به شدت سخت و زمانبر هست (نمونه کد) علاوه بر این، اشکال زدایی( debugging) کد اسمبلی به مراتب سخت تر از سایر زبان هاست.یکی دیگر از مشکلات زبان های اولیه کامپیوتری مانند BASIC، COBOL و FORTRAN این بود که بر اساس اصول ساختاری منظمی طراحی نشده بودند. در عوض، بر اصل GOTO به عنوان ابزار اصلی کنترل برنامه ها تکیه داشتند. در نتیجه، برنامه‌هایی که با استفاده از این زبان‌ها نوشته می‌شد،به شدت درهم برهم و غیر قابل خوندن و توسعه بود به اصطلاح (اسپاگتی کد) داشتیم .در اوایل دهه 1970، انقلابی در دنیای کامپیوتر در حال شکل گیری بود و تقاضا برای نرم افزارها از توانایی برنامه نویسان برای تولید آن پیشی گرفت (از بس که تولید برنامه دوشواری داشته) اینجا بود که سر و کله یه آدم عجیب و غریب به اسم دنیس ریچی به میون میاد.21 - خردادماه - 1403پایان قسمت اولقسمت بعدی</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Mon, 10 Jun 2024 17:54:40 +0330</pubDate>
            </item>
                    <item>
                <title>معماری sorted program</title>
                <link>https://virgool.io/@aliyousefi/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-sorted-program-fzpn9i9jpmjm</link>
                <description>بنام اوخب اول بزارین یه مفهومی رو روشنش کنیم و اون اینه که سیستم های کامپیوتری فقط این گوگولی هایی نیستن که در قالب لپ تاپ و کامپیوتر های رو میزی داریم و باهاشون حال میکنیمسیستم های کامپیوتری طیف وسیعی از دیوایس ها رو در بر میگیرند از ابرکامپیوتر هایی که برای مقاصد علمی و نظامی استفاده میشه تا این پک های ریزه میزه که توی هوشمند سازی اشیاء داره بکار میره.هر سیستم کامپیوتری بنا بر مقاصدی که براش طراحی شده از یه معماری توی چیدمان  اجزائش بهره میبره و همینجور الا بختکی دم دستگاهش رو سرهم نکردن.توی این مقاله مدنظر داریم که به معماری sorted program که توسط داوشمون  جان فون نیومن  طراحی شده بپردازیم با ما همراه بگردید ?خب توی این مدل معماری ، کل سیستم به سه قسمت تقسیم میشه و سخت افزار های مختلف بنا به اهداف کاریشون توی سیستم ، توی یکدوم از این قسمت ها قرار می‌گیرند. و اما این سه قسمت: ۱ - Central Processing Unit [CPU] : واحد پردازش مرکزی این قسمت توی سیستم های کامپیوتری تحت این معماری ، وظیفه پردازش و تفسیر داده ها رو بر عهده دارن ؛ چیزی که در مورد این قسمت مهمه اینه که بدونیم کل این بخش الزاما اون قطعه گرون قیمتی نیس که خمیرمالیش میکنیم و خیلی لطیفه ، اوشون میکروپروسسور نام دارن ولی از اونجایی که اکثر سیستم های کامپیوتری واحد CPU شون توی یدونه از اونها خلاصه شده به این نام شناخته میشن .این قسمت میتونه شامل ده تا میکروپروسسور غول باشه توی سیستم های سروری ، یا چهار تا IC  درب داغون توی چیپ های دم دستی.۲ - Memory Unit  [MU] : این قسمت وظیفه فراهم سازی داده و ایضا بهینه سازی محل کار قسمت CPU رو بر عهده داره ،یجورایی کارگر دم دست اوساس. حافظه های RAM و حافظه Cache میکروپروسسور  جزو این قسمت محسوب می‌شوند.۳ - Input Output Unit [IOU] : این قسمت شامل یه سری کنترلر هست که معمولا روی مادربرد قرار گرفتن و قابلیت ارتباط سیستم با محیط خارج رو فراهم میکنن ؛ مثلا کنترلر شبکه ، کنترلر گرافیکی و ...  دقت بکنید که سخت افزار هایی مثل کیبورد ، موس ، کارت گرافیک(جدیدا) ، حتی حافظه  های ثانویه مثل HDD , SSD ،جزوه سیستم محسوب نمیشن و در واقع همون اجزا خارجی اند که از طریق قسمت IOU با سیستم در ارتباط اندخب مقاله پربارمون به اتمام رسید  تا فرداشب خدانگهدار?</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Sat, 28 Oct 2023 01:19:28 +0330</pubDate>
            </item>
                    <item>
                <title>پوشه assets و raw در اندرویداستدیو</title>
                <link>https://virgool.io/@aliyousefi/%D9%BE%D9%88%D8%B4%D9%87-assets-%D9%88-raw-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%B3%D8%AA%D8%AF%DB%8C%D9%88-pgehvvhzichk</link>
                <description>بنام هستی بخشخب ما توی اندروید استدیو واسه ذخیره کردن فایل هایی مثل فایل های صوتی و ویدیویی و ... دو تا دایرکتوری اختصاصی داریم یکی جناب assets  و اون یکی هم raw حالا هر کدوم از این دو بزرگوار یه سری مزایا دارن و تبعا یه سری هم معایب دارن که ما بر حسب نیازمون تشخیص میدیم که از کدومشون استفاده کنیم و فایل هامون رو توی کدومشون قرار بدیمشیوه نام گذاری : توی پوشه assets خیلی دستمون واسه نام گذاری بازه و محدودیتی توی استفاده از کارکتر ها نخواهیم داشت ولی توی پوشه raw باید قوانین نام گذاری فایل های xml رو رعایت کنیم مثلا نمیتونم از فاصله یا حروف بزرگ و... استفاده کنیم.ساخت ساب فولدر : توی پوشه assets  مجازیم که بینهایت پوشه تو در تو و هم رده بسازیم ولی توی raw خبری از پوشه موشه نیس هر چی داری رو باس فله ای بریزی کف پوشه اصلیدسترسی از طریق فایل xml : اگه نیاز داشته باشیم که به فایل مدنظرمون از درون فایل های xml دسترسی داشته باشیم ،نمیتونیم از پوشه assets استفاده کنیم و فقط باید بریم سراغ  raw نحوه دسترسیش هم این مدلیه &quot;@raw/filename&quot;دسترسی به لیست فایل های موجود : اگه نیاز باشه که لیست فایل های موجود رو در اختیار داشته باشیم و بتونیم از متد getLists استفاده کنیم باید فایل هامون رو توی پوشه assets  قرار بدیمسهولت دسترسی : برای دسترسی با فایل ها توی خر کدوم که باشن باید از filestream ها استفاده کنیم ولی دسترسی به فایل در صورتی که توی assets باشه یه نمه آسون تره: (توی raw) : resources.openRawResource(R.raw.filename)(توی assets) : assets. open(filename)توجه خروجی هر دو تای اینا InputStram هستشخب این مقاله پربار در اینجا ب پایان رسید حالا شما خودتون ببنید کدوم پوشه مناسب کارتونه از اون استفاده کنید?</description>
                <category>علی یوسفی</category>
                <author>علی یوسفی</author>
                <pubDate>Mon, 14 Aug 2023 17:33:27 +0330</pubDate>
            </item>
            </channel>
</rss>