ماه: جولای 2022

  • بازگشت به جای قبلی – شوتکات vscode

    بازگشت به جای قبلی – شوتکات vscode

    میخوام یه شورتکات توی وی اس کد بهتون بگم که احتمالا خیلی قراره دعام کنید. خیلی وقتا پیش میاد که مثلا میخواید چک کنید که نیم اسپیس رو اضافه کردید به فایل یا نه و میخواید بپرید به بالای صفحه و چک کنید و باز برگردید به همینجا. برای این کار از این شورتکاتها میتونید استفاده کنید و لذتش رو ببرید 🙂 در واقع پریدن به اول صفحه رو که احتمالا همه میدونیم. من که دکمه ی home ندارم با command + up میرم اول صفحه ولی چیزی که مهمه اینه که اینجوری میتونید برگردید به وسط کدی که بودید:

    توی ویندوز:

    Alt + ← ... navigate back
    Alt + → ... navigate forward
    

    توی مک:

    Ctrl + - ... navigate back
    
    Ctrl + Shift + - ... navigate forward

    توی لینوکس:

    Ctrl + Alt + - .., navigate back
    
    Ctrl + Shift + - ... navigate forward

    سخته حفظ کردن توی همه ی سیستم عامل ها ولی یاد بگیرید خیلی خوش میگذره. نکته ی جالبش اینه که حتی اگه از فایل دیگه اومدید این شورتکات ها برمیگردونه‌تون به فایل قبلی!!! خیلی خوبه دیگه قبول کنید 🙂

    منبع: https://stackoverflow.com/questions/35424367/how-can-i-navigate-back-to-the-last-cursor-position-in-visual-studio-code

  • برنامه نویس ربات تریدر ارزهای دیجیتال و فارکس

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

    این روزا ارزهای دیجیتال خودتون میدونید دیگه 🙂 یسری ها هستن که دارن توی زمینه ی ارزهای دیجیتال کار میکنن و روز و شب پای سیستم هستن که یه نونی بیارن سر سفره. منتها این کارم سختی های خودشو داره. یکی از سختی هایی که داره اینه که این بنده خدا ها صب تا شب باید توی نمودار بالا پایین بشن که ببینن آیا نمودار قط کرد یا نکرد! مورد بعدی ای که هست اینه که باشه اصلا صب تا شبم طرف بشینه پای سیستم باز میرسه به یجایی که قط میکنه ولی دلش نمیاد بفروشه تا اصطلاحا تخم نمیکنه بخره! بعدن میبینه که ضرل کرده و دیگه اون موقع دیره. این دوستان میگن اگه بشه ۱. صب تا شب پای سیستم باشیم و ۲.استراتژی خوبی بچینیم و نهایتا ۳.احساسی عمل نکنیم اونوقت احتمالا میشه سود کرد توی این بازار.

    ربات خرید و فروش چه کمکی میتونه بکنه؟

    این تیتر رو بیشتر برای سئو زدم و اصلا مهم نیس و قطعا شما دیگه میدونید که ربات میتونه همه ی اون مشکلاتی که گفتم رو حل کنه. ینی هم ۷ روز هفته و ۲۴ ساعت شبانه روز پای سیستمه اگه سرور ۹۹.۹۹٪ آپتایم داشته باشه. از اونور استراتژی های مختلف هم اگه توی ربات تعریف بشه باز این مشکل هم به مرور زمان حل میشه و شما راه رو پیدا میکنید. نهایتا ربات که با صفر و یک کار میکنه احساسات نداره خداروشکر. لذا این روزا این آدما نیاز شدیدی دارن که یه ربات داشته باشن. در ادامه میخوام در مورد اینکه برای نوشتن ربات چیا باید بلد باشیم هم صحبت میکنم.

    ابزارها و زبان های لازم برای نوشتن ربات تریدر

    برای نوشتن ربات باید اطلاعات خوبی در زمینه ی برنامه نویسی بکند داشته باشید. در واقع شما باید بتونید از API صرافی های مختلف سر در بیارید و بعد ازشون دیتا بگیرید و نهایتا بتونید درخواست سفارش های خودتون رو روی صرافی های مختلف ثبت کنید. بعنوان نمونه میتونید صرافی های زیر رو چک کنید.

    بایننس بزرگترین صرافی ارز دیجیتال در دنیا

    برای ارسال درخواست به این API ها میتونید از یک زبان برنامه نویسی مثل PHP یا پایتون استفاده کنید یا حتی میتونید برای شروع از ابزارهایی مثل Postman استفاده کنید. اگر با یک زبان برنامه نویسی کار میکنید برای اینکه کد شما همیشه بالا باشه باید یه سرور داشته باشید و برای اینکه داده ی خودتون رو روی سرور ذخیره کنید باید یک نرم افزار مدیریت دیتابیس مثل MySQL داشته باشید.

    استفاده از Trading View برای نوشتن ربات

    تریدینگ ویو یه سایته که یکی از کاراش اینه که به شما چارت میده که میتونید با اون چارت ها استرتژی های خودتون رو مدل کنید. تریدینگ ویو یه چیزی داره به اسم alert که شما میتونید روی نمودار ها اعلان ست کنید که وقتی شرایطی که مد نظر شماست اتفاق افتاد برای شما اعلان ارسال بشه. این اعلان ها میتونن بصورت web hook باشن. ینی به سرور شما درخواستی ارسال کنن. نهایتا حتی شما میتونید استرتژی ها رو با زبان Pine که یه زبان برنامه نویسی مخصوص خود تریدینگ ویو هست بنویسید و اعلان ها واستون ارسال بشن. ینی لازم نیست شما داده رو بگیرید و پردازش کنید. استراتژی رو بصورت ویژوال میچینید و خرید و فروش اتوماتیک روی صرافی مد نظرتون انجام میشه.

    جمع بندی

    بصورت خلاصه این یک مطلب کلی در مورد مسیر بود. شما میتونید در مورد تک تک این موضوعات سرچ کنید و ربات خودتون رو بنویسید. البته مد نظر داشته باشید که بجز دانش برنامه نویسی باید بتونید استراتژی خوب بچینید که منجر به چیزای خوب بشه. و نکته ی دیگه ای که بازم مهمه داشتن سرمایه هست دیگه. شما بهترین استرتژی رو هم داشته باشی بدون سرمایه خطریه 🙂

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

  • آرگومان های با نام یا named arguments در PHP

    آرگومان های با نام یا named arguments در PHP

    تصور کنید که یه تابع به این صورت دارید که دو تا پارامتر اختیاری داره که مقدار پیشفرض رو توی ورودی تابع واسشون تعریف کردیم:

    function test($x = 1, $y = 2) {
        var_dump($x, $y);
    }

    اگه مقدار اول رو نیاز داشته باشیم پاس بدیم بهش و دومی رو ندیم همه چی اوکیه و برای متغیر دوم مقدار پیشفرض ست میشه:

    test(3);
    
    // Output:
    int(3)
    int(2)

    ولی از اونجایی که توی PHP آرگومان ها باید به ترتیب ارسال بشن نمیتونیم بگیم که مقدار اولی دیفالت باشه یا اون رو ازش بگذر و برو دومی رو مقدار دهی کن. یا باید آپشناله آخرین آرگومان باشه یا باید همون مقدار دیفالت رو مثلا دوباره بهش بدیم. خوشبختانه از ورژن PHP 8 توی این آر اف سی، این امکان اضافه شد که بشه آرگومان ها رو با نام فرستاد. ینی میتونیم به این صورت عمل کنیم:

    
    <?php
    
    function test($x = 1, $y = 2) {
        var_dump($x, $y);
    }
    
    
    test(y:3);
    
    // Output:
    int(1)
    int(3)
    

    جاهایی که تعداد زیادی متغیر اختیاری داریم خیلی به درد میخوره این مدل فراخوانی تابع.

    منابع:

  • ارسال با رفرنس در PHP

    ارسال با رفرنس در PHP

    توی پی اچ پی بجز اشیا بقیه ی مقادیر پریمیتیو هستند و رفرنس تایپ نیستن. ینی شما مثلا وقتی یه آرایه رو به یک آرایه دیگه assign میکنید اون دو تا آرایه جاهای جدا از حافظه رو اشغال میکنن و طبیعی هست که تغییر یکی روی اونیکی اثری نذاره. یه مثال ساده:

    <?php
    
    $numbers = [1, 2, 3];
    
    $anothers = $numbers;
    
    $anothers[1] = 5;
    
    var_dump($numbers);
    
    // Output:
    
    array(3) {
      [۰]=>
      int(1)
      [۱]=>
      int(2)
      [۲]=>
      int(3)
    }

    اشیا اینطور نیستن و میشه توی این مثال راحتتر منظورم رو برداشت کرد:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 2"

    برای اینکه اشیا رو ازشون کپی بگیریم خیلی راحت ازش clone میگیریم:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = clone $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 1"

    پریمیتیو ها رو هم میشه مثل رفرنس اساین کرد به یه علامت & قبل از متغیری که میخواد اساین بشه:

    $a = 2;
    $b = &$a;
    $b++;
    var_dump($a);
    
    // Output:
    int(3)

    و نهایتا اگه بخوایم چیزی که primitive هست رو بصورت رفرنس ارسال کنیم یه علامت & قبل از اسمش میذاریم. به این صورت:

    $x = 3;
    
    function change(&$x) {
        $x++;
    }
    
    change($x);
    
    var_dump($x);
    
    // Output:
    
    int(4)

    توی یه سری زبون ها نیازه که جایی که کال میکنیم هم علامت رو بذاریم ولی توی پی اچ پی فقط توی ورودی تابع بنویسیم کافیه.

    امیدوارم به دردتون بخوره.

  • عملگرهای اجرایی در PHP

    عملگرهای اجرایی در PHP

    توی پی اچ پی با این تابع میشه یچی روی توی شل ران کرد:

    shell_exec(string $command): string|false|null

    یه راه سریع تر و قشنگ تر برای این هم هست که اینجوریه که شما کامند رو توی بک کوت میذارید و خود به خود ران میشه واستون. مثلا کد زیر رو اگه ران کنید واستون خروجی ls -a رو میده:

    <?php
    
    $output = `ls -a`;
    
    echo "<pre>{$output}</pre>";

    که واسه من چیزی شبیه اینه:

    .
    ..
    alpine.html
    backticks.php
    index.html
    integ.py
    php_io.php
    venv

    شاد باشید 🙂

  • اصلاح جدول‌های لاراول بعد از migrate کردن

    اصلاح جدول‌های لاراول بعد از migrate کردن

    حتما اگه مدتی با لاراول کار کرده باشید میدونید که مایگریشن های لاراول چیزای خطرناکی ان 🙂 از این جهت که ممکنه یه چیزی رو مایگریت رول بک کنید و داده ای که دارید رو از دست بدید. خب سوالی که پیش میاد اینه که پس چجوری فیلد ها رو ادیت کنیم؟ داکیومنت مایگریشن خود لاراول پکیج doctrine/dbal رو پیشنهاد میکنه برای اینکه تغییرات رو روی جدول ها انجام بدیم.

    فرض کنید اول کار من یه فیلد از مایگریشن ام رو اینجوری درست کردم:

    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title', 500);
        $table->text('body')->nullable();
        $table->timestamps();
    });

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

    php artisan make:migration alter_posts_add_published_field

    و بعد توی متد up کاری که میخوام رو انجام میدم:

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->nullable();
    });

    با مایگریت کردن مجدد تغییراتی که دادید اعمال میشه. حالا فرض کنید همین فیلد آخری رو میخواید مقدار default واسش بذارید. برای تغییر در فیلدهای موجود پکیج زیر رو نصب کنید:

    composer require doctrine/dbal

    یه مایگریشن جدید درست میکنید:

    php artisan make:migration alter_posts_add_default_value_to_published_field

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

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->default(0)->change();
    });

    اگه تابع change رو نذارید خطای زیر رو میگیرید چون فکر میکنه که دارید فیلد رو اضافه میکنید:

    SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'published' (SQL: alter table `posts` add `published` tinyint(1) not null default '0')

    اگه تابع change رو بذارید آخر مایگریشن ولی dbal نصب نباشه این خطا رو میگیرید که اینم مشخصه چی میگه:

    Changing columns for table "posts" requires Doctrine DBAL. Please install the doctrine/dbal package.

    نکته ی دیگه ای که باید مد نظر داشته باشیم اینه که اگر مثلا یه کلید خارجی دارید اضافه میکنید باید حواسمون باشه که کلید خارجی و لوکال با هم compatible باشن که البته این نکته توی ساخت همون مایگریشن ها هم مهمه دیگه.

    اگه دیدید خیلی مایگریشن هاتون زیاد شدن میتونید با این فیچر از شرشون خلاص بشید.

    موفق باشید 🙂

  • استفاده از valet برای لاراول

    استفاده از valet برای لاراول

    لاراول تلاش میکنه همه چی رو راحت کنه و ابزارهایی که واسش میان هم تلاششون برای همینه انگار 🙂 لاراول ولت یه ابزار خوب برای توسعه ی لوکال روی مک هست که میتونه دامین های مجازی برای سایت های شما درست کنه و میتونه ورژن های مختلف پی اچ پی رو خیلی راحت در دسترس شما قرار بده. روی nginx هست و اینم شاید بد نباشه برای ماها. و نهایتا خوبی جدیدی که بهش اضافه شده اینه که میتونید باهاش بگید روی فلان پروژه فلان ورژن پی اچ پی ران بشه و روی اونیکی ورژن دیگه ای.

    داکیومنت ولت خیلی کامل هست و بهش حتما سر بزنید. من فقط اینجا مینویسم که نوشته باشم.

    نصبش که خیلی راحته:

    brew install php

    و بعدش پکیج کامپوزرش:

    composer global require laravel/valet

    و نهایتا:

    valet install

    برای سوییچ بین ورژن های مختلف این شکلی عمل میکنیم:

    valet use php@7.2

    و برای اینکه دامین مجازی درست کنیم اینجوری:

    cd ~/Sites
     
    valet park

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

    cd ~/Sites/laravel
     
    valet link

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

    cd ~/Sites/laravel
     
    valet link application

    لینک های قبلی رو اینجوری ببینید:

    valet links

    و یچی رو آنلینک کنید:

    cd ~/Sites/laravel
     
    valet unlink

    همه ی اینارو گفتم که برسم به اینجا که میتونید یه دامین رو ایزوله کنید از بقیه و ورژن دیگه ای از پی اچ پی رو بهش بدید 🙂

    cd ~/Sites/example-site
     
    valet isolate php@8.0

    این خیلی سکسیه و قطعا دستی بخواید اینکارو بکنید داستان زیاد داره.

    بازم اوصیکم به داکیومنت 🙂 موفق باشید.