یوشا آل ایوب

وبگاه دست نوشته ها و تجربیات شخصی
بِسمِ اللّه‏ِ الرَّحمنِ الرَّحيمِ

یوشا آل ایوب

وبگاه دست نوشته ها و تجربیات شخصی

یوشا آل ایوب

دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست!

تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

۱۰ مطلب با کلمه‌ی کلیدی «نکات و اصول مهم» ثبت شده است

در ادامه مقاله قبلیم که شماره سه "نکات و اصول مهم در برنامه نویسی Java/Android" بود، در این مقاله شماره چهار همین موضوع رو ارائه میدم... منتها بیشتر به رفع مشکلات و خطاها می پردازم.

 

1- برای حذف شدن notification هنگام کرش برنامه یا ویدجت، همیشه از یک ID ثابت برای Notification استفاده کنید.

 

2- مقدار صفت android:targetSdkVersion در تگ uses-sdk فایل AndroidManifest.xml، به دستگاه با نسخه مشابه SDK فرمان میده که سیستم compability رو غیرفعال کنه. بنابراین سرعت پردازش برنامه افزایش و کارایی برنامه بهبود پیدا می کنه.

۳ نظر ۹۵/۱۰/۲۳
یوشا آل ایوب
  • Version چیست

Version یا همون نسخه، مشخصه ای برای دسته بندی وضعیت محصول منتشر شده و [مختصر] شرحی از تغییرات انجام گرفته هستش.

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

مشخصه Version می تونه بصورت عدد، کلمه و تاریخ باشه; یا حتی هر سه:

Major.Minor.Revision/Patch[.Build] [Architecture] ReleaseState [Date] [Time]

۷ نظر ۹۵/۰۹/۰۳
یوشا آل ایوب

در ادامه مقاله قبلیم که شماره دو "نکات و اصول مهم در برنامه نویسی Java/Android" بود، در این مقاله شماره سه همین موضوع رو ارائه میدم...

 

1- با اضافه کردن خاصیت android:supportsRtl="true" در تگ application فایل AndroidManifiest.xml، مشکل راست به چپ صفحات preferences تون حل خواهد شد. (برای اندروید 4.2 به بعد)

 

2- آیا میدونید هیچ تفاوتی بین fill_parent و match_parent در خاصیت عناصر گرافیکی وجود نداره و هر دو دارای مقدار 1- هستند؟

این مسئله فقط یک تغییر نام جزیی بوده که از API 8 به بعد صورت گرفته و پیشنهاد شده که از match_parent استفاده بشه.

 

3- از اونجایی که SharedPreference ها عملیات read/write برروی دیسک انجام میدن و معمولاً هم در متد OnCreate() یا OnResume() فراخوانی و load می شن، پس بهتره در thread غیر از UI اعمال بشن، تا برنامه رو دچار وقفه نکنن.

همچنین لازم نیست نگران تعدد عملیات باشید، چراکه SharedPreference یک شی Singleton هست و فقط یکبار بارگذاری میشه.

۱ نظر ۹۵/۰۸/۰۶
یوشا آل ایوب

شیوه درست صدا زدن Superclass ها در Activity اندروید:

// Called after onCreate has finished, use to restore UI state
@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
    super.onRestoreInstanceState(savedInstanceState); // Always call the superclass method at FIRST.

    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate.
    // Will only be called if the Activity has been
    // killed by the system since it was last visible.
}

// Called before subsequent visible lifetimes for an activity process.
@Override
public void onRestart()
{
    super.onRestart(); // Always call the superclass method at FIRST.

    // Load changes knowing that the Activity has already
    // been visible within this process.
}

// Called at the start of the visible lifetime.
@Override
public void onStart()
{
    super.onStart(); // Always call the superclass method at FIRST.

    // Apply any required UI change now that the Activity is visible.
}

