<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمدحسن رضایی تبار</title>
        <link>https://virgool.io/feed/@rfmhb</link>
        <description>برنامه نویسی اندروید و وب</description>
        <language>fa</language>
        <pubDate>2026-04-15 06:07:59</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2732/avatar/g4yODq.png?height=120&amp;width=120</url>
            <title>محمدحسن رضایی تبار</title>
            <link>https://virgool.io/@rfmhb</link>
        </image>

                    <item>
                <title>درباره  Laravel Pipelines</title>
                <link>https://virgool.io/laravel-community/laravel-pipelines-qefdmnqnnvgn</link>
                <description>توضیحی درباره لاراول پایپ لاینبا استفاده از laravel pipelines می‌تونید یه ابجک بین چند تا کلاس خیلی راحت پاس بدید و یه سری عمل روش انجام بدید و در آخر نتیجه رو به خروجی بفرستید.واضح ترین مثال برای اینکه pipelines چطور کار می‌کنند. یکی از کامپوننت‌های پر کاربرد لاراول یعنی Middleware هاست.میدلور ها یه مکانیزم خیلی راحت برای فیلتر کردن ریکوئست های ورودی به برنامه ارائه میدن.یه میدلور ساده شبیه این کد هست:&lt;?php
app(Pipeline::class)
       -&gt;send($content)
       -&gt;through($pipes) 
       -&gt;via(‘customMethodName’)
       -&gt;then(function ($content) { 
              return Post::create([&#039;content&#039; =&gt; $content]);
    });میدلور ها در حقیقت Pipe هایی هستند که ریکوئست ها از طریق اونها ارسال میشن و متد مشخص شده داخل اون ها صدا می شه و متونید تشخیص بدید که مثلا یک درخواست HTTP هست یا نه ، یک درخواست JSON هست یا نه و یا کاربر لاگین کرده یا نه و همین طور چیزای دیگه.اگر یه نگاه سطحی به کلاس Illuminate\Foundation\Http\Kernel بندازید متوجه میشید که میدلور ها با استفاده از Pipe ها اجرا میشن.&lt;?php
/**  * Send the given request through the middleware / router. 
 *  * @param  \Illuminate\Http\Request  $request 
 * @return \Illuminate\Http\Response 
*/
protected function sendRequestThroughRouter($request)
{
        $this-&gt;app-&gt;instance(&#039;request&#039;, $request); 
        Facade::clearResolvedInstance(&#039;request&#039;);
        $this-&gt;bootstrap();
         return (new Pipeline($this-&gt;app)) 
                -&gt;send($request) 
                -&gt;through($this-&gt;app-&gt;shouldSkipMiddleware() ? [] : $this-&gt;middleware)
        -&gt;then($this-&gt;dispatchToRouter());
}از کد بالا میتونید یه همچین چیزی بفهمید: یه پایپ لاین جدید ایجاد شده و ریکوئست به لیستی از میدلور ها پاس داده میشه و در آخر به router ارسال میشه.اگه یکم براتون گنگ بود نگران نباشید تویه مثال بعدی روشن ترش میکنیم.کار کردن روی کلاسی که نیاز دارد چند تا تسک اجرا کنداین وضعیت رو در نظر بگیرد که میخواید یه انجمن(forum) بسازید که مردم بتونن موضوعات خودشون رو قرار بدن و همچنین کامنت بزارن. ولی مشتری ازت میخواد قبل از ذخیره کردن موضوعات و کامنت ها روی اون ها یه کارایی انجام بدی.کارایی که باید انجام بدی به این صورت:جایگزین کردن تگ های لینک با نوشته سادهجایگزین کردن کلمات زشت با &quot;*&quot;حذف تگ های اسکریپت از کل محتواشما میاید و هر کدوم از این کارایی که باید انجام بدید رو براش یه کلاس ایجاد می‌کنید و احتمالا در اخر یه همچین چیزی دارید:$pipes = [    
        RemoveBadWords::class,
        ReplaceLinkTags::class,
        RemoveScriptTags::class
];حالا کاری که باید انجام بدید اینه که متنی که کاربر وارد کرده به هر کدوم از این کلاس ها پاس بدیم و خروجیشو به کلاس بعدی پاس بدیم. ما میتونیم اینکار رو با پایپلاین انجام بدیم.&lt;?php
public function create(Request $request)
{
        $pipes = [
                RemoveBadWords::class,
                ReplaceLinkTags::clas,
                RemoveScriptTags::class
         ];
        $post = app(Pipeline::class) 
                -&gt;send($request-&gt;content) 
                -&gt;through($pipes) 
                -&gt;then(function ($content) { 
                        return Post::create([&#039;content&#039; =&gt; &#039;content&#039;]);
                }); // return any type of response
}هر کدوم از این کلاس هایی که پیاده کردیم باید یه متد به اسم &quot;handle&quot; داشته باشن. شاید ایده خوبی باشه که یه اینترفیس براش بسازیم و داخل این کلاس ها پیادش کنیم.&lt;?php
namespace App;
use Closure;
interface Pipe
{ 
        public function handle($content, Closure $next);
}&lt;?php
namespace App;
use Closure;
class RemoveBadWords implements Pipe
{ 
        public function handle($content, Closure $next)    
        { 
                // Here you perform the task and return the updated $content
                // to the next pipe
                return  $next($content);  
        }
}متد پیاده سازی شده باید دو تا پارامتر دریافت کنه که اولی محتوایی هست که میخواد روش عمل انجام بده.و پارامتر دوم باید closureی باشه قرار بعد از اجرای عمل به اون ریدایرکت بشیم.راستی اگه میخوای بجای &quot;handle&quot; یه اسم دیگه برای متدتون بزارید باید تویه پایپ لاین اسمش رو مشخص کنید. مث این:&lt;?php
app(Pipeline::class)
        -&gt;send($content) 
        -&gt;through($pipes) 
        -&gt;via(‘customMethodName’) // &lt;---- اینجا اسم متد مورد نظر رو قرار بدید :) 
        -&gt;then(function ($content) {
                 return Post::create([&#039;content&#039; =&gt; $content]);   
         });آخرش چی میشه؟چیزی که در آخر باید اتفاق بیفته اینه که محتوای پست توسط هر کدوم از این pipes$ تغییر داده میشه و در آخر ذخیره میشه.سخن پایانیبرای اینکه همچین چیزی رو پیاده کنید راه های زیادی هست شاید راه بهتر از این که ذکر شده هم وجود داشته باشه ولی هدف من این بود که با ابزاری که ممکنه در اختیار دارید و وجودش بیخبرید رو بهتون معرفی کنم. اگه میخواید در مورد پایپ لاین ها بیشتر بدونید میتونید به اینجا مراجعه کنید.نکته: نوشتن کلمات انگلیسی وسط متن فارسی باعث به هم ریختگی میشد واسه همین مجبور شدم کلمات رو به فارسی بنویسم اگه کلمه ای رو نمیشناسید کامنت کنید.</description>
                <category>محمدحسن رضایی تبار</category>
                <author>محمدحسن رضایی تبار</author>
                <pubDate>Thu, 09 Apr 2020 19:18:47 +0430</pubDate>
            </item>
                    <item>
                <title>5 چیز بهتر از مدرک کامپیوتر</title>
                <link>https://virgool.io/@rfmhb/5-%DA%86%DB%8C%D8%B2-%D8%A8%D9%87%D8%AA%D8%B1-%D8%A7%D8%B2-%D9%85%D8%AF%D8%B1%DA%A9-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-h0i7ce7pqypl</link>
                <description>مدرک دانشگاهی کامپیوتر مهمه ولی بعضی چیزا در رزومه ازش بهترن. منظورم رو اشتباه متوجه نشید، خصوصا اگه دانشگاهتون با صنعت ارتباط نزدیکی داشته باشه. هرچند ما تو دنیای اینترنت محور داریم زندگی میکنیم و اگر بخواید حرفه برنامه نویسی رو شروع کنید مدرک کامپیوترتون نباید مهمترین نقطه رزومه تون باشه. پس این 5 چیزی که از مدرک کامپیوتر بهتر هستن چین؟ از آسون به سخت این پایین لیستشون کردم. شبکه اجتماعی تخصصیکی از شبکه های اجتماعی خوشش نمیاد؟ اگه شما تو بعضی از شبکه های اجتماعی نیستید پس درستون رو اشتباه انتخاب کردید. ?بخاطر حرفه تون تویه بعضی انجمن های تخصصی (تویه توییتر، لینکدین، ردیت و اسلک) عضو بشید. جداسازی حساب شخصی از تخصصیترجیحا حساب تخصیص تون رو با حساب شخصیتون قاطی نکنید. این باعث اطمینان میشه که با گروهی از افراد آشنا میشید که به یه موضوع علاقه دارند. در رزومه تون لینک حساب شخصی‌تان را قرار ندهید. ارزش زیادی به رزومتون نمیده. بجاش حساب تخصصی تون رو بزارید که مامان باباتون رو توش فالو نکردید. ?حساب فنی؟ خسته کنندست؟ نه در واقع، مردم فقط وبلاگ های تخصصی رو اشتراک نمیزارن. اغلب داستان، جک (مرتبط) و کارتون علاقه دارن. فعال باشیدالبته فقط جک به اشتراک نزارید. یا یه فرد ساکت نباشید. در این صورت فالووری بدست نمیارید. چیزی که پیدا میکنید و به نظر تون جالبه رو به اشتراک بزارید. نظرتون در مورد مطالب مرتبط رو بیان کنید افکار و ایده هاتون رو بنویسید. شگفت زده میشید وقتی نظرات دیگران و ایده هاشون رو میشنوید. بعضی ایده ها که فکر میکنید کامل هستند به نظر بعضیا ناقص به نظر میان و اینطوری یاد میگیریدامتیاز در StackOverflowاین روزا ما خوش شانس هستیم که StackOverflow رو داریم. با پاسخ های خیلی زیاد به سوالات برنامه نویسی ما. یک جامعه بسیار بزرگ(یک سوال برنامه نویسی سرچ کنید معمولا لینک StackOverflow رو می‌بینید) کم کم همه چیز با گام اول شروع میشه. شاید گام اول شما سوالی باشد که پاسخی برای آن پیدا نکردید. خیلی مهمه که سوالتون واضح و برای فهم آسون باشه. اگر نمایشش نیاز به نمودار داره براش نمودار بکشید. اگر نیاز دارید کدتون رو نمایش بدید، git repo تون رو به اشتراک بزارید. جایی از مسئله رو که توش سردرگم شدید رو قرار بدید کل پروژه رو نریزید اونجا و توقع داشته باشید خواننده متوجه بشه. وقتی دارید مسئله رو محدود میکنید ممکنه جوابتون رو خودتون پیدا کنید و غافلگیر بشید (مثلا یه اشتباه احمقانه??). یه سوال تمیز و مختصر معمولا جواب داده میشه، خصوصا تو موضوع هایی که علاقمند زیادی داشته باشه. حتی اگه کسی جوابتون رو نداد تسلیم نشید. مجددا سرچ کنید اگه جوابش رو خودتون پیدا کردید به خودتون جواب بدید تا کسای دیگه هم ازش استفاده کنن. به عبارت دیگه از پست کردن سوالتون دریغ نکنید حتی اگه پاسخش رو جای دیگه پیدا کردید ممکن تو StackOverflow جواب بهتری دریافت کنی. تو امتیاز دادن سخاوت به خرج بدهاگه یکی به سوالت پاسخ بده بهش امتیاز بده. سعی کن بهترین پاسخ رو پیدا کن و بهش uptick بده به جای اینکه سوال رو تو برزخ ول کنی بری. علاوه بر اون دو امتیاز هم خودت بابت uptick میگیری. اگر بهترین پاسخ رو بین گزینه ها ندیدی بخاطر گرفتن دو امتیاز الکی یکی از پاسخ ها رو انتخاب نکن. سخت نیستاین درواقع یک پلتفرم سادست برای تشخیص افراد جامعه(شما فقط به انضباط نیاز دارید). حتی اگه سوالتون به بهترین صورت پرسیده نشه مردم تلاش میکنند که سوالتون رو بهتر کنند. بزارید ببینیم دیگه چیکار میتونیم انجام بدیم. نوشتن مطالب فنی در وبلاگیادگیری و ضبط چیزایی که یاد گرفتیم یه عادت خوبه خصوصا اگه چیزی کشف کنبم که جایی نوشته نشده بود.بعضی وقتا ما چیزی رو از یه آموزش یا داکیومنت یاد میگیریم ولی مدت زمانی طول میکشه تا درست درکش کنیم پس ما میایم بعضی نکته ها و یادداشت ها رو کنارش مینویسیم که فهمش رو برامون اسون تر کنه. چرا این تجربیاتتون رو با بقیه به اشتراک نمزارید؟ یادگیری رو برای بقیه مردم هم آسون کنید. بلاگ برای همه خوبه. چه سودی برای من دار؟ شاید فکر کنید که بلاگ نوشتن فقط برای بقیه سود داره اما اینطور نیست علاوه بر اینکه میتونید تون رو به رزومتون اضافه کنید خوبی های زیر رو هم براتون داره:اطلاع پیدا کردن از شکاف های یادگیری در موضوعی که در موردش پست میزارید، پس میری و در موردش یاد میگیریبعضی وقتا چیزایی که یاد گرفتید رو یادتون میره، خوب در این صورت بر میگردی عقب و از بلاگت اونو دوباره یاد میگیریبعضی وقتا کامنت کاربرات باعث میشه که بفهمی در مورد یک موضوع اشتباه فکر میکردی یا نکته ای رو فراموش کردیوقتی از خواننده ها تشکر دریافت میکنی حس خیلی خوبی پیدا میکنی ?خوبی های بیشتری هم داره که وقتی خوتون شروع کردید درکش میکننساخت یک کتابخانه متن باز(اپن سورس) این روز ها اپن سورس در سراسر دنیا جا افتاده. همکاری و دورکاری یک حرکت رو به جلوه. چرا به جامعه اپن سورس نمی پیوندی؟  با مشارکت در پروژه آگن سورس بقیه شروع کن. یه روز میبینی به چیزی نیاز داری که به راحتی قابل دسترس نیست. خوب اون موقع باید کتابخونه اپن سورس خودتو بسازی و اونو با همه به اشتراک بزاری. یک محصول در ابعاد کوچکتریه کتابخونه اپن سورس یه محصول کوچیکه اما مخالف یه محصول واقعی مخاطبینش توسعه دهنده ها هستن. بنابراین نگرانی بازار یابیش کمتره،طراحی کاربر و غيره. تمام تمرکزت روی کد میزاری در نتیجه هزینه ها هم کاهش پیدا میکنه. در مقایسه با محصول واقعی کتابخونه اپن سورس هزینه کمتری داره. اگه پروژه اپن سورست محبوب شد درخواست هایی از همکارا دریافت میکنی که میخوان ویژگی جدیدی به پروژت اضافه کنند و کار تو میشه بررسی درخواست ها و تصمیم این که کدوم یکی پروژه رو بهبود می بخشهتمرکز بر یادگیری فنیهمون طور که از اسم اپن سورس پیداست یعنی اینکه کدت رو در به همه ارائه بدی. پس اگه ایرادی(باگ) پیدا بشه(امیدوارم احمقانه نباشه?) همکارات اون رو بهت اعلام میکنن یا حتی درستش میکنند و بهت پول ریکوئست میدن تا فیکسش کنی. و از این طریق رایگان پروژتون رو تست میکنید. اگر بعضی قابلیت ها تویه کتابخونه تون کم بود همکارا خودشون اضافش میکنند. یک مثال واقعیآیا یه کتابخونه اپن سورس میتونه آينده شغلی شخص رو تضمین کنه؟ برنامه نویسای اندروید تقریبا همه جک وارتون رو میشناسن. اون هم با اپن سورس شروع کرد. اون الان تو گوگل کار میکنه. به این سادگی نیستبا وجود اینکه نگهداری یه پروژه اپن سورس سخت نیست(بقیه در نگهداریش کمک میکنند) ،هزینه اولیه کمی داره(به طراحی و نقشه بازاریابی نیاز نداره) و بر فن متمرکزه باز هم چالش های خودش رو داره. احتمال ساخت یه کتابخونه اپن سورس که توسط خیلیا استفاده بشه زیاد نیست. برای ساخت هر پروژه اپن سورسی زمان، تلاش، فکر، و ملاحظات لازمه. بررسی پول ریکوئست ها و تست و آپلود هم زمان بره. من فکر نمی کنم که هر کسی بتونه تعداد زیادی کتاب خونه محبوب اپن سورس بسازه. ادمای زیادی نیستن که اندازه جک وارتون استعداد دارن. اگه فکر میکنی این تو رو به چالش نمی کشونه، و فکر میکنی کشش بیشتر از این رو داری گزینه بعدی رو بررسی کن. ساخت یک نرم افزار واقعیساخت یه صفحه وب یا یه برنامه این روزا خیلی سادست. اما بازاریابی اون شاید کار آسونی نباشه ولی رسوندنش به 10.000 کاربر دیگه یه شاهکار غیر ممکن نیست. بنابراین داشتن یه محصول واقعی(نه یه تکلیف مدرسه یا دانشگاه)  با دسترسی آزاد برای عموم و بازخورد خوب کاربران، ارزش زیادی به رزومه تون میده. یک تجربه جامع در یادگیریداشتن یه پروژه واقعی بهتون تجربه کاملی در ساخت برنامه میده—از صفر تا انتشار و استفاده عمومی. هر تکنولوژی که نیاز داشته باشه رو تو طول پروژه یاد میگیرید. در کنار مباحث فنی که یاد می گیرید، یه دید ارزشمند نسبت به بازاریابی محصول تون بدست میارید.یاد می گیرید که جزئیات ریز طراحی مهم هستن و جریان کار تون می‌تونه طراحیتون رو بسازه یا خراب کنه. برای بهتر کردن برنامه باید رفتار کاربرا رو بدونی و اینکه کدوم ویژگی کار میکنه و کدوم کار نمیکنه. آنالیز موضوع دیگه ایه که بهش میرسید. بعدش پی می‌برید که یه کار عالی رو نمیشه تنهایی انجام داد. یک مثال واقعیمن یه دوستی دارم که زبان انگلیسیش خیلی ضعیف بود و دنبال کار در یک کشور انگلیسی زبان می‌گشت. با وجود مشکلی که با زبان انگلیسی داشت چون پروفایل خوبی روی وب داشت خیلی راحت کارشو پیدا کرد بدون اینکه زیاد انگلیسی صحبت کنه(الان زبانش خیلی خوب شده). به این سادگی نیستدر حالی که داشتن یه محصول موفق وزن زیادی به پروفایلتون اضافه میکنه در حقیقت میتونه خودش یه کسب و کار و حرفه باشه. نگهداریش کار خیلی سختیه بزارید یکم توضیح بدم. با گذشت زمان سرمایه گذاری و وقت بیشتری نیاز پیدا می‌کنه. تکنولوژی در حال تغییر و نیازه که محصولت رو بروز کنی. اگه قبلا تمام وقتت رو میزاشتی ممکنه الان ازدواج کردی و بچه داشته باشی که در این صورت نگهداری از محصول شخصی می تونه یه چالش باشه. خوب این بهانه منه، نگاه کنید به بیل گیتس، استیو جابز، مارک زاکربرگ اگه اونا تونستن انجامش بدن چرا تو نتونی؟ منبعنکته 1: اگر این مقاله برات مفید بود میتونی با لایک کردنش به من برای نوشتن مقاله های بعدی روحیه بدی ❤️?نکته 2: اگه متن اشتباه تایپی یا معنایی داشت یا کلا مخالف بودید کامنت کنید ?</description>
                <category>محمدحسن رضایی تبار</category>
                <author>محمدحسن رضایی تبار</author>
                <pubDate>Tue, 04 Jun 2019 00:22:25 +0430</pubDate>
            </item>
            </channel>
</rss>