یوشا

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

یوشا

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

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

طبقه بندی موضوعی

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

۲۰
۱۴۰۴/۰۸
  • Comment ها باید کوتاه و شفاف باشند. هدف این است که برنامه نویس بتواند به سرعت متوجه منظور شما شود.
  • منظور Comment نباید کد را مجدد تکرار کند.
  • ترجیحاً از زبان انگلیسی برای نوشتن Comment استفاده کنید. (مگر اینکه تیم شما زبان دیگری را ترجیح دهد)
  • از نوشتن Comment های غیرمفید خودداری کنید.
  • برای تعیین کارهایی که باید بعداً انجام شوند یا مشکلاتی که باید حل شوند، از نشانگرهای Comment استفاده کنید:
// TODO: Optimize this function for better performance.
public void calculateDate()
{
}

# FIXME: Handle edge case when input is None.
function getData()
{
}

TODO: برای کارهای معلق/آینده

FIXME: برای اصلاحات ضروری

NOTE: برای توضیحات مهم

HACK: برای راه‌ حل‌ های موقت/trick

  • Comment، به معنای توجیهی برای کد نامفهوم نیست!
  • وقتی نمی‌ توانید Comment واضحی و شفافی برای کد بنویسید، معمولاً نشان دهنده این است که کدتان مشکل دارد.پس احتمالاً کد باید بازنویسی/ساده‌ سازی شود.
  • Comment ها باید ابهامات را برطرف کنند، نه اینکه ابهام جدید ایجاد کنند!
  • اگر Comment طولانی است، از Comment نوع multi-line برای نوشتن آن استفاده کنید.
/*
 This function calculates the Fibonacci sequence up to n.
 It uses an iterative approach to improve performance compared
  to the recursive method, which can be slow for large values of n.
 Also blah blah.
 */
  • Comment ها را بروز نگه دارید.
  • همیشه فقط کدهای غیر معمول/پیجیده را در Comment توضیح دهید.
  • هنگام Comment نویسی، اصول و ساختار مخصوص هر زبان برنامه نویسی را حفظ و رعایت کنید.
/**
 * Calculates the sum of two numbers.
 *
 * @param int $a The first number
 * @param int $b The second number
 * @return int The sum of $a and $b
 */
function add(int $a, int $b): int {
    return $a + $b;
}

/// <summary>
/// Calculates the sum of two numbers.
/// </summary>
/// <param name="a">The first number</param>
/// <param name="b">The second number</param>
/// <returns>The sum of a and b</returns>
public int Add(int a, int b)
{
    return a + b;
}
  • بهتره همیشه لینک منبع اصلی کدهای کپی‌ شده را در Comment قید کنید.
  • اگر الگوریتمی پیچیده است، می‌ توانید قبل از پیاده‌ سازی آن، Pseudo code آن را به صورت Comment بنویسید.
# Pseudo code:
# 1. Initialize an empty list
# 2. Loop through the input array
# 3. Append each element multiplied by 2 to the list
result = []
for num in input_array:
    result.append(num * 2)
  • اگر کد شما به اندازه کافی خوانا و واضح است، نیازی به نوشتن Comment ندارد. (کد گویا بهتر است)
// Returns result of calculation!
return a + b
  • از نوشتن Comment هایی که فقط شامل نظرات شخصی، شوخی یا مطالب های غیرضروری هستند، باید اجتناب شود.
  • از Comment برای نشان دادن محدودیت‌ ها/خطرات/هشدارها استفاده کنید.
// WARNING: This function does not handle negative inputs!
function squareRoot($x)
{
    return $x ** 0.5;
}
  • اگر از یک الگوی طراحی خاص (Singleton، Factory و...) استفاده می‌ کنید، آن را در Comment ها می توانید ذکر کنید.
// Singleton pattern implementation.
class DatabaseConnection:
    ...
  • اگر متغیرها و توابع نام‌ گذاری خوبی داشته باشند، نیاز به Comment کمتر می‌ شود.
  • و در آخر، کد خوب مثل یک داستان است؛ Comment ها فقط پاورقی‌ های آن هستند...
  • یوشا آل ایوب
۲۰
۱۴۰۴/۰۶

این مقاله ۴۰ نکته ای شامل تنظیمات پیشرفته و best practice هایی برای hardening و امن کردن SSH server هستند که می‌ توانند به طور قابل توجهی امنیت سرور را افزایش دهند...

برای اعمال تنظیمات، کافیست فایل /etc/ssh/sshd_config را توسط یک ویرایشگر با کاربر root باز کنید و سپس مقادیر زیر را داخلش اعمال کنید:
(هر سیستم عاملی ممکن است نیاز به تفاوت‌ های جزئی در اعمال تنظیمات داشته باشد)


