Telegram Web Link
همه ما توی لاراول با Closure کار می‌کنیم، ولی واقعا می‌تونیم توضیح بدیم چی هست؟
چه توی route تعریف کردن، چه داخل collection، چه middleware یا حتی queue، همیشه داریم از Closure استفاده می‌کنیم.
اما بیاید خیلی ساده ببینیم Closure چیه؟
یه تابع بی‌نام (anonymous function) هست که می‌تونی:
توی متغیر ذخیره‌اش کنی
به یه تابع دیگه پاس بدی

ولی واقعا چه فایده‌ای داره؟
اینو با یه مثال ساده نشونت می‌دم:
فرض کن می‌خوای یه آرایه از عددها رو فیلتر کنی. مثلا فقط عددهای زوج رو نگه داری.

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


زمانی که از Closure استفاده می کنیم ، تابع filter دیگه کاری به نوع فیلتر نداره، فقط می‌پرسه:
«می‌خوای این آیتم رو نگه دارم یا نه؟ تو بگو!»
و این قدرت Closure هست:
تعریف منطق دلخواه،
تزریق رفتار به تابع عمومی،
ساده، تمیز، قابل‌تست

@DevTwitter | <Babak Mirhosseini/>
یه نوار قلب از وردپرستون بگیرین
اگر A نگرفتین بهتره تو فکر محکم‌کاری باشین اما اگر گرفتین هم کاملا از امنیت سایتتون مطمئن نباشین
https://labs.cloudbric.com/wafer

@DevTwitter | <Mohsen Ghiasi/>
بعد از ۶ سال کار کردن تو برنامه نویسی
یه تجربه شخصی در برنامه‌نویسی که همیشه جواب داده...


در مسیر توسعه نرم‌افزار، کم نیستند لحظاتی که بعد از ساعت‌ها تمرکز و تلاش، با باگی مواجه می‌شیم که نه‌تنها بی‌منطق به نظر می‌رسه، بلکه هر چی بیشتر تحلیلش می‌کنیم، کمتر می‌فهمیمش.
در چنین شرایطی، ذهن ما وارد حالت "تحلیل بیش‌از‌حد" می‌شه. شروع می‌کنیم به گشتن لایه‌لایه‌ی کد، فرضیه‌سازی‌های عجیب، و شک کردن به همه‌چیز

— جز یک چیز: اینکه شاید خودمون خسته‌ایم.

من بارها به این نقطه رسیدم. و هر بار که این اتفاق افتاده، یک راه‌حل ساده اما موثر جواب داده:

مکث. فاصله گرفتن. قطع ارتباط موقت با کد.

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

و خیلی وقت‌ها، باگی که ساعت‌ها دنبالش بودم، ظرف ۵ دقیقه حل شده.

این تجربه رو نوشتم چون باور دارم:

1- عمیق‌تر شدن همیشه به معنی نزدیک‌تر شدن به جواب نیست.
2- گاهی باید عقب رفت تا درست دید.

@DevTwitter | <Mohammadreza Momeni/>
معماری مقیاس‌پذیر برای دیپلوی Laravel با Load Balancer
در این مدل معماری ما از چند سرور برای اجرای اپلیکیشن استفاده می‌کنیم تا هم پرفورمنس افزایش پیدا کنه، هم در برابر خطاها مقاوم‌تر باشیم.

معماری کلی:

- Load Balancer (مثل Nginx / HAProxy / AWS ELB)
- چندین Instance از Laravel روی پورت یا سرور مختلف
- دیتابیس مرکزی (مثلاً MySQL یا PostgreSQL)
- کش مرکزی با Redis یا Memcached
- اشتراک‌گذاری فایل‌ها و session‌ها با NFS یا S3

مراحل پیاده‌سازی:

نصب PHP، Nginx و سایر روی هر سرور
دیپلوی Laravel روی چند سرور یا پورت
تنظیم nginx برای هر سرور تا درخواست‌ها به درستی به اپلیکیشن برسن
راه‌اندازی دیتابیس و کش روی سرور جدا برای دسترسی همه Instanceها
کانفیگ Load Balancer برای پخش درخواست‌ها بین سرورها

فرانت‌اند چطور به API وصل می‌شه؟
فقط کافیه به IP یا دامنه Load Balancer درخواست بزنه.با این روش طبق الگوریتم هایی که برای کانفیگ nginx سرور لودبالانسر تنظیم میکنیم میتونیم درخواست ها رو طبق الگوریتم به سرور مربوطه ارسال کنیم.
میتونین دیاگرام رو هم ببینین تا ارتباطشون رو بهتر درک کنین.

@DevTwitter | <Saber Qadimi/>
تا حالا پیش اومده تیم بک‌اند یا فرانت‌اند هی بهتون بگن: «یه دسترسی به پادهای استیج بدید، می‌خوایم یه کامند بزنیم یا لاگ ببینیم»؟ ولی بعدش وقت و حوصله نداشته باشید بشینید براشون kubectl و کوبرنیتس رو توضیح بدید؟

اینجاست که Lens میاد وسط و کار رو حسابی راحت می‌کنه!
این ابزار گرافیکی مثل یه دستیار باحاله که به همه، حتی کسایی که زیاد با کوبرنیتس آشنا نیستن، اجازه می‌ده به سادگی:
- به کلاستر وصل بشن و پادها رو ببینن
- لاگ‌ها رو چک کنن
- کامند اجرا کنن، بدون نیاز به یه عالمه دستور پیچیده!

من خودم از وقتی Lens رو تو پروژه‌هامون استفاده کردم، دیگه لازم نیست هر سری برم برای تیم توضیح بدم چی به چیه. فقط کافیه بهشون دسترسی بدم و خودشون می‌تونن گشت‌وگذار کنن تو کلاستر!

یه نکته مهم: حتماً با RBAC دسترسی‌ها رو درست تنظیم کنید که یه وقت تیم نره یه چیزی رو تو پروداکشن خراب کنه!

@DevTwitter | <Farid Arjmand/>
اگر دنبال یه ابزار هوشمند برای تولید توضیحات سئوشده و جذاب برای محصولات فروشگاه‌ت هستی، این پروژه مخصوص خودته!
با استفاده از مدل‌های هوش مصنوعی (رایگان و متن‌باز)، فقط با چند خط کد می‌تونی توضیحات حرفه‌ای و بهینه‌شده برای محصولاتت بسازی.
مناسب برای فروشگاه‌های اینترنتی، ربات‌های قیمت‌گذار، یا هر کسی که محتوای جذاب و آماده لازم داره!

https://github.com/mehdi-jahani/seo-product-description-generator

@DevTwitter | <Mehdi Jahani/>
یکی از مهمترین ویژگی های AI Agent ها داشتن حافظه ست. دوتا لایبرری هست که عالی اند برای اینکار.

- فریمورک Graphiti: یه فریمورک گرافِ دانش زمان‌مند (temporally-aware knowledge graphs) از تیم Zep AI هست. بر خلاف سیستم‌های RAG سنتی، Graphiti داده‌های اپیزودیک رو می‌گیره و خودش به صورت خودکار entity ها و ارتباط‌ها رو با زمان‌بندی دقیق (مثل valid_at یا invalid_at) به‌روز می‌کنه.
یعنی چی؟ یعنی می‌تونی سؤال‌هایی بپرسی که بر اساس زمان باشن، بدون اینکه کل گراف رو دوباره بسازی!
- پشتیبانی از نوع‌های دلخواه entity ها
- جستجوهای ترکیبی (semantic ، BM25، گراف)
مناسب برای ایجنت‌هایی که با آدم‌ها یا داده‌های در حال تغییر سروکار دارن

