<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Hossein Yusuf-zadeh</title>
        <link>https://virgool.io/feed/@hossein.yousefzade</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-07-06 14:09:07</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/8764/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Hossein Yusuf-zadeh</title>
            <link>https://virgool.io/@hossein.yousefzade</link>
        </image>

                    <item>
                <title>بیایید همدیگر را نزنیم!</title>
                <link>https://virgool.io/@hossein.yousefzade/%D8%A8%DB%8C%D8%A7%DB%8C%DB%8C%D8%AF-%D9%87%D9%85%D8%AF%DB%8C%DA%AF%D8%B1-%D8%B1%D8%A7-%D9%86%D8%B2%D9%86%DB%8C%D9%85-t1i7rbyieay9</link>
                <description>سلام. این نوشته سیاسی است! این نوشته پر از غلط نگارشی و دستوری خواهد بود. زرد هم نوشته شده که همه خوششون بیاد پس راحت باشید!منم مثل خیلی ها معتقدم که از ماست که بر ماست. اصلا کدام ملتی است که تا خودشون نخواستن پیشرفتی داشتن. بله من هم کتاب جامعه شناسی خودمانی رو خوندم و هم چنین کتابی که به عنوان درآمدی بر جامعه شناسی خودمانی آمد رو گرفتم و خوندم. بله من هم جامعه شناسی نخبه کشی رو میدونم و سرگذشت تنها ملی مذهبی سیاست خارجی ایران که در مشروطه به دار رفت رو میدونم. من هم دوستی داشتم که در مورد ظرفیت مهندسی این ملت به من میگفت و این که لقمه بزرگتر از دهان برای ملت های میانه آمار سازمان های جهانی هدر رفت وقت و سرمایه خواهد بود رو به من گوشزد می کرد که باید شروع کرد ولی صبر داشته باش. و بنده هم به حکم این که تغییرات ناگهانی منجر به تغییرات ریشه دار نمیشن در این گیر و دار به جای مطالبه گری سرم گرم می شد به این که ساز و کار بچینیم و این که در کل داد زدن بد است و ما متمدنیم و رای خوب است و ویرانه آقای فلان را دست آقای فلان دادن در نهایت تلاش می شود همین!اما امروز به باور دیگری رسیدم. اتفاقا ما میتوانستیم خیلی بهتر باشیم. میتوانستیم با امکانات این کشور طوفان به پا کنیم. میتوانستیم در این سال ها به جای یک قدم صدها کیلومتر به سمت دموکراسی شفافیت و حذف رانتخواران و ایجاد پیشرفت طولانی مدت ماندگار قدم برداریم ولی مدیرانی با دلایل پاراگراف بالا مطالبه ی انقلابی رو به درخواست های توسعه ای تقلیل دادند. در همین کشور پروژه هایی با مدیریت متفاوت از بخش خصوصی صد ها برابر موفق تر و بهتر ظاهر شده اند. حتی در دولت های ما گاهی با یک طرح کارت سوخت یک طرح شبنم یک طرح رجیستری خیلی کارها شد. بماند که گاهی به اسم طرح غیرکارشناسی کارشناسی ترین طرح ها و به اسم نمایشی بودن قوی ترین پروژه ها در کشور تعطیل شد!من به عنوان یک شهروند نه یک فرد حتی از امت اسلام اصلا بگیرید به عنوان یک نفر از آسمان افتاده در وسط این جامعه سنتی میانه آمار سازمان ملل درگیر مظاهر توسعه و اصلا نفهم باطن توسعه وقتی صحبت هایی میشنوم که افرادی با کارنامه ای غیرشفاف و بعضی وقت ها پسرفت دار حرف از لزوم اعتماد دوباره میزنند اجازه بدهید که کهیر بزنم.پی نوشت: به هیچ عنوان صحبت من با مدیران خوب وزیران جوان معاونین جوان و کلا همه جوان های کشورم نیست. ضمنا صبر استراتژیک را برای رشد ملت ها برای حاکمان ضروری میدونم!</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Sun, 29 Sep 2019 13:37:57 +0330</pubDate>
            </item>
                    <item>
                <title>internal class in php</title>
                <link>https://virgool.io/@hossein.yousefzade/internal-class-in-php-p4ynwn2bvdnq</link>
                <description>سلام. این نوشته برداشت من از یه مقاله جالبه. در زبان زیبای PHP‌‌ همه کلاس های ما حالتشون public هست و خب این بعضی جاها یه سری مشکلاتی برامون به وجود میاره. یعنی ما نمیتونیم کلاس هایی در یک کتابخانه داشته باشیم که برای برخی کلاس ها قابل دیدن باشن و کاربرها به اونا خارج از کتابخونه دسترسی نداشته باشن. حالا php از قدیم الایام راه حلی برای جلوگیری از extend داشت که در ادامه میبینید. کلمه ی کلیدی final که بحث ما این جا این نیست!PHP 5 introduces the final keyword, which prevents child classes from overriding a method by prefixing the definition with final. If the class itself is being defined final then it cannot be extended.حالا فرضا شما یه کتابخانه برای کار با نقشه گوگل دارین و برای پارس جواب ها هم یه کلاس دیگه دارین که internal کتابخونه شماست. خب شما برای این کلاس کلمه final رو میزارین ولی میخواین به کاربر هم بگین این کلاس من internal هست شما استفاده نکن. در phpstorm بلاک توضیحی هست که این کار رو انجام میده./** * @internal */final class StringHelper{    public static function sanitize(string $value): string {}}خب بعد از تعریف حالا وقتی کسی بخواد از این کلاس استفاده کنه این شکلی میشه :)internal classاینم منبع بخونین خودتون.</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Thu, 04 Jul 2019 12:48:27 +0430</pubDate>
            </item>
                    <item>
                <title>php script running forever</title>
                <link>https://virgool.io/@hossein.yousefzade/php-script-running-forever-l4chxgz2sdev</link>
                <description>سلام. بله امروز داشتم میچرخیدم برالی یه کار دیگه که یه function یافت شد که خیلی هم خوبه هم قشنگ. ignore_user_abortWhen running PHP as a command line script, and the script&#x27;s tty goes away without the script being terminated then the script will die the next time it tries to write anything, unless value is set to TRUE.به زبان خودمونی وقتی این تابع رو با مقدار TRUE فراخوانی کنیم همیشه اسکریپت در ادامه کار میکنه و برای همین هم تو مثال ها حتما sleep میزارن که مثل cron job ها کار کنه. در تمامی نسخه ها هم هست.https://www.php.net/manual/en/function.ignore-user-abort.php</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Wed, 03 Jul 2019 12:30:30 +0430</pubDate>
            </item>
                    <item>
                <title>change default port for laravel serve</title>
                <link>https://virgool.io/@hossein.yousefzade/change-default-port-for-laravel-serve-db8pnba4gnxo</link>
                <description>سلام. مثلا دو تا پروژه داریم که میخوایم روی پورت هایی بالا بیاریم. لاراول و  artisan دوست داشتنی برای این موارد یه کمکی دارن. پورت پیشفرض 8000 هست حالا اگر خواستین برای خودتون هم یه پورتی داشته باشین:php artisan serve --port 3000</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Wed, 03 Jul 2019 11:39:05 +0430</pubDate>
            </item>
                    <item>
                <title>تغییر نسخه php</title>
                <link>https://virgool.io/@hossein.yousefzade/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%86%D8%B3%D8%AE%D9%87-php-qposafizjm1y</link>
                <description>سلام. برای تغییر نسخه phpخودتون در ابونتو میتونید از دستورات زیر استفاده کنید. لیست نسخه های خودتون رو اول ببینید:sudo update-alternatives --config phpحالا برای تغییر مثلا از ورژن 5.6 به نسخه 7.1 خواهیم داشت:sudo update-alternatives --set php /usr/bin/php7.1 &amp;&amp;sudo update-alternatives --set phar /usr/bin/phar7.1 &amp;&amp;sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.1  &amp;&amp;sudo update-alternatives --set phpize /usr/bin/phpize7.1 &amp;&amp;sudo update-alternatives --set php-config /usr/bin/php-config7.1 &amp;&amp;sudo pecl config-set php_ini /etc/php/7.1/cli/php.ini &amp;&amp;sudo pecl config-set ext_dir /usr/lib/php/20160303/ &amp;&amp;sudo pecl config-set bin_dir /usr/bin/ &amp;&amp;sudo pecl config-set php_bin /usr/bin/php7.1 &amp;&amp;sudo pecl config-set php_suffix 7.1</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Thu, 27 Jun 2019 14:55:53 +0430</pubDate>
            </item>
                    <item>
                <title>smartgit and java error</title>
                <link>https://virgool.io/@hossein.yousefzade/smartgit-and-java-error-yblaov5is3x3</link>
                <description>خب سلام بیاییم smartgit نصب کنیم و از پس ارور جاواشم بربیایم. این تیکه پایین کپی هست و همچنین بقیه نوشته :)sudo add-apt-repository ppa:eugenesan/ppa
