<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های اصغری</title>
        <link>https://virgool.io/feed/@asghari1368</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 10:29:15</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/74490/avatar/avatar.png?height=120&amp;width=120</url>
            <title>اصغری</title>
            <link>https://virgool.io/@asghari1368</link>
        </image>

                    <item>
                <title>Refactoring Challenge 1: Making the Code Better</title>
                <link>https://virgool.io/@asghari1368/refactoring-challenge-1-making-the-code-better-cpezu6kr7ayy</link>
                <description>تصمیم گرفتم چند چالش کد طراحی کنم تا باهم مهارت های کدنویسی خودمون را افزایش بدیم. اگر آماده هستید، بیایید با اولین چالش شروع کنیم. در این چالش refactoring، کد را با اجرای چندین تغییر گام به گام بهبود میدیم. کد اولیه به زبان php  شرح زیر است:class Order {
    
    private $items;

    public function __construct() {
        $this-&gt;items = [];
    }

    public function calculateTotal() {
        $total = 0;
        foreach ($this-&gt;items as $item) {
            $total += $item-&gt;price;
        }
        $this-&gt;applyDiscount($total);
        return $total;
    }

    private function applyDiscount(&amp;$total) {
        $total *= 0.9;
    }
}اگر فکر کردی راجع به تغییراتش شروع کنیم.Remove pass-by-reference for testabilityبرای اولین گام ارجاع با رفرنس رو حذف میکنیم. اینجوری کدمون خیلی تست پذیر تر هست.    public function calculateTotal() {
        $total = 0;
        foreach ($this-&gt;items as $item) {
            $total += $item-&gt;price;
        }
        return $this-&gt;applyDiscount($total);
    }

    private function applyDiscount($total) {
        return $total * 0.9;
    }2. Single Responsibilityاگر بخوایم بر اساس اصل اول SOLID کدمون رو پیاده کنیم بهتر هست که فانکشن calculateTotal رو بشکنیم به دو فانکشن به شکل زیر:    public function calculateTotal() {
        $subtotal = $this-&gt;calculateSubtotal();
        return $this-&gt;applyDiscount($subtotal);
    }

    private function calculateSubtotal() {
        $subtotal = 0;
        foreach ($this-&gt;items as $item) {
            $subtotal += $item-&gt;price;
        }
        return $subtotal;
    }3. Constructor property promotionبهتره تا از خاصیتهای جدید php هم اضافه کنیم و کانستراکتور رو به این شکل بازنویسی کنیم. دیگه نیازی به تعریف اولیه $items در بدنه کلاس نیست.public function __construct(private $items=[]) 
{
}   4. Type Declarationچطوره تا تایپ اضافه کنیم تا کارمون تکمیل بشه:class Order {

    public function __construct(
       private readonly array $items=[]
    ) {}

    public function calculateTotal(): float
    {
        $subtotal = $this-&gt;calculateSubtotal();
        return $this-&gt;applyDiscount($subtotal);
    }

    private function calculateSubtotal(): int
    {
        $subtotal = 0;
        foreach ($this-&gt;items as $item) {
            $subtotal += $item-&gt;price;
        }
        return $subtotal;
    }

    private function applyDiscount($total): float
    {
        return $total * 0.9;
    }
}کار ما فعلا تمومه!!اگر هر پیشنهاد دیگری برای بهبود کد داری ممنون میشم بدونم.این مطلب رو به صورت اسلاید و به زبان انگلیسی میتونی در لینکدینم دنبال کنی:https://www.linkedin.com/posts/sm-asghari_refactoring-code-challenge-activity-7117045778669260800-2e2Z</description>
                <category>اصغری</category>
                <author>اصغری</author>
                <pubDate>Mon, 09 Oct 2023 14:06:24 +0330</pubDate>
            </item>
                    <item>
                <title>ایجاد پروکسی شخصی با سرور مجازی لینوکس در دو دقیقه</title>
                <link>https://virgool.io/@asghari1368/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%BE%D8%B1%D9%88%DA%A9%D8%B3%DB%8C-%D8%B4%D8%AE%D8%B5%DB%8C-%D8%A8%D8%A7-%D8%B3%D8%B1%D9%88%D8%B1-%D9%85%D8%AC%D8%A7%D8%B2%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%AF%D8%B1-%D8%AF%D9%88-%D8%AF%D9%82%DB%8C%D9%82%D9%87-xa81fkm9868k</link>
                <description>سلامشاید برای شما هم اتفاق افتاده که یک سرور مجازی (vps) در اختیار دارید و مایلید که از اون به عنوان پروکسی در مرورگرتون هم استفاده کنید. در آموزش زیر یاد خواهیم گرفت که چطور این کار رو انجام بدیم.1- نصب squid ابتدا squid رو روی سیستم نصب میکنیم. (سروری که من در اختیار دارم Debian9 هست.) sudo apt install squid2- ایجاد نام کاربری و پسوردsudo htpasswd -c /etc/squid/passwd &lt;نام دلخواه&gt;3- تنظیماتبرای squid میشه تنظیمات زیادی داشت ولی ما فقط به دنبال اون چیزی هستیم که کار ما رو راه بندازه. به فایل در مسیر زیر مراجعه کنید /etc/squid/squid.confو در خط زیر دسترسی رو از deny به allow تغییر بدید.http_access allow all
 #http_access deny all4- ری استارت squidsudo systemctl restart squid5- اتمامکار تمام هست و الان میتونید از این پروکسی استفاده کنید. من افزونه freeProxy رو در فایر فاکس و SwitchyOmega رو برای کروم استفاده میکنم. مقادیری که باید ست کنید. عکس زیر تنظیمات مربوط به freeproxy رو نشون میده.تنظیمات مربوط به freeproxy 1- نام دلخواه2- آی پی سرور3- معمولا همون 3128 هست. در همون فایل تنظیمات با عنوان http_port میتونید پیداش کنید.4و5- مقادیری که در بخش دوم تنظیم کردید.حالا پروکسی رو ست کنید و در گوگل عبارت my ip رو سرچ کنید. اگر آی پی سرور نمایش داده شد کار تمام هست و مراحل رو به درستی رفتید.شاد باشید.</description>
                <category>اصغری</category>
                <author>اصغری</author>
                <pubDate>Tue, 23 Mar 2021 15:09:11 +0430</pubDate>
            </item>
            </channel>
</rss>