CodeCrafters
765 subscribers
92 photos
50 videos
42 files
170 links
Download Telegram
مطالعه موردی 2: استفاده از hstore برای مدیریت جفت‌های کلید-مقدار در برنامه‌های تجارت الکترونیک

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

راهکار: این شرکت از افزونه hstore در PostgreSQL برای مدیریت ویژگی‌ها ویژه محصولات به صورت پویا و انعطاف‌پذیر استفاده می‌کند. آنها یک جدول برای ذخیره اطلاعات محصول ایجاد می‌کنند و از نوع داده hstore برای ویژگی‌های سفارشی استفاده می‌کنند.

با پیاده‌سازی hstore، آنها تجربه کاربری برای فروشندگان و مشتریان را بهبود می‌بخشند. در ادامه به توضیحات زیر می‌پردازیم:

ویژگی‌های سفارشی محصول: فروشندگان می‌توانند ویژگی‌های سفارشی محصولات را مانند گزینه‌های رنگ، نوع و اطلاعات فنی اضافه کنند. ذخیره سازی کلید-مقدار hstore به آنها اجازه می‌دهد به صورت کارآمد و بدون تغییر ساختار جدول، این ویژگی‌ها را اضافه و مدیریت کنند.

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

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

قابلیت مقیاس‌پذیری: با رشد پلتفرم و افزایش تعداد محصولات و فروشندگان، رویکرد انعطاف‌پذیر hstore امکان سازگاری آسان جدول پایگاه داده با ویژگی‌های جدید را بدون نیازش برای تغییرات گسترده در طرح جدول نیاز ندارد.

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

@Code_Crafters
#postgresql
👍31👏1
🤔1
👍3🔥32👏2
CodeCrafters
Photo
یه خاطره براتون بگم

ما تو شرکت چندنفر بودیم
اما کار اصلی رو من و یک نفر دیگه انجام میدادیم


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

ما دو نفر ساعت‌ها بحث کردیم واکاوی کردیم و بررسی کردیم همه چی رو یجاهایی که مباحث سنگینتر میشد حتی بقیه توان گوش دادن رو نداشتن چون درکی از موضوع در اون حد سنگین رو نداشتن

خروجی رو حدود سه بار تغییر دادیم تا اون چالش رو رد کردیم و flow ما در حدود 90 درصد خوب جواب میداد که این خودش واقعا موفقیت بزرگی بود

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


اره حق داشت واقعا
چون مدیرمون تو این یک مورد بدترین و تصمیم اشتباه رو گرفته بود فشار کاری روی من و اون بنده خدا بخاطر عدم تخصص نیروهای دیگه زیاد بود در حدی که من راحت میتونستم جایگاه و تصمیمات مدیر رو تحت تاثیر شدید بزارم چون تمامی سرویس‌ها بخش عظیمی ازش وابسته به من و اون نفر دیگه بود

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

اگه ما دونفر به اختلاف و دعوا میخوردیم موجب انحلال موقتی شرکت میشد

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


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


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


@code_crafters
5👍2🔥1
خیلی از مواقع اون چیزی که ذهنمون رو درگیر میکنه در حین کدنویسی و برنامه نویسی مباحث مربوط به clean بودن هست

چه نکاتی رو باید رعایت کنیم یا به چه شکلی کد نوشته بشه که تمام نکات clean رعایت بشه و قابلیت خواندن برای دیگر برنامه نویس‌ها رو هم داشته باشه

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


خبر خوب اینکه برای بچه‌های پایتونی ماژولی داریم با نام pylint که کد شمارو خط به خط بررسی میکنه و تمام موارد بالارو بهتون میگه جهت تولید یک کد پایتونی با استانداردهای کامل clean بودن

در ویدیوی زیر نمونه اون رو ببینید
https://youtube.com/watch?v=fFY5103p5-c&si=Ta8k8gZkZcuesh4v



@code_crafters
👍21🔥1
CodeCrafters
خیلی از مواقع اون چیزی که ذهنمون رو درگیر میکنه در حین کدنویسی و برنامه نویسی مباحث مربوط به clean بودن هست چه نکاتی رو باید رعایت کنیم یا به چه شکلی کد نوشته بشه که تمام نکات clean رعایت بشه و قابلیت خواندن برای دیگر برنامه نویس‌ها رو هم داشته باشه علاوه…
برای دوستان دات نتی میتوانند از roslyn استفاده کنند که بصورت پیشفرض روی visual studio نصبه و اتوماتیک این کارو میکنه