1- Disable root login
غیرفعال کردن ورود مستقیم با کاربر root، جهت جلوگیری از دسترسی مستقیم به حساب root که می‌تواند خطرناک باشد.
پس خط زیر را اضافه کنید:

PermitRootLogin no


2- Use key-based authn
استفاده از Public key authn به جای رمزهای عبور... چون رمزهای عبور می‌ توانند هک/bruteforce شوند، اما کلیدهای SSH ای بسیار امن‌ تر هستند.
ابتدا یک کلید تولید کنید: ssh-keygen -t rsa -b 4096
سپس کلید pub را در مسیر ~/.ssh/authorized_keys قرار دهید.

 

3- Change default SSH port

تغییر پورت پیش‌ فرض SSH server (22) جهت کاهش حملات scan پورت:

Port 2222

نکته: فایروال را هم باید تنظیم کنید.

 

4- Limit user access

محدود کردن کاربرانی که می‌ توانند از SSH server استفاده کنند، بدلیل جلوگیری از دسترسی غیرمجاز:

AllowUsers user1 user

5- Disable password authn

غیرفعال کردن ورود با رمز عبور برای اجبار به استفاده از کلیدهای SSH ای:

PasswordAuthentication no

  • یوشا آل ایوب
۱۱
۱۴۰۳/۱۰

1- مفهوم و تفاوت Concurrency(همزمانی) و Parallel(موازی):

- پردازش Parallel نوعی از Concurrent هستش. درواقع Parallel زیرمجموعه Concurrency هستش.

- نوع Concurrent میتونه با یک پردازنده اعمال بشه (single/multi thread). اما نوع Parallel باید در چند پردازنده اعمال بشه. یعنی یک پردازنده به ازای هر پروسس.

نکته: عمل Multithreading زیرمجموعه Concurrency محسوب می‌شه و می‌تونه با پردازنده‌های تکی هم انجام بشه.

 

2- با استفاده از کلمه کلیدی volatile در متغیرها می تونید thread های برنامه رو وادار کنید تا اطلاعات متغیر رو مستقیماً از حافظه بخونن و نه کش CPU. (این عمل درواقع نوعی thread-safety محسوب میشه)

 

3- یادتون باشه که synchronized و Thread-Safe در .Net یک مفهوم دارن: دسترسی همزمان به کد توسط چند Thread بدون بروز مشکلات. یعنی کد/متد synchronized اجازه دسترسی همزمان چند Thread به کد/متد رو نمیده، پس Thread ها باید نوبتی به کد/متد دسترسی پیدا کنن بنابراین آخرین وضعیت کد/متد در همه Thread ها مشترک هستش.

نکته: این مسئله فقط در مورد برنامه های Multi-Thread صدق میکنه و نه Single-Thread.

نکته 2: در .Net باید از تکنیک‌هایی مانند lock برای Thread-Safe کردن کد استفاده کرد.

  • یوشا آل ایوب
۱۵
۱۴۰۱/۱۲
  • یوشا آل ایوب
۱۶
۱۴۰۰/۰۷

1. هنگام خرید گیاه: زیاد به توصیه های فروشنده اعتماد نکنید!

  • بسیاری از فروشندگان گل و گیاه صرفاً برای فروش محصولات خود اطلاعات نادرست میدهند، کار را راحت می کنند و دانش علمی کافی درباره گیاهان ندارند.

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

  • قبل از خرید، برگها، ساقه و خاک را بررسی کنید. برگهای زرد، لکه های قهوه ای یا آفات ریز، خاک حشره زده نشانه بیماری گیاه است.

  • اگر در خانه فرزند معلول یا خردسال دارید از خرید گیاهان خاردار و نوک تیز(مانند کاکتوس) خوددارید کنید.

  • اگر گربه یا سگ خانگی دارید(زندانی کردید!)، از خرید گیاهان سمی مانند دیفن باخیا، فیلودندرون و آزالیا خودداری کنید! به جای آن از گیاهان بی خطر مانند بامبو، گل گندمی (کلروفیتوم) و پتوس استفاده کنید.

2. تعویض گلدان: عجله نکنید

  • تعویض گلدان بلافاصله پس از خرید، استرس و تنش مضاعفی به گیاه وارد میکند، زیرا گیاه ابتدا باید به محیط جدید عادت کند و بعد گلدانش عوض شود.

  • حداقل ۲ تا ۴ هفته پس از خرید، وقتی گیاه با محیط سازگار شد گلدان را عوض کنید.

