یوشا

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

یوشا

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

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

طبقه بندی موضوعی
۱۶
۱۴۰۰/۰۷

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

برای بزرگنمایی کلیک کنید

 

 

مطالب مرتبط

- نقشه راه توسعه دهنده PHP

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

دسترسی به GPU از طریق جاوا، باعث افزایش توان و قدرت قابل‌ توجهی در برنامه می‌شود. در این مقاله نحوه‌ی کار GPU و نحوه‌ی دسترسی به GPU از طریق جاوا را توضیح میدهم.


ظاهرا برنامه‌نویسی GPU، مانند یک دنیای مجزا از برنامه‌نویسی جاواست... این موضوع عجیب نیست، چرا که اکثر منابع مورد استفاده و کاربردی برای جاوا، برای GPUها قابل‌اجرا نیستند!
برای اینکه به موضوع اصلی برسیم، کمی در خصوص معماری و ساختار GPU، به همراه تاریخچه‌ی مختصری از آن را توضیح میدهم، که پرداختن به موضوع برنامه‌نویسی سخت‌افزار را آسان‌تر می‌کند. وقتی توضیح دادم که چگونه محاسبات GPU از محاسبات CPU متفاوت است، نشان خواهم داد که چگونه از GPUها در دنیای جاوا استفاده کنیم. در نهایت، فریم ورک و کتابخانه‌های معروف و دردسترس برای نوشتن کد جاوا و اجرای آن در GPUها را شرح خواهم داد و نمونه‌هایی از کدنویسی را ارائه خواهم کرد.

 

 فهرست/مندرجات
    • مقدمه
    • اجرای برنامه‌ها بر روی GPU
    • ظهور GPGPU
    • OpenCL و Java
    • CUDA و Java
    • ماندن در بالای کد low-level
    • نتیجه‌گیری

 

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

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.

  • یوشا آل ایوب
۱۰
۱۳۹۹/۰۷
  • هر قطعه کد تست باید کوتاه، قابل فهم و خوانا باشه.
  • کدهای تست باید قطعه قطعه و به واحدهای مستقل از هم تقسیم بشن.
  • کدهای تست باید مستقل از محیط اجرایی باشن و وابستگی به 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
  • همیشه تست هارو هم برای سناریوی happy path و هم unhappy path بنویسید. (تست happy path تضمین می کنه که سیستم در شرایط عادی به درستی کار می کنه، اما unhappy path به کشف و رسیدگی به مسائل مربوط به مدیریت خطا، امنیت و انعطاف پذیری در مواجهه با سناریوهای غیرمنتظره کمک می کنه.)

 

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

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

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

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

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

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

بدون استفاده از عبارت 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 استفاده کنید.

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

مسئله Thread و Process دو موضوع نزدیک به هم ولی متفاوت هستن...

 

1- Process مستقل هستش، ولی Thread ها بخشی از یک Process هستن. (یعنی یک Process میتونه چندین Thread بوجود بیاره)
2- هر Process حافظه اختصاصی خودش رو داره، ولی Thread ها از حافظه اشغال شده Process استفاده می کنن. (یعنی هر Process حافظه خودش رو با Thread های خودش به اشتراک میذاره)
3- هر Process شامل یک برنامه و PID انحصاری هستش، ولی هر Thread شامل مجموعه ای از دستورالعمل ها و Stack انحصاری هستش.
4- هر Process درواقع یک Task هستش، ولی هر Thread یک Light wight process هستش.
5- Process ها توسط IPC (یا همون Inter-process communication) با یکدیگر ارتباط برقرار می کنن، ولی Thread ها توسط دستورات برنامه نویسی (در زبان PHP و Java توسط wait, notify و در زبان C توسط pthread_cond_wait, pthread_cond_signal) با یکدیگر ارتباط برقرار می کنن.
6- ساخت Process به سختی توسط duplicate کردن Process والد انجام میشه، ولی ساخت Thread براحتی توسط کپی شی Thread انجام میشه.
7- برای اجرای چند Process بطور موازی/parallel به یک سیستم Multi-Process نیاز هست، ولی برای اجرای چند Thread بطور همزمان به دستورات برنامه نویسی نیاز هست.
8- بطور کلی Process توسط CPU کنترل میشه، ولی Thread توسط Process کنترل میشه.
9- هر Process یک Thread main داره، ولی هر Thread فقط خودشه که کارگر/worker صدا زده میشه.
10- Process در فضای separate memory اجرا میشه، ولی Thread در فضای Shared memory اجرا میشه.

11- اگر یک Process کرش کند، معمولاً روی Process‌ های دیگر تأثیر نمی‌ گذارد. اما اگر یک Thread  کرش کند، کل Process و تمام Thread‌ های آن از کار می‌ افتند.

12- ایجاد Process جدید هزینه‌ بر است چون نیاز به اختصاص منابع جدید (حافظه، FD و...) دارد. اما ایجاد Thread بسیار سبک‌ تر است چون منابع Process والد را به اشتراک می‌ گذارد.

13- Process‌ ها در تمام سیستم‌ عامل‌ه ا به صورت استاندارد پیاده‌ سازی شده‌ اند. اما پیاده‌ سازی Thread‌ ها بین سیستم‌ عامل‌ ها متفاوت است (مثلاً Thread‌ های POSIX در لینوکس vs Windows Threads).
و...

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

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

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

 

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

  • یوشا آل ایوب