اگر خواستید پیشرفته تر کار کنید میتوانید از SolarLint استفاده کنید که رایگان هم هست.


پ.ن: این عکس هم یک نمونه از کارایی SolarLint هستش که در همون ادیتور، به شما توضیح میده که چطور مشکل را حل کنید .

@code_crafters
👍3🔥1😁1
دوستانی که میخوان کوبر یاد بگیرن دوتا لینک رو براتون میزارم اول کتاب و دومی یک سایت آموزشی:

(خیلی از دوستان جهت شروع یادگیری کتاب in action رو معرفی میکنن،مورد دوم اینکه سایت مدنظر با ساده‌ترین زبان ممکن تمامی اجزا و امکانات کوبرنتیز رو توضیح داده)


📖 The kubernetes book
https://download.bibis.ir/Books/Programming/Devops/Kubernetes/2022/The-Kubernetes-Book-(2022-Edition)-(Nigel-Poulton)_bibis.ir.pdf


🌐 kubernetes vmware.com
https://www.vmware.com/topics/glossary/content/kubernetes.html


#k8s

@code_crafters
👍2🔥1🥰1
یکی از مهم ترین بخش های زبان کوئری نویسی SQL قسمت WHERE JOIN هست از هر دو میتوان برای کوئری زدن روی دو و یا چند جدول استفاده کرد اما تفاوت هایی با هم خواهند داشت با ذکر یک مثال این مورد را بیشتر توضیح میدهیم.
دو جدول فرضی را در نظر بگیرید
۱. جدول User با مقادیر Id, user_name , phone_number
۲.جدول Book با مقادیر Id, name, price, phone_number
(در واقعیت جدول Book به جدول User با کلید خارجی متصل میشود ولی در این مثال از این مورد چشم پوشی شده است )

اگر بخواهیم با استفاده از WHERE اطلاعات این دو جدول را بر اساس شرط phone_number با هم ترکیب کنیم، می‌توانیم از کوئری زیر استفاده کنیم:

SELECT *
FROM User, Book
WHERE User.phone_number = Book.phone_number;

این کوئری تمام رکوردهایی را انتخاب می‌کند که مقدار phone_number آنها در هر دو جدول یکسان است.

همچنین، می‌توانیم با استفاده از JOIN اطلاعات این دو جدول را بر اساس شرط phone_number با هم ترکیب کنیم. این مثال را با استفاده از JOIN به صورت زیر توسعه می‌دهیم:

SELECT *
FROM User
JOIN Book ON User.phone_number = Book.phone_number;

این کوئری نیز تمام رکوردهایی را انتخاب می‌کند که مقدار phone_number آنها در هر دو جدول یکسان است. با استفاده از JOIN، ما رکوردهای مشابه را از دو جدول به هم متصل می‌کنیم تا نتایج را بدست آوریم.

تفاوت اصلی در استفاده از WHERE و JOIN در این مثال، در نحوه نوشتن کوئری است. استفاده از JOIN به صورت مستقیم تر و خواناتر است و به طور ضمنی بهینه‌ترین روش اتصال دو جدول را انتخاب می‌کند. همچنین، استفاده از JOIN معمولاً در کوئری‌های پیچیده‌تر و وابستگی‌های بیشتر بین جداول مفیدتر است، زیرا به شما امکان اتصال جدول‌ها بر اساس شرایط مشترک را می‌دهد و نتایج را به صورت یکپارچه‌تر و منظم‌تر برگرداند.

#SQL
@code_crafters
👍41🔥1
۱۰ دستور Git👩‍💻 که هر برنامه نویسی باید بداند :

گیت یک بخش مهم از برنامه‌نویسی امروزه است (به خصوص اگر با یک تیم کار می‌کنید) و در صنعت نرم‌افزاری به طور گسترده استفاده می‌شود.

از آنجایی که تعداد زیادی دستور مختلف در گیت وجود دارد، تسلط بر گیت زمان می‌برد. اما برخی از دستورات به طور متداول‌تر استفاده می‌شوند. در این مقاله، ۱۰ دستور Git رایج‌تر که هر برنامه‌نویس باید بداند را به اشتراک می‌گذاریم و توضیح می‌دهیم.

⚠️ برای درک این مقاله، باید مفاهیم پایه Git را بدانید.