اما نشانه های نیاز فوری به تعویض گلدان:

  • ریشه ها از زیر گلدان بیرون زده اند.

  • رشد گیاه، بدون مشکل ظاهری متوقف شده است.

  • خاک به سرعت خشک میشود (یعنی ریشه ها فضای گلدان را پر کرده اند).

3. انتخاب گیاهان مناسب برای افراد تازه کار

گیاهان مقاوم، کم توقع و دهه شصتی! بهترین انتخاب برای شروع هستند:

  • پوتوس سبز: نیاز به نور کم، تحمل خشکی، رشد سریع، تکثیر راحت با یک برگ + ساقه

  • انواع سانسوریا اما سبز: نیاز به آب کم، مقاوم در نور کم و زیاد.

  • انواع کاکتوس اما بالغ

  • اسپاتی فیلوم: گلدهی در نور غیرمستقیم، نیاز به رطوبت آشپزخانه!

نکته: گیاهان با برگهای سبز تیره معمولاً در نور کم هم رشد میکنند، زیرا کلروفیل بیشتری دارند و نور را بهتر جذب میکنند.

نکته 2: گیاهان ابلک/ابلغ (دارای رگه های سفید، طلایی یا صورتی) معمولاً به نور بیشتری نیاز دارند. اگر نور کافی نباشد، رنگ برگها محو و سبز میشوند.

4. آبیاری صحیح: عامل اصلی مرگ گیاهان خانگی

  • اشتباه رایج: آبیاری بیش از حد که باعث پوسیدگی ریشه میشود.

  • راه تشخیص نیاز به آبیاری:

    • انگشت خود را ۲-۳ سانتیمتر در خاک فرو ببرید. اگر خشک بود، آبیاری کنید.

    • برای گیاهان گوشتی مانند کاکتوس ها و ساکولنت ها، اجازه دهید خاک کاملاً خشک شود.

  • نکته: گلدانهای دارای زهکشی مناسب(سوراخ زیر گلدان + سنگ ریز کف گلدان) انتخاب کنید تا آب اضافه خارج شود و ته نشین نشود.

5. تأثیر رطوبت و دمای محیط

  • بیشتر گیاهان آپارتمانی به رطوبت ۴۰ تا ۶۰ درصد نیاز دارند. در هوای خشک، برگها قهوه ای یا خشک میشوند.

  • میانگین رطوبت برای هوای تهران بطور کلی حدود ۳۰ تا ۴۰ درصد میباشد و فقط در زمستان/پاییز تا حدود ۴۵ تا ۶۰ درصد افزایش میابد.

  • پس راههای افزایش رطوبت:

    • ساخت جزیره (قرار دادن گلدان روی سینی/ظرف پر از آب و سنگریزه).

    • غبارپاشی منظم (به جز برای گیاهان کرکدار و گوشتی).

    • استفاده از دستگاه تولید بخار سرد.

6. تغذیه و کوددهی اصولی

  • کوددهی در فصل رشد (بهار و تابستان): هر ۴-۶ هفته یکبار با کود مایع رقیق شده.

  • کوددهی در فصل خواب (پاییز و زمستان): معمولاً نیاز به کوددهی نیست، چون رشد گیاه کند میشود و کمتر مواد مغذی مصرف می کند.

  • علائم کمبود مواد مغذی:

    • زردی برگها (کمبود نیتروژن).

    • لکه های قهوهای روی برگها (اگر بیماری نباشد).

7. مقابله با آفات رایج

  • شته ها، کنه تارعنکبوتی و شپشکهای سفید از آفات رایج هستند.

  • راه های درمان:

    • شستوشوی برگها با آب ولرم و پودرهای حشره کش.

    • استفاده از محلول آب و الکل (برای شپشکها).

    • قرصهای سیستمیک در خاک (برای آفات مقاوم).

8. هرس و تمیز کردن برگها

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

  • تمیز کردن برگها: با یک دستمال مرطوب، گردوغبار را پاک کنید تا روزنه های برگها تمیز شوند و فتوسنتز بهتر انجام شود.

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

 

نکته اینکه هر گیاه شخصیت خاص خود را دارد و با مشاهده و تحقیق می توان نیازهای آن را بهتر درک کرد...

با رعایت این نکات، گیاهان سالمتر و شادابتر خواهند ماند.

  • یوشا آل ایوب
۱۵
۱۳۹۹/۱۲

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!

  • یوشا آل ایوب
۱۳
۱۳۹۹/۱۰

 

