یوشا

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

یوشا

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

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

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

۴۵ مطلب با کلمه‌ی کلیدی «tips & tricks» ثبت شده است

در CSS، واحدهای سایز به دو دسته/خانواده اصلی تقسیم می‌شوند:

  1. واحدهای ثابت/Absolute
  2. واحدها متغیر/Relative

 

واحدهای ثابت (Absolute units)

واحدهای ثابت/مطلق به صورت خشک تعریف شده‌اند و سایز مشخص‌شده با این واحدها دقیقاً همان اندازه نمایش داده می‌شود. این واحدها نسبت به اندازه صفحه، جهت یا سایر تغییرات واکنش نشان نمی‌دهند.

واحدهای ثابت برای استفاده در انواع نمایشگرها توصیه نمی‌شوند، چراکه اندازه صفحه نمایش‌ها متفاوت است؛ اما در صورتی که محیط خروجی مشخص باشد (مانند Printer)، این واحدها می‌توانند مفید باشند.

انواع واحدهای ثابت:

  • cm (سانتی‌متر)
  • mm (میلی‌متر)
  • in (اینچ)
  • px (پیکسل)
  • pt (پوینت)
  • pc (پیکا)
  • q (یک چهارم میلی‌متر)

مثال:

/* یک باکس با عرض 2 سانتی‌متر */
.box {
    width: 2cm;
    height: 2cm;
    background-color: lightblue;
}

/* متن با اندازه فونت ثابت 12 پوینت */
.text {
    font-size: 12pt;
}

 

واحدهای متغیر (Relative units)

واحدهای متغیر/مقیاس پذیر سایز را بصورت خودکار و نسبت به ویژگیهای دیگر مانند اندازه صفحه نمایش، اندازه صفحه مرورگر، عناصر والد/parent و... تنظیم می‌کنند. این واحدها در بین انواع دستگاه های مختلف بهتر scale و تنظیم می‌شوند.

انواع واحد های متغیر:

  • em : نسبت به اندازه فونت عنصر والد تنظیم میشود
  • ex : نسبت به ارتفاع x در فونت جاری، که برای فونت‌های تک‌فاصله مفید است تنظیم میشود
  • ch : نسبت به عرض کاراکتر "0" در فونت عنصر، برای فونت‌های تک‌فاصله کاربرد دارد
  • rem : نسبت به اندازه فونت عنصر ریشه (<html>)
  • vw : نسبت به ۱٪ از عرض پنجره مرورگر
  • vh : نسبت به ۱٪ از ارتفاع پنجره مرورگر
  • vmin : نسبت به ۱٪ از کوچک‌ترین بُعد پنجره مرورگر
  • vmax : نسبت به ۱٪ از بزرگ‌ترین بُعد پنجره مرورگر
  • % : نسبت به عنصر والد تنظیم میشود

 

