Syntax | سینتکس
Open in 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
Show more3 198
Subscribers
+1024 hours
+197 days
+2030 days
Posts Archive
3 198
🔥 امشب میت داریم اونم چه میتی 🔥
امشب ساعت 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 198
سمافور و میوتکس هم یکسان نیستند.
سمافور کمی پیشرفته تر هستش و خاصیت ownership نداره
توی میوتکس ، فقط اون تردی که لاک کرده میتونه آنلاکش کنه
ولی توی سمافور ما میتونیم از هر تردی لاک و آنلاک کنیم
سمافور قابلیت مولتی ترد هم داره
یعنی شما میتونی به 3 ترد همزمان دسترسی بدید
البته سمافور بخاطر این قابلیت های خوبش کمی سنگین تر و آبجکت هاش بزرگتره. که میتونید از SemaphoreSlim استفاده کنید
توی دات نت و جاوا هستش و فکر کنم بشه یک نتیجه ی نزدیک به سمافور اسلیم ( با اهمون سبکی و قدرتی) رو توی پایتون هم بگیرید
البته مطمئن نیستم ولی gevent و asyncio هم سمافور دارن
یکی از اینا نسبت به سمافور تردینگ سبک تره
[BiggyWili]
@citax_tel 👈 سیتاکس
3 198
سمافور(Semaphore) و میوتکس (Mutex)
سمافور (Semaphore) و میوتکس (Mutex) هر دو الگوهای هماهنگی (synchronization) در برنامهنویسی چندنخی هستند که برای مدیریت دسترسی همزمان نخها به منابع مشترک استفاده میشوند. این الگوها کمک میکنند تا race condition ها زمان اجرای همزمان نخها را کنترل کنند.
Mutex
میوتکس (Mutex) یک متغیر بولین است که دارای دو وضعیت قفل شده (locked) و غیرقفل شده (unlocked) است. نخها قبل از دسترسی به منبع مشترک، میوتکس را قفل میکنند و بعد از اتمام کار، آن را باز میکنند. تنها یک نخ می تواند میوتکس را قفل کند و سایر نخها باید منتظر آزاد شدن آن شوند. این باعث میشود تا فقط یک نخ به طور همزمان به منبع مشترک دسترسی داشته باشد و تداخلات رخ ندهد. میوتکسها به عنوان یک راه حل ساده و موثر برای مدیریت همزمانی استفاده میشن.
Semaphore
سمافور (Semaphore) یک عدد صحیح است که مقداری غیرمنفی دارد. سمافور به عنوان یک شمارنده استفاده میشود و نخها میتوانند قبل از دسترسی به منبع مشترک، سمافور را بررسی کنند. اگر مقدار سمافور مثبت باشد، نخ می تواند به منبع دسترسی پیدا کند و مقدار سمافور را کاهش بده. در صورتی که مقدار سمافور صفر باشه، نخ باید منتظر بماند و تا زمانی که سمافور مقدار مثبتی نداشته باشد، منتظر باقی می ماند. وقتی منبع آزاد شود، یک نخ دیگه میتواند به آن دسترسی پیدا کند.
@citax_tel 👈 سیتاکس
3 198
روشی که خودم برای حل این مشکل استفاده میکنم به این شکل است که اون آبجکت دیتابیس رو لاک میکنم تا تغییرات رو انجام بدم و بقیه ترد ها در اون لحظه دسترسی نداشته باشن.
توی جنگجو به این صورت پیاده می شه.
سوال:
چرا من
instance = cls.objects.select_for_update().filter(user=user)
بیرون از transaction.atomic نوشتم؟
پاسخ یکی از دوستان که کاملا درسته:
چون کلا کوئری ها لیزی هستن تا زمانی که جایی استفاده نکنی اجرا نمیشن.
اونجا که exists رو میزنی اونم به دلیل وجود if قبلش اجرا میشه
@citax_tel 👈 سیتاکس
3 198
روش های پیشنهادی که دوستان گفتن
میثم:
سمافور
میوتکس
مهدی:
میریزیم توی ربیت از اونجا میریزیم توی دیبی
تمام امتیاز ها توی صف قرار میگیرن تا کم کم وارد دیبی بشن
اینطوری تایم رید و رایت کردن دیتابیس هم حذف میشه و تایم ریکویست هم چند میلی ثانیه کم تر میشه
m:
میتونیم از transaction.atomic و لاک کردن استفاده کنیم
بنظرتون کدوم روش منطقی تره! یا اینکه روش بهتری براش دارید؟(صرف نظر از اینکه با چه ابزاری قراره پیاده شه)
@citax_tel 👈 سیتاکس
3 198
Race condition
معمولاً race condition هنگامی رخ میدهد که دو یا چند نخ به صورت همزمان به منابع مشترک دسترسی دارند و تغییرات را اعمال میکنند. این تداخل میتواند به تداخل در دسترسی به دادهها، تعارض در تغییرات و حالتهای نامتوازن منجر شود.
برای مثال، فرض کنید جدول یوزر یک column به اسم score دارد که داخلش امتیاز کاربر رو ذخیره میکنیم.
ممکنه کاربر در یک لحظه دو تا امتیاز بگیره که باید به درستی ذخیره بشن.
اگه در یک لحظه اتفاق بیوفته هر دو نخ فیلد score رو میگیرن و امتیاز رو اضافه میکنن. اینجاست که race condition اتفاق میوفته و دیتا به درستی ذخیره نمیشه در واقع یکی از این دو امتیاز ذخیره نمیشه
سوال
برای جلوگیری از این اتفاق ما باید نحوه ذخیره امتیازات رو تغییر بدیم.
شما چه تغییری بوجود میارید تا در هر حالت امتیاز به درستی ذخیره بشه ؟!
روش های پیشنهادی پست بعدی قرار میگیره
#race_condition #دیتابیس
@citax_tel 👈 سیتاکس
3 198
اطلاعات مورد نیاز کاربر رو توی توکن مینویسی و توی سرویسای دیگت میتونی از توکن بخونی، مثل یوزرنیم، تلفن، یوزر آیدی، نقش ها، زبان، ادرس تصویر پروفایل..
برای امنیت بیشتر توکن رو رمزنگاری میکنی که با یککلید مشخص که فقط برنانه خودت داره میتونه خونده و ادیت بشه.
حالا اون سرویس چت از توکن کاربر رو میشناسه. برای باقی مباحث ممکن هست نیاز به ذخیره اطلاعات کاربر و مشتقاتش روی سرویس چتت هم داشته باشی. این جزو چالش های میکروسرویس ها هست دیگه. یا باید هر بار نیاز داری بری از سرویس اصلیت بگیری یا تو سرویس ثانویه ات همنگهداری کنی و اپدیت بکنی در صورت تغییر ( یکپارچگی داده ها)
ارتباط مابین سرویس ها، میتونه از طریق rest api ها باشه، میتونه از طریق grpc باشه، میتونه از طریق message broker ای مثل rabbitmq باشه..
شکستن وظایف یک پروژه به سرویس های مجزا شروع میکروسرویسی شدنه معماریت هست. هر چند که به این میگیم bounded contexts تا میکروسرویس.
سمت سوکت نویسی هم نرو وقتی کتابخونه های خوبی مثل signalr و grpc و امثالهم هست. سیگنال آر راحته همه جا میتونی استفاده کنی پرفورمنسشم خوبه.
کلاینت ها همه به یک Hub لیسن میشن که متد های خودش رو داره مثلا send و get. به محض اومدن پیام یک ایونت بهشون داده میشه که بیا بگیر دیتات رو اپدیت کن
ارتباط bidirectional و duplex
من برای سرویس چت اینکارو کرده بودم:
ارسال و دریافت از طریق api ها
نوتیفیکیشن و اعلان اپدیت از طریق signalr. یعنی نوتیف یا خبر رو با سوکت میدادم دیتا رو از api میگرفتن. میتونی جفتشو ببری تو همون signalr اصلا که دیتا رو موردی اپدیت کنی
[mrgrayhat]
@citax_tel 👈 سیتاکس
3 198
سوال:
برای یک سرویس چت میخوام از Fastapi و سوکت نویسی استفاده کنم (جنگو چنلز بلد نیستم)
یک monolithic برنامه اصلی هست
این قسمت چت رو میخوام میکروسرویس بچسبونم بهش
مدل کاربر اعتبار سنجی ها (jwt ) رو چطور درست میکنن
یا اگر با مدل دیگه تو برنامه اصلی کار داشتیم چطور کار میکنند باهاش.
[Mojtaba]
@citax_tel 👈 سیتاکس
3 198
با این کار ها سرعت یادگیریتو سه برابر کن !
هیچوقت پست های اینستاگرام سیتاکس رو توی تلگرام قرار نمیدم چون محتواش تو فضای تلگرام نمیچسبه. اما این پست خیلی خاصه شبیه به کامیک شده منکه واقعا کیف کردم.
همچنین به گرافیست کارمون خسته نباشید میگم
ایدی گرافیست کارمون اگه پروژه دارید می تونید بهش پی ام بدید:
@Ali_reza_Jalilian
پ.ن
مشکلی که خیلیا وقتی میخوان تخصص هایی مثل برنامه نویسی و طراحی گرافیک رو شروع کنن اینه که زیادی به نحوه تدریس مدارس و دانشگاه ها عادت کردن.
اینجور اشخاص وقتی میخوان وارد تخصصی مثل برنامه نویسی شن اولین کاری که میکنن دنبال مدرس میگردن و همچنین حضوری آموزش دادنه هم براشون مهمه.
اما برنامه نویسی و تخصص هایی شبیه به برنامه نویسی تمرکز اصلی باید روی خودآموزی باشه. اصل موضوع اینه تا زمانی که نحوه یادگیری خودتونو به خودآموز تغییر ندید برنامه نویس حرفه ای نمیشید و تو سطح مبتدی باقی میمونید.
پس اول از همه به خودت متکی باش و سرچ کردن رو یاد بگیر بعدش با کمک مدرس و منتور، راه خودتو هموار کن و از تحربیاتش استفاده کن.
@citax_tel 👈 سیتاکس
3 198
متخصصین درباره Mojo چی میگن !
نظر متخصصین درباره زبان Mojo متفاوت است.
برخی از آنها این زبان را یک رقیب جدی برای پایتون در حوزه هوش مصنوعی میدانند و برخی دیگر این زبان را یک تلاش ناتمام و ناقص معرفی میکنند.
برخی از نظرات مثبت و منفی درباره زبان Mojo:
نظرات مثبت:
"موجو یک زبان بسیار جذاب و قدرتمند است که سادگی پایتون را با عملکرد C و Rust ترکیب میکند. این زبان به توسعه دهندگان هوش مصنوعی امکان میدهد که بدون نگرانی از جزئیات سخت افزار، برنامه های با پرفورمنس بالا و کارآمد بسازند."
"موجو چشماندازی نوین و جدید از زبان برنامه نویسی ارائه میدهد. این زبان نه تنها از کل اکوسیستم پایتون پشتیبانی میکند، بلکه قابلیت های جدیدی را به آن اضافه میکند. من به شخصه از ویژگیهای موازی سازی خودکار و بررسی نوع داده در زمان کامپایلی Mojo خوشحالم."
نظرات منفی:
"موجو یک زبان ناقص و ناتمام است. این زبان هنوز در حال توسعه است و بسیاری از ویژگیها و کتابخانههای ضروری را ندارد. من فکر نمیکنم که Mojo بتواند جایگزین پایتون شود، چرا که پایتون یک زبان بسیار پخته و قابل اعتماد است."
"موجو یک زبان بدون هدف است. این زبان سعی دارد همه چیز را در خود جای دهد، اما هیچ کدام را به خوبی انجام نمیدهد. Mojo نه سادگی پایتون را دارد، نه عملکرد C و Rust را. این زبان فقط گیج کننده و پر مشکل است."
"موجو یک زبان بلا استفاده و بلا مصرف است. این زبان هیچ چیز جدید و متفاوتی به دنیای برنامه نویسی نمیافزاید. Mojo فقط یک تقلید بد از پایتون است که سعی دارد با قول دادن سرعت بالا، توجه کاربران را جلب کند."
#Mojo
@citax_tel 👈 سیتاکس
3 198
Mojo
زبان برنامه نویسی Mojo یک زبان جدید است که توسط شرکت Modular AI در سال ۲۰۲۳ معرفی شده است.
این زبان با هدف ایجاد یک زبان ساده، سریع و قابل انعطاف برای کارهای مرتبط با هوش مصنوعی و یادگیری ماشین طراحی شده است.
زبان Mojo دارای سینتکسهای شبیه به پایتون و کمی js است، اما عملکرد آن مشابه به زبانهای C و Rust است(این قسمتش یکم عجیبه).
این زبان از کل اکوسیستم کتابخانههای پایتون پشتیبانی میکند (در این صورت چجوری می تونه 35 هزار برابر سریع تر باشه) و همچنین قابلیت استفاده از سخت افزارهای مختلف مانند CPU، GPU، TPU و ASIC را دارد.
برخی از ویژگیهای منحصر به فرد زبان Mojo عبارتند از:
- موازی سازی خودکار کدها برای بهرهوری بالاتر از منابع سخت افزاری (قطعا پوینت مثبتی هستش در مقابل پایتون)
- بررسی و ارزیابی نوع داده در زمان کامپایل برای جلوگیری از خطاهای زمان اجرا
- کامپایل ایستا به وسیله LLVM برای تولید کد ماشین بهینه
- پشتیبانی از برنامه نویسی متا در زمان کامپایل برای تولید کد دلخواه
- قابل توسعه با استفاده از ماژولها و پکیجهای خارجی
#Mojo
@citax_tel 👈 سیتاکس
3 198
قرار زبان برنامه نویسی Mojo رو یکم بررسی کنیم.
البته فکر می کنم خیلی زوده بخوایم دربارش حرف بزنیم اما با توجه به اینکه سر و صدای زیادی کرده پس بیاید ببینیم چیه
#mojo
@citax_tel 👈 سیتاکس
3 198
phind.com
یه موتور جستجو برای برنامه نویس ها است ... تلفیق جالبی از ریزالت گوگل و GPT که تمام چند صفحه اول رو میخونه و نتیحه رو برامون مینوسیه، کدش رو هم مینویسه
https://zzzcode.ai/
این هم یه ابزار شدیدا باحاله که هم میتونه داکیومنت براتون درست کنه هم میتونه کد های هر زبانی رو به زبان دیگه تبدیل کنه و هم ....
گفتم شاید بد نباشه شیر کنم که شما هم استفاده کنید
[Shahriar]
#هوش_مصنوعی
@citax_tel 👈 سیتاکس
3 198
واکنش پدر مادرا درباره شغل های نسبتا جدید و امروزی
هنوزم بعضی از پدر مادرا میگن "تو خونه پول درآوردن و پشت میز نشستن که کار نیست 😕 "
@citax_tel 👈 سیتاکس
3 198
What is an api?
مشخصا هر کسی که برنامه نویس باشه با API ها سر و کله زده اما بیایم ببینیم مفهوم API دقیقا چیه.
ای پی آی (API) یا Application Programming Interface به معنای واسط برنامهنویسی است. API یک مجموعه از توابع و روشهای برنامهنویسی است که به توسعهدهندگان اجازه میدهد تا بتوانند از قابلیتها و امکانات یک سامانه، برنامه یا سرویس دیگری استفاده کنند.
ای پی آی به طور خلاصه یک ابزار ارتباط بین برنامههاست که عملکردهای زیرساختی را برای دیگر برنامهها فراهم میکند تا بتوانند به راحتی و منعطفتر کار کنند.(مثلا وقتی داریم از یک پکیج استفاده می کنیم برای ما api هایی رو قرار داده تا بتونیم از قابلیت هاش استفاده کنیم)
مشخصات اصلی API عبارتند از:
- تعریف یک سری قوانین برای تعامل بین سیستمها یا اجزا
- تعریف ساختار دادهها، پارامترها و قالبهای ارتباطی
- فراهم کردن توابع و متدها برای انجام کارهای مورد نیاز
- محافظت از بخشهای داخلی سامانه از دسترس خارجی
- استانداردسازی روش تعامل بین برنامهها
بنابراین API یک ابزار قدرتمند است که تعامل و همکاری بین برنامهها را بسیار آسانتر میکند.
#API
@citax_tel
3 198
Maintain a project
وقتی درباره "maintain پروژه" صحبت میکنیم، به معنای حفظ و مدیریت یک پروژه میباشد. حفظ پروژه شامل فعالیتهایی است که برای حفظ عملکرد صحیح و پایداری پروژه لازم است انجام شود. این فعالیتها شامل بهروزرسانی، رفع خطاها، بهینهسازی و مدیریت منابع و زمانبندی پروژه میشوند.
مدیریت یک پروژه شامل نگهداری و بهروزرسانی کدها، مدیریت پایگاه داده، اجرای تستها و رفع خطاها، پشتیبانگیری از دادهها و مستندسازی پروژه میشود. هدف از حفظ پروژه، اطمینان حاصل کردن از استمراری بودن فعالیتهای پروژه، افزایش کیفیت و کارایی آن و جلوگیری از وقوع مشکلات و خطاهای جدی است.
@citax_tel 👈 سیتاکس
3 198
تفاوت بین برنامه نویس و مهندس نرم افزار
برای درک تفاوت بین برنامهنویس و یک مهندس نرمافزار، نیازه به تعریف هر کدوم و نقش و وظایف اونها در فرآیند توسعه نرمافزار نگاه کنیم.
برنامهنویس یا توسعهدهنده معمولاً شخصی است که مسئولیت برنامهنویسی و توسعه نرمافزار رو بر عهده داره. وظایف اصلی برنامهنویس شامل طراحی، پیادهسازی، تست و نگهداری کد است. برنامهنویسان در فرآیند توسعه نرمافزار معمولاً با زبانهای برنامهنویسی، ابزارها و فریمورکهای مرتبط با پروژه کار میکنن. اونها کد رو بر اساس نیازمندیها و استانداردهای تعیین شده توسط مشتری یا تیم توسعه، ایجاد و بهبود میدن.
از سوی دیگه، مهندس نرمافزار فردی است که در کنار برنامهنویسی، مهارتهای فنی و مهندسی دیگه ای رو هم داره. او مسئولیت طراحی و ساختاردهی بهترین راهحلهای فنی برای توسعه نرمافزار رو بر عهده داره. مهندس نرمافزار با توجه به نیازمندیها و الزامات پروژه، طرحریزی فنی میکنه، زیرساختهای مورد نیاز رو تعیین و راهحلهای بهینه رو برای مشکلات فنی ارائه میده. او همچنین مسئولیت نظارت بر کیفیت کد و عملکرد صحیح نرمافزار رو بر عهده داره.
به طور خلاصه، تفاوت اصلی بین برنامهنویس و یک مهندس نرمافزار تو دامنه ی مسئولیتها و مهارتهای مورد نیاز هستش. برنامهنویسان معمولاً بر روی پیادهسازی و توسعه کد تمرکز دارن، در حالی که مهندسان نرمافزار علاوه بر کدنویسی، به صورت گستردهتری به جنبههای مهندسی و طراحی نرمافزار توجه میکنن.
#برنامه_نویس #مهندس_نرم_افزار
@citax_tel 👈 سیتاکس
3 198
از کدر تا مهندس نرم افزار: مراحل تکامل در دنیای برنامهنویسی
تو دنیای برنامهنویسی، هر فردی که به تازگی شروع به یادگیری برنامهنویسی میکنه، به عنوان یک کدنویس شناخته میشه. با افزایش دانش و تجربه، اون میتونه به مراحل برنامهنویس، توسعهدهنده و در نهایت مهندس نرمافزار برسه.
1. کدنویس (Coder):
تو این مرحله، فرد تازهکار با اصول و مفاهیم برنامهنویسی آشنا میشه. اون میتونه کدهای ساده رو بنویسد و به تدریج با زبانها و ابزارهای برنامهنویسی آشنا بشه. کدنویس ها عموماً داخل تیمهای توسعه نرمافزار به عنوان افرادی با توانمندیهای فنی اولیه مشغول به کار میشن.
2. برنامهنویس (Programmer):
با پیشرفت تو مسیر برنامهنویسی، فرد تجربه و تواناییهای بیشتری کسب میکنه و به عنوان یک برنامهنویس توانمند شناخته میشه. تو این مرحله، فرد می تونه به طور مستقل کدهای پیچیدهتر رو بنویسه و در فرآیند توسعه نرمافزار با تیم مشارکت کنه. ایشون با استفاده از زبانهای برنامهنویسی و ابزارهای مرتبط، برنامههای کاربردی قابل استفاده رو توسعه میده.
3. توسعهدهنده (Software Developer):
تو این مرحله، فرد به درک عمیقتری از توسعه نرمافزار میرسه و تواناییهای مهارتی و فنی بیشتری پیدا میکنه. توسعهدهندگان مسئولیت طراحی و ساختاردهی بهترین راهحلهای فنی رو برای توسعه نرمافزار بر عهده دارن. اون ها با توجه به نیازمندیها و الزامات پروژه، طرحریزی فنی میکنن و راهحلهای بهینه رو برای مشکلات فنی ارائه میدن.
4. مهندس نرمافزار (Software Engineer):
مهندسان نرمافزار تخصص و تجربه فنی بالاتری نسبت به مراحل قبلی دارن. اون ها مسئولیت طراحی، توسعه و مدیریت پروژههای نرمافزاری را بر عهده دارن. به علاوه، اون ها با توجه به اصول مهندسی نرمافزار، بهینهسازی، مدیریت کیفیت و معماری نرمافزار مشغول به فعالیت میشن. مهندسان نرمافزار به طور گسترده از ابزارها و تکنولوژیهای پیشرفته استفاده میکنن و توانایی حل مسائل پیچیده رو دارن.
نکتهای که باید تأکید بشه اینه که مراحل مذکور یک تکامل طبیعی در دنیای برنامهنویسی رو نشون میده و تقسیمبندی ممکنه تو بعضی موارد نسبی و متغیر باشه. همچنین، عناوین شغلی ممکنه تو صنعت و محیطهای مختلف متفاوت باشن. اما در کلیت، تکامل از کدنویس تا مهندس نرمافزار به معنای پیشرفت فرد در مسیر حرفهای برنامهنویسی است.
#توسعه_دهنده #برنامه_نویس #مهندس_نرم_افزار
@citax_tel 👈 سیتاکس
