Anophel | آنوفل
Open in Telegram
آنوفل | Anophel: دنیای بی پایان امکانات برای برنامه نویسان https://anophel.com پشتیبانی : @anophel_support
Show moreThe country is not specifiedThe category is not specified
277
Subscribers
+224 hours
+507 days
+5030 days
Number of Posts
Data loading in progress...
Reactions
Comments
Telegram Stars
TOP posts by
Data loading in progress...
Publication analysis
Posts | Views dynamics | |||||
🧠 یه اشتباه رایج تو طراحی سیستمهای نوتیفیکیشن اینه که Event Ingestion و Notification Dispatch رو یکی در نظر میگیریم.
یعنی هر Event که وارد سیستم میشه، همون لحظه تبدیل به یک Notification میشه.
در نگاه اول ساده و منطقیه، ولی وقتی سیستم بزرگتر میشه، مشکل خودش رو نشون میده.
فرض کنید یک Webhook دارید.
یک سرویس مشکل پیدا کرده و Provider شروع به Retry کردن درخواستها میکنه.
در چند دقیقه ممکنه ۳۰ تا Event مشابه دریافت کنید.
اگر معماری اینطوری باشه:
Event → Notification
کاربر در نهایت ۳۰ تا Notification مشابه دریافت میکنه.
اما نکته مهم اینه که:
Event با Notification یکی نیست.
Event یعنی:
«یک اتفاق در سیستم رخ داده.»
Notification یعنی:
«یک چیزی وجود دارد که کاربر باید از آن مطلع شود.»
این دو تا lifecycle متفاوت دارند.
راه بهتر اینه که بین این دو یک لایه میانی قرار بدیم.
ابتدا Eventها ingest میشن.
بعد یک مرحله Aggregation یا Coalescing داریم که Eventهای مشابه رو کنار هم جمع میکنه.
مثلاً برای هر Event یک idempotency key تعریف میکنیم:
resource_id + event_type
بعد Eventهای مشابه رو در یک window زمانی نگه میداریم.
مثلاً ۵ دقیقه.
در این بازه هر Retry جدید فقط باعث افزایش count میشه، نه ساخت یک Notification جدید.
بعد از پایان window به جای ۳۰ پیام:
Service X در ۵ دقیقه گذشته ۳۰ بار retry شد.
یک Notification خلاصه و معنیدار ساخته میشه.
⭐️مزیتش:
🫶کاهش noise برای کاربر
🫶کاهش فشار روی سیستم Notification
🫶جلوگیری از ارسال پیامهای تکراری
🫶تجربه کاربری بهتر
این الگو فقط برای Webhook نیست.
در سیستمهای Alerting، Monitoring، Billing و تقریباً هر معماری Event-driven با حجم بالا کاربرد داره.
خیلی وقتها مشکل سیستم Notification با اضافه کردن Queue یا Retry حل نمیشه؛ مشکل از جایی شروع شده که از اول Event و Notification را دو مفهوم جدا طراحی نکردیم.
#Anophel#BackendDevelopment #Microservices #NotificationSystem #Webhooks #Observability #Engineering | 8 | 0 | 0 | 3 | Loading... | |
No text... | 1 | 0 | 0 | 0 | Loading... | |
😃یکی اومده کل استک یه دستیار هوش مصنوعی رو از صفر با Zig نوشته؛ اسمش هم NullClaw!
اعدادش واقعاً عجیبن:
🔻 فقط ۶۷۸ کیلوبایت حجم باینری
🧠حدود ۱ مگابایت RAM مصرف میکنه
✔️ کمتر از ۲ میلیثانیه استارت میخوره
بدون Runtime، بدون Virtual Machine، بدون Framework و حتی بدون Garbage Collector؛ فقط Zig خالص.
حالا مقایسه کنید:
• OpenClaw برای اجرا به بیش از ۱ گیگابایت RAM نیاز داره.
• NanoBot با Python اجرا میشه و بالای ۱۰۰ مگابایت RAM مصرف میکنه.
• PicoClaw هم حدود ۱۰ مگابایت RAM و Go میخواد.
اما NullClaw روی یه برد ۵ دلاری با فقط ۱ مگابایت RAM اجرا میشه!
داخل همین باینری ۶۷۸ کیلوبایتی هم امکانات کمی نداره:
⭐️پشتیبانی از +۲۲ ارائهدهنده AI (OpenAI، Anthropic، Ollama، Groq، DeepSeek و…)
⭐️ اتصال به ۱۳ پیامرسان و پلتفرم (تلگرام، دیسکورد، اسلک، واتساپ، iMessage، IRC و…)
⭐️ بیش از ۱۸ ابزار داخلی
⭐️ حافظه هیبریدی (Vector + Keyword Search)
⭐️ سندباکس چندلایه (Landlock، Firejail و Docker)
⭐️ پشتیبانی از Arduino، Raspberry Pi و STM32
⭐️ MCP، Subagents، Streaming و قابلیتهای صوتی
از نظر معماری هم همهچیز ماژولاره؛ ارائهدهنده، حافظه، ابزارها و کانالها فقط با تغییر فایل Config قابل تعویض هستن و نیازی به تغییر کد نیست.
از نظر امنیت هم کلیدهای API بهصورت پیشفرض با ChaCha20-Poly1305 رمزنگاری میشن.
در مجموع:
🫶حدود ۴۵ هزار خط کد Zig
🫶۲,۷۳۸ تست
🫶 فقط وابسته به libc
🫶 کاملاً متنباز و رایگان
اگه این اعداد دقیق باشن، یکی از جالبترین نمونههای استفاده از Zig برای ساخت نرمافزارهای AI محسوب میشه.
⭐️ ویدیو:
https://x.com/simplifyinAI/status/2081060260593467595/video/1?s=46 | 22 | 2 | 0 | 6 | Loading... | |
🍷برای اینکه مطمئن بشی VPN درست کار(نشتی ip نداره) میکنه، میتونی از سایت BrowserLeaks استفاده کنید. این سایت IP فعلی، موقعیت تقریبی، اطلاعات شبکه و همچنین تست DNS Leak و WebRTC Leak رو نشون میده تا مطمئن بشی #اطلاعات واقعی اینترنتت لو نمیره. اگر بعد از اتصال به VPN، آیپی و DNS نمایشدادهشده مربوط به سرور VPN باشه و نه اینترنت خودت، یعنی اتصال بهدرستی برقرار شده و نشتی وجود نداره.
این سایت ها #امنیت سرور و نشت در اپ ها رو نشون میده:
https://browserleaks.com/ip
https://myip.theazizi.ir/
@xsfilterrnet 👑
@xszapass 🤩 | 29 | 1 | 0 | 5 | Loading... | |
🐝 Hive v0.1.0 منتشر شد! 🚀
اولین نسخه عمومی Hive منتشر شد.
این نسخه یک MVP است؛ یعنی شروع مسیر، نه نسخه نهایی.
میدونیم هنوز:
🐛 باگهایی وجود داره
🔨 نیاز به Refactor و تمیزکاری کد داریم
📚 مستندات کامل آماده نیست
فعلاً توان خرید دامنهی .dev و راهاندازی سایت مستندات رو نداریم :(
پس فعلاً با GitHub و کانال کنار هم پیش میریم.
برای رشد Hive خوشحال میشیم کمک کنید:
💛 تست کنید
💛 باگ گزارش بدید
💛 در بهبود کد و Refactor کمک کنید
💛 و اگر دوست داشتید حمایت کنید ❤️
ما هم ادامه میدیم و نسخههای بعدی خیلی بهتر و خفنتر خواهند شد. 🚀
این تازه شروع Hive است 🐝
GitHub:
https://github.com/HiveSofts/hive-app
آموزشها و مستندات ویدیویی:
Instagram: @arshiamohammadei
Telegram: @aasshiaa
@TheRaymondDev | 39 | 0 | 0 | 7 | Loading... | |
RCE PoC for Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0
اکسپلویتش تازه از تنور در اومده توی ورژن 8.8.2 فیکس شده که همش ۲ساعته ریلیز شده :)
https://github.com/berabuddies/redis-poc
@TheRaymondDev | 42 | 1 | 0 | 6 | Loading... | |
✅یکی از کمبودهای قدیمی HTTP بالاخره برطرف شد.
😃متد QUERY که تا همین اواخر در حد Draft بود، از ژوئن ۲۰۲۶ رسماً با RFC 10008 استاندارد شد.
اگر با CQRS کار میکنید یا سرچهای پیچیده (مثل Elasticsearch) دارید، احتمالاً از این خبر خوشتان میآید.
⸻
تا امروز برای سرچهای پیچیده معمولاً یکی از این دو راه را داشتیم:
GET /search?q=golang&page=1
یا
POST /search
Content-Type: application/json
{
"query": {
...
}
}
هر کدام یک مشکل اساسی داشتند.
⭐️ GET
از نظر HTTP کاملاً مناسب عملیات Read است:
Safe
Idempotent
Cacheable
اما همه پارامترها باید داخل URL قرار بگیرند. برای Queryهای پیچیده، مخصوصاً در Elasticsearch، این روش خیلی زود به بنبست میرسد.
⸻
⭐️ POST
امکان ارسال Body را میدهد و تقریباً همه ما سالهاست برای Search از آن استفاده میکنیم.
اما از دید پروتکل، POST یک عملیات عمومی است که ممکن است State سرور را تغییر دهد.
در نتیجه:
Cacheها معمولاً آن را Cache نمیکنند.
Retry خودکار همیشه منطقی نیست.
از نظر Semantic، برای یک عملیات صرفاً Read انتخاب ایدهآلی نیست.
⸻
⭐️حالا QUERY آمده تا دقیقاً این مشکل را حل کند.
QUERY /search
Content-Type: application/json
{
"query": {
...
}
}
یعنی:
⭐️ Body دارد.
⭐️ Safe است.
⭐️ Idempotent است.
⭐️ قابلیت Cache شدن دارد.
و مهمتر از همه، پروتکل از همان ابتدا میداند که این درخواست فقط برای خواندن داده است و هیچ تغییری در State ایجاد نمیکند.
⸻
برای طرفداران CQRS این اتفاق واقعاً جذاب است.
قبلاً مجبور بودیم بنویسیم:
POST /orders/search
در حالی که اسم Endpoint میگفت Query است، اما Method میگفت POST!
حالا میتوانیم بنویسیم:
QUERY /orders/search
که از نظر Semantic هم کاملاً با معماری CQRS هماهنگ است.
⸻
⭐️البته یک نکته مهم وجود دارد.
هرچند QUERY حالا یک استاندارد رسمی است، اما هنوز بسیاری از Frameworkها، API Gatewayها، Reverse Proxyها، CDNها و ابزارهای مختلف از آن پشتیبانی کامل ندارند.
پس فعلاً احتمالاً همچنان POST /search را زیاد خواهید دید؛ اما به مرور زمان انتظار میرود QUERY جایگاه واقعی خودش را پیدا کند.
به نظر من، این یکی از بهترین تغییراتی است که طی سالهای اخیر به HTTP اضافه شده؛ چون بالاخره برای «عملیات Read با Body» یک راهحل استاندارد داریم.
#آنوفل #anophel #http #query #query | 633 | 12 | 0 | 7 | Loading... |

