<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد امین سلطانی</title>
        <link>https://virgool.io/feed/@MASOLTANI</link>
        <description>دانشجوی مهندسی کامپیوتر | NET Developer.</description>
        <language>fa</language>
        <pubDate>2026-04-15 09:49:54</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/216217/avatar/B3MfAo.jpeg?height=120&amp;width=120</url>
            <title>محمد امین سلطانی</title>
            <link>https://virgool.io/@MASOLTANI</link>
        </image>

                    <item>
                <title>آموزش جامع و رایگان زامارین فرم</title>
                <link>https://virgool.io/@MASOLTANI/free-xamarin-forms-course-nluybcsfafjt</link>
                <description>آموزش جامع و رایگان زامارین فرمبا سلام خدمت دوستان.چند وقت پیش تصمیم گرفتم تا یکسری ویدیو آموزش زامارین رو ریکورد کنم و به صورت رایگان در اختیار علاقه مندان قرار بدم تا دوستانی که علاقه به برنامه نویسی حوزه موبایل با زامارین دارند لازم نباشه هزینه های سنگین دوره های آموزشی موجود در وب فارسی رو بپردازند و همچنین تا حدالامکان سعی کردم طبق مستندات مایکروسافت و کتاب های معتبر منتشر شده سر فصل ها رو جلو ببرم. امیدوارم مفید بوده باشه و دوستان استفاده بکنند.آدرس کانال یوتیوب:https://www.youtube.com/channel/UCBpqIKssZIlM4kEBG7KCtNQ</description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Sat, 20 Nov 2021 18:34:41 +0330</pubDate>
            </item>
                    <item>
                <title>بررسی NET MAUI. با حرفه‌ای ها</title>
                <link>https://virgool.io/@MASOLTANI/exploring-thenewnet-multi-platform-app-uimauiwith-the-experts-y4lnxjzgg3m8</link>
                <description>آینده توسعه اپلیکیشن های چندسکویی موبایل با NET MAUI.با سلام خدمت دوستان.همونطور که شاید شما هم اسم NET MAUI. به گوشتون خورده باشه امروز میخوایم یک نگاه کلی بهش داشته باشیم. پارسال (2020) در کنفرانس Build مایکروسافت بود که اولین بار این اسم مطرح شد و مایکروسافت برنامه خودش رو برای این پلتفرم تشریح کرد. همونطور هم که انتظار می‌رفت، MAUI آینده ی زامارین و نسخه آپگرید شده اون معرفی شد که به توسعه دهندگان این امکان رو میده از ویژگی های محلی (native) اندروید، ios و ویندوز استفاده لازم رو بکنن و داخل برنامه هاشون به کار ببرن.همونطور که مطلع هستید مایکروسافت داره تلاش میکنه تا تمامی پلتفرم دات نت رو به صورت یکتا و منسجم در بیاره یعنی دات نت فریم ورک، دات نت کور، پروژه مونو و... به صورت واحد و مجتمع تحت عنوان یک پلتفرم واحد NET. عرضه بشه که در این راستا MAUI نقش کلیدی رو بازی میکنه. این فریمورک از طریق یک codebase واحد به توسعه دهندگان این قابلیت رو میده تا از API های محلی هر سیستم عامل مدرن استفاده کنن. همچنین روند توسعه رو از طریق یک ساختار تک لایه ای (بر خلاف زامارین که برای هر تارگت پلتفرم یک لایه جدا داشتیم) سرعت می بخشه اما همچنان این امکان وجود داره تا در صورت نیاز برای پلتفرم های مختلف کد های مختلف نوشته بشه.فریمورک NET MAUI. ساختار پروژه رو به صورت یک سورس کد واحد درمیاره تا با یک کلیک خروجی های پلتفرم های مختلف از پروژه گرفته بشه. از ویژگی های مهم NET MAUI. میشه به XAML و الگوی MVVM اشاره کرد. همچنین توسعه دهندگان می تونن از الگوی MVU (مخفف Model-View-Update) هم استفاده کنن.مایکروسافت همچنین قصد داره تا یک راهنمای Try-N-Convert ارایه کنه تا توسعه دهندگان بتونن پروژه های خودشون رو به سادگی به NET MAUI. تبدیل کنن (از زامارین مهاجرت کنن). اما مهمترین هدف NET MAUI افزایش حداکثری کارایی (Performance) و همچنین تسریع الگوریتم هاست (نکته ای که شاید مهم ترین ضعف زامارین در ابتدای کارش بود). از اهداف دیگه میشه به کامپایلر های پیشرفته و همچنین SDK های توسعه یافته اشاره کرد.در ادامه نظر سه نفر از افراد خبره در این حوزه رو بررسی می کنیم. اما اول بهتره آشنا بشیم باهاشون.آقای Gabriel Baptista: ایشون مهندس نرم افزار و Team Lead گروه های فنی مختلف در جهان هست که تجربه زیادی با محصولات مایکروسافتی داره. همچنین متخصص سرویس ابری آژور PaaS و استاد کامپیوتر هست که مقالات و مطالب زیادی نوشته. در حوزه مهندسی و توسعه و معماری  نرم افزار هم آموزش های زیادی داده. به علاوه این که یکی از سخنران های مهم Channel9 (که دیگه نیازی به توضیح نداره) هم هست.آقای Francesco Abbruzzese: سازنده ی MVC Control Toolkit هستن. تقریبا از اولین نسخه ASP.NET فعال بودن و مقالات و آموزش های زیادی رو انجام دادن. همچنین داخل وبلاگ خودش و مجلات آنلاین مختلف، مقالات متنوعی از برنامه نویسی کلاینت با دات نت می نویسه.این دو همچنین مولف کتاب زیر هم هستن:آقای Valerio De Sanctis: متخصص حوزه IT و تجربه 20 ساله رهبری تیم های برنامه نویسی حوزه وب و همچنین مدیر پروژه های مبتنی بر ASP.NET و PHP و Java و جاوا اسکریپت . پوزیشن های ارشد نظیر CTO و مدیر امنیتی در شرکت های مختلف مالی و بیمه داشته. عضو فعال شبکه Stack Exchange و جامعه های StackOverFlow و ServerFault و SuperUser هستن. به علاوه دارای مدرک MVP (مخفف Microsoft Most Valuable Professional) هستن و بنیان گذار Ryadelمولف کتاب زیر هم هستن:و اما بریم سراغ بررسی این فریمورک با این دوستان:سوال اول) کدام رویکرد - توسعه اپلیکیشن های محلی (Native) یا چندسکویی (CrossPlatform) بهتر و رایج‌تر هست؟گابریل: من همیشه پیشنهادم اینه که بهترین پلتفرم اونیه که بهترین تطابق رو با تیم شما داره. مثلا، اگر شما یک تیم سی شارپی دارید، قطعا اگر انتخابتون دات نت باشه (زامارین، MAUI و ...) نتیجه بهتری خواهد داشت. از طرفی اگر تیم شما جاوا اسکریپت/ تایپ اسکریپتی هست انتخابتون میتونه ReactNative و یا آیونیک و ... باشه و همین صورت برای باقی پلتفرم ها.فرانچسکو: اساسا واژه بهتر یکم سخت هست به کار ببریم.انتخاب صحیح به شرایط و محدودیت های یک فرد و یا یک شرکت بستگی داره. اما من فکر میکنم برای بیشتر برنامه ها &quot;کراس پلتفرم&quot; تنها انتخاب مورد تایید هست. برنامه های موبایلی و دسکتاپ lifecycle های کوتاهی دارند و اغلب آنها بودجه های کمتری نسبت به برنامه های شرکتی سرور ها دارند. معمولا اون ها فقط یکی از چندین راهی هستن که قراره با برنامه های شرکتی یا وبسایت های پیچیده ارتباط برقرار کنن. بنابراین دو فاکتور بودجه و زمان مهمترین محدودیت هایی هستن که توسعه دادن و پشتیبانی چندین برنامه Native رو غیر عقلانی نشون میدن و تمایل شرکت ها به توسعه دادن برنامه های چندسکویی رو بیشتر می کنن. اگرچه هرچقدر هم فریمورک های چندسکویی هوشمند و بهینه باشند، برنامه های محلی (Native) همواره کارایی (Performance) بیشتری دارند و قابلیت استفاده بیشتر از ویژگی های دستگاه های موبایل دارند. بنابراین گاهی لازم است برنامه های مهم و حیاتی به صورت Native توسعه داده بشوند.والریو: هر دو رویکرد مزایا و معایب خودشونو دارن: برنامه های موبایل محلی معمولا کارایی و تجربه کاربری بهتر و بیشتری دارند اما توسعه آن ها امروزه میتونه هزینه مالی و زمانی زیادی برای شرکت ها داشته باشه چراکه  نیاز هست تا تیم های مختلف برای پلتفرم های مختلف اندروید و ios و ویندوز و لینوکس استخدام بشن و سورس کد های مختلفی رو توسعه بدهند. کراس پلتفرم ها این معایب رو پوشش میدهند اما نکته ای که وجود داره این هست که هرچقدر شما در هزینه مالی و زمانی مزیت به دست می آورید در مقابل باید از کارایی و کارکرد های محلی دستگاه ها چشم پوشی کنید.سوال دوم) تفاوت های اصلی میان MAUI و پلتفرم Uno چیست؟گابریل: من میگویم با توجه به این که MAUI از Xamarin.Forms بهره می گیرد، به سادگی می تواند با سیستم عامل های مختلف سازگار شود.فرانچسکو: گزینه پیشفرض uno یکسان نمایش دادن (style) اپلیکیشن در تمامی پلتفرم ها است، اما این فرصت را هم ایجاد می کند تا اپلیکیشن ها شبیه اپلیکیشن های محلی به نظر برسند درصورتی که MAUI استفاده بیشتری از این فرصت میکند و از ویژگی های محلی (Native) پلتفرم ها بهره بیشتری می برد. به عبارت ساده تر، اپلیکیشن های توسعه داده شده با MAUI بیشتر شبیه اپلیکیشن های محلی هستند تا Uno. البته Uno تارگت WASM هم دارد در حالیکه MAUI این تارگت را فعلا پشتیبانی نمی کند. گرچه می توان از Blazor برای این هدف استفاده کرد.والریو: هر دو پلتفرم MAUI و Uno سعی میکنند تا به یک هدف برسند، اما هر یک مبتنی بر یک ساختار معماری متفاوت هستند. MAUI، به مانند زامارین فرم لایه انتزاعی خودش را بالای API های محلی دارد در حالیکه Uno اینترفیس های UWP را بر روی آن ها میسازد. دوباره، هر دو رویکرد مزایا و معایب خودشان را دارند: لایه های انتزاعی (abstraction layers) می تواند کارایی را پایین آورد(مخصوصا دستگاه های موبایل چرا که لازم است بیشتر تسک های layout-related را برعهده گیرد) اما این رویکرد به دلیل نگه داشتن یک codebase کوچک و همه منظوره مفید خواهد بود.سوال سوم) آیا MAUI می تواند در همان ابتدای کار نیاز های توسعه اپلیکیشن های چندسکویی را برآورده کند، یا لازم است تا چندین ریلیز آتی مختلف منتشر شود تا به این هدف برسد؟گابریل: مکانیزم ارائه شده در این نوع فناوری به ما امکان می دهد حتی در مواردی که تفاوت وجود دارد ، بسترهای مختلف را تضمین کنیم. بنابراین ، پاسخ من مثبت است.فرانچسکو:  با توجه به سابقه مایکروسافت و پلتفرم های آن، من می گویم بعید هست که MAUI در ابتدای کار بتواند تمام نیاز های توسعه اپلیکیشن های چندسکویی را برآورده کند. ممکن است تا 80، 90 درصد موثر باشد. اما به نظرم برای این که MAUI بتواند تمامی نیاز های این حوزه را برطرف کند 1 سال دیگر نیاز دارد.والریو: امیدوارم! واقع بینانه بخواهم بگویم، من فکر میکنم این یک کار بسیار سخت است. من از ابتدا انتظار سازگاری خوب برنامه بین پلتفرم ها را ندارم ، به ویژه در مورد UI/UX. چنین تحولات بزرگی  به تدریج با بازخورد دقیق و مرتبط که از کاربران واقعی و جامعه می آید ، کامل می شود.سوال چهارم) چقدر زمان می برد تا مایکروسافت MAUI را انتشار نهایی دهد؟گابریل: مایکروسافت به طور مداوم نسخه های محیط نرم افزاری خود را منتشر می‌کند. این سوال کمی پیچیده تر است زیرا شما به عنوان یک توسعه دهنده نرم افزار نمی توانید به این فکر کنید که مایکروسافت چه زمانی MAUI را منتشر خواهد کرد.باید در نظر بگیرید که چه زمانی نسخه پایدار منتشر خواهد شد و نسخه LTS در دسترس قرار می‌گیرد. من معتقدم که این کار کمی بیشتر از نقشه راه ارائه شده توسط مایکروسافت طول خواهد کشید.فرانچسکو: با توجه به جدول زمانی برنامه ریزی شده ، MAUI باید همراه با انتشار NET 6.  در نوامبر 2021 منتشر شود. باید به این جدول زمانی احترام گذاشت ، اما در بدترین حالت ، نسخه پایدار چند ماه بعد منتشر می‌شود.والریو: زمان بندی رسمی MAUI خوش بینانه به نظر می رسد ، اما به نظر می رسد که مایکروسافت در این پروژه سرمایه گذاری زیادی کرده است و آنها قبلاً موفق شده اند بدون تأخیر بیش از حد نسخه های بزرگ را با موفقیت ارائه دهند (به .NET 5 فکر کنید): من فکر می کنم آنها تمام تلاش خود را برای انتشار MAUI خواهند کرد تا همراه با اولین نسخه نهایی NET 6. عرضه شود ، زیرا از نظر بازاریابی ایده آل خواهد بود و می تواند به جذب برخی شرکت هایی که تازه می خواهند شروع کنند کمک کند.خلاصهانتشار MAUI بدون شک انقلابی در نحوه توسعه برنامه های کاربردی دستگاه ها توسط توسعه دهندگان ایجاد خواهد کرد.توسعه دهندگان می توانند به دنبال استقرار سریع و ساده باشند و اینکه آیا MAUI پروژه های مخصوص پلتفرم را ارائه می دهد یا یک سیستم کد مشترک، در نهایت مشخص می شود که چگونه است. برای تخمین میزان تأثیر MAUI خیلی زود است ، اما مطمئناً ارزش انتظار را خواهد داشت و در حال حاضر با اضافه شدن MAUI به Github دات نت، هیجان زیادی وجود دارد که ببینیم MAUI چگونه در سیستم عامل های توسعه ظاهر می شود و چگونه انجمن ها و جوامع برنامه نویسی آن را می پذیرند و با آن همسو می شوند. با هر پیش نمایش .NET 6 می توان انتظار افزودنیهای متعدد به قابلیت های .NET MAUI را داشت. هم اکنون، توسعه دهندگان منتظر تجربه &quot;dotnet new&quot;:) هستند.منبع:Exploring the new .NET Multi-Platform App UI (MAUI) with the Experts | Packt Hub (packtpub.com) https://youtu.be/XMqkthjnv5o </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Sat, 14 Aug 2021 20:56:42 +0430</pubDate>
            </item>
                    <item>
                <title>ماراتون خروجی گرفتن ios در زامارین فرم - قسمت سوم (نصب Xcode و VS for mac)</title>
                <link>https://virgool.io/@MASOLTANI/xamarin-ios-marathon-3-suven2st6cld</link>
                <description>توی پست قبل تا اینجا پیش اومدیم که macOS رو روی ماشین مجازی با موفقیت نصب کردیم و حالا نوبت نصب نرم افزار های مورد نیاز برای این قسمت هست. اگر پست قبلی رو نخوندین حتما بخونید چون این ماراتون باید قدم به قدم انجام بگیره و پست قبلی قدم اوله. https://vrgl.ir/YSu09 همچنین شما دوستان میتونید آموزش ویدیویی این قسمت رو از قسمت زیر مشاهده نمایید. https://youtu.be/99F-cYbmj04 در این قسمت قدم اول ما نصب Xcode هست.برای نصب Xcode از طریق منوی نوار ابزار پایین مک، App Store رو باز کنید و داخل کادر جستجو عبارت Xcode  رو تایپ کنید. سپس شروع به دانلود و نصب کنید (از طریق App Store). برای این مرحله احتیاز به VPN نیست و فقط باید با حساب کاربری اپل خودتون(Apple ID)  لاگین کنید تا اجازه ی دانلود بده. (حجمش حدود 12 گیگ اینطوراست)(حساب کاربری اپل رو هم میتونید خودتون بسازید البته یکم دردسر داره یا این که بعضی از وبسایت ها هستن آماده می فروشن میتونید از اون ها تهیه کنید . من خودم تهیه کردم مشکلی نبود و کارمو راه انداخت)منتها نکته ای که باید به اون توجه بشه این هست که Xcode ورژن 12.5 (آخرين نسخه این نرم افزار) دارای مشکل با ویژوال استودیو ویندوز هست و زمانی که شما بخواهید از ویندوز ریموت به مک بزنید خطا میده و هنوز مشکلش (تا به این لحظه که من این پست رو می نویسم) داخل ویژوال استودیو حل نشده. (احتمالا توی آپدیت های آینده ویژوال اوکی بشه) اما یه راهی هست که با این ورژن Xcode هم همچنان کار رو جلو برد. از طریق منوی ویژوال استودیو Tools &gt; Options &gt; Xamarin &gt; iOS Settings برید و مثل عکس زیر تیک گزینه ی Remote رو بردارید. این به این معنی هستش که سیمولاتور iOS داخل خود مک شروع به کار می‌کنه و داخل ویندوز اجرا نمیشه. یکم سرعتش پایین تر از حالت دوم هست ولی خب بهتر از هیچی و کار راه اندازه.غیرفعال کردن ریموت به مکنکته: مطالبی که گفته شد باید بعد از نصب ویژوال استودیو برای مک و همچنین فعال کردن ریموت مک انجام بشه که در ادامه بهشون می پردازیم.اما اگر بخوایم داخل ویندوز سیمولاتور رو اجرا کنیم چی؟برای این کار لازمه Xcode ورژن 12.4 رو نصب کنیم که این مشکل رو نداره با ویژوال استودیو ویندوز.برای این کار مرورگر safari رو از منوی ابزار پایین مک باز کنید و عبارت developer.apple.com/downloads رو تایپ کنید.لازمه که با حساب کاربری اپل خودتون لاگین کنید.این صفحه برای فعال سازی two step verification  هست. روی گزینه other option بزنید و این مرحله رو رد کنید.توی لیست نرم افزار ها دنبال Xcode ورزن 12.4 بگردید و مثل عکس زیر اجازه دانلود بدید.منتظر بمونید تا فرایند دانلود تموم بشه.بعد از اتمام دانلود روی Xcode کلیک کنید تا فرایند نصب شروع بشه.خب تبریک میگم Xcode رو نصب کردید.در قدم بعدی لازمه که Visual studio for Mac دانلود بشه.دوباره Safari رو باز کنید و عبارت visualstudio.microsoft.com رو تایپ کنید.اجازه ی دانلود بدید.پس از دانلود روی اون کلیک کنید و فرایند نصب رو شروع کنید.پس از باز شدن، آیکون ویژوال استودیو رو می بینید روش کلیک کنید.روی دکمه Open بزنید.فرایند نصب ویژوال استودیو شروع میشه.روی گزینه Continue کلیک کنید.در این جا مواردی که نیاز دارید رو تیک بزنید تا نصب بشن.روی دکمه Install کلیک کنید.دقت داشته باشید برای دانلود شدن Sdk های اندروید نیاز به Vpn دارید. ( اگر از داخل ویندوز Vpn روشن کنید خودکار برای ماشین مجازی مک هم اعمال میشه)فرایند دانلود و نصب شروع میشه.اگر این خطا رو دید احتمالا Vpn ست نشده. دوباره اتصالتون رو چک کنید.بعد از اوکی کردن Vpn ، روی Retry کلیک کنید و کارو ادامه بدید.ممکنه حین نصب ازتون بخواد پسورد مکتون رو وارد کنید.پس از اتمام نصب پنجره های زیر نمایش داده میشه که رد کنید و جلو برید.تبریک میگم. فرایند نصب ویژوال استودیو هم تمام شد.طبق عکس های زیر میتونید پروژه جدید بسازید و یکم با ویژوال کار کنید. (ولی ما دیگه نیازی بهش نداریم)به مرحله آخر رسیدیم.حالا باید گزینه ریموت مک رو فعال کنید تا بتونیم از ویندوز به مک ssh بزنیم. مطابق تصویر زیر System Preferences رو انتخاب کنید.همانند شکل زیر گزینه Sharing رو انتخاب کنید.بر روی گزینه Remote Login کلیک کنید و تیک بزنید همچنین در سمت راست هم All Users را انتخاب کنید.سپس لازم است سراغ VirtualBox برویم و همانند تصویر زیر تغیرات را اعمال کنیم.سپس لازم است مک را ریستارت کنیم و سراغ ویژوال استودیو برویم.در نوار بالای ویژوال استودیو بر روی Pair to Mac کلیک کنید.سپس همانند تصویر زیر اطلاعات اکانت مک خود را وارد کنید.و کار تمام است.نکته:اگر در ابتدای کار Xcode ورژن 12.5 رو نصب كرديد تنها كاری که لازمه انجام بدید این هست که Rmote Simulator to windows رو غیرفعال کنید (ابتدای نوشته توضیح داده شد) و با اجرا کردن پروژه سیمولاتور درون مک شروع به کار می کند.اما اگر Xcode ورژن 12.4 رو نصب کردید نیاز هست تا تغیرات زیر رو انجام بدید تا سیمولاتور به صورت ریموت داخل ویندوز شروع به کار کند.و کار تمام است.اگر سوالی بود داخل کامنت ها بپرسید سعی میکنم جواب بدم.موفق باشید. https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Mon, 19 Jul 2021 00:37:05 +0430</pubDate>
            </item>
                    <item>
                <title>ماراتون خروجی گرفتن ios در زامارین فرم - قسمت دوم (نصب macOS BigSur)</title>
                <link>https://virgool.io/@MASOLTANI/xamarin-ios-marathon-2-qp03nadnhkax</link>
                <description>با سلام خدمت دوستان برنامه نویس (به ویژه دات نتی ها:)توی پست قبل تا اینجا پیش اومدیم که فایل های مورد نیاز رو دانلود کردیم و همچنین ماشین مجازی مون رو ساختیم و تنظیمات مورد نیاز رو براش انجام دادیم. اگر پست قبلی رو نخوندین حتما بخونید چون این ماراتون باید قدم به قدم انجام بگیره و پست قبلی قدم اوله. https://vrgl.ir/Xno4R همچنین شما دوستان میتونید آموزش ویدیویی این قسمت رو از قسمت زیر مشاهده نمایید. https://youtu.be/99F-cYbmj04 اما توی این قسمت قراره که بریم سراغ نصب سیستم عامل macOS BigSur. پس قدم به قدم عکس هارو دنبال کنید و دقیقا مثل اونا مراحل رو انجام بدید. بزن بریم:)قدم اول - ماشینو استارت بزن تا روشن شه :)بعد از اینکه ماشین مجازی رو استارت کردید، یک دیالوگ باکسی شبیه تصویر زیر میبیند که باید گزینه ی دوم رو انتخاب کنید و بعد بر روی دکمه Start بزنید.بعد از کلیک کردن بر روی دکمه Start یکسری کد شروع به اجرا شدن میکنند که با سرعت بالا صفحه اسکرول میخوره. همه چیز اوکیه و شاید اگر متنشو بخونید کلمه های ارور و وارنینگ ببینید و جای نگرانی نیست و اوکیه.نکته: حین فرایند نصب ممکنه چندین بار این صفحه ظاهر بشه. اوکیه بذارید کارشو بکنه :)پس از مدتی نوار سفید رنگ اپل میاد و شروع میکنه به پر شدن . بسته به نوع هاردتون باید زیاد یا کم منتظر بمونید (SSD حدود 15 دقیقه)پس از مدتی صفحه ی زیر میاد که روی زبان مورد نظر کلیک کنید و در نهایت بر روی آیکون فلش کلیک کنید.(ترجیحا English)توی این صفحه ابتدا باید روی گزینه آخر (Disk Utility) کلیک کنید و سپس روی Continue. (یه چیزی تو مایه های فرمت کردن هارد موقع نصب ویندوزه:)وقتی وارد این صفحه شدید، بر روی اون حافظه ای که توی قسمت اول مشخص کردیم (گفته بودیم حداقل 60 گیگ بزارید) کلیک کنید و از نوار بالا سمت راست بر روی دکمه Erase کلیک کنید.یک نام دلخواه بزارید و گزینه Format رو دقیقا مثل عکس انتخاب کنید.در نهایت باید با چیزی مثل تصویر زیر مواجه بشید. روی Done کلیک کنید.خب کارمون با این قسمت تموم شده و باید ازش خارج بشیم. از نوار بالا بر روی Disk Utility کلیک کنید و خارج بشید.دوباره به این صفحه برگشت داده میشیم و اینبار میتونیم بر روی گزینه دوم یعنی نصب سیستم عامل کلیک کنیم. بر روی Continue کلیک کنید.همانند تصویر زیر روی Continue کلیک کنید.بر روی Agree کلیک کنید.فضای storage ی که در مراحل قبل نام گذاری و فرمت کردیم را مطابق تصویر انتخاب کنید و بر روی Continue کلیک کنید.منتظر بمانید تا فرایند نصب تکمیل شود.بقیه مراحل نیاز به توضیح نداره و مطابق تصاویر پیش برید.بهتره که در این مرحله حساب اپل خودتون رو وارد نکنید. (برای من ارور میداد، بعد از تکمیل نصب از اپ استور لاگین کردم و اوکی بود)در این مرحله باید حساب کاربری خودتون رو ایجاد کنید.بر روی Setup Later کلیک کنید.تم مورد نظرتون رو انتخاب کنید.در این مرحله لازمه چندتا کلید صفحه کلیدتون رو فشار بدید تا کیبوردتون رو شناسایی کنه.بوم::)  مک اواس شما آماده است :)در قسمت بعدی (قسمت آخر) به سراغ نصب ویژوال استدیو برای مک و xcode  و نحوه متصل کردن ویژوال استودیو ویندوز به مک برای خروجی گرفتن می رویم.موفق باشید :) https://vrgl.ir/AJmng  https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Tue, 18 May 2021 20:35:04 +0430</pubDate>
            </item>
                    <item>
                <title>ماراتون خروجی گرفتن ios در زامارین فرم - قسمت اول (آماده سازی)</title>
                <link>https://virgool.io/@MASOLTANI/xamarin-ios-marathon-1-kbh2lc4sbp4q</link>
                <description>باسلام خدمت همه دوستان برنامه نویس (به ویژه دات نتی ها :)میخوام داخل این پست (شاید هم به دلیل طولانی شدن، تبدیلش کردم به دوتا) برای یک بار هم که شده این قضیه رو حلش کنم. تمام چالش ها و موانعی که وجود داره رو قدم به قدم با هم حلش میکنیم.فقط یه نکته ای که هست این که ممکنه پست طولانی بشه و حوصله کنید چون قطعا در آخر جواب میگیرید.همچنین شما دوستان میتونید آموزش ویدیویی این قسمت رو از قسمت زیر مشاهده نمایید. https://youtu.be/99F-cYbmj04 پیش زمینه: چند سال پیش که برنامه نویسی زامارین رو شروع کردم برای خروجی گرفتن ios، ابتدا یدونه مک نسخه (high sierra) رو به صورت فایل .iso یا نسخه ویرچوال باکسی (یا vmware) از داخل اینترنت پیدا و دانلود و سپس فرایند نصب رو شروع میکردم. پس از کلی چالش و داستان های عجیب و غریب در نهایت جواب میداد و از داخل ویژوال استودیو میتونستم کانکت بشم ولی برای یه خروجی ساده گرفتن اپ hello world با سیستمی که من داشتم (i7 نسل 7 و رم 16 ddr4 و حافظه hdd ) حدود نیم ساعتی طول می کشید و واقعا فرایند کلافه کننده ای بود.پس از داستان های تحریم اپل و حذف برنامه های ایرانی از استور و پیچیده شدن فرایند انتشار برنامه ها، کارفرما ها هم کم کم روی به pwa آوردن (که به شدت Blazor رو برای این کار پیشنهاد میکنم) و بعد از اون برنامه هایی که توسعه میدادم صرفا ازشون خروجی اندروید میگرفتم و اکثر کارفرما ها هم به دلیل سرعت بالای توسعه راضی بودن. اما چندی پیش بنا به شرایطی تصمیم بر این گرفتم که خروجی ios برنامه ای که نوشتم رو هم بگیرم و کار خودمو تکمیل کنم. به همین خاطر چند روزی درگیر سعی و خطا بودم و خیلی ازم وقت و انرژی گرفت. امیدوارم با این مطلب شما دوستان سریعا به خواسته تون برسید و دیگه درگیر ارور و چالش ها و سرچ کردن های مختلف نشید.اما نکته ای که وجود داشت روشی که من بلد بودم برای خروجی گرفتن ios دیگه جواب نمیداد و اون به این دلیل بود که توسعه macOS HighSierra در ورژن 10.13.6 متوقف شده بود و اپل دیگه توسعه نمیده این نسخه رو. و از اونجایی که شما برای خروجی گرفتن باید روی مک تون xcode (و همچنین visual studio for mac) داشته باشید. باید xcode دانلود کنید. اما وقتی که وارد اپ استور می شوید نسخه 12.5 رو برای دانلود گذاشته که روی اون ورژن از مک نصب نمیشه. یک راهی که وجود داشت این بود که وارد developer.apple.com/downloads بشید و ورژن های قبل رو دانلود کنید و به صورت دستی خودتون نصب کنید. ولی این کار هم جواب نیست چون ویژوال استدیو داخل مک بهتون ارور میده و میگه باید حتما xcode رو آپدیت کنید. خلاصه، نتیجه ش این میشه که باید از دوست قدیمی و خوبمون خداحافظی کنیم و دنبال یک دوست جدید بگردیم. دوست جدیدمون macOS BigSur هستش :)خب اینا مقدمه بود بریم که ماراتون رو شروع کنیم :)یک سری پیش نیاز ها داره که باید دانلودشون کنید منتها این نکته رو باید بگم که خیلی بهتره که هاردتون ssd باشه (نباشه هم اوکیه ولی سرعت کار پایین میاد) . سیستمی که من باهاش این ماراتون رو گذروندم =&gt; i7 نسل 8 و رم 16 ddr4 و هارد SSD)1. دانلود فایل .iso آخرین نسخه macOS BigSur (حجم حدود 16 گیگ / احتمالا vpn بخواد) :2. دانلود virtualBox (البته میتونید از سایت های ایرانی هم دانلود کنید)3. دانلود Virtual Box Code (بعدا کاربردش رو میگیم)4. دانلود VirtualBox Extension5. حساب کاربری اپل (Apple ID) (که میتونید نحوه ساختش رو تو اینترنت سرچ کنید یا از بعضی از وبسایت ها بخرید)قدم اول1. باید ویرچوال باکس رو (اگر ندارید روی ویندوز) نصب کنید که ساده و چند تا next باید بزنید.2. پس از نصب برنامه، اونو باز کنید و به مسیر Tools&gt;Pereferences&gt;Extensions برید و طبق عکس زیر اون رو اضافه و نصب کنید.قدم دوم - ساختن ماشین مجازی جدید و پیکربندی اونطبق تصاویر زیر، یک ماشین جدید بسازید و اونو پیکربندی کنید. دقت کنید که عکس ها به ترتیب و دقیق هستن و سعی کنید دقیقا مثل اونا عمل کنید.یک نام انتخابی و دلخواه برای ماشین خودتون انتخاب کنید و اون رو جایی یادداشت کنید چون در ادامه لازمش داریم. همچنین مسیر مورد نظرتون رو برای نصب مشخص کنید. (دقت کنید که درایوی که برای نصب انتخاب میکنید حداقل باید 70 گیگ فضای خالی داشته باشه)اینجا باید مقدار رمی که میخواید تخصیص بدید به ماشین مجازی رو مشخص کنید (که البته در آینده قابل تغییره)بر روی گزینه دوم کلیک کنید تا فرایند تخصیص فضا رو مشخص کنه.همانند تصویر بالا گزینه دوم یعنی از نوع VHD انتخاب کنید.یک توضیحی در باره این دو تا گزینه بدم. اولی (Dynamically allocated) یعنی خودش بر حسب نیاز میاد و سایز خودش رو به اندازه ی ماکزیممی که شما در مرحله بعد تخصیص میدید بزرگ میکنه. یعنی بر فرض شما اگر 60 گیگ حافظه براش در نظر بگیرید، در همون ابتدای کار 60 گیگ رو به خودش اختصاص نمیده و از حافظه موجود سیستم شما کم نمی کنه و به مرور زمان و بر حسب نیاز حجم خودش رو زیاد میکنه (تا 60 گیگ)گزینه دوم بر عکس اولی هست. یعنی اگر شما 60 گیگ بهش فضا بدید در همون ابتدای کار اونو میگیره و به خودش اختصاص میده.هر روش یک سری مزایا و معایب دارن ولی مهمترینشون اینه که مثلا اولی حجم کمتری از سیستم شما رو میگیره در ابتدای کار و شما رو با محدودیت حافظه درگیر نمیکنه اما در عوض سرعت ماشین مجازی به نسبت گزینه دوم کمتر هستش و گزینه دوم اگر در همون ابتدا حجم قابل ملاحظه ای از storage شما رو میگیره ولی در عوض سرعت ماشین مجازی خیلی بالاتر میره. (دلیلش هم به خاطر اینه که توی اولی میاد و از حافظه های chunk به صورت لیست پیوندی استفاده میکنه و همین کار سرعت کار رو کاهش میده. اگر خواستید بیشتر در این باره بدونید، این مطلب من رو درباره حافظه ها بخونید) https://vrgl.ir/n06nV اما نکته ای که وجود داره ما مجبور هستیم به دلیل نوع فایل سیستم اپل گزینه دوم رو حتما انتخاب کنیم و من با اولی هم تست کردم منتها حین نصب سیستم عامل خطا میده و کل زحمات به فنا میره :)و اما در این مرحله حافظه مورد نظرتون رو باید اختصاص بدید. (پیشنهاد من حداقل 70 و به بالا هستش ولی اگر محدودیت حافظه دارید 60 هم اوکیه اما دیگه زیر 60 به مشکل بر میخورید و در واقع یه جورایی لب مرزه. اگر کمتر از 60 انتخاب کنید در ادامه به مشکل میخورید و مجبورید ماشین مجازی رو پاک کنید و دوباره از اول شروع کنید که به نظرم به هیچ وجه این ریسک رو نکنید که واقعا پشیمون میشید . مثل من که شدم :)نکته ای هم که هست این نوع از حافظه رو VHD نمیشه بعد از فرایند تخصیص حافظه افزایش داد (تست کردم نشد :) و باید همین اول کار همه چیو درست انجام بدید.در نهایت روی دکمه create کلیک کنید.بعد از اینکه ماشین رو ساختید، اون رو از منوی سمت چپ انتخاب و بر روی دکمه settings کلیک کنید تا صفحه تنظیمات برای شما باز بشه.در این تب، نام ماشین مجازی خودتون رو انتخاب و کپی کنید و در جایی (notepad) نگه دارید چون در ادامه مورد نیازتون میشه.در تب System تیک گزینه Floppy رو بردارید. همچنین میتونید مقدار رم تخصیص داده شده هم تغییر بدید.در همان تب system، به تب Processor برید و بسته به سیستمتون مقدار پردازنده رو مشخص کنید. (دقت کنید هرچقدر بیشتر باشه سرعت ماشین مجازی بالاتر میره)به تب Display برید و مقدار Video Memory رو به آخرین میزان افزایش بدید.سپس به تب Storage برید و روی آیکون دیسک کلیک کنید و فایل .iso که دانلود کردید رو بهش معرفی کنید.مثل عکس زیر:سپس از طریق عوض کردن SATA Port ها اولویت فایل .iso  رو بیشتر از vhd بزارید. (همانند تصویر زیر)در نهایت بر روی OK کلیک کنید و تنظیمات رو ثبت کنید.قدم سوم - اجرای دستورات VBoxManageابتدا cmd رو از حالت Run As Administrator اجرا کنید و به مسیر زیر بروید. ( از طریق دستور cd)نکته : ورژن Virtual box باید 6 به بعد باشه.cd &amp;quotC:\Program Files\Oracle\VirtualBox\&amp;quotسپس دستورات زیر را به ترتیب اجرا کنید: (این دستورات در فایل دانلود شده شماره 3 نیز موجود است)نکته : به جای VM Name نام ماشین مجازی که قبلا توی notepad ذخیره کردید (نام ماشین مجازی ساخته شده) جایگذاری کنید.VBoxManage.exe modifyvm &amp;quotVM Name&amp;quot --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbffVBoxManage setextradata &amp;quotVM Name&amp;quot &amp;quotVBoxInternal/Devices/efi/0/Config/DmiSystemProduct&amp;quot &amp;quotiMac19,1&amp;quotVBoxManage setextradata &amp;quotVM Name&amp;quot &amp;quotVBoxInternal/Devices/efi/0/Config/DmiSystemVersion&amp;quot &amp;quot1.0&amp;quotVBoxManage setextradata &amp;quotVM Name&amp;quot &amp;quotVBoxInternal/Devices/efi/0/Config/DmiBoardProduct&amp;quot &amp;quotMac-AA95B1DDAB278B95&amp;quotVBoxManage setextradata &amp;quotVM Name&amp;quot &amp;quotVBoxInternal/Devices/smc/0/Config/DeviceKey&amp;quot &amp;quotourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc&amp;quotVBoxManage setextradata &amp;quotVM Name&amp;quot &amp;quotVBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC&amp;quot 1سپس CMD را ببندید .هم اکنون تمامی تنظیمات مورد نیز برای نصب مک انجام شده و لازمه که در قدم بعدی اقدام به نصب خود سیستم عامل بکنیم. به خاطر این که مبحث زیادی طولانی نشه و از حوصله خارج نشه ، نصب سیستم عامل رو برای پست بعدی میگذاریم.موفق باشید. https://vrgl.ir/YSu09  https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Mon, 17 May 2021 21:36:47 +0430</pubDate>
            </item>
                    <item>
                <title>مدیریت حافظه در طراحی کامپایلر (قسمت 3-پایانی)</title>
                <link>https://virgool.io/@MASOLTANI/memorymanagementincompilerdesign-evinjslkdnwi</link>
                <description>تخصیص حافظه به صورت پویا (Dynamic Memory Allocation)در جدول زیر مهمترین دستورات لازم برای اجرای دستور العمل های مربوط به درخواست و آزادسازی حافظه آورده شده است.اشاره‌گرهای معلق• اشاره‌گرهای معلق در زبانهای برنامه نویسی، اشاره گرهایی هستند که به یک شیء مشخص اشاره نمی‌کنند.• اشاره‌گر معلق زمانی به وجود می‌آید که یک شی حذف یا آزادسازی می‌شود، بدون اینکه مقدار یک اشاره‌گر تغییر داده شده باشد. &quot;در نتیجه آن اشاره‌گر به مکانی اشاره می‌کند که دیگر وجود ندارد.&quot;•  حتی ممکن است سیستم مکان قبلی حافظه که آزاد شده بود را به فرایند دیگری داده باشد، در این صورت آن اشاره‌گر به دادهای متفاوت اشاره می‌کند.دلایل بروز اشارهگرهای معلقدر بسیاری از زبان های برنامه نویسی، مانند C، وقتی یک شی از محدوده خارج می‌شود یا صریحاً دستور خالی شدن دریافت می‌کند، اشارهگرهایی که به ان شی اشاره میکنند تغییر نمی‌کنند.به عنوان مثال به کد زیر توجه کنید:{char* dp = NULL;/* ... */{char c;dp = &amp;c;} /* c falls out of scope *//* dp is now a dangling pointer*/}یک راه دیگر به وجود امدن اشاره‌گر معلق، استفاده همزمان تابع malloc  و در ادامه free  است. در واقع بعد از اینکه یک اشاره‌گر با malloc  مقداردهی می‌شود توسط free  خالی می‌شود و اشاره‌گر استفاده شده معلق می‌شود. به کد زیر توجه کنید:راه حلباید بعد از آزاد کردن حافظه توسط دستور free خود اشاره گر را نیز برابر با مقدار پوچ قرار دهیم.در زبانهای برنامه نویسی سطح بالا، مانند سی شارپ و JAVA، امکان بروز اشاره‌گر معلق وجود ندارد، چرا که هیچ روش مستقیمی برای خالی کردن حافظه در این زبان تعبیه نشده و تمام ازادسازی حافظه توسط زباله روب (garbage collector) انجام می‌شود.پیشرفت های اخیر در تحلیل ثابت برنامه‌ها می‌تواند کمی از این چالش ها را کاهش دهد.برای مثال، Cherem, Princehouse and Rugina یک تکنیک ویژه تحلیل گراف کنترل جریان را معرفی کردند که بلوک های حافظه اختصاص داده شده را در برنامه زیرنظر می‌گیرد که عملیات های free() فراموش شده را تشخیص دهد تا باعث نشت حافظه (memory leak) نشوند. و یا عمیات های free() زود هنگام را تشخیص دهد تا باعث ایجاد اشاره‌گر های معلق نشود.علاوه بر اختصاص داده توسط کاربر، سیستم های زمان-اجرا (run-time) اغلب داده هایی را تخصیص می‌دهند که عمر قابل پیش بینی ندارند و برنامه نویس اصلا از وجود آن ها خبر ندارد.تولید دستور العمل هایی برای آزادسازی این داده ها ممکن است بسیار پیچیده باشد.راه حل؟؟تلاش ها برای حل این مشکلات منجر به تکنیک هایی برای آزادسازی خودکار داده های استفاده نشده با آزاد سازی حافظه به صورت ضمنی (implicit) شده است.در مباحث پیش رو، ما درباره تکنیک هایی برای تخصیص داده به همراه آزادسازی صریح (explicit) حافظه توسط برنامه نویس و تخصیص داده به همراه آزادسازی ضمنی (implicit) حافظه که معمولا garbage collection نامیده می‌شود، می‌پردازیم.در بیشتر سیستم ها، روال پایه ای تخصیص حافظه به این صورت است که یک بلوک استفاده نشده به میزان حجم درخواست شده از حافظه را پیدا می‌کند و آن را به عنوان حافظه استفاده شده علامت گذاری می‌کند و یک اشاره‌گر به آن بلوک را بر‌ می‌گرداند. اگر همچین بلوکی وجود نداشته باشد نتیجه مختلف است: ممکن است یک اشاره‌گر بی‌مقدار (null) برگشت داده شود، یا یک خطا نمایان شود و یا برنامه خاتمه یابد.روش های تخصیص حافظه• به صورت bitmap• به صورت بیت علامتاگر بخواهیم از منظر کاربر به این تکه از حافظه نگاه کنیم آن را block می نامیم و اگر بخواهیم از منظر تخصیص دهنده حافظه به آن نگاه کنیم آن را chunk می نامیم.همانگونه که در تصویر زیر مشاهده می کنید block زیرمجموعه ای از chunk است و مکان مورد نظر برای نگه داری داده است ولی chunk یکسری اطلاعات بیشتری نسبت به block دارد.یکی از این اطلاعات اضافه وجود یک بیت مشخص برای نشان دادن مورد استفاده بودن یا نبودن آن بلاک است. یکی دیگر از این اطلاعات اضافه نشان دادن مقدار حافظه آن بلاک است. در واقع chunk یکسری اطلاعات مدیریتی بیشتری از بلاک در اختیار ما قرار می دهد.ساختار حافظههمانگونه که در تصویر زیر هم مشاهده می کنید حافظه (هرم) از یکسری chunk های پشت سر هم تشکیل شده است.روش کار malloc به چه صورت است؟همانگونه که در تصویر زیر هم مشاهده می کنید روال به این صورت است که هنگامی که دستور تخصیص حافظه به مقدار N بایت می آید malloc شروع به جستجو از ابتدای حافظه هرم کرده و با چک کردن بیت های استفاده شده و مقدار حافظه به دنبال حافظه با مقدار درخواست شده می گردد. هنگامی که به chunk مورد نظر رسید دو حالت وجود دارد. یکی اینکه حافظه chunk پیدا شده دقیقا برابر با مقدار درخواست شده است که در این صورت اشاره گر به آن chunk را بر می گرداند. دو این که حافظه پیدا شده مقدارش بیشتر از حافظه مورد نیاز است که در این صورت chunk یافت شده رو به 2 chunk تقسیم می کند و اولین chunk تقسیم شده مقدارش برابر با مقدار درخواست شده است و chunk دوم مقدارش برابر است با مقدار حافظه chunk اولیه منهای مقدار حافظه مورد نیاز.بعد از انجام فرایند تقسیم chunk ها یک اشاره گر به chunk اولی را به سمت برنامه برمیگرداند.فرایند آزادسازی حافظه free هم به همین صورت انجام می گیرد.اما نکته ی مهمی که وجود دارد این است که اگر دستور malloc کل حافظه را جستجو کرد ولی نتوانست حافظه درخواست شده مورد نیاز را پیدا کند، تکلیف چیست؟راهکار هافرایند Coalesce: یکی از راه کار ها ادغام chunk های با مقدار حافظه های کوچک با یکدیگر است. بدین ترتیب شاید بتوان مقدار حافظه مورد نیاز را با این کار به دست آورد و آن را در اختیار برنامه قرار داد.فرخوانی تابع SolveOutOfMemoryCondition(): اگر راه قبلی با شکست مواجه شود سراغ راهکار بعدی یعنی فراخوانی تابع SolveOutOfMemory می رویم. این تابع حین فراخوانی به سراغ 2 روش خود می رود. یکی از آن های صدا زدن زباله روب (garbage collector) است تا بتواند به واسطه آن حافظه های اختصاص داده شده ای که برنامه ای از آن استفاده نمیکند را آزاد نماید تا بدین وسیله بتواند مقدار حافظه ی مورد نیاز خود را فراهم نماید. روش بعدی استفاده از راهکار هایی نظیر virtual memoryکه مقداری از حافظه هارد دیسک را به عنوان حافظه (رم) استفاده می کند است.بهینه سازی هایی برای تخصیص حافظهپیشتر به این موضوع پرداختیم که هنگام تخصیص حافظه مورد نیاز برنامه نیاز است تا یک بار تمام حافظه جستجو شود (linear search) تا حافظه مورد نظر پیدا شود. حال اگر این مرحله شکست خورد بار دیگر نیاز است تا حافظه پیمایش شود تا حافظه (chunk) های کوچک را با یک دیگر ادغام کنیم. بدین ترتیب کارایی (performance) به شدت پایین می آید.راهکار هایکی از راهکار ها این است تا chunk های آزاد حافظه را درون یک لیست پیوندی قرار بدهیم تا هنگام تخصیص حافظه لازم نباشد تا کل حافظه (اعم از حافظه های استفاده شده و آزاد) پیمایش شود. بدین ترتیب اگر لازم باشد میتوان chunk را تقسیم کرد و یا اگر حافظه ای آزاد شد به سادگی آن را به لیست پیوندی مان اضافه کنیم.دستاوردجستجوی خطی میان کل chunk های حافظه ====&gt; جستجوی خطی صرفا میان chunk های آزاد حافظهراهکار بهتر؟یک روش پیچیده تر این است که chunk های با مقدار حافظه های بین بازه های مشخصی را درون یک لیست پیوندی قرار دهیم و تمامی این لیست های پیوندی را درون یک لیست پیوندی قرار دهیم. بازه ها هم میتواند به عنوان مثال توان های 2 باشند.به تصویر زیر توجه کنید:دستاوردپیچیدگی زمانی====&gt; (تقريبا) برابر با زمان ثابت (Constant Time)منبع: Modern Compiler Design by Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, Koen Langendoen</description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Sun, 14 Feb 2021 16:08:39 +0330</pubDate>
            </item>
                    <item>
                <title>مدیریت حافظه در طراحی کامپایلر (قسمت 2)</title>
                <link>https://virgool.io/@MASOLTANI/memory-management-in-compiler-design-part-2-fbzktfxqpisf</link>
                <description>در ادامه مطالب قبلی به این می‌پردازیم که چالش های موجود هنگام تخصیص حافظه به روش پشته چیست؟ https://vrgl.ir/n06nV دو چالش مهم در این روش وجود دارد که با مثال به تشریح آن ها می‌پردازیم:فرض کنید شما قرار است به عنوان برنامه نویس برنامه ای بنویسید تا از کاربر نام و نام خانوادگی را دریافت کند. معمولا پیاده سازی این برنامه در زبان C به این صورت است که یک آرایه از نوع کاراکتر ایجاد می‌کنیم و لازم است تا مقداری برای آن در نظر بگیریم. چون ما از قبل اطلاعی درباره تعداد کاراکتر های نام و نام خانوادگی کاربر نداریم پس باید یک حد مناسبی از آن را در نظر بگیریم. مثلا طول آرایه را به اندازه 30 خانه مقدار دهی می‌کنیم. حال اگر تعداد کاراکتر های واردی نام و نام خانوادگی کاربر کمتر از 30 عدد باشد (مثلا 20 کاراکتر) ما 10 کاراکتر از مقدار حافظه ای که دریافت کرده ایم را هدر داده‌ایم (به این چالش اصطلاحاً Stack Underflow گفته می‌شود. از طرفی اگر تعداد کاراکتر های وارد شده کاربر بیش از حد مورد انتظار ما باشد، برنامه دچار خطا می‌شود و به این چالش اصطلاحاً Stack Overflow گفته می‌شود.همچنین برنامه نویس باید مراقب باشد که متغیرهای محلی به فضایی بیشتر از اندازه پشته (معمولا در پیاده سازی اکثر کامپایلر ها حدود 2 مگابایت است) نیاز نداشته باشند.چالش سومتابع بازگشتی : نسخه های متعددی که در پشته نگهداری می شود که در نهایت باعث بروز خطای سرریز پشته می شود.به تابع بازگشتی زیر توجه کنید.int f(){            f();            return 1;}این برنامه همواره خودش را صدا می‌زند و باعث می‌شود حافظه پشته پر شود.اما سوالی که پیش می‌آید این است که این چالش ها و تعریف متغیر ها نیاز های روزمره ما در برنامه نویسی است. راه حل چیست؟راه حلبرای حل مشکلات مطرح شده لازم است تا به سراغ dynamic memory allocation برویم.ساختار حافظه در برنامه هادر قسمت اول مقاله به توضیح سه قسمت اول (پایینی) پرداختیم. اکنون به تشریح قسمت چهارم یعنی هرم (heap) می‌پردازیم.قسمت چهارم مربوط به بخش هرم یا heap است.این قسمت از حافظه محدودیت خاصی ندارد و تا جایی که سیستم عامل و سخت افزار اجازه بدهد می‌تواند گسترش یاد.برنامه نویس به هر مقدار که می‌خواهد می‌تواند از قسمت هرم (heap) حافظه بگیرد.البته این کار باید توسط دستورالعملهای مخصوص و بطور صریح (explicit) انجام شود.آزادسازی حافظه نیز باید توسط خود برنامه نویس انجام شود.تخصیص حافظه در heap می‌تواند کار ساده‌ای باشد. ما یک نشانگر (pointer) را در اولین مکان آزاد در heap می‌گذاریم، بلوک درخواست شده را از آنجا اختصاص می دهیم و نشانگر را به مکان آزاد بعدی می‌بریم.مشکل این روش این است که دیر یا زود فضای heap ما تمام می‌شود. اگر بلوک های حافظه پشت سرهم درخواست شوند و هیچ بلوکی آزاد نشود، حتی بزرگترین حافظه ها هم نهایتا پر می‌شوند.اگر بخواهیم بلوک های حافظه خالی شوند، یک سوال جدید پیش می‌آید و آن این است که &quot;چه کسی این وظیفه را دارد؟&quot;برنامه نویس؟؟برای انجام صحیح آزادسازی حافظه، برنامه نویس باید از طول عمر هر بلوک حافظه ، حتی در پیچیده ترین ساختارهای داده آگاه باشد و اطمینان حاصل کند که یک بلوک فقط یک بار و فقط پس از آخرین دسترسی آزاد می شود.بسیاری از برنامه نویسان با این آزادسازی صریح (explicit) حافظه، مشکلات جدی را تجربه کرده اند.آزاد کردن غلط خیلی زود حافظه منجر به ایجاد یک اشاره گر آویزان (dangling pointer) می شود.در قسمت های بعدی به ادامه مطالب می‌پردازیم.موفق باشید.منبع: Modern Compiler Design by Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, Koen Langendoen https://vrgl.ir/At9II </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Sun, 22 Nov 2020 18:16:43 +0330</pubDate>
            </item>
                    <item>
                <title>مدیریت حافظه در طراحی کامپایلر (قسمت 1)</title>
                <link>https://virgool.io/@MASOLTANI/memory-management-in-compiler-design-ezzotnldevjo</link>
                <description> هر برنامه برای اجرا به حافظه نیاز دارد. حافظه مورد نیاز شامل محلی برای نگه داری دستورالعملهای برنامه و همچنین فضایی برای نگهداری داده هایی است که مورد پردازش قرار می‌گیرند. داده ها ممکن است در قالب متغیرهایی ثابت در خود برنامه گنجانده شوند یا از منبعی دیگر (مثل کیبورد، فایل و غیره) وارد شوند.تمامی کامپایلرها و سیستم های زمان اجرا (Run-Time) از داده با حجم پویا (dynamic) استفاده می‌کنند.اندازه این داده ها از قبل مشخص نیست و مقدار فضای مورد نیاز آن را در زمان اجرا مشخص ‌می‌شود. به هر صورت هر برنامه باید فضای مورد نیازش تامین شود تا اینکه بتواند با سرعتی مناسب و به شیوه ای کارا اجرا شود.به طور کلی سه نوع تخصیص حافظه داریم:تخصیص حافظه ایستا (static memory allocatiom) : این حافظه ای است که به متغیرهای استاتیک و سراسری تخصیص داده می‌شود. حافظه ای که به این متغیرها تخصیص داده می‌شود در طول اجرا ثابت است و تا پایان برنامه پس گرفته نمی‌شود.تخصیص حافظه اتوماتیک (automatic memory allocation) : این حافظه ای است که به متغیرهای محلی و توابع داده می‌شود. حافظه مورد نیاز این نوع متغیرها هنگامی تخصیص داده می‌شود که تابع مورد نظر اجرا شود (در صورتی که تابع مورد نظر اجرا نشود حافظه ای به آن اختصاص داده نمی‌شود.) هنگامی هم که تابع مورد نظر اجرایش خاتمه یابد حافظه اختصاص یافته به آن آزاد می‌شود و به سیستم برگردانده می‌شود.تخصیص حافظه پویا (dynamic memory allocation) : این حافظه ای است که در حین اجرای برنامه، توسط خود برنامه درخواست می‌شود و به آن اختصاص داده می‌شود و باید توسط خود برنامه نیز آزاد شود در غیر اینصورت کماکان در اختیار خواهد بود.تفاوت اینگونه تخصیص حافظه با حالت اتوماتیک این است که کامپایلر در حالت اتوماتیک مسئول واگذاری حافظه است و این کار در برنامه به دستورالعمل خاصی نیاز ندارد درحالی که در مورد تخصیص پویا برنامه بصورت صریح (explicit) درخواست تخصیص حافظه می‌دهد (برای مثال توسط فراخوانی عملگر new)در هر دو حالت تخصیص ایستا و اتوماتیک، اندازه متغیر یا آرایه باید موقع کامپایل برنامه مشخص باشد.در خیلی از موارد این شیوه تخصیص حافظه مشکلی ایجاد نمی‌کند اما موقعیت هایی وجود دارد که در زمان کامپایل امکان دانستن حافظه مورد نیاز امکان پذیر نیست مخصوصا هنگامی که برنامه با منبع داده بیرونی مانند فایل روی دیسک و یا شبکه سروکار دارد.ممکن است قبل از اجرای برنامه اطلاعی از شمار رکوردهای ذخیره شده در فایل ورودی نداشته باشیم یا اینکه چند کاربر اینترنتی همزمان ممکن است به یک سرور لاگین کنند قابل پیش بینی نباشد.میتوان حد بالایی را برای این منظور در نظر گرفت اما این باعث اتلاف حافظه میشود و از مقبولیت و کارایی برنامه میکاهد. از طرفی دیگر، متغیرهای محلی که از راه تخصیص اتوماتیک در حافظه جای داده میشوند در قسمتی از حافظه قرار داده میشوند که به آن پشته یا stack میگویند. اندازه پشتهstack  در پیاده سازی های معمول کامپایلرها حداکثر 2 مگابایت است. اگر متغیر یا آرایه ای بزرگ بطور محلی (و یا تابعی) تعریف شود که حافظه مورد نیاز آن از اندازه پشته فراتر رود باعث خطا و توقف برنامه میشود. برای مثال دستور زیر در بیشتر سیستمها باعث خطای موقع اجرا و خرابی برنامه میشود.int main() {	 int array[1000000]; // allocate 1 million integers (4MB of memory) }برای رفع این مشکل، مکانیزم تخصیص پویا در نظر گرفته شده است که در ادامه به تفصیل آن می‌پردازیم.ساختار حافظه در برنامه هاهنگام شروع یک برنامه ، اکثر سیستم عامل ها چهار بخش حافظه زیر را برای آن برنامه اختصاص می دهند:در قسمت اول، دستورالعمل های برنامه واقع شده است (program instructions) =&gt; دستور العمل های ماشینیقسمت دوم شامل حافظه تخصیص یافته به متغیرهای سراسری و ایستاست. فضای استفاده شده توسط این دو قسمت در طول اجرای برنامه ثابت است و تغییری نمی‌کند.قسمت سوم: در قسمت stack حافظه به توابعی که اجرا می‌شوند داده می‌شود. به هر تابعی که فراخوانی می‌شود در بالای پشته فضایی جهت نگهداری متغیرهای محلی آن داده می‌شود(به علاوه آرگومان های ورودی توابع و مقدار خروجی آن ها). این تابع خود می‌تواند توابعی دیگر را فراخوانی کند و بدین ترتیب تابعی دیگر در بالای پشته قرار می‌گیرد.مکانی در پشته برای تابع  mainتخصیص داده شده است. به فضایی در پشته که به یک تابع تخصیص داده می‌شود یک Stack Frame  گفته می‌شود. چون تابع  main در بدنه خود تابعf  را فراخوانی کرده است، یک frame stack نیز به تابع f  در بالای پشته داده شده است.ادامه مطالب را به بخش های بعدی تخصیص خواهیم داد.موفق باشید.منبع: Modern Compiler Design by Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, Koen Langendoen https://vrgl.ir/3we1H </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Wed, 18 Nov 2020 07:54:46 +0330</pubDate>
            </item>
                    <item>
                <title>دستور العمل های پیکربندی دیواره آتش برای زامارین</title>
                <link>https://virgool.io/wptips/xamarin-firewall-configuration-instructions-bolydcpmqxga</link>
                <description>اگر شما بخواهید فرایند توسعه نرم افزار های مبتنی بر زامارین را درون سازمان و یا شرکتی انجام دهید که تمهیدات امنیتی سختی را در پیش گرفته‌اند احتمالا به مشکل برخواهید خورد.در ادامه به این موضوع می‌پردازیم و راهکار های حل این مشکل را بیان خواهیم کرد.برای اینکه زامارین بتواند به درستی کار کند نیاز به یکسری آدرس (Endpoint) نیاز دارد تا بتواند محتوای لازم را از آن جا بارگیری کند. این اعمال نظیر به روز رسانی زامارین، نصب پکیج های مختلف و ... می‌باشد. برای حل این مشکل باید یکسری از endpoint های مهم و ضروری را به مسؤل IT شرکت و یا سازمان بدهید تا دسترسی شما را به آن آدرس ها باز کند.آدرس هایی که باید اجازه دسترسی به آن ها داده شودنصب کننده زامارین (Xamarin Installer)برای نصب صحیح نرم افزار هنگام استفاده از آخرین نسخه نصب کننده (installer) زامارین، باید آدرس های شناخته شده زیر را اضافه کنید:xamarin.com (installer manifests) dl.xamarin.com (Package download location) dl.google.com (to download the Android SDK) download.oracle.com (JDK) visualstudio.com (Setup packages download location) go.microsoft.com (Setup URL resolution) aka.ms (Setup URL resolution)اگر شما از مک استفاده می‌کنید و با مشکلات نصب Xamarin.Android مواجه می‌شوید، مطمعن شوید تا macOS شما قابلیت دانلود جاوا را دارد.پکیج منیجر (NuGet)آدرسهای زیر برای دسترسی به NuGet باید اضافه شوند (Xamarin.Forms بصورت پکیج NuGet به پروژه شما اضافه می‌شود):www.nuget.org (to access NuGet) globalcdn.nuget.org (NuGet downloads) dl-ssl.google.com (Google components for Android and Xamarin.Forms)به روزرسانی هابرای اطمینان از بارگیری صحیح به روزرسانی های نرم افزار ، آدرس های زیر باید اضافه شوند:software.xamarin.com (updater service) download.visualstudio.microsoft.com dl.xamarin.comنماینده (Xamarin Mac Agent)برای اتصال Visual Studio به میزبان ساخت Mac با استفاده از Xamarin Mac Agent نیاز به باز بودن درگاه SSH است. به طور پیش فرض این پورت 22 است.منبع نوشته: https://docs.microsoft.com/en-us/xamarin/get-started/installation/firewall https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Thu, 05 Nov 2020 17:31:51 +0330</pubDate>
            </item>
                    <item>
                <title>نصب ویژوال استودیو 2019 بر روی Mac</title>
                <link>https://virgool.io/coderlife/install-visual-studio-2019-for-mac-sk4vsbaku33b</link>
                <description>نصب ویژوال استودیو 2019 بر روی Macبرای شروع نوشتن برنامه های محلی، چندسکویی دات نت بر روی macOS باید visual studio 2019 for mac را نصب کنید که در ادامه به آن می‌پردازیم:دانلود ویژوال استودیو برای مکنیازمندی هایک مک با سیستم عامل High Sierra ورژن 10.13 و یا به بالا.برای ساخت برنامه های زامارین iOS و یا macOS همچنین به موارد زیر نیاز دارید:برنامه ی Xcode ورژن 10.0 و یا به بالا. پیشنهاد می‌شود از آخرین نسخه پایدار استفاده کنید.اکانت اپل (Apple ID). اگر اپل آیدی ندارید میتوانید از اینجا برای خودتان بسازید. برای نصب و ورود به Xcode نیاز به apple id خواهید داشت.طریقه نصببرنامه‌ی نصب کننده (installer) را از اینجا دانلود کنید.هنگامی که دانلود به پایان رسید، بر روی فایل VisualStudioforMacInstaller.dmg کلیک کنید تا نصب کننده (installer) استقرار (mount) یابد. سپس با دوبار کلیک کردن بر روی لوگوی فلش برنامه را اجرا کنید:۳. ممکن است با یک پیغام مواجه شوید که برنامه از اینترنت دانلود می‌شود.۴. منتظر بمانید تا installer سیستم شما را چک کند:۵. یک پیغام مبنی بر این که شما سیاست های محرمانگی و لایسنس ها را قبول دارید و یا نه برای شما ظاهر می‌شود. بر روی لینک ها کلیک کنید آن ها را بخوانید و سپس اگر موافق بودید بر روی دکمه ادامه کلیک کنید:۶. لیست گزینه های قابل نصب برای شما نمایش داده می‌شود. کامپوننت هایی که می‌خواهید نصب شوند را انتخاب کنید:اگر نمی‌خواهید تمامی آن ها را نصب کنید، از جدول زیر کمک بگیرید:۷. پس از انتخاب بر روی دکمه نصب کلیک کنید.۸. سپس فرایند نصب شروع می‌شود و شما می‌توانید روند تکمیل نصب را مشاهده نمایید. شما باید برای دسترسی های مورد نیاز برنامه برای نصب، کلمه عبور خود را وارد کنید:۹. هنگامی که فرایند نصب اتمام یافت، ویژوال استودیو از شما می‌خواهد تا برای شخصی سازی برنامه وارد حساب کاربری خود شوید:منبع نوشته: https://docs.microsoft.com/en-us/visualstudio/mac/installation?view=vsmac-2019همچنین شما دوستان میتوانید برای  یادگیری آموزش جامع و رایگان زامارین به کانال من در یوتیوب مراجعه نمایید. https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Tue, 03 Nov 2020 17:21:12 +0330</pubDate>
            </item>
                    <item>
                <title>حذف زامارین از ویژوال استودیو (ویندوز)</title>
                <link>https://virgool.io/@MASOLTANI/uninstall-xamarin-from-visual-studio-f0142hllijwn</link>
                <description>این نوشته به شما کمک می‌کند تا زامارین را از روی ویژوال استودیو خود حذف کنید.حذف زامارین از ویژوال استودیو (ویندوز)ویژوال استودیو 2019 و ویژوال استودیو 2017با استفاده از برنامه installer می‌توان زامارين را حذف نمود.منوي ويندوز (Start Menu) را باز نموده و عبارت Visual Studio Installer را جستجو نموده و آن را باز کنید.همانند تصویر زیر بر روی گزینه Modify کلیک نموده تا بتوانید تغیرات مورد نیاز را اعمال نمایید.۳. در تب Workloads، تیک مربوط به انتخاب گزینه‌ی Mobile Development with .NET را بردارید. (در بخش Mobile &amp; Gaming)۴.  در گوشه پایین سمت راست، بر روی دکمه Modify کلیک کنید.۵. نصب کننده (installer) کامپوننت های de-select شده را حذف می‌نماید. (برای این کار ابتدا لازم است اگر ویژوال استودیو باز است آن را ببندید)با رفتن بر روی تب Individual Components می‌توانيد با جزييات بيشتری اين فرايند را انجام دهيد. مانند غيرفعال سازی Profiler و یا Workbooks.برای حذف کامل ویژوال استودیو از روی سیستمتان، گزینه‌ی Uninstall را انتخاب نمایید.نکته: اگر شما از چندین نسخه در کنار هم ویژوال استودیو مانند ویژوال استودیو 2019 و ویژوال استودیو 2019 (Preview) استفاده می‌کنید، حذف یکی از آن ها ممکن است بر روی عملکرد دیگری تاثیر بگذارد و یکسری از کارکرد ها را مختل کند. نظیر:Xamarin Profiler - Xamarin Workbooks/Inspector - Xamarin Remote iOS Simulator Apple Bonjour SDKاین مشکل با اجرای گزینه‌ی Repair در برنامه visual studio installer حل می‌شود.ویژوال استودیو 2015 و نسخه های قدیمی‌ترشما می‌توانید از طریق Control Panel فرایند حذف زامارین را انجام دهید. به مسیر Programs and Features یا Programs &gt; Uninstall a Program بروید. (مانند تصویر زیر)در کنترل پنل، تمامی موارد زیر را uninstall کنید.Xamarin Xamarin for Windows Xamarin.Android Xamarin.iOS Xamarin for Visual Studioسپس به مسیر زیر بروید و تمامی فایل های موجود در آن را نیز حذف کنید:C:\Program Files*\Microsoft Visual Studio 1*.0\Common7\IDE\Extensions\Xamarinدر مسیر زیر، دایرکتوری کش کامپوننت MEF ویژوال استودیو را حذف کنید:%LOCALAPPDATA%\Microsoft\VisualStudio\1*.0\ComponentModelCacheبرای حذف extension ها و یا ComponentModelCache به مسیر زیر بروید:%LOCALAPPDATA%\VirtualStoreوارد regedit شوید و به دنبال کلید زیر بگردید:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDllsبه جستجوی هر موجودیتی با ساختار زیر بگردید و آن را حذف کنید:C:\Program Files*\Microsoft Visual Studio 1*.0\Common7\IDE\Extensions\Xamarinبه جستجوی کلید زیر بپردازید:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\1*.0\ExtensionManager\PendingDeletionsهر موجودیتی که رابطه ای با زامارین دارد را حذف نمایید. مثلاً هر چیزی که شامل عبارات mono و یا xamarin باشد.محیط خط فرمان با دسترسی ادمین را باز کنید و دستور های devenv /setup و devenv /updateconfiguration را برای هر نسخه از ویژوال استودیو اجرا نمایید. مثلا برای ویژوال استودیو 2015 داریم:&amp;quot%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe&amp;quot /setup&amp;quot%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe&amp;quot /updateconfigurationمنبع نوشته: https://docs.microsoft.com/en-us/xamarin/get-started/installation/uninstalling-xamarin https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Mon, 02 Nov 2020 09:45:50 +0330</pubDate>
            </item>
                    <item>
                <title>نصب نسخه آزمایشی (Preview) زامارین در ویژوال استودیو 2019 (ویندوز)</title>
                <link>https://virgool.io/@MASOLTANI/installing-xamarin-preview-on-windows-aqskuzlg4ztn</link>
                <description>ویژوال استودیو 2017 و 2019 همانند نسخه های پیشین خود از نسخه های آلفا، بتا و stable پشتیبانی نمی‌کنند. در عوض دو گزینه پیش روی ما گذاشته‌اند:نسخه Release : معادل با نسخه Stable در ویژوال استودیو برای مک است.نسخه Preview : معادل با نسخه های Alpha و Beta در ویژوال استودیو برای مک است.نکته: برای اینکه بتوانید از ویژگی های آزمایشی (pre-release) استفاده نمایید لازم است تا از اینجا Visual Studio Preview installer را دانلود و نصب نمایید.فرایند نصب همانند نوشته های پیشین است. https://vrgl.ir/Y6JBX نسخه‌ی آزمایشی ویژوال استودیو ممکن است شامل ورژن های آزمایشی کارکرد های زامارین باشد، شامل:Xamarin.Forms Xamarin.iOS Xamarin.Android Xamarin Profiler Xamarin Inspector Xamarin Remote iOS Simulatorتصویر زیر هر دو گزینه‌ی Release و Preview را نشان می‌دهد. (به شماره با رنگ توسی دقت کنید. ورژن 15.1 نسخه Preview و نسخه 15.0 Release است)در حین انجام فرایند نصب شما می‌توانید یک نام مستعار را به این نسخه اختصاص دهید تا بتوانید از دیگر نسخه ها آن را تشخیص دهید.منبع نوشته : https://docs.microsoft.com/en-us/xamarin/get-started/installation/windows-preview https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Wed, 28 Oct 2020 16:04:24 +0330</pubDate>
            </item>
                    <item>
                <title>نصب زامارین در ویژوال استودیو 2019 (ویندوز)</title>
                <link>https://virgool.io/@MASOLTANI/installing-xamarin-in-visual-studio-2019-b8q9xlhbrgia</link>
                <description>ابتدا از اینجا نیازمندی های سیستمی را برای نصب چک نمایید.نصب زامارین در ویژوال استودیونصببا اینجام قدم های زیر زامارین را به ویژوال استودیو 2019 خود اضافه نمایید.از این صفحه اقدام به نصب یکی از نسخه های ویژوال استودیو مدنظرتان کنید.بر روی پکیج دانلود شده دابل کلیک کنید تا فرایند نصب آغاز شود.گزینه‌ی Mobile development with .NET را انتخاب نمایید.۴. اتصال به اینترنت خود را چک کنید و زمانی که آماده بودید بر روی دکمه نصب در پایین سمت راست صفحه کلیک کنید. (به دلیل دانلود پکیج های اندروید و جاوا نظیر jdk و sdk، بهتر است از سرویس های تغییر dns استفاده نمایید) منتظر بمانید تا فرایند دانلود و نصب پایان یابد.۵. زمانی که نصب اتمام یافت بر روی دکمه‌ی Launch کلیک نمایید تا ویژوال استودیو اجرا شود.افزودن زامارین به ویژوال استودیو 2019اگر در حال حاضر ویژوال استودیو را به صورت نصب شده بر روی سیستم خود دارید، می‌توانید با اضافه کردن زامارین به آن از طریق اجرای Visual Studio installer 2019 (میتوانید این عبارت را در ویندوز جستجو نمایید تا نمایان شود) زامارین را نصب نمایید. مراحل نصب همانند مراحل بالا می‌باشد.برای اطمینان از نصب شدن زامارین نیز شما می‌توانید با کلیک بر روی گزینه‌ی Help گزینه‌ی مربوط به زامارین را مشاهده نمایید. (به تصویر زیر توجه نمایید)شما همچنین می‌توانید با انتخاب گزینه Help &gt; About Microsoft Visual Studio و پیمایش به انتهای لیست پکیج های نصب شده مشاهده نمایید که زامارین نصب شده است یا خیر. (به تصویر زیر توجه نمایید)قدم بعدنصب زامارین در ویژوال استودیو این امکان را به شما می‌دهد تا برنامه نویسی اپلیکیشن ها را آغاز نمایید ولی برای ساخت (build) و اجرای آن ها بر روی امولاتور (emulator) و simulator و یا دستگاه موبایل نیاز به یکسری کار های دیگر است. در نوشته های بعدی به تفصیل آن ها خواهیم پرداخت.منبع نوشته: https://docs.microsoft.com/en-us/xamarin/get-started/installation/windows https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Wed, 28 Oct 2020 02:55:20 +0330</pubDate>
            </item>
                    <item>
                <title>زامارین چیست؟</title>
                <link>https://virgool.io/coderlife/%D8%B2%D8%A7%D9%85%D8%A7%D8%B1%DB%8C%D9%86-%DA%86%DB%8C%D8%B3%D8%AA-ahecabygzfah</link>
                <description>What is Xamarin?زامارین یک بستر متن باز مبتنی بر .NET، به منظور ساخت برنامه های مدرن و با پرفورمنس بالا برای iOS، اندروید و ویندوز است. زامارین یک لایه ی انتزاعی است که ارتباطات میان کد مشترک را به همراه کد های زیرین (مربوط به هر پروژه، اندروید، iOS و ...) مدیریت می‌کند. زامارین در یک محیط مدیریت شده اجرا می‌شود که اعمالی نظیر گرفتن حافظه (memory allocation) و garbage collection را آسان می‌کند.زامارین به توسعه دهندگان این امکان را می‌دهد تا حدود 90% از برنامه‌ی خود را میان پلتفرم های مختلف به صورت مشترک بنویسند. استفاده از این الگو به توسعه دهندگان این قابلیت را می‌دهد تا تمام منطق بیزنس (business logic) را با یک زبان کدنویسی کنند اما پرفورمنس، ظاهر و ... را بسته به سیستم عاملی که اپلیکیشن بر روی آن اجرا می‌شود دریافت کنند.اپلیکیشن های زامارین می‌توانند هم بر روی سیستم عامل ویندوز و هم بر روی mac نوشته شوند و به پکیج های اپلیکیشن های محلی (native) کامپایل شوند، مانند فایل .apk برای اندروید و یا یک فایل .ipa برای iOS.کامپایل و خروجی گرفتن اپلیکیشن های iOS در حال حاضر نیاز به یک ماشین MacOS دارد. برای اطلاعات بیشتر درباره‌ی نیازمندی های توسعه، اینجا را مشاهده کنید.زامارین برای چه کسانی استزامارین برای برای توسعه دهندگانی است که هدف های زیر را دنبال می‌کنند:کد مشترک، تست و منطق بیزنس واحد میان پلتفرم های مختلفنوشتن اپلیکیشن های چندسکویی با استفاده از C# و ویژوال استودیوزامارین چگونه کار می‌کندزامارین چگونه کار می‌کندتصویر بالا معماری کلی یک اپلیکیشن چندسکویی مبتنی بر زامارین را نشان می‌دهد. زامارین این امکان را به شما می‌دهد تا با نوشتن منطق اصلی برنامه‌تان در لایه‌ی مشترک (shared) با زبان سی شارپ خروجی های مختلف و مبتنی بر سیستم عامل های موبایل دریافت کنید. در اکثر اوقات چیزی حدود 80% تا 90% کد یکبار نوشته می‌شود.ویژگی های افزوده شدهزامارین قابلیت های محلی سیستم عامل ها را با هم ترکیب می‌کند و یک سری از ویژگی ها را نیز به آن ها می‌افزاید که شامل:1. بایندینگ کامل برای SDK های زیرین : زامارین بایندینگ ها را تقریبا برای تمامی SDK های پلتفرم زیرین نظیر اندروید و iOS را شامل می‌شود. علاوه بر آن، این بایندینگ ها strongly typed هستند، بدین معنی که به آسانی پیمایش و استفاده می‌شوند، و type checking قدرتمند زمان کامپایل را در حین زمان توسعه فراهم می‌کند. بایندینگ های strongly-typed منجر به خطا های اجرای کمتری و اپلیکیشن های با کیفیت تری می‌شود.2. جاوا، C ، C++ ، Objective-C : زامارین این امکان را به شما می‌دهد تا بتوانید مستقیماً از کتابخانه های نوشته شده به زبان های یاد شده استفاده کنید. بدین ترتیب شما این قدرت را دارید تا از طیف وسیعی از کتابخانه های third party بهره‌مند شوید.3. سازه های زبان مدرن : اپلیکیشن های زامارین با زبان سی شارپ نوشته می‌شوند، زبانی که مدرن است و پیشرفت های بسیار مهمی فراتر از جاوا و objective-c را به خود اضافه کرده است. ویژگی های نظیر لامبدا ها، برنامه نویسی موازی، LINQ، جنریک ها و ... .4. استفاده از (Base Class Library (BCL قدرتمند : اپلیکیشن های زامارین از .NET BCL استفاده می‌كنند، ‌مجموعه ای وسیع از کلاس ها که ویژگی های جامع و ساده سازی شده ای مانند XML قدرتمند، پایگاه داده، سریالیزیشن، IO، رشته و پشتیبانی شبکه و ... را دارند.5. محیط توسعه‌ی مجتمع شده‌ی مدرن (Modern Intagrated Development Enviroment) : زامارین از ویژوال استودیو، یک محیط توسعه‌ی مدرن که ویژگی هایی نظیر code auto completion، سیستم مدیریت پروژه و solution پیچیده، قالب های پروژه جامع، کنترل منبع مجتمع شده (integrated source control) و ... را دارد استفاده می‌کند.6. پشتیبانی چندسکویی موبایل : زامارین پشتیبانی چندسکویی انتزاعی را برای 3 پلتفرم مهم اندروید، iOS و ویندوز را پیشنهاد می‌کند. همچنین با استفاده از کتابخانه Xamarin.Essentials میتوان به API های محلی دستگاه های موبایل نظیر دوربین، location و ... دسترسی پیدا کرد. کد نویسی به این سبک هم باعث کاهش هزینه های توسعه و هم باعث صرفه جویی در زمان می‌شود.Xamarin.AndroidXamarin.Android اپلیکیشن های Xamarin.Android از سی شارپ به زبان میانی (Intermediated Language IL) و سپس در زمان اجرا (Just-in-Time (JIT به اسمبلی محلی کامپایل می‌شود. اپلیکیشن های Xamarin.Android شانه به شانه‌ی ماشین مجازی (Android Runtime (ART در درون محیط اجرای Mono اجرا می‌شوند. زامارین فضای نام های NET Binding. را به اندروید * جاوا فراهم سازی می‌کند. محیط اجرای Mono این فضاهای نام را از طریق (Managed Callable Wrappers (MCW فراخوانی می‌کند و Android Callable Wrappers ((ACW را برای ART فراهم می‌کند، این امکان به وجود می‌آید که هر دو محیط کد ها را از یکدیگری فراخوانی کنند.برای مطالعه‌ی بیشتر اینجا را مطالعه کنید.Xamarin.iOSXamarin.iOSاپلیکیشن های Xamarin.iOS کاملاً از سی شارپ (Ahead-of-Time (AOT به کد اسمبلی محلی ARM کامپایل می‌شود. زامارین از Selectors برای در معرض گذاشتن Objective-C به managed c#  و از Registrars برای در معرض گذاشتن C # مدیریت شده به Objective-C استفاده می کند. Selectorها و Registrarها مجموعا با هم &quot;بایندینگ‌ها&quot; نامیده می‌شوند و اجازه می‌دهند تا Objective-C و سی شارپ با هم تعامل کنند.برای مطالعه بیشتر اینجا را ببینید.Xamarin.Essentialsاین کتابخانه API های چندسکویی برای ویژگی های محلی دستگاه فراهم می‌کند. همانند خود زامارین فرم، زامارین اسنشیالز انتزاعی است که روند دستیابی به قابلیت های بومی را ساده می کند. همانند:Device info File system Accelerometer Phone dialer Text-to-speech Screen lockبرای مطالعه بیشتر اینجا را ببینید.Xamarin.Formsزامارین فرم یک چارچوب UI منبع باز است. زامارین فرم  به توسعه دهندگان این امکان را می دهد تا برنامه های Xamarin.iOS ، Xamarin.Android و Windows را از یک کد مشترک خروجی بگیرند. زامارین فرم به توسعه دهندگان اجازه می دهد تا رابط های کاربری در XAML با کد بک اند  C # ایجاد کنند. این رابط های کاربری به عنوان کنترل های بومی عملکردی در هر سیستم عامل ارائه می شوند. چند نمونه از ویژگی های ارائه شده توسط زامارین فرم عبارتند از:XAML user-interface languageDatabindingGestures Effects Stylingبرای مطالعه بیشتر اینجا را ببینید.منبع نوشته : https://docs.microsoft.com/en-us/xamarin/get-started/what-is-xamarin https://vrgl.ir/rddVE </description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Mon, 26 Oct 2020 14:08:06 +0330</pubDate>
            </item>
                    <item>
                <title>امنیت رایانش ابری</title>
                <link>https://virgool.io/@MASOLTANI/cloud-computing-security-btu3hlajsjwc</link>
                <description> https://youtu.be/PwzKDc3JSBU چکیدهامروزه با گسترش روز افزون تکنولوژی و تقاضا برای سرویس های مبتنی بر شبکه، نیاز به بستری برای انجام محاسبات و پردازش های برون سازمانی را پر رنگ‌تر می‌کند. از طرفی هزینه‌ی ایجاد مراکز داده‌ی درون سازمانی، شرکت‌ها را (حتی برخی از شرکت های بزرگ) به سمت استفاده از مراکز داده‌ی شخص ثالث سوق می‌دهد. اما مهمترین چالش این شرکت های برای رفتن به سوی استفاده از این سرویس‌ها، موضوع امنیت است. ما در این مقاله ابتداً به توضیح مختصری درباره‌ی ابر می‌پردازیم و سپس مفاهیم و چالش های اصلی‌ یعنی امنیت رایانش ابری را مطرح می‌کنیم.Cloud Computing Securityمقدمهرایانش ابری نوعی سیستم موازی و توزیعی از رایانه های متصل بهم و مجازی است که به صورت پویا و بر اساس توافقات سطح سرویس و به عنوان یک یا چند منبع محاسباتی مجتمع ارائه می شود.رایانش ابری به معنای انتقال پویای منابع و قابلیتهای فناوری اطلاعات به عنوان سرویس روی اینترنت است.موسسه ی ملی استانداردها و تکنولوژی (NIST)، رایانش ابری را به صورت زیر تعریف میکند:رایانش ابری مدلی است برای فراهم کردن دسترسی آسان بر اساس تقاضای کاربر از طریق شبکه به مجموعه‌ای از منابع رایانشی قابل تغییر و پیکربندی (مثل: شبکه‌ها، سرورها، فضای ذخیره‌سازی، برنامه‌های کاربردی و سرویس‌ها) که این دسترسی بتواند با کمترین نیاز به مدیریت منابع یا نیاز به دخالت مستقیم فراهم‌کننده سرویس به سرعت فراهم شده یا آزاد (رها) گردد.این مدل رایانش ابری از ۵ مشخصه (ویژگی) اصلی، ۳ مدل خدماتی و ۴ مدل گسترش (استقرار) تشکیل شده‌است.پنج مشخصه اصلی شامل: تجمیع منابع، دسترسی وسیع از طریق شبکه، انعطاف پذیری سریع، سرویس خودکار مبتنی بر تقاضا و سرویس اندازه گیری شده می باشند.شکل 1 مدل های رایانش ابریهمانگونه که در شکل 1 نیز مشاهده می‌نمایید مدل های رایانش ابری به دو دسته مدل های خدمات و مدل های استقرار دسته بندی می‌شوند.حال به تشریح مدل های استقرار می‌پردازیم.شکل 2 مدل های استقرارهمان گونه که در شکل 2 نیز مشاهده می‌کنید، مدل های استقرار به 4 دسته ابر های عمومی، ابر های خصوصی، ابر های ترکیبی و ابر های انجمنی تقسیم می‌شوند که در ادامه به تعریف هریک از آن ها می‌پردازیم.ابر های عمومی: شاید بارز ترین نمونه‌ی آن سرویس فضای ذخیره سازی گوگل باشد بدین معنی که شما از هر نقطه‌ی جغرافیایی میتوانید به فایل هایتان از طریق شبکه‌ی اینترنت، دسترسی پیدا کنید. این نوع ابر ها را شرکت های نظیر گوگل و آمازون و مایکروسافت و به تازگی شرکت هایی در ایران ارایه می‌کنند. در این نوع ابر های بحث هزینه بسیار پایین است ولی مهمترین چالش موضوع امنیت داده های سازمان و اعتمادی که سازمان ها باید به این شرکت ها بکنند است.ابر های خصوصی: منظور از ابر های خصوصی همان مراکز داده‌ی سنتی است که شرکت‌ ها برای خودشان تاسیس و راه اندازی می‌کنند و خیلی وارد مفهوم رایانش ابری نمی‌شوند. در این مراکز داده چالش های مختلف از جمله چالش های امنیتی بر عهده‌ی خود سازمان می‌باشد و باید متخصصینی در حوزه های مختلف مربوط به مرکز داده را استخدام کند.ابر های ترکیبی: اگر سازمانی تصمیم بگیرد صرفا برای داده های بسیار حساس خود مرکز داده ای ایجاد نماید و برای دیگر پردازش ها و اطلاعات از ابر های عمومی استفاده نماید، مفهوم ابر های ترکیبی به وجود می‌آید.ابر های انجمنی: این نوع ابر ها در مراکزی مثل بانک ها که بخشی از پردازششان مشترک و یکسان است بسیار کارآمد است.در ادامه به مدل های سرویس که در شکل 3 نیز نمایش داده شده اند می‌پردازیم.شکل 3 مدل های سرویس (خدمات)زیرساخت به عنوان سرویس: در این لایه، ما از شرکت فراهم کننده ابر، یک زیرساخت دریافت میکنیم بدین معنی که سرور خام در اختیار ما قرار میگیرد و خودمان بر اساس سیاست های تعریفی‌مان، پلتفرم (ویندوز، لینوکس،...) را نصب کرده و کار های مورد نظر را انجام میدهیم. این لایه همانند روش سنتی است که خیلی وارد مفاهیم پردازش ابری نمی‌شود.بستر به عنوان سرویس: در این لایه که یک لایه بالاتر از لایه ی قبلیست، ما از شرکت فراهم کننده ابر، یک بستر دریافت میکنیم. مثلا یک بستر پایگاه داده mysql و بر روی آن کارهایمان را انجام می‌دهیم.نرم افزار به عنوان سرویس: در این لایه که بر روی دو لایه ی قبلی قرار دارد، ما تحت عنوان کاربران نهایی تعریف می‌شویم و صرفا از نرم افزار مربوطه نقش مصرف کننده را داریم. مانند گوگل درایو.هر چیزی به عنوان سرویس: از جهت این که موضوع رایانش ابری بسیار گسترده است، لایه دیگری تحت عنوان هرچیزی به عنوان سرویس[1]تعریف شد. مانند پایگاه داده به عنوان سرویس[2]و یا ... .[1] XaaS[2] Database as a Serviceسرویس های ابری همگی یکسری ویژگی های مشترک دارند که در شکل 4 به نمایش در آمده است. در ادامه به توضیح این ویژگی های می‌پردازیم.شکل 4 تعریف قالب ابری مبتنی بر NISTمبتنی بر عرضه و تقاضا[1]: یعنی بتوانیم منابع پردازشی مان را بر حسب نیازمان درخواست کنیم.دسترسی شبکه با کارکرد بالا[2]: بدین معنی است که تمامی سرویس های ابری باید بتوانند فارغ از موقعیت مکانی قابل دسترسی باشند.قابلیت ارتجاعی سریع[3]: بدین معنی که بتوانیم منابع پردازشی‌مان را فورا کم یا زیاد کنیم.سرویس اندازه گیری شده[4]: یعنی در انتهای دوره ی زمانی، یک ساز و کار دقیق وجود داشته باشید تا بتواند میزان مقداری که باید پرداخت کنیم را مبتنی بر میزان سرویسی که استفاده کرده‌ایم مشخص کند.استخر منابع[5]: بدین معنی است که یک دید انتزاعی از منابع نامحدود وجود داشته باشد تا در مواقع مورد نیاز بتوانیم به راحتی و با خاطر اطمینان منابع مورد نیازمان را افزایش دهیم.[1] On Demand Self-Service[2] High Performance Network Access[3] Rapid Elasticity[4] Measured Service[5] Resource Poolingرایانش ابری برای سازمان ها و کاربران از نظر مصرف سرمایه و پس‌انداز در هزینه های عملیاتی مزایای زیادی دارد.علیرغم وجود این مزایا، معایبی نیز به همراه دارد که محدودیت هایی در رایانش ابری ایجاد کرده است.مهم ترین موضوع امنیت است و عدم وجود آن منجر به تاثیر در پردازش ابری و در نتیجه‌ی آن آسیب های شخصی و مالی می‌شود.این تحقیق بر روی چالش های امنیتی که موجودیت های ابر با آن روبرو هستند، می‌پردازد.این موجودیت ها شامل:ارایه دهندگان خدمات ابریصاحبان اطلاعاتکاربران ابرمی‌شود.2.چالش های امنیتیدر رایانش ابری، کاربران از محل دقیق اطلاعات حساس خود اطلاعی ندارند، زیرا ارایه دهندگان خدمات ابر، مراکز داده ی خودشان را در مکان های توزیع شده ی جغرافیایی نگه داری می کنند که منجر به چندین چالش و تهدید های امنیتی می شود.به دلیل گسترش سریع تهدیدات از طریق محیط های مجازی[1] تکنیک های امنیتی سنتی مانند دیواره های آتش، آنتی ویروس ها، سیستم های تشخیص نفوذ[2]امنیت کافی در سیستم های مجازی را ارایه نمی دهند.[1] Virtual Machine (VM)[2] IDS1.2 تهدیدات و خطرات رایانش ابریدر یک مقاله انتشار یافته توسط واکر، به 12 تهدید امنیتی مهم اشاره شده است که نقض داده مهمترین موضوع امنیتی تشخیص داده شده است.جدول 1 رتبه بندی تهدیدات حوزه‌ی رایانش ابری بر اساس مقاله‌ی واکر2-2 امنیت در ابر رمزنگاری شدهاستفاده از ابر های عمومی اگرچه مزایای زیادی دارد ولی خطرات امنیتی زیادی نیز به دنبال دارد.شکل 5 معماری یک ابر رمزنگاری شدهشیوه‌ی کار در ابر های رمزنگاری شده همانطور که در شکل 5 نیز مشاهده می‌کنید بدین ترتیب است که در ابتدا صاحب اطلاعات[1]فایل های رمزنگاری شده را بر روی ابر قرار می‌دهد و سپس از یک مجرای امن کلید و گواهینامه های امنیتی را به سمت مشتری[2]هایش می‌فرستد. حال مشتری میتواند فایل ها را از ابر دانلود کرده و با استفاده از کلید و گواهینامه های امنیتی دریافت شده از سوی صاحب اطلاعات آن ها را رمزگشایی کند.محرمانگی یعنی اطلاعات مهم و حساس را از افراد غیر مخفی کنیم.برای این کار 3 مکانیزم وجود دارد:• رمزنگاری: متن خالص[3]را با استفاده از ریاضیات رمز میکند.• کنترل دسترسی: مشخص میکند که افراد به چه بخش های مشخصی از اطلاعات و یا سیستم میتواند دسترسی پیدا کند.• احراز هویت: مشخص می کند هر فرد احراز هویت شده چه اقداماتی را میتواند انجام دهد.یکپارچگی یعنی این که یک سیستم و یا داده نمیتواند توسط افراد احراز هویت نشده تغییریابد.[1] Data Authority[2] Consumer[3] plain textمکانیزم های حفاظت از یکپارچگی معمولا سعی میکنند در وهله اول از تغییر و یا دست کاری جلوگیری کنند و یا پس از نفوذ آن را تشخیص دهند.3. چالش های امنیتی که موجودیت های ابر با آن مواجه اندهمانطور که در شکل 6 نیز مشاهده می‌کنید، هرچه ریشه های درخت قوی‌تر باشد ما محصولات (برگ) های بهتر و با کارکرد مناسب‌تری را نیز خواهیم داشت.پروتکل های TLS [1] و SSL[2] ، برای انتقال ایمن داده های ترسیم شده در تنه درخت استفاده می شوند.[1] Transport Layer Security[2] Secure Socket Layerشکل 6 درخت امنیت3. چالش های امنیتی که موجودیت های ابر با آن مواجه اندهمان طور که در شکل 7 نیز مشاهده می‌کنید چالش های امنیتی مشخص شده در درخت امنیتی بر اساس 3موجودیت اساسی طبقه بندی شده است.شکل 7 طبقه بندی مشکلات امنیتی4. سطح ارتباطاتمسائل مربوط به سطح ارتباطات در نتیجه به اشتراک گذاری منابع مشترک ، زیرساخت ها و غیره در بین ماشین های مجازی که هدف حمله هستند بوجود می آیند.مسایل امنیتی این سطح به سه دسته:شبکهمیزبانکاربردتقسیم می‌شوند.4-1 امنیت در سطح شبکهمهمترین موضوع امنیتی در سطح شبکه بحث محرمانگی و یکپارچگی داده است.مسایل مربوط به امنیت سطح شبکه عبارتند از:Domain Name Server (DNS) AttacksPrefix Hijacking in Border Gateway      ProtocolIssue of Reused IP AdressingSniffer Attacks…4-1 امنیت در سطح کاربرد[1]برنامه ها به امنیت نیاز دارند تا از ایجاد موقعیت ها برای حمله کنندگان به منظور دسترسی کامل گرفتن و اعمال مخربانه نظیر تغییر فرمت جلوگیری کنند.مواردی که در این سطح باید مورد توجه قرار گیرد عبارتند از:§ Cookie Poisoning§ DDoS§ Hidden Field Manipulation§ Dictionary Attack§ Google Hacking§ CAPTCHA Breaking§ ...[1] Application5. سطح محاسباتاجرای مفهوم مجازی سازی در ابر یکی از بزرگترین چالش های سطح محاسباتی است.5-1 چالش های مجازی سازیانتزاع منابع فیزیکی مجازی سازی است.همانطور که در شکل 8 نیز به خوبی نمایش داده شده است، برخی از دسته بندی های رایج مجازی سازی عبارتند از: مجازی سازی برنامه ، مجازی سازی دسک تاپ[1]، مجازی سازی شبکه ، مجازی سازی سرور و ماشین[1] Desktopشکل 8 لایه های مجازی سازی5-1-1 چالش امنیتی سطح ماشین مجازی (لایه مجازی[1])همانطور که در شکل 9 نیز مشاهده می‌کنید، ماشین های مجازی چرخه زندگی خود را از طریق حالت های مختلف مانند ایجاد ، در انتظار ، طولانی شدن ، دویدن ، تعلیق ، از سرگیری ، خاموش کردن ، خاموش کردن ، تخریب و غیره انجام می دهند.[1] Virtual Layerشکل 9 مشکلات امنیتی سطح ماشین مجازیماشین های مجازی، چرخه زندگی خود را از طریق حالت های مختلف مانند ایجاد ، در انتظار ، طولانی شدن ، دویدن ، تعلیق ، از سرگیری ، خاموش کردن ، خاموش کردن ، تخریب و غیره انجام می دهند.VM Cloningایجاد یک نسخه از یک VM  موجود با همان شناسه (ID)، نام رایانه ، آدرس پروتکل اینترنت (IP)  و آدرس کنترل دسترسی رسانه (MAC) ، VM  کلونینگ نام دارد.ماشین مجازی اصلی (والد) منابع مجازی را با  VM cloned به اشتراک می گذارد. هرگونه تغییر در والدین پس از کلونینگ ، روی VM  کلون شده و برعکس تأثیر نمی گذارد. اگر هر دو VM را در یک شبکه اجرا کنید ، مشکلات امنیتی در نتیجه تکثیر آدرس IP ایجاد می شود.VM Isolationبرای اطمینان از امنیت و ایمنی ،  VM ها باید جدا (ایزوله) باشند.جدا سازی VM ها امنیت VM را تضمین می کند ، حتی اگر یک VM دیگر در همان میزبان فیزیکی به خطر بیفتد.اما جدا سازی (ایزوله کردن) VM ها زمانیکه hypervisor به خطر بیوفتد، بهترین راه حل نیست.شکست در ایزوله سازی به دلیل استفاده مجدد از آدرس های IP در بین VM منجر به بروز مشکلات و نیاز به رفع آن می شود. این ممکن است به تخریب کل سیستم منجر شود.VM migrationماشین مجازی می تواند به راحتی در جهت بهبود استفاده از اثربخشی منابع از یک سرور به سرور دیگر منتقل شود.این فرآیند می تواند برای دستیابی به تعادل بار و صرفه جویی در انرژی به صورت خودکار انجام شود.این ماهیت پویا مهاجرت منجر به خطرات امنیتی ، نه تنها به VM مهاجر ، بلکه برای میزبان جدید VM نیز می شود.دو نوع مهاجرت وجود دارد: زنده و غیر زندهدستیابی به مهاجرت زنده در مقایسه با مهاجرت غیر زنده یک کار پیچیده است.VM Escapeماشین مجازی ها معمولاً در محیط های جدا از هم و در محیط میزبان اجرا می شوند.در امنیت رایانه ، فرار ماشین مجازی فرایند شکستن یک ماشین مجازی و تعامل با سیستم عامل میزبان است.هرگونه تلاش VM برای تعامل مستقیم با هایپروایزر از طریق مداخله در یک محیط جدا شده منجر به Escape VM می شود.بنابراین برای جلوگیری از هرگونه مشکل در کل راه اندازی مجازی ، باید این موضوع به درستی بررسی شودVM rollbackماشین مجازی را می توان به حالت قبلی خود برگرداند.این برگرداندن ممکن است شامل ویروس و کرم هایی باشد که در حالت قبل وجود داشتند.بنابراین ،  VM هنگام پشتیبانی از rollback می تواند دوباره در معرض آسیب پذیری های امنیتی قرار گیرد.به همین دلیل بهتر است لاگ های مراحل مختلف را نگهداری کنیم.VM Hopping/VM Hyper jumpsدسترسی پیدا کردن به VMدیگری از طریق آسیب پذیری هایپروایزر است.این مسئله به حملات از راه دور و بدافزارها اجازه می دهد تا با پرش از یک VM  بهVM  دیگری، بر روی بسته های میان افزار روی میزبان اصلی کنترل پیدا کنند.غالباً آسیب پذیرترین VM ها به عنوان نقطه شروع حملات بیشتر به سیستم شناخته می شوند.تحقیقات انجام شدهتوصیه این است که برای حفظ استحکام سیستم ، بسته های با سرعت بالا نباید به ماشین مجازی ارسال شود.جدول 2 تحقیقات انجام شده5-1-2 سطح هایپروایزر[1]شین ، استفاده از یک هایپروایزر را برای نظارت بر چرخه حیات ماشین مجازی‌ها، که شامل ایجاد ، تعلیق ، از سرگیری و مهاجرت است، عنوان کرد.یک هایپروایزر فقط یک کد سطح پایین است که جدا از یک سیستم عامل برای اجرای مستقل شناخته شده است.هایپروایزر مجازی سازی را از طریق جمع کردن منابع و چند اجاره‌ای[2]امکان پذیر میکند.متداول ترین رویکرد های مجازی سازی مبتنی بر هایپروایزر، پارا مجازی سازی، مجازی سازی کامل و مجازی سازی به کمک سخت افزار است.مجازی سازی مبتنی بر هایپروایزر البته از یک نقطه شکست قطعی رنج میبرد.چالش های امنیتی سطح هایپروایزر[3]در شکل 9 این چالش ها مطرح شده‌اند.[1] Virtualization layer[2] multi- tenancy[3] Hypervisorشکل 10 مشکلات امنیتی سطح هایپروایزرچالش های امنیتی سطح سخت افزار[1]لایه سخت افزاری از منابعی مانند پردازنده، رم و ... تشکیل شده است که توسط لایه مجازی سازی در میان ماشین مجازی ها به اشتراک گذاشته می شود.اگر از طریق آسیب پذیری های هایپروایز یک مهمان موفق به غلبه بر اجزای سخت افزار شود برای دیگر ماشین مجازی ها نیز مشکل پیش می آید.سیستم برای کاهش مشکلات موجود در لایه فیزیکی باید از یک مکانیزم احراز هویت قوی در لایه مجازی استفاده کند.مفهوم سیستم تشخیص نفوذسیستم تشخیص نفوذ ابزار امنیتی است که هدف آن تقویت امنیت اطلاعات و سیستمهای ارتباطی از طریق نظارت شبکه یا فعالیتهای سیستم، شناسایی نفوذها و تهیه گزارش می باشد.سیستم های تشخیص نفوذ با مطالعه رفتار کاربران و اطلاعات موجود در حملات، رفتارهای غیر نرمال را تشخیص می دهند.این سیستم ها معایب و مزایای خاص خود را دارند که با تشخیص و یا پیشگیری از حملات نقش مؤثری در تامین امنیت دارند.سیستم های فعال تشخصی نفوذ، سیستم های جلوگیری از نفوذ[2]هستند که علاوه بر نظارت ترافیک شبکه می توانند از ورود ترافیک ناهنجار به شبکه جلوگیری و تهدیدها را مسدود یا متوقف سازند.برخلاف سیستم های تشخیص نفوذ که فقط نفوذ را شناسایی می کند،  IPSها قادر به جلوگیری از نفوذ، ارسال هشدار، کاهش بسته های مخرب و انسداد ترافیک آی‌پی معیوب نیز می باشد.روشهای تشخیص در سیستم های تشخیص نفوذروش تشخیص در سیستمهای تشخیص نفوذ برحسب تکنولوژیهای تحلیلی، به دو روش مختلف است: تشخیص ناهنجاری - روش مبتنی بر امضادر مدل مبتنی بر تشخیص ناهنجاری یک پروفایل معمولی با داده هایی درباره فعالیتهای سیستم ساخته شده و این پروفایل برای شناسایی الگوی فعالیتها استفاده می شود.همچنین تصمیم ها بر اساس پروفایل شبکه نرمال یا رفتار سیستم و با استفاده از تکنیکهای یادگیری ماشین یا آماری انجام می شود.از طرف دیگر اگر در این روش حمله ای رخ دهد با بررسی اینکه آیا انحراف بین رویداد رخ داده و رفتار نرمال، بیشتر از آستانه از پیش تعریف شده است یا نه تصمیم می گیرد.این رویکرد می تواند حملات دیده نشده قبلی را نیز تشخیص دهد.در روش مبتنی بر امضا، سیستم های تشخصی نفوذ، شبکه و فعالیت سیستم را با الگوی الگوریتم تطبیق، بررسی می کنند.این روش الگوهایی از حملات شناخته شده برای پیدا کردن حملات در نظر میگیرد. پس، لازم است پایگاه داده امضاها برای نمایش حملات شناخته شده پیشرفته ساخته شود.روش مبتنی بر امضا علیرغم کارایی، در مقابل حملات جدید و ناشناخته مؤثر نمی باشدهر یک از این روشها ضعف ها و قوت های خود را دارند. سیستم های مبنی بر امضا نرخ مثبت کاذب[3]خیلی پایینی دارند.یعنی نرخ خطاهای بدون نفوذی که اشتباها تشخیص داده شده در آنها بسیار کم است.همچنین این سیستمها در شناسایی حملات ناشناخته و مبهم ناتوان هستند.الگوریتم الگوی تطبیق نیز در این مدل با رشد نمایی انواع مختلف حملات، قابل اعتماد نیست.از طرف دیگر، سیستم های مبنی بر ناهنجاری تعداد زیادی مثبت کاذب تولید می کنند.به همین دلیل پیشنهاد می شود از هر دو شیوه در یک سیستم تشخیص نفوذ استفاده شود.مقایسه سیستم های تشخیص نفوذ اخیردر جدول 3 برخی سیستم های تشخیص نفوذ اخیر که پردازش اطلاعات یا تشخیص نفوذ را در ابر انجام می دهند، بهمراه ویژگیهای مهم، تکنیکها و حملات قابل تشخیص توسط آنها بررسی شده است.[1] Hardware Level[2] IPS[3] False Positiveجدول 3 سیستم های تشخیص نفوذبحثامروزه با نرخ بالای دسترسی به شبکه، ارائه خدمات زیاد و آسیب های حملات توزیع شده، به یک سیستم های تشخیص نفوذکارآمد و قابل اطمینان نیاز داریم.سیستم های تشخیص نفوذهای امروزی برای حجم زیاد ترافیک در شبکه های با مقیاس بزرگ مناسب نبوده و طبیعت شبکه های ابری، ناهمگون و توزیع شده می باشد.لذا سیستم های تشخیص نفوذ باید مقیاس پذیر باشند تا بصورت کارآمد حجم زیاد گره های شبکه را مدیریت کنند و با اضافه شدن نودها در ابعاد بزرگ مقیاس پذیر باشند.جدول نشان می دهد که در سیستم های تشخیص نفوذ مقیاس پذیر از روش تشخیص مبتنی بر امضا استفاده شده است.روش مبتنی بر امضا دارای ویژگی های زیر می باشد:سیستم های تشخیص نفوذ مبتنی بر امضا درصد خطا و اشتباه کمی در یافتن حملات دارند.تصمیم گیری در سیستم های تشخیص نفوذ مبتنی بر امضا علایم هشدار را بر حسب تشخیص امضاها انجام می دهد و نیازی به مطالعه ترافیک شبکه ندارد.در سیستم های تشخیص نفوذ مبتنی بر امضا، هر امضا نیاز به یک مکان در دیتابیس دارد و هر بسته باید با تمامی این امضاها در دیتابیس مقایسه شود.بنابراین هزینه پردازشی و حافظه ای بالا یکی از مشکلات این سیستم ها استمدل پیشنهادیدر مورد مساله ذخیره سازی امضا ها در دیتابیس و هزینه های پردازشی بالای آن از تکنیک تشخیص ناهمگون بهره خواهیم برد.به هر سیستم تشخیص نفوذ یک دیتابیس کوچک امضا اختصاص داده شده است که با دیتابیس مرکزی که شامل تمامی امضاها است در ارتباط است. همانظور که در شکل 11 نیز مشاهده می‌کنید، در این ساختار نحوه انتخاب امضاها و قوانین در دیتابیس با توجه به دفعات تکرار استفاده از آنها است و امضاهایی که دفعات تکرار استفاده آنها کم است با امضاهای پرتکرار جایگزین می شوند.شکل 11 مدل پیشنهادینتیجه گیریمهمترین چالش رایانش ابری تضمین امنیت داده های موجود می باشد.در حال حاضر حفاظت از کارکرد ابر در اینترنت یک چالش بزرگ محسوب می شود و راه حل های بسیاری برای امنیت داده ها در رایانش ابری به کارگرفته می شود.تاکنون روش های گوناگونی جهت مقابله با حمله های احتمالی ابداع شده اند به نحوی که ارائه دهندگان ابر از بابت حفاظت داده های شخصی و سازمانی کاربران آسوده باشند. اما این روش ها کامل نیستند.سیستمی که بتواند در مقیاس های بزرگتر به طرز مناسب و کارآمد کار کند، مقیاس پذیر است. این ویژگی باعث می شود عملکرد کلی با افزودن منابع سخت افزاری افزایش یابد.سیستمهای تشخیص نفوذ مقیاس پذیر می توانند در محیط های بزرگتر و با سخت افزار بیشتر نیز کار کنند.در سیستم تشخیص نفوذ پیشنهادی با بهره گیری از تکنیک تشخیص ناهمگون هزینه پردازشی و حافظه ای کاهش یافته و به دلیل مقیاس پذیر بودن از سرعت بالایی نیز برخوردار خواهد بود.منابع:مقاله:[1] N Subramanian, A Jeyaraj &quot;Recent security challenges in cloud computing&quot; - Computers &amp; Electrical Engineering, 2018 – Elsevier (In English).[2] S Singh, YS Jeong, JH Park &quot;A survey on cloud computing security: Issues, threats, and solutions&quot; - Journal of Network and Computer …, 2016 – Elsevier (In English).[3] Gupta, P. And Kaliyar, P. ( 0 ). &quot;History Aware Anomaly Based IDS for Cloud IaaS&quot;. INTERNATIONAL JOURNAL OF COMPUTERS &amp; TECHNOLOGY(In English).کتاب:[4] Cloud Computing Security Foundations and Challenges by John R. Vacca.منابع الکترونیک:[5] https://cert.sharif.edu</description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Fri, 24 Jul 2020 18:03:09 +0430</pubDate>
            </item>
                    <item>
                <title>Microsoft Network Manager</title>
                <link>https://virgool.io/@MASOLTANI/microsoft-network-manager-fkyg8bzzp71k</link>
                <description>شبکه کامپیوتریمجموعه ای از کامپیوتر های مستقل و متصل به هم که میتوانند تبادل اطلاعات و اشتراک گذاری منابع را انجام دهند.منابع معمولا داده، سرویس های شبکه و دیوایس ها (پرینتر و ...)هستند.اجزای شبکه های کامپیوتریهمانگونه که کامپوتر از اجزاء مختلفی ساخته شده است، شبکه های کامپیوتری هم اجزاء (component) های مخصوص خود را دارند.همانگونه که کامپیوتر و اجزاء آن (cpu, ram,…) برای اغلب مردم آشنا است، اجزاء شبکه (networking devices, networking media, Network operating systems) هم برای اغلب متخصصان IT آشنا است.سیستم عامل شبکهیک سیستم عامل شبکه (Network Operating System àNOS) نرم افزاری است که توانایی مدیریت، نگهداری و فراهم کردن منابع شبکه را دارد.علاوه بر آن، NOS توانایی اشتراک گذاری فایل ها و برنامه ها، ایجاد سرویس وب، مدیریت دسترسی به منابع، اداره کردن کاربران و کامپیوترها، فراهم کردن ابزار هایی برای پیکربندی و نگهداری و فراهم کردن منابع به مانند دیگر کاربرد های مرتبط با منابع شبکه را دارد.NOSدر هنگام مدیریت منابع شبکه رایانه ای یک مؤلفه مهم است.امروزه، نسخه های ویندوز سرور ، لینوکس سرور و  macOS سرور همه NOS  به حساب می آیند زیرا همه آنها قادر به ارائه خدمات شبکه هستند.مفهوم کلاینت و سروراگر این طور در نظر بگیریم که در یک شبکه منابع هدف اصلی ما هستند، در این صورت کلاینتها همواره برای دسترسی به منابع درخواست میدهند و از طرفی سرورها مسئول فراهم کردن منابع برای کلاینت ها و همچنین مدیریت دسترسی آن ها به منابع هستند.هم سرورها و هم کلاینت ها نقش مهمی را در شبکه های کامپیوتری دارند. در تصویر روبرو سرور مسئول تامین دسترسی کلاینت ها به پرینتر است.میزبان و گره ها - hosts and nodesبا این که هاست‌ها میتوانند به عنوان یک node در نظر گرفته شوند ولی node ها نمیتوانند به عنوان host در نظر گرفته شوند.یک میزبان(host) هر دستگاهی است که یک آدرس IP به کارت شبکه‌اش اختصاص داده شده است و می‌تواند منابع بر روی شبکه را درخواست بدهد و یا فراهم کند.معمولا کلاینت ها، سرورها، روترها به عنوان host در نظر گرفته می شوند.رابط شبکهرابط شبکه سرور را قادر می سازد به شبکه یک سازمان و اینترنت متصل شود.سرورها معمولاً بیش از یک رابط شبکه دارند.هرچه سرعت اتصال شبکه سرور سریعتر باشد ، داده های بیشتری نیز ارسال می شود که سرور می تواند از طریق شبکه ارسال و دریافت کند.اگرچه گره (node) هر دستگاهی است که بتواند منابع شبکه را دریافت و انتقال دهد ولی هیچ آدرس IP به رابط شبکه‌اش اختصاص نمی‌یابد.گره ها دارای رابط شبکه ای (network interface) هستند که برای مدیریت آنها استفاده می شود.کامپیوتر ها و فایل سرور ها به عنوان میزبان (host) در نظر گرفته می شوند در حالی که سوییچ ها نقش گره (Node) را دارند.معماری شبکه های کامپیوترییک معماری شبکه های کامپیوتری یک طراحی شبکه را نمایان میکند که چگونه اجزاء مختلف شبکه باهم ارتباط برقرار میکنند.معماری شبکه در واقع چارچوبی (framework) است که جنبه های مختلفی از جمله توپولوژی فیزیکی و منطقی ، مؤلفه های شبکه ، پروتکل های ارتباطی و اصول و رویه های عملیاتی آن را در بر می گیرد.در میان معماری های شبکه، معروف ترین آن‌ها نقطه به نقطه P2P و کلاینت سروری است.معماری نقطه به نقطه P2Pشبکه P2P که گاها به عنوان شبکه workgroup هم شناخته میشود، شبکه ای است که میزبان ها (hosts) از نقش از پیش تعیین شده ای ندارند.در عوض آن ها نقش هایشان را از کلاینت به سرور و برعکس همواره بر اساس فعالیتشان در شبکه تغییر میدهند.برای مثال اگر PC1 منبعی را از PC2 درخواست کند نقش کلاینت را گرفته است و PC2 نقش سرور را گرفته است. همینطور اگر PC2 منبعی را از PC1درخواست کند نقششان عوض میشود.معمولا، PAN ها مثال خوبی از یک شبکه P2P هستند.شبکه های ویندوزی به صورت پیشفرض به صورت workgroup هستند. یعنی اگر اتصال فیزیکی بین چند کامپیوتر (windows) برقرار کنیم به شبکه P2P ایجاد کرده ایم.شبکه های workgroup ساده ترین نوع شبکه هستند.مدیریت متمرکز وجود ندارد. (هر کس مسئول کامپیوتر خودش است)هر کامپیوتری database مخصوص خودش را دارد. به این معنی که حساب های موجود و ساخته شده در هر کامپیوتر فقط در همان کامپیوتر اعتبار دارند و میتوانند در همان کامپیوتر Login کنند.هدف از شبکه های workgroup ، اشتراک گذاری فایل هاست.سطح امینت آن پایین است.هزینه ی راه اندازی این نوع شبکه پایین است.معماری شبکه کلاینت سرورییک شبکه کلاینت سروری، که با عنوان شبکه مبتنی بر دامنه (Domain-based Network) نیز شناخته میشود، شبکه ای است که میزبان (host) ها نقش از پیش تعیین شده دارند.در همچین شبکه ای میزبان (host) هایی که منابع را درخواست میدهند، کلاینت هستند و میزبان (host) هایی که منابع را فراهم می کنند به عنوان سرور شناخته می‌شوند.به صورت کلی، شبکه های کلاینت سروری شبکه ای هستند که سرور های اختصاصی در آن ها وجود دارند.معمولا LAN  ها MAN ها WAN ها مثال خوبی از این نوع شبکه ها هستند.Switching from P2P to Domainاگر بنا به مسایل امنیتی یا مدیریتی بخواهیم شبکه را کنترل کنیم نیاز است یک سیستم مرکزی داشته باشیم. بنابراین از یک سرور که بر روی آن ویندوز سرور نصب شده است استفاده میکنیم تا بتوانیم شبکه را تحت کنترل خودمان بگیریم.شبکه های  –Domain کلاینت سروریتمامی کامپیوتر ها به سرور متصل میشوند و مدیریت سیستم ها توسط سرور انجام میگیرد.به دلیل وجود مدیریت مرکزی (سرور) سطح امنیت بالاتر می‌رود.تمامی حساب های کاربری (اکانت ها) روی سرور ایجاد می شوند و برای تایید هویت نیز باید به سرور مراجعه کنند..شبکه کلاینت سروریویندوز سروردر طول تاریخ، ویندوز سرور از یک سرور فایل ساده به یک سیستم عاملی که قادر است خدماتی نظیر مدیریت شبکه در محیط های پیچیده ای مانند شبکه های شرکتی ارایه دهد ، تبدیل شده است.بنابراین ، ویندوز سرور می تواند سرویس های شبکه مانند کنترل کننده دامنه ، سرورهای وب ، پرینت سرور و فایل سرور را ارائه دهد.ویندوز سرور اغلب به عنوان یک بستر مجزا عمل می کند که در آن برنامه های سازمانی مانند Exchange Server ، SQL Server ، SharePoint Server  و دیگران اجرا می شوند.از ویندوز سرور 2003 تا ویندوز سرور 2008 ، این معماری 32 بیتی و 64 بیتی بود. با این حال ، از ویندوز سرور 2012 تنها 64 بیتی است.فایل سیستم NTFS به عنوان فایل سیستم اصلی ویندوز سرور قرار گرفته است.از ویندوز سرور 2012 Resilient File System &#40;ReFS&#41;  به عنوان جایگزین NTFS معرفی شد. با این حال همچنان در ویندوز سرور 2019 NTFS به عنوان فایل سیستم اصلی مورد استفاده قرار گرفته است.نقش (Role) : مانند نرم افزاری است که سرور را قادر میسازد تا سرویس مشخصی را در شبکه ارایه دهد. مثل DHCPویژگی (Feature) : نرم افزار مستقلی که بعضی اوقات باید توسط Role ها نصب شوند. البته میتوانند مستقلا هم نصب شوند.کنترل کننده دامنهDomain controller تمامی اشیاء شبکه (مانند حساب های کاربری، کامپیوترها، پرینترها، فایل های اشتراکی و ...) را مدیریت میکند.وجود DNS در domain باعث میشود که برای تبدیل اسم به IP از broadcast استفاده نشود (مشکلی که در شبکه های workgroup وجود دارد و باعث افزایش ترافیک شبکه می شود)در حقیقت اگر قصد داریم یک شبکه مبتنی بر محصولات مایکروسافت را پیاده‌سازی و استفاده کنیم، ضروری است که یک کنترل‌کننده دامنه در اختیار داشته باشیم.کنترل‌کننده‌ دامنه راهکاری است که کامپیوترها و دستگاه‌های ما درون زیرساخت سرور شرکت‌های‌مان را با یکدیگر مرتبط می‌کند، پس وجود آن ضروری است.Domain Replicationمیتوان برای کم کردن بار کاری سرور از بیشتر از یک دومین کنترلر استفاده کرد. علاوه بر آن به عنوان نسخه پشتیبان هم استفاده میشود. بنابراین اگر یکی از دومین کنترلر ها از کار بیوفتد، شبکه مختل نمیشود.Treeبه مجموعه ی چند domain گفته میشود که از لحاظ نام مشترک اند، نسبت به هم trust دارند و از یک global catalog استفاده میکنند.در طراحی ساختار Active Directory دومین را به صورت مثلث نشان میدهند.برای نام گذاری حتما باید از یک پسوند ir/orgو ... استفاده کنیم.Global catalog یک بانک اطلاعاتی است که در جستجوی اشیاء شبکه به ما کمک میکند.با راه اندازی اولین دومین کنترلر، حتما همراهش GC ایجاد میشود.Forestبه مجموعه ی چند domain گفته میشود که از لحاظ نام مشترک نیستند، نسبت به هم trust دارند و از یک GC استفاده میکنند.هر tree برای خودش یک dns server مجزا دارد، زیرا نام هایشان متفاوت است.ForestFunction Levelمحدوده ی عملکرد domain controller ها را مشخص میکند.اکتیو دایرکتوریبا نصب این نقش، سرور خود را به یک کنترل‌کننده دامنه تبدیل می‌کنید.اکتیو دایرکتوری یک سرویس دایرکتوری است که محصولات ویندوز سرور را در بر میگیرد.محصولات ویندوز سرور یعنی همان فایل های شیر شده در شبکه یا یوزر های ساخته شده در آن یا پرینترهای موجود در شبکه و یا از همه مهمتر دسترسی های موجود در شبکه را اکتیو دایرکتوری به صورت متمرکز درون خودش نگه داری می‌کند و به صورت تمیز و مرتب در اختیار مدیر شبکه قرار می‌دهد.اکتیو دایرکتوری منابع را به صورت سلسله مراتبی در یک دامین سازماندهی می‌کند که این منابع یک سری گروه از سرور ها و منابع تحت شبکه هستند که یک دامنه واحد دارند.هردامنه برای خود شامل یک یا چندین کنترلر است که یکی از انها درحال اجرا کردن ویندوز سرور می‌باشد.اکتیودایرکتوری با متمرکز بخشیدن از یک نقطه مدیریت همه ی فعالیت ها را درون شبکه کنترل می‌کند چرا که اکتیودایرکتوری یک نقطه ورود واحد برای تمامی منابع شبکه است و مدیر شبکه قادر است که تغییرات مربوط درون شبکه را انجام دهد و وارد کامپیوتری شود و آنرا مدیریت کند.اکتیودایرکتوری از سرویس دی ان اسDNS) ) استفاده می‌کند و قادر است که اطلاعات را با هر برنامه کاربردی و یا دایرکتوری مبادله کند.عملیات  AUTHENTICATION و AUTHORIZATION  که عملیات تأیید هویت کاربر بعد از زدن رمز عبور و یوزرنیم انجام می‌پذیرد توسط همین Active Directory صورت میگیرد به این معنا است که هنگامی که سیستم عامل کاربران روشن می‌شود، آنها یوزر نیم و پسورد تعیین شده را وارد کرده و این اطلاعات به سمت سرور Active Directory مربوط به دامین رفته و در صورت صحیح بودن اطلاعات کاربری اجازه ورود کاربر به سیستم عامل خود را خواهد داد.در Active Directory تمامی دسترسی هایی که به کاربران داده شده است توسط این سرویس اعمال میگردد و هنگام ورود کاربران اعمال می‌شود برای مثال مدیر شبکه اجازه اجرای برنامه را به شما نداده است. این قانون هنگام ورود شما به سیستم بعد از وارد کردن رمز عبور و تایید آن بر روی سیستم شما اعمال می‌گردد.آشنایی با  Group Policy یا GPOیکی از مهم‌ترین قابلیت‌هایی که در ویندوز سرور و AD  وجود دارد، Group Policy  است. در­حقیقت با استفاده از کنسول مدیریتی  Group Policy می­توان یک­سری Group Policy Objects یا GPO  ایجاد کرد که این GPOها مدیران را قادر می­سازند تا به‌راحتی بتوانند برای کاربران محدودیت‌هایی را اعمال کنند.یکی از ویژگی‌های اصلی سیستم ­عامل ویندوز، انعطاف‌پذیری در انجام تنظیمات می­باشد به ­این معنی که می­توان کوچکترین جزئیات را با استفاده از کنسول مدیریتی Group Policy کنترل کرد. به­ همین خاطر می­توان متناسب با نیازهای کاربران محدودیت­ هایی را در­نظر گرفت تا کاربران نتوانند تغییراتی را در سیستم انجام دهند که باعث بروز مشکلاتی شود.از این­ رو می ­توان گفت که یکی از اهداف اصلی در طراحی Group Policy اعمال محدودیت برروی مجموعه کارهایی است که کاربر می‌تواند با کامپیوتر انجام دهد.تمامی تنظیمات GP از­طریق کنسول مدیریتی (Group Policy Management Consol) یا GPMC  که در  Administrative Tools قرار دارد، قابل ‌دستیابی می‌باشند.Policy: سیاستی بوده که برای دستیابی به یک هدف در سازمان پیاده می‌شود.Group Policyبه مجموعه‌ای از سیاست­ها (یا Policyها) گفته می‌شود.Objectیک شئ شامل مجموعه‌ای از Policyها بوده که می‌توان آن را به اشیاء موجود در دامنه اعمال کرد. یک GPO را می‌توان به Site، Domain و OU اعمال کرد.Scopeبه محدوده‌ای از کامپیوترها و کاربران که یک GPO برروی آن‌ها اعمال می‌شود Scope  آن GPO گفته می‌شود. در­حالت استاندارد  Scope می‌تواند Local، OU، Domain و یا Site  باشد.Localهر­کامپیوتر به‌صورت محلی دارای یک  GPO است که در خودش ذخیره‌شده است و این GPO هم برای کاربر و هم کامپیوتر مورداستفاده قرار می‌گیرد.Organizational Unitدر­این سطح جزئی‌ترین تنظیمات GPO صورت می‌پذیرد که می‌توان یک­سری قوانین را برای بخشی از اشیاء یک دامنه که در زیرمجموعه یک OU  قرار دارند، تعیین نمود.Domains در­این­ سطح تنظیمات GPO در دامنه قرارگرفته و به‌کل اشیاء Userها و کامپیوترهایی که در دامنه وجود دارند، اعمال می‌گردند.Sitesدر این سطح مدیران سیستم می‌توانند GPOها را به‌کل یک سایت در AD اعمال و پیکربندی کنند که این تنظیمات به‌کل دامنه‌ها و سرورهایی که عضو سایت می‌باشند، اعمال می‌شونداولویت در Group Policyهمانطور که در تصویر هم مشاهده میکنید، هر چه به سمت پایین می رویم، اولیت بالاتر میرود. یعنی بر فرض اگر محدودیتی در سطح Local تعریف شود و محدودیتی در سطح Domain، محدودیت های سطح Domain بر روی محدودیت های Local بازنویسی (overwrite) میشوند.اولویت میان کاربر و کامپیوترسیاست های سطح کاربر بر سیاست های سطح کامپیوتر ارجحیت دارند و بازنویسی می شوند.DHCP Serverبه معنی پروتکل پیکربندی پویای میزبان است.به این وسیله ما می توانیم تنظیمات TCP/IP را به صورت خودکار به کلاینت های داخل شبکه اختصاص دهیم.احتمال خطا را کاهش می دهد و در وقت صرفه جویی میکند.سرور DHCP تنظیمات را برای مدت زمان خاصی به کلاینت ها در شبکه اختصاص میدهد و پس از گذشت زمان مشخص، کلاینت ها باید دوباره به DHCP سرور مراجه کنند و تنظیمات خود را درخواست بدهند.DHCP Scopeمدیر شبکه میتواند با تعریف Scope، رنج یا محدوده ی آدرس IP هایی که سرویس DHCP میتواند داخل شبکه به interface ها اجاره بدهد را مشخص کند.با تعریف Exclusion میتوانیم از اجاره ی یک سری IP در شبکه جلوگیری کنیم.محدوده Reservation به این معناست که یک آی پی مشخص را به یک آدرس mac مشخص اختصاص میدهیم.اگر در شبکه یک کلاینت آی پی مشخص شده ی زیر را گرفته بود به این معنی است که نتوانسته با DHCP ارتباط برقرار کند.169.254.X.XDHCP handshakeDHCP handShakeهمانطور که در تصویر بالا نیز مشاهده میکنید، در 4 مرحله، IP و تنظیمات TCP/IP به سمت کاربر در نهایت فرستاده میشود. که این مراحل عبارتند از:1. بسته Discovery : درخواست تخصیص IP به صورت Broadcast از سمت کاربر در سطح شبکه منتشر میشود. چون هنوز کاربر IP ندارد، آدرس mac خود را درون بسته قرار میدهد.2. بسته Offer : سرور یکسری تنظیمات TCP/IP را به سمت کاربر ارسال میکند.(پیشنهاد میکند)3. بسته Request : کاربر با بسته پیشنهادی موافقت میکند و درخواست اجاره IP را به سمت سرور میفرستد.4. بسته Ack : سرور بسته تصدیق را به سمت کاربر ارسال میکند و از این پس کاربر میتواند با IP که از سرور دریافت کرده است درون شبکه فعالیت بکند.DNS Serverوظیفه ی اصلی آن، تبدیل نام به آدرس IP است.در شبکه برای این که کلاینت ها بتوانند با یکدیگر ارتباط برقرار کنند نیاز است تا با آدرس IP یک دیگر تعامل داشته باشند ولی به خاطر سپردن تعداد زیادی IP کار دشواری است و به همین خاطر از DNS سرور داخل شبکه استفاده میکنیم.همانطور که در تصویر زیر هم مشاهده میکنید کاربر ابتدا به سراغ فایل host میرود و سپس DNS Cache سیستم خود. اگر همچنان نتیجه حاصل نشده بود به سراغ DNS Server  های مختلف می رود تا به نتیجه ی خود برسد.این پروسه پیچیده تقریبا هیچ تاخیری ندارد و کارها به سرعت انجام میشوند.میتوان DNS را به یک دفترچه تلفن تشبیه کرد.همچنین در تصویر زیر هم میتوانیم فرایند پیدا کردن آدرس IP گوگل را مرحله به مرحله مشاهده کنیم.DNS Zoneعبارت Zone به معنای محدوده و قلمرو است.در ساختار Dns،محدوده (zone) یک فضای مدیریت شده است و در واقع یک فایل است که درون آن تعدادی رکورد تعریف شده است. (برای مثال گوگل و آی‌پی متناظر با آن یک رکورد محسوب میشود.)همانطور که در تصویر زیر نیز مشاهده میکنید، dns zone، دو نوع اصلی دارد:اگر مثال دفترچه تلفن را به خاطر داشته باشیم، برای نظم دادن به لیست، بر اساس نام مرتب میکنند. در zone ها هم به همین صورت است. برای مثال اگر zone گوگل را در نظر بگیریم، تمامی زیرمجموعه های آن نظیر gmail.google.com و ... درون Zone اصلی قرار میگیرند. بدین ترتیب، هم نظم ساختاری ایجاد میشود و هم فرایند جستجو ساده تر میشود.محدوده ی Dns، یا همان (dns zone) فارغ از این که از کدامین نوع باشند به 3 دسته تقسیم میشوند: Primary zone – Secondary zone –Stub zoneموضوع مهمی که اکثر مدیران شبکه نسبت به آن بی اهمیت هستند، بحث Round Robin است.همانگونه که در تصویر بالا نیز مشاهده میکنید، به جای بالا بردن توان سخت افزاری سرور یا جایگزین کردن سرور با قدرت سخت افزاری بالا، میتوانیم از دو سرور معمولی کمکی برای متوازن کردن بار کاری در کنار سرور اصلی مان استفاده کنیم.بدین صورت که درخواست هایی که از سمت شبکه به سمت swith شبکه ما می آید را توسط سرور dns بین سرور هایمان پخش میکنیم تا فشار زیادی به یک سرور وارد نشود.در این گزارش سعی کردیم مروری بر ویندوز سرور Microsoft Network Manager داشته باشیم و تا حد خوبی با اجزاء آن آشنایی به دست آوریم.بدرود.منبع:Windows Server 2019 Administration Fundamentals: A beginner’s guide to managing and administering Windows Server environments</description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Mon, 22 Jun 2020 17:44:48 +0430</pubDate>
            </item>
                    <item>
                <title>آشنایی با معماری داخلی MySQL</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D8%AF%D8%A7%D8%AE%D9%84%DB%8C-mysql-n7gk8rx15hz0</link>
                <description> https://youtu.be/MVTc1hLw5eU همان طور که در شکل هم مشاهده میکنید، معماری mysql از 3 لایه تشکیل می شود.معماری داخلیلایه اول (Client): اعمالی نظیر connection handling و احراز هویت و امنیت (که توسط ابزار های مبتنی بر شبکه فراهم میشوند) ارایه میشود که مختص فقط mysql هم نیست.لایه دوم (Server): مغز متفکر mysql است که شامل پارس کردن کویری، آنالیز ، بهینه سازی و کش میشود.لایه سوم (storage engines): مسولیت ذخیره و نگهداری داده را در mysql دارند.سرور mysql از طریق API ها با storage engine ها در ارتباط است.از معروف ترین storage engine ها میتوان به InnoDB و MyISAM اشاره نمود.مراحل پردازش یک کویری زمانی که به mysql میرسد چیست؟1. کاربر عبارت sql را به سمت سرور از طریق یک پروتکل مشخص ارسال میکند.2. سرور کویری کش (query cache) را چک میکند. اگر نتیجه ای یافت، فورا به سمت کاربر بازمیگرداند. در غیر این صورت، sql statement به مراحل بعدی پاس میدهد.3. سرور sql را بعد از پارس کردن (parse) و پیش پردازش کردن (preprocess) و همچنین بهینه سازی(optimization)، تبدیل به یک برنامه اجرایی کویری (query execution plan) میکند.4. موتور اجرایی کویری (query execution engine) برنامه (plan) را از طریق صدا زدن (call) API های موتور های ذخیره سازی (storage engine) اجرا میکند.5. در نهایت سرور نتیجه را به سمت کاربر میفرستد.مدیریت ارتباط و امنیت (Connection Management and Security)· هر ارتباط کاربر، نخ (thread) مختص به خود را درون فرایند (process) سرور دریافت میکند.· کویری های ارتباط (connection query) در درون همان تک نخ که ممکن است بر روی یک هسته یا پردازنده فعالیت کنند، اجرا میشود.· سرور نخ (thread) ها را کش میکند، بنابراین نیازی به ساختن و از بین بردن هرباره ی نخ ها برای هر اتصال جدید وجود ندارد.· پایگاه داده mysql ورژن 5.5 و به بعد از پلاگین های thread polling نیز پشتیبانی میکنند.بهینه سازی و اجرا (Optimization and Execution)· پایگاه داده Mysql کویری (پرس و جو) ها را پارس میکند تا به یک ساختار داخلی (internal structure) برسد (parse tree). سپس یکسری از بهینه سازی ها را بر روی این درخت انجام میدهد.· این بهینه سازی ها شامل بازنویسی کویری، در نظر گرفتن اینکه کدام جدول ابتدا خوانده شود، کدام ایندکس ها استفاده شوند و ... میشود.· ما میتوانیم یکسری hint به بهینه ساز (optimizer) از طریق کلمات کلیدی مخصوصی ارسال کنیم تا بر روی تصمیم گیری آن تاثیر بگذاریم.· همچنین می توانیم از سرور درخواست کنیم تا جنبه های مختلف بهینه سازی اش را برای ما توضیح دهد.· بهینه ساز از موتور های ذخیره سازی یکسری سوالات از قبیل هزینه ی اعمال مختلف میپرسد.· قبل از پارس کردن کویری، سرور mysql کش را که فقط میتواند دستورات SELECT را ذخیره کند چک میکند.· اگر یک کویری نتیجه اش وجود داشته باشد به سمت کاربر برگردانده می شود.در شکل زیر میتوانید فرایند سرور mysql را مشاهده کنید.حافظه نهان (query cache)· اگر mysql نتیجه ی یک کویری را در کش پیدا کند، باید دسترسی ها (privileges) را نیز چک کند.· این کار بدون پارس کردن کویری نیز امکان پذیر است. زیرا mysql اطلاعات جداول را در درون کویری های کش شده نگهداری میکند.· اگر دسترسی ها مشکلی ایجاد نکنند، mysql نتیجه را بازیابی میکند و به سمت کاربر باز میگرداند.· بنابراین کویری پارس، بهینه سازی و اجرا نمیشود.· پایگاه داده mySql مقدار حافظه ی مورد نیاز برای query cache را درون متغیر &#x27;query_cache_size&#x27; در هنگام شروع به کار سرور مشخص و مقداردهی میکند.· اگر بخواهیم این مقدار را تغیر دهیم، mysql بلافاصله تمامی کویری های کش شده را حذف میکند و مقدار حافظه را دوباره تخصیص میدهد.· این فرایند ممکن است مقداری طول بکشد زیرا mysql کویری ها را تک به تک پاک میکند و نه یکجا، که این کار ممکن است مدتی سرور را مختل کند.فرآیند بهینه سازی پرس و جو (The Query Optimization Process)· پایگاه داده Mysql یک sql query را به یک برنامه اجرایی (execution plan) تبدیل میکند تا به موتور اجرایی پرس و جو (query exection engine) تحویل دهد.· این فرایند یکسری بخش های مختلف دارد: نظیر پارس کردن(parsing)، پیش پردازش کردن (preprocessing) و بهینه سازی.· خطا ها (error)، میتوانند در هر کدام از این مراحل رخ دهند. (نظیر خطاهای سینتکسی)در شکل زیر میتوانید این فرایند و زیربخش های آن را مشاهده نمایید.تجزیه کننده و پیش پردازنده (The parser and the preprocessor)· پارسر sql syntax را با استفاده از چک کردن تمامی کاراکتر های sql query چک میکند و برای هر کویری یک SQL_ID تولید میکند.· پارسر کویری را به یکسری توکن (token) میشکند و یک درخت پرس و جو (pars tree) را از آن ها میسازد.· پارسر از گرامر اس‌کیو‌ال mysql استفاده میکند تا کویری را تفسیر و ارزیابی کند.· برای مثال، مطمعن میشود تا توکن ها معتبر هستند و در یک ترتیب صحیح قرار گرفته اند ، و همچنین مشکلاتی نظیر quoted string ها را چک میکند تا مطمعن شود تا به درستی بسته شده اند.· سپس پیش پردازنده درخت پرس و جوی نهایی را چک میکند و یکسری اطلاعات اضافی به آن اضافه میکند که پارسر از انجام آن ناتوان است.· برای مثال، وجود داشتن جداول و ستون ها را چک میکند تا در ادامه خطایی رخ ندهد.· سپس دسترسی ها را چک میکند. این کار به سرعت انجام میگیرد مگر این که شما دسترسی های زیادی را ایجاد کرده باشید.بهینه ساز پرس و جو (query optimizer)· درخت پرس و جو هم اکنون معتبر (valid) و آماده است تا تبدیل به یک برنامه اجرایی پرس و جو (query execution plan) شود.· یک پرس و جو ممکن است از طریق روش های مختلفی اجرا شود و در نهایت نتیجه ی یکسانی به دست دهد. کار بهینه ساز این این است که بهترین روش را انتخاب کند.· پایگاه داده MySql از یک بهینه ساز مبتنی بر هزینه استفاده میکند. بدین معنی که سعی میکند تا هزینه ی اجرای برنامه های اجرایی (execution plan) را تخمین بزند و ارزان ترین آن ها را انتخاب کند.ما می توانیم هزینه ی اجرای یک دستور را از طریق اجرای فرمان SHOW STATUS LIKE &#x27;Last_query_cost&#x27; مشاهده کنیم.· همان طور که در تصویر بالا هم مشاهده میشود، هزینه ی دستور قبل برگردانده شده است. مقدار آن بدین معنی است که 10 صفحه داده (data page) تصادفی (random) طول میکشد تا دستور اجرا شود.· یک صفحه (Page) شامل رکورد ها و همچنین header و trailer ها نیز می باشد.· موتور ذخیره سازی InnoDB تمام رکورد ها را درون یک واحد با اندازه ثابت که معمولاً &quot;یک صفحه&quot; نامیده می شود ، ذخیره می کند (گرچه InnoDB گاهی اوقات آن را &quot;بلوک&quot; نیز می نامند). در حال حاضر تمام صفحات به یک اندازه ، 16KB هستند.· بهینه ساز، تاثیرات ناشی از کش کردن را داخل تخمین های خود در نظر نمیگیرد و هر عملیات خواندن (read) را عملیات دیسک (disk I/O) در نظر میگیرد.· بهینه ساز همیشه نمی تواند هر برنامه اجرایی ممکن را تخمین بزند ، بنابراین ممکن است یک برنامه بهینه را از دست دهد.برنامه اجرایی (The execution plan)· پایگاه داده MySQL مانند دیگر محصولات بانک اطلاعاتی ، برای اجرای یک پرس و جو کد بایت ایجاد نمی کند.· در عوض، برنامه اجرایی پرس و جو (query execution plan) در واقع یک درختی از دستور العمل ها (instruction) است که موتور اجرا کننده پرس و جو آن ها را اجرا میکند تا در نهایت به جواب برسد.· در تصویر زیر دو نمونه plan مختلف را مشاهده میکنیم.موتورهای ذخیره سازی MySQL (MySQL’s Storage Engines)· پایگاه داده MySQL، هر پایگاه داده (که به عنوان یک Schema نیز خوانده می شود) را به عنوان زیرمجموعه دایرکتوری داده های خود در سیستم فایلهای زیر ذخیره می کند.· وقتی که یک جدول ایجاد می کنیم ، MySQL تعریف جدول را در یک پرونده .frm با همان نام جدول ذخیره می کند.· بنابراین ، هنگامی که شما یک جدول با نام MyTable ایجاد می کنید ، MySQL تعریف جدول را در MyTable.frm ذخیره می کند.· از آنجا که MySQL از سیستم فایل استفاده می کند تا نام بانک اطلاعاتی و تعاریف جدول را ذخیره کند ، کوچک و بزرگ بودن حروف مهم است.· برای نمایش اطلاعات در مورد جداول می توانید از دستور SHOW TABLE STATUS استفاده کنید.بازگشت نتایج به کاربر (Returning Results to the Client)· آخرین مرحله برای اجرای یک پرس و جو پاسخ به کاربر است. حتی زمانی که پرس و جو ها قرار نیست که نتیجه را برگردانند، پاسخی را به سمت کاربر بر میگردانند. مانند این که &quot;چند رکورد تاثیر یافتند&quot;.· اگر پرس و جو قابل کش کردن باشد ، MySQL نیز نتایج را در این مرحله در حافظه نهان (cache) قرار می دهد.· کش کردن نیز مزایای زیادی دارد.همزمانی (Concurrency)هر زمانی که بیش از یک پرس و جو نیاز به تغییر داده ی یک سان را در یک زمان داشته باشد ، مشکل کنترل همزمانی پیش می آید.راهبردهای قفل (lock strategies)· قفل سطح جدول· قفل سطح ردیفقفل جدولی (Table locks)· اساسی ترین و پایه ای ترین استراتژی قفل کردن موجود در mysql است که کمترین سربار (overhead) را نیز به همراه دارد.· کل جدول را قفل میکند.· زمانی که یک کاربر بخواهد بر روی یک جدول بنویسد، قفل جدول را در اختیار میگیرد.قفل ردیفی (Row Locks)· استراتژی قفلی است که بالاترین همزمانی (concurrency) را به ارمغان میاورد ولی بیشترین سربار را نیز به دنبال دارد.· این استراتژی در موتور های ذخیره سازی InnoDB و XtraDB موجود است.· این استراتژی در سطح موتور های ذخیره سازی پیاده سازی می شود و نه در سطح سرور.· سرور کاملا بی اطلاع از قفل های پیاده سازی شده در storage engine هاست.تراکنش (Transaction)یک تراکنش (transaction) گروهی از پرس و جو های اس‌کیو‌ال است که به صورت خودکار به عنوان یک واحد کار در نظر گرفته می شوند.پشتیبانی سیستم های مدیریت پایگاه داده ها از transaction ها کافی نیست و پایگاه داده ها باید تست ACID را با موفقیت پشت سر بگذارند.1. یکپارچگی (Atomicity) : به این معنی است که یا تمام دستورات یک تراکنش انجام میشود یا هیچکدام از دستورات اجرا نمیشوند. این خاصیت به همه یا هیج موسوم است. ( مثلا تراکنش انتقال مبلغی از یک حساب به حساب دیگر)1. همخوانی (Consistency) : یعنی هر تراکنش اگر به تنهایی اجرا شود بانک اطلاعاتی را از حالتی صحیح به حالتی صحیح دیگیر منتقل میکند2. انزوا (Isolation) : یعنی اثر تراکنش های همروند روی یکدیگر چنان باشد که ظاهرا هر کدام به طور مجزا و در انزوا انجام شود.3. پایایی (Durability) : به این معنی است که که اثر تراکنش هایی که به مرحله انجام (Commit) میرسند ماندنی است و به طور تصادفی از بین نمیرود.یک سرور پایگاه داده که از تراکنش های ACID پشتیبانی میکند، نیاز به قدرت پردازنده و حافظه و رم بیشتری نسبت به پایگاه داده ای که از ACID پشتیبانی نمیکند، دارد.به همین دلیل است که معماری mysql یعنی پشتیبانی از انواع موتور ذخیره سازی به کار ما می آید.ما میتوانیم تصمیم بگیریم که از چه نوع موتور ذخیره سازی استفاده کنیم.ممکن است در شرایطی نیاز به پشتیبانی از تراکنش های ACID نداشته باشیم و از موتور های ذخیره سازی not-transactional استفاده کنیم تا کارایی (performance) بیشتری به دست آوریم.سطح های ایزوله سازی (Isolation Levels)استاندارد SQL  چهار سطح انزوا را تعریف می کند ، با قوانین خاص که تغییرات در داخل و خارج از تراکنش قابل مشاهده نیستند. سطح انزوای پایین به طور معمول امکان همزمانی بالاتری را به همراه دارد و سربار کمتری نیز دارد.ما در پیاده سازی پایگاه های داده از 3 مشکل رنج میبریم.1. Dirty read2. Non-repeatable Reads3. Phantom readsبرای حل کردن چالش های قبل نیاز به پیاده سازی سطوح مختلف ایزوله سازی داریم که در ادامه به آن میپردازیم منتها در ابتدا باید با این 3 چالش آشنا شویم.فرض کنید تراکنشی باعث تغییر اطلاعات در بدنه خود شده است ولی هنوز آن تراکنش Commit نشده است. اگر شرایط به گونه ای باشد که با استفاده از دستور Select داده های تغییر یافته معلق را که هنوز تایید نشده است را استخراج نماییم و آن ها را مشاهده کنیم اصطلاحا به آن Dirty Read گفته می شود.Non-repeatable Readsاین خطا زمانی رخ میدهد که ما در یک تراکنش از یک موجودیت بیش از یکبار SELECT کنیم و هر بار پاسخ های متفاوتی دریافت کنیم.Phantom readsاگر حین انجام Select داخل یک تراکنش، اطلاعات جدیدی در دیتابیس درج شود و این درج اطلاعات روی نتیجه Select ما تاثیر بگذارد (سطرهای جدید به نتیجه Select اضافه شود) اصطلاحا گفته می شود که Phantom Read اتفاق افتاده است.حال برای این که بر مشکلات گفته شده چیره شویم، 4 راه حل در پیش رو داریم که عبارتند از:1. READ UNCOMMITTED2. READ COMMITTED3. REPEATABLE READ4. SERIALIZABLEکه در ادامه به تشریح این موارد میپردازیم.Read UnCommittedاین سطح ارزیابی به نوعی پایین ترین سطح ارزیابی می باشد به طوری که هیچ قفلی بر روی رکوردها اعمال نمی شود. مثلا اگر اطلاعاتی را داخل یک تراکنش به روزرسانی می نمایید یک تراکنش دیگر می تواند این اطلاعات را تغییر دهد. یا اگر در حال اجرای تراکنش، یک دستور Select بنویسید اطلاعاتی را دریافت کنید که هنوز تایید و نهایی نشده است.با این اوصاف می توان گفت اطلاعاتی که در این Selectها به دست می آید به احتمال زیاد نامعتبر خواهد بود. همان Dirty Read در اینجا اتفاق خواهد افتاد.Read Committedاین سطح ارزیابی سطح پیش فرض اغلب سیستم های مدیریت پایگاه داده می باشد (ولی سطح پیش mysql نیست). در این حالت اطلاعاتی که داخل یک تراکنش باشد تا لحظه اتمام آن تراکنش به حالت قفل در خواهد آمد. یعنی نه می توان آن ها را Select کرد و نه می توان آن ها را تغییر داد یا حذف کرد. چنانچه دستور SELECT شما همزمان با اجرای تراکنش باشد اجرای دستور SELECT منتظر اتمام تراکنش خواهد ماند. با یک مثال بهتر متوجه خواهید شد.Reapeatable Readاین سطح ارزیابی شبیه Read Committed می باشد ولی با این تفاوت که Reapeatable Read این تضمین را به ما می دهد که تمامی دستورات تغییر اطلاعاتی، که شما آن ها را Select کرده اید منتظر خواهد ماند تا Select شما به اتمام برسد و بدین معنی است که هر چندبار که از یک موجودیت SELECT کنیم هر بار نتایج یکسانی دریافت خواهیم کرد. (این سطح، سطح پیش فرض mysql است)Serializableاین سطح ارزیابی شبیه Reapeatable Read می باشد منتها Serializable یک تضمین اضافی را نیز به ما می دهد که اجازه درج رکورد جدید در اطلاعات مربوطه را تا اتمام تراکنش نخواهد داد. بنابر این جلوی Phantom Read نیز گرفته خواهد شد.در جدول زیر میتوانیم این 4 راه حل گفته شده را با یکدیگر مقایسه کنیم.تراکنش ها در MySQL· پایگاه داده MySQL دو موتور ذخیره سازی که از تراکنش ها پشتیبانی میکنند را برای ما فراهم کرده است: InnoDB و NDB Cluster· پایگاه داده Mysql به صورت پیشفرض در حالت AUTOCOMMIT عمل میکند. بدین معنی که تمامی پرس و جو ها را به عنوان یک تراکنش جدا از هم انجام میدهد.· ما میتوانیم این قابلیت را فعال و یا غیرفعال کنیم.موتور های ذخیره سازی (Storage Engines)همان طور که در ابتدای گزارش هم اشاره شد، موتور های ذخیره سازی مسئول ذخیره و بازیابی داده در mysql هستند.در اینجا به تشریح دو موتور ذخیره سازی رایج mysql میپردازیم.موتور Innodbاز نسخه 5.5 به بعد به عنوان موتور پیشفرض mysql انتخاب شد.پیچیدگی بیشتری نسبت به myIASM دارد.بر خلاف  MyISAM  از Transactions به خوبی پشتیبانی می کند.از کلید خارجی برای ارتباط میان جداول پشتیبانی میکند.قابلیت crash-recovery دارد یعنی بعد از اینکه crash اتفاق می افتد , جداول InnoDB  خیلی سریع  و به صورت خودکار به آخرین وضعیت پایداری که قبلا داشتند بر می گردند .حافظه بیشتری نسبت به MyISAM مصرف میکند و  از نظر فیزیکی فایل های حجیم تری دارد. (بنابراین اگر محدودیت در منابع وجود داشته باشد استفاده از این موتور منطقی نیست.)از Row-level Lock پشتیبانی میکند و به همین دلیل در سطح رکورد از سرعت بالایی جهت اجرای query های مربوط به delete/update/insert برخوردار می‌باشد.از rollback و commit  پشتیبانی میکند.تشخیص بن‌بست (Deadlock Detection) : بن بست ها بیشتر در transactions  ها اتفاق می افتد که دو  یا چند transaction  منابعی را برای خود نگه داشتند و رها نکرده اند. برای رفع این بن بست MYSQL یکی از transaction ها را با استفاده از الگوریتم خود انتخاب  و آن را rollback  می کند . با این کار بقیه transaction  ها می توانند به کار خود ادامه دهند.کارایی (performance)  پایین تر نسبت به MyISAM : جداول MyISAM  معمولا نسبت به InnoDB  سریع تر هستند زیرا خیلی از موارد مانند کلید خارجی و  Transactions  ها را چک نمیکند.پشتیبانی از MVCCسطح ایزوله سازی آن به صورت پیشفرض repetable read  است. و استراتژی هایی برای جلوگیری از phantom read دارد.موتور MyISAMسه مشخصه ی مهم دارد:سرعت بالا در خواندن داده های ذخیره شدهسرعت پایین در درج داده ی جدید در حالت concurrency (هم زمانی)کرش کردن جدولهنگامی بیشترین بازدهی را دارد که نوع ROW_FORMAT  برابر با FIXED  باشد.میتواند به صورت پرتابل بین انواع سیستم عامل ها جا به جا شود.از transaction ها پشتیبانی نمی کنند.در نهایت هم میتوانیم به کمک تصویر زیر انواع موتور های ذخیره سازی را باهم مقایسه کنیم.مقایسه انواع موتور های ذخیره سازی در mysqlدر این نوشته سعی کردیم به آشنایی مختصری با mysql و ساختار منطقی داخلی آن بپردازیم و روش کار کردن اجزاء مختلف آن را تشریح کنیم.منبع: High Performance MySQL, 3rd Edition Optimization, Backups, and Replication by Baron Schwartz, Peter Zaitsev, Vadim Tkachenko</description>
                <category>محمد امین سلطانی</category>
                <author>محمد امین سلطانی</author>
                <pubDate>Sun, 21 Jun 2020 23:07:28 +0430</pubDate>
            </item>
            </channel>
</rss>