۱.Git clone
دستور Git clone برای دانلود کردن کد موجود از یک مخزن مانند Github👩‍💻یا Gitlab👩‍💻 و... استفاده می‌شود. به عبارت دیگر، Git clone در واقع یک کپی از آخرین نسخه پروژه در مخزن را بر روی کامپیوتر شما ذخیره می‌کند.

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

git clone <https://name-of-the-repository-link>

این کار باعث ایجاد یک کپی از پروژه در فضای کاری محلی شما می‌شود، به طوری که شما می‌توانید با آن کار کنید و تغییرات لازم را اعمال کنید.

۲.Git branch

شاخه‌ها (Branches) در دنیای گیت بسیار مهم هستند. با استفاده از شاخه‌ها، چندین توسعه‌دهنده قادر خواهند بود به طور همزمان و موازی بر روی یک پروژه کار کنند. ما می‌توانیم از دستور git branch برای ایجاد، لیست کردن و حذف شاخه‌ها استفاده کنیم.

ساخت یک branch جدید :

git branch <branch-name>

این دستور یک شاخه را به صورت local ایجاد می‌کند. برای ارسال شاخه جدید به مخزن (repository)، باید از دستور زیر استفاده کنید:

git push -u <remote> <branch-name>

مشاهده لیست شاخه ها
git branch or git branch --list

حذف یک شاخه

git branch -d <branch-name>

۳. Git checkout

این نیز یکی از پراستفاده‌ترین دستورات گیت است. برای کار در یک شاخه، ابتدا باید به آن تغییر شاخه دهید. ما بیشتر از دستور git checkout برای تغییر از یک شاخه به شاخه دیگر استفاده می‌کنیم. همچنین می‌توانیم از آن برای چک کردن فایل‌ها و کامیت‌ها نیز استفاده کنیم.

git checkout <name-of-your-branch>

برای تغییر موفقیت‌آمیز بین شاخه‌ها، باید مراحل زیر را دنبال کنید:

- تغییرات در شاخه فعلی شما باید قبل از تغییر شاخه، commit یا stash شوند.
- شاخه‌ای که می‌خواهید به آن switch کنید باید در local شما وجود داشته باشد.

همچنین یک دستور میانبر وجود دارد که به شما امکان ایجاد و تغییر به یک شاخه را در یک مرحله می‌دهد.

git checkout -b <name-of-your-branch>

این دستور یک شاخه جدید را در local ایجاد می‌کند (-b به معنای branch است) و به طور مستقیم پس از ایجاد، به شاخه جدید تغییر می‌دهد.

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

4.Git status

دستور Git status به ما تمام اطلاعات لازم درباره شاخه فعلی را ارائه می‌دهد.

git status

ما می‌توانیم اطلاعاتی مانند موارد زیر را جمع‌آوری کنیم:

آیا شاخه فعلی بروز است یا خیر
آیا چیزی برای commit، push یا pull وجود دارد یا خیر
آیا فایل‌ها staged، unstaged یا untracked هستند یا خیر
آیا فایل‌ها ایجاد شده، تغییر کرده یا حذف شده‌اند

۵.Git add

وقتی یک فایل را ایجاد، تغییر یا حذف می‌کنیم، این تغییرات در local اتفاق می‌افتد و commit بعدی ما شامل نمی‌شوند (مگر اینکه تنظیمات را تغییر دهیم).

برای اضافه کردن تغییرات یک یا چند فایل به commit بعدی، باید از دستور git add استفاده کنیم.

برای اضافه کردن تنها یک فایل:

git add <file>

برای اضافه کردن همه تغییرات و فایل‌های جدید به یکباره، می‌توانید از دستور زیر استفاده کنید:

git add -A  

مهم: دستور git add تغییری در مخزن ایجاد نمی‌کند و تغییرات ذخیره نمی‌شوند تا زمانی که از دستور git commit استفاده کنیم.

#Git

@Code_Crafters
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1
۶.Git commit

این شاید پراستفاده‌ترین دستور Git باشد. هنگامی که به یک نقطه خاص در توسعه رسیدیم، می‌خواهیم تغییرات خود را ذخیره کنیم (ممکن است پس از انجام یک وظیفه یا رفع یک مشکل خاص).

دستور Git commit مانند قرار دادن یک نقطه کنترل در فرآیند توسعه است که در صورت نیاز می‌توانید در آینده به آن بازگردید.

همچنین باید یک پیام کوتاه بنویسیم تا توضیح دهیم که چه چیزی را در کد توسعه داده یا تغییر داده‌ایم.

