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
#نکات دیتابیسی

شما یه جدول درست میکنی که تراکنش های هر کاربر رو ذخیره میکنه
مثلا میگه کاربر شماره X امده ۲۰ دلار در تاریخ فلان تراکنش انجام داده .

بعد اینو به زیبایی با یک میلیون رکورد پر میکنید . به وسیله PROCEDURE عزیز .

حالا نکته اینه که میخوایم ببینیم یه کوئری مثل این چقدر زمان لازم داره .
تا به ما بگه که هر کاربر در مجموع چقدر تراکنش داشته
به صورت یک گزارش .

 
SELECT user_id, SUM(amount) AS total_amount
FROM transactions
GROUP BY user_id;


خوب این کوئری ظاهرا ۱۵۰ ثانیه زمان لازم داره


چیکار کنیم ۱۵۰ ثانیه بشه ۲ ثانیه

@panicdev
گفتند که
اگر به جدول یه index برای user_id در نظر بگیرید

از ۱۵۰ ثانیه میشه ۸۰ ثانیه .

خوبست ،‌ دیگه چیکار کنیم ؟

@panicdev
گفتند که بیایم بر اساس transaction_date
جدول و پارتیشن بندی کنیم .

اینجوری سرعت کوئری از ۸۰ میرسه به ۲۰ .

من خودم روی صحت این قضیه شک دارم . چون که برای کوئری کلی مثل این ( گزارش تمام کاربر ها در تمام سال هارو بخوایم بگیریم ). نباید تاثیر خاصی داشته باشه .

ولی در عوض اگه بگیم گزارش همه کاربر هارو برای سال ۲۰۲۱ بده . خیلی باید تاثیر گذار و سریع باشه .


نظر شما چیست ؟

@panicdev
خوبه ،‌ دوستان اشارات خوبی کردن ، مچکریم

بعله ،‌ میریم سراغ Materialized

اینجا میگه یه جدول جدا میکنی روی
user_transaction_sums

بعد یه cron درست میکنی برای اونت
update_user_sums

که این میاد scheduler میکنه ،‌ هر یک ساعت یکبار ، محاسبات رو مجدد روی جدول انجام بده

و جدول شبه Materialized رو براتون آپدیت کنه .


الان میتونید از این کوئری بگیرید در حد ۲ ثانیه خروجی رو ببینید.

@panicdev
👍4
آقا ،‌ دید مثلا این سایت های بزرگ
وقتی یه درخواستی میزنی ،‌ به هر دلیلی میخوره تو دیوار ،‌ یه پیام نشونت میده .

میگه که این درخواست شما رفت تو دیوار ،
این UUID خدمت شما (که مربوط به درخواست میشه ) بردار ببر پشتیبانی پیگیری کن


حالا سوال پیش میاد که این UUID چی هست ؟
و چطور از روی اون میفهمن که شما بودید و چیکار داشتید میکردید که به این خطا خوردید .


خوب یه بنده خدایی امده مفهوم Context رو معرفی کنه .
و این مثال رو زده ،
گفته شما میتونید در ابتدای امر یه UUID بسازید و به درخواست اتچ کنید .
و این رو در جاهای مختلف که خواستید لاگ بندازید ازش استفاده کنید .

مثلا :
یه API کال میشه . اینو همون اول اتچ میکنید به API و هرجایی که خواستید لاگ بندازید .
اینو از Context برمیدارید و لاگ و همراه با متعلقاتش و این UUID ثبت میکنید .

(شاید بگید من همونو مریزم داخل request ، از همون جا هم بر میدارم ، Context نمندی .
خوبه ولی جاهایی مثل جاب ها دیگه بهش دسترسی نداری. )


آما ،
یه نکته به چشم خورد (تصویر دوم )
امده گفته که شما میتونی یه Middleware بنویسی و بزارید برای API تا بتونید Status , response time اینارو در بیارید به Context اضافه کنید .


ولی بنظرتون این کد درسته ؟ و جای درستی نوشته شده ؟


@panicdev
👍3
🚀 امدیم با Flow PHP: جادوگر داده‌ها!

اگه فکر می‌کنی پردازش داده توی PHP دردسر داره، Flow PHP اومده که کارت رو راحت کنه! یه فریم‌ورک سبک، سریع و با مصرف کم حافظه که حتی با کوهی از داده‌ها هم کم نمیاره! 😎