// Called at the start of the active lifetime.
@Override
public void onResume()
{
    // Resume any paused UI updates, threads, or processes required
    // by the Activity but suspended when it was inactive.

    super.onResume(); // Always call the superclass method at LAST.
}

// Called to save UI state changes at the end of the active lifecycle.
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate and
    // onRestoreInstanceState if the process is
    // killed and restarted by the run time.
    super.onSaveInstanceState(savedInstanceState); // Always call the superclass method at LAST.
}

// Called at the end of the active lifetime.
@Override
public void onPause()
{
    // Suspend UI updates, threads, or CPU intensive processes
    // that don't need to be updated when the Activity isn't
    // the active foreground Activity.
    super.onPause(); // Always call the superclass method at LAST.
}

// Called at the end of the visible lifetime.
@Override
public void onStop()
{
    super.onStop(); // Always call the superclass method at FIRST.

    // Suspend remaining UI updates, threads, or processing
    // that aren't required when the Activity isn't visible.
    // Persist all edits or state changes
    // as after this call the process is likely to be killed.
}

// Sometimes called at the end of the full lifetime.
@Override
public void onDestroy()
{
    // Clean up any resources including ending threads,
    // closing database connections etc.

    super.onDestroy(); // Always call the superclass method at LAST.
}

 

خلاصه مطب: در متد های onRestoreInstanceState، onStop, onRestart, onStart، ابتدا باید Superclass صدا زده بشه و بعد کدهای شما قرار بگیره. اما در متدهای onDestroy, onPause, onSaveInstanceState, onResume ابتدا باید کدهای شما قرار بگیره و بعد متد Superclass صدا زده بشه.

عدم رعایت این اولویت ها گاهی باعث کندی، crash کردن، memory leak، ناهماهنگی در UI، باگهای DataSaving و امثالش میشه... پس حتماً رعایت کنید.

 

(شاید درصد کمی از برنامه ها باشند که از این قائده پیروی نمی کنند، اما اون هم با آگاهی کامل از محتوا و مکانیسم Superclass ها.)

 

منبع: پروفسور Andrew T. Campbell (و گوگل)

http://www.cs.dartmouth.edu/~campbell/cs65/lecture05/lecture05.html

۰ نظر ۹۵/۰۶/۰۷
یوشا آل ایوب

 

همونطور که می دونید برنامه Git برای کار با repository، پنج پروتکل در اختیار ما گذاشته که هرکدوم مزایا و معایب خودشونو دارن. این پروتکل ها:

1- File (یا همون Local protocol)

2- HTTP (یا همون Dumb protocol)

3- HTTPS (یا همون Smart protocol)

4- SSh

5- Git

هستند. اما از کدوم پروتکل باید استفاده کنیم؟ کدوم پروتکل امنیت بیشتری داره؟ و کدوم پروتکل سرعت بیشتری داره؟

پس وارد جزئیات میشیم!

۱ نظر ۹۵/۰۳/۰۹
یوشا آل ایوب

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

 

1- هنگامی که دستگاه با وضعیت Low-Memory مواجه می شه، متد onStop() توسط DVM نادیده گرفته میشه. پس حتاالمکان برنامه و اطلاعات مهمش رو در متد onPause() finalize کنید و نه در متد onStop().

در وضعیت Low-Memory، گاهی استفاده از متد System.runFinalization() و System.gc() می تونه کارساز باشه.

 

2- طبق گفته گوگل، حتاالمکان متد ها رو static تعریف کنید. اینکار سرعت پردازش رو 15 تا 20 درصد افزایش میده.

 

3- URLConnection یا Apache HTTP؟

طبق گفته ی وبلاگ Jesse Wilson، عضو تیم توسعه DVM، Apache HTTP در اندروید Froyo و قبل تر باگهای کمتر و بیشترین سازگاری رو داره. درحالی که UrlConnection در اندروید Gingerbread و جدیدتر باگهای کمتر، امکانات بیشتر، بهینه تر و سازگاری بیشتری رو داره... پس در انتخاب اینها دقت کنید.

