مطالب وبلاگ

حل مشکلات Gradle در اندروید استودیو پس از بروزرسانی

تصور میکنم که اگر از کاربران اندروید استودیو در مورد بزرگترین مشکل در کار با این IDE کارا و جذاب سوال شود، همگی به یک مورد اشاره خواهند کرد: Gradle

gradlephant-291x300_light

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

مخزن پیش فرضی که gradle جهت دانلود فایلها و dependency ها از آن استفاده میکند، JCenter است که به دلیل بسته شدن دسترسی ip های ایران به این پایگاه، انواع مشکلات مربوط به sync و دانلود پیش می آید. اما با تغییر repo پیش فرض به Maven این مسائل حل میشوند.

مشکل جدیدی که با بروز رسانی gradle به نسخه 2.14.1 خودنمایی میکند، عدم تطابق آن با قابلیت Instant Run در اندروید استودیو است.

در واقع اگر خطای ذیل در زمان اجرای برنامه مشاهده شد:

this version of android studio is incompatible with the gradle plugin used 2.14.1

راه حل آن غیر فعال کردن instant run در Settings/Preferences > Build, Execution, Deployment option > Instant Run میباشد.

 

پ.ن: این قابلیت باعث تسریع فرآیند اجرای برنامه بر روی emulator یا گوشی متصل به دستگاه در زمان اجراهای متوالی میگردد.


مقایسه سرعت اجرای دستورات شرطی در Android

  • فکر میکنید سرعت اجرای دستورات شرطی در android چه تفاوتی با یکدیگر دارد؟!
  • کدام دستور بیشترین و کدامیک کمترین زمان را مصرف خواهند کرد؟!

در این پست میخواهیم مقایسه ای بین سرعت اجرای سه دستور شرطی If، Switch و عملگر سه گانه (Ternary) داشته باشیم. البته با توجه به استفاده از جاوا در اندروید، شاید بهتر بود که عنوان این پست را مقایسه دستورات شرطی در جاوا، نامگذاری کنیم، اما از آنجا که کل عملیات برای اجرا در موبایل و در محیط Android Studio اتفاق افتاده است، نام فعلی را انتخاب نمودم.

Android (ادامه مطلب…)


روش استفاده از کتابخانه های AAR در Android

با ارائه سیستم Gradle در Android Studio، پیشرفتهای زیادی در روش build پروژه ها بوجود آمده که تا حد زیادی در زمان مورد نیاز صرفه جویی میشود. از جمله این موارد میتوان به Build Flavor ها اشاره کرد که در آینده مطالبی در مورد آنها خواهم نوشت.

اما، موضوع این پست استفاده از کتابخانه های AAR است.

gradle (ادامه مطلب…)


بررسی جایگاه root و stage در Flash و AS3

stage شئ واحدی است که در هر فایل swf، به عنوان دربرگیرنده اصلی محسوب شده و تمام اشیاء و تصاویر دیگر، درون لیست نمایش آن ترسیم خواهند شد.
اما شئ دیگری به نام root نیز وجود دارد که مستقیماً به Timeline اصلی انیمیشن اشاره دارد. به عبارت ساده‌تر، شئ root که در AS2.0 به صورت _root مورد ارجاع قرار می‌گرفت، یک DisplayObjectContainer است که به صورت پیش‌فرض در عمق صفر از شئ stage قرار دارد.
به صورت پیش‌فرض، تمام ترسیماتی که بر روی صفحه انیمیشن فلش صورت می‌گیرد، به جای اینکه مستقیماً در لیست نمایش stage باشد، در شئ root انجام می‌شود. به عبارتی تمامی اشیاء و محتوای انیمیشن فلش، زیر مجموعه شئ root هستند که یک DisplayObjectContainer پیش‌فرض و در عمق صفر از شئ دربرگیرنده stage قرار دارد.
مثال:

trace(stage,  root);    
// Output: [ object Stage] [ object MainTimeline]

