Syntax | سینتکس
الذهاب إلى القناة على Telegram
Focus: Web Lan: Python & Go Website: https://syntaxfa.ir Quick connect: https://quick-connect.syntaxfa.ir Github: https://github.com/syntaxfa Group: https://t.me/Syntax_fa_group
إظهار المزيد3 269
المشتركون
+1124 ساعات
+127 أيام
+930 أيام
أرشيف المشاركات
3 269
جواب سوالی که تو این پست پرسیدم رو یکی از دوستان توی کامنت گفتن.
اما چرا orm چنین کاری رو انجام میده؟
دلیل اصلی این رفتار در بیشتر ORMها، بهینهسازی عملکرد و کاهش تعداد کوئریهای ارسالی به دیتابیس است.
زمانی که شما یک کوئری را در ORM میسازید، ORM آن را به صورت یک نمونه از یک کلاس مدل (Model) در نظر میگیرد. این کلاس مدل شامل اطلاعاتی است که برای انجام کوئری مورد نیاز است، مانند شرایط جستجو، مقادیر بروزرسانی و غیره. اما کوئری به صورت واقعی به دیتابیس ارسال نمیشود تا زمانی که شما درخواستی برای دستیابی به نتیجه کوئری داشته باشید.
به طور کلی، این رویکرد در ORMها بهبود عملکرد، قابلیت تغییرپذیری و امنیت را بهبود میبخشد. با این حال، ممکن است در برخی موارد نیاز داشته باشید کوئری را فوراً به دیتابیس ارسال کنید، برخی ORMها امکاناتی برای این منظور فراهم میکنند. به عنوان مثال، ممکن است بتوانید از متدی مانند
.execute() در ORM استفاده کنید تا کوئری را بدون تأخیر ارسال کنید. همچنین، برخی ORMها ممکن است حالتهایی برای اجرای فوری کوئریها، مانند حالت تراکنش (Transaction)، ارائه دهند.
#orm
@citax_tel 👈 سیتاکس3 269
🔥 امشب میت داریم اونم چه میتی 🔥
امشب ساعت 9:30 توی گوگل میت قراره درباره این موارد حرف بزنیم:
Performance Optimizations & Tuning (DB, Code, UI)
RPS ( Requests per second)
Tradeoffs
Benchmarks meaning
JWT & Security
موضوع متینگ پرفورمنس و تریدآف
همچنین در خصوص معماری حرف میزنیم ،رویکردهای بهتر در کدنویسی.
طبق موضوعی که در گروه گفته شد درمورد JWT و امنیت توکن صحبت می کنیم.
و به احتمال زیاد یکی از دوستان درباره مقالهی خودش که ثبت جهانی شده برامون میگه که در خصوص هوش مصنوعی و nlp هستش
حتما این میت رو شرکت کنید و از دستش ندید چون قراره کلی مطالب مفید یاد بگیریم
کانال اصلی برگزاری میت (حتما جوین شید):
https://t.me/Code_Crafters
لینک میت ساعت نه و نیم توی این کانال قرار میگیره و منم میذارمش.
#میت
@citax_tel 👈 سیتاکس
3 269
سمافور و میوتکس هم یکسان نیستند.
سمافور کمی پیشرفته تر هستش و خاصیت ownership نداره
توی میوتکس ، فقط اون تردی که لاک کرده میتونه آنلاکش کنه
ولی توی سمافور ما میتونیم از هر تردی لاک و آنلاک کنیم
سمافور قابلیت مولتی ترد هم داره
یعنی شما میتونی به 3 ترد همزمان دسترسی بدید
البته سمافور بخاطر این قابلیت های خوبش کمی سنگین تر و آبجکت هاش بزرگتره. که میتونید از SemaphoreSlim استفاده کنید
توی دات نت و جاوا هستش و فکر کنم بشه یک نتیجه ی نزدیک به سمافور اسلیم ( با اهمون سبکی و قدرتی) رو توی پایتون هم بگیرید
البته مطمئن نیستم ولی gevent و asyncio هم سمافور دارن
یکی از اینا نسبت به سمافور تردینگ سبک تره
[BiggyWili]
@citax_tel 👈 سیتاکس
3 269
سمافور(Semaphore) و میوتکس (Mutex)
سمافور (Semaphore) و میوتکس (Mutex) هر دو الگوهای هماهنگی (synchronization) در برنامهنویسی چندنخی هستند که برای مدیریت دسترسی همزمان نخها به منابع مشترک استفاده میشوند. این الگوها کمک میکنند تا race condition ها زمان اجرای همزمان نخها را کنترل کنند.
Mutex
میوتکس (Mutex) یک متغیر بولین است که دارای دو وضعیت قفل شده (locked) و غیرقفل شده (unlocked) است. نخها قبل از دسترسی به منبع مشترک، میوتکس را قفل میکنند و بعد از اتمام کار، آن را باز میکنند. تنها یک نخ می تواند میوتکس را قفل کند و سایر نخها باید منتظر آزاد شدن آن شوند. این باعث میشود تا فقط یک نخ به طور همزمان به منبع مشترک دسترسی داشته باشد و تداخلات رخ ندهد. میوتکسها به عنوان یک راه حل ساده و موثر برای مدیریت همزمانی استفاده میشن.
Semaphore
سمافور (Semaphore) یک عدد صحیح است که مقداری غیرمنفی دارد. سمافور به عنوان یک شمارنده استفاده میشود و نخها میتوانند قبل از دسترسی به منبع مشترک، سمافور را بررسی کنند. اگر مقدار سمافور مثبت باشد، نخ می تواند به منبع دسترسی پیدا کند و مقدار سمافور را کاهش بده. در صورتی که مقدار سمافور صفر باشه، نخ باید منتظر بماند و تا زمانی که سمافور مقدار مثبتی نداشته باشد، منتظر باقی می ماند. وقتی منبع آزاد شود، یک نخ دیگه میتواند به آن دسترسی پیدا کند.
@citax_tel 👈 سیتاکس
3 269
روشی که خودم برای حل این مشکل استفاده میکنم به این شکل است که اون آبجکت دیتابیس رو لاک میکنم تا تغییرات رو انجام بدم و بقیه ترد ها در اون لحظه دسترسی نداشته باشن.
توی جنگجو به این صورت پیاده می شه.
سوال:
چرا من
instance = cls.objects.select_for_update().filter(user=user)
بیرون از transaction.atomic نوشتم؟
پاسخ یکی از دوستان که کاملا درسته:
چون کلا کوئری ها لیزی هستن تا زمانی که جایی استفاده نکنی اجرا نمیشن.
اونجا که exists رو میزنی اونم به دلیل وجود if قبلش اجرا میشه
@citax_tel 👈 سیتاکس
3 269
روش های پیشنهادی که دوستان گفتن
میثم:
سمافور
میوتکس
مهدی:
میریزیم توی ربیت از اونجا میریزیم توی دیبی
تمام امتیاز ها توی صف قرار میگیرن تا کم کم وارد دیبی بشن
اینطوری تایم رید و رایت کردن دیتابیس هم حذف میشه و تایم ریکویست هم چند میلی ثانیه کم تر میشه
m:
میتونیم از transaction.atomic و لاک کردن استفاده کنیم
بنظرتون کدوم روش منطقی تره! یا اینکه روش بهتری براش دارید؟(صرف نظر از اینکه با چه ابزاری قراره پیاده شه)
@citax_tel 👈 سیتاکس
3 269
Race condition
معمولاً race condition هنگامی رخ میدهد که دو یا چند نخ به صورت همزمان به منابع مشترک دسترسی دارند و تغییرات را اعمال میکنند. این تداخل میتواند به تداخل در دسترسی به دادهها، تعارض در تغییرات و حالتهای نامتوازن منجر شود.
برای مثال، فرض کنید جدول یوزر یک column به اسم score دارد که داخلش امتیاز کاربر رو ذخیره میکنیم.
ممکنه کاربر در یک لحظه دو تا امتیاز بگیره که باید به درستی ذخیره بشن.
اگه در یک لحظه اتفاق بیوفته هر دو نخ فیلد score رو میگیرن و امتیاز رو اضافه میکنن. اینجاست که race condition اتفاق میوفته و دیتا به درستی ذخیره نمیشه در واقع یکی از این دو امتیاز ذخیره نمیشه
سوال
برای جلوگیری از این اتفاق ما باید نحوه ذخیره امتیازات رو تغییر بدیم.
شما چه تغییری بوجود میارید تا در هر حالت امتیاز به درستی ذخیره بشه ؟!
روش های پیشنهادی پست بعدی قرار میگیره
#race_condition #دیتابیس
@citax_tel 👈 سیتاکس
3 269
اطلاعات مورد نیاز کاربر رو توی توکن مینویسی و توی سرویسای دیگت میتونی از توکن بخونی، مثل یوزرنیم، تلفن، یوزر آیدی، نقش ها، زبان، ادرس تصویر پروفایل..
برای امنیت بیشتر توکن رو رمزنگاری میکنی که با یککلید مشخص که فقط برنانه خودت داره میتونه خونده و ادیت بشه.
حالا اون سرویس چت از توکن کاربر رو میشناسه. برای باقی مباحث ممکن هست نیاز به ذخیره اطلاعات کاربر و مشتقاتش روی سرویس چتت هم داشته باشی. این جزو چالش های میکروسرویس ها هست دیگه. یا باید هر بار نیاز داری بری از سرویس اصلیت بگیری یا تو سرویس ثانویه ات همنگهداری کنی و اپدیت بکنی در صورت تغییر ( یکپارچگی داده ها)
ارتباط مابین سرویس ها، میتونه از طریق rest api ها باشه، میتونه از طریق grpc باشه، میتونه از طریق message broker ای مثل rabbitmq باشه..
شکستن وظایف یک پروژه به سرویس های مجزا شروع میکروسرویسی شدنه معماریت هست. هر چند که به این میگیم bounded contexts تا میکروسرویس.
سمت سوکت نویسی هم نرو وقتی کتابخونه های خوبی مثل signalr و grpc و امثالهم هست. سیگنال آر راحته همه جا میتونی استفاده کنی پرفورمنسشم خوبه.
کلاینت ها همه به یک Hub لیسن میشن که متد های خودش رو داره مثلا send و get. به محض اومدن پیام یک ایونت بهشون داده میشه که بیا بگیر دیتات رو اپدیت کن
ارتباط bidirectional و duplex
من برای سرویس چت اینکارو کرده بودم:
ارسال و دریافت از طریق api ها
نوتیفیکیشن و اعلان اپدیت از طریق signalr. یعنی نوتیف یا خبر رو با سوکت میدادم دیتا رو از api میگرفتن. میتونی جفتشو ببری تو همون signalr اصلا که دیتا رو موردی اپدیت کنی
[mrgrayhat]
@citax_tel 👈 سیتاکس
3 269
سوال:
برای یک سرویس چت میخوام از Fastapi و سوکت نویسی استفاده کنم (جنگو چنلز بلد نیستم)
یک monolithic برنامه اصلی هست
این قسمت چت رو میخوام میکروسرویس بچسبونم بهش
مدل کاربر اعتبار سنجی ها (jwt ) رو چطور درست میکنن
یا اگر با مدل دیگه تو برنامه اصلی کار داشتیم چطور کار میکنند باهاش.
[Mojtaba]
@citax_tel 👈 سیتاکس
3 269
با این کار ها سرعت یادگیریتو سه برابر کن !
هیچوقت پست های اینستاگرام سیتاکس رو توی تلگرام قرار نمیدم چون محتواش تو فضای تلگرام نمیچسبه. اما این پست خیلی خاصه شبیه به کامیک شده منکه واقعا کیف کردم.
همچنین به گرافیست کارمون خسته نباشید میگم
ایدی گرافیست کارمون اگه پروژه دارید می تونید بهش پی ام بدید:
@Ali_reza_Jalilian
پ.ن
مشکلی که خیلیا وقتی میخوان تخصص هایی مثل برنامه نویسی و طراحی گرافیک رو شروع کنن اینه که زیادی به نحوه تدریس مدارس و دانشگاه ها عادت کردن.
اینجور اشخاص وقتی میخوان وارد تخصصی مثل برنامه نویسی شن اولین کاری که میکنن دنبال مدرس میگردن و همچنین حضوری آموزش دادنه هم براشون مهمه.
اما برنامه نویسی و تخصص هایی شبیه به برنامه نویسی تمرکز اصلی باید روی خودآموزی باشه. اصل موضوع اینه تا زمانی که نحوه یادگیری خودتونو به خودآموز تغییر ندید برنامه نویس حرفه ای نمیشید و تو سطح مبتدی باقی میمونید.
پس اول از همه به خودت متکی باش و سرچ کردن رو یاد بگیر بعدش با کمک مدرس و منتور، راه خودتو هموار کن و از تحربیاتش استفاده کن.
@citax_tel 👈 سیتاکس
3 269
متخصصین درباره Mojo چی میگن !
نظر متخصصین درباره زبان Mojo متفاوت است.
برخی از آنها این زبان را یک رقیب جدی برای پایتون در حوزه هوش مصنوعی میدانند و برخی دیگر این زبان را یک تلاش ناتمام و ناقص معرفی میکنند.
برخی از نظرات مثبت و منفی درباره زبان Mojo:
نظرات مثبت:
"موجو یک زبان بسیار جذاب و قدرتمند است که سادگی پایتون را با عملکرد C و Rust ترکیب میکند. این زبان به توسعه دهندگان هوش مصنوعی امکان میدهد که بدون نگرانی از جزئیات سخت افزار، برنامه های با پرفورمنس بالا و کارآمد بسازند."
"موجو چشماندازی نوین و جدید از زبان برنامه نویسی ارائه میدهد. این زبان نه تنها از کل اکوسیستم پایتون پشتیبانی میکند، بلکه قابلیت های جدیدی را به آن اضافه میکند. من به شخصه از ویژگیهای موازی سازی خودکار و بررسی نوع داده در زمان کامپایلی Mojo خوشحالم."
نظرات منفی:
"موجو یک زبان ناقص و ناتمام است. این زبان هنوز در حال توسعه است و بسیاری از ویژگیها و کتابخانههای ضروری را ندارد. من فکر نمیکنم که Mojo بتواند جایگزین پایتون شود، چرا که پایتون یک زبان بسیار پخته و قابل اعتماد است."
"موجو یک زبان بدون هدف است. این زبان سعی دارد همه چیز را در خود جای دهد، اما هیچ کدام را به خوبی انجام نمیدهد. Mojo نه سادگی پایتون را دارد، نه عملکرد C و Rust را. این زبان فقط گیج کننده و پر مشکل است."
"موجو یک زبان بلا استفاده و بلا مصرف است. این زبان هیچ چیز جدید و متفاوتی به دنیای برنامه نویسی نمیافزاید. Mojo فقط یک تقلید بد از پایتون است که سعی دارد با قول دادن سرعت بالا، توجه کاربران را جلب کند."
#Mojo
@citax_tel 👈 سیتاکس
3 269
Mojo
زبان برنامه نویسی Mojo یک زبان جدید است که توسط شرکت Modular AI در سال ۲۰۲۳ معرفی شده است.
این زبان با هدف ایجاد یک زبان ساده، سریع و قابل انعطاف برای کارهای مرتبط با هوش مصنوعی و یادگیری ماشین طراحی شده است.
زبان Mojo دارای سینتکسهای شبیه به پایتون و کمی js است، اما عملکرد آن مشابه به زبانهای C و Rust است(این قسمتش یکم عجیبه).
این زبان از کل اکوسیستم کتابخانههای پایتون پشتیبانی میکند (در این صورت چجوری می تونه 35 هزار برابر سریع تر باشه) و همچنین قابلیت استفاده از سخت افزارهای مختلف مانند CPU، GPU، TPU و ASIC را دارد.
برخی از ویژگیهای منحصر به فرد زبان Mojo عبارتند از:
- موازی سازی خودکار کدها برای بهرهوری بالاتر از منابع سخت افزاری (قطعا پوینت مثبتی هستش در مقابل پایتون)
- بررسی و ارزیابی نوع داده در زمان کامپایل برای جلوگیری از خطاهای زمان اجرا
- کامپایل ایستا به وسیله LLVM برای تولید کد ماشین بهینه
- پشتیبانی از برنامه نویسی متا در زمان کامپایل برای تولید کد دلخواه
- قابل توسعه با استفاده از ماژولها و پکیجهای خارجی
#Mojo
@citax_tel 👈 سیتاکس
3 269
قرار زبان برنامه نویسی Mojo رو یکم بررسی کنیم.
البته فکر می کنم خیلی زوده بخوایم دربارش حرف بزنیم اما با توجه به اینکه سر و صدای زیادی کرده پس بیاید ببینیم چیه
#mojo
@citax_tel 👈 سیتاکس
3 269
phind.com
یه موتور جستجو برای برنامه نویس ها است ... تلفیق جالبی از ریزالت گوگل و GPT که تمام چند صفحه اول رو میخونه و نتیحه رو برامون مینوسیه، کدش رو هم مینویسه
https://zzzcode.ai/
این هم یه ابزار شدیدا باحاله که هم میتونه داکیومنت براتون درست کنه هم میتونه کد های هر زبانی رو به زبان دیگه تبدیل کنه و هم ....
گفتم شاید بد نباشه شیر کنم که شما هم استفاده کنید
[Shahriar]
#هوش_مصنوعی
@citax_tel 👈 سیتاکس
3 269
واکنش پدر مادرا درباره شغل های نسبتا جدید و امروزی
هنوزم بعضی از پدر مادرا میگن "تو خونه پول درآوردن و پشت میز نشستن که کار نیست 😕 "
@citax_tel 👈 سیتاکس
