یوشا آل ایوب

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

یوشا آل ایوب

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

یوشا آل ایوب

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

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

۶۴ مطلب با موضوع «کامپیوتر :: نرم افزار» ثبت شده است

 

ظاهراً در PHP (در ویندوز) هرچیزی بعد از دستور exit بصورت ناقص(!) پردازش میشه ولی بصورت کامل حافظه مورد نیازش رو allocate میکنه...

 

خروجی یک صفحه ساده:

<?php

echo memory_get_usage();

// 217992

 

خروجی یک صفحه متغیر دار ولی exit شده:

<?php

echo memory_get_usage();

// 220552

exit; // <---------- !!

$simpleVar = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabc​dabcdabcdabcdabcdabcd';
$simpleVar .= '​abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabc​dabcdabcdabcdabcdabcd';
$simpleVar .= '​abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabc​dabcdabcdabcdabcdabcd';
$simpleVar .= '​abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabc​dabcdabcdabcdabcdabcd';
$simpleVar .= '​abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabc​dabcdabcdabcdabcdabcd';
echo $simpleVar; 

enlightened

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

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

اول اینکه بیشتر Coding-style های موجود در اینترنت بروزرسانی نمیشن یا برای ویرایشگرها و مانیتورهای قدیمی طراحی شدن... یا حتی ناقصن! دوم اینکه ای کاش مرجع رسمی براشون وجود داشت تا یک الگو، الگوی همگان میشد. نه اینکه هر شرکت و تیمی برای خودش یه سبک رو طراحی و تعیین کنه و اسمشو بذاره قرارداد/convention رسمی!

اونوقت فکر کنید برنامه نویسایی که با دو یا چند زبان مختلف برنامه نویسی میکنن، برحسب عادت چقدر براشون سخته... و حتی دچار دوگانگی شخصیتی میشن Angel

Tab:

  • سایزش در هر ویرایشگر و کامپیوتری متفاوته. (در یکی به اندازه 3 فاصله، در دیگری 4 در دیگری 5 و...)
  • میشه گفت Dynamic هستش و سایزش براحتی با تنظیم کردن سیستم/ویرایشگر قابل تبدیله.
  • در بعضی از پرینترها نادیده گرفته میشه، درنتیجه قالب کدها بهم میریزه.
  • Tab با سایز 3، یک کاراکتره.
  • معمولاً حذف و اضافه کردن Tab زمان کمتری صرف میکنه.
  • فلسفه وجود Tab برای tabulation/جدول بندی و پرش هستش.
  • در صفحات استاتیک وب، Tab پرفورمنس بالاتری در Load شدن داره. (جزیی)
  • برای indentation کردن کلیدکمتری لازمه تا فشار داده بشه. (مگر ویرایشگرهای حرفه ای)
  • همتراز/Alignment کردن توسط Tab بهتر انجام میشه.

Space:

  • اندازش در همه ویرایشگرها و کامپیوتر ها ثابته.
  • میشه گفت Static هستش و معمولاً سایزش توسط تنظیمات قابل تبدیل نیست. (مگر ویرایشگرهای حرفه ای)
  • در همه پرینترها اعمال میشه، پس قالب کدها بهم نمیریزه.
  • Space با سایز 3، 3 کاراکتره.
  • معمولاً حذف و اضافه کردن Space زمان بیشتری صرف میکنه.
  • فلسفه وجود Space برای قراردادن فضای خالی هستش. (و پریدن در بازیهای اکشن laugh)
  • در صفحات استاتیک وب، Space پرفورمنس پایینتری در Load شدن داره. (جزیی)
  • برای indentation کردن کلید بیشتری لازمه تا فشار داده بشه. (مگر ویرایشگرهای حرفه ای)
  • همتراز/Alignment کردن توسط Space سخت تر انجام میشه.

پیشنهاد من: یک TAB یا سه SPACE.

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

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

 

1- فراموش نکنید که مقدار صفت android:updatePeriodMillis در تگ <appwidget-provider فایل xml/widget_info.xml بیانگر تایمری هست که کالبک onUpdate کلاس ویدجت صدا زده میشه.

 