git commit -m "commit message"

مهم: دستور git commit تغییرات شما را فقط به صورت local ذخیره می‌کند.

۷.Git push

بعد از commit کردن تغییرات خود، چیزی که باید بعد از آن انجام دهید، ارسال تغییرات به سرور است. دستور git push، commit های شما را به مخزن میفرستد.

git push <remote> <branch-name>

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

git push --set-upstream <remote> <name-of-your-branch>

یا

git push -u origin <branch_name>

مهم: دستور git push فقط تغییراتی را که commit شده‌اند، آپلود می‌کند.

۸.Git pull

دستور git pull برای دریافت به‌روزرسانی‌ها از مخزن استفاده می‌شود. این دستور ترکیبی از دستورات git fetch و git merge است، یعنی وقتی از git pull استفاده می‌کنیم، به‌روزرسانی‌ها را از مخزن دریافت می‌کند (git fetch) و به‌صورت فوری تغییرات جدید را در local شما اعمال می‌کند (git merge).

git pull <remote>

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

۹.Git revert

گاهی اوقات نیاز داریم تغییراتی که اعمال کرده‌ایم را لغو کنیم. روش‌های مختلفی برای لغو تغییرات به صورت local یا remote (بسته به نیازمندی‌های ما) وجود دارد، اما باید با دقت از این دستورات استفاده کرد تا از حذف ناخواسته جلوگیری کنیم.
یک روش ایمن برای لغو کامیت‌های ما استفاده از دستور git revert است. برای مشاهده تاریخچه کامیت‌های ما، ابتدا باید از دستور git log --oneline استفاده کنیم.

سپس فقط باید کد هش را در کنار کامیتی که می‌خواهیم لغو کنیم مشخص کنیم.
git revert <hash-code>

دستور git revert تغییرات کامیت مورد نظر را لغو می‌کند، اما یک کامیت جدید بدون حذف کامیت قبلی ایجاد می‌کند.
مزیت استفاده از git revert این است که تاریخچه کامیت‌ها را تغییر نمی‌دهد. این بدان معنی است که هنوز می‌توانید تمامی کامیت‌ها را در تاریخچه خود مشاهده کنید، حتی کامیت‌هایی که لغو شده‌اند.

یک اقدام ایمن دیگر این است که همه چیز در سیستم local ما اتفاق می‌افتد مگر اینکه آنها را به مخزن remote آپلود کنیم. به همین دلیل استفاده از git revert ایمن‌تر است و روش ترجیحی برای لغو کامیت‌هاست.
۱۰. Git merge

وقتی توسعه در شاخه‌ی خود را کامل کرده‌اید و همه چیز به خوبی کار می‌کند، مرحله‌ی نهایی ادغام شاخه با شاخه‌ی اصلی (dev یا master) است. این کار با استفاده از دستور git merge انجام می‌شود.

در اصل، git merge شاخه‌ شما را همراه با تمام کامیت‌هایش به شاخه‌ی dev (یا master) ادغام می‌کند. مهم است که به یاد داشته باشید که ابتدا باید در شاخه‌ی مورد نظر که می‌خواهید با شاخه‌ی ویژگی خود ادغام کنید، حضور داشته باشید.

به عنوان مثال، وقتی می‌خواهید شاخه‌ی ویژگی خود را با شاخه‌ی dev ادغام کنید:

ابتدا باید به شاخه‌ی dev تغییر شاخه دهید.
git checkout dev

قبل از ادغام، باید شاخه dev خود را به‌روز کنید.

git fetch

در نهایت، می‌توانید شاخه‌ی خود را به شاخه‌ی dev ادغام کنید.

git merge <branch-name>


راهنمایی: مطمئن شوید که شاخه dev شما دارای آخرین نسخه است قبل از ادغام شاخه‌هایتان، در غیر این صورت ممکن است با تداخل‌ها یا مشکلات دیگری روبه‌رو شوید.

این ده دستور Git رایج‌ترین دستورهایی هستند که در برنامه‌نویسی روزانه با آنها روبرو می‌شویم. هنوز بسیاری از موارد دیگر درباره Git وجود دارد که در مقالات جداگانه بعدی توضیح خواهیم داد.

#Git

@Code_Crafters
👍5🔥1👏1
یکی از موضوعات قابل اهمیت امروز بچه‌های بکند و تا حدودی دواپس کارها بحث مانیتورینگ سرور و زیر ساخت می باشد

