<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های میلاد شیریان</title><link>https://virgool.ir/feed/@milad.xsar72</link><description>خلاقان تاثیرگذار</description><language>fa</language><pubDate>2026-11-11 00:52:19</pubDate><image><url>https://files.virgool.ir/upload/users/329075/avatar/kaAyco.jpg</url><title>میلاد شیریان</title><link>https://virgool.ir/@milad.xsar72</link></image><item><title>چرا به پترن KIP نیاز داریم؟ با پترن KIP کدهایتان را نجات دهید</title><link>https://virgool.ir/@milad.xsar72/kip-pattern-tsmxde7ns0ys</link><description>پترن‌ها، پرینسیپل‌ها و قوانین Clean Code همه زاییده یک «درد» هستند؛ دقیقا همون دردی که باعث شد پترن KIP (Keep It Private) رو خلق کنم. 🛑 مشکل چی بود؟موقع توسعه کامپوننت‌ها (چه بزرگ، چه کوچیک)، هر کامپوننت از unitهای مختلفی تشکیل می‌شه که فقط و فقط مختص همون کامپوننت و اسکوپ (Scope) اونه. وقتی همه این‌ها رو داخل یک فایل تجمیع می‌کردیم، فایل کامپوننت تبدیل می‌شد به یک غول پیکرِ سخت‌فهم!🤔 راه‌حل موقت و دردسرساز:برای خلوت کردن فایل، می‌اومدیم unitهای مختلف (مثل hook, utility, style, type) رو می‌بردیم توی فولدرهای گلوبال و بعد توی کامپوننت ایمپورت می‌کردیم.نتیجه؟ کثیف شدن و بزرگ شدن محیط گلوبال! کدهایی که کاملاً specific و مختص یک کامپوننت بودن، به بیرون نشت (Leakage) می‌کردن.شاید تو ذهنتون بیاد که: «خب باید کُد رو از اول جوری گلوبال بنویسی که بعداً بشه همه‌جا استفاده‌اش کرد». اما واقعیت اینه که در اکثر مواقع این اتفاق نمی‌افته! بدتر از همه، این کار منطق و unitها رو از اصل کد (یعنی کامپوننت) دور می‌کنه و بار ذهنی (Cognitive Load) دیباگ و فهم کد رو به شدت بالا می‌بره.✅ اینجا بود که KIP متولد شد:به جای بردن unitها به محیط گلوبال یا چپوندن اون‌ها تو یک فایل، بیا و در فولدرِ خودِ کامپوننت، unitهای مختلف رو بسته به نیاز همون کامپوننت تعریف کن.Keep It Private! خصوصی نگهشون دار؛ فقط برای همون کامپوننت. در نهایت فایل index به عنوان Gateway عمل می‌کنه و تصمیم می‌گیره چه چیزهایی رو می‌خوای به بیرون هدایت کنی.📂 ساختار به این شکل می‌شه (پیشوند _ یعنی private):_hook.ts_type.ts_slots.tsx_component.tsx...index.ts (Gateway / API Boundary)با این معماری، هم Componentها تمیز و خوانا می‌مونن، هم گلوبال کثیف نمی‌شه، و هم Scale کردن پروژه بی‌نهایت راحت‌تر می‌شه. پروژه گیتهابشم میتونین اینجا ببینین: https://github.com/Miladxsar23/kip-pattern</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Tue, 05 May 2026 15:41:00 +0330</pubDate></item><item><title>پایان دردسرهای فرم چندمرحله‌ای توی ریکت</title><link>https://virgool.ir/@milad.xsar72/پایان-دردسرهای-فرم-چندمرحله-ای-توی-ریکت-kr2ybff3zwk3</link><description>SmartStepper: پایان دردسرهای فرم چندمرحله‌ای تو Reactsmartstepperتوسعه فرم‌های چندمرحله‌ای تو React شاید در نگاه اول ساده به‌نظر برسه، اما اگه تجربه‌ش کرده باشی، احتمالاً می‌دونی که تبدیل می‌شه به یه کابوس واقعی.سه تا قدم ساده داریم:اطلاعات کاربر → آدرس → تایید نهایی.اما اجراش؟! 😵😩 واقعاً چرا اینقد پیچیده‌ست؟برای ساخت یه فرم چندمرحله‌ای تو React معمولاً این سناریو تکرار می‌شه:کلی useState برای مدیریت قدم‌هاشرط‌هایی مثل if (currentStep === &#39;user&#39;) که همه‌جا پخش شدنValidation برای هر مرحله باید دستی هندل شهUI و Logic قاطی می‌شن؛ هر تغییری تو یکی، اون یکی رو خراب می‌کنهمدیریت مقدار پیش‌فرض، ریست، بازگشت به مرحله قبل؟ وای به حالت 😵‍💫تا وقتی تعداد مراحل کمه، با زور و زحمت می‌شه هندلش کرد. اما به محض اینکه فرم بزرگ‌تر یا داینامیک‌تر بشه، کدت پر از شرط و شرط‌بندی می‌شه و دیگه قابل نگهداری نیست.🤔 یعنی باید همیشه با این دردسرها سر کنیم؟نه لزوماً!منم مثل خیلی از شما، بارها تو پروژه‌هام مجبور شدم فرم چندمرحله‌ای بسازم.هر بار هم مجبور بودم همون الگوی تکراری رو از اول بسازم.واسه همین تصمیم گرفتم یه ابزار کوچیک بسازم که این زجر رو برای همیشه تموم کنه.💡 SmartStepper چیه؟SmartStepper یه کتابخونه‌ی کم‌حجم برای ساخت فرم‌های چندمرحله‌ای تو React هست که از فلسفه‌ی &#34;همه‌چیز رو دکلراتیو و کانفیگی کن&#34; پیروی می‌کنه.به‌جای اینکه بری سراغ useState و شرط‌های if/else و هزار جور مدیریت دستی، توی SmartStepper فقط یه کانفیگ ساده می‌نویسی و خودش همه‌چیز رو هندل می‌کنه.🧠 چه قابلیت‌هایی داره؟✔️ تعریف ترتیب قدم‌ها با تابع (حتی داینامیک)✔️ پشتیبانی از Yup و Zod برای اعتبارسنجی هر مرحله✔️ مقدار پیش‌فرض برای هر فیلد✔️ امکان تعیین wrapper برای هر View (مثل Card یا Stepper UI)✔️ جداسازی کامل Logic از UI✔️ هماهنگ با React Hook Form🧪 یه مثال واقعیorchestration: {&#xA;  user: { next: () =&gt; &#39;address&#39; },&#xA;  address: {&#xA;    next: (data) =&gt; data.city === &#39;Tehran&#39; ? &#39;special&#39; : &#39;confirm&#39;,&#xA;    previous: () =&gt; &#39;user&#39;,&#xA;  },&#xA;  confirm: { previous: () =&gt; &#39;address&#39; }&#xA;}&#xA;تو همین چند خط، منطق رفت و برگشت بین مراحل فرم رو کنترل کردی. بدون حتی یه خط useState یا شرط تودرتو.🔗 لینک‌ها📦 نصب از npm:npm install smartstepper&#xA;🌍 صفحه گیت‌هاب:https://github.com/Miladxsar23/smartstepper🎯 دموی زنده (بدون نیاز به نصب):https://codesandbox.io/p/sandbox/g8g8c7✅ برای کی مناسبه؟اگه تو هم مثل من، فرم‌هایی می‌سازی که بیش از ۱ مرحله دارنو از مدیریت دستی و باگ‌های ناشی از کدهای پراکنده خسته شدی،SmartStepper ممکنه همون چیزی باشه که لازم داشتی.⭐️ یه لطف: اگه به دردت خورد...به پروژه یه ستاره تو گیتهاب بزن که بدونم مفید بوده براتیا اگه سوال یا پیشنهادی داشتی، خوشحال می‌شم تو Issues یا Discussion بهم بگی.🧵 پ.ن:تجربه تو از ساخت فرم‌های چندمرحله‌ای چطور بوده؟تا حالا از کتابخونه خاصی استفاده کردی؟توی کامنت‌ها بنویس، خوشحال می‌شم بخونم.</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Wed, 02 Jul 2025 11:25:47 +0330</pubDate></item><item><title>فرم‌های چند مرحله‌ای رو با SmartStepper توی React راحت بساز!</title><link>https://virgool.ir/@milad.xsar72/فرم-های-چند-مرحله-ای-رو-با-smartstepper-توی-react-راحت-بساز-gob11nz4pg8a</link><description>فرم‌های چند مرحله‌ای رو با SmartStepper توی React راحت بساز!ساخت فرم‌های چند مرحله‌ای توی React می‌تونه یه دردسر واقعی باشه. باید هم وضعیت فرم رو مدیریت کنی، هم منطق اعتبارسنجی رو درست بنویسی، هم یه تجربه کاربری خوب ارائه بدی. SmartStepper یه کامپوننت قدرتمند React هست که اومده تا این کار رو برای شما ساده کنه. با SmartStepper می‌تونی فرم‌های چند مرحله‌ای کاربرپسند و قوی رو با کمترین تلاش ممکن بسازی.پیاده سازی فلوهای پیچیده با smartStepperخب این SmartStepper چه امکاناتی داره؟مدیریت ماشین حالت: SmartStepper از یه ماشین حالت استفاده می‌کنه تا بین مراحل فرم حرکت کنه. اینطوری یه جریان کنترل‌شده و قابل پیش‌بینی برای کاربرانتون ایجاد می‌کنید و دیگه لازم نیست تو کامپوننت‌های فرمتون برای مدیریت وضعیت دردسر بکشید.مراحل تودرتو برای فرم‌های پیچیده: می‌خواید فرم‌های پیچیده با سلسله مراتب تودرتو بسازید؟ مشکلی نیست! SmartStepper یه ساختار مرحله تودرتو داره که به شما کمک می‌کنه فرمتون رو به طور منطقی سازماندهی کنید و تکمیل کردنش رو برای کاربرها آسون‌تر کنید.جداسازی دغدغه‌ها: SmartStepper یه جداسازی واضح بین دغدغه‌های مختلف ایجاد می‌کنه. کامپوننت‌های هر مرحله محتوای و منطق خودشون رو تعریف می‌کنن و یه کامپوننت اصلی هم هست که مدیریت وضعیت و ناوبری بین مراحل رو به عهده داره. این جداسازی، کدتون رو قابل نگهداری‌تر و قابل استفاده مجددتر می‌کنه.یکپارچه‌سازی با React Hook Form: SmartStepper به طور کامل با React Hook Form ادغام می‌شه. React Hook Form یه کتابخانه محبوب برای اعتبارسنجی فرم و مدیریت وضعیت در برنامه‌های React هست. با این ادغام، اعتبارسنجی تو هر مرحله ساده‌تر می‌شه و از صحت داده‌ها تو کل فرم مطمئن می‌شید.لغو خودکار ثبت نام فیلدها: وقتی به مرحله قبلی برمی‌گردید، SmartStepper به طور خودکار فیلدهای فرم رو از حالت ثبت نام خارج می‌کنه و اثرات مرحله ای که از اون برگشت زدید رو محو میکنه اینطوری داده‌های قدیمی با اعتبارسنجی تداخل پیدا نمی‌کنن و یه وضعیت فرم تمیز و مرتب برای کاربر ایجاد می‌شه.مزایای استفاده از SmartStepper:کاهش زمان توسعه: SmartStepper با مدیریت وضعیت و ناوبری بین مراحل، به شما کمک می‌کنه تا روی ساخت محتوای و منطق هر مرحله تمرکز کنید و زمان توسعه رو به طور قابل توجهی کاهش بدید.تجربه کاربری بهتر: با SmartStepper می‌تونید یه جریان مرحله واضح، بازخورد اعتبارسنجی دقیق و ساختارهای مرحله تودرتو برای فرمتون ایجاد کنید و به این ترتیب یه تجربه کاربری روان و لذت‌بخش رو برای کاربرانتون رقم بزنید.کد ماژولار و قابل نگهداری: جداسازی منطق هر مرحله از کامپوننت‌های UI، کد شما رو قابل نگهداری‌تر می‌کنه و اصلاح یا گسترش فرمتون رو در آینده آسون‌تر می‌کنه.اعتبارسنجی قدرتمند: ادغام SmartStepper با React Hook Form، به شما امکانات قدرتمندی برای اعتبارسنجی فرمتون می‌ده و از جمع‌آوری دقیق اطلاعات از کاربرانتون مطمئن می‌شه.عملکرد بهینه: لغو خودکار ثبت نام فیلدها، عملکرد فرم شما رو بهینه می‌کنه چون دیگه لازم نیست برای مدیریت وضعیت فرم که ضرورتی نداره وقت تلف کنید.چجوری ازش استفاده کنم؟کافیه از طریق npm اون رو توی پروژت نصب کنی(من آدرسش رو قرار میدم، اونجا کاملا داکیومنت و نحوه استفاده ازش رو توضیح دادم و خوشحال میشم که اگر انتقاد یا پیشنهادی دارید مطرح کنین) https://www.npmjs.com/package/smartstepper آدرس گیتهاب: https://github.com/Miladxsar23/smartstepper </description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Mon, 15 Jul 2024 13:46:18 +0330</pubDate></item><item><title>خطرات امنیتی و احتمالات هک شدن از طریق پراکسی(فیلترشکن)</title><link>https://virgool.ir/@milad.xsar72/خطرات-امنیتی-و-احتمالات-هک-شدن-از-طریق-پراکسیفیلترشکن-gsqxh3olfqfy</link><description>خب شاید توی این اوضاع اخیر تقریبا 99 درصد ما، داریم با استفاده از اپلیکیشنها و یا با پراکسیها به اینترنت جهانی یا شبکه های اجتماعیمون به خاطر فیلترینگ وصل میشیم که این موضوع شاید سوالاتی برای خیلیامون به وجود بیاره که:نکنه هکمون کنن؟؟؟?نکنه اطلاعاتمون رو کش برن یا ردیابیمون کنن؟؟؟اصلا این فیلتر شکنها و این پراکسیها چیکار دارن میکنن؟؟؟خب میخوایم توی این مقاله به این مسئله بپردازیم :)))پراکسیپراکسی چیکار میکنه؟؟؟وقتی که از یه سرور پراکسی استفاده می کنین، کامپیوتر یا تلفن همراهتون اساساً از طریق یک سرور و یک آدرس IP متفاوت از آدرس شما وارد اینترنت می شه. اتصال به وب از طریق سرور پروکسی یکی از راه‌های محافظت از ناشناس بودن آنلاین شما است ? یعنی یک کامپیوتر(سرور) واسط که خودش به اینترنت جهانی وصله(و احتمالا تو ایران نیست) میخواد درخواست شما رو بگیره و بره به اینترنت جهانی وصل بشه و پاسخ رو بگیره و بفرسته واسه شما(یه جورایی دلالی میکنه ?). خب با تموم این خوبیاش خطراتی بس ناجوان مردانه داره که میخوام چندتاشو بگم براتون:تحدیدات امنیتی پراکسیهاهک امنیتی:وقتی یه صفحه وب رو وقتی به پراکسی متصلین باز میکنین به طور مثال gmail یا درگاه پرداخت بانکیتون رو، تمامی پکتهای(Packet - همون پاکت خودمون) داده ای که از طریق صفحه وب به سرور مقصد و یا از سرور مقصد به صفحه وب باز شده روی دستگاه شما منتقل میشه باید از طریق یک سرور شخص ثالث عبور کنند.(بووووم?) این سرورهای شخص ثالث همیشه قابل تشخیص یا قابل اعتماد نیستند و داده های دریافت شده و منتشر شده از دستگاه شما همیشه رمزگذاری(encrypt) شده نیست. بنابراین، سرورهای پروکسی مخرب به طور بالقوه می تونن تمام داده هایی رو که از دستگاه شما و به سمت اون هدایت می شن، ضبط کنند و جزئیات حساس مانند نام کاربری و رمز عبور حساب های آنلاین شما رو بدزدند.حملات اسپم و ویروس:این احتمال وجود داره که هنگام اتصال به اینترنت از طریق سرور پروکسی با بنرها و تبلیغات بیشتری روبرو بشین. وقتیکه که به یک سرور پراکسی متصل میشین، یک session برای تعاملات آنلاین شما اختصاص داده می شه. ارائه دهندگان پروکسی می تونن با ویروس ها و spam ها به session شما نفوذ کنن، که ممکنه ناخواسته اونها رو دانلود کنین و باعث آسیب مرگبار به دستگاه شما میشه.سرقت هویت:وقتیکه از یک سرور پراکسی استفاده می کنین، اساساً نام میزبان(Host name) خودتون رو به یک شخص ثالث اغلب ناشناخته لو میدید. به عبارت دیگه، شما ممکنه از آدرس IP شخص دیگه ای برای مرور اینترنت استفاده کنین، اما آدرس خودتون رو برای سوء استفاده احتمالی  افشا می کنین? . به عنوان مثال، شخصی ممکن است از هویت شما به عنوان پروکسی برای انجام فعالیت‌های شرورانه و غیرقانونی در اینترنت استفاده کنه. علاوه بر این، بدون اطلاع یا رضایت شما، ارائه دهندگان پروکسی ممکنه آدرس IP شما را به دیگران مانند بازاریابان یا مجریان قانون? تحویل دهند یا بفروشند. بنابراین، پروکسی‌ها می‌توانند منجر به سوء استفاده از هویت اینترنتی شما بشن.خب حالا چیکار کنیم؟؟؟ما اینترنت میخوایم!!!?باید بگم که یک راه دیگش استفاده از VPS هستش که خب همه نمیتونن دانش استفاده ازش رو داشته باشن ولی... باید بگم عملا محدود سازی اینترنت و فیلترینگ داره خطر دزدی هویت مارو خیلی بیشتر از قبل تحدید میکنه ولی به اسم مراقبت از هویت ایرانیان داره این فیلترینگ اجرا میشه که خب ....خب زیاد عصبانی نشم چون ممکنه چیزای خوبی نگم. بریم سر وقت تنها راهکار که میتونه خطرات احتمالی رو کاهش بده:فقط وقتی نیاز داری به پراکسی به اون متصل شو و بعد حتما قطعش کن و به هیچ عنوان وقتی به پراکسی وصلی کارهای حساسی مثل ورود به جیمیل، پرداخت الکترونیک، موبایل بانک و ... رو انجام نده.دوست دارم بدونم نظرتون رو پس برام بنویسین راهکارای دیگه ای که میتونه به همه کمک کنه ?</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Tue, 11 Oct 2022 13:33:45 +0330</pubDate></item><item><title>اتصال به گیتهاب با استفاده از پراکسی (Proxy) و دور زدن فیلترینگ</title><link>https://virgool.ir/CE-SHAHED-publication/اتصال-به-گیتهاب-با-استفاده-از-پراکسی-proxy-و-دور-زدن-فیلترینگ-sk7okmfgd3uc</link><description>سلام از اونجایی که دیدم شاید خیلیهامون الان داریم روی یک پروژه اپن سورس کار میکنیم که روی گیتهاب قرار داره و متاسفانه به دلیل &#34;فیلترنتی&#34; امکان push کردن کامیتهامون رو نداریم.میتونیم بدون هیچ نرم افزار اضافی و فقط با استفاده از یک سرویس پراکسی رایگان و یک کامند، به راحتی اینکار رو انجام بدیم.اتصال به گیتهاب با پراکسی پمراحل اتصال پراکسی به گیتهاب:1-ابتدا به این آدرس بروید و آدرس سرور پراکسی به همراه پورت مورد نظر رو کپی کنید(در آخر بهشون Star بدید جهت حمایت :) )address: http://fodev.orgport:80182-خب حالا کافیه یه ترمینال باز کنید و کامند زیر رو توش اجرا کنین.این تنظیمات به طور global برای همه پروژه هاتون تنظیم میشه:git config --global http.proxy http://fodev.org:8118  کوتاه نوشتم چون واقعا با این وضعیت حال نوشتن هم نیست.</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Tue, 04 Oct 2022 13:22:03 +0330</pubDate></item><item><title>ساخت چند نمونه preloader باحال و ساده?</title><link>https://virgool.ir/@milad.xsar72/ساخت-چند-نمونه-preloader-باحال-و-ساده-y7di0dgfz9fy</link><description>من که عاشق preloader هام، علی رغم اینکه خیلی از ماها اعتقاد داریم که performance حرف اول رو میزنه اما باید یکچیزی رو در نظر بگیریم که انیمیشنها خوبن اما مثل هر چیزی دیگه ای که زیادیش خوب نیست، قطعا استفاده زیاد از انیمیشنها نرم افزارمون رو سنگین میکنه?.ساخت preloaderیکی از مهمترین بخشهایی که ما برای افزایش ux برناممون باید بهش خیلی توجه کنیم اینه که توی عملیاتهایی که نیاز به زمان داره(مثل ارتباط با سرور، خوندن و نوشتن هارد دیسک و ... )باید به کاربر عزیزمون نشون بدیم که عملیات مورد نظرش در حال انجامه و بهش این احساس رو منتقل کنیم که &#34;ما در حال پردازش درخواستتونیم لطفا یکمی بهمون زمان بدید?&#34;  حالا چجوری اینکار رو انجام بدیم؟سادس، با ساخت یک مجود جالب به اسم preloader که البته اسمهای دیگه ای هم مثل laoder, loading, ...هم داره.بیاین بریم چندتاشو باهم بسازیمچند نمونه preloader ساده:1-نوع Glitch:glitch preloaderآدرس سورس کد:glitch preloader2-نوع spinner:spinner preloaderآدرس سوس کد:spinner preloader3-نوع Rocket:Rocket preloaderآدرس سوس کد:Rocket preloader4-نوع logo preloader:logo preloaderآدرس سوس کد:logo preloaderامیدوارم که این چند نمونه ساده بتونه ایده های خیلی خوبی برای ساخت preloader های پیشرفته تر بهتون بده?.</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Sat, 11 Jun 2022 19:06:39 +0430</pubDate></item><item><title>مفهوم و درک عمیق RESTful Api</title><link>https://virgool.ir/@milad.xsar72/مفهوم-و-درک-عمیق-restful-api-vcsg1dn20gyc</link><description>مقدمه:سلام و عرض ادب خدمت همه عاشقای دنیای کامپیوتر ها امیدوارم حالتون عالی باشه.اگر در حال خوندن این مطلب هستید، احتمالاً اصطلاحات API و REST رو شنیدید وتعجب کردید که این دیگه چه غول بی شاخ و دمیه!!!!!!!. شاید قبلاً یکم راجع بهش میدونستید، اما نمیدونید واقعا مفهومش چیه و چجوری پیاده سازیش کنید. در این مقاله جادویی، من اصول اولیه REST و نحوه شروع ساخت یک API (از جمله احراز هویت) برای برنامه خودتون رو توضیح خواهم داد.پس تا آخر این مقاله برید جلو که این جادوییترین مقاله در مورد &#34;RESTful Api&#34; هستش.?RESTful APIآخر این مقاله یاد میگیرین : خود API چیه؟؟؟حالا REST چیه؟؟؟متدهای HTTP چیا هستن؟؟؟مثالی از REST رو میبینید.آناتومی REST URL ها رو میشناسیدیاد میگیرید منابع یا Resource های تو در تو چجورین؟؟؟و راه بهتر پیاده سازیشون چیه؟؟؟کدهای وضعیت HTTP چیا هستن و چرا برای REST مهم هستند؟؟؟فرمتهای پاسخ دهی یک API چی هستن و بهترینشون کدومه؟؟؟ساخت یک RESTful API سادهاحراز هویت در  APIها به چه شکل است؟؟؟خود API چیه؟؟؟واژه API مخفف عبارت Application Programming Interface(رابط ارتباطات میان برنامه ای) است. این اصطلاح می تونه برای توصیف امکاناتی که یک کتابخانه ارائه میده یا نحوه تعامل با اون استفاده بشه (مثلا متدها یا فانکشنهایی که به ما ارائه میده) کتابخانه مورد علاقه شما ممکنه دارای &#34;API Documentation&#34; باشه که داخلش تمامی امکاناتی که اون کتابخونه به شما ارائه میده و اینکه چجوری اون توابع رو فراخوانی کنین و چه آرگومان هایی برای اجراشون مورد نیاز و غیره رو توضیح میده.با این حال، این روزها، زمانی که مردم به یک API مراجعه می کنن، به احتمال زیاد به یک API HTTP اشاره می کنن، که می تونه راهی برای به اشتراک گذاری داده های برنامه از طریق اینترنت باشه. به عنوان مثال، توییتر یک API داره که به شما این امکان رو میده که توییت‌هایی رو در قالبی درخواست کنین که وارد کردن اون داده ها به برنامه شخصی شما آسون باشه. این قدرت واقعی APIهای HTTP است، که می‌تونن داده‌ها را از چندین برنامه بگیرن و در یک برنامه ترکیب کنن.برای مثال، فرض کنین برنامه‌ای داریم که به شما امکان می‌ده ویجت‌هایی رو مشاهده، ایجاد، ویرایش و حذف کنین. ما می تونیم یک API HTTP ایجاد کنیم که به شما امکان می ده این عملیات رو انجام بدید:http://example.com/view_widgets&#xA;http://example.com/create_new_widget?name=Widgetizer&#xA;http://example.com/update_widget?id=123&amp;name=Foo&#xA;http://example.com/delete_widget?id=123زمانی که همه شروع به پیاده سازی API های خود می کنن، مشکل تازه شروع میشه. بدون یک راه استاندارد برای نام‌گذاری URLها، همیشه باید به داکیومنت مراجعه کنین تا بفهمید که API چجوری کار می‌کنه. یک API ممکنه URLای مانند view_widgets/ داشته باشه در حالی که API دیگری ممکنه از widgets/all/ استفاده کنه.میبینید؟؟؟ هیچ قاعده و قانونی وجود نداره!!!!!!!!!!!!اما نگران نباشید، اینجاس که REST پا به میدون میذاره  تا ما رو از این آشفتگی نجات بده.حالا REST چیه؟؟؟خب REST مخفف Representational State Transfer (نماینده انتقال وضعیت) است. این اصطلاحیه که توسط &#34;روی فیلدینگ&#34; برای توصیف راه استاندارد ایجاد APIهای HTTP ابداع شده. اون متوجه شد که چهار عمل رایج (مشاهده، ایجاد، ویرایش و حذف) مستقیماً به متدهای HTTP که قبلاً پیاده‌سازی شده‌اند نگاشت می‌شوند: GET، POST، PUT، DELETE.اگر با HTTP آشنا نیستین، ممکنه با بعضی از این متدها آشنا نباشید. بنابراین اجازه بدید خلاصه ای از متدهای HTTP ارائه بدم.متدهای HTTP:از نظر فنی 8 متد مختلف HTTP وجود داره:GET&#xA;POST&#xA;PUT&#xA;DELETE&#xA;OPTIONS&#xA;HEAD&#xA;TRACE&#xA;CONNECTبیشتر اوقات، وقتی در مرورگر خودمون در حال کلیک کردن هستیم، فقط از متد  &#34;HTTP، &#34;GET استفاده می کنیم. GET زمانی استفاده می شه که شما در حال «دریافت» منبعی از اینترنت هستید. وقتی که فرمی رو ارسال می کنین، معمولاً از متد POST برای &#34;پست کردن داده ها&#34; به وب سایت استفاده می کنید. در مورد متد های دیگه هم بگم که، بعضی از مرورگرها حتی همه اونهارو پشتیبانی نمیکنن. با این حال، چیزی که مهمه اینه که ما یکسری افعال داریم که این متدها برای توصیف اون عمل یا فعل به ما کمک میکنن. ما از کتابخانه های سرویس گیرنده استفاده خواهیم کرد که از قبل می دونن چجوری از متدهای مختلف HTTP استفاده کنن.مثالی از REST:بیایین به چند نمونه از آنچه که یک API را &#34;RESTful&#34; می کنه نگاه کنیم. ما از همون مثال ویجتمون استفاده میکنیم.اگر بخواهیم همه ویجت ها را مشاهده کنیم، URL به شکل زیر خواهد بود:GET http://example.com/widgetsبرای ایجاد یک ویجت به شکل زیر عمل میکنیم:POST http://example.com/widgets&#xA;Data:&#xA; name = Foobarبرای مشاهده ویجت به تنهایی از id اون استفاده میکنیم:GET http://example.com/widgets/123و برای آپدیت یک ویجت به شکل زیر عمل میکنیم : PUT http://example.com/widgets/123&#xA;Data:&#xA;    name = New name&#xA;    color = blueو در آخر برای حذف به شکل زیر عمل میکنیم : DELETE http://example.com/widgets/123خب حالا دیدید چقدر منظم و سازمان یافته تر شد؟ به این میگن RESTful API ??آناتومی REST URL ها:ممکنه از مثال های قبلی متوجه شده باشید که URL های REST از یک سینتکس یا طرح نامگذاری ثابت استفاده می کننن. وقتی که با یک API تعامل دارید، تقریبا همیشه در حال دستکاری یک نوع کلی از داده ها(یک نوع شی) هستید. در مثال قبلی ما، این شی همان widget است که در اصطلاح REST بهش Resource گفته میشه. قسمت اول URL همیشه به صورت جمع منبع است:/widgetsاین همیشه هنگام مراجعه به مجموعه از منابع استفاده می‌شه (نمایش لیستی از آن شی و تغییر یکی از آن اشیا). وقتی میخواین با یک resource خاص کار کنید، id اون رو به URL اضافه می کنید./widgets/123این URL زمانی استفاده می شه که می خواهید منبع خاصی رو &#34;مشاهده&#34;، &#34;ویرایش&#34; یا &#34;حذف&#34; کنین.منابع یا Resource های تو در تو:بیاین فرض کنیم هر ویجت ما یک شی داده دیگه داره به اسم users(لیستی از کاربران که به آن ویجت خاص در ارتباط هستند) به نظرتون ساختار URLش چه شکلی میشه؟؟؟برای لیست کردن همه users ها:GET /widgets/123/usersبرای ایجاد یک user جدید : POST /widgets/123/users&#xA;Data:&#xA;    name = Andrewمنابع تو در تو در URL ها کاملا قابل قبول هستن. با این حال، این بهترین روش نیست که بیش از دو سطح به URL خود عمق بدید.چون شما می تونید به سادگی به اون منابع تودرتو با id مراجعه کنید نه اینکه اونهارو در والدین خودشون قرار بدید. مثلا:/widgets/123/users/456/sports/789میتونیم ساده ترش کنیم : /users/456/sports/789و حتی ساده تر :/sports/789کدهای وضعیت HTTP:بخش مهم دیگه REST پاسخ دادن با کد وضعیت مناسب و صحیح برای نوع درخواستی است که انجام شده است. اگر با کدهای وضعیت HTTP آشنا نیستید، یک خلاصه سریع ازشون آوردم. وقتی درخواست HTTP می‌کنید، سرور پاسخ را همراه با یک کد میفرسته که مربوط به موفقیت یا عدم موفقیت درخواست و اطلاعاتی در مورد پاسخ هستش. چهار سطح مختلف از کدهای وضعیت وجود داره:2xx = Success3xx = Redirect4xx = User error5xx = Server errorلیستی از مهمترین کدهای وضعیت:Success codes:200 - OK (the default)201 - Created202 - Accepted (often used for delete requests)User error codes:400 - Bad Request (generic user error/bad data)401 - Unauthorized (this area requires you to log in)404 - Not Found (bad URL)405 - Method Not Allowed (wrong HTTP method)409 - Conflict (i.e. trying to create the same resource with a PUT request)فرمتهای پاسخ دهی یک API:وقتی درخواست HTTP می کنین، می تونین فرمتی رو که می خواهید دریافت کنید رو هم مشخص کنین. به عنوان مثال، با درخواست یک صفحه وب، می خواهید فرمت اون  HTML باشه، یا اگه در حال دانلود یک تصویر هستید، فرمت بازگشتی باید یک تصویر باشه. با این حال، این مسئولیت سروره که در قالب درخواست شده پاسخ بده.جیسون به سرعت به فرمت انتخابی برای REST API تبدیل شده. جیسون یک سینتکس سبک وزن و خوانا داره که به راحتی قابل دستکاریه. بنابراین هنگامی که یک کاربر از API ما درخواستی میکنه و JSON را به عنوان قالبی که ترجیح می دهد مشخص می کنه:GET /widgets&#xA;Accept: application/jsonخب API ما آرایه ای از ویجت ها را با فرمت JSON برمی گردونه:[&#xA;  {&#xA;    id: 123,&#xA;    name: &#39;Simple Widget&#39;&#xA;  },&#xA;  {&#xA;    id: 456,&#xA;    name: &#39;My other widget&#39;&#xA;  }&#xA;]اگر کاربر فرمتی رو درخواست کنه که ما اون رو پیاده سازی نکرده ایم، چه کار می کنیم؟ شما می تونید نوعی خطا ایجاد کنید، اما من توصیه می کنم JSON رو به عنوان فرمت پاسخ استاندارد خود اعمال کنید. اون فرمتی است که توسعه دهندگان شما می خوان ازش استفاده کنن. دلیلی برای پشتیبانی از فرمت های دیگه وجود نداره مگر اینکه قبلاً یک API داشته باشید که نیاز به پشتیبانی مجدد داشته باشه.ساخت یک RESTful API ساده:در واقع ساختن یک REST API عمدتاً خارج از محدوده این آموزشه چون پیاده سازیش در هر زبان برنامه نویسی متفاوته، اما من یک مثال کوتاه با استفاده از Ruby با استفاده از کتابخونه ای به نام Sinatra ارائه می کنم:require &#39;sinatra&#39;&#xA;require &#39;JSON&#39;&#xA;require &#39;widget&#39; # our imaginary widget model&#xA;&#xA;# list all&#xA;get &#39;/widgets&#39; do&#xA;  Widget.all.to_json&#xA;end&#xA;&#xA;# view one&#xA;get &#39;/widgets/:id&#39; do&#xA;  widget = Widget.find(params[:id])&#xA;  return status 404 if widget.nil?&#xA;  widget.to_json&#xA;end&#xA;&#xA;# create&#xA;post &#39;/widgets&#39; do&#xA;  widget = Widget.new(params[&#39;widget&#39;])&#xA;  widget.save&#xA;  status 201&#xA;end&#xA;&#xA;# update&#xA;put &#39;/widgets/:id&#39; do&#xA;  widget = Widget.find(params[:id])&#xA;  return status 404 if widget.nil?&#xA;  widget.update(params[:widget])&#xA;  widget.save&#xA;  status 202&#xA;end&#xA;&#xA;delete &#39;/widgets/:id&#39; do&#xA;  widget = Widget.find(params[:id])&#xA;  return status 404 if widget.nil?&#xA;  widget.delete&#xA;  status 202&#xA;end&#xA;احراز هویت APIها:در برنامه‌های کاربردی وب معمولی، احراز هویت معمولاً با پذیرش نام کاربری و رمز عبور و ذخیره id کاربر در session انجام می‌شه. مرورگر کاربر یک کوکی با شناسه session ذخیره می کنه. وقتی کاربر از صفحه‌ای در سایت بازدید می‌کنه که نیاز به احراز هویت داره، مرورگر کوکی رو به سرور ارسال می‌کنه، برنامه سمت سرور session رو با اون id جستجو می‌کنه (اگر منقضی نشده باشه)، و از اونجایی که شناسه کاربر در session ذخیره شده، کاربر اجازه مشاهده صفحه رو داره.با یک API، استفاده از session ها برای احراز هویت کاربران لزوما بهترین روش نیست. گاهی اوقات، کاربران شما ممکنه بخوان مستقیماً به API دسترسی داشته باشن، گاهی اوقات کاربر ممکنه به برنامه دیگه ای  اجازه دسترسی به API رو از طرف خودش بده.راه حل این امر استفاده از احراز هویت مبتنی بر توکن است. کاربر با نام کاربری و رمز عبور خود وارد سیستم می شه و برنامه با یک توکن منحصر به فرد پاسخ می ده که کاربر می تونه برای درخواست های بعدیش از اون استفاده کنه. یک روش استاندارد برای انجام این کار وجود داره که بسیار محبوب شده که OAuth نامیده می شه. منابع آنلاین زیادی برای پیاده سازی OAuth وجود داره، بنابراین می تونم بگم که خارج از محدوده این آموزشه. اگر از Ruby استفاده می کنین، چندین کتابخانه عالی وجود داره که بیشتر کارها رو خودش برای شما انجام می ده، مانند OmniAuth.امیدوارم، من به اندازه کافی جاهای خالی رو برای شما پر کرده باشم تا بتونید شروع کنید و به درک عمیقی از REST API رسیده باشید.هر گونه سوال یا انتقادی رو در کامنت بنویسید مخلص شما میلاد شیریان?✌</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Sat, 08 Jan 2022 15:28:18 +0330</pubDate></item><item><title>چگونه داده ها از طریق اینترنت منتقل میشن؟</title><link>https://virgool.ir/@milad.xsar72/how-data-is-transferred-over-internet-juarz69k4qna</link><description>چگونه داده ها از طریق اینترنت منتقل میشن؟سلام و درودی دوباره امروز میخوام در مورد بحث با حال انتقال دیتا از طریق اینترنت با هم دیگه صحبت کنیم پس اگه مشتاقین ببینین چه اتفاقی میفته با من همراه باشین.?✌اول از همه اینو بدونین هر چیزی توی دنیای کامپیوتر ها از جنس صفر و یک هست.که بهش میگن زبان ماشین.من در مورد زبان ماشین و اینکه کدها چجوری کار میکنن دو مقاله نوشتم که میتونین بهشون مراجعه کنین.این مهم که در دنیای کامپیوتر همه چیز از جنس صفر و یک هست به این معنیه که عکسها، ویدیوها، فایلهای صوتی و هر چیزی که از طریق کامپیوترها میبینین یا میشنوین در پشت پرده چیزی جز صفر و یک های نازنین، که بهشون بیت میگن نیست.خب حالا اینکه یه کامپیوتر تحت شبکه بخواد چیزی واسه کامپیوتر دیگه ارسال کنه در قالب چی باید ارسال کنه؟؟؟ آفرین در قالب بیت.پروتکل (Protocols)پروتکلهمه رایانه ها یا دستگاه های که به اینترنت دسترسی دارناز طریق کابل یا ماهواره به همدیگه متصل میشن.اینترنت زبان مشترکی با قوانی خاص برای همه دستگاه های متصل به خودش برای برقراری ارتباط فراهم میکنه که به این قانونها پروتکل گفته میشه که انواع مختلفی هم ازشون وجود داره.(http و یا https نمونه ای از پروتکلهاس).دستگاه های مختلف با استفاده از شبکه های مختلف با استفاده از یک پروتکل با یکدیگر ارتباط برقرار میکنن.حالا چجوری؟عجول نباشین....مجموعه پروتکل اینترنتTCP/IPهنگام استفاده از اینترنت ، متداول ترین پروتکل ها عبارتند از:پروتکل TCP:پروتکل کنترل انتقال(Transmission Control Protocol)پروتکل IP: پروتوکل اینترنت(Internet Protocol)داده ها از طریق پروتکل TCP به پاکتهای حداکثر 1500 بیتی به وسیبه تکنیک Packat switching شکسته میشن.پاکت سوویچینگ(Packat switching):یک روش ارتباطی شبکه دیجیتال است که داده های بزرگ رو به بلوکهایی با اندازه مناسب، معروف به پاکتها تقسیم میکند.این بسته ها شامل اطلاعات دیگه ای مثل آدرس فرستنده، آدرس گیرنده و شماره توالی بسته بندی هستن.آی پی (IP):موظف است که این بسته هارو با اختصاص شماره توالی به اونها به آدرس درست و صحیح بفرسته.ابتدا بسته ها به یک ارایه دهنده خدمات اینترنتی محلی ارسال می شوند.(ISP)ISPاز اینجا بسته ها قبل از رسیدن به مقصد ، از طریق چندین سطح از شبکه ها ، رایانه ها و خطوط ارتباطی حرکت می کنند.بسته ها از مسیرهای مختلف ارسال می شوند تا سرعت را حفظ کنند. اگر بسته ای نتواند از مسیری به مقصد برسد ، مسیر آن با کمک روترها تغییر می کند.روترروترها بازیگران اصلی در مدیریت ترافیک اینترنت هستند.وقتی بسته های اطلاعاتی به دستگاه مقصد می رسند.و در آخر TCP به وسیله Packat switching بسته ها رو در یک پیام واحد جمع میکند.packat switchingامیدوارم خوشتون اومده باشه...موفق و پیروز باشین و کامنت یادتون نره.???How Data is Transferred over Internet</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Thu, 05 Nov 2020 15:00:57 +0330</pubDate></item><item><title>کد ماشین(Machine code)</title><link>https://virgool.ir/javacup/کد-ماشینmachine-code-urrodaupauv2</link><description>کامپیوترها زبانهایی که ما آدما با هم حرف میزنیم رو نمیفهمن،وبه جاش اونا برای صحبت و درک امور از زبان باینری به نام کد ماشین یا زبان ماشین استفاده می کنند.کد ماشین از دنباله ای از دستورالعمل های ساده رایانه ای تشکیل شده است که هر دستورالعمل به صورت رشته ای از ارقام یا بیت های باینری (به عنوان مثال 1 و 0) بیان می شود.رایانه های مختلف به طور معمول به زبانهای مختلفی از زبان ماشین صحبت می کنند(یا می فهمند).به عنوان مثال یک کامپیوتر ممکنه عملگر ADD(افزودن) رو با 10011111 بفهمه و نشون بده و یه کامپیوتر دیگه همون عمل رو با 000110 بفهمه و نشون بده.نه تنها الگوی بیتها در یک کامپیوتر نسبت به کامپیوتر دیگه می تونه متفاوت باشه، بلکه حتی تعداد بیتهای مورد استفاده برای نشان دادن یک عملکرد هم نیز میتونه متفاوت باشه!!!!درک زبان ماشین توسط کامپیوترها بر اساس سیستم عاملهنگام اجرای یک برنامه سیستم عامل(به عنوان مثال ویندوز ، لینوکس ، OS X و غیره) به عنوان یه میزبان عمل میکنه که به برنامه ها سرویس میده.از جمله این سرویس ها،دسترسی برنامه ها به صفحه کلید، صفحه نمایش و دیسک های سخت است.خب ولی متاسفانه نحوه دسترسی برنامه به اون سرویسها از یک سیستم عامل به یک سیستم عامل دیگه متفاوت است.در نتیجه تفاوت بین زبان های ماشین و نیازمندیهای سیستم عامل، برنامه هایی که به زبان ماشین نوشته شده اند بیشتر بر روی سیستم اجرا کننده برنامه متمرکز هستند تا اینکه چگونه برنامه یک مسئله را حل کند.این به این معنی است که انتقال کد ماشین از یک کامپیوتر به کامپیوتر دیگه بدون ارائه نوع سرویس ترجمه که معمولا به صورت ماشین مجازی است ممکن نیست.(یعنی یک برنامه که روی سیستم عامل ویندوز ارائه شده نمیتونیم روی لینوکس هم اجراش کنیم و اگه بخوایم اینکارو بکنیم باید از ماشین مجازی روی لینوکسمون استفاده کنیم)نوشتن برنامه ها به زبان ماشین کند ، خسته کننده و مستعد خطا است.راه حلش هم باعث کشف زبانهای سطح بالا شد که بیشتر بر روی مشکل تمرکز کرده و کمتر روی سیستم (سخت افزار و سیستم عامل) برنامه که در حال اجراست تمرکز می کند.اما کامپیوترها به طور مستقیم برنامه های نوشته شده به زبان سطح بالا رو اجرا نمیکنن و باید ترجمه بشن.(در این باره مقاله ای منتشر کردم که میتونه درک خوبی بهتون بده)کدها چگونه اجرا میشوند؟کامپایلر برنامه ای است که سایر برنامه های نوشته شده به زبان برنامه نویسی سطح بالا مانند C یا C ++ را به کد ماشین یا زبان ماشین ترجمه می کند.البته زبانهای مثل جاوا و سی شارپ یکم متفاوت ترن. برنامه هایی که به این زبانها نوشته میشن ابتدا به یک نماینده واسط کامپایل میشن(نماینده ای که در جایی بین زبان سطح بالا و زبان ماشین قرار دارد) که اغلب کد ماشین مجازی نامیده می شود(virtual machine code).سپس کد ماشین مجازی وارد برنامه دیگه ای می شه به نام مفسر یا ماشین مجازی (VM ، برنامه ای که پردازنده سخت افزاری را شبیه سازی می کند).نمودار1-کامپالنمودار1:کامپایلر کد منبع C ++ را از فایلی که به cc ختم می شود می خواند و یک پرونده کد ماشین تولید می کند که قابل اجرا است. در رایانه های ویندوزی ، فایلهای اجرایی تولید شده توسط کامپایلر C ++ با .exe خاتمه می یابند. سایر سیستم عامل ها از قراردادهای مختلف نامگذاری پیروی می کنند. سیستم عامل ها قادر به اجرای فایلهای اجرایی بدون پردازش بیشتر هستند.نمودار2-ماشین مجازینمودار2:کامپایل و اجرای برنامه ای که به زبانی نوشته شده که کد ماشین مجازی را تولید می کند. زبانهایی مانند Java و C # ابتدا به کد ماشین مجازی ، یعنی به یک کد ماشین برای یک رایانه مجازی - رایانه ای که واقعاً وجود ندارد ، وارد می شوند. پس از کامپایل کد منبع ، برنامه ای به نام ماشین مجازی (VM) با شبیه سازی عملکردهای یک کامپیوتر واقعی ، کد را اجرا می کندو سپس سیستم عامل، VM را اجرا می کند.نمودار3:مفسرینمودار3:اجرای برنامه ای که به زبان کاملاً تفسیری نوشته شده باشد. زبانهایی مانند Javascript و Perl به هیچ وجه کامپایل نمی شوند. برنامه ای به نام مفسر فایل کد منبع را خط به خط می خواند و هر خط رو اجرا میکند به طور مستقیم. مفسر Javascript در اکثر مرورگرهای وب گنجانده شده است. برای سایر زبانهای تفسیر شده ، سیستم عامل مفسر را به عنوان یک برنامه کاربردی اجرا می کند و باید مفسر روی کامپیوتر نصب شود.هر رویکرد برای اجرای برنامه ای که به زبان برنامه نویسی سطح بالا نوشته شده است دارای مزایا و معایبی است.برنامه های نوشته شده به زبانهایی که کامپایل میشن مثل C و C++، سریعتر از زبانهای نوشته شده به زبانهای با واسط کامپایلری مثل جاوا و سی شارپ و در نهایت هر دو مورد سریعتر از زبانهای مفسری مثل جاوا اسکریپت و perl هستند.و در مقابل برنامه های نوشته شده به زبانهای کامپایلری انعطاف کمتری دارن و فقط روی یم سیستم عامل خاص اجرا میشن به دلایل بالا.ولی زبانهای مفسری این قابلیت رو دارن که روی همه سیستم عاملها اجرا بشن.به طور خلاصه همه زبانها باید به صفر و یک تبدیل بشن تا بتونن اجرا بشن، حالا اینکه سبک چیدمان صفر و یکها و مابقی قوانین برای درک هر کامپیوتر با سیستم عاملهای متفاوت، با هم فرق میکنه مسئله ای هست که باید بهش توجه کنین.دستورالعمل های ماشین چیست؟دستورالعمل های ماشین برنامه ها یا دستورات کد ماشین هستند. به عبارت دیگر ، دستوراتی که در کد ماشین رایانه نوشته شده اند و کامپیوتر میتواند آنها را تشخیص دهد و سپس اجرا کند.دستور العملهای ماشین (machine instruction) دستورات عملیاتی (برنامه) نوشته شده در کد اصلی (کد ماشین) یک ماشین (مانند رایانه یا ربات) که کامپیوتر می تواند آن را تشخیص داده و اجرا کند.یک دستورالعمل ماشین از چندین بایت حافظه تشکیل شده است.اونها به پردازنده کامپیوتر میگن که یک عمل ماشینی انجام بده.CPU به دستورالعمل های دستگاه در حافظه اصلی سیستم نگاه می کند ، یکی پس از دیگری.برای هر دستورالعمل ماشین ، یک عملیات ماشینی را انجام می دهد.دستور العملهای ماشین چهار عمل اصلی دارنچهار مرحله اصلی در چرخه دستورالعمل ماشین وجود دارد:1-مرحله Fetch:پردازنده دستور را از آدرسی که در حافظه دارد می گیرد.این آدرس را در PC (شمارنده برنامه) و IR (ثبت دستورالعمل) ذخیره می کند.PC به دستورالعمل بعدی در پایان عملیات fetch اشاره می کند.2-مرحله Decode: پردازنده دستورالعمل را تفسیر و رمزگشایی می کند. دستورالعمل درون IR رمزگشایی می شود.3-مرحله Execute: واحد کنترل CPU داده ها را به عنوان دنباله ای از سیگنال های کنترل به واحدهای عملکردی مربوط به CPU دیکد(رمزگشایی) می کند. این واحدها اقداماتی را انجام می دهند که دستورالعمل از او خواسته است انجام دهد.4-مرحله Store:این عمل نتیجه ای را که در دستورالعمل بود ایجاد می کند که پردازنده آن را در حافظه اصلی ذخیره می کند. گاهی ممکن است آن را به یک دیوایس خروجی ارسال کند.&#34;هر عملكرد كوچك الكترونيكي كه هسته پردازنده مي تواند انجام دهد ، عمليات ماشيني ناميده مي شود. یک پردازنده (یک ماشین) این کارها را همزمان انجام می دهد ، میلیاردها عمل در ثانیه. &#34;امیدوارم که از مقاله خوشتون اومده باشه...کامنت یادتون نره????✌</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Mon, 26 Oct 2020 21:31:39 +0330</pubDate></item><item><title>کدها چگونه اجرا میشوند؟</title><link>https://virgool.ir/@milad.xsar72/چگونه-کدها-اجرا-می-شوند-shn3ffiocug6</link><description>سلام خدمت دوستان عزیز و علاقه مند به حوزه برنامه نویسی...اوایل که برنامه نویسی می کردم خیلی از مباحث عمیق مربوط به برنامه نویسی رو نمیدونستم? و خب این موضوع باعث می شد که نتونم درست آنالیز کنم که چه اتفاقی اون پشت مشتا میفته.بنابراین مثل هر برنامه نویس کنجکاو دیگه شروع کردم به تحقیق کردن و خب به یه مقاله جمع و جور برخوردم که میخوام برای شما عزیزان هم اونو به اشتراک بذارم.?BINARYدرک اینکه کدها چجوری اجرا میشن؟من نمیدونم که چند زبان برنامه نویسی وجود داره.صدها زبان برنامه نویسی مختلف وجود دارن و جالبه بدونین که زبانهای برنامه نویسی از سال 1950 ایجاد شدن و تکامل پیدا کردن.نوع زبان برنامه نویسی مهم نیست، در واقع همه ی اونها باید به طریقی از سمت کامپیوترها درک بشن.در ادامه بهتون میگم که چجوری این کدها توسط کامپیوتر ما درک میشن.زبان های برنامه نویسی سطح بالا و سطح پایینزبانهای برنامه نویسی از حیث میزان شباهتشون به تنها زبانی که کامپیوترها درک میکنن(کد ماشین-به زودی در مورد زبان ماشین یه مقاله دیگه میذارم) به دو دسته زبان سطح بالا و زبان سطح پایین تقسیم میشن.زبانهای برنامه نویسی سطح بالا از جمله زبانهایی هستند که اکثر ماها باهاشون آشنا هستیم و یا کار میکنیم مثل:Java, JavaScript, Ruby, C++, ...اینها زبانهایی کاملا متفاوت با چیزی هستند که ماشین و کامپیوتر میفهمه!!!!!!!!!!ااا پس تکلیف چی میشه؟؟؟؟بهتره عجول نباشین...در مقابل یک زبان برنامه نویسی سطح پایین فقط اشتقاق جزئی از کد ماشین است یعنی بیشترین شباهت رو نسبت به زبانهای سطح بالا به کد ماشین داره که خب طبیعتا خوندن این زبانها برای ما آدما سخت تر و طولانی تره ولی برای کامپیوترها هم درکش آسون تره و هم سریع تره(Performance).همچنین نسبت به یک زبان سطح بالا حافظه کمتری مصرف میکنه، که متداولترین زبانهای سطح پایین زبان های اسمبلی هستن.زبانهای اسمبلی تغییرات حروف و نمادهارو برای نشون دادن بخشهای مختلف برنامتون و قابلیتهایی که میخواین به کار بگیرین گروه بندی میکنن.(دستوراتشون شکل یه عبارت--معمولا واسه کرک نرم افزارهام ازش استفاده میکنن).زبانهای اسمبلی برای تبدیل کدشون به کد ماشین از اسمبلر استفاده میکنن.به اسمبلر به عنوان یک فرهنگ لغت نگاه کنید.در فرهنگ لغت میتوانید کلمه ای رو جستجو کرده و معنیشو(کد ماشینشو) پیدا کنی و برگردونی.مثلا فرض کنین زبان ماشین، انگلیسیه و ماشین یا کامپیوتر فقط انگلیسی میفهمه.یه زبان سطح بالا مثل زبان فارسی میمونه که باید ترجمه بشه به انگلیسی تا کامپیوتر اونو بفهمه پس نیاز به مترجم داره اما یه زبان سطح پایین مثل pig latin است که شباهت زیادی به زبان انگلیسی داره.خب قطعا فهمیدن زبان pig latin برای کامپیوتر بسیار آسونتر از زبان فارسیه!!!!پس زبانها همشون باید به زبان ماشین در وهله اول تبدیل بشن تا کامپیوتر بتونه اونهارو اجرا کنه.که همونطور که گفتم زبانهای اسمبلی با &#34;اسمبلر&#34; ترجمه میشن و زبانهای سطح بالا، با &#34;کامپایلر&#34; ویا &#34;مفسر&#34; ترجمه میشن.زبان برنامه نویسی سطح بالا و سطح پایینزبانهای کامپایلری و زبانهای مفسریدر حالی که زبانهای سطح پایین  با تبدیل زبان به کد ماشین با استفاده از اسمبلر قابل درک هستند، بیشتر زبانهای سطح بالا با استفاده از کامپایلر یا مفسر قابل درک هستند.بیاین اول در مورد زبانهای مفسری بحث کنیم چون روش اجراشون با زبانهای کامپایلری و اسمبلی یکمی فرق میکنه!زبانهای مفسری زبانهای مفسری به کد ماشین تبدیل نمیشن در عوض هر برنامه ای(یا کد منبع) که به این زبان نوشته شده باشد مستقیما توسط یک مفسر(که خودش یه برنامه جداس و غول ازش نسازین) خط به خط خونده میشه.مفسر یک برنامه رایانه ایه که تمام اقدامات و خط کدهای توی سورس کد رو به روشی مشابه که کامپیوتر میتونه کد ماشین رو اجرا کنه، اجرا میکنه.استفاده از زبان مفسری برنامه نوسیتون رو سریعتر میکنه و خیلی انعطاف بیشتری داره نسبت به زبانهای کامپایلری.چون بر خلاف زبانهای کامپایل شده میتونه بلافاصله اجرا بشه و نتیجه رو نشون بده.نکته خیلی خوب در مورد این زبانها اینه که میتونه بر روی چندین سیستم عامل مختلف اجرا بشه و فقط کافیه مفسرش رو روی سیستم نصب کنین. برای همینه میگم خیلی انعطاف پذیره چون به کد ماشین بر اساس سیستم اجرای یک سیستم عامل خاص تبدیل نمیشه.اما یکی از نقطه ضعفاش اینه که سرعت اجراش کندتر از زبانهای کامپایلریه.دلیلش هم در ادامه میفهمین.از مشهورترین این نوع زبانها :Python, Perl, Javascript, Ruby ,...زبانهای کامپایلری:زبانهای کامپایلری قبل از اجرا باید از طریق یک کامپایلر(که این هم یک برنامس) مرور بشه.کامپایلر برنامه رو به کد ماشین تبدیل میکنه تا توسط کامپیوتر قابل درک باشه.فایده زبانهای کامپایل شده اینه که پس از تدوین، سرعت بسیار بالایی نسبت به زبانهای مفسری دارن.تدوین فقط یکبار انجام میشود، سپس یک برنامه میتونه بارها اجرا بشه✌ از طرق دیگه زبانهای تفسیری به طور مداوم خونده میشن به خاطر همین سرعت کمتری نسبت به زبانهای کامپایلری دارن.یکی از نقاط قوت دیگشون اینه که کد منبعتون رو نشون نمیدن به این معنی که دیگران نمیتونن کد شمارو ببینن و کپی کنن.اما از نقاط ضعفشون اینه که فقط روی یک سیستم عامل خاص قابل اجرا هستن.در واقع برنامه ای که در Mac اجرا میشه به همون روش در PC اجرا نمیشه.به خاطر همینه که یک برنامه هر دو نسخه Mac OS و  Windows رو داره.از مهمترین این نوع زبانها:C, C++, Java, ...از Complier گرفته تا Machine Code تا پردازندهپس از تبدیل کامپایلر (یا اسمبلر) زبان سطح بالا به کد ماشین ، رایانه برای انجام اقدامات آماده است.برای درک چگونگی خواندن کد ماشین توسط پردازنده رایانه (که به آن واحد پردازش مرکزی یا CPU نیز می گویند) ، ابتدا باید بفهمید کد ماشین چیست. کد ماشین مجموعه ای از دستورالعمل های باینری است که از 1 و 0 به نام بیت تشکیل شده است.  از نظر پردازنده ، 1 نشان دهنده روشن بودن سوئیچ الکتریکی است در حالی که 0 به معنای خاموش بودن سوئیچ است.1 و 0 به روش های مختلف با هم گروه می شوند و ترکیبات 8 بیتی به نام بایت را ایجاد می کنند.ترکیبی از این 1 و 0 ها سیگنال های الکتریکی مختلفی را به ترانزیستورهای پردازنده ارسال می کنند.پردازنده های مدرن بیش از یک میلیارد ترانزیستور دارند.که حاوی دروازه های منطقی هستند.(logic gates)دروازه های منطقی بر اساس بایت کدی که دریافت می کنند باز و بسته می شوند و این باز و بسته شدن دروازه ها به کامپیوتر شما امکان می دهد آنچه را که شما یا کدشما می گویید انجام دهد.تبدیل حروف به باینریبه طور کلی نکته اساسی این مبحث اینه که:موارد مختلفی وجود داره که باید هنگام انتخاب زبان برنامه نویسی در نظر بگیرین.  اگر در حال تهیه برنامه ای هستین که فقط در یک سیستم عامل یا سیستم عامل مورد استفاده قرار بگیره ، استفاده از یک زبان کامپایل شده منطقی تره.اگر در حال ساخت برنامه ای برای استفاده در چندین سیستم عامل هستید ، ممکنه یک زبان تفسیر شده بهترین گزینه شما باشه.  با این وجود ، زبانهای برنامه نویسی بسیار سریع تکامل می یابند ، و یک زبان ممکن است به زودی نسبت به زبان دیگر مناسبتر باشد.امیدوارم از این مقاله خوشتون اومده باشه...کامنت یادتون نره???من یک موشن گرافیک هم از این مبحث ساختم که میتونین در کانال آپارات یا یوتیوب یا پیج اینتستاگرامم ببینینش.</description><category>میلاد شیریان</category><author>میلاد شیریان</author><pubDate>Wed, 21 Oct 2020 16:25:41 +0330</pubDate></item></channel></rss>