Syntax | سینتکس – Telegram
🔥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
دوست دارید تو میت هفته بعدی درباره چه موضوعی صحبت شه؟
تو کامنت بنویسید
👀6
Syntax | سینتکس
روشی که خودم برای حل این مشکل استفاده میکنم به این شکل است که اون آبجکت دیتابیس رو لاک میکنم تا تغییرات رو انجام بدم و بقیه ترد ها در اون لحظه دسترسی نداشته باشن. توی جنگجو به این صورت پیاده می شه. سوال: چرا من instance = cls.objects.select_for_update()…
جواب سوالی که تو این پست پرسیدم رو یکی از دوستان توی کامنت گفتن.

اما چرا orm چنین کاری رو انجام میده؟

دلیل اصلی این رفتار در بیشتر ORM‌ها، بهینه‌سازی عملکرد و کاهش تعداد کوئری‌های ارسالی به دیتابیس است.

زمانی که شما یک کوئری را در ORM می‌سازید، ORM آن را به صورت یک نمونه از یک کلاس مدل (Model) در نظر می‌گیرد. این کلاس مدل شامل اطلاعاتی است که برای انجام کوئری مورد نیاز است، مانند شرایط جستجو، مقادیر بروزرسانی و غیره. اما کوئری به صورت واقعی به دیتابیس ارسال نمی‌شود تا زمانی که شما درخواستی برای دستیابی به نتیجه کوئری داشته باشید.

به طور کلی، این رویکرد در ORM‌ها بهبود عملکرد، قابلیت تغییرپذیری و امنیت را بهبود می‌بخشد. با این حال، ممکن است در برخی موارد نیاز داشته باشید کوئری را فوراً به دیتابیس ارسال کنید، برخی ORM‌ها امکاناتی برای این منظور فراهم می‌کنند. به عنوان مثال، ممکن است بتوانید از متدی مانند .execute() در ORM استفاده کنید تا کوئری را بدون تأخیر ارسال کنید. همچنین، برخی ORM‌ها ممکن است حالت‌هایی برای اجرای فوری کوئری‌ها، مانند حالت تراکنش (Transaction)، ارائه دهند.

#orm

@citax_tel 👈 سیتاکس
👍6
Syntax | سینتکس
وضعیت شغلی شما
با توجه به اینکه خیلیا گفتن دنبال کاریم. میخوام که درباره ساخت رزومه تا گرفتن مصاحبه براتون ویدیو ظبط کنم و یه سری نکاتی که بلدم رو توضیح بدم.

تو بخش اول، رزومه رو درستش میکنیم و تو موقعیت های شغلی ای که در وب سایت های جابینجا و جاب ویژن هست، ارسال می کنیم.

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

رزومه ای که درست میکنیم برای یک شخص جونیور (Python back end developer / Django) هست که میخواد تازه وارد بازار کار بشه پس نمونه کار و تجربه کاریه زیادی نداره

اگه نظری دارید خوشحال میشم درمیون بذارید تا قبل از ظبط بهش توجه کنم

@citax_tel 👈 سیتاکس
🔥13👍6
Forwarded from ELYAS
اگه کسی هستش که دنبال کار میگرده و سابقه حداقل ۱ ساله داره ما به یه نیرو توی شرکت برای بک اند نیاز داریم خوشحال میشم رزومه بفرسته تا با هم بیشتر در موردش صحبت کنیم
Forwarded from ELYAS
آگهی استخدام و فرصت های شغلی جدید در سراسر ایران | جاب‌ویژن
https://jobvision.ir/jobs/job-detail/526593?ReferrerJobPosition=8&row=53&pageSize=30&keyword=python&searchId=383013559661990286
Syntax | سینتکس
آگهی استخدام و فرصت های شغلی جدید در سراسر ایران | جاب‌ویژن https://jobvision.ir/jobs/job-detail/526593?ReferrerJobPosition=8&row=53&pageSize=30&keyword=python&searchId=383013559661990286
بچه ها این موقعیت شغلی رو یکی توی کامنت کانالمون گذاشته که بنظرم شرایطشون خوبه.
اگه به django تسلط دارید موقعیت خوبیه
🔥5
MQ

ام کیو در برنامه‌نویسی مخفف Message Queue است. Message Queue یک سیستم نرم‌افزاری است که برای ارسال و دریافت پیام‌ها بین مؤلفه‌های یک سیستم بکار می‌رود. این سیستم به مؤلفه‌ها اجازه می‌دهد تا با یکدیگر از طریق صف‌های پیام ارتباط برقرار کنند.

RabbitMQ:
یکی از نرم‌افزارهای محبوب Message Queue است که به عنوان یک سرویس بروکر پیام (Message Broker) عمل می‌کند. در RabbitMQ، برنامه‌ها می‌توانند پیام‌ها را به صف‌های پیام (Message Queue) ارسال کنند و برنامه‌های دیگر می‌توانند این پیام‌ها را از صف‌ها دریافت کنند و بر اساس آن‌ها عملیات خاصی را انجام دهند. این نوع سیستم‌ها برای مدیریت دسترسی به پیام‌ها، توزیع بار، قابلیت اطمینان و ارتباط بین برنامه‌های مختلف بسیار مفید است.

