Syntax | سینتکس – Telegram
قرار زبان برنامه نویسی Mojo رو یکم بررسی کنیم.
البته فکر می کنم خیلی زوده بخوایم دربارش حرف بزنیم اما با توجه به اینکه سر و صدای زیادی کرده پس بیاید ببینیم چیه
#mojo

@citax_tel 👈 سیتاکس
🔥6👍2
Mojo

زبان برنامه نویسی Mojo یک زبان جدید است که توسط شرکت Modular AI در سال ۲۰۲۳ معرفی شده است.

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

زبان Mojo دارای سینتکس‌های شبیه به پایتون و کمی js است، اما عملکرد آن مشابه به زبان‌های C و Rust است(این قسمتش یکم عجیبه).

این زبان از کل اکوسیستم کتابخانه‌های پایتون پشتیبانی می‌کند (در این صورت چجوری می تونه 35 هزار برابر سریع تر باشه) و همچنین قابلیت استفاده از سخت افزارهای مختلف مانند CPU، GPU، TPU و ASIC را دارد.

برخی از ویژگی‌های منحصر به فرد زبان Mojo عبارتند از:

- موازی سازی خودکار کدها برای بهره‌وری بالاتر از منابع سخت افزاری (قطعا پوینت مثبتی هستش در مقابل پایتون)

- بررسی و ارزیابی نوع داده در زمان کامپایل برای جلوگیری از خطاهای زمان اجرا

- کامپایل ایستا به وسیله LLVM برای تولید کد ماشین بهینه

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

- قابل توسعه با استفاده از ماژول‌ها و پکیج‌های خارجی
#Mojo

@citax_tel 👈 سیتاکس
👍8
متخصصین درباره Mojo چی میگن !

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

برخی از نظرات مثبت و منفی درباره زبان Mojo:

نظرات مثبت:

 "موجو یک زبان بسیار جذاب و قدرتمند است که سادگی پایتون را با عملکرد C و Rust ترکیب می‌کند. این زبان به توسعه دهندگان هوش مصنوعی امکان می‌دهد که بدون نگرانی از جزئیات سخت افزار، برنامه های با پرفورمنس بالا و کارآمد بسازند."

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

نظرات منفی:

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


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


 "موجو یک زبان بلا استفاده و بلا مصرف است. این زبان هیچ چیز جدید و متفاوتی به دنیای برنامه نویسی نمی‌افزاید. Mojo فقط یک تقلید بد از پایتون است که سعی دارد با قول دادن سرعت بالا، توجه کاربران را جلب کند."

#Mojo

@citax_tel 👈 سیتاکس
👍5
با این کار ها سرعت یادگیریتو سه برابر کن !

هیچوقت پست های اینستاگرام سیتاکس رو توی تلگرام قرار نمیدم چون محتواش تو فضای تلگرام نمیچسبه. اما این پست خیلی خاصه شبیه به کامیک شده منکه واقعا کیف کردم.
همچنین به گرافیست کارمون خسته نباشید میگم
ایدی گرافیست کارمون اگه پروژه دارید می تونید بهش پی ام بدید:
@Ali_reza_Jalilian

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

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

اما برنامه نویسی و تخصص هایی شبیه به برنامه نویسی تمرکز اصلی باید روی خودآموزی باشه. اصل موضوع اینه تا زمانی که نحوه یادگیری خودتونو به خودآموز تغییر ندید برنامه نویس حرفه ای نمیشید و تو سطح مبتدی باقی میمونید.

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

@citax_tel 👈 سیتاکس
🔥9
سوال:

برای یک سرویس چت میخوام از Fastapi و سوکت نویسی استفاده کنم (جنگو چنلز بلد نیستم)

یک monolithic برنامه اصلی هست
این قسمت چت رو میخوام میکروسرویس بچسبونم بهش

مدل کاربر اعتبار سنجی ها (jwt ) رو چطور درست میکنن
یا اگر با مدل دیگه تو برنامه اصلی کار داشتیم چطور کار می‌کنند باهاش.

[Mojtaba]

@citax_tel 👈 سیتاکس
👍7
Syntax | سینتکس
سوال: برای یک سرویس چت میخوام از Fastapi و سوکت نویسی استفاده کنم (جنگو چنلز بلد نیستم) یک monolithic برنامه اصلی هست این قسمت چت رو میخوام میکروسرویس بچسبونم بهش مدل کاربر اعتبار سنجی ها (jwt ) رو چطور درست میکنن یا اگر با مدل دیگه تو برنامه اصلی…
اطلاعات مورد نیاز کاربر رو توی توکن مینویسی و توی سرویسای دیگت میتونی از توکن بخونی، مثل یوزرنیم، تلفن، یوزر آیدی، نقش ها، زبان، ادرس تصویر پروفایل..
برای امنیت بیشتر توکن رو رمز‌نگاری میکنی که با یک‌کلید مشخص که فقط برنانه خودت داره میتونه خونده و ادیت بشه.
حالا اون سرویس چت از توکن کاربر رو میشناسه. برای باقی مباحث ممکن هست نیاز به ذخیره اطلاعات کاربر و مشتقاتش روی سرویس چتت هم داشته باشی. این جزو چالش های میکروسرویس ها هست دیگه. یا باید هر بار نیاز داری بری از سرویس اصلیت بگیری یا تو سرویس ثانویه ات هم‌نگهداری کنی و اپدیت بکنی در صورت تغییر ( یکپارچگی داده  ها)