ویژگی‌های خفن:
🔹 حافظه کم مصرف: حتی با داده‌های عظیم، مصرفش ثابته!
🔹 وصل شدن به هر منبع داده‌ای: دیتابیس، اکسل، فضای ابری؟ مشکلی نیست!
🔹 تغییر شکل داده با کلی فانکشن آماده! 🔄
🔹 پردازش مستقیم فایل‌های راه دور (دیگه دانلود نمی‌خواد!)
🔹 گروه‌بندی، مرتب‌سازی، و حتی جدول ASCII برای داده‌ها! 😍
🔹 کش داخلی برای پردازش سریع‌تر 🚀

یه PHP 8.2+ فقط کافیه، بقیه‌شو Flow می‌سازه! 😏


🔗 لینک : https://flow-php.com


@panicdev
👍9🔥3❤‍🔥2
#متفرقه

۱. زندگی اسون نمیشه/ تو قوی میشی

۲. هیچکس به مشکلات شما اهمیت نمیده

۳. شما در یک جنگ چند بعدی نا‌برابر هستید

۴. بیشتر آدما شما رو دوست ندارن/ همه دنبال منافع خودشون هستن

۵. زندگی، همین لحظه های بدیهی و عادی هست که میزنیم جلو ببینیم چی میشه

۶. هر چیزی که به سمت تعالی نره، خود به خود به سمت تباهی میره

۷. زندگی بر اساس قدرت کار میکنه نه عدالت

۸. هیچ اتفاقی تصادفی نمیوفته
هر اتفاقی که میوفته
و هر اتفاقی که نمیوفته دلیل داره


@panicdev
👍27❤‍🔥4🕊1
🚀 ابزار DDEV: نجات‌دهنده توسعه محلی!

🛠 دوست داری محیط توسعه خودت رو سریع و بی‌دردسر راه بندازی؟

💡 اگه تا حالا با Docker کار کردی، می‌دونی که میشه با چند تا ایمیج ساده یک محیط توسعه محلی ساخت. اما چرا وقتی DDEV هست، باید وقتت رو برای ساخت یه محیط دستی با Docker تلف کنی؟ 🤔


⚡️ مقایسه DDEV با ساخت دستی محیط توسعه با Docker

🔹 راه‌اندازی محیط توسعه دستی با Docker 🔨

کنترل کامل روی تنظیمات
شخصی‌سازی نامحدود
باید تمام مشکلات رو خودت حل کنی
پشتیبانی از تیم روی دوش تو هست
ممکنه وقت زیادی ازت بگیره

🔹 استفاده از DDEV 🚀

کاملاً متن‌باز، بدون قفل شدن به یک شرکت خاص
بیش از ۶ سال توسعه و بهبود توسط جامعه

پشتیبانی از Drupal، Laravel، WordPress، Magento، Shopware و...
پشتیبانی از MySQL، MariaDB، PostgreSQL
امکان استفاده روی macOS، Windows (WSL2)، Linux
دارای HTTPS داخلی برای هر پروژه
امکان اجرای چند پروژه به‌صورت همزمان
برای Xdebug آماده به کار!
قابلیت اضافه کردن امکاناتی مثل Redis، Elasticsearch، Apache Solr و...

---
🎯 نتیجه‌گیری؟ وقت خودتو تلف نکن!

😎 اگه نمی‌خوای همش درگیر تنظیمات Docker و پشتیبانی از تیم بشی، DDEV انتخاب عالیه!

با DDEV، بیشتر روی کدنویسی تمرکز کن، کمتر روی پیکربندی! 🔥

🖥 امتحان کن و از وقت آزاد بیشترت لذت ببر!
🚀

@panicdev

#Docker #برنامه‌نویسی #DevOps
❤‍🔥12👍1
فیلامنت ورژن 4 - آلفا 1 به زودی در دسترس میشه 😎

https://github.com/filamentphp/filament/milestone/3
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥13👍2
بهش گفتیم یه PSR استاندارد درست کنید یا از یه چیزی pint استفاده کنید . کد یه دست بشه .


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

قبلا هم بهش گفتیم چرا توکدتون از form request ها استفاده نمیکنید برای ولیدیشن ها .

گفتن بیخودی فایل جنریت میشه . چه کاریه وقتی میتونیم اینجا ارایه بسازیم
بعد خود ولیدیشن ۲۰ خط جا میگیره تو کنترلر...

خواستم بگم کلا فک نکنید اونور خبریه .
هرکی اونور کار میکنه خفنه ، یا حتما باید دانش عجیب غریبی داشته باشی تا اونور استخدام بشی .