با استفاده از RabbitMQ و دیگر سیستم‌های MQ، برنامه‌ها می‌توانند به صورت ناهمزمان و مستقل از همدیگر کار کنند. برنامه‌ای که پیام را ارسال می‌کند، نیازی به انتظار برای پاسخ ندارد و می‌تواند ادامه کار خود را انجام دهد. برنامه‌های دریافت‌کننده نیز می‌توانند پیام‌ها را به ترتیب دریافت کنند و بر اساس نیاز خود عملیات مورد نظر را انجام دهند (برای مثال در ارسال ایمیل)

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

#MQ #rabbitmq

@citax_tel 👈 سیتاکس
👍9
برنامه (Citax Weekly) 🔥

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

جدا از این موارد دوست دارم روی یک سری مسائل دیگه مثل نحوه فعالیت در لینکدین، راه اندازی استارت اپ، مهاجرت و ... هم گفتگو کنیم.

برنامه بصورت پادکست، میت و وبینار برگزار میشه

اگه نظر و انتقادی دارید خوشحال میشم درمیون بذارید

#citax_weekly

@citax_tel 👈 سیتاکس
🔥10👍21
IMS

سیستم مدیریت هویت (Identity Management System) یا به اختصار IMS، یک نوع سیستم مدیریت است که برای مدیریت و کنترل هویت و دسترسی کاربران استفاده می‌شود.

به طور کلی، سیستم مدیریت هویت شامل موارد زیر است:

1. احراز هویت (Authentication): شناسایی و تأیید هویت کاربران با استفاده از اطلاعاتی مانند نام کاربری و رمز عبور، کارت هوشمند، اثر انگشت و یا سایر روش‌های تشخیص هویت.

2. مجوزدهی و کنترل دسترسی (Authorization and Access Control): تعیین سطح دسترسی کاربران به منابع و سیستم‌های مختلف بر اساس نقش و مسئولیت کاربر

3. مدیریت هویت (Identity Management): مدیریت و ثبت هویت کاربران، شامل ایجاد و حذف حساب کاربری، تغییرات مربوط به هویت کاربران و همچنین همگام‌سازی اطلاعات هویت در سیستم‌های مختلف.

4. سیاست و قوانین امنیتی (Security Policies and Compliance): تعیین سیاست‌ها و قوانین امنیتی برای حفاظت از اطلاعات حساس و اطمینان از رعایت استانداردها و قوانین مربوط به حفظ حریم خصوصی و امنیت اطلاعات

#IMS

@citax_tel 👈 سیتاکس
❤‍🔥7🔥2👍1
اقا من یچیزی میگم، تجربه شخصی منه. ممکنه اصلأ درست نباشه، ولی دارم ازش نتیجه میگیرم. شاید برای شماهم بدرد بخوره.

من دوره جنگو خیلی دیدم، کلی هم تمرینی پروژه زدم و گذاشتم رو گیتهاب.

به مدت ۱ سال و نیم هرروز داشتم جنگو مینوشتم و دوره جنگویی میدیدم.

بعد یک مدت متوجه شدم یه عده مسائل هی تکرار میشن تو کورس ها.

مثلاً static file ها تو هرررر دوره ای که بگی داره توضیح داده میشه و ۲۰ دقیقه وقتت رو میگیرن. (حداقل).
ولی هیچکدوم عمیق کاور نمیکنن. نمیگن استتیک لودر چیه؟ چیکارا میکنه؟

الان برای یادگیری هر ابزاری، یه چنین کاری رو میکنم. خیلی بنظرم بهتر دارم یاد میگیرم:

قدم اول: یه کورس ویدیویی میبینم. کوتاه و مختصر درحدی که ببینم این فریمورک ساختارش چیه و چیکارا میکنه.

قدم دوم: توتوریالِ اون فریمورک رو از سایت رسمیش میخونم

قدم سوم: میرم داکشو میخونم 🤷‍♂.
اگر مثل fastapi‌ باشه، میرم همشو میخونم. اگر مثل جنگو زیاد باشه، صرفا سرفصل هاشو میبینم که یه مایندستی داشته باشم. بدونم جنگو اینکارارو هم میکنه.

بعدش پروژه تمرینی میزنم و هی اصلاحش میکنم.

شما ۲۰ تا کورس جنگو رو پشت سرهم ببینی، شاید یچیزایی یاد بگیری. مثلاً کاربرد تمپلیت تگ چیه، ولی هنوز ذهنیتش رو نداری که یه پروژه خوب بزنی.

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

مثلاً میخوای یه بخش otp بسازی و باهاش یوزر رو وریفای کنی.

میای ببینی خب من میتونم یکی ازین دو کار رو بکنم:

۱- یا یوزر رو بزارم تو کش، بعد وریفای شدن اینسرت کنم به دیتابیس اصلی

۲- یا همون اول اینسرت شه به دیتابیس اصلی، اگر یموقع وریفای نکرد با سلری بیتز پاکش کنم.

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