توضیحات تکمیلی واحدهای مهم

  • px (پیکسل) - ثابت

    • پیکسل یک مربع کوچک روی نمایشگر است که می‌تواند فقط یک رنگ را در یک لحظه نمایش دهد. مانند عدد رزولوشن نمایشگر که نشان‌دهنده تعداد پیکسل‌های تشکیل‌دهنده صفحه است. 1024x768
    • font-size: 12px; به مرورگر می‌گوید که ارتفاع هر کاراکتر ۱۲ عدد پیکسل باشد. پیکسل‌ها اندازه ثابتی دارند و تغییر اندازه نمی‌دهند. این واحد برای مواقعی که نیاز به قرار دادن متن روی یک تصویر پس‌زمینه دارید، مفید است.
  • % (درصد) - متغیر

    • درصد یک واحد متغیر است که بر اساس اندازه عنصر والد محاسبه می‌شود. برای تعیین عرض یا ارتفاع عناصر، زمانی که والد مشخص باشد، می‌تواند به عنوان راهی منعطف استفاده شود.
    • font-size: 50%; اندازه فونت را به ۵۰٪ اندازه فونت عنصر والد تنظیم می‌کند.
    • font-size: 100%; یعنی ۱۰۰٪ اندازه‌ای که از عنصر والد به ارث می‌برد. درصد برای طراحی‌های انعطاف‌پذیر مناسب‌تر است.
    • در CSS، هر چیزی که از این واحد استفاده کند، نسبت به عنصر والد خود است، مگر در حالتی که موقعیت عنصر ثابت باشد که در آن صورت نسبت به عنصر ریشه <html> خواهد بود.
    • نکته: تعیین width یا height به درصد زمانی عمل نمی‌کند که ابعاد عنصر والد به‌طور auto تعیین شده باشد.
  • pt (پوینت) - ثابت

    • ۱ پوینت برابر با ۱/۷۲ اینچ است. font-size: 12pt; ارتفاع کاراکترها را به ۱۲/۷۲ اینچ تنظیم می‌کند. پوینت اندازه‌ای ثابت دارد و مقیاس‌پذیر نیست!
    • پوینت در طراحی Print استفاده می‌شود و تنها در CSS مربوط به @media print کاربرد دارد.
  • em - متغیر

    • این واحد شبیه به درصد است و نسبت به اندازه فونت عنصر والد محاسبه می‌شود. اما ۱em برابر با ۱۰۰٪ و ۱.۵em برابر با ۱۵۰٪ است. em یک واحد مقیاس‌پذیر است و برای تعیین اندازه فونت مناسب اما چالشی است.
    • یک em برابر با اندازه فونت جاری است، به عنوان مثال اگر اندازه فونت کل صفحه ۱۲pt باشد، ۱em برابر با ۱۲pt خواهد بود. این واحد مقیاس‌پذیر است؛ بنابراین ۲em برابر با ۲۴pt، ۰.۵em برابر با ۶pt خواهد بود.
  • rem - متغیر

    • واحد rem هم مانند em مقیاس‌پذیر است اما همیشه نسبت به اندازه فونت عنصر ریشه <html> محاسبه می‌شود، که باعث می‌شود از تغییرات ناخواسته در طراحی جلوگیری کند. بنابراین با استفاده از عناصر تودرتو دیگر نیازی به محاسبه اندازه فونت در رابطه با عنصر والد نیست. برای تعیین اندازه فونت مناسب است.
  • cm، mm، in - ثابت
    • معمولاً برای اندازه‌گیری‌های دقیق در محیط‌های غیر دیجیتال و فیزیکی مانند Print به کار می‌روند. اندازه فونت با تغییر اندازه پنجره مرورگر به صورت دینامیک واکنش نشان نمی‌دهد، بلکه به تنظیمات زوم یا اندازه متن مرورگر، مانند فشار دادن همزمان کلید Ctrl و + در مرورگر، واکنش نشان می‌دهد.
  • vm. vh. viewport... - متغیر
    • واحدهای vw و vh نسبت به عرض و ارتفاع صفحه نمایش تعریف می‌شوند. درواقع درصدی از پنجره مرورگر را نشان می‌دهند و برای طرح‌های واکنش‌گرا کاربرد دارند. 1vw معادل ۱٪ از عرض صفحه نمایش و 1vh معادل ۱٪ از ارتفاع صفحه نمایش است. این واحدها به خصوص برای طراحی‌های تمام‌صفحه بسیار مفیدند.

مثال:

/* با عرض برابر با 50% از عرض پنجره مرورگر */
.box {
    width: 50vw;
    height: 50vh;
    background-color: lightcoral;
}

 

کاربرد واحدها در عناصر وب

  • px (پیکسل): برای اندازه خطوط مرزی و اجزای کوچک ثابت.

    • کاربرد: <button>, <small>, خطوط و حاشیه‌ها.
  • % (درصد): برای تنظیم ابعاد نسبی نسبت به عنصر والد، به ویژه در عرض و ارتفاع.

    • کاربرد: <div>, <img>, <section>, <header>, <footer>.
  • em: برای تنظیم اندازه فونت و فاصله‌های داخلی، با توجه به اندازه فونت والد.

    • کاربرد: <p>, <span>, <ul>, <ol>.
  • rem: برای اندازه فونت اصلی در کل صفحه و مقیاس‌پذیری یکنواخت، بدون تاثیر از والد.

    • کاربرد: <body>, <h1>, <h2>, <h3>, <html>.
  • vw و vh: برای تنظیم ابعاد نسبی کل صفحه نمایش، به خصوص در طراحی‌های تمام صفحه.

    • کاربرد: <section>, <header>, <footer>, عناصر تمام صفحه.
  • pt: برای فونت در خروجی چاپ (به ندرت برای وب).

    • کاربرد: فقط در چاپ، مثل استایل تحت @media print.
  • cm, mm, in: برای موارد خاص Print و اندازه‌گیری دقیق.

    • کاربرد: چاپ و طرح‌های خاص، مثل استایل‌های PDF و کارت ویزیت

 

توجه: در اکثر مرورگرها، اندازه پیش‌فرض فونت ۱۶px است.

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

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 کردن کد استفاده کرد.

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

