• chartblogs چیست؟
  • chartblogs یک آرشیو بزرگ از مطالب وبلاگ های ایرانی می باشد که با عضویت درآن می توانید در صورت از دست رفتن مطالب با استفاده از chartblogs یک نسخه پشتیبان از مطالب خود در اختیار داشته باشید.
  • با chartblogs می توانید مطالب خود را برای جستجوگرهای وب بهینه کنید و بازدید وبلاگ خود را افزایش دهید.
  • تبلیغات
    آخرین مطالب
    آمار chartblogs
    • تعداد وبلاگ ها : 0
    • تعداد مطالب : 0
    • کاربران حاضر : 0
    • آخرین بروزرسانی : 0
    به جاي آنكه به تاريكي لعنت بفرستيد يك شمع روشن كنيد !
    chartblogs هیچگونه مسئولیتی در برابر مطالب ارسالی و منتشر شده از سوی کاربران و وبلاگ های آرشیو ندارد
    مکان تبلیغات شما

    خرید عینک آفتابی Louis Vuitton با قیمت ارزان

    آیا میدانید برترین عینک سال 2014 نزد افراد معروف همین عینک است ؟

    انتخاب آرمین 2afm ، سیروان خسروی ، کیم کارداشیان ، ریحانا ، علیرضا حقیقی و... می باشد

    خرید عینک آفتابی Louis Vuitton با قیمت ارزان

    تحویل رایگان به سراسر ایران | پرداخت هزینه درب منزل پس از تحویل کالا

    لینک خرید عینک لویی ویتون توضیحات عینک لویی ویتون



    ساعت دستبندی LED Arina اسپرت

    ارائه شده در رنگ های مختلف و زیبا

    هم یک دستبند اسپرت و هم یک ساعت LED

    دارای تقویم روز شمار

    این ساعت در حالت عادی خاموش بوده و با

    لمس آن ساعت روشن و نمایان خواهد شد.

    دارای 6 ماه گارانتی تعویض

    قیمت : 15000 تومان

    تحویل رایگان به سراسر ایران | پرداخت هزینه درب منزل پس از تحویل کالا

    لینک خرید عینک ریبن آبی توضیحات عینک ریبن آبی





    ساعت بند چرم الیزابت تخفیف ویژه

    با ظاهري جالب و كيفيتي بينظير وفوق العاده شيك و زيبا

    ساعتي با ظاهري متفاوت، مدرن و همچنين با دوام

    يكي ار محبوب ترين و پرطرفدارترين ساعت ها در اروپا

    ساعت بند چرم الیزابت تخفیف ویژه

    رنگبندي:سبز, قهوه اي , نارنجي ,مشکی و قرمز .سفید

    ساعت بند چرم الیزابت تخفیف ویژه

    تحویل رایگان به سراسر ایران | پرداخت هزینه درب منزل پس از تحویل کالا

    ساعت بند چرم الیزابت تخفیف ویژه ساعت بند چرم الیزابت تخفیف ویژه




    به پرشین بلاگ خوش آمدید

    بنام خدا

    كاربر گرامي

    با سلام و احترام

    پيوستن شما را به خانواده بزرگ وبلاگنويسان فارسي خوش آمد ميگوييم.
    شما ميتوانيد براي آشنايي بيشتر با خدمات سايت به آدرس هاي زير مراجعه كنيد:

    http://help.persianblog.ir براي راهنمايي و آموزش
    http://news.persianblog.ir اخبار سايت براي اطلاع از
    http://fans.persianblog.ir براي همكاري داوطلبانه در وبلاگستان

    در صورت بروز هر گونه مشكل در استفاده از خدمات سايت ميتوانيد با پست الكترونيكي :
    support[at]persianblog.ir

    و در صورت مشاهده تخلف با آدرس الكترونيكي
    abuse[at]persianblog.ir
    تماس حاصل فرماييد.

    با تشكر

    مدير گروه سايتهاي پرشين بلاگ
    مهدي بوترابي

    http://ariagostar.com
     منبع : edu-pb - edu-pb
    جمعه 16 بهمن 1394 ساعت 18:21:43
      برچسب ها : persianblog ,http ,سايت ,خدمات سايت

    نمونه سوالات آقای فلاح راد- درس سیستم عامل شبکه

    بچها ، این سوالات رو خود استاد در اختیار دانشجویان قرار میده تا با در آوردن جواب از کتاب سیستم عامل شبکه ، بتونن خودشونو واسه امتحان آماده کنند ، کل سوالات رو در یه فایل فشرده براتون گذاشتم ، یه فایل پی دی اف شامل سوالات تکراری و غیر تکراری هم با جواب براتون گذاشتم که خودم از روش بیست گرفتم امیدوارم به دردتون بخوره ، در ضمن همه جواب ها رو من از کتاب در نیاوردم ، سعی کردم جواب های روان و قابل فهم برای هر کدوم پیدا کنم .

                         کل نمونه سوالات                         گلچین سوالات با جواب

     منبع : edu-pb - edu-pb
    پنجشنبه 20 اسفند 1394 ساعت 10:54:03
      برچسب ها : جواب ,سوالات ,براتون گذاشتم ,عامل شبکه ,سیستم عامل

    21 قانون برنامه نویسی

    یک : برنامه ای که یک بار تولید بشه و دیگه به روز نشه ، درحال حاضر منسوخ هست .

    دو : بهتر هستش یکسری ویژگیهای برنامه رو با اصل نرم افزار تطبیق بدیم تا برعکسش .

    سه : برنامه ای که مفید باشه در آینده حتما تغییر میکنه .

    چهار : برنامه ای که مفید نباشه ، بهتر هستش تا بایگانی بشه .

    . . . .

    پنجم : تنها ده درصد از کد هر برنامه ای اجرا میشه .

    ششم : بهترین نرم افزارها هم حداقل یک خطا دارند .

    هفتم : هرچی نرم افزار گسترده تر بشه ، از منابع سیستم بیشتر استفاده میکند .

    هشتم : بی عیبی نرم افزار در زمان دمو رابطه مستقیمی با تصمیم گیری کاربر در مورد انتخابش نسبت به نرم افزار داره و انتخاب اون یعنی سود بیشتر یک شرکت نرم افزاری .

    نهم : تا حالا هیچ نرم افزاری تولید نشده که حداقل توی شش ماه اول تمام خطاهای خطرناک اون گرفته بشه .

    دهم : خطاهایی که قابل پیدا کردن به راحتی ها نیستن ، در انواع مختلف بی نهایت هستن ، اما خطاهایی که قابل کشف هستن ، تعدادشون محدود هست .

    یازدهم : پیجیدگی برنامه باید در حد برنامه نویسی باشه که بعدا باید اون رو نگهداری و در اون کد تغییرات ایجاد کنه .

    دوازدهم : برای رفع هر خطا زمان به طور نسبی گرفته میشه .

    سیزدهم : زمانی که به کدهایی که نوشتین برای چند ماه نگاه نکنید ، بعد از اون مدت وقتی نگاه میکنید انگار یکی دیگه اون کدها رو برای شما نوشته !

    چهاردهم : در هر برنامه کوچکی برنامه های بزرگی درگیر هستند که نتیجه رو به نمایش میگذارند .

    پانزدهم : کد نویسی یک نرم افزار رو زودتر شروع کنید چون در اکثر مواقع بیشتر طول میکشه .

    شانزدهم : پروژه ای که بدون برنامه ریزی باشه ، سه برابر زمان تعیین شده تموم میشه و پروژه ای که از روی دقت برنامه ریزی شده باشه ، دو برابر طول میکشه .

    هفدهم : اضافه کردن برنامه نویس به پروژه نرم افزاری که طول کشیده باعث کندتر شدن پروژه میشود .

    هجدهم : یک برنامه هیچ وقت کمتر از 90 درصد کامل نیست ، و بالاتر از 95 درصد کامل هست .

    نوزدهم : اگر شما بی نظمی رو در کارتون به صورت خودکار دربیارید ، طبیعتا شما یک بی نظم خودکار میشوید !

    بیستم : برنامه ای بنویسید که فقط یک دیوونه بتونه ازش استفاده کنه ! البته همون دیوونه دوست داره که از برنامه استفاده کنه !

    بیست و یک : کاربران نمیدونند واقعا از یک برنامه چه توقعی دارند تا زمانی که از اون استفاده کنند .

     منبع : edu-pb - edu-pb
    چهارشنبه 05 آبان 1395 ساعت 15:15:19
      برچسب ها : برنامه ,افزار ,استفاده ,پروژه ,باشه ,نویسی ,درصد کامل ,برنامه ریزی ,برنامه نویسی ,بهتر هستش

    پنج ویژگی درمورد پیچیدگی سیستم های نرم افزاری

    تعداد انگشت شماری از برنامه نویسان هستند که برای توسعه دهندگان نرم افزار آشنا و قابل شناسایی هستند ، که اغلب از روی پایه نام آنها همانند "Britney" و "Oraph" است که جوامع دیگر بدون هیچ توضیح بیشتری با دیدن این نام ها ، آنها را تشخیص میدهند . این اشخاص راه برنامه نویسان را طراحی میکنند و برنامه ها را با شناسایی ابزار هایی برای بهبود فرآیند ها ، بهبود می‌بخشند . 
    یکی از این افراد که هیچ شکی در دانش و توانایی آن نیست، Grady Booch است.او یکی از اعضای اصلی از توسعه دهندگان زبان UML بود و این نخستین تاثیری بودکه او بر برنامه نویسی شی گرا (OOP) گذاشت.او همچنین چندین کتاب در مورد برنامه شی گرا منتشر کرده است. و از سال 1980به عنوان chief scientist در Rational (که در حال حاضر قسمتی از IBM است)، فعالیت داشته است .

    در IBM نام تشریفاتی مهندسان نرم‌افزار، chief scientis، می‌باشد. در زیر توصیه های وی در مورد توسعه و پیاده سازی پروژه های بزرگ را مشاهده خواهید کرد :

    1. هیچ وقت پایه و اساس از دور خارج نمی‌شود :
    پروژه های بزرگ و طولانی میتوانند بسیار بی رحم باشند ، و در بدترین حال آنها همانند یک رژه بسوی مرگ نمایان میشوند . که Booch بیان دارد که هیچ وقت چهار اصل اساسی زیر را فراموش نکنید :
     
    - Abstractionهای واضح و انعطاف پذیری را ایجاد کنید . 
    - حفظ و رعایت Spration of Concern
    - ایجاد یک توزیع متعادل از مسئولیت.
    - تمرکز بر روی سادگی.

    نکته کلیدی و مهم استفاده از Abstractionها این است که به جای داشتن یک دید نقطه ای و الگوریتم بر پایه viewpoint ، یک برنامه با دید شی گرایی خواهیم داشت . همچنین او بیان دارد که به جای تمرکز بر روی پردازش ، به این چیزها فکر کنید . 

    Spration of Concern ، بدین معناست که ، شما مسئول شست و شوی ظروف را در حموم قرار نمیدهید . جزئیات به نیازمندی ها بستگی دارد . اما او این توصیه را دارد که چیزهای مرتبط بهتر است بصورت خوشه ای و بصورت جداگانه از هم نگه داشته شوند ، که به این صورت نمی‌شوند . 

    پایه و اساس طراحی هم نیز بر این مبنا است که تا جایی که میتوانیم از طرح های lumpy استفاده نکنیم . برای مثال ، ما خونه ای نمیخواهیم که یک آشپزخانه بسیار بزرگ داشته باشد در صورتی که تنها یک اتاق دارد . 

    هیچ وقت حفظ سادگی را دست کم نگیرید، او توضیح میدهد که، توسعه چیزهای ساده انرزی زیادی را میطلبد. همچنین او بیان دارد که، بسیار با ارزش است که هر مرحله از توسعه برنامه شامل مرحله ای باشد که سادگی آن را تایید کند . اما این یک سرمایه گذاری است و مدیریت باید که روحیه خارج کردن یک ویژگی را داشته باشد حتی اگر آن هزینه در برداشته باشد. 

    2. شما به یک ریتم منظم منتشر شده نیاز دارید :

    او بیان دارد که ، هر پروژه ای نیاز به یک نبض دارد . ایجاد این ریتم ، قابل پیش بینی بودن و پایداری را فراهم می‌آورد . نظم و قاعده این امکان فراهم میکند که عملکرد و ویژگی هایی که در مرحله بعد رخ می‌دهد ، قابل پیش بینی باشد . 

    3. تمرکز بر روی معماری های قابل اجرا :
    مدیران IT ، به جای کدهای raw, running, naked ، نیاز به اداره کردن با تصمیم گیری های معماری دارند . 
    اون بیان دارد که ، کد حقیقت است ، اما آن همه حقیقت نیست . 

    4. ایجاد ساختارهای اجتماعی که هرگونه نوآوری را  تشویق میکند با حفظ قابل بیش بینی بودن آن کار تیمی یکی از جزهای پایه ای و اساسی هر پروژه بزرگی است ، بنابراین کمپانی ها به ایجاد رابطه ها در این مورد باید بیشتر توجه کنند . Business نیاز به قابل پیش بینی بودن دارند ، ایجاد یک ساختار اجتماعی که هر دو ویژگی بالا را پوشش دهد ، کار ضروری نیست اما ، روند موفقیت پروژه را متعادل می‌کند .  
    در این ساختار های اجتماعی ، مدیر در پردازش توسعه نرم افزار یک شرکت کننده است .
     او همچنین بیان دارد که ، معماری باید یک مجری باشد ، حتی اگر یک خط بین توسعه و مدیرها ، محو شده باشد . اما در اینجا یک ارتباط پر سر و صدای خطرناک وجود دارد که مدیریت را درگیر خودش میکند . و آن تفاوت بین یک خط و یک دیوار است . 

    یکی دیگر از مولفه برای داشتن یک تیم نوآور، جلوگیری از دیدارهای پژمرده و آفت زده است .  5. سرگرمی داشته باشید 
    این نصیحت دوستانه ساده ای نیست ؛ او اعتقاد دارد که موفقیت پروژه ها حاصل از تیم هایی است که درباره کاری که انجام میدهند اتفاق نظر دارند . اکثرا مردم خواهان ساخت چیزهای زیبا و معرکه هستند اگر این را از مردم بگیرید همانند این است که خلاقیت را از یک هنرمند بگیرید .

     منبع : edu-pb - edu-pb
    چهارشنبه 05 آبان 1395 ساعت 15:15:19
      برچسب ها : برنامه ,توسعه ,بیان ,پروژه ,قابل ,داشته ,بیان دارد ,بینی بودن ,موفقیت پروژه ,داشته باشد ,spration of concern

    برنامه نویسی غیرهمزمان (Asynchoronous) با استفاده از Async و Await

    کلمات کلیدی async  و  await از نسخه 5 زبان C# در آن تعبیه شده اند. این ویژگی ها در پاییز 2013 به عنوان بخشی از Visual Studio 2013 به بازار عرضه شدند و می توانند تا میزان زیادی، برنامه نویسی غیز همزمان را ساده تر کنند.

    پایه ی C# Async   و  Await

    به عنوان یک کاربر ما ترجیح می دهیم برنامه ای که با آن در حال کار هستیم، به سرعت به درخواست ها و تعاملات ما پاسخ بدهد و در زمان پردازش اطلاعات و یا بارگذاری آن ها ، دچار freeze نشود (یا به اصطلاح، هنگ نکند.) . در برنامه هایی که بر روی دسکتاپ اجرا می شوند، معمولا کاربران، شکیبایی بیشتری در صورت اجرا نشدن درست برنامه دارند ولی در مورد برنامه های موبایل اینطور نیست و کاربران انتظار پاسخ سریع و درست دستگاه را دارند. همچنین برای جلب رضایت کاربران در سیستم عامل های جدید ، امکانی به کاربران داده شده است که می توانند برنامه هایی که راندمان دستگاه را پایین می آورند، به طور کلی از حالت اجرا خارج کنند.

    اگر شما یک برنامه نویس باشید، احتمالا با این مورد مواجه شده اید که ناگهان برنامه تان قادر به واکنش  و انجام امور نباشد. یک مثال ساده می تواند زمانی باشد که درخواست های زیادی به سمت سرور فرستاده می شود و پاسخ آن ها بیشتر از حد معمول طول می کشد (که مثلا این مساله می تواند ناشی از مشکلاتی در سمت سرور باشد) . اگر این درخواست ها به صورت همزمان فرستاده شده باشند، دستگاه تا زمانی که مشکل خود را برطرف نکند، نمی تواند به هیچ یک از درخواست ها پاسخ بدهد.

    برای این که بهتر بتوانید این مساله را درک کنید، بیایید یه نگاه دقیق تری به نحوه ارتباط سیستم عامل با برنامه بیندازیم. زمانی که سیستم عامل می خواهد مواردی را به برنامه اطلاع بدهد ، این موارد را با جزئیات کامل آن ها در یک صف می ریزد و به سمت برنامه می فرستد. این پیام ها در این صف قرار می گیرند و انتظار می کشند تا برنامه ، آن ها را از صف خارج کرده و بخواند.

     هر برنامه با رابط کاربری گرافیکی (GUI) یک حلقه مدیریتی اصلی دارد که به صورت پیوسته، محتویات این صف را چک می کند. اگر پیامی در صف وجود داشته باشد که هنوز پردازش نشده باشد، آن را از صف برمیدارد و پردازش می کند. در زبان های سطح بالاتر مانند C# ، این کار معمولا به وسیله ی به کارگیری event handler مناسب انجام می شود. این کد در event handler به صورت همزمان اجرا می شود. تا زمانی که این کار به صورت کامل انجام نشده است، سایر پیام ها مورد پردازش قرار نخواهند گرفت. اگر این کار، مدت زمان زیادی طول بکشد، برنامه خطای عدم پاسخگویی را به سمت رابط کاربری ارسال می کند.

    برنامه نویسی غیرهمزمان با استفاده از کلمات کلیدی async    و  await  یک راه آسان برای جلوگیری از این مشکل را به شما ارائه می کند. به عنوان مثال، event handler زیر به صورت همزمان یک منبع HTTP را دانلود می کند.

    1
    2
    3
    4
    5
    6
    private void OnRequestDownload(object sender, RoutedEventArgs e)
    {
        var request = HttpWebRequest.Create(_requestedUri);
        var response = request.GetResponse();
        // process the response
    }

    در زیر نسخه ی غیرهمزمان آن نیز آورده شده است:

    1
    2
    3
    4
    5
    6
    private async void OnRequestDownload(object sender, RoutedEventArgs e)
    {
        var request = HttpWebRequest.Create(_requestedUri);
        var response = await request.GetResponseAsync();
        // process the response
    }

     تنها سه تغییر اصلی در کد ایجاد شده است :

    method signature ما از حالت void به async void تغییر کرده است که این مورد مشخص می کند که متد به شیوه  ی asynchronous است که به ما اجازه می دهد در بدنه این متد از کلمه کلیدی await استفاده کنیم.

    به جای فراخوانی متد همزمان GetResponse ما در حال فرخوانی متد ناهمزمان GetResponseAsync هستیم. بر اساس یک قاعده ، معمولا متدهای ناهمزمان ، پسوند Async دارند.

    ما کلمه کلیدی await را قبل از فراخوانی متد ناهمزمان اضافه کرده ایم.

    این کار، رفتار مربوط به event handler را تغییر می دهد. فقط بخشی از متد در فراخوانی GetResponseAsync به صورت همزمان اجرا می شود. در این نقطه، اجرای event handler متوقف می شود و برنامه به پردازش پیام های موجود در صف باز می گردد.

    همچنین فرآیند دانلود در پس زمینه کار ادامه پیدا می کند. زمانی که این فرآیند تکمیل شود، یک پیام جدید به صف می فرستد. زمانی که حلقه ی پیام، آن را پردازش کرد، اجرای متد event handler از بعد از فراخوانی GetResponseAsync ادامه پیدا می کند. در ابتدا، پاسخی از نوع Task<WebResponse> به WebResponse متصل می شود که در متغیر response تعریف شده است. سپس ، باقی روند اجرا به همان صورت معمول انجام می گیرد. کامپایلر ، همه بخش های کد مورد نیاز برای این کار را تولید می کند.

    اگر چه برنامه های وب بر روی سرور به UI thread مخصوص به خودشان نیاز ندارند، همچنان می توانند از مزایای برنامه نویسی ناهمزمان بهره بگیرند. هر درخواست، یک پردازش جداگانه و مخصوص به خودش دارد. تا زمانی که thread با یک درخواست ، اشغال شده باشد، نمی تواند درخواست دیگری را پردازش کند. تا زمانی که thread  های محدودی برای این کار در thread pool در دسترس باشند، به همان میزان، تعداد درخواست هایی که به صورت موازی می توانند پردازش شوند، نیز کاهش پیدا می کند. هر thread   ای که منتظر تکمیل شدن یک فرآیند ورودی-خروجی باشد، یک منبع را اسراف می کند. اما اگر عملیات ورودی-خروجی به صورت ناهمزمان انجام بگیرد، thread تا زمانی که عملیات تکمیل نشود، مورد نیاز نخواهد بود و به صورت آزاد به thread pool باز می گردد و می تواند در پردازش درخواست های بعدی مورد استفاده قرار بگیرد. اگر چه این روش ممکن است تاخیر مربوط به یک درخواست را افزایش بدهد، اما بازدهی کلی سیستم را بالا می برد.

    استفاده از کلمات کلیدی async  و  await  فقط به برنامه نویسی ناهمزمان محدود نشده است. با استفاده از Task Parallel Library (TPL) شما می توانید عملیات فشرده CPU را به یک بخش جداگانه ببرید. این کار با فراخوانی Task.Run انجام می گیرد. شما می توانید وظیفه بازگرداننده شده را به همان روش مشابه با استفاده از یک متد ناهمزمان ، await کنید تا از مسدود شدن UI thread ها جلوگیری کند. برخلاف عملیات حقیقی ناهمزمان ، عملی که آن را به حالت await در آورده ایم باز هم از thread استفاده می کند. این استراتژی برای برنامه های وب، کاربردی نیست، زیرا thread خاصی در این گونه برنامه ها در دسترس نیست.

     

    برنامه نویسی ناهمزمان C# Async Await – اشتباهات متداول

    کلمات کلیدی async  و  awaitیک مزیت عالی برای توسعه دهندگان C# دارند و آن ، آسان سازی برنامه نویسی ناهمزمان است. در اغلب موارد، فرد می تواند از این موارد، بدون دانستن جزئیات استفاده کند. حداقل ، تا زمانی که کامپایلر یک اعتبار سنج خوب و کافی است، کد یک رفتار معقول از خود نشان خواهد داد. اگر چه در بعضی موارد یک کد ناهمزمان که نادرست نوشته شده است، به صورت موفق در این روش کامپایل می شود ، ولی خب همچنان مشکلات احتمالی و باگ های زیادی را رفع می کند.

    بیایید نگاهی به متداول ترین اشتباهات بیندازیم.

    Avoid با استفاده از Async Void

    شیوه نوشتن متد ناهمزمانی که ما در کد دیدیم، به صورت async void است.

    به جای این کار شما می توانید از async Task or async Task<T> در مواردی که امکان پذیر است، استفاده کنید. در این حالت، T نوع بازگشتی متد شما می باشد.

    همان طور که در مثال قبل توضیح داده شد، ما باید همه متدهای ناهمزمان را با استفاده از کلمه کلیدی await فراخوانی کنیم. به عنوان مثال :

    1
    2
    3
    DoSomeStuff(); // synchronous method
    await DoSomeLengthyStuffAsync(); // long-running asynchronous method
    DoSomeMoreStuff(); // another synchronous method

    این کار به کامپایلر اجازه می دهد تا  متد فراخوانی شونده را هنگام رسیدن به کلمه کلیدی await از سایر متدها جدا کند. اولین بخش با فراخوانی متد ناهمزمان خاتمه پیدا می کند و بخش دوم از نتایج بخش اول استفاده می کند و سپس به کار خودش ادامه می دهد.

    برای استفاده از کلمه کلیدی await در یک متد، نوع خروجی این متد باید از نوع Task باشد. این کار به کامپایلر اجازه می دهد تا اجرای متد را ادامه بدهد. به عبارت دیگر ، این کار تا زمانی ادامه پیدا خواهد کرد که متد ما به شیوه ی async نوشته شده باشد .  اگر شیوه نوشتاری متد به صورت async void باشد ما می توانیم آن را بدون استفاده از کلمه کلیدی await فراخوانی کنیم.

    1
    2
    3
    DoSomeStuff(); // synchronous method
    DoSomeLengthyStuffAsync(); // long-running asynchronous method
    DoSomeMoreStuff(); // another synchronous method

    اما این کار باعث بروز مشکلاتی در کد ما خواهد شد. به عنوان مثال این کار باعث خواهد شد تا ترتیب اجرای متدها تغییر کند. اگر این کار، باعث ایجاد مشکلات و باگ هایی در سیستم شما بشود، رفع کردن این باگ ها کار ساده ای نخواهد بود.

    برای این که از این مشکلات جلوگیری کنیم، در متد خودتان همواره از async Task استفاده کنید. استفاده از async void را فقط به event handler ها محدود کنید که اجازه ندارند هیچ نوعی را برگردانند و همچنین مطمئن بشوید که این موارد، هرگز توسط خودتان فراخوانی نشوند.

    احتیاط در مورد بن بست ها

    به عبارتی می توانیم اینطور بگوییم که متدهای asynchronous بقیه متدها را هم تحت تاثیر خودشان قرار می دهند. برای این که شما بتوانید یک method را با await به شیوه ناهمزمان فراخوانی کنید، باید متد فراخوانی شونده را نیز به صورت غیرهمزمان دربیاورید، حتی اگر این متد از ابتدا، async نبوده باشد.

    ولی زمانی که همه متدها نمی توانند به شیوه ناهمزمان تعریف شوند، ممکن است با مشکلاتی روبرو شویم. به عنوان مثال ، constructor ها (سازنده ها) نمی توانند ناهمزمان باشند، بنابراین شما نمی توانید از کلمه کلیدی await در بدنه آن ها استفاده کنید. اگر چه شما می توانید از async void  نیز استفاده کنید، اما این کار شما را از اجرای کامل برنامه باز می دارد.

    به عنوان جایگزین، شما می توانید از synchronously waiting (انتظار های همزمان ) برای متد ناهمزمان استفاده کنیم تا به این ترتیب متد بتواند به صورت کامل اجرا شود. به عنوان مثال در تکه کد زیر ، کد همزمانی که نوشته ایم، به صورت موقت ، استفاده از صف پیام ها را برای شما متوقف خواهد کرد و این کار ممکن است موجب ایجاد بن بست در فایل شما شود.

    1
    2
    3
    4
    5
    private async void MyEventHandler(object sender, RoutedEventArgs e)
    {
        var instance = new InnocentLookingClass();
        // further code
    }

    هر متدی که به شیوه ی ناهمزمان در سازنده ی InnocentLookingClass فراخوانی شود، برای ایجاد یک بن بست کافی خواهد بود.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class InnocentLookingClass()
    {
        public InnocentLookingClass()
        {
            DoSomeLengthyStuffAsync().Wait();
            // do some more stuff
        }
      
        private async Task DoSomeLengthyStuffAsync()
        {
            await SomeOtherLengthyStuffAsync();
        }
      
        // other class members
    }

    روند اجرای تکه کد بالا به این صورت خواهد بود که : MyEventHandler به صورت همزمان ، سازنده ی InnocentLookingClass را فراخوانی می کند، که آن نیز DoSomeLengthyStuffAsync را به کار می گیرد که در ادامه به کارگیری ناهمزمان SomeOtherLengthyStuffAsync را نیز در پی خواهد داشت. اجرای متدهای بعدی شروع خواهند شد و در همین زمان نیز thread ، بخش at Wait را تا اجرای کامل DoSomeLengthyStuffAsync بلاک می کند(تا قادر به انجام هیچ گونه عملی نباشد) و هر گونه کنترلی بر روی صف پیام ها را می بندد.

    در نهایت SomeOtherLengthyStuffAsync کامل شده و یک پیام به صف پیام ها می فرستد که این پیام اعلام می کند که اجرای DoSomeLengthyStuffAsync می تواند ادامه پیدا کند.متاسفانه thread اصلی منتظر اجرای کامل این بخش باقی می ماند و به پردازش پیام ها نمی پردازد و بنابراین روند اجرای برنامه کامل نخواهد شد.

    اجازه ادامه اجرا بر روی یک Thread دیگر

    بن بستی که در مثال بالا آن را مطرح کردیم، در صورتی که DoSomeLengthyStuffAsync نیاز به ادامه اجرا در thread اصلی را لازم نداشت، هرگز اتفاق نمی افتاد. اگر اینطور که عمل کنیم که در صورت خالی نبودن یک thread  ، ادامه اجرا  بر روی یکthread  دیگر، انجام بگیرد، برنامه روند درست و منطقی خواهد داشت.

    ویژگی های از پیش برنامه ریزی شده برای C# 7

    طراحان تصمیم گرفتند که در نسخه اولیه این زبان در 2013 این ویژگی async   و  await را به صورت گسترده ای، مورد استفاده قرار بدهند.

    به عنوان مثال، در C# 6.0 (که در Visual Studio 2015 ارائه شد) ، پشتیبانی برای استفاده از await را در درون بلاک های catch فراهم کرد. این کار، باعث سهولت در استفاده از این متدها در بخش مدیریت خطاها نیز شد.

    پشتیبانی از Async Main

    در بخشی که در مورد بن بست ها صحبت کردیم، بررسی کردیم که چگونه به کار گیری آن ها می تواند باعث بروز مشکلاتی شود. اما این روش برای فریم ورک های مبتنی بر event (مانند Windows Forms  و  WPF) می تواند به خوبی کار کندو زیرا event handler ها می توانند به صورت امن از async void استفاده کنند. همچنین برای برنامه های ASP.NET MVC نیز پشتیبانی از asynchronous action method ها وجود دارد.

    متد Main به عنوان یک بخش ورودی برای برنامه های کنسول نباید به صورت ناهمزمان فعالیت کند. برای فراخوانی متدهای ناهمزمان در یک برنامه کنسول ، شما نیاز دارید از متد top-level asynchronous wrapper استفاده کنید و آن را به صورت همزمان در درون Main استفاده کنید:

    1
    2
    3
    4
    static void Main()
    {  
        MainAsync().Wait();
    }

    از آنجایی که هیچ گونه حلقه پیامی در یک برنامه کنسول وجود ندارد، این کد می تواند بدون خطایی در زمینه ی بن بست ها اجرا شود.

    طراحان زبان ها ویژگی" پشتیبانی از نقطه ورود داده ها به صورت همزمان " را در طراحی هایشان در نظر می گیرند. (در برنامه های کنسول، این نقاط، همان کامپایلر ها محسوب می شوند) این کار می تواند تمامی حالت های زیر را برای نوشتن و استفاده، امکان پذیر کند.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // current valid entry point signatures
    void Main()
    int Main()
    void Main(string[])
    int Main(string[])
    // proposed additional valid entry point signatures in C# 7
    async Task Main()
    async Task<int> Main()
    async Task Main(string[])
    async Task<int> Main(string[])

    اگر چه این روش، امکانات اضافه ای را در اختیار ما قرار نمی دهد، اما می تواند برای افرادی که تازه وارد حیطه برنامه نویسی شده اند، مفید باشد، زیرا به برنامه نویس اجازه می دهد متدهای ناهمزمان را در یک برنامه کنسول به راحتی فراخوانی کنند.

    بهبود کارایی

    علاوه بر مواردی که در بالا در مورد آن ها صحبت کردیم و جزو مزایای استفاده از کلمات کلیدی async  و  await محسوب می شوند، یکی دیگر از مزایا، میزان اختصاص و استفاده از حافظه (memory allocation) است.

    هر متد ناهمزمان ، باعث ایجاد سه شی در درون heap می شود:

    الف) state machine همراه با متغیرهای محلی مربوط به متد

     ب) delegate که باید در ادامه کار مورد فراخوانی قرار بگیرد

    ج) Task بازگشتی

     

    این دسته بندی ها تا میزان زیادی باعث بهبود حافظه می شوند. دو اختصاص حافظه ای که در ابتدا نام بردیم (یعنی مورد الف و ب ) تنها زمانی اتفاق می افتند که  مورد نیاز باشند. به عنوان مثال زمانی که یک متد ناهمزمان دیگر در حالت await باشد. این حالت زمانی اتفاق می افتد که متد زیر در حالت true فراخوانی شود:

    1
    2
    3
    4
    5
    6
    7
    private async Task DoSomeWorkAsync(bool doRealWork)
    {
        if (doRealWork)
        {
            await DoSomeRealWorkAsync();
        }
    }

    این یک مثال ساختگی است، اما در متدهای درون دنیای واقعی تفاوت هایی نیز وجود دارد.

    در مورد اختصاص حافظه به returned task (Task بازگشتی ) نیز موارد بهینه سازی لحاظ شده است. شی های task متداول (برای مقادیر 0و1و true و false  و غیره) عمل cache انجام می گیرد تا به این ترتیب، از اختصاص حافظه به موارد استفاده بعدی از این متغیر ها جلوگیری شود. (یعنی یک بار یک خانه از حافظه را به 0 (به عنوان مثال) اختصاص می دهد و هر زمان دیگری در برنامه از متغیر 0 استفاده شده بود، دیگر حافظه ای به آن اختصاص داده نمی شود و از همان قبلی استفاده می شود. ).

    در C# 7 موارد بیشتری برای کاربران به ارمغان آورده شد که یکی از این موارد، امکان برگرداندن نوع خروجی در قالب ValueTask<T> به جای Task<T> است. همانطور که از نام آن نیز پیداست، برخلاف Task<T> ، ValueTask<T> خودش یک ساختار محسوب می شود . به عنوان مثال یک نوع value به جای heap در یک پشته تعریف می شود. این کار باعث بهینه سازی حافظه می شود.

    به جز مزایایی که در زمینه ی بهبود حافظه دارد، مزایایی نظیر بهبود راندمان سیستم نیز برای برنامه نویس فراهم می شود.

     منبع : edu-pb - edu-pb
    چهارشنبه 05 آبان 1395 ساعت 15:15:19
      برچسب ها : برنامه ,استفاده ,async ,صورت ,ناهمزمان ,task ,async void ,async task ,event handler ,برنامه نویسی ,کلیدی await ,کلمه کلیدی await ,کلمات کلیدی async ,برنامه نویسی ناهمزمان ,object sender routedeventargs

    کسب درآمد از راه برنامه نویسی برای تازه کاران

    خیلی‌ها برای پول درآوردن برنامه نویسی را یاد می‌گیرند و با توهم اینکه بعد از چندماه وقتی حرفه‌ای شدند پول پارو خواهند کرد قدم به دنیای جذاب و پرمخاطره برنامه نویسی می‌گذارند اما پس از مدتی دلسرد شده و سراغ کار نان و آب آورتر و کم دردسرتری خواهند رفت. کسی که در قسمتی از یک پروژه واقعی نرم‌افزاری کدنویسی کرده باشد به خوبی می‌داند که همیشه برنامه نوشتن برای خودمان آسان‌تر و لذت بخش تر از برنامه نوشتن برای دیگران است! هنگامی که برای یک مشتری واقعی یک برنامه واقعی می‌نویسید می‌فهمید که برنامه نوشتن برای خودتان چقدر لذت بخش بوده و تا به حال خبر نداشتید! به نظر من برنامه نویسان تازه کاری که پس از برخورد با مشتری و شروع یک پروژه واقعی شکست میخورند و دلسرد می‌شوند بهتر است روش خود را برای ادامه تغییر دهند. در این نوشته پیشنهاداتی بر اساس تجربه جهت کسب درآمد از طریق برنامه نویسی برای تازه کاران ارائه می‌شود.

    بلافاصله پس از یادگیری سراغ پروژه های واقعی نروید.

    شاید پس از یک ماه آموزش برنامه نویسی بتوانید به‌راحتی کدنویسی کنید، اما مطمئناً تجربه کافی برای انجام یک پروژه واقعی را ندارید. بهتر است در ابتدا برای رفع نیازهای خود و مهمتر از آن تمرین و کسب تجربه، چند برنامه کوچک بنویسید. هر برنامه‌ای که در این دوره بنویسید ارزشمند است چون به تجربه های شما اضافه می‌کند. برنامه‌هایی را که می‌نویسید کامل کنید و با دوستانتان به اشتراک بگذارید و نظر آن‌ها را بخواهید. پروژه‌هایتان را به صورت کدباز در سایت‌هایی مثل کدپلکس قرار دهید تا بازخوردهای بیشتری دریافت کنید.

    وبلاگ بنویسید.

    یکی از بهترین روش‌های یادگیری، نوشتن است. نوشتن به شما کمک می‌کند تا چیزهایی که یاد می‌گیرید را بهتر در طول زمان بخاطر بسپارید. یک وبلاگ بسازید و ایده ها و نوشته های خودتان را هرچند ابتدایی و آماتور با دیگران به اشتراک بگذارید و از بازخوردهای دیگران برای پیشرفت خود استفاده کنید.

    همیشه در حال یادگیری باشید.

    در سایت هایی مثل StackOverflow.com عضو شوید و در سئوال پرسیدن و حتی پاسخ دادن به سئوال ها فعال باشید. سعی کنید هر روز زبان انگیلیسی خود را تقویت کنید. کتاب های زبان اصلی مربوط به زبان برنامه نویسی مورد علاقه خود را مطالعه کنید و مشترک فید وبلاگ‌ها و سایت‌های مربوط به برنامه نویسی شوید. همیشه مطالعه کنید، حتی زمانی که حرفه‌ای شدید.

    پروژه رایگان انجام دهید.

    از میان آشنایان و دوستان خود اگر کسی را می‌شناسید که نیاز به برنامه ای برای انجام کارش دارد، به او پیشنهاد دهید که برنامه‌ای به رایگان برایش خواهید نوشت. موضوع برنامه هرچه که باشید همینکه شما برنامه‌ای می‌نویسید که قرار است مشکل واقعی یک نفر را حل کند واقعاً لذت بخوش خواهد بود. به هیچ وجه در این مقطع به پول فکر نکنید، این شروع کارتان خواهد بود.

    در سایت‌های همکاری پروژه‌ای عضو شوید.

    وب سایت هایی وجود دارند که کارشان رابط میان کارفرماها و متخصصانی مثل شما برای انجام پروژه های کارفرماها است. به این صورت که افرادی به عنوان کارفرما در این سایت‌ها عضو می‌شوند و پروژه‌های مورد نیاز خود را پیشنهاد می‌دهند و افرادی نیز به عنوان پیمانکار عضو سایت شده و می‌توانند این پروژه‌ها را البته با قیمت مناسب از کارفرما بگیرند. به تازگی چند وب سایت فارسی در این زمینه قعالیت می‌کنند که اکثر پروژه های آن ها در زمینه نرم افزار و برنامه نویسی است که می‌توانید در این سایت ها عضو شده و با انجام پروژه کسب درآمد کنید.

    محصول بسازید.

    در هر شهری که زندگی می‌کنید مطمئناً کسب و کارهای زیادی هستند که کارشان را به صورت دستی انجام می‌دهند. آنهایی که فکر می‌کنید بازار کار خوبی دارند و اگر یک برنامه کامپیوتری برایشان بسازید، کسب و کارشان را بهتر مدیریت خواهند کرد را شناسایی کنید و دست به کار شوید. برای مثال یک نرم افزار مدیریت مشاور املاک بنویسید و به صورت یک پکیج شیک به تمام مشاور املاک های شهر خود با قیمت پایین ارائه کنید. مطمئن باشید جواب می‌دهد.

    یک وب سایت راه اندازی کنید.

    برای خودتان یک وب سایت راه اندازی کنید و محصولات و ایده‌هایتان را ارائه دهید. پیدا کردن حتی یک مشتری هم از طریق این سایت ارزشمند است و راهگشای گام‌های بعدی شما خواهد بود. در ابتدا نیازی نیست یک سایت پیچیده و سنگین داشته باشید، همینکه باشید در اینترنت کافی است. به مرور زمان سایت خودتان را کامل تر کنید و پروژه های انجام شده‌تان را معرفی کنید و بازدید بیشتری جذب کنید.

    ایده‌ای نو ارائه دهید.

    شاید برنامه نویس خوبی نباشید، اما ایده‌های خوبی درسرتان باشد. یک برنامه یا یک وب سایت حتماً نباید خارق العاده و پیچیده باشد تا موفق بشود. بسیاری از محصولات موفق نرم افزاری از ایده های ساده و ابتدایی شکل گرفته اند. اگر ایده‌ای دارید که به نظر دوستتان احمقانه‌اس اما به نظر خودتان قابل قبول و فوق العاده است، هرچه زودتر دست به کار شوید و آن را عملی کنید. شما که چیزی برای از دست دادن ندارید!

     

     منبع : edu-pb - edu-pb
    چهارشنبه 05 آبان 1395 ساعت 15:15:19
      برچسب ها : برنامه ,سایت ,پروژه ,نویسی ,انجام ,واقعی ,برنامه نویسی ,برای انجام ,نوشتن برای ,برنامه نوشتن ,پروژه واقعی
    مکان تبلیغات شما
    تبلیغات
    مطالب تصادفی
    آخرین جستجوها