DevTwitter | توییت برنامه نویسی
32.6K subscribers
5.53K photos
447 videos
6 files
5.46K links
توییت های برنامه نویسی و طراحی وب :)

Admin:
@dvtwi

Hashtags:
devtwitter.t.me/5

DevBooks Channel:
https://t.me/+AYbOl75CLNYxY2U0

Github:
https://github.com/DevTwitter

X:
https://x.com/devtwittir
Download Telegram
Forwarded from DevTwitter Ads.
📊 دوره آنلاین و جامع #علم_داده (Data Science)

👈 ورود به دنیای Data Science و هوش مصنوعی

🔰 بدون نیاز به سابقه برنامه‌نویسی

از مفاهیم پایه تا تحلیل داده و پیاده‌سازی مدل‌های واقعی

🐍 آموزش پایتون (Python) و SQL Server
📊 تحلیل و مصورسازی داده
🤖 یادگیری ماشین (ML) و Deep Learning
📈 پیش‌بینی و تحلیل سری‌های زمانی
🧩 پروژه‌ها و Case Studyهای واقعی


👥 مناسب دانشجویان، تحلیلگران و علاقه‌مندان به ورود یا تغییر مسیر شغلی به Data Science

👈 مشاوره رایگان + مشاهده جزئیات دوره:
➡️ https://httb.ir/jXbWL

➖➖➖
🎓 همراه با گواهینامه معتبر مؤسسه توسعه
Please open Telegram to view this post
VIEW IN TELEGRAM
👎5🍌2
آژانس‌ها خدماتشون رو با عنوان «هوش مصنوعی به‌عنوان سرویس» می‌فروشن؛ درحالی‌که کد خیلی از ابزارهایی که برای ساخت این سیستم‌ها نیاز داری، رایگان روی GitHub قرار گرفته!

این ۸ پروژه رو از گزینه‌های خوب تا جذاب‌ترین‌ها مرتب کردم؛ ابزارهایی که می‌تونن نقطه شروع ساخت ایجنت‌های هوش مصنوعی خودت باشن.

۱. پروژه Dyad؛ از ایده تا ساخت اپلیکیشن

با توضیح دادن ایده‌ات، می‌تونی یک وب‌سایت یا اپلیکیشن بسازی و نتیجه رو مستقیماً روی سیستم خودت اجرا کنی.

بیش از ۲۱٫۶ هزار ستاره

http://github.com/dyad-sh/dyad

۲. پروژه E2B؛ محیط امن برای اجرای کد ایجنت‌ها

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

بیش از ۱۳٫۴ هزار ستاره

http://github.com/e2b-dev/E2B

۳. پروژه Mem0؛ حافظه‌ای برای ایجنت‌های هوش مصنوعی

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

بیش از ۶۶٫۸ هزار ستاره

http://github.com/mem0ai/mem0

۴. پروژه Dify؛ ساخت ایجنت بدون پیچیدگی‌های همیشگی کدنویسی

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

بیش از ۱۵۲ هزار ستاره

http://github.com/langgenius/dify

۵ پروژه. OpenHands؛ یک ایجنت برنامه‌نویس متن‌باز

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

بیش از ۹۰ هزار ستاره

http://github.com/All-Hands-AI/OpenHands

۶. پروژه Browser Use؛ ایجنتی که با مرورگر کار می‌کنه

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

بیش از ۱۱۷ هزار ستاره

http://github.com/browser-use/browser-use…

۷. پروژه Photo؛ جایگزینی متن‌باز برای Photoshop

یک پروژه گرافیکی که طبق معرفی پست، با Rust و کمک Claude از نو ساخته شده و بخشی از یک مجموعه متن‌باز برای ابزارهای مشابه محصولات Adobe محسوب می‌شه.

بیش از ۴۹٫۵ هزار ستاره

http://github.com/storytold/phot

۸. Reverse Engineering با کمک MCP

یک سرور MCP برای کمک به بررسی و مهندسی معکوس نرم‌افزارها، تا سطح فایل‌های باینری. پروژه‌ای تخصصی برای زمانی که می‌خوای بفهمی یک برنامه در پشت صحنه چطور کار می‌کنه.

بیش از ۱۳۰ هزار ستاره

http://github.com/morluto/rea

نکته مهم: متن‌باز بودن لزوماً به معنی رایگان بودن تمام هزینه‌های اجرا نیست. بعضی از این ابزارها برای میزبانی ابری، مدل‌های هوش مصنوعی یا سرویس‌های جانبی به هزینه نیاز دارن.

اما فرصت اصلی اینجاست: به‌جای اینکه همیشه هزینه ساخت یک ایجنت رو به دیگران پرداخت کنی، می‌تونی از این پروژه‌ها شروع کنی، اون‌ها رو متناسب با نیازت تغییر بدی و سرویس خودت رو بسازی.

کدشون در دسترسه؛ حالا نوبت ایده توئه.

@DevTwitter | <Yarad/>
❤13🔥3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
چین یه OCR اوپن سورس منتشر کرده که می‌تونه ده‌ها صفحه PDF رو یک‌جا بخونه!

اسمش Unlimited-OCRـه و توسط Baidu توسعه داده شده.

تا الان خیلی از ابزارهای OCR برای خوندن یه PDF طولانی، صفحات رو جداجدا پردازش می‌کردن. اما Unlimited-OCR اومده این محدودیت رو تا حد زیادی برطرف کنه.

یعنی چی؟

فرض کن یه PDF طولانی داری که پر از متن، جدول و اطلاعات مختلفه. این مدل می‌تونه چندین صفحه رو توی یه فرآیند پیوسته بخونه و استخراج کنه، بدون اینکه مجبور باشه هر صفحه رو کاملاً مستقل پردازش کنه.

حالا چرا جذابه؟

فقط ۳ میلیارد پارامتر داره (3B)
می‌تونه اسناد چندده‌صفحه‌ای رو در یک مرحله پردازش کنه
از زبان‌های مختلف پشتیبانی می‌کنه
پنجره خروجی تا 32K توکن داره
کاملاً اوپن سورس و می‌تونی روی سیستم خودت اجراش کنی
با ابزارهایی مثل Transformers، vLLM، SGLang و Docker قابل استفاده‌ست

قسمت جذاب‌تر ماجرا؟

دیگه برای هر بار OCR گرفتن از اسنادت لزوماً نیازی به سرویس‌های پولی ابری نداری. مدل رو روی سخت‌افزار خودت اجرا می‌کنی و اسنادت هم روی همون سیستم باقی می‌مونن.

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

شرکت Baidu این مدل رو با الهام از DeepSeek-OCR توسعه داده تا پردازش اسناد طولانی رو یه مرحله جلوتر ببره.

به نظرم جذاب‌ترین بخش این پروژه فقط رایگان بودنش نیست؛ اینه که OCR داره از خوندن صفحه‌به‌صفحه به سمت پردازش پیوسته اسناد طولانی حرکت می‌کنه.

GitHub:
https://github.com/baidu/Unlimited-OCR

Hugging Face:
https://huggingface.co/baidu/Unlimited-OCR

@DevTwitter | <Mohsen Rad/>
❤20🔥4👍2
Forwarded from DevTwitter Ads.
دوره جامع پایتون: مقدماتی تا پیشرفته

🗓شروع دوره:2 آبان

🎁 تخفیف ویژه برای دانشجویان، فرصتی بی‌نظیر برای شما!

🔥 آموزشی که شما را به برنامه‌نویس حرفه‌ای تبدیل می‌کند و در بازار کار به شما رقابت‌پذیری بیشتری می‌دهد. همچنین برای اپلای‌های شغلی و تحصیلی شما را برتر می‌کند و به راه‌اندازی استارت‌آپ‌های شگفت‌انگیز کمک می‌کند.

⏰ 140 ساعت آموزش مجازی، با بیش از 25 پروژه و مینی‌پروژه برای تسلط کامل!

🌟 سرفصل‌های دوره شامل:

💻 تسلط بر کدنویسی پایتون
💻 علوم داده با پایتون
💻 محاسبات علمی با پایتون
💻 یادگیری ماشین با پایتون
💻 طراحی بازی و اپلیکیشن با پایتون
💻 ساخت بلاک‌چین و ارز دیجیتال با پایتون
💻 هک و امنیت با پایتون
💻 طراحی سایت با پایتون

🎁 همراه با هدایای ویژه، از جمله پکیج کسب درآمد از پایتون!

همین حالا شروع کنید و بهترین نسخه خود را با ما کشف کنید! 💥🚀🔥

🌟 به دوستان خود نیز اطلاع دهید تا این فرصت را از دست ندهند! 🌟

👨‍🏫برگزارکننده: شرکت آتی پژوهش امیرکبیر
@kargah2018

👩‍🎓جهت ثبت نام و کسب اطلاعات بیشتر
@apa_admin12
🍌5👎2
اگر بین انتخاب مسیر و ارزش یادگیری برنامه‌نویسی در عصر هوش مصنوعی شک دارید، پیشنهاد می‌کنم حتما این مصاحبه کریس پیچ (استاد علوم کامپیوتر استنفورد) را ببینید. چند نکته کلیدی او خیلی راهگشاست:

۱. چالش رشد شخصی: بزرگ‌ترین خطر این است که آن‌قدر کارهای اصلی را به AI برسپارید که توانایی تفکر عمیق و معماری سیستم را از دست بدهید. هوش مصنوعی ضریب‌کننده توانایی شماست، به شرطی که خودتان هم کنار آن رشد کنید.

۲. تغییر نقش مهندس جونیور: امروز ساخت محصول ساده‌تر شده، اما هنر اصلی مهندس جوان از «کد زدنِ صرف» به «درک دقیق نیاز انسان‌ها و تبدیل آن به محصول» تغییر کرده است.

۳. بحران انگیزه و آینده شغلی: سردرگمی درباره ۴ سال آینده طبیعی است، اما راه حل، عقب‌نشینی نیست؛ بلکه شروع هر روز با این اصل است که امروز داناتر از دیروز باشیم.

تماشای ویدیوی کامل در یوتیوب:
https://youtube.com/watch?v=g-CD1d0q01I

@DevTwitter | <Mehdi Allahyari/>
👍27❤4👎2
یه API که برای ۱۰۰ کاربر خوب کار می‌کنه، لزوماً برای ۱۰ هزار کاربر آماده نیست.

فرض کن یه API داری که اطلاعات یک محصول رو برمی‌گردونه.

در حالت عادی، همه‌چیز خوبه. اما با افزایش تعداد کاربران، چند مشکل ممکنه ظاهر بشه:

* دیتابیس زیر فشار تعداد درخواست‌ها قرار می‌گیره.
* چند درخواست هم‌زمان، کارهای تکراری انجام می‌دن.
* زمان پاسخ‌گویی بالا می‌ره.
* مصرف منابع سرور افزایش پیدا می‌کنه.

راه‌حل چیه؟ لزوماً اضافه کردن سرور یا استفاده از Redis نیست.

اول باید بفهمیم گلوگاه (Bottleneck) دقیقاً کجاست.

برای مثال:

۱. اگر یک Query سنگین داریم، شاید بهینه‌سازی Query یا اضافه کردن Index مؤثرتر باشه.

۲. اگر اطلاعات یکسان بارها درخواست می‌شن، Caching می‌تونه تعداد مراجعه به دیتابیس رو کاهش بده.

۳. اگر یک سرور به محدودیت منابع رسیده، شاید به Horizontal Scaling نیاز داشته باشیم.

۴. اگر درخواست‌ها کارهای سنگین و زمان‌بر انجام می‌دن، انتقال بخشی از پردازش به یک Queue می‌تونه کمک‌کننده باشه.

نکته مهم اینه که هرکدوم از این راه‌حل‌ها هزینه و پیچیدگی خودشون رو دارن.

گاهی بهترین تصمیم معماری، اضافه نکردن یک تکنولوژی جدیده.

@DevTwitter | <Abolfazl Momenifar/>
👍28❤3🍌2
چرا Update در SQL Server سریع‌تر از Delete + Insert است؟

مدتی پیش در پروژه‌ی "بهای تمام شده" و "ریال انبار"، با چالشی روبرو شدم که باعث شد دوباره به اصول پایه‌ای عملکرد دیتابیس فکر کنم.
ما برای محاسبه مجدد ریالی انبار، نیاز داشتیم حجم زیادی از داده‌ها را بازنویسی کنیم. دو راه پیش رو داشتیم:
1. ردیف‌های قدیمی را DELETE کنیم و ردیف‌های جدید را INSERT کنیم.
2. یا ردیف‌های موجود را با مقادیر جدید UPDATE کنیم.
در نگاه اول شاید فکر کنید این دو عملیات از نظر منطقی یکی هستند؛ اما در عمل، وقتی از روش Delete + Insert استفاده می‌کردیم، سرعت فرآیند بسیار پایین بود و سیستم تحت فشار قرار می‌گرفت. اما به محض اینکه استراتژی را به UPDATE تغییر دادم، شاهد بهبود چشمگیر سرعت بودیم.
اگر فکر می‌کنید UPDATE هم همان DELETE + INSERT است، باید به ساختار زیرین نگاه کنید:

هزینه‌ی ایندکس‌ها (The Index Trap):
در روش حذف و درج، شما مجبورید تمام ایندکس‌های جدول را برای حذف "پاکسازی" و برای درج مجدد "بازسازی" کنید. اما در UPDATE (اگر ستون‌های ایندکس‌شده تغییر نکنند)، SQL Server اصلاً درگیر ساختار ایندکس‌ها نمی‌شود و فقط مقدار را در همان بلوک داده تغییر می‌دهد.

پایداری در صفحات داده (Data Pages):
عملیات حذف و درج مجدد، باعث ایجاد Fragmentation در صفحات داده می‌شود و احتمال Page Split را بالا می‌برد. در حالی که UPDATE سعی می‌کند عملیات را In-place و در همان مکان قبلی انجام دهد.

مدیریت تراکنش (Logging):
مدیریت یک عملیات واحد، همیشه بهینه‌تر از مدیریت دو عملیات مجزای سنگین در Transaction Log است.

@DevTwitter | <seied Mojtaba sajadi/>
👍10🍌8❤6
پروژه dbBackup_manager؛ ابزاری برای بکاپ و بازیابی دیتابیس PostgreSQL

به‌تازگی اولین نسخه از پروژه‌ی dbBackup_manager رو منتشر کردم؛ یک ابزار با رابط کاربری تحت وب برای تهیه‌ی بکاپ و بازیابی دیتابیس‌های PostgreSQL به‌صورت محلی.

امکانات فعلی:
تهیه‌ی بکاپ از دیتابیس‌های PostgreSQL
بازیابی دیتابیس از بکاپ‌های موجود
رابط کاربری تحت وب
ذخیره‌سازی محلی اطلاعات برنامه و فایل‌های بکاپ

تکنولوژی‌ها: Java 21، Spring Boot و React
سورس کد و دانلود نسخه‌ی انتشار

https://github.com/arshiachillguy/dbBackup-manager

@DevTwitter | <Arshia/>
👍5🍌3❤1
داشتم منابع مصاحبه مهندسی داده رو بررسی می‌کردم، گفتم چرا همه مطالبی که پیدا می‌کنم رو یک‌جا جمع نکنم. این شد یه سایت ساده که ۱۹۴ درس داره و ۲۸۰۰ سوال واقعی مصاحبه رو یک‌جا جمع کرده. محتوا دو زبانه (فارسی و انگلیسی) هست.

اوپن‌سورس منتشرش کردم. اگه دوست داشتید می‌تونید استار بدید یا مشارکت کنید.

https://github.com/mohammadmaso/dataeng-interview


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

@DevTwitter | <Mohammad Masoudi/>
❤35🔥7👍3
Forwarded from DevTwitter Ads.
اولین پروژه‌ای که ترافیک واقعی گرفت، یه چیزی فهمیدم:

فرق بین کدی که کار می‌کنه و کدی که scale می‌شه، زمین تا آسمونه.

اینجا از این فرق‌ها زیاد حرف می‌زنیم.

https://t.me/+HgGHhDZPg9tlNTU0
🍌119👎10👍5
حالا یک جایگزین رایگان و متن‌باز برای CapCut وجود دارد. بدون واترمارک، بدون نیاز به حساب کاربری و بدون اشتراک.

ویرایشگر ویدیوی Concat برای ویندوز، macOS، لینوکس و اندروید است و بیشتر کارهایی را پوشش می‌دهد که مردم معمولاً برای آن‌ها سراغ CapCut می‌روند:

- زیرنویس خودکار، که روی کامپیوتر خودتان تولید می‌شود

- تبدیل متن به گفتار، به‌علاوه کلون کردن صدا با چند ثانیه صدای نمونه

- حذف پس‌زمینه برای افراد و اشیا

- انیمیشن keyframe با ویرایشگر منحنی (curve editor)

- بیش از ۱۷۰ افکت، فیلتر، ترنزیشن و انیمیشن متن

- ویرایش چندترکی و خروجی 4K

همه‌چیز به‌صورت محلی اجرا می‌شود. مدل‌های هوش مصنوعی برای زیرنویس، صداها و برش پس‌زمینه یک‌بار دانلود می‌شوند و بعد آفلاین کار می‌کنند. فوتیج‌های شما هرگز از سیستم شما خارج نمی‌شوند.

این نرم‌افزار در مرحله بتا است، پس انتظار چند نقص و ناهماهنگی را داشته باشید.

لینک پروژه: github.com/jub0t/concat

@DevTwitter | <Yarad/>
❤16🍌10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
پونصد‌ میلیون توکن رایگان برای استفاده از مدل های زیر :

DeepSeek V4
Qwen3.8-27B
GLM-5.3

در سایت زیر :
https://discovery.intern-ai.org.cn

@DevTwitter | <Reza/>
🍌20❤7👎2
یک تیم کامل سه‌بعدی برای Blender متن‌باز شده؛ از طراحی کانسپت و مدل‌سازی گرفته تا انیمیشن، نورپردازی، دوربین و صدا، همه در قالب یک پلاگین!

معرفی Scenario Plugin؛ ابزاری که می‌تونی مستقیم داخل Blender ازش استفاده کنی یا از طریق MCP به Claude Code وصلش کنی.

قابلیت‌های این پلاگین:

طراح کانسپت (Concept Artist) ساخت تصاویر کانسپت از روی پرامپت و استخراج تصاویر مرجع از نمای فعلی محیط Blender.

هنرمند سه‌بعدی (3D Artist) ساخت Mesh از متن یا عکس و تغییر بافت یا بازسازی مش مدل انتخاب‌شده.

انیماتور (Animator) ریگ کردن کاراکتر انتخاب‌شده و تولید حرکت از روی توضیحات متنی.

هنرمند متریال (Surfacing Artist) اعمال متریال‌های PBR روی اسلات‌های مختلف و ساخت نقشه‌های متریال از روی عکس.

طراح صحنه (Layout Artist) ساخت بلوک‌بندی اولیه صحنه (Greybox) از روی توضیحات و تولید محیط‌ها و آسمان‌های ۳۶۰ درجه.

اپراتور دوربین (Camera Operator) تعریف مسیر حرکت دوربین با یک جمله و ایجاد حرکت‌هایی مثل Orbit، Dolly، Crane و Flyover.

متخصص رندر (Render Artist) تبدیل نمای محیط به تصویر نهایی باکیفیت و تبدیل Playblast به شات نهایی.

طراح صدا (Sound Designer) تولید موسیقی، صداگذاری و افکت‌های صوتی و انتقال آن‌ها به Sequencer پروژه.

نکته جذاب اینجاست که می‌تونی این قابلیت‌ها رو از طریق Claude Code و MCP وارد جریان کاری خودت کنی؛ یعنی به‌جای انجام دستی تک‌تک مراحل، بخشی از فرایند ساخت صحنه و ویدیو رو با دستورهای متنی مدیریت کنی.

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

مخزن GitHub :
https://github.com/scenario-labs/blender-plugin

@DevTwitter | <Yarad/>
❤65🔥47👍2
بزرگترین دیتابیس مواد غذایی فیگ‌فیت با ۱۵۰۰۰ ورودی رو به شکل رایگان منتشر کردیم:
https://kaggle.com/datasets/amirparsadd/figfit-food-database
خوشحال می‌شم ببینم چه چیزایی باهاش می‌سازید

@DevTwitter | <Amirparsa Baghdadi/>
🔥20❤4👍1
داری روی سرور جدیدت با ۵۱۲ هسته Nginx رو کانفیگ می‌کنی، همه‌چیز خوبه و خوشحالی که چه سرور خفنی داری
بعد یهو nginx -s reload می‌زنی و کل سرویس‌ها از دسترس خارج می‌شن

امروز موقع ریلیز یکی از پروژه‌ها متوجه شدیم که Nginx یه محدودیت کمتر شناخته‌شده داره:

NGX_MAX_PROCESSES

مستر برای Child Processها حداکثر 1024 تا Slot داره؛ یعنی Nginx نمی‌تونه بیشتر از این تعداد Process رو همزمان مدیریت کنه.

البته این عدد کاملاً جدا از worker_connections هست که داخل nginx.conf تعیین می‌کنیم و مشخص می‌کنه هر Worker چند Connection می‌تونه داشته باشه.

ضمن اینکه محدودیتی که اینجا راجع بهش صحبت می‌کنم از داخل nginx.conf قابل تغییر نیست و توی سورس Nginx تعریف شده.

حالا اگه worker_processes auto داشته باشی، روی ۵۱۲ Core تقریباً ۵۱۲ تا Worker داری.

موقع Reload هم Nginx اول Workerهای جدید رو بالا میاره و Workerهای قدیمی رو نگه می‌داره تا Connectionهای موجودشون تموم بشه.

یعنی خیلی راحت می‌رسی به:

512 old workers + 512 new workers = 1024

حالا اگه فقط چند تا Worker از Reload قبلی هنوز Gracefully خارج نشده باشن، دیگه برای ساختن همه Workerهای جدید Slot کافی وجود نداره

و اینجاست که فاجعه اتفاق می‌افته:

no more than 1024 processes can be spawned

روی سرورهای خیلی بزرگ، استفاده از worker_processes auto همیشه هم بهترین انتخاب نیست.

پس بهتره همیشه حواسمون به کانفیگ‌هایی که در حالت auto میزان مصرف منابعشون رو بر اساس منابع موجود سرور انتخاب می‌کنن باشه؛ چون چیزی که روی یه سرور معمولی کاملاً منطقیه، روی یه سرور خیلی بزرگ ممکنه ما رو به یه Limit فاجعه‌بار برسونه


@DevTwitter | <Mohammad Falahat/>
❤12🍌3👍2
Forwarded from DevTwitter Ads.
سلام دوستان وقتتون بخیر
امیدوارم سالم و سرحال باشین
این پرسشنامه مربوط به یه کار تحقیقاتی در حوزه پت هست و نهایتاً ۴-۳ دقیقه وقت می‌بره پر کردنش؛ ممنون میشم اگر پت دارید پر کنین.
در انتها هم اگر شماره‌تون رو وارد کنید یه هدیه ناقابلی برای خرید اقلام پت‌، تقدیم‌‌تون میشه 🙏🏻🌱
🍌12👍4👎3
آیا همیشه برای دریافت داده‌های ورودی به یک سرویس اختصاصی نیاز داریم ؟ معرفی RudderStack
به‌عنوان مهندس داده، یکی از اولین قدم‌ها در ساخت یک خط پردازش داده، دریافت رویدادها از کلاینت‌های مختلف و انتقال سریع و قابل‌اعتماد آن‌ها به زیرساختی مثل Kafka است.

بسیاری از تیم‌ها برای این کار سراغ توسعهٔ یک سرویس اختصاصی با زبان‌هایی مثل Go می‌روند؛ اما پیاده‌سازی و نگهداری SDKها، بافرگذاری، ارسال گروهی، تلاش مجدد و مقیاس‌پذیری، خودش به پروژه‌ای جداگانه تبدیل می‌شود.

آیا واقعاً لازم است این بخش را از صفر بسازیم؟

معرفی RudderStack؛ درگاه ورود رویدادها به خطوط پردازش داده
رادراستک (RudderStack) در اصل یک پلتفرم مدیریت داده‌های مشتریان (CDP) است که برای جمع‌آوری، پردازش و انتقال داده‌های رفتاری از وب‌سایت‌ها، اپلیکیشن‌ها و سرویس‌های مختلف به کار می‌رود. بخشی از این پلتفرم به‌صورت متن‌باز ارائه شده است. در این پست، مشخصاً Rudder Server را معرفی می‌کنیم؛ موتور سمت سرور این پلتفرم که وظیفهٔ پردازش و مسیریابی رویدادها را بر عهده دارد و می‌توان از آن به‌عنوان لایهٔ ورود رویدادها به خط پردازش داده، برای مثال پیش از Kafka، استفاده کرد.
معماری پیشنهادی به کمک این ابزار، به شکل زیر خواهد بود :