sudo apt-get updateTo install smartgit (after adding the PPA) run:sudo apt-get install smartgitTo install smartgithg (after adding the PPA) run:sudo apt-get install smartgithgخب بعد به این ارور برخورد میکنین یا شایدم نکنین که خوش و خرم میرین دنبال کارتون :)Error: Java version 1.8 is required, currently  is used (version 11.0.3)که راه حلشم اینه که به این smart میگین اصن تو چیکار داری ما چه نسخه ای داریم.sudo nano /usr/share/smartgit/bin/smartgit.sh----------------------------------------------------------------------------------------# check that the environment is 1.8JAVA_VERSION=$($_JAVA_EXEC -version 2&gt;&amp;1 | awk -F &#x27;&quot;&#x27; &#x27;/version/ {print $2}&#x27;)if [[ &quot;$JAVA_VERSION&quot; &lt; &quot;1.8&quot; ]]; then    if [ -n &quot;$JAVA_VERSION&quot; ]; then        echo &quot;Error: Java version 1.8 is required, currently $JAVA_EXEC is used (version $JAVA_VERSION)&quot;    else        echo &quot;Error: No java environment found (JRE 1.8).&quot;    fi    #echoJreConfigurationAndExitfiبله همون خط رو کامنت کنین حله.</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Wed, 19 Jun 2019 15:28:02 +0430</pubDate>
            </item>
                    <item>
                <title>installing varnish on centos7 cwp7</title>
                <link>https://virgool.io/@hossein.yousefzade/installing-varnish-on-centos7-cwp7-ecyiftx13thm</link>
                <description>با سلام و عرض خسته نباشید خدمت دوستان یاران و برگشتگان از آزمون کارشناسی ارشد. در کل نوشته ها بحث فنی حداقلی داره (سواد من کمه) فارسیش هم معیار نیست! خب بریم سراغ کار خودمون. این وارنیش خیلی موجود کم شعوری در نصب بود. گویا در پنل مدیریت cwp وقتی بخوای وارنیش نصب کنی تحریمی شناخته میشی و 403 میده بهت. بعد که بخوای با دستور زیر غیر فعالش کنی میگه yum-utils نداری و اون هم باز نصب نمیشه چون بخاطر وارنیش fail میشه و میفتی توی دور!yum-config-manager --save --setopt=varnishcache_varnish5.skip_if_unavailable=trueخب برای این منظور همین دستورات پایین رو بخونین تا خودتون متوجه بشین.ll /etc/yum.repos.drm -rf /etc/yum.repos.d/&lt;همون پکیج رو مختون&gt;rm -rf /var/cache/yum/*yum clean allsudo yum install -y epel-releaseyum install yum-utilsyum install varnish</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Fri, 14 Jun 2019 13:00:30 +0430</pubDate>
            </item>
                    <item>
                <title>داکر و نصب آن</title>
                <link>https://virgool.io/@hossein.yousefzade/%D8%AF%D8%A7%DA%A9%D8%B1-%D9%88-%D9%86%D8%B5%D8%A8-%D8%A2%D9%86-v5khyowqwamf</link>
                <description>داکرسلام. این جا نوشته هر چی دوست داری بنویس پس زیاد به وجهه فنی این نوشته دقت نکنید دوستان! ضمنن این نوشته نتیجه کپی پیست های بنده هست و این جا میزارم خودم استفاده کنم! خب منم پشت سر هم دستوراتی که باید ران بشن تا این قضیه به خوبی و خوشی فیصله پیدا کنه و داکر هم دور بخوره و از شر همه چی راحت بشیم رو میزارم. ضمنن بعضی از دستورات این زیر برای اطمینان از صحت سلامت نصبمون هست.sudo apt-get updatesudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609Dsudo apt-add-repository &#x27;deb https://apt.dockerproject.org/repo ubuntu-xenial main&#x27;sudo apt-get updateapt-cache policy docker-enginesudo apt-get install -y docker-enginesudo systemctl status dockerخب داکر نصب شد حالا بیاییم و 403 لعنتی یعنی تحریمم دور بزنیم. اول از همه تور رو نصب کنید! و سپس ادامه مراحل دنبال کنید.sudo apt install privoxysudo nano /etc/privoxy/configاین خط رو از کامنت در بیارین این جوری بنویسین. (پورت 9150 هست. خودتون دقت بفرمایید.)#forward-socks5t   /               127.0.0.1:9050 .sudo systemctl restart privoxysudo mkdir -p /etc/systemd/system/docker.service.dsudo touch /etc/systemd/system/docker.service.d/http-proxy.confsudo nano /etc/systemd/system/docker.service.d/http-proxy.confبعدم این رو بزارین توی کانفیگش و بعد هم ریست کنید بعدم برین هر چی خواستین با داکرتون بالا بیارین.[Service]Environment=&quot;HTTP_PROXY=127.0.0.1:8118&quot;sudo systemctl daemon-reloadsudo systemctl restart dockerکلیه منابع کپی پیستی این آموزش اگر خواستین خوب بخونین:http://elastico.io/blog/install-docker-on-ubuntu-16.04.htmlhttps://forum.ubuntu.ir/index.php/topic,141931.15.html?PHPSESSID=voricjni8qf5l7ia4968u5els7https://docs.docker.com/config/daemon/systemd/</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Sun, 02 Jun 2019 11:53:22 +0430</pubDate>
            </item>
                    <item>
                <title>php in command line</title>
                <link>https://virgool.io/@hossein.yousefzade/php-in-command-line-sx9nvwouj7io</link>
                <description>سلام. من توی ترمینال گاهی لازم دارم که یک فایل رو از لحاظ syntax‌‌ چک کنم. گاهی هم لازم هست ماژول های نصب شده رو ببینم. گاهی هم لازمه  interpreter براش بالا بیارم. این یه راهنما هست که مستقیما از stackoverflow کپی گرفتم. این جا بمونه شاید کسی به دردش بخوره.با کمک دستور php --help هم میتونید این لیست رو ببینید.-a               Run as interactive shell  -c &lt;path&gt;|&lt;file&gt; Look for php.ini file in this directory  -n               No php.ini file will be used  -d foo[=bar]     Define INI entry foo with value &#x27;bar&#x27;  -e               Generate extended information for debugger/profiler  -f &lt;file&gt;        Parse and execute &lt;file&gt;.  -h               This help  -i               PHP information  -l               Syntax check only (lint)  -m               Show compiled in modules  -r &lt;code&gt;        Run PHP &lt;code&gt; without using script tags &lt;?..?&gt;  -B &lt;begin_code&gt;  Run PHP &lt;begin_code&gt; before processing input lines  -R &lt;code&gt;        Run PHP &lt;code&gt; for every input line  -F &lt;file&gt;        Parse and execute &lt;file&gt; for every input line  -E &lt;end_code&gt;    Run PHP &lt;end_code&gt; after processing all input lines  -H               Hide any passed arguments from external tools.  -S &lt;addr&gt;:&lt;port&gt; Run with built-in web server.  -t &lt;docroot&gt;     Specify document root &lt;docroot&gt; for built-in web server.  -s               Output HTML syntax highlighted source.  -v               Version number  -w               Output source with stripped comments and whitespace.  -z &lt;file&gt;        Load Zend extension &lt;file&gt;.  args...          Arguments passed to script. Use -- args when first argument                   starts with - or script is read from stdin  --ini            Show configuration file names  --rf &lt;name&gt;      Show information about function &lt;name&gt;.  --rc &lt;name&gt;      Show information about class &lt;name&gt;.  --re &lt;name&gt;      Show information about extension &lt;name&gt;.  --rz &lt;name&gt;      Show information about Zend extension &lt;name&gt;.  --ri &lt;name&gt;      Show configuration for extension &lt;name&gt;.</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Thu, 16 May 2019 14:48:19 +0430</pubDate>
            </item>
                    <item>
                <title>عدم ارسال تغییرات سطح دسترسی در git</title>
                <link>https://virgool.io/@hossein.yousefzade/%D8%B9%D8%AF%D9%85-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%AF%D8%B1-git-lsdjtngrdfo0</link>
                <description>سلام.راه حلی برای عدم ارسال تغییرات permission در فایل ها توسط git  دیدم که خوبه این جا بنویسم تا بمونه.برای اعمال در پروژه محلیgit config core.fileMode falseبرای اعمال کلی روی همه پروژه هاgit config --add --global core.filemode false</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Mon, 08 Apr 2019 11:22:27 +0430</pubDate>
            </item>
                    <item>
                <title>abstract - interface php case</title>
                <link>https://virgool.io/@hossein.yousefzade/abstract-interface-php-case-ytltpznsn7sb</link>
                <description>یکی از مفاهیم شی گرایی همین دو تا کلمه هستن. من تازه باهاشون آشنا شدم. من از ویرگول به عنوان دفترچه استفاده می کنم پس متن پایین الزاما از لحاظ فنی درست نیست!وقتی میخوایم تجرد در php رو پیاده کنیم باید از دو تا کلمه کلیدی بالا استفاده کنیم. کلمه کلیدی interface یک سطح و البته به نظر من سطح بالاتر رو abstract از لحاظ تجرد به ما میده.چرا از اینا استفاده می کنیم؟ اولا رعایت اصول برنامه نویسی و ثانیا چیزی که این دو تا کلمه کلیدی به ما میده یعنی جدا سازی منطقی سطوح برنامه و تمیز تر شدن کدها. مثلا با پیاده سازی یک interface ما میتونیم کلاس های موجود در این interface رو توسط برنامه نویسای دیگه پیاده کنیم و یک ساختار مناسب برای برناممون به وجود بیاریم. مثلا فرض بگیرید ما دو سیستم لاگ متفاوت داشته باشیم که در هر دو سیستم یک سری اعمال مشخص پیاده میشن. توابع این اعمال رو بدون تعریف بدنه در interface می نویسیم و بعد آدمای دیگه باید همین توابع رو پیاده کنن نه کم و نه زیاد.در مورد تفاوت این دو تا این تصویر گویایی هست.abstract-interfaceمثال پیاده سازی:در مورد تفاوت هاشون باید بگم در ساختار interface شما فقط توابع public دارین که بدنه ندارن و کلاس هایی که کلمه کلیدی implements رو دارن میتونن کلاس های interface رو پیاده کنن. ضمنن شما میتونین توی کلاس های خودتون هر چند تا که بخواین کلاس رو implements کنین با یه , که بینشون میزارین. در مورد abstract ها لزومی نداره همه توابع داخلیتون abstract باشن فقط یه تابع باشه کافیه. ضمنن لزومی هم نداره همه توابعتون بدنه نداشته باشن همون یکی که abstract هست هم کافیه. کلمه کلیدی برای استفاده از کلاس های abstract همون extends خودمونه ولی توجه داشته باشین که باید توابع abstract رو توش پیاده کنین. وقت پیاده سازی جلوی اسم کلاستون وقتی مینویسین extends یادتون باشه بیش تر از یک کلاس abstract رو نمیتونین extends کنین. یعنی توی کلاسی که میخواین بنویسین نمیشه کلاسش رو از دو تا چیز extends کرد فقط باید جلوی extends نام یک کلاس باشه.قسمت گیج کننده: شما میتونین interface ها رو هم extends کنین و حتی چند تایی هم extends مشکلی نداره ولی یادتون باشه تمام توابع داخلشون رو در کلاس پیاده سازی باید پیاده سازی کنین.برای مطالعه بهتر:https://roocket.ir/articles/specifications-abstract-in-phphttps://phpenthusiast.com/object-oriented-php-tutorials/abstract-classes-and-methodshttps://phpenthusiast.com/object-oriented-php-tutorials/interfaceshttps://www.aaronsaray.com/2017/php-interfaces-extend-multiple</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Tue, 04 Sep 2018 13:40:40 +0430</pubDate>
            </item>
                    <item>
                <title>AOP in PHP - Section one</title>
                <link>https://virgool.io/@hossein.yousefzade/aop-in-php-section-one-chr0xjm3ddqh</link>
                <description>سلام.من برنامه نویس متوسط رو به پایینی هستم و الان گیر یک سری مفاهیم پیچیده البته برای خودم افتادم. گفتم این جا بنویسم که خودم بهتر بفهمشون. برنامه نویسی جنبه گرا یکی از اون مفاهیم هست. ببینین ما دو تا روند داریم یکی برنامه نویسی شی گرا یکی برنامه نویسی جنبه گرا.در برنامه نویسی جنبه گرا یا همون aspect oriented programming ما برنامه هامون رو بر اساس دغدغه های مشترک سیستم می نویسیم. ببینید ما یک سری دغدغه داریم مثل لاگ گیری از سیستم - امنیت و گرفتن خطاهای سیستم - احراز هویت - کش - بهینه سازی - اعمال دیتابیسی و ... . هر کدوم از این دغدغه ها گاهی با هم تداخل هم دارن که بهشون میگیم  Cross-cutting Concerns. این دغدغه ها وقتی میخوان توی کلاس های ما پیاده بشن منجر به یک تولید یه سری کد کثیف میشن! چطوری؟ مثلا باید قبل و بعد بعضی کلاسا صداشون زد و باز داخل همون کلاس باید یک موجودیت از کلاس دیگری از همین دغدغه ها ایجاد کرد که بخش دیگری رو کنترل کنه. یعنی یک کد کثیف و با وابستگی های زیاد.حالا تو همین برنامه های شی گرای عجیب و غریب ما میبینیم یک سری نقاط اتصال یا join point هست. یعنی چی؟ یعنی قبل یا بعد یا در قبل و بعد یک متد ما باید یک متد از یک کلاس دیگه رو صدا بزنیم! این جوری کدامون کثیف نمیشه. حالا میایم یک سری برش نقطه ای یا همون  point cuts می نویسیم.یک سری کد هستن که این قابلیت رو به ما میدن که برنامه نویسی جنبه گرا رو ساده بتونیم پیاده کنیم. البته فریمورک هایی هم هستن مثل li3 که این قضیه رو داخلی پیاده کردن. AOP-PHP- Flow AOP- Go! AOP- JMSAopBundle فرض بگیرید ما یک همچین کدی داریم: class SecretService { 
  public function getSecret($id)  {  
  return $this-&gt;storage-&gt;getById($id);  }
   } مثلا توی AOP-PHP داریم: function logAfterGetSecret() {  $this-&gt;logger-&gt;info(&#039;Secret accessed!&#039;); } 
 aop_add_after(  &#039;SecretService-&gt;getSecret()&#039;,  &#039;logAfterGetSecret&#039; ); یا توی GO! AOP داریم: class LoggingAspect implements Aspect { 
  /**  * @After(&quot;execution(public SecretService-&gt;getSecret(*))&quot;)  */ 
  public function logAfterGetSecret(MethodInvocation $invocation)  { 
  $args = $invocation-&gt;getArguments();  $this-&gt;logger-&gt;info(&#039;Secret &#039; . $args[0] . &#039; accessed!&#039;);  }
   } البته یادتونه گفتم قبل و بعدش همزمان میتونید صدا بزنید. اینم مثالش: class CachingAspect implements Aspect {
   /**  * @Around(&quot;execution(public SecretService-&gt;getSecret(*))&quot;)  */  
   public function cacheGetSecret(MethodInvocation $invocation)  {  
   $args = $invocation-&gt;getArguments(); 
    if ($this-&gt;cache-&gt;has($args[0])) {  
   return $this-&gt;cache-&gt;get($args[0]);  } 
    $secret = $invocation-&gt;proceed(); 
     $this-&gt;cache-&gt;set($args[0], $secret); 
      return $secret;  } } </description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Thu, 23 Aug 2018 17:06:44 +0430</pubDate>
            </item>
                    <item>
                <title>کپی در clipboard</title>
                <link>https://virgool.io/@hossein.yousefzade/%DA%A9%D9%BE%DB%8C-%D8%AF%D8%B1-clipboard-qusf9vmgmdgo</link>
                <description>سلام. چون خودم گیر این موضوع افتادم گفتم این مطلب رو بنویسم به درد کسی بخوره. اول از همه کپی توی کلیپ بورد موضوع ساده ای نیست! مثلا باید تگ شما input باشه و اگه بخواین از توی یه div کپی بگیرین باید از کد زیر استفاده کنین!jQuery(&#x27;div#name&#x27;).on(&#x27;click&#x27;,function() {  /* Get the text field */  var $temp = $(&quot;&lt;input&gt;&quot;);    $(&quot;body&quot;).append($temp);    $temp.val($(this).html()).select();    document.execCommand(&quot;copy&quot;);    $temp.remove();}); jQuery(&#039;div#name&#039;).on(&#039;click&#039;,function(){ </description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Tue, 21 Aug 2018 12:07:26 +0430</pubDate>
            </item>
                    <item>
                <title>جریان ها در Reactive Programming</title>
                <link>https://virgool.io/@hossein.yousefzade/%D8%AC%D8%B1%DB%8C%D8%A7%D9%86-%D9%87%D8%A7-%D8%AF%D8%B1-reactive-programming-usdmfhna4cbp</link>
                <description> سلام. این نوشته یک کپی بدون نقص از سایت کیوی است. فقط برای رونوشت داشتن شخصی این جا منتشر می شود! با تشکر از وب سایت خوب کیوی.  در این نوشته از کد های ASCII برای نشون دادن جریا ها و اینکه چه اطلاعاتی رو درون خودشون دارن استفاده میشه. به عنوان مثال دیاگرامی که در مطلب قبلی دیدید رو به این صورت نشون میدیم --a---b-c---d---X---|-&gt;a, b, c, d are emitted valuesX is an error| is the &#x27;completed&#x27; signal---&gt; is the timelineو همونطور که نوشته شده:a, b, c, d مقادیری هستن که توسط جریان (Stream) پخش میشن.X به معنای یک خطاست.| سیگنالی هستش که به عنوان پایان یافتن جریان میشه در نظر گرفتش.—&gt; هم نشون دهنده ی زمان هست.از اونجایی که حتما تا الان با معنی این پیام ها آشنایی پیدا کردید مستقیم سراغ  یک مثال میریم. قصد داریم با استفاده از جریان OnClick، یک جریان جدید ایجاد کنیم که هدف اون شمردن تعداد کلیک هاست. به صورت کلی در کتابخانه های Reactive، هر stream تعداد زیادی متد داره که میشه به متد های map، filter و scan اشاره کرد. وقتی یکی از این متد ها صدا زده میشه، در واقع جریان جدیدی بر اساس جریان قدیم ساخته  و عملیات روی اون انجام داده میشه و بهیچ وجه جریان قدیمی رو تغییر نمیده. به این خاصیت تغییر ناپذیری ( immutability ) گفته میشه، همین خاصیت باعث میشه که بتونیم چندین متد رو به صورت زنجیر وار پشت سر هم استفاده کنیم. مثلا : clickStream.map(f).scan(g) clickStream: ---c----c--c----c------c--&gt;vvvvv map(c becomes 1) vvvv---1----1--1----1------1--&gt;vvvvvvvvv scan(+) vvvvvvvvvcounterStream: ---1----2--3----4------5--&gt;در کد بالا c به عنوان click در نظر گرفته شده.با استفاده از متد map جریان جدیدی رو ایجاد می کنیم که در اون هر کلیک به عنوان ۱ در نظر گرفته میشه.با استفاده از متد scan، جریان جدیدی ساخته میشه که کار اون شمردن تعداد ۱ ها در جریان قبلی هست.در پایان ما جریان جدیدی با نام counterStream ایجاد کردیم که تعداد کلیک ها رو بر می گردونه.برای نشون دادن قدرت واقعی Reactive، بیاید تعداد کلیک های چندتایی (دابل کلیک و بیشتر از اون) رو پیدا کنیم. اگر بخوایم این کار رو با استفاده از روش سنتی انجام بدیم با مشکلات خیلی زیادی رو برو میشیم اما با استفاده از قدرت Reactive Programming کار برای ما بسیار ساده تر میشه. شکل زیر رو در نظر بگیرید:جریان ها در Reactive Programming مستطیل های خاکستری، متد هایی هستن که با استفاده از جریان قبلی، جریان جدیدی رو می سازن. ابتدا با استفاده از متد buffer(stream.throttle(250ms) کلیک هایی که فاصله ی اونها کمتر از ۲۵۰ میلی ثانیه هست رو در یک لیست قرار میدیم ( نگران نفهمیدن کد ها نباشین، در این مطلب ما فقط قصد داریم با جریان ها و متد هاشون آشنا بشیم). بعد از ساخته شدن جریان دوم با استفاده از متد map جریان جدیدی می سازیم که تعداد اعضای هر لیست رو برمی گردونه. در پایان هم با استفاده از filter، جریان جدیدی می سازیم که عدد های بزرگتر یا مساوی ۲ رو نشون میده. </description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Mon, 20 Aug 2018 16:28:47 +0430</pubDate>
            </item>
                    <item>
                <title>Reactive Programing</title>
                <link>https://virgool.io/@hossein.yousefzade/reactive-programing-lgukxachc4tz</link>
                <description>سلام. این نوشته یک کپی بدون نقص از سایت کیوی است. فقط برای رونوشت داشتن شخصی این جا منتشر می شود! با تشکر از وب سایت خوب کیوی.Reactive programming یا ( شاید به اشتباه ) برنامه نویسی واکنشی، یعنی برنامه نویسی با جریان های اطلاعات غیر همزمان. در واقع استفاده از این روش چیز جدیدی نیست، شاید ساده ترین نمونه ی اون استفاده از خاصیت OnClick باشه. کلیک کردن در واقع یک جریان (stream) هست که یک متد با نظاره کردن اون، کاری رو انجام میده (مثلا متد با مشاهده ی کلیک شدن روی یک دکمه پیغامی رو نشون میده.)Reactive در واقع نسخه ای قدرتمند تر از ایده ی بالاست. این جریان یا stream میتونه شامل هر چیزی باشه، نه تنها خاصیت کلیک کردن بلکه شامل متغیرها، ورودی های کاربر، properties و انواع دیگه ای از اطلاعات. مثلا صفحه ی اینستاگرامتون رو در نظر بگیرید که با دیدن هر پست، عکس العملی رو نسبت به اون انجام میدید.( جریان هایی از عکس ها رو نظاره می کنید و به هر کدومشون واکنشی خاص رو نشون میدید.)نکته ی جالب تر در مورد این جریان ها، کارهایی هست که میشه روی اونها انجام داد. مثلا  یک جریان رو به عنوان ورودی برای جریا دیگه قرار داد و حتی از چند جریان به عنوان ورودی یکی دیگه استفاده کرد. میشه دو جریان رو یکی کرد، میشه روی یک جریان فیلتر هایی رو اعمال کرد و از اون جریان دیگه ای ساخت و یا اطلاعات رو از یک جریان به جریان دیگه مپ کرد.جریان ها، مرکزیت این الگو رو تشکیل میدن و شاید شکل زیر یکم قضیه رو روشن تر کنه.هر جریان، دنباله ای از اتفاق هاست که بر اساس زمان مرتب شدن. هر جریان میتونه ۳ نوع خروجی رو داشته باشه، یک مقدار(از هر نوعی باشه)، یک خطا و یا یک سیگنال به نشونه ی تمام شدن اون جریان خاص. به عنوان مثال در عملیات کلیک کردن،  بسته شدن اون اکتیویتی که دکمه درون اون هست رو میشه سیگنال complete  در نظر گرفت.این جریان ها رو فقط به صورت غیر همزمان میشه دریافت کرد، به این صورت که یک متد خاص با مشاهده ی خارج شدن یک مقدار از یک جریان، کاری رو روی اون انجام بده. یک متد با دریافت پیغام خطا کاری انجام بده و متدی هم به همین صورت برای سیگنال پایان وجود داشته باشه. بهتر هست بگم این متد ها به اون جریان خاص گوش میدن.به این گوش دادن در اصطلاح subscribing و به اون متد ها observers یا ناظرها گفته میشه. به جریان هم که نقش کلیدی رو ایفا می کنه observable (قابل مشاهده!) گفته میشه.</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Mon, 20 Aug 2018 16:22:16 +0430</pubDate>
            </item>
                    <item>
                <title>سربازی</title>
                <link>https://virgool.io/@hossein.yousefzade/%D8%B3%D8%B1%D8%A8%D8%A7%D8%B2%DB%8C-bulpk6pgrqjq</link>
                <description>سلام بر دوستان ویرگولی.توی این نوشته میخوام به بررسی بعضی حرفا در مورد سربازی بپردازم.مورد اول: آیا سربازی باعث مرد شدن میشه؟ این مورد بستگی به شرایط خیلی زیادی داره. از واحدی که توش خدمت میکنی تا مافوقت و از اون طرف شخصیت خود فرد. در اکثر مواردی که باهاش رو به رو بودم این طور بوده که سربازی باعث مرد شدن فرد نمیشه. مخصوصا این که برخی که وارد سربازی میشن اصولا آدمهای مسئولیت پذیر و کاری هستن و برخی اصن درگیر زندگی به معنی تمام هستن. در کل نمیدونم فلسفه سربازی این هدف بوده یا نه ولی سربازی به دلیل نوع اجراش تجربه دلپذیری نیست و این وابسته به شرایط هست که شما بخوای ازش درس بگیری یا فراری باشی.مورد دوم: سربازی یک کاریه هر چه زودتر بری بهتره. این مورد رو قبول دارم. واقعا اگر شما دوست ندارید 8 سال ترس از برخورد با پلیس و دژبان و غیره داشته باشید و پیشرفتتون وابسته به بخش هایی هست که جز با کارت پایان خدمت نمیشه بهشون دست پیدا کرد پس بیخودی نچرخید و فرار نکنید.مخصوصا این که درآمد بالا و یا معرف مناسب هم نداشته باشید.مورد سوم: از سربازی به دانشگاه یا از دانشگاه به سربازی. اول از همه مسیر مشخص مانند جمله اول مورد قبول من نیست و برای هر کسی متفاوته. شاید برای خود من از سربازی به کد زدن پشت مانیتور باشه. :) حالا برگردیم به صورت سوال ادعایی که خودمون زیر سوالش بردیم. اگر سوال شما این مورد باشه به نظر من سربازی به دانشگاه گزینه معقول تری هست. هم فرصت های بهتر و بیش تری دارید و هم بعد از سربازی برخی واقعیت ها رو بهتر لمس می کنید.مورد چهارم: آیا توی سربازی میشه کار کرد؟ بستگی کاملا به خودت داره ولی همین اول بگم اگر تو شهر یا منطقه خدمتی خاصی بیفتی احتمالش کمتره فرصت کاری غیر از وظیفت رو داشته باشی. با این حال موارد استثنا کم نیستن. کسایی هستن که توی سربازی درسشون رو خوندن و دانشگاهی شدن یا انگلیسیشون رو قوی کردن و یا حافظ قرآن شدن. از طرف دیگه کارای پاره وقت از پای مغازه بودن تا پای سیستم بودن هم هست.حالا اگر موارد به درد بخور دیگه ای بود براتون مینویسم. یا حق.</description>
                <category>Hossein Yusuf-zadeh</category>
                <author>Hossein Yusuf-zadeh</author>
                <pubDate>Tue, 14 Aug 2018 13:45:15 +0430</pubDate>
            </item>
            </channel>
</rss>