<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های اسماعیل بحرانی فرد</title><link>https://virgool.ir/feed/@esmaeilbfd</link><description>FullStack Developer</description><language>fa</language><pubDate>2026-11-11 02:43:44</pubDate><image><url>https://files.virgool.ir/upload/users/22389/avatar/qNmeNZ.jpeg</url><title>اسماعیل بحرانی فرد</title><link>https://virgool.ir/@esmaeilbfd</link></image><item><title>بیشتر فریمورک‌ها برای ساخت یک اپ طراحی شده‌اند؛ اما اگر هدف یک محصول باشد چه؟</title><link>https://virgool.ir/@esmaeilbfd/بیشتر-فریمورک-ها-برای-ساخت-یک-اپ-طراحی-شده-اند-اما-اگر-هدف-شما-ساخت-یک-محصول-باشد-چه-fr6um4o2pzjx</link><description>پینوکسوقتی توسعه یک محصول را شروع می‌کنیم، معمولاً همه‌چیز ساده است؛ یک وب‌سایت، یک پنل مدیریت و شاید یک API. در این مرحله فریمورک‌هایی مانند Laravel یا Symfony تقریباً برای هر نوع اپلیکیشنی انتخابی عالی هستند. آن‌ها سال‌هاست ساخت نرم‌افزار را سریع‌تر، استانداردتر و لذت‌بخش‌تر کرده‌اند.اما ساخت محصول، فقط انتشار نسخه اول نیستمحصولی که موفق باشد، متوقف نمی‌شود؛ رشد می‌کند. قابلیت‌های جدید اضافه می‌شوند، تیم توسعه بزرگ‌تر می‌شود و بخش‌های مختلف محصول کم‌کم شخصیت مستقلی پیدا می‌کنند.فرض کنید در حال توسعه یک پلتفرم آموزش آنلاین هستید؛ در ابتدا شاید فقط یک وب‌سایت و یک پنل مدیریت داشته باشید. اما با رشد محصول، پنل مدرس، پنل دانشجو، API عمومی، پنل پشتیبانی و سرویس احراز هویت نیز به آن اضافه می‌شوند.از نگاه کاربر، همه این بخش‌ها یک محصول واحد هستند. او انتظار دارد یک بار وارد حساب کاربری شود، بدون ورود مجدد بین بخش‌های مختلف جابه‌جا شود و تجربه‌ای یکپارچه داشته باشد.اما از نگاه تیم توسعه، دیگر با یک اپلیکیشن واحد روبه‌رو نیستید. اکنون مجموعه‌ای از Appها را مدیریت می‌کنید که هر کدام Frontend، وابستگی‌ها، تیم توسعه و چرخه انتشار مخصوص خود را دارند.در این نقطه، مسئله دیگر فقط توسعه یک اپلیکیشن نیست؛ بلکه مدیریت رشد یک محصول است.راهکارهای رایجوقتی محصول رشد می‌کند، معمولاً تیم‌ها یکی از این مسیرها را انتخاب می‌کنند.ادامه دادن با همان پروژه اولیه، در این روش، همه بخش‌های محصول داخل یک پروژه توسعه پیدا می‌کنند. تا زمانی که محصول کوچک است، این رویکرد سریع و کم‌هزینه است؛ اما با اضافه شدن بخش‌های جدید، وابستگی بین بخش‌ها بیشتر می‌شود، توسعه موازی سخت‌تر می‌شود و کوچک‌ترین تغییر می‌تواند روی قسمت‌های دیگر نیز تأثیر بگذارد و اضافه کردن فیچر تبدیل به کابوس تیم توسعه شود.تفکیک به چند پروژه یا Repository مستقل، بسیاری از تیم‌ها برای افزایش استقلال، هر بخش محصول را به یک پروژه جداگانه تبدیل می‌کنند. این کار به هر تیم اجازه می‌دهد مستقل‌تر توسعه و منتشر کند، اما در مقابل، هماهنگی بین Repositoryها، مدیریت نسخه‌ها، Build، Deploy به چالش جدید پروژه تبدیل می‌شود.استفاده از Microservices و Micro Frontends، در محصولات بزرگ، این معماری‌ها انتخابی منطقی هستند و استقلال بالایی بین بخش‌های مختلف ایجاد می‌کنند. اما این استقلال رایگان نیست؛ مدیریت ارتباط بین سرویس‌ها، احراز هویت مشترک، هماهنگی نسخه‌ها، مانیتورینگ و زیرساخت DevOps نیز به بخشی از پیچیدگی محصول تبدیل می‌شود.هیچ‌کدام از این رویکردها اشتباه نیستند؛ هر کدام برای حل مسئله‌ای مشخص طراحی شده‌اند. اما با بزرگ‌تر شدن محصول، بخش قابل توجهی از زمان تیم صرف مدیریت معماری و هماهنگی بین بخش‌ها می‌شود؛ نه توسعه قابلیت‌هایی که برای کاربر ارزش ایجاد می‌کنند.نگاه PinooxPinoox تلاش نمی‌کند Framework بهتری برای ساخت یک app باشد؛ زیرا فریمورک‌هایی مانند Laravel و Symfony این مسئله را سال‌هاست به‌خوبی حل کرده‌اند.ایده Pinoox از سؤال دیگری شروع می‌شود:اگر محصول شما از چندین App تشکیل شده است، چرا از همان ابتدا آن را به همین شکل توسعه ندهید؟در Pinoox، محصول مجموعه‌ای از Appهای مستقل است، برای مثال، یک محصول می‌تواند از Appهای زیر تشکیل شود:landingdashboarduserapiهر App یک واحد مستقل است؛ ساختار، Routeها، Frontend، Assetها، تنظیمات، وابستگی‌ها و حتی نسخه خودش را دارد. از نظر فنی، هر App یک واحد کامل MVC است؛ یعنی Controller، Model و View  و Routeهای خودش را در مسیر مستقل apps/{package}/ دارد. این Appها می‌توانند به‌صورت موازی و حتی توسط تیم‌های مختلف توسعه پیدا کنند، بدون اینکه مرز بین بخش‌های مختلف محصول از بین برود.اما تفاوت اصلی اینجاست که این Appها پروژه‌های جداگانه نیستند.همه آن‌ها روی یک Platform مشترک اجرا می‌شوند و Pinoox مدیریت آن‌ها را بر عهده می‌گیرد؛ از مسیریابی بین Appها گرفته تا اجرای آن‌ها، اشتراک سرویس‌های مشترک و انتشار نسخه‌های جدید. در نتیجه، هر App استقلال خود را حفظ می‌کند.در Pinoox، مسئله فقط توسعه یک App نیست که کار می‌کند؛ مسئله، ساخت محصولی است که بتواند همراه با رشد تیم، اضافه شدن بخش‌های جدید و افزایش نیازهای کسب‌وکار، بدون افزایش بی‌رویه پیچیدگی به توسعه سریع خود ادامه دهد.اشتراک منابع، بدون وابستگی اجباریفرض کنید یک App مسئول کاربران و احراز هویت باشد.تمام Appهای دیگر می‌توانند از همان کاربران، Session و مجوزهای دسترسی استفاده کنند تا کاربر فقط یک بار وارد سیستم شود، در عین حال، اگر بخشی از محصول نیاز متفاوتی داشته باشد، می‌تواند سیستم کاربران یا احراز هویت کاملاً مستقل خودش را پیاده‌سازی کند.توسعه مستقل، مدیریت متمرکزاستقلال Appها نباید به معنی پیچیده‌تر شدن مدیریت محصول باشد.هر App نسخه و چرخه توسعه خودش را دارد، اما انتشار محصول همچنان از یک نقطه انجام می‌شود. برای شروع سریع ساخت App، دستورات CLI یکپارچه‌ای مانند php pinoox app:create ساختار استاندارد را به‌طور خودکار می‌سازند؛ یعنی افزودن یک بخش تازه به محصول، چند دستور بیشتر طول نمی‌کشد.اینجاست که معنای واقعی HMVC (Hierarchical MVC) در Pinoox روشن می‌شود. در MVC معمولی، کل پروژه یک Controller، Model و View مشترک دارد که با رشد محصول، همه در یک لایه انباشته می‌شوند. اما در HMVC، هر App خودش یک واحد کامل و مستقل MVC است؛ Controller، Model و View مخصوص به خودش را دارد و می‌تواند مثل یک اپلیکیشن کوچک، جدا از بقیه اجرا و توسعه پیدا کند. هسته Pinoox این واحدهای MVC مستقل را در یک سلسله‌مراتب (Hierarchy) کنار هم مدیریت می‌کند؛ مسیر درخواست را به App درست هدایت می‌کند، سرویس‌های مشترک (مثل کاربران یا Session) را بین آن‌ها به اشتراک می‌گذارد و در نهایت همه را به‌عنوان یک محصول واحد منتشر می‌کند. به همین دلیل، به‌جای یک MVC بزرگ و به‌هم‌وابسته، با چند App کوچک و مستقل روبه‌رو هستید که هرکدام چرخه MVC خودشان را دارند، ولی زیر یک پلتفرم مشترک هماهنگ می‌شوند:pinoox-platform/&#xA;├── apps/&#xA;│   ├── com_pinoox_landing/&#xA;│   │   ├── controller/&#xA;│   │   ├── model/&#xA;│   │   ├── view/            # قالب‌های Twig&#xA;│   │   ├── assets/&#xA;│   │   ├── route.php&#xA;│   │   └── app.php   # تنظیمات و مشخصات App&#xA;│   │&#xA;│   ├── com_pinoox_dashboard/&#xA;│   │   ├── controller/&#xA;│   │   ├── model/&#xA;│   │   ├── view/&#xA;│   │   ├── assets/&#xA;│   │   ├── route.php&#xA;│   │   └── app.php&#xA;│   │&#xA;│   ├── com_pinoox_user/&#xA;│       ├── controller/&#xA;│       ├── model/&#xA;│       ├── flow/            # لایه‌های احراز هویت و دسترسی&#xA;│       ├── route.php&#xA;│       └── app.php&#xA;│       &#xA;└── composer.jsonهر پوشه داخل apps/ دقیقاً معادل یک App مستقل است؛ فایل app.php هویت، نسخه و وابستگی‌های همان App را مشخص می‌کند و باعث می‌شود هنگام Build، Pinoox بداند هر بسته Pinx باید از کدام پوشه ساخته شود. به همین دلیل، اضافه یا حذف یک App (مثلاً حذف کامل api در فاز MVP) صرفاً به معنی افزودن یا حذف یک پوشه است، نه دست‌کاری در بقیه پروژه.وقتی نسخه جدید منتشر می‌شود، Pinoox یک بسته نصب یا بروزرسانی برای کل محصول تولید می‌کند و فقط Appهایی که تغییر کرده‌اند بروزرسانی می‌شوند. این کار از طریق بسته‌بندی سبک Pinx انجام می‌شود؛ هر App هنگام انتشار در قالب یک بسته فشرده مستقل بسته‌بندی می‌شود، بنابراین به‌جای انتقال کل پروژه، فقط همان App یا حتی فقط بخش‌های تغییریافته منتقل می‌شود. در نتیجه، تیم‌ها می‌توانند مستقل توسعه دهند، بدون اینکه فرآیند نصب، بروزرسانی و نگهداری محصول به مجموعه‌ای از عملیات پراکنده تبدیل شود.از MVP تا Enterpriseدر یک استارتاپ، می‌توانید Appهای آماده مارکت را استفاده کنید و فقط روی بخش‌هایی تمرکز کنید که محصول شما را متمایز می‌کنند.با بزرگ‌تر شدن تیم، هر گروه مسئول چند App می‌شود و بدون ایجاد تداخل با دیگران توسعه را ادامه می‌دهد.و اگر چند سال بعد محصول شما از چند App به چند ده App برسد، همان معماری همچنان پاسخ‌گوی نیازهای شما خواهد بود؛ بدون بازنویسی پروژه، بدون مهاجرت به معماری جدید و بدون تبدیل شدن محصول به یک Monolith پیچیده یا مجموعه‌ای از پروژه‌های پراکنده.جمع‌بندیFrameworkهایی مانند Laravel و Symfony ساخت انواع Application را به بهترین شکل ممکن ساده کرده‌اند و همچنان انتخابی عالی برای بسیاری از پروژه‌ها هستند.اما وقتی یک محصول به مجموعه‌ای بزرگ تر تبدیل می‌شود، چالش اصلی دیگر فقط توسعه یک app نیست؛ بلکه مدیریت رشد، هماهنگی و نگهداری کل محصول است.Pinoox با همین نگاه طراحی شده است. معماری آن به شما کمک می‌کند از همان روز اول، محصول را به مجموعه‌ای از Appهای مستقل اما یکپارچه تقسیم کنید؛ Appهایی که می‌توانند مستقل توسعه پیدا کنند، اما همچنان مانند یک محصول واحد مدیریت، منتشر و نگهداری شوند.به همین دلیل، مفاهیمی مانند Apps، HMVC، App Router، Flow و Transport صرفاً قابلیت‌های فنی نیستند؛ بلکه اجزای معماری‌ای هستند که پیچیدگی رشد محصول را کاهش می‌دهند تا تیم شما زمان بیشتری را صرف توسعه قابلیت‌های محصول کند، نه مدیریت پیچیدگی‌های فنی.</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Fri, 10 Jul 2026 15:45:43 +0330</pubDate></item><item><title>پروژه سنج تعیین نرخ پروژه‌های نرم افزاری، با یک ابزار ساده!</title><link>https://virgool.ir/@esmaeilbfd/پروژه-سنج-تعیین-نرخ-پروژه-های-نرم-افزاری-با-یک-ابزار-ساده-txnophsnxtfw</link><description>تعیین نرخ پروژه‌های نرم‌افزاری همیشه یکی از دغدغه‌های اصلی برنامه‌نویس‌ها و توسعه‌دهندگان بوده و هست. اغلب در این حوزه هیچ مبنای دقیق و استانداردی برای قیمت‌گذاری وجود ندارد و دلایل کاملاً منطقی باعث می‌شوند که یک پروژه واحد در شرایط متفاوت، قیمت‌های متفاوتی داشته باشد.چرا تعیین نرخ درست اینقدر سخت است؟چند عامل اصلی باعث می‌شوند قیمت‌گذاری پروژه‌ها چالش‌برانگیز باشد:پیچیدگی پروژه‌ها: هر پروژه ویژگی‌ها و نیازهای خاص خود را دارد و نمی‌توان یک نرخ ثابت برای همه پروژه‌ها در نظر گرفت.تفاوت مهارت‌ها و تجربه افراد: ارزش کار شما به میزان تخصص و تجربه‌تان بستگی دارد، حتی اگر پروژه مشابه دیگری انجام شده باشد.عدم شفافیت در هزینه‌ها: بسیاری از هزینه‌های جانبی مثل مالیات، بیمه، تجهیزات و نرم‌افزارها در قیمت‌گذاری لحاظ نمی‌شوند.نبود فرمول مشخص: بسیاری از توسعه‌دهندگان نرخ پروژه‌ها را بر اساس تجربه قبلی یا حدس و گمان تعیین می‌کنند، که باعث می‌شود قیمت‌ها متغیر و گاه غیرمنطقی باشند.یک راهکار پیشنهادی: محاسبه نرخ ساعتیمدتی پیش به روشی برخوردم که به «قانون ارزش ساعت برایان تریسی» نسبت داده شده. راستش نمی‌دونم واقعاً خودش گفته یا نه! 😬 ولی ایده‌اش برای تعیین نرخ پایه خیلی جالب بود و به نظرم می‌تونه نقطه شروع خوبی برای ما برنامه‌نویس‌ها باشه.ایده اصلی ساده است:قانون ارزش ساعت برایان ترسی: ارزش هر ساعتی که کار می‌کنید را محاسبه کنید و کاری انجام دهید که ارزش آن ساعت شما را به هدف درآمدیتان نزدیک کند.فرمول: نرخ ساعتی = ساعات کاری ÷ درآمد سالانهمثال عملیفرض کنید هدف شما درآمد سالانه ۱ میلیارد تومان باشد:روزهای کاری: ۲۵۰ روزساعات کاری روزانه: ۸ ساعتجمع ساعات کاری سالانه: ۲۵۰ × ۸ = ۲۰۰۰ ساعتاین یعنی هر کاری که انجام می‌دهید باید ارزشش ۵۰۰ هزار تومان یا بیشتر باشد، یا منجر به مهارت یا ارتباطی شود که شما را به هدف درآمدیتان نزدیک کند.معرفی ابزار آنلاین: پروژه سنجحالا قرار نیست هر بار ماشین‌حساب بردارید و حساب‌وکتاب کنید!برای ساده‌تر شدن کار، من یک ابزار آنلاین به اسم پروژه‌سنج طراحی کردم. کافی است وارد سایت زیر بشین، نرخ پایه ساعتی و ضریب‌های پروژه (مثل پیچیدگی، تعداد نفرات و مدت زمان) را مشخص کنید، تا در چند ثانیه هزینه کل پروژه برایتان محاسبه شوداین ابزار کاملاً رایگان و ساده است و کمک می‌کنه بتونید پیشنهادهای دقیق‌تر و منطقی‌تری به کارفرما ارائه بدین. البته که هیچ فرمول یا ابزاری جای تجربه و شناخت واقعی شما از پروژه رو نمی‌گیره، اما پروژه‌سنج می‌تونه یک دستیار سریع و کاربردی برای شما باشه.</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Sat, 18 Oct 2025 14:14:56 +0330</pubDate></item><item><title>چطور برنامه‌ریزی و اهداف امسال رو عملی کنیم؟!</title><link>https://virgool.ir/@esmaeilbfd/چطور-برنامه-ریزی-و-اهداف-امسال-رو-عملی-کنیم-rhfwi5pzsksq</link><description>برنامه ریزی و هدف‌گذاری موفقبا شروع سال جدید اغلب افراد اهدافشون رو بازبینی می‌کنن و تلاش میکنن با ابزارهای مختلفی به شکل بهتر و بهینه‌تری در سال جدید به اون اهداف برسند.خودمم سبک‌های مختلفی رو امتحان کردم ولی هیچ کدوم بهره‌وری کافی رو نداشته و بعد از مدتی رها شده تا اینکه اخیرا با روشی آشنا شدم که میخوام با شما به اشترک بذارم.مهمترین ضعف روش‌هایی که قبلا تست کردم پیچیدگی و سخت بودن برنامه ریزی و پیگیریشون بوده مثلا برنامه ریزی به روش بولت ژورنال نیاز به حوصله و وقت زیادی داره و نوشتن تک تک اهداف و تسک‌ها و ثبت و گزارش نویسی کار رو سخت می‌کنه و همین سختی باعث میشه بعد از مدتی قیدش رو بزنید و رها بشه.خب این روش چطوریه؟ با ایجاد یک عادت و روتین در سبک زندگی از طریق تکرار و انجام مستمر اون کار.اهمیت تکرار و استمرار در انجام یک کار بر کسی پوشیده نیست و در کتب متعددی مثل اثر مرکب و یا عادت‌های اتمی (Atomic Habbits) هم بر همین مسئله تاکید شده و چکیده ایده‌شون همینه، &#34;تغییرات کوچک، تفاوت‌های بزرگ را میسازند&#34;.اگه هدفت اینه زبان یادبگیری و یکسال روزانه نیم ساعت زبان بخونی احتمال اینکه نتیجه نگیری صفره! در مقابل کسی که عشقی یه کاری رو میکنه ۲ روز انجام میده و ۱۰ روز انجام نمیده شانس کمی داره بتونه در اون کار موفق بشه، پس اینکه چه کاری باید انجام بدیم مهم نیست، کارایی که انجام میدیم مهمه و باید بدونیم دقیقا چه کارهایی داریم انجام میدیم اما از اونجایی که مغز ما فراموشکاره حتی به سختی میتونیم عملکرد هفته گذشته خودمونم رو به یاد بیاریم پس لزوم داشتن یک ابزار کارآمد ضروریه.برای اینکه این امر محقق بشه لازمه که کارهایی که در طول هفته، ماه و سال انجام می‌دیم رو ثبت کنیم اما نباید این فرآیند سخت و پیچیده باشه چون باعث میشه از خیرش بگذریم.خب کاری که باید کنیم تهیه یک دفتر یا پلنر هست و هر صفحه از اون رو به یک ماه اختصاص می‌دیمستون اول رو به روزهای ماه اختصاص می‌دیم و ردیف اول اهدافمون رو می‌نویسیم.در پایان هر روز بررسی می‌کنیم که آیا اون کار رو انجام دادیم یا نه و مربع مقابلش رو هاشور می‌زنیم مثل تصویر زیر:جدول ماهانهمزیت این کار چیه؟۱- مغز فراموشکار: همونطور که اشاره شد مغز ما به شدت فراموشکاره و خیلی زود یادمون میره که چه کارهایی رو انجام دادیم. به این شکل، توی طول هفته و ماه میتونیم ببینیم که چقدر به اهدافمون پایبند بودیم و چقدر تلاش کردیم و آیا کارهایی که باید انجام میدادیم رو انجام دادیم و چندبار انجام دادیم.۲- پاداش مغز : مزیت دوم هم باز برمی‌گرده به مغزمون! پر کردن این مربع‌ها شبیه پاداش برای مغز عمل می‌کنه و بعد از مدتی تلاش می‌کنیم بیشترین تعداد خونه رو پر کنیم و به این شکل با گیمیفیکشن و ترشح دوپامین بیشتر، مغز ما را ودار می‌کنه بیشتر به اهدافمون نزدیک بشیم.خب از اونجایی که من برنامه نویسم و دوست داشتم یک ابزار سریع و ساده برای مانیتورینگ و گزارش نویسی داشته باشم و کاغذ خطی خطی نکنم یه وب‌اپلیکیشن ساده با Vue نوشتم که خیلی ساده بتونم پیگیری رو انجام بدم 😁وب اپلیکیشن پیگیری اهدافاین وب‌اپلیکیشن رو صرفا برای استفاده شخصی نوشتم اما ممکنه عمومی بذارم که اگه کسی مشتاق بود استفاده کنه.🫡و در پایان با نقل قولی از کتاب atomic habits براتون آرزوی موفقیت و پیروزی دارم. 💪&#34;Some people spend their entire lives waiting for the time to be right to make an improvement.&#34; -James Clear</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Sat, 23 Mar 2024 14:54:21 +0330</pubDate></item><item><title>افزایش سرعت وبسایت با instant click</title><link>https://virgool.ir/@esmaeilbfd/افزایش-سرعت-وبسایت-با-instant-click-dmym98eaf51a</link><description>در حین گشت و گذار در اینترنت با یک لایبرری جاوا اسکریپت مواجه شدم که سرعت بارگذاری وبسایت و ناویگیشن در لینک های وبسایت را به شیوه جالبی افزایش می‌دهد.در صفحه معرفی instantclick.io نوشته:با وجود افزایش و گسترش پهنای باند، اینکه وب سایت ها خیلی سریعتر نمی شوند به این دلیل است که بزرگترین گلوگاه که در کاهش سرعت اثر دارد &#34;تاخیر&#34; است.به دلیل معماری و ساختار شبکه در حال حاضر تاخیر بخشی جدایی ناپذیر از اینترنت است این ابزار با یک ترفند این مشکل را حل کرده است.در حین بازدید یک وبسایت قبل از اینکه شما روی یک لینک آن کلیک کنید با موس روی لینک hover می‌کنید و بین این دو اکشن (هاور و کلیک) یک فاصله زمانی وجود داره که برای اینکه ببینید واقعا چقدر فاصله زمانی میتونه بین هاور و کلیک ما باشه یک صفحه تست هم داره که میتونید از اینجا تست کنید.تست هاور و کلیکبا استفاده از همین تاخیر و ajax میاد صفحه رو قبل از اینکه کلیک کنید بارگذاری میکنه و قبل از کلیک صفحه آماده نمایش میشه و با این ترفند و ایده جالب سرعت سایت رو به شکلی ارتقا میده.گیت هاب: https://github.com/dieulot/instantclick</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Wed, 16 Nov 2022 14:27:52 +0330</pubDate></item><item><title>کدنویسی استاندارد با PSR (قسمت1)</title><link>https://virgool.ir/pinoox/کدنویسی-استاندارد-با-psr-قسمت-1-gqk0wpdvsl4v</link><description>شاید تاکنون نام PSR را شنیده باشید، PSR مخفف عبارت PHP Standard Recommendation (استانداردهای پیشنهادی PHP) است.تا پیش از PSR استاندارد واحدی برای نوشتن کدهای PHP وجود نداشت، و هر توسعه دهنده ای بنابر سلیقه و تجربه شخصی و یا استانداردهای معرفی شده توسط شرکت های دیگر نظیر Zend Framework به شکل های پراکنده ای کد می‌نوشتند.سال 2009 گروهی از توسعه دهندگان به نمایندگی از پروژه های محبوب PHP دور هم گردآمدند تا گروهی به نام Framework Interoperability Group یا به اختصار FIG را تشکیل دهند تا یک اصول مشترک برای جامعه توسعه دهندگان PHP ایجاد کنند. استانداردهای مورد توافق و تایید این گروه در وبسایت رسمی آنها به نشانی php-fig.org قابل دسترس است. اگر توسعه دهنده PHP هستید دانستن این قواعد از ضروریات توسعه یک پروژه استاندارد و اصولی است و باید به عنوان یک PHP Developer آن ها رابدانید.تا لحظه نگارش این مقاله 19 استاندارد توسط گروه FIG تعیین شده که از 0 تا 18 نامگذاری شده است، در بخش اول این مقاله به 3 استاندارد PSR-1, PSR-2, PSR-3 می‌پردازیم.استاندارد PSR-0 که مربوط به autoloading است منسوخ شده و قواعد جدید آن در PSR-4 بروزرسانی شده است بنابراین از این بخش عبور خواهیم کرد.1- استانداردهای پایه کدنویسی: PSR-1اولین استاندارد رعایت اصول اولیه و ابتدایی نحوه نوشتن کدهاست که به طور مختصر به شرح زیر است:فایل‌ها باید با تگ‌های  =?&gt;  یا php?&gt; شروع شوند.فایل‌ها باید از نوع UTF-8 و بدون BOM باشند.فایل‌ها یا باید معرف سیمبول‌ها باشند (کلاس، متغیر، فانکشن و..) یا از نوع side-effect (چاپ اطلاعات، اعمال تنظیمات ini و…) باشند و نباید همزمان هردو کار را انجام دهند.کلاس‌ها و namespace ها باید از استاندارد autoloading که در PSR-4 مشخص شده پیروی کنند.نام گذاری کلاس‌ها باید به شکل StudlyCaps باشند.ثابت‌ها باید به شکل uppercase و با خط آندرلاین (CONST_VAR) از هم جداشوند.متدها باید به شکل camelCase نام گذاری شوند.2- استایل و ظاهر کدنویسی: PSR-2این استاندارد به نحوه نوشتن کد از لحاظ استایل و ظاهر می‌پردازد، در صورتیکه از محیط های کدنویسی نظیر Intellij Idea استفاده کنید اغلب این استانداردها به صورت خودکار اعمال می‌شوند.برای تورفتگی کدها از 4 اسپیس استفاده کنید و از تب استفاده نکنید!برای طول کد نوشته شده نباید محدودیتی الزام آور لحاظ شود! حد نرمال برای طول کد 120 کاراکتر و حد پیشنهادی 80 کاراکتر و یا کمتر است.باید بعد از دستور namespace و use یک خط خالی باشد.آکولاد یا براکت کلاس، در خط جدید و بعد از اعلان آن باز شود و در پایان بعد از بدنه کلاس در خط بعدی بسته شود.مواردی ظاهری از این دست به طور مفصل در این لینک توضیح داده شده است که می‌توانید مشاهده کنید.3- رابط لاگر(Logger Interface): PSR-3لاگ کردن یکی از فراگیرترین کارهایی است که در PHP با آن مواجه هستیم. ما از لاگ‌ها برای ردیابی خطا، ثبت رویدادهای مهم و اشکال‌زدایی مشکلات کدمان استفاده می‌کنیم. حتی اگر فریمورک و CMS توسعه می‌دهید که سیستم لاگ اختصاصی دارد توصیه می‌شود با این استاندارد سازگار باشد.پایه و اساس این استاندارد، پیاده سازی Logger interface است. این اینترفیس 8 متد دارد که هر کدام یک سطح از حساسیت خطا و پیام را گزارش می‌دهد همچنین متد log که به صورت عمومی برای هر نوع گزارشی قابل استفاده است.هشت سطح گزارش به شکل زیر است:سیستم غیر قابل استفاده است: Emergencyاقدام فوری لازم است: Alert خطای بحرانی: Criticalخطاهایی که نیاز به توجه فوری ندارند اما باید تحت نظر قرار گیرند: Errorرخدادهای غیرمعمول یا نامطلوب که خطا نیستند: Warningرویدادهای عادی اما مهم: Noticeرویدادهای جهت اطلاع رسانی: Infoبرای اهداف اشکال زدایی: Debugبرای شروع استفاده از آن کافی است از طریق composer و یا گیت هاب به نشانی Psr/Log GitHub اقدام به نصب این لایبرری کنید.امیدوارم تا اینجا یک دید نسبی به این قواعد پیدا کرده باشید اما برای تسلط کامل مطالعه سایت رسمی PSR به نشانی php-psr.org ضروری است، در مقالات بعدی به سایر PSRها می‌پردازیم.</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Sat, 11 Jun 2022 11:33:32 +0430</pubDate></item><item><title>با اپ پروفایل ساز پینوکس رزومه خودتو آنلاین کن!</title><link>https://virgool.ir/pinoox/pinoox-profile-app-isssrgs4am7z</link><description>اپ پروفایل ساز پینوکسداشتن یک رزومه زیبا و حرفه‌ای از نکات بسیار مهم در افزایش شانس یافتن یک فرصت شغلی است. اپ پروفایل ساز این امکان را برای شما فراهم می‌کند تا به شکل سریع و ساده یک پروفایل زیبا بسازید.از جمله مزیت هایی که یک پروفایل آنلاین به شما می‌دهد امکان جست و جو شدن پروفایل شما از طریق موتورهای جست و جو از جمله گوگل است.برای داشتن یک رزومه آنلاین تنها کافی است پینوکس را روی هاست شخصی خود نصب کنید و از طریق مارکت اپ پروفایل ساز را نصب کنید.با اپ های پینوکسی و نصب آنها روی هاست شخصی امکان ایجاد انواع سیستم های تحت وب مثل وبلاگ، فروشگاه و... را خواهید داشت برای کسب اطلاعات بیشتر در مورد پلتفرم اوپن سورس پینوکس به وبسایت pinoox.com مراجعه کنیدقالب زیبا و مینیمالثبت اطلاعات رزومهامکان تغییر و نصب انواع قالب هاامکانات و مزیت های اپ پروفایل ساز:1- نصب آسان و رایگان2- مشاهده آمار بازدید از پروفایل3- امکان انتخاب قالب و نمای پروفایل4- تنظیمات داینامیک5- ثبت آسان اطلاعات پروفایلبرای دیدن اطلاعات بیشتر و آموزش راه اندازی پروفایل ساز در چند دقیقه این لینک را ببینیداگر سوال و پرسشی دارید از طریق بخش پرسش و پاسخ بپرسید</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Sun, 28 Nov 2021 22:05:19 +0330</pubDate></item><item><title>تماشای لایو اینستاگرام به صورت تمام صفحه</title><link>https://virgool.ir/fboard/تماشای-لایو-اینستاگرام-به-صورت-تمام-صفحه-zcnsmou3evey</link><description>Instagram live plus chrome extensionاخیرا برنامه های لایو اینستاگرام رواج زیادی پیدا کرده و برنامه‌های رسمی و جدی هم از این بستر برای پخش برنامه‌هاشون استفاده می‌کنند، مثل مسابقات #فوتبال تا #کنسرت خواننده‌ها و نوازنده‌های بزرگ همچون کیهان کلهر.در اتفاقی که چند مدت پیش رخ داد صفحه رسمی AFC در اینستاگرام، از پخش زنده بازی پرسپولیس و اولسان هیوندای با گزارش عادل فردوسی‌پور خبر داد و موجب هجوم کاربران به این صفحه شد.اما اینستاگرام به دلیل پشتیبانی نکردن از پخش افقی و عدم امکان چرخش صفحه برای تماشا روی دسکتاپ مناسب نیست و کاربران با چنین مشکلاتی روبه‌رو شدند!!?پخش لایو اینستاگرام روی تلویزیون :)این #پلاگین ساده کروم که حدود 100 خط کد هست رو نوشتم تا این نوع لایوها رو راحت‌تر تماشا کرد، در ویدیو زیر مشکلی که حل میکنه رو میتونید ببینید https://www.aparat.com/v/UXizO از گیت‌هاب میتونید دانلود و نصب کنید   instagram_live_plus</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Wed, 10 Feb 2021 19:36:04 +0330</pubDate></item><item><title>در روز چند ساعت کدنویسی می کنید؟ با wakaTime محاسبه کنید!</title><link>https://virgool.ir/pinoox/در-روز-چند-ساعت-کدنویسی-می-کنید-با-wakatime-محاسبه-کنید-itq8nqovmse5</link><description>اگر نتوانید چیزی را اندازه گیری کنید، قادر به مدیریتِ آن نخواهید بود. (پیتر دراکر)پیتر دراکر که از بزرگترین نظریه پردازان مدیریت است، به درستی به اهمیت اندازه گیری اشاره می کند، به واقع اگر مثلث معروف BML: Build-Measure-Learn را بتوانیم به خوبی به کار بگیریم و بعد از هر تلاشی میزان فعالیتی که انجام داده ایم رو با دقت محاسبه کنیم و با آنالیز و یادگیری، تجربیات رو تبدیل به دانش کنیم، با تکرار این حلقه خواهیم توانست نقاط ضعف رو تشخیص بدهیم و به طبع اون امکان اصلاح و بهبود عملکردمون رو بدست میاریم.اگر برنامه نویس هستید و ساعت های زیادی رو در طول روز صرف کدنویسی می کنید قطعا براتون بسیار جذاب  و کاربردی خواهد بود که بدونید چقدر و به چه شکل در حال کار هستید، چند ساعت به شکل مفید در حال کدنویسی بودین یا چند ساعت در حال پرسه زدن در شبکه های اجتماعی و اتلاف زمان!ابزار wakatime دقیقا به همین منظور ایجاد شده، سرویس بسیار کاربردی و مفیدی که پلاگین های مختلفی برای تقریبا همه IDE ها و محیط های کدنویسی داره و با نصب پلاگینش می تونید آمار دقیقی و به صورت جزئی از میزان فعالیت روی هر پروژه بدست بیارید.داشبورد wakatimeیکی از امکانات بسیار خوب wakatime امکان تعریف اهداف (Goals) هست. میتونید اهدافی برای خودتون تعیین کنید مثلا روزانه 2 ساعت روی پروژه X کار کنید یا اینکه هفته ای 60 ساعت روی پروژه Y کار کنید و در پایان در نمودارهای مقایسه ای میزان فعالیت واقعی و میزان برآورده شدن اهداف رو ببینید.آمار بسیار دقیقی در اختیار شما میزاره، مثلا میتونید ببینید چه میزان php کد نوشتید یا چقدر html کار کردین، اهداف رو میتونید بر اساس زبان برنامه نویسی هم تعریف کنید.بیش از این توضیح لازم نیست کافیه همین الان امتحانش کنید?</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Sat, 11 Apr 2020 19:26:02 +0430</pubDate></item><item><title>معرفی Git Kraken، بهترین ابزار مدیریت پروژه ها</title><link>https://virgool.ir/pinoox/gitkraken-best-tool-for-managing-projects-usqigwzkiaii</link><description>برای اینکه به سادگی بتونید با Git کار کنید ابزارهای Git GUI مختلفی وجود داره مثل GitHub Desktop و  GitSmart  و ... اما یکی از بهترین ابزارهایی که تجربه کار باهاشون رو داشتم Git Kraken هست و بعد از استفاده از اون، کار با سایر ابزارها واقعا عذاب آور و ناخوشایند خواهد شد!جالبه بدونید Git Kraken محصول شرکت axosoft هست که بنیانگذارش حمید شجاعی از ایرانیان ساکن امریکاست.?گیت کراکن امکانات مختلفی در اختیار شما میزاره و به راحتی با shortcut های کیبرد و یا drag and drop میتونید با git کار کنید. از مهمترین قابلیت هاش:1- امکان کار با چند پروفایل به طور همزمان2- امکان اتصال به حساب کاربری Github، GitLab و ... 3- باز کردن چندین repo در تب های مختلف به طور همزمان 4- رابط گرافیکی فوق العاده ساده و کاربرپسند و انجام عملیات مختلف مثل merge تنها با drag &amp; drop 5- امکان ویرایش سورس کدها 6- دریافت خودکار آپدیتهای جدید در بازه های زمانی کوتاهمحیط کاربری git krakenمعمولا هر ازگاهی میبینید که با ناتفیکیشن خبر از ارائه قابلیتی جدید میده و به صورت خودکار امکاناتی به نرم افزار اضافه میشه، دریافت مستمر آپدیت های جدید و پشتیبانی فوق العاده این محصول چیزی است که بسیار تحسین برانگیز است.در کنار محیط فوق العاده ای که برای کار با git طراحی شده یک ابزار جدید هم برای مدیریت پروژه ها اخیرا بهش اضافه شده که باعث میشه سایر کلاینت ها رو واقعا به سطل زباله هدایت کنید!?مدیریت برد اسکرام با Glo Boardگلو برد ابزار مدیریت تسک هاست که ما برای مدیریت برد اسکرام ازش استفاده میکنیم. با اضافه کردن هم تیمی هاتون به برد در کنار Git Kraken به سادگی همه فعالیت های پروژه رو به صورت یکپارچه در یک محیط خواهید داشت، امکان استفاده از نسخه تحت وب، موبایل و دسکتاپ هم وجود داره. یکی از ویژگی های خوب Glo Board امکان تعریف synced board هست و با اتصالش به گیت هاب تمام issue هاتون رو به صورت خودکار وارد برد میشه و با تغییر روی آن به صورت خودکار روی گیت هاب هم اعمال میشه.امکان تعریف milestone، تگ گذاری، اختصاص کاربر به هر تسک، و گروه بندی برد ها از جمله ویژگی های خوب Glo Board هست. برای دیدن همه امکانات glo صفحه معرفی رو از اینجا ببینید: معرفی Glo Boardمحیط کاربری glo boardدر انتها توصیه میکنم حتما یک بار هم که شده Git Kraken رو نصب کنید و امتحان کنید مطمئنا خوشتون خواهد اومد.?</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Fri, 21 Feb 2020 14:18:42 +0330</pubDate></item><item><title>جنون نوگرایی و کمال طلبی</title><link>https://virgool.ir/@esmaeilbfd/جنون-نوگرایی-و-کمال-طلبی-t5rdhutgukra</link><description>طراحی شده با موس و نرم افزار paint ویندوزکمال طلبی زمانی جنبه منفی پیدا میکنه که تناسبی میان هزینه ها و دستاوردها وجود نداشته باشه، اگر نتونیم کنترل کافی روی این جنبه شخصیتی داشته باشیم متحمل ضرر و زیان خواهیم شد و مهم ترین ضرر از دست رفتن آرامش درونی است.شرکت های فناوری با بزرگ نمایی پیشرفت های جزئی و ترغیب ما به استفاده از آخرین مدل محصولاتشان جنون نوگرایی، میل به کمال، بیشترین و بهترین را در میان ما ترویج کرده اند به طوری که اگر آخرین مدل محصولات اپل ، سامسونگ و ... رو نداشته باشیم گویی از قافله پیشرفت فناوری عقب افتاده ایم!!استرس ناشی از این عقب افتادگی و احساس نیاز به آخرین و بروزترین محصولات آرامش ما را نابود می کند.این جنون در ابعاد مختلف زندگی ما میتونه نمود پیدا کنه از جمله تصمیمات کاری، شخصی و کارهای روتین روزمره و قادر نیستیم از امکانات موجود و قابلیت های اطرافمون به شکل بهینه استفاده کنیم.گاهی دوستانی رو میبینم که در نرم افزارهای مورد استفاده هم چنین خطایی رو دارند، مثلا برای یک روتوش ساده عکس باید حتما از آخرین ورژن فتوشاپ استفاده کنند! یا خیلی از اموری که با اندکی خلاقیت و تلاش میشه انجام داد رو با بهانه هایی که ناشی از کمال طلبی است انجام نمیدهند.خود من هم گاهی چنین خطایی رو مرتکب می شدم و برای عبور از این جنبه منفی شخصیتی تصمیم گرفتم یک نقاشی رو در نرم افزار paint با موس بکشم، در ظاهر کاری دشوار و ناممکن به نظر می رسید اما خروجی نهایی رو که نتیجه صرف یکی دو ساعت زمان هست می تونید ببینید.این نقاشی صرفا با موس و در نرم افزار نقاشی (paint) ویندوز 10 انجام شد.نقاشی با موس در paint ویندوزما برای زندگی همراه با آرامش و بهره وری بهتر باید نوع نگاهمون رو به اطراف تغییر بدیم، چه بسا ابزارها و قابلیت های محیطی فراوانی در دسترس ماست اما میل به بیشترین و بهترین ما رو از پتانسیل های بلقوه دور و برمون غافل کرده است.</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Fri, 28 Jun 2019 13:52:52 +0430</pubDate></item><item><title>ترفندی ساده و مختصر در Adobe XD</title><link>https://virgool.ir/@esmaeilbfd/ترفندی-ساده-و-مختصر-در-adobe-xd-odjgd7olwran</link><description>برای اینکه یک carousel و یا افکت اسلادینگ رو بتونید در adobe xd نمایش بدید کار زیادی لازم نیاز نیست انجام بدین در آپدیتی که اکتبر 2018 ادوبی ارائه کرد در ورژن 13 نرم افزار قابلیت auto-animate به adobe xd اضافه شده که برای چنین مواردی میتونید استفاده کنید.برای این منظور دو لایه شبیه به هم بسازید و لایه دوم را در راستای محور X مقداری جابجا کنید و بعد از طریق تب prototype لایه ها را با انتخاب انیمیشن از نوع drag به هم متصل کنید.جابجایی لایه دوم در راستای محور Xانتخاب trigger از نوع dragبرای اینکه روش انجام کار رو ببینید، ویدیو کوتاه زیر رو از طریق صفحه اینستاگرامم تماشا کنید: https://www.instagram.com/p/By97VWmFC5o/ </description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Thu, 27 Jun 2019 23:03:13 +0430</pubDate></item><item><title>آینده وب اپلیکیشن ها با PWA</title><link>https://virgool.ir/JavaScript8/آینده-وب-اپلیکیشن-ها-با-pwa-wqzotyzeuebs</link><description>ایجاد نرم افزارهای تحت وبی که در حالت آفلاین هم امکان استفاده از آن میسر است و فارغ از اینکه دستگاهی که کاربر از آن استفاده می کند چیست تجربه ای شبیه نرم افزارهای native را برای او فراهم می کند.این ایده اصلی توسعه رویکرد Progressive Web Application یا به اختصار PWA است. همانطور که اشاره شد PWA یا اپلیکیشن های پیش رونده تنها یک رویکرد و روش هست و نه زبان برنامه نویسی یا فریمورک.اصطلاح progressive web application اولین بار توسط فرانس بری من و الکس راسل از مهندسان گوگل سال 2015 مطرح شد.این مدل از نرم افزار ها با استفاده از ویژگی های جدید مرورگرها مثل استفاده آفلاین و دسترسی به منابع سخت افزاری مثل دوربین ، ارسال ناتیفیکیشن تجربه ای مانند یک اپلیکیشن native را برای کاربر ایجاد می کنند و به این ترتیب دست توسعه دهندگان را در پیاده سازی سریع تر وب اپلیکیشن ها و سرویس ها باز می کند.بسیاری از فریمورک های مطرح جاوا اسکریپتی مثل Vue ، React ، Angular نیز به شکل ساده و راحتی امکان استفاده از PWA را فراهم کرده اند.بیایید نگاهی به ویژگی های Progressive Web Application  ها داشته باشیم:1-  به تدریج و کم کم (progressive)در شکل سنتی وب اپلیکیشن ها ، مرورگر تمام محتوای صفحه را یکجا دانلود و رندر می کند ، اما در PWA محتوا متناسب با تعاملی که کاربر با آن دارد ، به تدریج دانلود و cache می شود و این ویژگی اثر قابل توجه ای در افزایش سرعت و پرفرومنس دارد و نامگذاری این تکنولوژی به progressive هم به همین دلیل بوده است.2-استقلال از شبکهیکی از دغدغه هایی که همیشه همراه وب اپلیکیشن ها بوده و هست مشکلاتی مثل کندی ، قطعی و اختلالات زیاد در کانکشن است که بعضا در سناریو ها و پروژه هایی باید عطای یک اپ آنلاین را به لقای ببخشیم! اما قابلیت دسترسی و استفاده آفلاین راه کار مناسبی برای این حل این مشکلات هست.این قابلیت از طریق service workers که کتابخانه ای تحت جاوا اسکریپت هست و با اجرا شدن در یک thread مستقل در پس زمینه مرورگر و ذخیره سازی اطلاعات امکان استفاده آفلاین از نرم افزار را فراهم می کند.3-واکنشگرا، دسترس پذیرمهم نیست دستگاهی که کاربر از آن استفاده می کند چه باشد، لپتاپ، موبایل، ساعت هوشمند و... در همه دستگاه ها امکان بهره مندی از نرم افزار مهیاست و این نکته بسیار مهمی در دسترس پذیری نرم افزار در کنار کاهش هزینه های توسعه است.یکی از مشکلاتی که در سال های اخیر به دغدغه توسعه دهندگان برای ایجاد نسخه های native اضافه شده ارائه نرم افزار روی پلتفرم های مختلف اندروید ، IOS و دستگاه های ریز و درشت از ساعت هوشمند تا موبایل و تبلت و تلویزیون و .... که روز به روز هم به تعداد و تنوع این دستگاه ها اضافه می شود و پشتیبانی از همه این ها باعث افزایش هزینه های تولید، افزایش زمان توسعه و هزینه های نگهداری می شود، اما در رویکرد جدید بدون اینکه تغییر زیادی نیاز باشد یکبار می نویسید و روی همه پلتفرم ها اجرا می کنید.وب اپلیکیشن ها چیزی بیش از یک سری فایل HTML ، CSS ، JS و Media نیستند. وقتی درخواستی برای باز شدن یک وبسایت از طریق مروگر ارسال می کنید دیتا از طریق مرورگر دانلود می شود و بعد از رندر شدن نمایش داده می شود اما اگر اینترنت قطع باشد با خطای عدم دسترسی به شبکه مواجه خواهید شد و امکان استفاده از آن را نخواهید داشت.در PWA از طریق یک اسکریپت Javascript به نام service worker دیتا بعد از دریافت و رندر شدن cache می شود و حتی در صورت قطعی اینترنت باز هم امکان کار با وب اپلیکیشن را خواهید داشت. حتی در پس زمینه شما event هایی مثل ناتیفیکیشن ها را دریافت خواهید کرد.اگر دیجی کالا و اینستاگرام را با موبایل باز کنید نسخه PWA را خواهید دید و از طریق Add to Home Screen با اضافه کردن به لیست اپلیکیشن های گوشی امکان استفاده سریع از آنها را خواهید شد.وبسایت زیر نمونه ای از یک PWA هست که فقط در حالت آفلاین کار می کند برای دیدن این دمو باید ارتباط اینترنتی خود را قطع کنید. https://whentheinternetisdown.com</description><category>اسماعیل بحرانی فرد</category><author>اسماعیل بحرانی فرد</author><pubDate>Thu, 27 Jun 2019 13:11:10 +0430</pubDate></item></channel></rss>