۰ نظر موافقین ۱ مخالفین ۰ ۹۴/۰۴/۱۳
یوشا آل ایوب

/**
 * A hack to support __construct() on PHP 4
 * Hint: descendant classes have no PHP4 class_name() constructors,
 * so this constructor gets called first and calls the top-layer __construct()
 * which (if present) should call parent::__construct()
 *
 * @return Object
 */
function Object()
{
    $arguments = func_get_args();

    if (method_exists($this, '__destruct')) register_shutdown_function(array(&$this, '__destruct'));

    call_user_func_array(array(&$this, '__construct'), $arguments);
    return;
}

https://github.com/felixge/raleigh-workshop-08/blob/master/application/cake/libs/object.php

۱ نظر ۹۲/۰۵/۰۲
یوشا آل ایوب

 

# 1
defined(define('AAA', !define('BBB', define('CCC', !!!!!!!!!!!!NULL . !define('DDD', define('EEE', !!!!!!!!!!!!NULL . !define('FFF', define('GGG', !define('HHH', define('III', !define('JJJ', define('KKK', !define('LLL', define('MMM', !define('NNN', !print(5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 2))))))))))))))));

# 2
echo ('First define: ' . (int)AAA); # ?!
echo '<br/>';
echo ('Last define: ' . (int)NNN . !!!!!!NULL); # ?!

# 3
echo '<br/>';
echo ('Last define: ' . print !!!!!NULL . !print NULL . print !!!!!NULL . !print print 'DAMNED BACK-OFF -----> '); # ECHO?!

# 4
echo '<br/>';
print_r (array(array( print !print !print !print !print define(54321 . NULL, 'WOW!')))); # DEFINE 54321!
echo '<br/>';

# 5
echo (int)defined(54321); # IS DEFINED!

# 6
echo '<br/>';
echo (exit(is_null(!defined(!print('Test!' . !!!!!NULL . NULL . !!!!!NULL . NULL . NULL))))); # ?!
۰ نظر ۹۲/۰۱/۰۷
یوشا آل ایوب

 

1- هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید. یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess یا HT برای تعیین سطح دسترسی inc. استفاده کنید.

با اینکار از دسترسی مستقیم و خوندن محتوای فایل توسط URL/Address bar جلوگیری می کنید.

 

2- حتاًالمکان تگ های اضافی و فضاهای خالی رو حذف و از باز و بسته کردن بیش از حد تگهای <?php ?> سرور خودداری کنید. (مخصوصاً در پروژه های سنگین)

اینکار به مقدار قابل توجهی در سرعت پردازش سورس PHP تون تاثیر میزاره.

 

3-  کلاس را با متد __construct یا نام کلاس شروع کنید و با متد __destruct پایان بدید. همچنین تمامی فیلدهای داخل کلاس رو در درون متد __destrunt با دستور unset نابود کنید. اگر هم از ارث بری کلاس استفاده نمی کنید، کلاس و متدها رو با کلمه کلیدی final آغاز کنید.

۱ نظر ۹۲/۰۱/۰۵
یوشا آل ایوب

مقایسه سرعت بین * count و count FIELD در MySQL با موتور MyISAM:
در مواقعی که قصد شمارش رکورد ها/سطر رو دارید. (در اینجا fld_test از نوع عدد هستش و ایندکس نشده.)

 

سرعت بیشتر:

"select count(`fld_test`) from `tbl_data`;"

0.0561680068970
0.0578269958496
0.0581769943237
0.0587110519409
0.0590591430664
0.0594940185547
0.0598769953438

 

سرعت کمتر:

"select count(*) from `tbl_data`;"

0.0602030754089
0.0607211589813
0.0607681274414
0.0608351230621
0.0610001087189
0.0623991489410
0.0629029273987
۰ نظر ۹۱/۱۱/۱۶
یوشا آل ایوب