ارتباط مابین سرویس ها، میتونه از طریق rest api ها باشه، میتونه از طریق grpc باشه، میتونه از طریق message broker ای مثل rabbitmq باشه..
شکستن وظایف یک پروژه به سرویس های مجزا شروع میکروسرویسی شدنه معماریت هست. هر چند که به این میگیم bounded contexts تا میکروسرویس.

سمت سوکت نویسی هم‌ نرو وقتی کتابخونه های خوبی مثل signalr و grpc و امثالهم هست. سیگنال آر راحته همه جا میتونی استفاده کنی پرفورمنسشم خوبه.
کلاینت ها همه به یک Hub لیسن میشن که متد های خودش رو داره مثلا send و get.‌ به محض اومدن پیام یک ایونت بهشون داده میشه که بیا بگیر دیتات رو اپدیت کن
ارتباط bidirectional و duplex

من برای سرویس چت اینکارو کرده بودم:
ارسال و دریافت از طریق api ها
نوتیفیکیشن و اعلان اپدیت از طریق signalr. یعنی نوتیف یا خبر رو با سوکت میدادم دیتا رو از api میگرفتن. میتونی جفتشو ببری تو همون signalr اصلا که دیتا رو موردی اپدیت کنی

[mrgrayhat]

@citax_tel 👈 سیتاکس
🔥7
🔥3
Race condition

معمولاً race condition هنگامی رخ می‌دهد که دو یا چند نخ به صورت همزمان به منابع مشترک دسترسی دارند و تغییرات را اعمال می‌کنند. این تداخل می‌تواند به تداخل در دسترسی به داده‌ها، تعارض در تغییرات و حالت‌های نامتوازن منجر شود.

برای مثال، فرض کنید جدول یوزر یک column به اسم score دارد که داخلش امتیاز کاربر رو ذخیره میکنیم.
ممکنه کاربر در یک لحظه دو تا امتیاز بگیره که باید به درستی ذخیره بشن.
اگه در یک لحظه اتفاق بیوفته هر دو نخ فیلد score رو میگیرن و امتیاز رو اضافه میکنن. اینجاست که race condition اتفاق میوفته و دیتا به درستی ذخیره نمیشه در واقع یکی از این دو امتیاز ذخیره نمیشه

سوال
برای جلوگیری از این اتفاق ما باید نحوه ذخیره امتیازات رو تغییر بدیم.
شما چه تغییری بوجود میارید تا در هر حالت امتیاز به درستی ذخیره بشه ؟!

روش های پیشنهادی پست بعدی قرار میگیره

#race_condition #دیتابیس

@citax_tel 👈 سیتاکس
👀8
Syntax | سینتکس
Race condition معمولاً race condition هنگامی رخ می‌دهد که دو یا چند نخ به صورت همزمان به منابع مشترک دسترسی دارند و تغییرات را اعمال می‌کنند. این تداخل می‌تواند به تداخل در دسترسی به داده‌ها، تعارض در تغییرات و حالت‌های نامتوازن منجر شود. برای مثال، فرض…
روش های پیشنهادی که دوستان گفتن

میثم:
سمافور
میوتکس


مهدی:
میریزیم توی ربیت از اونجا میریزیم توی دیبی
تمام امتیاز ها توی صف قرار میگیرن تا کم کم وارد دیبی بشن

اینطوری تایم رید و رایت کردن دیتابیس هم حذف میشه و تایم ریکویست هم چند میلی ثانیه کم تر میشه

m:
میتونیم از transaction.atomic و لاک کردن استفاده کنیم

بنظرتون کدوم روش منطقی تره! یا اینکه روش بهتری براش دارید؟(صرف نظر از اینکه با چه ابزاری قراره پیاده شه)

@citax_tel 👈 سیتاکس
👍6
روشی که خودم برای حل این مشکل استفاده میکنم به این شکل است که اون آبجکت دیتابیس رو لاک میکنم تا تغییرات رو انجام بدم و بقیه ترد ها در اون لحظه دسترسی نداشته باشن.
توی جنگجو به این صورت پیاده می شه.

سوال:
چرا من
instance = cls.objects.select_for_update().filter(user=user)
بیرون از transaction.atomic نوشتم؟‌

پاسخ یکی از دوستان که کاملا درسته:

چون کلا کوئری ها لیزی هستن تا زمانی که جایی استفاده نکنی اجرا نمیشن.
اونجا که exists رو میزنی اونم به دلیل وجود if قبلش اجرا میشه

