یوشا آل ایوب

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

یوشا آل ایوب

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

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

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

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

programming mistakes

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

مقایسه پرفورمنس(startup, rendering, event handling):

Windows
FLTK > wxWidgets > GTK > Qt

Linux
FLTK > GTK > (wxWidgets / Qt)

نکته: در اینجا منظور از GTK نسخه GTKmm هستش که wrapper/مخصوص  ++C  هستش.
نکته 2: عناصر کتابخانه  wxWidgets صددرصد native هست. اما عناصر کتابخانه FLTK و Qt و GTK فقط "شبیه" به native هستن. که برای این شبیه سازی از CSS و API های theming سیستم استفاده می کنن.


این توضیحات رو هم در نظر بگیرید:
- کتابخانه FLTK از نظر استایل بهترین گزینه برای لینوکس با محیط EDE هستش. از نظر فضای دیسک، بسیار کم حجم هستش. پرفورمنس بالاتری نسبت به بقیه کتابخانه ها داره. استفاده ازش آسون هست. از بعضی دیگر زبانها هم پشتیبانی میکنه. در ویندوز برروی WinAPI، در لینوکس برروی X Window و در مک بر روی Quartz سوار هست. FLTK بعضی از widget های مدرن مثل Treeview رو نداره. بعضی از widget ها حالت RTL رو ندارن.

 

- کتابخانه wxWidgets از نظر استایل بهترین گزینه برای ویندوز و مک و لینوکس هستش. از نظر فضای دیسک، حجیم هستش. یادگیری و استفاده ازش کمی سخته. UI designer هم داره. از خیلی زبانها پشتیبانی میکنه. در لینوکس بر روی کتابخانه GTK قرار داره و در پشت پرده از API های GTK استفاده میکنه. wxWidgets  فقط کتابخانه GUI نیست، یک فریم ورک محسوب میشه.

 

- کتابخانه GTK از نظر استایل بهترین گزینه برای لینوکس با محیط Cinnamon, GNOME, XFCE یا Mate هستش. یادگیری و استفاده ازش آسونه. UI designer هم داره. از خیلی زبانها پشتیبانی میکنه.

 

- کتابخانه Qt از نظر استایل بهترین گزینه برای لینوکس با محیط KDE, TDE یا LXQt هستش. از نظر فضای دیسک، حجیم هستش. یادگیری و استفاده ازش بواسطه Qt Creator آسونه. UI designer هم داره. از خیلی زبانها پشتیبانی میکنه. امکانات غیر استاندارد هم داره(meta-object). طیف گسترده تری از platform ها رو در بر گرفته. Qt فقط کتابخانه GUI نیست، یک فریم ورک محسوب میشه.  برای پروژه های غیر opensource باید مجوز داشته باشید. از مدل برنامه نویسی reactive پشتیبانی می کنه. (به کمک شتابدهنده گرافیکی میشه بار سنگین رندر رو از روی پردازنده برداشت، بنابراین باعث افزایش پرفورمنس میشه)

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

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

 

1- تفاوت HashMap و HashTable:
کلاس HashMap از نوع synchronize نیست پس thread-safe نیست. اما کلاس HashTable از نوع synchronize هستش.
کلاس HashMap بخاطر synchronize نبودن کمی سریعتر از HashTable عمل میکنه.
کلاس HashMap اجازه داشتن یک کلید null و چندین مقدار null رو داره، اما کلاس HashTable همچین اجازه ای رو نداره.
کلاس HashMap زیرکلاس AbstractMap هستش، اما کلاس HashTable زیرکلاس Dictionary هستش.
کلاس HashTable تقریباً منسوخ شده و باید از جایگزینش ConcurrentHashMap استفاده بشه.
و...

در بیشتر موارد کلاس HashMap استفاده میشه، درصورتی که synchronization در اولویت نباشه.

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

 

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

 

1- جهت پشتیبانی از ارث بری چندگانه در PHP میتونید توسط trait ها اون رو شبیه سازی کنید.

trait PHP
{
   public function printPHP()
   {
      echo 'PHP ';
   }
}
trait Java
{
   public function printJava()
   {
      echo 'Java ';
   }
}
trait PHPJava
{
   use PHP, Java;
}
class ProgrammingLanguages
{
   use PHPJava;
}

 

2- اگر در حین کار با Composer یا PHPUnit با خطای module openssl is already installed on Unknown in line 0 مواجه شدید، کافیه اکستنشن openssl رو در PHP.ini غیرفعال کنید:

ویندوز
;extension=php_openssl.dll

لینوکس
;extension=php_openssl.so

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

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

 

1- بهتره همیشه شماتیک :file رو در کلاس WebView رو مسدود کنید.

کلاس WebView قابلیت نمایش صفحات وب در داخل اکتیویتی رو فراهم میکنه، و از اونجایی که دیگر برنامه ها قادرن Intent URI به WebView ایجاد شده بفرستن، پس این امکان رو هم دارن تا بتونن فایل یا آدرس URI آلوده رو در دستگاه بارگذاری کنن...

راه حل:

String _intentUrl = getIntent().getStringExtra("http://blog.ir");

if (!_intentUrl.startsWith("file:"))
{
   loadUrl = _intentUrl;
}

 

2- از انجایی که همه برنامه ها قادرن محتوای logcat رو read کنن، هرگز اطلاعات حساس رو برای دیباگ Log نکنید، مخصوصاً درخواستها و پاسخهای HTTP رو.

 

3- اگر در حین بازکردن برنامه Eclipse با خطای Java was started but returned exit code 13 مواجه شدید، این یعنی مثلاً Java 64bit نصب کردید، درصورتی که Eclipse تون 32bit هستش. یا Java 32bit نصب کردید، درصورتی که Eclipse تون 64bit هستش.

بنابراین باید معماری هردو یکی باشه... مثلاًً هردو 32bit یا هردو 64bit باشن.

نکته: در صورت حل نشدن مشکل با نصب معماری مناسب، فایل eclipse.ini رو که در کنار فایل اجرایی Eclipse تون هست رو باز کنید و بدنبال واژه –vm بگردید... بعد در زیر این واژه مسیر نصب شده Java رو جایگزینش کنید...

و یا برنامه Eclipse رو باز کنید و به مسیر Menu -> Prefecences -> Java -> Installed JREs برید و مسیرنصب شده Java رو بهش بدید...

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

 

1- همیشه از تابع mysql_tquery() بجای mysql_query() استفاده کنید. تابع mysql_tquery از نوع multi-thread هستش و میزان وقفه/lag در سرور رو بسیار کاهش میده. (عملیات رو بین Thread ها تقسیم میکنه)

 

2- درصورتی که از سیستم های ضد hack/cheat استفاده می کنید، همیشه EnableStuntBonusForAll رو 0 قرار بدید.

در غیراینصورت سرور کاربر رو هکر قلمداد میکنه.

 

3- توسط پلاگین crashdetect میتونید crash های سرور رو ردیابی کنید.

https://github.com/Zeex/samp-plugin-crashdetect

نکته: برای استفاده از این پلاگین در ویندوز، مطعمن بشید که VC++ runtime 2010 - VC10 نگارش x86 و x64 رو نصب دارید.

 

4- همیشه دستورات AddPlayerClass() رو در مختصات مناسب و قابل دسترس تنظیم کنید تا در صورت بروز باگ یا مشکلات شبکه ای(packet lost) کاربر به موقعیت مناسبی teleport بشه.

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

 

  1. باید مشخصات فنی و قطعات داخلی لپ تاپ رو مناسب با نوع کاریری تون انتخاب کنید. برای برنامه نویسی و کارهای پردازشی: CPU Intel, Storage SSD. برای بازی و کارهای گرافیکی: CPU AMD, VGA AMD و مانیتور حرفه ای
  2. باید لپ تاپ حداقل یک سوکت USB3، یک سوکت HDMI، یک سوکت شبکه و ترجیحاً یک سوکت VGA، یک سوکت SATA  و... داشته باشه.
  3. باید سیم شارژ لپ تاپ بلند باشه.
  4. نباید فاصله کلیدهای F1-F12 از کلید های زیرین کم باشه.
  5. باید لپ تاپ چراغهای status برای hard, power, wifi و... رو داشته باشه.
  6. نباید داخل صفحه مانیتور پیکسل های سوخته داشته باشه. (نقطه های ریز سیاه)
  7. نباید لبه پایین لپ تاپ(محل قرار گیری دست ها) برجسته باشه.
  8. نباید پیچ های پشت لپ تاپ زخم یا خوردگی داشته باشن.
  9. باید فاصله مناسبی بین کلیدهای اصلی کیبورد وجود داشته باشه. (به هم چسبیده نباشن)
  10. نباید محل نصب CPU در زیر محل قرارگیری دست ها باشه.
  11. باید نوع معماری سی پی یو Intel64 یا AMD64 باشه.
  12. درصورت داشتن گارانتی، نباید برچسب ها و هولوگرام های پشت لپ تاپ پارگی یا لکه داشته باشن.
  13. درصورت داشتن گارانتی، مطمعن بشید که شماره سریال روی جعبه دستگاه و روی بدنه دستگاه با شماره سریال روی کارت گارانتی یکسان باشن.
  14. درصورت آکبند بودن دستگاه، نباید تاریخ شروع و پایان گارانتی گذشته باشه.
  15. باید RAM لپ تاپ حداقل 4 یا 8 گیگابایت باشه.
  16. باید RAM لپ تاپ از نوع DDR3 یا DDR4 یا بالاتر باشه.
  17. باید عمر باطری حداقل 8 ساعت باشه.
  18. نباید وزن لپ تاپ بیش از حد سنگین باشه.
  19. بهتره RAM لپ تاپ قابلیت ارتقا داشته باشه و fix نباشه.
  20. بهتره که صفحه ی نمایش مات باشه و نور محیط رو انعکاس نده.
  21. بهتره که کلیدهای End, Page UP/Down, Insert, Delete مستقل باشن و ترکیبی نباشن.
  22. بهتره که نوع صفحه نمایش HD یا Full HD باشه.
  23. بهتره که لپ تاپ نوع صدای دالبی هم داشته باشه.
  24. اگر نوع کاربری تون Gaming هست، باید کیبورد لپ تاپ از نوع 4 کلید همزمان باشه.
  25. بهتره صفحه کلید لپ تاپ بدنه تلقی و مجزا نداشته باشه.
  26. بهتره که لپ تاپ کیبورد اعداد هم داشته باشه.
  27. بهتره که کلید های Capslock و Numlock چراغ status داشته باشن.
  28. بهتره که CPU لپ تاپ از نسل های جدید CPU باشه.
  29. بهتره لپ تاپ CD/DVD درایورها رو هم داشته باشه تا مجبور نشید از اینترنت دانلود کنید.
  30. بهتره که سایز مانیتور لپ تاپ حداقل 15 اینچ باشه. (17 اینچ برای برنامه نویسی/طراحی)
    • نکته: هرچقدر که سایز مانیتور بزرگتر باشه، مصرف باطری هم بیشتر میشه.
  31. بهتره که لپ تاپ با سیستم عامل لینوکس هم سازگار باشه.
  32. اگر از سیستم عاملهای لینوکس استفاده می کنید باید قطعات و درایورها با لینوکس سازگار باشن.
  33. بهتره که باطری لپ تاپ قابلیت جدا شدن داشته باشه. (یعنی در داخل لپ تاپ پیچ نشده باشه)
  34. بهتره که لپ تاپ Webcam هم داشته باشه.
  35. بهتره که لپ تاپ از boot نوع BIOS/Legacy هم پشتیبانی بکنه.
  36. بهتره storage لپ تاپ SSD باشه.
  37. بهتره که لپ تاپ سیستم بلوتوث هم داشته باشه.
  38. بهتره که لپ تاپ استوک نباشه.
    • نکته: لپ تاپ استوک به لپ تاپ های دست دومی گفته میشه که پلمپ شون باز شده، استفاده و بعد فروخته شده یا پلمپ شون باز شده اما استفاده نشده و به انبار مرجوع شده.
  39. بهتره بدنه لپ تاپ فلزی نباشه تا در مقابل فرورفتگی و برق اتصال به بدنه ایمن باشه.

 

نکته: منظور از Core همون هسته های فیزیکی(چیپ) هستش که داخل CPU قرار دارن و هرکدوم میتونن یک دستورالعمل(مثلاً برنامه) رو به تنهایی پردازش کنن. هسته ها قادرن هرکدوم به تنهایی و بصورت موازی یک برنامه رو اجرا کنن. مثلاً یک CPU با 4 هسته فیزیکی قادره 4 برنامه رو بصورت موازی اجرا کنه ولی بیشتر از 4 برنامه، دستورالعمل های برنامه بین همه هسته ها تقسیم میشه.

نکته 2: منظور از Thread (در حوزه سخت افزار) هسته های مجازی/نرم افزاری هستش که داخل Core قرار دارن و هرکدوم میتونن یک دستورالعمل(مثلاً برنامه) رو پردازش کنن. بنابراین یک CPU با 4 Core درواقع 8 هسته داره. 4 هسته فیزیکی و 4 هسته مجازی/نرم افزاری. به این عمل Hyperthreading هم گفته میشه.

نکته 3: CPU های دارای Turbo frequency قادرن بصورت اتوماتیک قدرت پردازشی خودشون رو افزایش بدن. مثلاً از 3.10GHz به 4.10GHz (درصورتیکه دما، باطری و... در حد مناسبی باشه)

نکته 4: Cache CPU حافظه لطیف و موقتی CPU هست که دستورالعمل های تکراری برنامه های کاربر رو در خودش ذخیره میکنه و مستقیماً از انجا دستورالعمل ها رو پردازش میکنه(بجای Hard Disk یا RAM). بنابراین باعث افزایش سرعت پردازش تا چند برابر میشه.

نکته 5: کلمه K در مشخصات فنی CPU معرف Unlock هستش، یعنی این CPU قفل نشده و قابلیت Overclocking رو داراست.

نکته 6: Resolution (رزولوشن) به تعداد پیکسل های موجود درون صفحه گفته میشه که بصورت عمودی و افقی در صفحه چیده شدن. در واقع هر چی رزولوشن صفحه نمایش بیشتر باشه، کیفیتش هم بالاتره. رزولوشن  مثل 1024x768 یا 240x320

نکته 7: Screen size (سایز صفحه) به اندازه فیزیکی صفحه نمایش گفته میشه که برحسب اینچ توسط قطر صفحه محاسبه میشه. هرچی بیشتر باشه، اندازه صفحه هم بزرگتره. مثل "15 یا "17

نکته 8: Color depth (عمق رنگ) به مجموع رنگ هایی که صفحه نمایش امکان نمایش شون رو داره گفته میشه. هرچی بیشتر باشه، کیفیت و زیبایی تصاویر هم بیشتر میشه. مثل 32bit یا 16bit

نکته 9: برای تشریح مشخصات CPU های Intel به این صفحه مراجعه کنید. https://intel.com/content/www/us/en/processors/processor-numbers.html

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

 

ابتدا باید بگم استاندارد رسمی برای سبک ها و workflow ها وجود نداره، اما در این مقاله سعی می کنم از تجربیاتم، قوائد همگانی و معمولترین موارد موجود در Atlassian، Kernel و git manpage استفاده کنم...

 

مقالات مرتبط:

دانلود، نصب و راه اندازی Git در ویندوز

ساخت SSh key در ویندوز

ساخت SSh key در لینوکس

کدام پروتکل: //:git یا //:ssh یا //:https

 

فهرست مندرجات:

  • Branch / انشعاب
  • Commit
  • تنظیم / config
  • گوناگون

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

 

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

 

1- هنگام Multi-thread کردن کدهاتون فراموش نکنید برای دسترسی به اشیاء lazy-initialize(یا همون load on demand) وضعیت نهایی شی باید synchronize باشه تا با مشکل race condition مواجه نشید.

 

2- برای نرمال سازی ستونها و جلوگیری از افزونگی/redundancy داده باید از اصول زیر پیروی کنید:

- هیچ ستونی نباید بیشتر از یک نوع/type داده رو نگهداری کنه. (مثل int + char + float...)

- هیچ ستونی نباید داده های تکراری/مشابه به دیگر ستون ها رو در خودش نگهداری کنه.

- داده هارو در جداول مختلف نگهداری کنید و درصورت لزوم اونهارو توسط کلید خارجی/foreign key بهم متصل کنید.

 

3- جهت افزایش پرفورمنس، همیشه کلاس والد و اینترفیس رو در خطوط قبل از کلاس ارث بر تعریف کنید. در غیراینصورت موتور PHP برای پیدا و پردازش کردن کلاس والد مجبور به انجام عملیات های اضافی خواهد شد. (بر اساس OpCode تولید شده)

interface IData 
{
}

class MyClass implements IData
{
}

نکته: حتی اگر در فایلهای جداگانه تعریفشون می کنید این قائده باز هم باید رعایت بشه.

 

4- یادتون باشه که Dependency Injection نه تنها از طریق Constructor، بلکه از طریق Setter, Interface و Property هم قابل انجامه.

نکته: زمانی از نوع Constructor استفاده کنید که کل کلاس نیازمند به اون dependency هستش یا شی dependency نباید در طول life time تغییر بکنه.

 

5- آیا می دونید تابع runkit_function_remove علاوه بر حذف قید تابع(function table)، مقدار حافظه اشغال شده توسط تابع رو هم آزاد می کنه؟

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

 


CLASSPATH: یک متغیر در Environment variables و حاوی کتابخانه و dependency هایی هستش که هنگام Run-time و Compile-time مورد استفاده برنامه های جاوا قرار میگیره.

این متغیر برای استفاده System ClassLoader ماشین Java طراحی شده و حاوی کلاسهای کامپایل شده bytecode(در Java با پسوند class یا JAr) و کلاسهای کامپایل شده nativecode(در C با پسوند o. یا obj.) هستش. درواقع CLASSPATH بخشی از پکیج پلتفرم Java هستش و به برنامه java یا javac اعلام میکنه که کلاسهای کامپایل شده در کجا قرار دارن.

بصورت پیشفرض، محل فیزیکی CLASSPATH به پوشه "جاری پروژه" و پوشه lib در JDK/JRE نصب شده اشاره میکنه. اما اگر بخوایید میتونید این مسیر رو تغییر بدید.

نکته: با اضافه کردن کتابخانه به محل فیزیکی CLASSPATH، کتابخانه مورد نظر در تمام پروژه ها (system-wide) در دسترس قرار میگیرن، لیکن بصورت Relative link.

توجه: هرگز بصورت دستی مسیرهای jre/lib و jre/lib/ext رو داخل متغیر CLASSPATH اضافه نکنید، این مسیرها توسط ماشین جاوا بصورت خودکار پیمایش خواهند شد.

نکته: مقدار متغیر CLASSPATH میتونه توسط پارامتر -cp در برنامه java و javac یا پراپرتی Class-Path در فایل manifest.mf تغییر پیدا کنه. اما در نهایت پراپرتی Class-Path نسبت به متغیر CLASSPATH و پارامتر -cp اولویت داره! یعنی Class-Path property > CLASSPATH > -cp

نکته 2: در صورت وجود یک کتابخانه تکراری در همه مسیرهای موجود در متغیر CLASSPATH، همیشه اولین مسیر انتخاب خواهد شد.

نکته 3: تنظیمات متغیر CLASSPATH در برنامه IntelliJ IDEA در مسیر File -> Project structure -> Global libraries قرار داره و در برنامه Eclipse در مسیر Preferences -> [Java/C] -> Build path -> Classpath قرار داره.

 

 تشریح ClassNotFoundException و NoClassDefFoundError:

- مشکل ClassNotFoundException: از نوع Exception هستش و زمانی پرتاب میشه که ماشین جاوا بصورت Dynamic سعی در load کردن کلاس موردنظر حین Run-time از مسیر CLASSPATH کنه اما نتونه پیداش کنه.

- مشکل NoClassDefFoundError: از نوع Error هستش و زمانی بوجود میاد که کلاس موردنظر در مسیر CLASSPATH حین Compile-time وجود داره اما حین Run-time وجود نداره.

 

 

Build path: مسیری هست که برای تولید/compile پروژه طراحی شده، حاوی سورس ها و کتابخانه های پروژه هستش، بخشی از workspace ویرایشگر هستش، به ویرایشگر/IDE اعلام میکنه که فایلهای سورس پروژه در کجا قرار دارن... این مسیر مخصوص ویرایشگر/IDE هستش و در هر ویرایشگری به محل متفاوتی اشاره میکنه. (مثل VS, Eclipse, IntelliJ IDEA, Borland...)

 

 

Include path: مسیر هست که برای parse کردن فایلهای پروژه طراحی شده، میتونه حاوی فایلهای header، سورس یا inc باشه، کد completion ویرایشگر رو اعمال میکنه و کلاً برای پیدا کردن محتوا و منابع استفاده شده در پروژه هستش.
نکته: در Include path آدرس های path داده شده باید بصورت relative باشن تا بتونن توسط IDE پردازش بشن. (relative path = ./file.jpg, absoloute path = c:\www\root\test\file.jpg)

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