1- برای بدست اوردن میزان حافظه مصرف شده باید از دستور memory_get_usage(FALSE) استفاده کنید و برای میزان حافظه رزرو شده باید از دستور memory_get_usage(TRUE) استفاده کنید.

اما این نکته در مستندات سایت PHP.net برعکس توضیح داده شده:

int memory_get_usage ([ bool $real_usage = FALSE ] )

Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.

 

2- زمانی از دستور strcmp استفاده کنید که قراره مقدار رشته ها شمارش(کمتر/بیشتر) بشن، درغیراینصورت استفاده از اپراتور === برای برابر بودن/نبودن رشته ها بهترین گزینست.


3- آیا میدونید به 4 روش مختلف میتونید تصاویر رو در مرورگر نمایش/output بدید؟

header('Content-Type: image/jpg');
$image = imagecreatefromjpeg('yourfilename.jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
imagejpeg($image);
imagedestroy($image);

و

header('Content-Type: image/jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
readfile('yourfilename.jpg');

و

header('Content-Type: image/jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
echo file_get_contents('yourfilename.jpg');

و

header('Content-Type: image/jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
header('X-Sendfile: ' . 'yourfilename.jpg'); 
exit;

 

4- اگر از PHP CLI در محیط text UI سیستم عامل استفاده می کنید و مشکلات output و نمایشی دارید، بهتره از دستور passthru استفاده کنید.

 

5- نکته جزیی: فراموش نکنید که تابع json_decode فقط اعضای public شی موردنظر رو تبدیل میکنه، و نه private / protected.

  • یوشا آل ایوب
۲۱
۱۳۹۹/۰۶

بدون استفاده از عبارت SET NAMES utf8 در دیتابیس:
enlightened اگر انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 باشه، charset دیتابیس هم utf8_persian_ci باشه خروجیش صحیحه و میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 "نباشه"، charset دیتابیس utf8_persian_ci باشه/نباشه خروجیش میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر انکودینگ فایل موردنظر UTF8 "نباشه"، تگ meta صفحه UTF8 باشه، charset دیتابیس utf8_persian_ci باشه/نباشه خروجیش میشه این:
� � � � � � � � � � � � � � 

اگر انکودینگ فایل موردنظر UTF8 "نباشه"، تگ meta صفحه UTF8 "نباشه"، charset دیتابیس utf8_persian_ci باشه/نباشه خروجیش میشه این:
Â È Ê Ë Ì Í Î Ï Ö Ñ Ò Ô

enlightened اگر انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 باشه، اما charset دیتابیس utf8_persian_ci "نباشه" خروجیش صحیحه و میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

می بینید که حتی بدون استفاده از عبارت SET NAMES utf8 باز هم میشه "خروجی" صحیح رو گرفت.

با استفاده از عبارت SET NAMES utf8 در دیتابیس:
enlightened اگر SET NAMES UTF8 باشه، انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 باشه، charset دیتابیس utf8_persian_ci باشه خروجیش صحیحه و میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر SET NAMES UTF8 باشه، انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 "نباشه"، charset دیتابیس utf8_persian_ci باشه خروجیش میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر SET NAMES UTF8 باشه، charset دیتابیس utf8_persian_ci "نباشه"، و همه چیز دیگر UTF8 باشن خروجیش میشه این:
? ? ? ? ? ? ? ? ? ? ? ? ? ?

اگر SET NAMES UTF8 باشه، انکودینگ فایل موردنظر UTF8 "نباشه"، تگ meta صفحه UTF8 باشه، charset دیتابیس utf8_persian_ci باشه خروجیش میشه این:
" "

enlightened اما برای نمایش درست کلمات در خود دیتابیس لازمه که از set_charset و SET NAMES UTF8 استفاده کنید.

  • یوشا آل ایوب
۲۵
۱۳۹۹/۰۴

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

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

 

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

  • یوشا آل ایوب
۲۵
۱۳۹۹/۰۳

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

نکات و اصول مهم در طراحی وبسایت

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

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

 

 

1- از صفت alt در تگهای img و از صفت title در تگهای link استفاده کنید. صفت alt بیانگر خلاصه ای از محتوای تصویر موردنظر هستش.


2- فراموش نکنید که محل جاری آدرسهای Font در فایلهای CSS از همان مسیر Relative فایل CSS شروع می شوند.


3- Link های صفحات را چک کنید و از سالم بودنشان مطمئن بشید.


4- شکل ظاهری صفحات داخلی و جداگانه را با شکل ظاهری صفحات اصلی یکنواخت کنید.


5- به عملا و دیکطه لقاط دغط کینید!

  • یوشا آل ایوب