- فریمورک Cognee: یه موتور حافظه سبکه که فقط با ۵ خط کدبه ایجنتت حافظه می‌ده. با یه ساختار ECL (Extract – Cognify – Load) کار می‌کنه و می‌تونه اطلاعاتی مثل چت، داکیومنت، عکس و ... رو به یه گراف + وکتور یکپارچه تبدیل کنه.
- پشتیبانی از RDF و Ontology های دلخواه
- حافظه معنایی با گراف‌های واقعی
- مناسب برای ایجنت‌هایی که باید واقعاً بفهمن چه خبره—not just retrieve. برای کساییه که می‌خوان حافظه‌ی هوشمند با گراف و آنتولوژی داشته باشن، اونم با کمترین پیچیدگی.
Graphiti github: https://github.com/getzep/graphiti
Cognee github: https://github.com/topoteretes/cognee

@DevTwitter | <Mehdi Allahyari/>
یکی از پلاگین‌های کاربردی Webpack بدون شک Module Federation هست که از نسخه ۵ به Webpack اضافه شده. این پلاگین امکان اشتراک‌گذاری و بارگذاری ماژول‌ها بین چند پروژه یا چند بخش از یک پروژه رو فراهم می‌کنه و یکی از مهم‌ترین کاربردهاش در معماری Micro Frontend هست.

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

لینک ویدئو:
https://www.youtube.com/watch?v=uvzu54M8ef8

@DevTwitter | <Seyyed mahdi jalali/>
یک رقیب تازه برای XGBoost و LightGBM وارد شد!


در دنیای یادگیری جدولی (Tabular ML)، همه سال‌ها به گریدینت بوستینگ وفادار بودند — اما حالا مدل TabM داره همه‌چیز رو به‌هم می‌ریزه!

مدل TabM، ترکیبی هوشمند از MLP و انسمبل‌های سبک‌وزن، موفق شده در بیش از ۴۶ دیتاست، حتی از مدل‌های محبوبی مثل CatBoost و LightGBM بهتر عمل کنه.

چی خاصش می‌کنه؟
سرعت بالا مثل MLP
دقت بالا مثل GBDT
بدون سنگینی مدل‌های انسمبلی

همه این‌ها با یک ترفند ساده: استفاده از لایه adapter و مدل مشترک به‌جای ۳۲ شبکه جدا.

https://github.com/yandex-research/tabm

@DevTwitter | <Danial Soleimany/>
رباتی پیشرفته با ترکیب ۱۴ استراتژی تحلیل تکنیکال، مدیریت ریسک هوشمند و معماری آماده برای یادگیری ماشین – کاملاً اوپن‌سورس و قابل توسعه!

مناسب برای تریدرها، توسعه‌دهنده‌ها و علاقه‌مندان به الگوتریدینگ

سورس کامل در گیت‌هاب:
https://github.com/mehdi-jahani/GoldTraderEA

@DevTwitter | <Mehdi Jahani/>
برنامه نویسی همزمان با php
زبان php به صورت پیش فرض غیر همزمان هست. یعنی کد خط به خط اجرا میشه.
زبان php یک تابع داره که با استفاده ازش میشه به صورت async کد رو اجرا کرد.
تابع pcntl_fork یک پروسس فرزند ایجاد می کنه.
در تصویر بدون اجرای pcntl زمان اجرای برنامه 10 ثانیه هست اما با pcntl به یک ثانیه میرسه.

@DevTwitter | <Yusof Sadat Fakhr/>
پکیج easyCDP یه ابزار برای زبان Golang هست که باهاش میتونید خیلی راحت اسکرپر (scraper)، کراولر (crawler) بسازید.
این پکیج از chromedp استفاده میکنه و بسیار ساده اش کرده.
پکیج easyCDp از Chrome DevTools Protocol استفاده میکنه یعنی مستقیم به مرورگر وصل میشه و خیلی سریع هست نسبت سلنیوم و دیگر پکیج ها
باهاش می‌تونید از صفحات وب داده استخراج کنید، یک تسک مثل ثبت نام یا هرچیزی رو خودکار کنید.
کاملا کار انسان شبیه سازی میکنه و سایت ها تشخیص نمیدهند که ربات هست