یکی از مهمترین ویژگی‌های جدید در PHP 8.0، کامپایلر JIT است. JIT می‌تواند با کامپایل کردن و ذخیره‌ کردن کامل یا بخش‌هایی از اسکریپت PHP، به کد ماشین CPU، عملکرد را بسیار بهبود بخشد و به طور مستقیم کد ماشین را اجرا کند، بطوریکه Zend VM و سربار ناشی از عملیات و فرایندهای آنرا دور می‌زند و نادیده می‌گیرد.

JIT ترکیبی از مفسران traditional و کامپایلرهای AoT است. این مدل ترکیبی/Hybrid، مزایا و معایب هر دو مفسر و کامپایلر را به ارمغان می‌آورد.
پیاده‌سازی PHP JIT تنها با تلاش‌های شگفت‌انگیز Dmitry Stogov در چند سال اخیر، ارزش بحث، اجرا و آزمایشات را پیدا کرده است.

این مقاله در مورد benchmark ها، نحوه‌ی کار JIT، امکانات و گزینه‌های پیکربندی در php.ini می باشد.

دانلود مقاله PDF

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

- کانفیگ hardening شده هسته Linux برای محیط production x64:

(قبل از کامپایل هسته Linux بهمین شکل پارامترهارو داخل فایل .config موجود در سورس لینوکس تون اعمال کنید)

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

۱- اینکه Exception ها، استثنا هستن! فقط باید از اونها برای مواجه با مشکلات غیر قابل پیش بینی استفاده کنید.

۲- هرگز از Exception برای کنترل جریان/flow نرم افزار استفاده نکنید. اینکار باعث میشه که نتونید مسیر اجرای کد رو دنبال کنید و پرفورمنس نرم افزار هم کاهش پیدا میکنه. (مثل دستور GoTo که در برخی زبانها وجود داره)

۳- هرگز شی Exception رو بعنوان مقدار و خروجی return نکنید.

۴- Exception فقط باید حاوی اطلاعات رخداد/رویداد باشد و نباید حاوی پارامترها(یا اطلاعات اضافی) باشه که روی نحوه انجام و منطق داخل بلوک catch تاثیر بذاره.

۵- هرگز Exception های زیرساختی/داخلی مثل SystemException, OutOfMemoryException, StackOverflowException, ComException, ExecutionEngineException, NullReferenceException, IndexOutOfRangeException رو پرتاب نکنید.

۶-  برای حالت debug نرم افزار Exception پرتاب نکنید.

۷- داخل متد toString() کلاس هاتون Exception پرتاب نکنید. اینکار عمل debugging رو سخت می کنه. (از این متد برای debug کردن استفاده میشه)

۸- داخل توابع مقایسه ای(true/false) و equal هرگز Exception پرتاب نکنید.

۹- هرگز StackOverflowException و OutOfMemoryException رو catch نکنید. اینها غیرقابل کنترل و هندل شدن هستن.

۱۰- همیشه Exception های سطح پایین و general رو به Exception های ریز تر و خاص تر wrap کنید. مثل:

NotFoundException -> FileNotFoundException/URLNotFoundException

۱۱- همیشه عملیات پاکسازی/Cleanup رو در بلوک finally قراربدید و نه در بلوک catch. بلوک finally همیشه اجرا میشه اما بلوک catch فقط هنگام رخداد Exception اجرا میشه.

۱۲- فقط باید زمانی Exception رو catch کنید که میتونید بخوبی مشکل رو handle و recovery کنید. درغیراینصورت بهتره Exception رو catch نکنید. (چون درواقع صرفا مخفیش کردید)

۱۳- بهتره که هنگام timeout شدن یک عملیات، TimeoutException پرتاب کنید نه اینکه توسط if/else اونرو handle کنید.

۱۴- در بلوک finally هرگز Exception پرتاب نکنید.

۱۵- صرفا Log و rethrow کردن یک Exception در بلوک catch بمعنای handle کردنش نیست.

۱۶- هرگز Exception مادر/عمومی مثل Exception رو throw نکنید.

۱۷- برای wrap کردن Exception همیشه از کلاس مادر Exception یا RuntimeException ارث بری کنید.

18- بهتره در بلوک catch از if/else استفاده نکنید تا از ایجاد branch های تودرتو جلوگیری بشه.

19- همیشه پیامهای Exception رو در فایلی log کنید.

20- بجای throw ex از throw استفاده کنید تا پیامهای stacktrace قبلی و کنونی موجود در ex حفظ بشن.

catch(Exception ex)
{
   throw;
}

 

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

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

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