مثلاً کش کردن تو جنگو، استفاده از سلری تو جنگو و چیزای دیگه.
کلیی چیزم وسطش یاد میگیری.

حالا بعد یمدت میای ازین سناریو ایراد میگیری.
مثلاً میگی چرا نباید یوزر رو میریختم تو کش؟ ایا کار بهتریم بود؟

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

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

[Mohammad]

@khat_academy
👍19🌚1
Web

قراره درباره وب صحبت کنیم که زندگی بدون اون قابل تصور نیست.

اول از همه وب (Web) به چه معنیه ؟

وب (Web) به معنای جهانی شدن شبکه‌ای از اسناد مرتبط است که از طریق اینترنت قابل دسترسی هستش. این اسناد شامل صفحات وب، تصاویر، ویدئوها، فایل‌ها و منابع دیگری هستند که با استفاده از پروتکل‌های اینترنتی قابل مشاهده و دسترسی هستند. وب به عنوان یک سیستم اطلاعاتی و ارتباطی گسترده، به کاربران این امکان رو می‌ده تا اطلاعات رو به دست آورده، محتوا رو مشاهده و به اشتراک بذارن و با همدیگه در ارتباط باشن.

تو ادامه پست های امروز قراره بریم تو دل وب ...

#وب #web

@khat_academy
🔥6👍3
تاریخچه وب:

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

پیدایش وب:
در سال ۱۹۶۹، طرحی با نام ARPANET توسط وزارت دفاع آمریکا به منظور ارتباط بین شبکه‌های کامپیوتری توسعه یافت. این پروژه بزرگ، به عنوان پدربزرگ وب شناخته می‌شود. در سال ۱۹۷۱، ایمیل به عنوان یکی از اولین خدمات ارتباطی در ARPANET معرفی شد.

ظهور ایده وب:
تیمی به رهبری برنرز لی، در سوئیس، در دهه ۱۹۸۰ به فکر ایجاد یک سیستم اسناد مرتبط در قالب یک شبکه جهانی افتادند. این تیم در سال ۱۹۸۹ نسخه اولیه سیستم مدیریت اسناد وب را تحت عنوان "Enquire" ارائه دادند. این سیستم تلاشی برای ایجاد ارتباطات میان متن‌ها و پیوندهای آنها بود.

تولد وب:
تاریخ ۱۲ مارس ۱۹۸۹ به عنوان تاریخ تولد وب شناخته می‌شود. در این تاریخ، تیم برنرز لی برای اولین بار نسخه اولیه سیستم مدیریت اسناد وب را در دستگاه NeXT Computer خود اجرا کردند. این تجربه نخستین گام در راه تبدیل وب به یک پلتفرم جهانی بود.

تحول وب:
در دهه ۱۹۹۰، تحولات مهمی در وب رخ داد. در سال ۱۹۹۰، تیم برنرز لی به همراه رابرت کایلیا و تیمی از CERN، اولین مرورگر وب به نام WorldWideWeb را ارائه دادند. در سال ۱۹۹۳، مرورگر Mosaic به عنوان اولین مرورگر وب گرافیکی عمومی منتشر شد و باعث گسترش وب در بین کاربران غیرفنی شد.

شبکه جهانی و توسعه وب:
در سال ۱۹۹۴، تیم برنرز لی و World Wide Web Consortium (W3C) تاسیس شد که به منظور توسعه استانداردها و پروتکل‌های وب مشترک فعالیت می‌کند. ایجاد زبان HTML و پروتکل انتقال سند HTTP از جمله دستاوردهای این تیم است که به استاندارد‌سازی وب کمک کرد.

در سال‌های بعدی، با ظهور و استفاده گسترده از مرورگرهای وب مانند Internet Explorer و Netscape Navigator، استقبال عمومی از وب افزایش یافت. سپس با ظهور تکنولوژی‌های دینامیکی مانند JavaScript و فرمت‌های چندرسانه‌ای مانند Flash، وب تبدیل به یک بستر تعاملی و گویایی شد.

وب ۲.۰ و وب اجتماعی:
در دهه ۲۰۰۰، مفهوم وب ۲.۰ مطرح شد که بر تعامل کاربران با محتوا تأکید می‌کرد. وب ۲.۰ و وب اجتماعی شامل ابزارها و سرویس‌هایی مانند ویکی‌ها، وبلاگ‌ها، شبکه‌های اجتماعی و پلتفرم‌های به اشتراک گذاری محتوا بود که کاربران را قادر می‌ساخت تا محتوا را تولید، ویرایش و به اشتراک بگذارند.

وب ۳.۰ و آینده وب:
از دهه ۲۰۱۰ به بعد، مفهوم وب ۳.۰ و اینترنت اشیاء (IoT) مطرح شد که به کاربردهای گسترده‌تری از تکنولوژی وب و ارتباط بین اشیاء اشاره دارد. با توسعه هوش مصنوعی، واقعیت مجازی و افزایش سرعت ارتباطات، وب به سمت یک شبکه بزرگتر، هوشمندتر و متصل‌تر در حال تحول هست.

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

#وب #web

@khat_academy
👍7