ریپوی پروژه:
https://github.com/AfazTech/easyCDP

اموزش ویدیویی یوتوب:
https://youtu.be/nzWQ3s7hc0Q?si=bxIYmfjVC22M2g-i

@DevTwitter | <Afaz/>
اگر دنبال یادگیری Design Patternها هستید و نمی‌دونید از کجا شروع کنید، این سایت منبع خیلی خوبیه، از دستش ندید!

https://refactoring.guru/design-patterns

@DevTwitter | <Reza Jafari/>
یکی از چیزهایی که توی اسپرینگ بوت برام آزاردهنده هست نبود یک Cli مشابه دات نت یا گو و غیره هست. بنابراین شروع کردم آزمایشی یک Cli بنویسم با زبان بینظیر Go و توسعه بدمش.
https://github.com/manimovassagh/Springman

@DevTwitter | <Mani/>
داغِ داغ، تازه از تنور دراومده. بعد از ۵ ماه عرق ریختن بالاخره اولین نسخه داکیومنتشن فریمورکی که روش کار می‌کردم بیرون اومد.
پر از اشکاله و یه جاهاییش باید کاملا بازنویسی بشه ولی فعلا هیجانم بیشتر از اینه که بتونم صبر کنم
این شما و اینم Minions

https://minions-ai.github.io/minions-docs/index.html

@DevTwitter | <وحیدیو/>
اگه یه پکیج جمع و جور Golangای می‌خواید که به LLMها وصل شید و کاملا strongly typed باشه و زحمت APIکال و این چیزا رو خودش به دوش بکشه ولی در عین حال سبک باشه، این کتاب خونم رو تست کنید :دی

https://github.com/mhrlife/goai-kit

@DevTwitter | <The Big Rad/>
ورژن 1.1.0 لایبرری دانلود منیجر رخش رو منتشر کردم
تو این ورژن چندتا باگ فیکس و ایمپرومنت داشتیم و پنج تا فیچر جدید و مهم

- Set group to a download item
- Better errors
- General flow for getting latest downloads state changes
- Set headers to each item
- Download enqueued items orderly

https://github.com/ItsBenyaamin/rakhsh/releases/tag/1.1.0

@DevTwitter | <.. BeNYaMiN ../>
چند ساعت پیش نسخه 1.19 الیکسیر(اولین نسخه RC) اون منتشر شد. این نسخه بهینه سازی در زمینه Type system داشته
الیکسیر مثل rust روی کامپیالر ارورنمی ده جلوشو بگیره به همین منظور کد های قبلی همشون کار می کنند ولی وارنینگ می گیری در محیط توسعه که بری درست کنیش
https://github.com/elixir-lang/elixir/releases/tag/v1.19.0-rc.0

@DevTwitter | <Tagarg/>
خبر عالی برای دوست‌داران زبان گو:
تیم گو بیخیال اضافه کردن سینتکس جدید برای error handling شدن و پروپوزال‌های فعلی رو میبندن و پروپوزال جدیدی هم قبول نمیکنن.

نقدی که همیشه به منتقدین و درخواست‌کنندگان سینتکس جدید داشتم (که رابرت گریزمر هم در بلاگ اصلی بهش اشاره کرده): خطا باید هندل بشه، حداقل دیتای بیشتر بده، اینکه همون رو ریترن کنید معلومه که به نظر بد میاد! وقتی هندل بشه دیگه اضافی به نظر نمیاد.

لینک بلاگ گو که میتونید تاریخچه‌ی این موضوع رو به طور کامل مطالعه کنید:
https://go.dev/blog/error-syntax

@DevTwitter | <Ashkan Nourzadeh/>
2025/06/29 23:39:15
Back to Top
HTML Embed Code: