کوئرا با ۳۰۰ میلیون کاربر ماهانه، ۲۵,۰۰۰+ سوال روزانه، و ۱۰+ سال فعالیت، دیتابیسش میدونی چیه؟ MySQL! دهها ترابایت داده و صدها هزار QPS. و اومدن شدیدا بهینهش کردن، چطوری؟
اینا میبینن بار دیتابیس (Database Load) با رشد کاربران، پتابایتها بیشتر و با ویژگیهای ML محصولاتشون بالاتر هم میره، و البته اسپمرها هم یه بخشی ازین بار بودن.
بار دیتابیسشون تو خواندن (Reads) (۷۰٪ ترافیک)، حجم داده (Data Volume) ( که رشد ۲۰۰٪ تو ۵ سال داشت)، و نوشتن (Writes) (کم اما حساس) بود. کوئرا برای بهینهسازی روی خواندن و حجم داده تمرکز کرد، چون ترافیک بیشترشون سمت خواندن بود.
اسکنهای بزرگ رو با LIMIT و صفحهبندی (Pagination) بهینه کردن. این کار از اسکن غیرضروری جلوگیری کرد و پرفومنس کوئریها رو تا ۶۰٪ سریعتر کرد.
برای کوئریهای کند، ایندکسها رو دوباره طراحی کردن، ستونهای غیرضروری حذف شدن، ORDER BY به کلاینت منتقل شد، و کوئریهای غیرضروری هم حذف شدند. و بار CPU ۵۰٪ کم شد.
برای High QPS، کوئرا کش رو بهینه کرد. کلید کش (Cache Key) به uid تغییر داد تا QPS رو بیش از ۹۰٪ کم کنه.
برای حجم داده ها، کوئرا MyRocks که فیسبوک توسعه داده بود رو برای شاردهای قدیمی MySQL استفاده کرد. این کار فضا رو تا ۸۰٪ برای برخی جدولها و ۵۰-۶۰٪ برای بقیه کاهش داد.
مای راک با فشردهسازی بهتر، IO رو کم کرد و زمان بکاپ/ریستور رو ۵۰٪ سریعتر کرد. شاردهای قدیمی (بیش از ۱۸ ماه) به MyRocks منتقل شدند.
برای نوشتن، lag رپلیکیشن رو با رپلیکیشن موازی Parallel ( توی mysql تنظیماتش slave_parallel_type یا شبیه شه) حل کردن تا بار رو بهتر توزیع کنه.
یعنی یه تاخیری بین دیتابیس مادر با رپلیکا به وجود میومد که رو برداشتن سیستمش رو موازی کردن، مشکلش چی بود؟ وقتی رپلیکا داره میخونه یا مینویسه ممکنه خیلی زمان بر بشه یا transaction دیتابیس مادر خیلی زمانبر باشه رپلیکا مجبور بشه صبر کنه تا تراکنش تموم بشه بعد تغییرات رو اعمال کنه
خلاصه اینکه نتیجه این شد که کوئرا:
- با بهینهسازی کش و کوئریها
- استفاده از MyRocks،
- و رپلیکیشن موازی
بار رو برای ۳۰۰ میلیون کاربر روی دیتابیس MySQL کاهش داد.
@DevTwitter | <Saman/>
اینا میبینن بار دیتابیس (Database Load) با رشد کاربران، پتابایتها بیشتر و با ویژگیهای ML محصولاتشون بالاتر هم میره، و البته اسپمرها هم یه بخشی ازین بار بودن.
بار دیتابیسشون تو خواندن (Reads) (۷۰٪ ترافیک)، حجم داده (Data Volume) ( که رشد ۲۰۰٪ تو ۵ سال داشت)، و نوشتن (Writes) (کم اما حساس) بود. کوئرا برای بهینهسازی روی خواندن و حجم داده تمرکز کرد، چون ترافیک بیشترشون سمت خواندن بود.
اسکنهای بزرگ رو با LIMIT و صفحهبندی (Pagination) بهینه کردن. این کار از اسکن غیرضروری جلوگیری کرد و پرفومنس کوئریها رو تا ۶۰٪ سریعتر کرد.
برای کوئریهای کند، ایندکسها رو دوباره طراحی کردن، ستونهای غیرضروری حذف شدن، ORDER BY به کلاینت منتقل شد، و کوئریهای غیرضروری هم حذف شدند. و بار CPU ۵۰٪ کم شد.
برای High QPS، کوئرا کش رو بهینه کرد. کلید کش (Cache Key) به uid تغییر داد تا QPS رو بیش از ۹۰٪ کم کنه.
برای حجم داده ها، کوئرا MyRocks که فیسبوک توسعه داده بود رو برای شاردهای قدیمی MySQL استفاده کرد. این کار فضا رو تا ۸۰٪ برای برخی جدولها و ۵۰-۶۰٪ برای بقیه کاهش داد.
مای راک با فشردهسازی بهتر، IO رو کم کرد و زمان بکاپ/ریستور رو ۵۰٪ سریعتر کرد. شاردهای قدیمی (بیش از ۱۸ ماه) به MyRocks منتقل شدند.
برای نوشتن، lag رپلیکیشن رو با رپلیکیشن موازی Parallel ( توی mysql تنظیماتش slave_parallel_type یا شبیه شه) حل کردن تا بار رو بهتر توزیع کنه.
یعنی یه تاخیری بین دیتابیس مادر با رپلیکا به وجود میومد که رو برداشتن سیستمش رو موازی کردن، مشکلش چی بود؟ وقتی رپلیکا داره میخونه یا مینویسه ممکنه خیلی زمان بر بشه یا transaction دیتابیس مادر خیلی زمانبر باشه رپلیکا مجبور بشه صبر کنه تا تراکنش تموم بشه بعد تغییرات رو اعمال کنه
خلاصه اینکه نتیجه این شد که کوئرا:
- با بهینهسازی کش و کوئریها
- استفاده از MyRocks،
- و رپلیکیشن موازی
بار رو برای ۳۰۰ میلیون کاربر روی دیتابیس MySQL کاهش داد.
@DevTwitter | <Saman/>
1🔥67👍15❤2
This media is not supported in your browser
VIEW IN TELEGRAM
ساخت اپ آب و هوا با cursor فقط در یک ساعت
خب دوستان از اونجایی که امروزه خیلی از cursor می شنویم تصمیم گرفتم یه برنامه باهاش بنویسم.
برنامه با Python ساخته شده و به صورت API call آب و هوای شهری که بهش میدید، موقعیت ابر ها و خیلی اطلاعات دیگه رو نشون میده.
حالا نکته جالب اینه که، من خودم هیچ کدی نزدم، تمام برنامه رو خود cursor نوشته.
اگه جایی نیاز بوده پکیجی نصب کنه، خودش کرده، جایی نیاز به دیباگ داشته خودش کرده و خلاصه این که تمام کارهارو خودش کرد و من فقط بهش پرامت دادم، همین
بهتون پیشنهاد میکنم حتما ازش استفاده کنید و سرعت برنامه نویسی تون رو چند برابر کنید.
کد پروژه رو هم توی گیت هاب گذاشتم اگه دوست داشتید نگاه و کنید و اگه خوشتون اومد خوشحال میشم که استار هم بدید. ممنون
https://github.com/MahdiAjam/wheather-app
@DevTwitter | <Mahdi Ajam/>
خب دوستان از اونجایی که امروزه خیلی از cursor می شنویم تصمیم گرفتم یه برنامه باهاش بنویسم.
برنامه با Python ساخته شده و به صورت API call آب و هوای شهری که بهش میدید، موقعیت ابر ها و خیلی اطلاعات دیگه رو نشون میده.
حالا نکته جالب اینه که، من خودم هیچ کدی نزدم، تمام برنامه رو خود cursor نوشته.
اگه جایی نیاز بوده پکیجی نصب کنه، خودش کرده، جایی نیاز به دیباگ داشته خودش کرده و خلاصه این که تمام کارهارو خودش کرد و من فقط بهش پرامت دادم، همین
بهتون پیشنهاد میکنم حتما ازش استفاده کنید و سرعت برنامه نویسی تون رو چند برابر کنید.
کد پروژه رو هم توی گیت هاب گذاشتم اگه دوست داشتید نگاه و کنید و اگه خوشتون اومد خوشحال میشم که استار هم بدید. ممنون
https://github.com/MahdiAjam/wheather-app
@DevTwitter | <Mahdi Ajam/>
👎72👍42🔥4❤2
سیای/سیدی [CI/CD] چیست و چرا مهم است؟
سیای CI [ادغام مداوم] : یعنی هر تغییری که توسعهدهندگان در کد ایجاد میکنند، بهطور منظم در یک مخزن مشترک (مثل GitHub یا GitLab) ادغام شود. پس از هر تغییر، تستهای خودکار اجرا میشوند تا از سازگاری و عملکرد صحیح کد اطمینان حاصل شود.
سیدی CD [استقرار مداوم] : یعنی پس از تأیید صحت کد، تغییرات بهطور خودکار در محیط تولید مستقر شوند. این فرایند، انتشار ویژگیهای جدید را سریعتر و بدون نیاز به مداخله دستی ممکن میسازد.
مزایای سیای/سیدی [CI/CD]
- کیفیت بالاتر - کد با تستهای خودکار
- انتشار سریعتر - با خودکارسازی فرایندها
- کاهش ریسک - با تست و بررسی مداوم
- رفع سریع مشکلات - با امکان بازگشت به نسخه قبلی
@DevTwitter | <Amirreza Ebrahimi/>
سیای CI [ادغام مداوم] : یعنی هر تغییری که توسعهدهندگان در کد ایجاد میکنند، بهطور منظم در یک مخزن مشترک (مثل GitHub یا GitLab) ادغام شود. پس از هر تغییر، تستهای خودکار اجرا میشوند تا از سازگاری و عملکرد صحیح کد اطمینان حاصل شود.
سیدی CD [استقرار مداوم] : یعنی پس از تأیید صحت کد، تغییرات بهطور خودکار در محیط تولید مستقر شوند. این فرایند، انتشار ویژگیهای جدید را سریعتر و بدون نیاز به مداخله دستی ممکن میسازد.
مزایای سیای/سیدی [CI/CD]
- کیفیت بالاتر - کد با تستهای خودکار
- انتشار سریعتر - با خودکارسازی فرایندها
- کاهش ریسک - با تست و بررسی مداوم
- رفع سریع مشکلات - با امکان بازگشت به نسخه قبلی
@DevTwitter | <Amirreza Ebrahimi/>
🔥39👍23👎1
یه راه حل خیلی ساده برای بالا بردن performance برنامههایی که با PHP نوشتیم:
یکی از مشکلاتی که در PHP وجود داره، مقیاسپذیری و سرعت پایین پردازشهای همزمان هست. یکی از راه حلها استفاده از FrankenPHP میتونه باشه.
در حالت عادی، وقتی برنامه PHP اجرا میشه، هر بار که درخواست جدیدی میاد، PHP باید اسکریپتها رو از نو بارگذاری کنه. این فرآیند باعث میشه که زمان بارگذاری و پاسخدهی افزایش پیدا کنه، مخصوصاً توی برنامههای سنگین یا با ترافیک بالا.
اما با FrankenPHP، این فرآیند تغییر میکنه. FrankenPHP به جای اینکه هر بار اسکریپتها رو دوباره بازگذاری کنه، فقط یک بار فایلهای PHP رو کش میکنه و از همون نسخه کش شده برای درخواستهای بعدی استفاده میکنه. این یعنی توی درخواستهای بعدی دیگه نیاز به اجرای دوباره نیست و PHP خیلی سریعتر جواب میده.
مزایاش چیه؟
سرعت بیشتر: با استفاده از FrankenPHP، کدهای PHP سریعتر اجرا میشن. این یعنی میتونید تعداد درخواستهای بیشتری رو در یک زمان پردازش کنید و بار ترافیکی بالا رو بهتر مدیریت کنید.
برای میکروسرویسها مناسبه: اگر دارید یک سیستم میکروسرویسی میسازید، FrankenPHP میتونه به شدت کمک کنه چون برای این نوع معماری ساخته شده و سرعت و مقیاسپذیری بالایی داره.
مقیاسپذیری راحتتر: FrankenPHP به شما این امکان رو میده که به راحتی مقیاس پروژههاتون رو افزایش بدید بدون اینکه از سرعت و عملکرد کم بشه.
پردازش همزمان: این پلتفرم کمک میکنه که پردازشهای سنگین رو در پسزمینه انجام بدید و در عین حال از سرعت کلی سیستم کاسته نشه.
اگر برنامهای دارید که باید با سرعت بالا به درخواستها پاسخ بده یا نیاز به مقیاسپذیری بیشتر در محیطهای ابری داره، یه سر به FrankenPHP بزنید. با Laravel Octane هم خیلی راحت میشه از FrankenPHP در لاراول استفاده کرد.
@DevTwitter | <Iman Rajabi/>
یکی از مشکلاتی که در PHP وجود داره، مقیاسپذیری و سرعت پایین پردازشهای همزمان هست. یکی از راه حلها استفاده از FrankenPHP میتونه باشه.
در حالت عادی، وقتی برنامه PHP اجرا میشه، هر بار که درخواست جدیدی میاد، PHP باید اسکریپتها رو از نو بارگذاری کنه. این فرآیند باعث میشه که زمان بارگذاری و پاسخدهی افزایش پیدا کنه، مخصوصاً توی برنامههای سنگین یا با ترافیک بالا.
اما با FrankenPHP، این فرآیند تغییر میکنه. FrankenPHP به جای اینکه هر بار اسکریپتها رو دوباره بازگذاری کنه، فقط یک بار فایلهای PHP رو کش میکنه و از همون نسخه کش شده برای درخواستهای بعدی استفاده میکنه. این یعنی توی درخواستهای بعدی دیگه نیاز به اجرای دوباره نیست و PHP خیلی سریعتر جواب میده.
مزایاش چیه؟
سرعت بیشتر: با استفاده از FrankenPHP، کدهای PHP سریعتر اجرا میشن. این یعنی میتونید تعداد درخواستهای بیشتری رو در یک زمان پردازش کنید و بار ترافیکی بالا رو بهتر مدیریت کنید.
برای میکروسرویسها مناسبه: اگر دارید یک سیستم میکروسرویسی میسازید، FrankenPHP میتونه به شدت کمک کنه چون برای این نوع معماری ساخته شده و سرعت و مقیاسپذیری بالایی داره.
مقیاسپذیری راحتتر: FrankenPHP به شما این امکان رو میده که به راحتی مقیاس پروژههاتون رو افزایش بدید بدون اینکه از سرعت و عملکرد کم بشه.
پردازش همزمان: این پلتفرم کمک میکنه که پردازشهای سنگین رو در پسزمینه انجام بدید و در عین حال از سرعت کلی سیستم کاسته نشه.
اگر برنامهای دارید که باید با سرعت بالا به درخواستها پاسخ بده یا نیاز به مقیاسپذیری بیشتر در محیطهای ابری داره، یه سر به FrankenPHP بزنید. با Laravel Octane هم خیلی راحت میشه از FrankenPHP در لاراول استفاده کرد.
@DevTwitter | <Iman Rajabi/>
👍32👎10🔥2
اگه از طرفداران پر و پا قرص لینوکس یا DevOps هستین، احتمالا زیاد با دستور systemctl سروکار دارین. ولی میدونستین این دو تا ترفند کاربردی چقدر میتونن سرعت و راحتی کارتون رو بیشتر کنن؟
چک کردن وضعیت سرویس با PID گاهی یه PID داریم ولی نمیدونیم مال کدوم سرویسه؟ نگران نباشین:
<systemctl status <PID
اینطوری سریع میفهمین PID مورد نظرتون مربوط به چه سرویسیه و وضعیت فعلی و لاگهاش رو هم چک میکنین!
یه نگاه سریع به کانفیگ سرویسها دیگه لازم نیست تو پوشهها دنبال فایل کانفیگ بگردین! فقط کافیه بزنین:
systemctl cat <service>
اینجوری تنظیماتی رو که systemd داره استفاده میکنه، راحت و بیدردسر میبینین!
@DevTwitter | <Mathis Abbaszadeh/>
چک کردن وضعیت سرویس با PID گاهی یه PID داریم ولی نمیدونیم مال کدوم سرویسه؟ نگران نباشین:
<systemctl status <PID
اینطوری سریع میفهمین PID مورد نظرتون مربوط به چه سرویسیه و وضعیت فعلی و لاگهاش رو هم چک میکنین!
یه نگاه سریع به کانفیگ سرویسها دیگه لازم نیست تو پوشهها دنبال فایل کانفیگ بگردین! فقط کافیه بزنین:
systemctl cat <service>
اینجوری تنظیماتی رو که systemd داره استفاده میکنه، راحت و بیدردسر میبینین!
@DevTwitter | <Mathis Abbaszadeh/>
👍53🔥5❤1
This media is not supported in your browser
VIEW IN TELEGRAM
گوگل به صورت رسمی "Data Science Agent" رو معرفی کرد که به نظر جالب میاد ولی مثل هر مدل دیگه ای نیاز به نظارت شما داره
1- فایلتون رو آپلود میکنید
2- به زبان ساده بش میگید چی میخواین؟ مثلا شکل بکشه؟
3- مرحله به مرحله براتون کد میزنه
لینک:
http://colab.google
@DevTwitter | <Sam92/>
1- فایلتون رو آپلود میکنید
2- به زبان ساده بش میگید چی میخواین؟ مثلا شکل بکشه؟
3- مرحله به مرحله براتون کد میزنه
لینک:
http://colab.google
@DevTwitter | <Sam92/>
👍29👎1
دستور netstat ابزاری برای چک کردن پورت های باز سیستم بود
netstat -tulnp
گرچه هنوز میتوان از ان استفاده کرد ولی از سال ۲۰۱۱ دیگر توسعه نیافته
جایگزین آن دستور ss است
ss -tulnp
@DevTwitter | <MehrdadLinux/>
netstat -tulnp
گرچه هنوز میتوان از ان استفاده کرد ولی از سال ۲۰۱۱ دیگر توسعه نیافته
جایگزین آن دستور ss است
ss -tulnp
@DevTwitter | <MehrdadLinux/>
👍22❤3
یه پکیج خفن برای کوتاه کردن لینکها توسعه دادم!
سلام رفقا! اخیراً یه پکیج برای لاراول نوشتم که میتونید باهاش لینکهاتون رو کوتاه کنید، آمار بازدید بگیرید و کلی امکانات دیگه!
ویژگیهای پکیج:
- کوتاه کردن لینکها با یه API ساده
- نمایش آمار بازدید هر لینک
- قابل استفاده توی هر پروژهی لاراولی
- نیاز به لاگین داره تا هر کاربر لینکهای خودشو ببینه
نصبش هم خیلی راحته.
سورسکدش رو اینجا گذاشتم:
https://github.com/Saberqadimi/link-shortener
@DevTwitter | <Saber Qadimi/>
سلام رفقا! اخیراً یه پکیج برای لاراول نوشتم که میتونید باهاش لینکهاتون رو کوتاه کنید، آمار بازدید بگیرید و کلی امکانات دیگه!
ویژگیهای پکیج:
- کوتاه کردن لینکها با یه API ساده
- نمایش آمار بازدید هر لینک
- قابل استفاده توی هر پروژهی لاراولی
- نیاز به لاگین داره تا هر کاربر لینکهای خودشو ببینه
نصبش هم خیلی راحته.
سورسکدش رو اینجا گذاشتم:
https://github.com/Saberqadimi/link-shortener
@DevTwitter | <Saber Qadimi/>
👍30❤6👎3
Media is too big
VIEW IN TELEGRAM
ابزار trae.ai یه IDE رایگان و جایگزین Cursor هست. بهصورت کاملاً رایگان و بدون محدودیت به Cloud 3.7 دسترسی دارین!
https://www.trae.ai/
@DevTwitter | <Milad Varvaei/>
https://www.trae.ai/
@DevTwitter | <Milad Varvaei/>
👎31👍30🔥3❤2
سیستم recommender اسپاتیفای چطور برای ۵۰۰+ میلیون کاربر ماهانه پیشنهادهای شخصیشده میده؟
با الگوریتمهای ماشین لرنینگ، فیلترینگ هوشمند و تحلیل صوتی، دادههای عظیم رو پردازش میکنه.
چطور این کار رو میکنن؟
اسپاتیفای دادههای موسیقی رو به متادیتا (مثل ژانر، آلبوم) و سیگنالهای صوتی (مثل BPM، Loudness، Danceability) تقسیم میکنه.
با تحلیل صوتی، ویژگیهایی مثل انرژی و Valence استخراج میشه
مثلاً "When I Was Your Man" از برونو مارس با ۷۳ BPM، ترکی کمانرژی اما رقصپذیر شناسایی میشه
برای تحلیل متنی، اسپاتیفای از پردازش زبان طبیعی (NLP) استفاده میکنه.
مدلهای NLP متن آهنگها، نظرات کاربران و عناوین پلیلیستها رو بررسی میکنن تا احساسات و مضامین (مثل غم یا شادی) رو تشخیص بدن.
الگوریتمهای ریکامندر از فیلترهای collabrative یا مشارکتی (User-based/Item-based) و فیلترینگ مبتنی بر محتوا (Content-based) بهره میبرن.
با این ماتریکس، اینا شباهتهای رفتاری کاربران رو پیدا میکنن و ترکهای مرتبط (مثل Blank Space) رو پیشنهاد میدن.
برای بهبود مداوم، اسپاتیفای از حلقه بازخورد (Feedback Loop) استفاده میکنه.
دادههای تعامل کاربر (مثل ذخیره یا اسکیپ کردن) با Reinforcement Learning تحلیل میشن تا مدلها دقیقتر بشن.
راستی، اسپاتیفای میتونه با محیط کاربر هماهنگ بشه؟ بله.
چطور؟
اینا الگوریتمشون با دادههایی مثل زمان، موقعیت جغرافیایی و آبوهوا، پلیلیستهایی متناسب با حال و هوا میسازن، مثلاً موسیقی آرام برای روزهای بارانی.
این هماهنگی با APIهای خارجی (هواشناسی، GPS) و دادههای داخلی (زمان سیستم) ممکن میشه. مدلهای پیشبینی کننده (Predictive Models) این اطلاعات رو با خوشهبندی (Clustering) ترکیب میکنن تا پیشنهادهای متناسب ارائه بدن.
تاریخچه گوش دادن کاربر با الگوریتمهای یادگیری ماشین تحلیل میشه تا الگوهای رفتاری شناسایی بشن. اگر صبحها موسیقی شاد گوش کنی، سیستم پیشنهادهای پرانرژی برای صبحها میده.
یه چیز دیگه اینکه ویژگی DJ مجازی با هوش مصنوعی مولد (Generative AI) و NLP پیادهسازی شده.
این سیستم دیالوگهایی تولید میکنه که متناسب با موسیقی و حال و هوای تو باشن، و با تعاملات کاربر بهبود مییابد.
یه چیز جالب از چالشهاشون این بود که "Cold Start Problem" برای هنرمندان جدید بود.
بدون وجود داشتن داده کاربر، پیشنهاد دادنشون سخته. اسپاتیفای با تصحیح انسانی (یعنی مثلا آدم میاد وسط اینجا سلکتش میکنه) و تحلیل صوتی این مشکل رو حل میکنه.
مشکل بعدی حباب فیلترینگ (Filter Bubble) هست. فیلترنگ مشارکتی ممکنه فقط ترکهای مشابه پیشنهاد بده و تنوع رو محدود کنه.
این با کلاسترایز کردن بیشازحد در ماتریسهای رکامندر رخ میده.
یه چیز دیگه هم اینکه نگرانی حریم خصوصی هم هست. جمعآوری دادههایی مثل موقعیت و تاریخچه گوش دادن نیاز به رمزنگاری قوی و شفافیت در سیاستهای حریم خصوصی داره تا اعتماد کاربران حفظ بشه.
خلاصه اینکه اسپاتیفای با تلفیق انسان و ماشین (مثل ویراستاران انسانی) تنوع و عدالت رو در پیشنهادها تضمین میکنه تا همه ژانرها و فرهنگها دیده بشن.
نتیجه اینکه اسپاتیفای با ترکیب فیلترنگ مشارکتی/محتوایی، یادگیری تقویتی، دادههای محیطی و نظارت انسانی، سیستمی مقیاسپذیر و عادلانه ساخته که موسیقی رو شخصی و متنوع میکنه.
این داستان چه درسهایی برای ما داره:
۱) در دادههای بزرگ، الگوریتمهای ترکیبی میتونن کلید مقیاسپذیری باشن
۲) حلقه بازخورد (Feedback Loop) برای بهبود مداوم ضروری است،
۳) تعادل بین تکنولوژی و انسان برای تنوع و اخلاق حیاتیست.
@DevTwitter | <Saman/>
با الگوریتمهای ماشین لرنینگ، فیلترینگ هوشمند و تحلیل صوتی، دادههای عظیم رو پردازش میکنه.
چطور این کار رو میکنن؟
اسپاتیفای دادههای موسیقی رو به متادیتا (مثل ژانر، آلبوم) و سیگنالهای صوتی (مثل BPM، Loudness، Danceability) تقسیم میکنه.
با تحلیل صوتی، ویژگیهایی مثل انرژی و Valence استخراج میشه
مثلاً "When I Was Your Man" از برونو مارس با ۷۳ BPM، ترکی کمانرژی اما رقصپذیر شناسایی میشه
برای تحلیل متنی، اسپاتیفای از پردازش زبان طبیعی (NLP) استفاده میکنه.
مدلهای NLP متن آهنگها، نظرات کاربران و عناوین پلیلیستها رو بررسی میکنن تا احساسات و مضامین (مثل غم یا شادی) رو تشخیص بدن.
الگوریتمهای ریکامندر از فیلترهای collabrative یا مشارکتی (User-based/Item-based) و فیلترینگ مبتنی بر محتوا (Content-based) بهره میبرن.
با این ماتریکس، اینا شباهتهای رفتاری کاربران رو پیدا میکنن و ترکهای مرتبط (مثل Blank Space) رو پیشنهاد میدن.
برای بهبود مداوم، اسپاتیفای از حلقه بازخورد (Feedback Loop) استفاده میکنه.
دادههای تعامل کاربر (مثل ذخیره یا اسکیپ کردن) با Reinforcement Learning تحلیل میشن تا مدلها دقیقتر بشن.
راستی، اسپاتیفای میتونه با محیط کاربر هماهنگ بشه؟ بله.
چطور؟
اینا الگوریتمشون با دادههایی مثل زمان، موقعیت جغرافیایی و آبوهوا، پلیلیستهایی متناسب با حال و هوا میسازن، مثلاً موسیقی آرام برای روزهای بارانی.
این هماهنگی با APIهای خارجی (هواشناسی، GPS) و دادههای داخلی (زمان سیستم) ممکن میشه. مدلهای پیشبینی کننده (Predictive Models) این اطلاعات رو با خوشهبندی (Clustering) ترکیب میکنن تا پیشنهادهای متناسب ارائه بدن.
تاریخچه گوش دادن کاربر با الگوریتمهای یادگیری ماشین تحلیل میشه تا الگوهای رفتاری شناسایی بشن. اگر صبحها موسیقی شاد گوش کنی، سیستم پیشنهادهای پرانرژی برای صبحها میده.
یه چیز دیگه اینکه ویژگی DJ مجازی با هوش مصنوعی مولد (Generative AI) و NLP پیادهسازی شده.
این سیستم دیالوگهایی تولید میکنه که متناسب با موسیقی و حال و هوای تو باشن، و با تعاملات کاربر بهبود مییابد.
یه چیز جالب از چالشهاشون این بود که "Cold Start Problem" برای هنرمندان جدید بود.
بدون وجود داشتن داده کاربر، پیشنهاد دادنشون سخته. اسپاتیفای با تصحیح انسانی (یعنی مثلا آدم میاد وسط اینجا سلکتش میکنه) و تحلیل صوتی این مشکل رو حل میکنه.
مشکل بعدی حباب فیلترینگ (Filter Bubble) هست. فیلترنگ مشارکتی ممکنه فقط ترکهای مشابه پیشنهاد بده و تنوع رو محدود کنه.
این با کلاسترایز کردن بیشازحد در ماتریسهای رکامندر رخ میده.
یه چیز دیگه هم اینکه نگرانی حریم خصوصی هم هست. جمعآوری دادههایی مثل موقعیت و تاریخچه گوش دادن نیاز به رمزنگاری قوی و شفافیت در سیاستهای حریم خصوصی داره تا اعتماد کاربران حفظ بشه.
خلاصه اینکه اسپاتیفای با تلفیق انسان و ماشین (مثل ویراستاران انسانی) تنوع و عدالت رو در پیشنهادها تضمین میکنه تا همه ژانرها و فرهنگها دیده بشن.
نتیجه اینکه اسپاتیفای با ترکیب فیلترنگ مشارکتی/محتوایی، یادگیری تقویتی، دادههای محیطی و نظارت انسانی، سیستمی مقیاسپذیر و عادلانه ساخته که موسیقی رو شخصی و متنوع میکنه.
این داستان چه درسهایی برای ما داره:
۱) در دادههای بزرگ، الگوریتمهای ترکیبی میتونن کلید مقیاسپذیری باشن
۲) حلقه بازخورد (Feedback Loop) برای بهبود مداوم ضروری است،
۳) تعادل بین تکنولوژی و انسان برای تنوع و اخلاق حیاتیست.
@DevTwitter | <Saman/>
👍61❤7🔥5👎1
اگه دوست دارید یک پروژه جالب و کاربردی بنویسید این یک ایده جالب:
با یک تیر چند نشون میزنید. هم به صورت end-to-end یک AI Assistatnt پیاده سازی میکنید و کلی چیز جدید یاد میگیرید. هم اینکه یک اپلیکیشن کاربردی نوشتید که میتونید واقعا استفاده کنید. حتا ازش درامد داشته باشید. بریم سراغ ایده!
(خلاصه ایده را با chatGPT نوشتم که راحت تره!)
ساخت یک "مغز دوم" با دستیار هوش مصنوعی با استفاده از LLM و RAG
در دنیای پرسرعت امروز، مدیریت اطلاعات به یک چالش بزرگ تبدیل شده است. یک دستیار هوش مصنوعی به عنوان "مغز دوم" میتواند با سازماندهی، بازیابی و تولید دانش از اطلاعات شخصی یا حرفهای، به شما کمک کند. ترکیب مدلهای زبانی بزرگ (LLM) با بازیابی افزوده به تولید (RAG) این فرآیند را هوشمندتر و دقیقتر میکند.
چرا از RAG استفاده کنیم؟
مدلهای زبانی فقط بر اساس دادههای از پیش آموزشدیده شده پاسخ میدهند که ممکن است قدیمی یا نادقیق باشند. اما RAG امکان بازیابی اطلاعات بهروز و مرتبط از منابع مختلف را فراهم میکند. این ویژگی برای یک مغز دوم ایدهآل است، چون میتواند در لحظه از یادداشتهای شخصی، اسناد و منابع خارجی اطلاعات استخراج کند.
اجزای کلیدی:
ذخیرهسازی و ایندکسگذاری: استفاده از دیتابیسهای برداری (مثل Qdrant یا Milvus) برای ذخیره و بازیابی یادداشتها، ایمیلها و اسناد.
اتصال به LLM: ترکیب با مدلهایی مثل GPT یا Mistral برای تولید پاسخهای هوشمند بر اساس محتوای بازیابیشده.
رابط تلگرام: استفاده از یک چتبات در تلگرام برای تعامل سریع و راحت با دستیار.
وبهوکها و خودکارسازی: دریافت و بروزرسانی خودکار دادهها برای نگه داشتن اطلاعات همیشه جدید و در دسترس.
کاربردها:
مدیریت دانش شخصی: ذخیره و بازیابی یادداشتهای جلسه، مقالات و ایدهها.
کمک به انجام کارها و پروژهها: ارائه پیشنهادات هوشمند در مورد کارهای در حال انجام.
مطالعه و تحقیق: خلاصهسازی مقالات، پیگیری مفاهیم و تولید یادداشتهای مطالعاتی.
@DevTwitter | <Mehdi Allahyari/>
با یک تیر چند نشون میزنید. هم به صورت end-to-end یک AI Assistatnt پیاده سازی میکنید و کلی چیز جدید یاد میگیرید. هم اینکه یک اپلیکیشن کاربردی نوشتید که میتونید واقعا استفاده کنید. حتا ازش درامد داشته باشید. بریم سراغ ایده!
(خلاصه ایده را با chatGPT نوشتم که راحت تره!)
ساخت یک "مغز دوم" با دستیار هوش مصنوعی با استفاده از LLM و RAG
در دنیای پرسرعت امروز، مدیریت اطلاعات به یک چالش بزرگ تبدیل شده است. یک دستیار هوش مصنوعی به عنوان "مغز دوم" میتواند با سازماندهی، بازیابی و تولید دانش از اطلاعات شخصی یا حرفهای، به شما کمک کند. ترکیب مدلهای زبانی بزرگ (LLM) با بازیابی افزوده به تولید (RAG) این فرآیند را هوشمندتر و دقیقتر میکند.
چرا از RAG استفاده کنیم؟
مدلهای زبانی فقط بر اساس دادههای از پیش آموزشدیده شده پاسخ میدهند که ممکن است قدیمی یا نادقیق باشند. اما RAG امکان بازیابی اطلاعات بهروز و مرتبط از منابع مختلف را فراهم میکند. این ویژگی برای یک مغز دوم ایدهآل است، چون میتواند در لحظه از یادداشتهای شخصی، اسناد و منابع خارجی اطلاعات استخراج کند.
اجزای کلیدی:
ذخیرهسازی و ایندکسگذاری: استفاده از دیتابیسهای برداری (مثل Qdrant یا Milvus) برای ذخیره و بازیابی یادداشتها، ایمیلها و اسناد.
اتصال به LLM: ترکیب با مدلهایی مثل GPT یا Mistral برای تولید پاسخهای هوشمند بر اساس محتوای بازیابیشده.
رابط تلگرام: استفاده از یک چتبات در تلگرام برای تعامل سریع و راحت با دستیار.
وبهوکها و خودکارسازی: دریافت و بروزرسانی خودکار دادهها برای نگه داشتن اطلاعات همیشه جدید و در دسترس.
کاربردها:
مدیریت دانش شخصی: ذخیره و بازیابی یادداشتهای جلسه، مقالات و ایدهها.
کمک به انجام کارها و پروژهها: ارائه پیشنهادات هوشمند در مورد کارهای در حال انجام.
مطالعه و تحقیق: خلاصهسازی مقالات، پیگیری مفاهیم و تولید یادداشتهای مطالعاتی.
@DevTwitter | <Mehdi Allahyari/>
👍30👎4
سلام دوستان
یه راه برای تسلط به مهندسی نرم افزار اینه که موارد زیر رو در پیاده سازی یک پروژه با هم ترکیب کنید.
1. Domain driven design
2. Hexagonal Architecture
3. Secure by Design
4. Clean Architecture
5. Onion Architecture
6. SOLID Principles
7. Software Design Patterns
لینک پروژه Domain-Driven Hexagon رو که چنین کاری کرده براتون میذارم که با node.js پیاده سازی شده.
اگر فرصت دارید برای مطالعه آن وقت بذارید تا level up بشید.
https://github.com/Sairyss/domain-driven-hexagon
@DevTwitter | <Pouria Jahandideh/>
یه راه برای تسلط به مهندسی نرم افزار اینه که موارد زیر رو در پیاده سازی یک پروژه با هم ترکیب کنید.
1. Domain driven design
2. Hexagonal Architecture
3. Secure by Design
4. Clean Architecture
5. Onion Architecture
6. SOLID Principles
7. Software Design Patterns
لینک پروژه Domain-Driven Hexagon رو که چنین کاری کرده براتون میذارم که با node.js پیاده سازی شده.
اگر فرصت دارید برای مطالعه آن وقت بذارید تا level up بشید.
https://github.com/Sairyss/domain-driven-hexagon
@DevTwitter | <Pouria Jahandideh/>
❤33👍18👎6
نیاز داشتم LCD لپ تاپ را خاموش کنم با این دستور میشه خاموش کرد
bash -c "cinnamon-screensaver-command -l; xset dpms force off;"
دیدم خوشگل نیست یک applet برای Cinnamon در لینوکس مینت نوشتم. اگر کسی دوست داشت استفاده کنه
https://github.com/MehrdadLinux/ML-Cinnamon-Applets
@DevTwitter | <MehrdadLinux/>
bash -c "cinnamon-screensaver-command -l; xset dpms force off;"
دیدم خوشگل نیست یک applet برای Cinnamon در لینوکس مینت نوشتم. اگر کسی دوست داشت استفاده کنه
https://github.com/MehrdadLinux/ML-Cinnamon-Applets
@DevTwitter | <MehrdadLinux/>
👍32👎10🔥2
تایپاسکریپت رو دارن با Go باز نویسی میکنن و تا الان ۱۰ برابر سریعتر از قبل شده. چیزی که خیلی جالبه اینه که تیم توسعهاش با C# خیلی نزدیکه (چون پشت جفتشون مایکروسافته) و حتی سازندهاشونم یکیه. اما با این حال با وجود رقابتی که الان بین C# و Go هست، اومدن Go رو انتخاب کردن.
@DevTwitter | <Yasha/>
@DevTwitter | <Yasha/>
👍126👎15🔥5❤3
یه روز پست نمیذاریم AI از در عقب وارد میشه
آروم بگیر دیگه
آروم بگیر دیگه
👍81
This media is not supported in your browser
VIEW IN TELEGRAM
این مدلهای جدید Gemma3 از گوگل را اصلا دست کم نگیرید. فوق العاده قوی هستند. و تو پست دیروز هم گفتم هم multilingual از جمله پشتیبانی زبان فارسی و هم multimodal.
من مدل ۱۲میلیارد پارامتری را روی عکس با نمودار فارسی یک امتحان کوچک کردم. جوابها خیلی عالی. ویدیو هم سوال و هم تصاویر و جوابها را نشون میده.
میتونید باهاشون انواع اپلیکیشن را بسازید.
@DevTwitter | <Mehdi Allahyari/>
من مدل ۱۲میلیارد پارامتری را روی عکس با نمودار فارسی یک امتحان کوچک کردم. جوابها خیلی عالی. ویدیو هم سوال و هم تصاویر و جوابها را نشون میده.
میتونید باهاشون انواع اپلیکیشن را بسازید.
@DevTwitter | <Mehdi Allahyari/>
❤33👍9
#کوته_نیوز
مدیرعامل آنتروپیک(Claude):
هوش مصنوعی تا یکسال آینده درِ برنامهنویسها میذاره و میفرستتشون باغبونی.
@DevTwitter
مدیرعامل آنتروپیک(Claude):
هوش مصنوعی تا یکسال آینده درِ برنامهنویسها میذاره و میفرستتشون باغبونی.
@DevTwitter
👎208👍34🔥14
امروز صبح که IDE رو باز کردم، تموم شدن لایسنس دوسالهی Github Copilot خورد تو صورتم.
از این به بعد باید همه چیز رو خودم بنویسم :')
از این به بعد باید همه چیز رو خودم بنویسم :')
👎58🔥20👍6
❤81👎8👍7🔥2
اگر تعطیلات عید دنبال اجرای ایده در زمینه AI Agentها هستید این 100 AI Agent Ideas برای شما و دوستانتون هست.
@DevTwitter | <Amir/>
@DevTwitter | <Amir/>
👍23👎13❤3