امروز اکثر شرکت‌ها این موضوع رو الزام میدونن و بسیار قابل توجه نیز میباشد

یکی از ابزارهای معروف و رایگان این حوزه هم grafana هست که نه تنها در زیر ساخت و سرور که حتی در حوزه مالی و بازارهای تحلیلی هم جایگاه ویژه خود را دارد در لینک زیر یک آموزش براتون قرار میدم که در تایم کوتاهی و به زبان ساده سریعا شمارو با راه اندازی و کانفیگ این ابزار آشنا میکنه

بدون فیلترشکن وارد وب سایت بشید

https://git.ir/udemy-grafana-beginners-to-advance-crash-course-2021/

@code_crafters
👍61🔥1
Coding Clean, Reliable, and Safe REST APIs with ASP.NET Core 8: Develop Robust Minimal APIs with .NET 8
🔥4❤‍🔥1👏1💩1👾1
اثبات وجود ارواح و اجنه با هوش مصنوعی



(ترکیب تشخیص چهره و برنامه نویس جونیور)
#fun

@code_crafters
😁5😐1
پروتکل SMTP (Simple Mail Transfer Protocol) یک پروتکل استاندارد برای ارسال ایمیل بین سرورها است. این پروتکل به عنوان یکی از اصلی‌ترین پروتکل‌ها در ارسال و تحویل ایمیل در اینترنت استفاده می‌شود.

عملکرد SMTP به صورت زیر است:

1. برقراری ارتباط: ارتباط بین کلاینت ایمیل (نرم‌افزار ایمیل شما) و سرور SMTP ارائه دهنده خدمات ایمیل شما برقرار می‌شود.

2. هماهنگی: کلاینت ایمیل شروع به ارسال دستورات SMTP می‌کند و سرور SMTP پاسخ‌های مناسب را ارسال می‌کند.

3. تبادل اطلاعات ایمیل: پس از برقراری ارتباط و هماهنگی، کلاینت ایمیل شروع به ارسال اطلاعات ایمیل می‌کند. این اطلاعات شامل آدرس فرستنده، آدرس گیرنده، عنوان، متن و هر پیوستی است.

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

5. پایان ارتباط: پس از انجام تحویل ایمیل، ارتباط بین کلاینت ایمیل و سرور SMTP قطع می‌شود و عملیات ارسال ایمیل به پایان می‌رسد.

پروتکل SMTP یک پروتکل ساده و متن باز است که به صورت متمرکز بر روی ارسال و تحویل ایمیل تمرکز دارد. اما برای امنیت و مدیریت ایمیل، پروتکل‌هایی مانند POP (Post Office Protocol) و IMAP (Internet Message Access Protocol) نیز استفاده می‌شوند.

@Code_Crafters
2👍2👎1💋1😘1
چرا برنامه نویسان حالت تاریک رو ترجیح میدهند چون نور حشرات رو جذب می‌کند.

#fun
@code_crafters
😁7👎2
در خصوص بایدها و نبایدهای اجرا کردن دیتابیس‌ها توسط k8s توضیحات جالب و البته کوتاه این لینک مفید می باشد

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


https://cloud.google.com/blog/products/databases/to-run-or-not-to-run-a-database-on-kubernetes-what-to-consider


#k8s
#postgresql

@code_crafters
👍3
وب سایت کانال https://codecrafters.ir

لیست هشتک‌ها در کانال رو در زیر براتون خواهم گذاشت و آپدیت خواهد شد


#design_patterns الگوهای طراحی

#postgresql پستگرس

#k8s کوبرنتیز

#agile اجایل
#scrum

#algorithm الگوریتم

#video

#meeting متینگ‌

#principles اصول کدنویسی

#project_managment_system مدیریت تیم

#free خارج از مبحث کامپیوتر


#app برنامه‌های کاربردی

#Git #actions مباحث مربوط به گیت و گیتلب

#conda #env کار با

#Docker مباحث مربوط به داکر

#AI #ML مباحث هوش مصنوعی

#book معرفی کتاب

#monitoring بررسی وضعیت سیستم و کد

#concurrency همزمانی کتاب grokking concurrency


#blovkchain #web3

#DDD #domain_driven_design

#BDD #behavior_driven_development

#soa #sso #microservice


@Code_Crafters

Git Hub:
https://github.com/CodeCrafters-ir/
👍1