Client SDK → RudderStack → Kafka → Consumers → ClickHouse

در این معماری، RudderStack رویدادها را از کلاینت‌های مختلف دریافت می‌کند و به Kafka تحویل می‌دهد. سپس مصرف‌کنندگان Kafka مسئول پردازش و تبدیل داده‌ها هستند و در نهایت، داده‌ها می‌توانند در ClickHouse ذخیره شوند.

چه قابلیت‌هایی دارد؟

پشتیبانی از SDKهای متنوع: پشتیبانی از پلتفرم‌هایی مانند JavaScript، iOS، Android، React Native و Flutter و زبان‌هایی مثل Python، Go، Java، .NET و Rust.

ارسال کارآمد: بافرگذاری و ارسال گروهی رویدادها برای کاهش سربار ارتباطات شبکه.

اتصال به Kafka: پشتیبانی از ارسال گروهی پیام‌ها، فشرده‌سازی و قابلیت‌های مرتبط با قالب و اعتبارسنجی داده‌ها.

مقیاس‌پذیری افقی: امکان اجرای چند نمونه پشت Load Balancer برای افزایش ظرفیت دریافت رویدادها.
(هر چند نسخه رایگان آن تک نود هست اما می‌توان با اتخاذ راهکارهایی ، از چند نسخه آن پشت یک Load Balancer استفاده کرد)
میزبانی مستقل: امکان استقرار نسخهٔ متن‌باز در زیرساخت خودمان.

️ چند نکتهٔ عملیاتی

توان عملیاتی واقعی به سخت‌افزار، اندازهٔ رویدادها و تنظیمات وابسته است؛ بنابراین اعداد بنچمارک را باید در محیط خودمان آزمایش کنیم.

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

یک نکتهٔ تکمیلی

اگر مسئلهٔ ما دریافت داده‌های تله‌متری، مانند لاگ، متریک و تریس است، OpenTelemetryCollector هم راهکار مهمی برای دریافت و انتقال این نوع داده‌هاست. اما برای رخدادهای محصول و کسب‌وکار، مانند کلیک کاربران، ثبت سفارش و فعالیت اپلیکیشن‌ها، RudderStack می‌تواند گزینه‌ای برای لایهٔ ورود رویدادها باشد.

کد منبع: https://github.com/rudderlabs/rudder-server
وب‌سایت: https://www.rudderstack.com/

@DevTwitter | <Mojtaba Banaie/>
مدیریت JWT در اندروید؛ Retrofit یا Ktor Client؟

در بررسی احراز هویت با JWT، یکی از نکاتی که برام جالب بود، تفاوت رویکرد Retrofit و Ktor Client در مدیریت توکن‌هاست.

استفاده از Retrofit + OkHttp: برای پروژه‌های Native Android گزینه‌ای جاافتاده‌ست. با Interceptor و Authenticator می‌تونیم ارسال توکن و مدیریت پاسخ‌های 401 و فرایند Refresh رو پیاده‌سازی کنیم؛ البته بخش مهمی از این منطق به طراحی و کدنویسی خودمون نیاز داره.

استفاده از Ktor Client: با پلاگین Auth و قابلیت Bearer Authentication، بخشی از این فرایند رو ساده‌تر می‌کنه. همچنین برای پروژه‌های Kotlin Multiplatform گزینه مناسبیه.

البته در هر دو روش، ذخیره امن توکن‌ها، مدیریت خطاها و جلوگیری از Refresh هم‌زمان درخواست‌ها اهمیت زیادی داره.

در نهایت، انتخاب منوط به نیاز پروژه‌ست؛ Retrofit برای Native Android اکوسیستم جاافتاده‌ای داره و Ktor هم با قابلیت‌های داخلی و پشتیبانی از Multiplatform انعطاف خوبی ارائه می‌ده.

AndroidDevelopment Kotlin JWT Retrofit Ktor Authentication
برنامه_نویسی اندروید برنامه_نویس_اندروید

@DevTwitter | <Amir Hossein Jalili/>