مقالات مرتبط:
#2 - نکاتی برای افزایش امنیت وبسایت
1- مکانیزم و شیوه کار پروتوکل HTTP رو کامل فرا بگیرید.
2- همیشه کتابخانه ها و فریم ورکهای استفاده شده در وب اپلیکیشن رو بروز نگه دارید.
3- جهت جلوگیری از click-jacking مقدار هدر X-Frame-Options
رو DENY
قرار بدید:
Apache httpd.conf: Header always append X-Frame-Options DENY Apache .htaccess: Header append X-FRAME-OPTIONS "DENY" Nginx: add_header X-Frame-Options "DENY"; PHP: header('X-Frame-Options: DENY');
4- بصورت هفتگی یا ماهیانه کل سایت رو توسط نرم افزارها و سایتهای اسکنر امنیتی چک کنید:
https://observatory.mozilla.org
https://virustotal.com
https://immuniweb.com/websec
https://detectify.com
http://amn.bayan.ir
https://ssllabs.com/ssltest/index.html
http://isithacked.com
https://app.upguard.com/webscan
https://app.webinspector.com/online_scan
https://suip.biz/?act=sqlmap
https://pentest-tools.com/home
https://sitecheck.sucuri.net
https://quttera.com
https://siteguarding.com
https://transparencyreport.google.com/safe-browsing/search
5- داده های ورودی توسط کاربر را بدقت بررسی، برش و فیلترسازی کنید.
6- برای اپلیکیشن، قابلیت debug mode درست کنید تا در مواقع لزوم بتونید فعالیت های اپلیکیشن رو مانیتور و خطازدایی کنید.
مقایسه پرفورمنس(startup, rendering, event handling):
Windows platform FLTK > wxWidgets > GTK > Qt Linux platform 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 پشتیبانی می کنه. (به کمک شتابدهنده گرافیکی میشه بار سنگین رندر رو از روی پردازنده برداشت، بنابراین باعث افزایش پرفورمنس میشه)
1- تفاوت HashMap
و HashTable
:
کلاس HashMap
از نوع synchronize نیست پس thread-safe نیست. اما کلاس HashTable
از نوع synchronize هستش.
کلاس HashMap
بخاطر synchronize نبودن کمی سریعتر از HashTable
عمل میکنه.
کلاس HashMap
اجازه داشتن یک کلید null و چندین مقدار null رو داره، اما کلاس HashTable
همچین اجازه ای رو نداره.
کلاس HashMap
زیرکلاس AbstractMap
هستش، اما کلاس HashTable
زیرکلاس Dictionary
هستش.
کلاس HashTable
تقریباً منسوخ شده و باید از جایگزینش ConcurrentHashMap
استفاده بشه.
و...
در بیشتر موارد کلاس HashMap
استفاده میشه، درصورتی که synchronization در اولویت نباشه.
2- برای حل مشکل ValueError: unsupported pickle protocol در لینوکس کافیه فایل .repopickle_.gitconfig در Android SDK رو پیدا و حذف کنید.
3- اصول طراحی کلاس:
- همیشه داده ها و فیلدها رو private
نگهدارید و از اصول encapsulation پیروی کنید.
- همیشه فیلدها رو initialize کنید.
- هرکلاس رو به یک نوع/دسته از داده اختصاص بدید.
- کلاسهای چند منظوره با چند مسئولیت طراحی نکنید، بلکه آنها را تجزیه و جداسازی کنید.
- بی دلیل برای همه فیلدها و داده ها accessor و mutator طراحی نکنید. (set/get
)
- همیشه بهترین و مناسبترین نام رو برای کلاس و متد تعیین کنید تا هدف رو بخوبی انعکاس بدهند.
- حتاالمکان کلاسها رو immutable (غیرقابل تغییر) طراحی کنید.
- بجای استفاده مکرر تودرتو if/else switch foreach
از interface
یا کلاس abstract
استفاده کنید.
- حتاالمکان کلاس رو static
طراحی نکنید. (بخاطر global state و مشکلات unit testing)
- از نوشتن متدهای طولانی و سنگین خودداری کنید. معمولاً متدهای طویل نشاندهنده رفتار و وظایف متعدد هستش که نیاز به تجزیه و refactoring داره.
- از قانون DRY (مخفف Don’t Repeat Yourself) پیروی کنید... متدهای تکراری رو با ساخت superclass abstract
یکی کنید.