Panic Dev – Telegram
Panic Dev
1.11K subscribers
123 photos
29 videos
2 files
132 links
Panic Dev; your Panic's solution 🔥

🍿 Telegram
🔰 t.me/PanicDev

🍿 Laravel Community
🔰 t.me/LaravelGroups

😇 Contact Me
🔰 t.me/MentionHex

Thanks for sharing us 💛
Download Telegram
#شاید_برای_شما_هم_اتفاق_بیفتد .

برای اینکه یک سری دیتا رو به فرانت اند برگردونم .
باید سه تا API از سرویس های مختلف call میکردم تا اون آرایه ای که مد نظرم هست رو بسازم .
در حالت عادی باید به ترتیب API ها کال میشد تا بتونم آرایه رو بسازم . که باعث میشد ریسپانس تایم چیزی بین ۵ تا ۱۰ ثانیه طول بکشه .

ولی با کلاس جدیدی که از لاراول ۱۱ معرفی کرده به اسم Concurrency سرویس ها را همزمان کال میکنم . که باعث شد ریسپانس تایمم بشه چیزی بین ۱.۵ تا ۲ ثانیه .😊

@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥5
Media is too big
VIEW IN TELEGRAM
اموزش استفاده
🔥4
🚀 ترکیب Laravel + Go: توسعه سریع، عملکرد بالا!
اگر توسعه با Laravel رو دوست داری ولی دنبال عملکرد بهتر برای کارهای سنگین هستی، یه راه عالی اینه که از معماری رویدادمحور (EDA) استفاده کنی:

فریم ورک Laravel برای ارسال Job به صف
زبان Go برای پردازش سریع با goroutineها

مثلاً:

با Laravel یه تسک مثل پردازش تصویر رو dispatch می‌کنه.

بعد Go اون رو از Redis می‌خونه و خیلی سریع اجرا می‌کنه.

اینجوری:

سیستم سبک می‌مونه.

کاربر منتظر نمی‌مونه.

با چند تا Go worker، پردازش‌هاتو راحت مقیاس‌پذیر می‌کنی.

👀 فقط حواست باشه که Go باید فقط داده موردنیاز Job رو بخونه (بدون متادیتای اضافه‌ی Laravel) و لاگ و مانیتورینگ رو خوب مدیریت کنی.

📌 اگه پردازش‌ سنگین مثل ایمیل انبوه، تصویر، یا داده‌های تحلیلی داری، این معماری معرکه‌ست!

منبع 👇
🔗 لینک مقاله

#Laravel #GoLang #EDA #معماری_رویدادمحور #توسعه_بک_اند #برنامه_نویسی #مقیاس_پذیری
👍16🔥4🌚2❤‍🔥1
🛡 مدیریت درخواست‌های همزمان در Laravel با Session Blocking

در اپلیکیشن‌های پرترافیک مثل پرداخت، مدیریت موجودی یا رزرو، درخواست‌های همزمان می‌تونن باعث تداخل داده و باگ‌های جدی بشن. لاراول با یه قابلیت ساده ولی قدرتمند به اسم Session Blocking این مشکل رو حل کرده.

📌 چطوری کار می‌کنه؟
در Session Blocking با استفاده از atomic lock ها، فقط به یک درخواست در هر زمان اجازه می‌ده که اجرا بشه و بقیه باید صبر کنن یا تایم‌اوت می‌شن.

برای فعال‌سازی:
- از cache driverهایی مثل Redis استفاده کن.
- از session driver غیر از cookie مثل Redis یا database استفاده کن.
- در روت‌ها از متد ->block() استفاده کن:

Route::post('/products/update-stock', [StockController::class, 'updateStock'])->block(5, 10);

عدد اول: مدت زمان قفل (ثانیه)
عدد دوم: مدت زمانی که درخواست منتظر می‌مونه تا قفل آزاد شه

———————————————————
⚠️ ریسک‌ها و محدودیت‌ها
با وجود قدرت زیاد session blocking، باید حواست به محدودیت‌هاش هم باشه:

- خطر Deadlock:
تنظیم نادرست زمان قفل‌ها مخصوصاً در فرایندهای پیچیده می‌تونه باعث بن‌بست بشه.

- افزایش بار سیستم: شکست‌های مکرر در قفل‌گذاری می‌توانند باعث افزایش سربار سیستم بشود. استفاده از مکانیزم‌های retry مؤثر توصیه می‌شه.

- وابستگی به کش:
عملکرد این قابلیت به شدت وابسته به driver کش هست. پس حتماً باید Redis یا Memcached قوی و پایدار داشته باشی.