@citax_tel 👈 سیتاکس
7👍2
Syntax | سینتکس
روش های پیشنهادی که دوستان گفتن میثم: سمافور میوتکس مهدی: میریزیم توی ربیت از اونجا میریزیم توی دیبی تمام امتیاز ها توی صف قرار میگیرن تا کم کم وارد دیبی بشن اینطوری تایم رید و رایت کردن دیتابیس هم حذف میشه و تایم ریکویست هم چند میلی ثانیه کم تر میشه …
سمافور‌(Semaphore) و میوتکس (Mutex)

سمافور (Semaphore) و میوتکس (Mutex) هر دو الگوهای هماهنگی (synchronization) در برنامه‌نویسی چندنخی هستند که برای مدیریت دسترسی همزمان نخ‌ها به منابع مشترک استفاده می‌شوند. این الگوها کمک می‌کنند تا race condition ها زمان اجرای همزمان نخ‌ها را کنترل کنند.

Mutex
میوتکس (Mutex) یک متغیر بولین است که دارای دو وضعیت قفل شده (locked) و غیرقفل شده (unlocked) است. نخ‌ها قبل از دسترسی به منبع مشترک، میوتکس را قفل می‌کنند و بعد از اتمام کار، آن را باز می‌کنند. تنها یک نخ می تواند میوتکس را قفل کند و سایر نخ‌ها باید منتظر آزاد شدن آن شوند. این باعث می‌شود تا فقط یک نخ به طور همزمان به منبع مشترک دسترسی داشته باشد و تداخلات رخ ندهد. میوتکس‌ها به عنوان یک راه حل ساده و موثر برای مدیریت همزمانی استفاده می‌شن.

Semaphore
سمافور (Semaphore) یک عدد صحیح است که مقداری غیرمنفی دارد. سمافور به عنوان یک شمارنده استفاده می‌شود و نخ‌ها می‌توانند قبل از دسترسی به منبع مشترک، سمافور را بررسی کنند. اگر مقدار سمافور مثبت باشد، نخ می تواند به منبع دسترسی پیدا کند و مقدار سمافور را کاهش بده. در صورتی که مقدار سمافور صفر باشه، نخ باید منتظر بماند و تا زمانی که سمافور مقدار مثبتی نداشته باشد، منتظر باقی می ماند. وقتی منبع آزاد شود، یک نخ دیگه می‌تواند به آن دسترسی پیدا کند.

@citax_tel 👈 سیتاکس
👍8
Syntax | سینتکس
سمافور‌(Semaphore) و میوتکس (Mutex) سمافور (Semaphore) و میوتکس (Mutex) هر دو الگوهای هماهنگی (synchronization) در برنامه‌نویسی چندنخی هستند که برای مدیریت دسترسی همزمان نخ‌ها به منابع مشترک استفاده می‌شوند. این الگوها کمک می‌کنند تا race condition ها زمان…
سمافور و میوتکس هم یکسان نیستند.

سمافور کمی پیشرفته تر هستش و خاصیت ownership نداره

توی میوتکس ، فقط اون تردی که لاک کرده میتونه آنلاکش کنه

ولی توی سمافور ما میتونیم از هر تردی لاک و آنلاک کنیم

سمافور قابلیت مولتی ترد هم داره
یعنی شما میتونی به 3 ترد همزمان دسترسی بدید

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


توی دات نت و جاوا هستش و فکر کنم بشه یک نتیجه ی نزدیک به سمافور اسلیم ( با اهمون سبکی و قدرتی) رو توی پایتون هم بگیرید

البته مطمئن نیستم ولی gevent و asyncio هم سمافور دارن

یکی از اینا نسبت به سمافور تردینگ سبک تره

[BiggyWili]

@citax_tel 👈 سیتاکس
👍8
🔥 امشب میت داریم اونم چه میتی 🔥

امشب ساعت 9:30 توی گوگل میت قراره درباره این موارد حرف بزنیم:

Performance Optimizations & Tuning (DB, Code, UI)

RPS ( Requests per second)

Tradeoffs

Benchmarks meaning

JWT & Security

موضوع متینگ پرفورمنس و تریدآف

همچنین در خصوص معماری حرف میزنیم ،رویکردهای بهتر در کدنویسی.

طبق موضوعی که در گروه گفته شد درمورد JWT و امنیت توکن صحبت می کنیم.

و به احتمال زیاد یکی از دوستان درباره مقاله‌ی خودش که ثبت جهانی شده برامون میگه که در خصوص هوش مصنوعی و nlp هستش

حتما این میت رو شرکت کنید و از دستش ندید چون قراره کلی مطالب مفید یاد بگیریم

کانال اصلی برگزاری میت (حتما جوین شید):
https://news.1rj.ru/str/Code_Crafters

لینک میت ساعت نه و نیم توی این کانال قرار میگیره و منم میذارمش.

#میت

@citax_tel 👈 سیتاکس
🔥8👍4