یوشا آل ایوب

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

یوشا آل ایوب

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

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

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

۹ مطلب با موضوع «نرم افزار :: برنامه نویسی :: Net.» ثبت شده است

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

1- حتی الامکان دایرکتیوهای using رو بداخل namespace منتقل کنید و در خارج از محدوده namespace رها نکنید.

StyleCop: SA1200: UsingDirectivesMustBePlacedWithinNamespace

namespace ConsoleApp1
{
   using System;
   using System.Collections.Generic;
   using System.Text;

   class Program
   {
      private static void Main(string[] args)
      {
      }
   }
}

نکته: درصورتیکه فقط یک namespace در فایل موردنظر موجود باشه.

 

2- همیشه reference های بلااستفاده رو از پروژه حذف کنید.

نکته: البته هنگام کامپایل برنامه، همه reference های استفاده نشده حذف میشن، ولی خب همیشه محیط کدنویسی رو تمیز و خلوت نگه دارید.

 

3- همیشه دایرکتیوهای using بلااستفاده(خاکستری رنگ) رو از کلاسها حذف کنید.

   using System.Drawing;
   using System.Resources; // <-----
   using System.Reflection; // <-----
   using System.Runtime.InteropServices; // <-----
   using System;
   using System.Windows.Forms;

 

4- جهت بازگشت چندین مقدار از یک متد میتونید از کلمه کلیدی ref یا out یا پرانتز (type1, type2, typeN) یا حتی Tuple استفاده کنید:

public Tuple <int, string, string> GetStudent()
{
   int studentId = 11;
   string firstName = "Alex";
   string lastName = "Koertson";
   return Tuple.Create(studentId, firstName, lastName);
}

نکته: Tuple از نوع reference type هستش و حداکثر ظرفیت 8 عنصر رو داره. همچنین از دات نت نسخه 4 و جدیدتر در دسترسه.

 

5- قابلیت های مخفی در #C!

۰ نظر ۹۹/۱۲/۱۵
یوشا آل ایوب
  • هر قطعه کد تست باید کوتاه، قابل فهم و خوانا باشه.
  • کدهای تست باید قطعه قطعه و به واحدهای مستقل از هم تقسیم بشن.
  • کدهای تست باید مستقل از محیط اجرایی باشن و وابستگی به platform نداشته باشن.
  • بهتره شیوه اجرای کدهای تست بسادگی و توسط یک دستور انجام بشه.
  • امکان گزارش گیری Test code coverage باید فراهم باشه.
  • اجرای تست case ها از پایین ترین سطح(Unit) به بالاترین سطح(E2E) باید باشه.
  • تست case هارو توسط الگوی AAA بنویسید.
  • در کدهای تست باید از نقل/انتقال اطلاعات حجیم خودداری کرد تا پروسه تست بسرعت انجام بشه.
  • کدهای تست باید بروز باشن و با هر تغییر جدی روی کدهای اصلی باید تغییر کنند.
  • حجم کل کدهای تست تولید شده معمولاً باید برابر یا بیشتر از حجم کدهای اصلی باشه. (یعنی برای همه موارد تست نوشته شده باشه)
  • کدهای تست باید در همان روزی که کدهای اصلی پروژه نوشته میشن تولید بشن. (به روزهای آینده موکول نشه)
  • تست case ها باید کدها، متدها و امکانات پروژه رو به سخت ترین شکل به چالش بکشن.
  • از test double ها استفاده مجدد کنید.
  • تا حد امکان از تست کردن محتوای private کلاس ها و Private API ها پرهیز کنید. (بواسطه کدهای public تست blackbox انجام بدید یا CUT رو redesign کنید)
  • هنگام نوشتن تست case تا حد امکان از بکار بردن دستورات شرطی if/else/switch... پرهیز کنید.
  • بهتره کدهای تست به خارج از محدوده پروژه dependency نداشته باشن.
  • بهتره نام فایل تست به کلمه Test ختم بشه. مثل EmailTest, UtilityTest, DatabaseTest
  • بهتره نام توابع/متدهای داخل فایل تست با کلمه test شروع بشن. مثل test_if_email_is_valid یا testIsEmailValid

 

نکته: وظیفه نوشتن کدهای تست برای Unit Testing بعهده فرد برنامه نویس هستش نه فرد Tester. زیرا:

- بدلیل حفظ مالکیت کدها/پروژه، Tester نباید به سورس پروژه دسترسی داشته باشه.

- بدلیل مسایل امنیتی و کاهش تهدیدها، Tester نباید به داخل کدها و مکانیزم سیستم دسترسی داشته باشه.

- همچنین Tester قادر نیست به همه ابزارها، سبکها و زبانهای مختلفی که در پروژه استفاده شده مسلط بشه و test case طراحی کنه.

- تنها برنامه نویس هستش به کدهایی که پیاده سازی کرده مسلطه و test case رو در کمترین زمان با بالاترین کیفیت تولید میکنه.

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

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

نکاتی برای افزایش امنیت وبسایت

 

1- حتاالمکان از کتابخانه های template engine برای کدنویسی لایه View/UI وب اپلیکیشن استفاده کنید و نه کدنویسی inline/mixed.

 

2- برای کاهش مصرف پهنای باند و افزایش سرعت سایت، همیشه فایلهای CSS, JavaScript, HTML رو minify و lint کنید:

CSS:

https://github.com/purifycss/purifycss

https://cssnano.co/guides/getting-started

https://github.com/ben-eb/cssnano-cli

https://github.com/css/csso-cli

https://github.com/uncss/uncss

JS:

https://github.com/nolanlawson/optimize-js

 

3- بطور منظم و ماهیانه پهنای باند وبسایت/سرور رو چک کنید.

 

4- یک سیستم اسکنر پیاده کنید که نوع دسترسی و زمان تغییر فایلها و دایرکتوری های کل سایت رو اسکن و به شما گزارش کنه.

 

5- از استفاده بیش از حد کوکی و ذخیره اطلاعات حساس/نمایشی  در داخلشون خودداری کنید.

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

 

Functionality test, Performance/Speed test, User experience test, Compatibility test, Security test

 

نکته: هر 5 نوع تست بالا رو میشه با 2 روش manual و automatic و در 5 سطح/لایه مختلف انجام داد:

Unit Test, Integration Test, Functional Test. System/E2E Test, [User] Acceptance Test

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

 

دقیقتر:

 

 

دقیقتر:

 

mvc چیست، ام وی سی چیست، ساختار mvc

منبع: https://blog.glyphobet.net/essay/153/

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

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

#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://securityheaders.com

https://urlvoid.com

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 درست کنید تا در مواقع لزوم بتونید فعالیت های اپلیکیشن رو مانیتور و خطازدایی کنید.

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

💡 مقایسه سرعت الگوریتم binary search مقابل الگوریتم linear search برای آرایه های مرتب شده(sorted)

(برای آرایه های عددی سنگین)

 

$needle = range(1, 500000);

 

❌ Linear search algorithm

function search(array $numbers, $needle)
{
   $_totalItems = count($numbers);

   for ($i = 0; $i < $_totalItems; $i ++)
   {
      if ($numbers[$i] === $needle)
      {
         return TRUE;
      }
   }

   return FALSE;
}

📊 نتیجه(ms)
0.031199932098389
0.031199932098389
0.031199932098389
0.031199932098389
0.031199932098389
0.031199932098389
0.031200170516968
0.031200170516968
0.046799898147583
0.046800851821899

 


✅ Binary search algorithm

function search(array $numbers, $needle)
{
   $_low = 0;
   $_high = count($numbers) - 1;

   while ($_low <= $_high)
   {
      $_middle = (int) (($_low + $_high) / 2);
      if ($numbers[$_middle] > $needle)
      {
         $_high = $_middle - 1;
      }
      else if ($numbers[$_middle] < $needle)
      {
         $_low = $_middle + 1;
      }
      else
      {
         return TRUE;
      }
   }

   return FALSE;
}

📊 نتیجه(ms)
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0

 

x64 Hardware
32bit OS
PHP 5.6 CLI

کد از کتاب "PHP 7 Data Structures and Algorithms"

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

می دونستید وقتی متغیری رو برابر مقدار "" یا '' تعریف می کنید 2 بایت از Memory رو اشغال می کنید؟
در صورتی که فقط قصد تعریف اولیه(موجودیت) اون رو دارید...

ولی با قراردادن همون متغیر/ثابت برابر NULL می تونید این مقدار رو به 0 کاهش بدید enlightened
این در مورد بیشتر زبانهای برنامه نویسی(بجز C/Cpp) صدق می کنه.

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