<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات گیگابایت 🔑</title>
        <link>https://virgool.io/softIran/feed</link>
        <description>در تلاش برای بهتر شدن</description>
        <language>fa</language>
        <pubDate>2026-06-16 01:10:31</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/fkfle3ekhhcm/gwz8ye.jpg</url>
            <title>گیگابایت 🔑</title>
            <link>https://virgool.io/softIran</link>
        </image>

                    <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>بایت کد و 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>
            </channel>
</rss>