——————————————————-
🛠 جایگزین‌های session blocking
اگه احساس می‌کنی این راهکار مناسب پروژه‌ت نیست، گزینه‌های دیگه‌ای هم هست:

- گزینه Optimistic Locking:
با استفاده از نسخه‌گذاری (versioning) تداخل در بروزرسانی‌ها رو تشخیص بده.

- صف‌های توزیع‌شده (Distributed Queues): عملیات رو به سیستم صف مثل RabbitMQ یا AWS SQS منتقل کن تا غیربلادرنگ (asynchronous) انجام بشه.

- محدودیت‌های دیتابیس: با تعریف constraint‌های خاص توی دیتابیس، از درج داده‌های تکراری جلوگیری کن.


🎯 نتیجه: Session Blocking ابزار فوق‌العاده‌ای برای مدیریت درخواست‌های حساسه، ولی باید با دقت و مانیتورینگ درست استفاده بشه.

منبع 👇
🔗لینک مقاله

#Laravel #PHP #ConcurrentRequests #SessionBlocking #توسعه_بک_اند #مدیریت_موجودی #رزرو_آنلاین #پرداخت_امن #برنامه_نویسی

@panicdev
❤‍🔥6🔥2👍1
💡 کلاس WeakMap در PHP: قهرمان خاموش برای مدیریت حافظه
در زمان توسعه بخش‌های پرفورمنس‌محور یک اپلیکیشن، متوجه شدم که WeakMap می‌تونه یه قهرمان خاموش باشه که زمانی که بهش نیاز داری، به دادت می‌رسه.

🔍 کلاس WeakMap چیست؟
در ظاهر، WeakMap مثل یه store کلید-مقدار عادی به نظر میاد. اما تفاوت اصلی اینجاست که WeakMap کلیدها رو به صورت weak reference نگه می‌داره، یعنی وقتی شی از حافظه پاک میشه، WeakMap به‌طور خودکار اون ورودی رو حذف می‌کنه. این ویژگی باعث میشه که نیازی به پاک‌سازی دستی داده‌ها نباشه و هیچ‌گونه حافظه‌ای به طور نادرست مصرف نشه.

📌 چرا این ویژگی اهمیت داره؟
فرض کنید در حال ساخت یک مدیریت مستندات یا مدیریت تصاویر هستید. هر شی (مثل یک فایل یا تصویر) ممکنه متادیتای پرهزینه‌ای برای محاسبه داشته باشه. می‌خواهید این متادیتا رو در هنگام استفاده از شی کش کنید ولی نیازی به پاک‌سازی دستی و نگرانی از نشت حافظه ندارید.

🛠 نمونه کد:
در کدی که در تصویر مشاهده میکنید . ما از WeakMap برای کش کردن متادیتای اشیاء استفاده می‌کنیم


🚀 نتیجه‌گیری

در نتیجه WeakMap برای مواردی مثل مدیریت کش متادیتا یا پردازش‌های پرهزینه بسیار مفیده، چرا که از نشت حافظه جلوگیری می‌کنه و با خودکار حذف کردن ورودی‌ها از حافظه، کار رو برای برنامه‌نویس راحت‌تر می‌کنه.

🔗 منبع: مقاله

#PHP #MemoryManagement #WeakMap #Cashing #Development #Backend #OptimizedCode


@panicdev
👍11🔥2
🚀 مدیریت Migrationها در لاراول با shouldRun()

وقتی از feature flag‌ها یا استراتژی rollout مرحله‌ای استفاده می‌کنید، ممکنه بخواهید بعضی migrationها فقط در صورتی اجرا بشن که یک ویژگی خاص فعال باشه. قبلاً این کار نیاز به ترفندهای دستی یا مدیریت سخت migrationها داشت.

حالا لاراول با معرفی متد جدید shouldRun() این مشکل رو حل کرده. این متد به هر migration اجازه می‌ده خودش تصمیم بگیره که اجرا بشه یا نه.

🧠‌ این migration فقط زمانی اجرا می‌شه که feature مربوطه فعال باشه. اگه فعال نباشه، بدون خطا رد میشه و هیچ رکوردی توی جدول migrations ثبت نمی‌شه.


نکات مهم:
یک
نکته این که shouldRun() هم در migrate و هم در rollback در نظر گرفته می‌شه، پس رفتار migration در هر دو مسیر هماهنگه.

دیگه نیاز نیست migrationهایی که فقط در محیط خاص یا برای tenant خاص هستن رو دستی مدیریت کنید.

ایده‌آل برای اپلیکیشن‌های multi-tenant، ویژگی‌های قابل غیرفعال/فعال‌سازی و استقرار مرحله‌ای (progressive deployment).