بیشتر این شرکتارو برنامه نویس های هندی تشکیل میده که فقط کارشون تولید شِت کد هست .
و خیلی هم با اعتماد بنفس ازش دفاع میکنند . 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥1
این روز ها یه متولوژی مورد بحث و توجه گرفته به اسم Shape Up که تازگی ها برخی شرکت ها شروع کردن به استفاده کردن که برخی از نقایص اسکرام رو پوشش میده ظاهرا

برام جالب بود . گفتم با شما هم به اشتراک بزارم .
اگر تجربه ای در این زمینه دارید . به اشتراک بزارید. 😊


شیپ‌آپ یک چارچوب مدیریت پروژه است که توسط شرکت Basecamp معرفی شده و هدف اصلی آن افزایش کنترل و پیش‌بینی‌پذیری در فرآیند توسعه نرم‌افزار است. برخلاف اسکرام که مبتنی بر اسپرینت‌های کوتاه‌مدت (۲-۴ هفته) و رویکرد چابک (Agile) است، Shape Up از چرخه‌های ۶ هفته‌ای استفاده می‌کند. در این روش، تیم‌ها ابتدا به‌طور دقیق ایده‌ها را پردازش (Shaping) می‌کنند و سپس در یک بازه زمانی ثابت توسعه می‌دهند.

مراحل اصلی شیپ‌‌آپ:

اول Shaping:
مشخص کردن ایده‌های کلی و طراحی محدوده پروژه قبل از ورود تیم توسعه.

دوم Betting Table: بررسی ایده‌ها و انتخاب پروژه‌هایی که بیشترین ارزش را دارند.

سوم Building:
یک دوره ۶ هفته‌ای که در آن تیم توسعه بدون وقفه روی محصول کار می‌کند.

چهارم Cool Down: یک دوره استراحت و مرور پس از تکمیل پروژه.

در این باره bootcamp یک کتاب ارائه داده که میتونید از اینجا بخونید .

https://basecamp.com/shapeup

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

https://github.com/mohamadsmt/Shapeup


این هم یک مقاله که اسکرام و shape up رو مقایسه کرد .

https://vrgl.ir/n93i3


@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3
🚫 خداحافظ reCAPTCHA، سلام Turnstile! 👋

🤖 قبلاً Google reCAPTCHA خیلی خوب بود. بدون دردسر ربات‌ها رو فیلتر می‌کرد، بدون اینکه تجربه کاربر رو خراب کنه.
همه خوشحال بودن، تا وقتی که...
💰 گوگل تصمیم گرفت پول دربیاره!

💸 فقط 10,000 درخواست رایگان؟ 😬
اگه یه سایت کوچولو داری، شاید کافی باشه.
ولی برای ورود کاربرا، ثبت کامنت، دانلود، فرم‌های ثبت‌نام و…
🎯 خیلی زود به سقف می‌خوری!


🔄 من دنبال جایگزین گشتم:
🔍 استفاده از hCaptcha:
ظاهرش مثل reCAPTCHA ولی قیمتش از گوگل هم بدتره 😓

🧪 ساختن CAPTCHA دستی:
با کلی دردسر، کلی کد، و قابل عبور برای ربات‌هایی با OCR باهوش 😐


🚀 و بالاخره رسیدیم به Cloudflare Turnstile
✔️ بدون انتخاب تصویر دوچرخه یا تاکسی 😅
✔️ بررسی رفتار کاربر و دستگاه به‌جای اذیت کردن کاربر
✔️ بدون هزینه، راحت و سریع
✔️ 📦 پکیج آماده برای Laravel


⚠️ ولی بدون: Turnstile گل بی‌خار نیست!
🟡 ممکنه بعضی ربات‌ها رد بشن (طبق داشبورد خودش)
🔵 ولی تعامل کاربریش بی‌نقصه
🔴 اگه دنبال نمره‌دهی نامرئی مثل reCAPTCHA v3 هستی، باید بری سراغ جیب 😅

🎉 نتیجه؟
با Turnstile کاربرا راحت‌ترن، رباتا محدودترن، و توسعه‌دهنده‌ها خوشحال‌ترن.
📦 مخصوصاً اگه با Laravel کار می‌کنی، این پکیج رو نصب کن و یه نفس راحت بکش 😌


#laravel #captcha #package

@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍10
#شاید_برای_شما_هم_اتفاق_بیفتد .

برای اینکه یک سری دیتا رو به فرانت اند برگردونم .
باید سه تا 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