2- در metadata ویدجت، مقدار صفت android:minHeight و android:minWidth تعیین کننده حداقل اندازه ویدجت هستش که باید 72dp (یعنی 1x1) باشه. ولی صفت android:layout_width و android:layout_height در layout ویدجت، تعیین کننده اندازه کنونی ویدجت هستش.

 

3- از انجایی که List متدی برای اضافه کردن عنصر نداره و سایزش هم ثابت هست، برای تبدیل Array به ArrayList باید به این روش عمل کنید:

ArrayList<String> _arrayList = new ArrayList<String>(Arrays.asList(myArray));

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

چند وقت پیش یکی از اعضای انجمن IranPHP سوالی درباره "سنجش دانش و سطوح برنامه نویسی" کرد که منم اینطور پاسخ دادم:

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

در ادامه مقاله قبلیم که شماره سه "نکات و اصول مهم در برنامه نویسی 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 هست و فقط یکبار بارگذاری میشه.

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

Virtual File System یا سیستم فایل مجازی

 

Virtual File System(مخفف VFS) یک ساب سیستم مهم در Kernel لینوکس هست که لایه بین filesystem و برنامه های user-space رو تشکیل میده. درواقع همه filesystem ها، با تکیه بر VFS می تونن شناسایی بشن و تبادل اطلاعات کنن. همین مسئله، برنامه های user-space رو قادر کرده که توسط دستورات موجود در VFS برای خواندن و نوشتن در filesystem های گوناگون اقدام کنن:

 

نکته: در اینجا منظور از لایه، همون Abstraction layer و منظور از دستورات، همون System call/SysCall هستش.

نکته 2: البته به برکت wrap های Gnu C Library، کمتر پیش میاد که برنامه user-space نیاز به استفاده از System call داشته باشه.

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

تغییر رفتار و امکانات keyboard اندروید در مقابل مقدار صفت inputype عنصر EditText: (تست شده روی اندروید 4.4.3 و 2.3.3)

<EditText android:id="@+id/et_test" android:inputType="?????"/>

 

نوع inputtype نوع Keyboard رفتار دکمه Enter شکلک Case حروف Suggestion کاراکترهای اضافی
textLongMessage الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز
textFilter الفبا / پیشفرض ارسال / بعدی دارد lowercase ندارد , و . و همه چیز
textCapWords الفبا / پیشفرض ارسال / بعدی دارد Camel Case دارد , و . و همه چیز
textCapSentences الفبا / پیشفرض ارسال / بعدی دارد Sentence case دارد , و . و همه چیز
time اعداد ارسال / بعدی ندارد - ندارد فقط :
textMultiLine الفبا / پیشفرض خط بعدی دارد lowercase دارد , و . و همه چیز
number اعداد ارسال / بعدی ندارد - ندارد ندارد
textEmailAddress الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد @ و . و همه چیز
بدون نوع الفبا / پیشفرض خط بعدی دارد lowercase دارد , و . و همه چیز
textPassword الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد , و . و همه چیز
text الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز
textShortMessage الفبا / پیشفرض شکلک دارد lowercase دارد , و . و همه چیز
textUri الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد / و . و همه چیز
textCapCharacters الفبا / پیشفرض ارسال / بعدی دارد UPPERCASE دارد , و . و همه چیز
phone اعداد ارسال / بعدی ندارد - ندارد * # . -  / () W P N , +
textPersonName الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز

 

نکته: در صورتی که تنظیم Auto-capitalization در تنظیمات Keyboard فعال باشه، Case حروف رفتار پیشفرض خواهد داشت، در غیر اینصورت همه حروف کوچیک خواهند شد.

نکته 2: زبان نوع Keyboard اعداد، همگی اعداد انگلیسی 1234567890 می باشد.

نکته 3: در صورتی که تنظیم Correction/Suggestion در تنظیمات Keyboard فعال باشه، Suggestion بدرستی رفتار خواهد کرد، درغیر اینصورت در همه موارد خاموش خواهد ماند.

 

۴ نظر ۹۵/۰۶/۲۳
یوشا آل ایوب

شیوه درست صدا زدن 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

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