#Laravel #Migration #FeatureFlags #shouldRun #SaaS #BackendTips #ProgressiveDeployment

@panicdev
👍8
🧠 ارزیابی سطح شغلی

۱. با توجه به موقعیت شغلی فعلی‌تون، فکر می‌کنید در چه سطحی قرار دارید؟
Anonymous Poll
29%
🟢 جونیور (Junior)
44%
🟡 میدلول (Mid-Level)
10%
🔵 سنیور (Senior)
6%
🟣 فوق سنیور (Lead/Principal)
11%
⚪️ هنوز لولی برای سطح من تعریف نشده 🙂
Panic Dev
🧠 ارزیابی سطح شغلی

۱. با توجه به موقعیت شغلی فعلی‌تون، فکر می‌کنید در چه سطحی قرار دارید؟
۲. چرا فکر می‌کنید در این سطح قرار دارید؟

۳. به نظرتون برای رسیدن به لول بعدی، بیشتر به کدوم مورد نیاز دارید؟

افزایش سابقه کار

افزایش مهارت‌های فنی

بهبود مهارت‌های مدیریتی و رهبری تیم

تجربه در پروژه‌های بزرگ‌تر و چالش‌برانگیزتر

یادگیری مهارت‌های نرم (ارتباط، مذاکره، تفکر سیستمی و...)

گرفتن بازخورد حرفه‌ای و منتورینگ
Panic Dev
۲. چرا فکر می‌کنید در این سطح قرار دارید؟ ۳. به نظرتون برای رسیدن به لول بعدی، بیشتر به کدوم مورد نیاز دارید؟ افزایش سابقه کار افزایش مهارت‌های فنی بهبود مهارت‌های مدیریتی و رهبری تیم تجربه در پروژه‌های بزرگ‌تر و چالش‌برانگیزتر یادگیری مهارت‌های…
یک مقاله ای داشتم میخوندم . نسبتا طولانی ولی ارزش خوندن داشت . من دوست داشتم ،‌😊

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


🧠 تفاوت اصلی بین برنامه‌نویس جونیور و سینیور

این مقاله گفت‌وگویی درونی بین «منِ جونیور» و «منِ سینیور» و تلاش می‌کنه به یک نکته عمیق اشاره کنه:

تفاوت اصلی بین برنامه‌نویس سینیور و جونیور توی طرز فکر، نه تعداد سال‌های تجربه.

🎯 خلاصه مهم‌ترین تفاوت‌های ذهنیت سینیورها:

۱. به‌جای فقط نوشتن کد، می‌پرسن: «آیا اصلاً لازمه اینو بنویسم؟»
جونیورها بلافاصله سراغ کدنویسی می‌رن.

سینیورها اول تحلیل می‌کنن، سؤال می‌پرسن و دید کلی پیدا می‌کنن.


۲. فقط باگ رو رفع نمی‌کنن، علت اصلی (Root Cause) رو پیدا می‌کنن.
سینیورها روی پیشگیری تمرکز دارن، نه فقط درمان.


۳. فقط کد درست نمی‌نویسن، کد قابل‌نگهداری و تمیز می‌نویسن.

به "قانون پیشاهنگ" پایبندن: «کد رو بهتر از قبل بذار.»


۴. به‌جای «من می‌تونم اینو حل کنم»، می‌پرسن: «چطور تیم می‌تونه اینو حل کنه؟»

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


۵. دنبال یادگیری تکنولوژی جدید نیستن، یاد گرفتنِ «روش یادگیری» رو بلدن.


روی اصول پایه تمرکز دارن، نه هر ترند جدید.


۶. منتظر اجازه نمی‌مونن، مسئولیت می‌پذیرن و اقدام می‌کنن.

طرز فکر «مالکیت کامل» دارن.


۷. سریع وارد کدنویسی نمی‌شن، اول تحلیل و طراحی می‌کنن.

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


۸. فقط تسک done نمیکنند ، اثرش روی کاربر و کسب‌وکار رو می‌سنجن.

هر تسک رو به عنوان فرصتی برای ایجاد ارزش می‌بینن.


۹. منتظر خراب شدن سیستم نمی‌مونن، از قبل مشکلات رو پیش‌بینی می‌کنن.

طراحی مقاوم، مانیتورینگ و تست خودکار بخش اصلی کارشونه

.

۱۰. کارهای تکراری رو دستی انجام نمی‌دن، اتومات می‌کنن و مستند می‌نویسن.

ابزار می‌سازن، اسناد تهیه می‌کنن، و زمان تیم رو حفظ می‌کنن.


📌 جمع‌بندی:

برنامه‌نویس سینیور کسیه که فقط کد نمی‌نویسه، بلکه دید استراتژیک داره، تیم رو رشد می‌ده، و برای آینده تصمیم می‌گیره.
هرکدوم از این تغییرات ذهنی، شما رو یک قدم به سینیور شدن نزدیک‌تر می‌کنه.

📖 اگر علاقه‌مند به خوندن متن کامل این مقاله هستید، پیشنهاد می‌کنم حتماً بخونید:

🔗 لینک مقاله کامل


@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
50👍19
یه سرویس Open-Source و سبک برای کپچا

🔗 https://capjs.js.org
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Panic Dev
یه سرویس Open-Source و سبک برای کپچا 🔗 https://capjs.js.org
اینم یه مدلشه 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣33👍1🔥1🕊1
تمام تسک‌های ورژن 4 فیلامنت done شدن

انتظار میره خیلی زود (شاید طی چند روز آینده) نسخه جدید فیلامنت ریلیز و قابل استفاده بشه 🔥

🔗 https://github.com/filamentphp/filament/milestone/3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍2
میخوایم کتاب
تست مامان

هدیه بدیم برای ۵ نفر 😊

به ۵ نفر اولی که اعلام حضور کنه

⚠️لطفا اگر میدونید موضوعش چی هست و علاقه به مطالعه دارید اعلام کنید .

(تمام شد)
Please open Telegram to view this post
VIEW IN TELEGRAM
ایشون آقای Deven هستن .
و این صفحه گیت هاب ایشون

همانجور که میبینید خودشون رو lead engineer و سنیور میدونند .
از صفحه گیت هاب و رزومه هم مشخصه که
استک و tools نمونده که شخم نزده باشه .

بعد ایشون یه مقاله نوشته به این صورت

Why I Regret Choosing Laravel for My Small-Scale High-Performance App

شما مقایسه رو ببینید تورو خدا .
یه سیستم SPA رو با چی و چه سطحی مقایسه میکنه .

بعد از معایب فیلامنت فرمودن

Becomes limiting for complex UI or logic
What might be a 5-min job in React can take hours in Filament



مثل آقا Deven نباشید .
🤣8🥱5👍2👎2
🔄 ردگیری وضعیت و پیشرفت صف‌ها در Laravel

اگه توی پروژه‌هات با Laravel کار می‌کنی، احتمال زیاد با صف‌ها (Queues) سروکار داشتی. صف‌ها کمک می‌کنن کارهای سنگین رو ببری پشت صحنه تا تجربه‌ی کاربر بهتر بشه.
اما فقط فرستادن job به صف کافی نیست — خیلی وقت‌ها لازمه بدونی اون job دقیقاً در چه مرحله‌ایه یا اینکه اصلاً تموم شده یا نه.

🧠 چرا ردگیری job مهمه؟

وقتی یه job طولانی مثل وارد کردن هزاران رکورد، پردازش ویدیو یا ارسال ایمیل‌های انبوه اجرا می‌شه، اگه کاربر هیچ اطلاعاتی از پیشرفت نداشته باشه، حس می‌کنه برنامه هنگ کرده یا مشکلی هست.
ردگیری پیشرفت job هم به کاربر اطمینان می‌ده، هم به تیم توسعه برای رفع سریع‌تر مشکلات کمک می‌کنه.

📦برای این کار Laravel Job Status پکیج کاربردی هست.
با نصب این پکیج، می‌تونی خیلی راحت وضعیت و درصد پیشرفت هر job رو ذخیره و مانیتور کنی.

🛠 مراحل استفاده:

نصب پکیج:
composer require imtigger/laravel-job-status


داخل کلاس job، از trait مخصوص استفاده کن:


use Imtigger\LaravelJobStatus\Trackable;

$this->prepareStatus(); // in __construct
$this->setProgressMax(10);
$this->setProgressNow($i);
$this->setOutput(['message' => 'Job completed']);


وقتی job رو dispatch می‌کنی، ID وضعیت رو ذخیره کن:



$job = new ExampleJob([]);
$this->dispatch($job);
$jobStatusId = $job->getJobStatusId();


وضعیت رو هر موقع خواستی از دیتابیس بخون:




$jobStatus = JobStatus::find($jobStatusId);
echo $jobStatus->progress_now . "/" . $jobStatus->progress_max;
echo $jobStatus->status; // مثل queued، executing، finished، failed


📌 نکته مهم:
اگه از YourJob::dispatch() استفاده کنی، دیگه نمی‌تونی job object رو بگیری! پس دستی job رو بساز و dispatch کن.


لینک مقاله

لینک گیتهاب

@panicdev
👍9❤‍🔥1