نکته‌ای که باید در مورد شئ root به آن توجه شود این است که برای فراخوانی متدها یا استفاده از خصیصه‌های آن، نمی‌توان مستقیماً از کلمه root استفاده نمود، بلکه باید صراحتاً نوع آن در پرانتز ذکر گردد(انتصاب نوع پویا).

مثال 1: دستور اول منجر به بروز خطا می‌گردد، اما دستورات بعدی به درستی اجرا خواهند شد.

root.addChild(sh);     //error

Object(root).addChild(sh);
MovieClip(root).addChild(sh);
DisplayObjectContainer(root).addChild(sh);

مثال2 : تفاوت شئ root و stage:

trace(stage is Object, root is Object);		
// Output: true    true
trace(stage is MovieClip, root is MovieClip);		
// Output: false  true
trace(stage is Sprite, root is Sprite);			
// Output: false  true
trace(stage is DisplayObject, root is DisplayObject);	
// Output: true    true
trace(stage is DisplayObjectContainer, root is DisplayObjectContainer);	
// Output: true   true

دستور is در مثال بالا، نوعی عبارت منطقی به وجود آورده که تعلق یک شئ را به یک کلاس والد، بررسی می‌نماید.


مراحل اجرای الگوریتم ژنتیک

به طور کلی نمودار ذیل، مراحل اجرای الگوریتم ژنتیکی را نمایش میدهد:

ga-shams

حال با توجه به نمودار گردش کار، مراحل کار الگوریتم را به این شکل بیان می‌کنیم:

1. با توجه به نوع مسئله و ساختار پاسخ‌های قابل قبول برای آن، ساختار کروموزومها را مشخص می‌سازیم. معمولاً یک راه‌حل مسئله، به صورت لیستی از متغیرهای مسئله نشان داده می‌شود که در اینجا نیز می‌توان آن را به صورت یک آرایه عددی نمایش داد.

2. تابع ارزیابی (Fitness function) مناسبی جهت ارزیابی کروموزومها (پاسخ‌ها) طراحی می‌کنیم. این مرحله اهمیت بسیار زیادی دارد، چرا که اگر نتوان تابعی مناسب جهت ارزیابی کروموزومهای تولید شده در نسلهای مختلف طراحی نمود، به هیچ وجه نمی‌توان مسئله مور نظر را با استفاده از الگوریتم ژنتیک حل کرد.

3. مقادیر پارامترهای اولیه الگوریتم را با توجه به صورت مسئله تعیین می‌کنیم. مهمترین پارامترهای مورد استفاده عبارتند از، اندازه جمعیت اولیه (N)، احتمالات مربوط به انتخاب (P­S)، ترکیب (PC)، جهش (PM)، ابقاء (PR) و همگرایی (PCN)، نوع انتخاب و نوع عملگرهای ترکیب و جهش.

4. یک جمعیت تصادفی با N کروموزوم تولید می‌شود. N اندازه جمعیت یا تعداد اعضای نسل آغازین بوده و هر کروموزوم نماینده یک جواب برای مساله است.

5. با استفاده از تابع ارزیابی، کیفیت تمام کروموزومهای این نسل را محاسبه و ذخیره می‌نماییم.

6. با توجه به مقدار کمیت درصد انتخاب (P­S)، جفت کروموزومهایی را به عنوان والدها انتخاب می‌کنیم. روند انتخاب والدها با استفاده از مقادیر ذخیره شده تابع ارزیابی انجام می‌گیرد.

7. هر جفت از والدها، با توجه به مقدار احتمال ترکیب (PC)، با یکدیگر ترکیب شده و یک یا دو کروموزوم فرزند تولید می‌کنند.

8. هر کروموزوم فرزند، با توجه به مقدار احتمال جهش (PM)، جهش می‌یابد.

9. با توجه مقدار احتمال ابقاء (PR)، تعدادی از فرزندان برای جایگزین شدن در نسل جدید انتخاب شده و مابقی نسل جدید از کروموزومهای نسل قبلی انتخاب می‌گردند، سپس نسل جدید به جای نسل قبلی در برنامه جایگزین می‌شود.

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



  • آرشیو:

  • .
    Copyright (c) 2010 www.mshams.ir