TorhamDev | تورهام 😳
دوستان ترجیح میدم دیگه برنامهنویس رها کنم، بازار کار هم بسیار خرابه ترجیح میدم وقتم رو روی یک مهارت دیگه بزارم، همین روزا هم AI جامون میگیره آینده ای داخلش نمیبینم 😔💔
اینکه یک عده فکر کردن این حرف جدی بود نشونه اینه دروغگو خوبی ام یا اونا زودباور؟
🤣12👍2💩1
یکی از اکستنشنهایی که استفاده میکنم گیتایموجی هستش. کمک میکنه راحت تر رو کامیت هاتون ایموجی بزارید و مثلا خفنتر به نظر بیایید.
البته برای یکسری کارها ایموجی نداره شاید بعدا بهش پولریکوئست زدم.
@TorhamDevCH
البته برای یکسری کارها ایموجی نداره شاید بعدا بهش پولریکوئست زدم.
@TorhamDevCH
❤6👍5💩1
Forwarded from Python BackendHub (Mani)
واقعا متوجه نمیشم استفاده از AI برای یک برنامه نویس چه آموزشی میخواد؟ کوه قرار نیست بکنید که.
اگه برای نصب یک cursor یا auto complete نیاز به دوره یوتیوب دارین، واقعا باید یک مرحله برگردین عقب و فعلا کد نزنید.
و اینکه شما از این ابزار ها استفاده میکنید از دنیا عقب نیستین و جاتون هم قرار نیست کسی بگیره که از این ابزارا استفاده میکنه، یک سری ابزاره یک سریا استفاده کردن و یک سریا نکردن و حتی دیسیبلش کردن. من هنوز engineer ای میبینم که از AI استفاده نمیکنه و خیلی خروجی بیشتری داره نسبت به کسی که داره استفاده میکنه 🙂
خودم شخصا در حد یک اتوکامپلیت و یک وقتا به جای گوگل وقتی نمیدونم چیو باید سرچ کنم استفاده میکنم.
@PyBackendHub
اگه برای نصب یک cursor یا auto complete نیاز به دوره یوتیوب دارین، واقعا باید یک مرحله برگردین عقب و فعلا کد نزنید.
و اینکه شما از این ابزار ها استفاده میکنید از دنیا عقب نیستین و جاتون هم قرار نیست کسی بگیره که از این ابزارا استفاده میکنه، یک سری ابزاره یک سریا استفاده کردن و یک سریا نکردن و حتی دیسیبلش کردن. من هنوز engineer ای میبینم که از AI استفاده نمیکنه و خیلی خروجی بیشتری داره نسبت به کسی که داره استفاده میکنه 🙂
خودم شخصا در حد یک اتوکامپلیت و یک وقتا به جای گوگل وقتی نمیدونم چیو باید سرچ کنم استفاده میکنم.
@PyBackendHub
👍23❤1💩1
TorhamDev | تورهام 😳 pinned «https://youtu.be/t9K28workzQ بیایید باهم تمرین دانشگاه رو حل کنیم. @TorhamDevCH»
سوال آیا عملیات Read در هشمپ یا همون هشتیبل همیشه O(1) هستش؟
👎9💩4
داخل یک هشمپ بهترین حالت ممکن ( best case scenario ) همیشه O(1) خواهد بود، اما گاهی این عملیات میتونه تبدیل به O(N) بشه. اما چطوری؟
برای فهمیدن این سوال باید اول هش مپ رو بفهمید.
هشمپ
فرض کنید ما یک صندوق امانات بزرگ داریم، حالا اگه ما خیلی رندوم بریم یک وسلیه رو داخل یکی از صندوقها بزاریم و بعد از چند وقت بخواییم بریم وسیله که لازم داریم رو برداریم احتمال اینکه جاشو فراموش کنید خیلی زیاده. برای اینکه فراموش نکنیم یک صندوقدار استخدام میکنیم و این صندوق دار به ما میگه که اسمتون رو به من بگید من یادم خواهد بود وسیلههای شما داخل کددم صندوق وجود داره. صندوقدار ما یک فرمول خیلی خاص داره که رو هر اسم اجراش میکنه و خروجیش یک شماره صندوق خواهد بود و برای اینکه عدد خروجیش از تعداد صندوقهامون بیشتر نشه اون تقسیم برم تعداد صندوقها میکنه
عدد خروجی از اسم / تعداد تمام صندوق ها = صندوق مورد نظر
حالا هر وقت ما بیاییم و اسممون رو بهش بگیم اون شماره صندوق مارو خواهد گفت.
این دقیقا اتفاقی که داخل هشمپ میوفته، صندوقامانات ما همون array ما هست و صندوقدار ما همون الگوریتم hash ما هستش.
عمل خوندن یا همون درخواست صندوق وسایلامون در بهترین حالت همیشه O(1) چون صندوقدار مستقیم مارو میفرسته سراغ صندوقمون
اما اگه یک روزی فرمول صندوق دار اشتباه در بیاد و به دو نفر یکصندوق رو ارائه بده چه اتفاقی میوفته؟ تو این حالت صندوق دار روی وسیلهها یک برچسب میزنه، برای مثال اسم صاحب وسیله رو مینویسه روش و اون وسایل کنار همدیگه میزاره، حالا اگه صندوق دار ما پیر و خسته باشه و خیلی از افراد به یک صندوق ثابت بفرسته و هربار صرفا یک برچسب بزنه روی وسیله دفعه بعدی که ما بخاییم وسیلهمون برداریم به صندوق که برسیم لازمه دنبال وسیله خودمون میون خیلی از وسایلهای دیگه بگردیم که این عمل گشتن قالبا O(n) هستش که n تعداد وسایلهای داخل اون صندوق،
داخل خود برنامهنویسی هم وقتی الگوریتم هش ما به یک جای خاص array دیتا زیاد بفرسته و اینا نسبت به پیاده سازی یا linked list میشن یا یک areay داخل همون array ایجاد میکنن و گشتن در اون واحد از هس تیبیل ما O(n) خواهد بود.
البته همه هش مپها نمیاد linked list ایجاد کن بعضیهاشون اگه خونه پر باشه دنبال خونه خالی بعدی میگردن و دیتا میزارن اونجا که باز هم عمل گشتن O(n) میشه چون باید دنبال خونه ها بعدی بگردید تا وقتی دیتاتون بگیرید یا کلا پیدا نکنید :D
یک نفر نمیدونست گفتم بنویسم هم اون بدونه هم شما بدونید 😂❤️
@TorhamDevCH
برای فهمیدن این سوال باید اول هش مپ رو بفهمید.
هشمپ
فرض کنید ما یک صندوق امانات بزرگ داریم، حالا اگه ما خیلی رندوم بریم یک وسلیه رو داخل یکی از صندوقها بزاریم و بعد از چند وقت بخواییم بریم وسیله که لازم داریم رو برداریم احتمال اینکه جاشو فراموش کنید خیلی زیاده. برای اینکه فراموش نکنیم یک صندوقدار استخدام میکنیم و این صندوق دار به ما میگه که اسمتون رو به من بگید من یادم خواهد بود وسیلههای شما داخل کددم صندوق وجود داره. صندوقدار ما یک فرمول خیلی خاص داره که رو هر اسم اجراش میکنه و خروجیش یک شماره صندوق خواهد بود و برای اینکه عدد خروجیش از تعداد صندوقهامون بیشتر نشه اون تقسیم برم تعداد صندوقها میکنه
عدد خروجی از اسم / تعداد تمام صندوق ها = صندوق مورد نظر
حالا هر وقت ما بیاییم و اسممون رو بهش بگیم اون شماره صندوق مارو خواهد گفت.
این دقیقا اتفاقی که داخل هشمپ میوفته، صندوقامانات ما همون array ما هست و صندوقدار ما همون الگوریتم hash ما هستش.
عمل خوندن یا همون درخواست صندوق وسایلامون در بهترین حالت همیشه O(1) چون صندوقدار مستقیم مارو میفرسته سراغ صندوقمون
اما اگه یک روزی فرمول صندوق دار اشتباه در بیاد و به دو نفر یکصندوق رو ارائه بده چه اتفاقی میوفته؟ تو این حالت صندوق دار روی وسیلهها یک برچسب میزنه، برای مثال اسم صاحب وسیله رو مینویسه روش و اون وسایل کنار همدیگه میزاره، حالا اگه صندوق دار ما پیر و خسته باشه و خیلی از افراد به یک صندوق ثابت بفرسته و هربار صرفا یک برچسب بزنه روی وسیله دفعه بعدی که ما بخاییم وسیلهمون برداریم به صندوق که برسیم لازمه دنبال وسیله خودمون میون خیلی از وسایلهای دیگه بگردیم که این عمل گشتن قالبا O(n) هستش که n تعداد وسایلهای داخل اون صندوق،
داخل خود برنامهنویسی هم وقتی الگوریتم هش ما به یک جای خاص array دیتا زیاد بفرسته و اینا نسبت به پیاده سازی یا linked list میشن یا یک areay داخل همون array ایجاد میکنن و گشتن در اون واحد از هس تیبیل ما O(n) خواهد بود.
البته همه هش مپها نمیاد linked list ایجاد کن بعضیهاشون اگه خونه پر باشه دنبال خونه خالی بعدی میگردن و دیتا میزارن اونجا که باز هم عمل گشتن O(n) میشه چون باید دنبال خونه ها بعدی بگردید تا وقتی دیتاتون بگیرید یا کلا پیدا نکنید :D
یک نفر نمیدونست گفتم بنویسم هم اون بدونه هم شما بدونید 😂❤️
@TorhamDevCH
❤17💩7👍4👎1
همه ریکشنها باز کردم الان میتونیم 💩 بزنیم
1💩93🍌7🖕7🆒3👾3🤡2🌭2🎅2🗿2💅1🦄1
میدونید چرا مقادیر داخل Set در پایتون بصورت رندوم قرار میگیرن و ترتیب اضافه کردنشون رعایت نمیشه؟
👍4💩1
TorhamDev | تورهام 😳
میدونید چرا مقادیر داخل Set در پایتون بصورت رندوم قرار میگیرن و ترتیب اضافه کردنشون رعایت نمیشه؟
چرا مقادیر Set در پایتون order رندوم دارن؟
ماجرا رندوم بودن مقادیر در set برمیگرده به اینکه خود Set در پایتون چطور پیاده سازی شده.
پایتون set در حقیقت یک hash table / hash map هستش و دلیل رندوم بودنش هم دقیقا همینه. اما چرا؟
زمانی که شما یکسری مقادیر داخل ست میزارید پایتون اول میاد hash اون مقدار حساب میکنه و بعد از اون نسبت به هش اون مقدار جایی که باید ذخیره بشه رو انتخاب میکنه و اون رو داخل این مکان ذخیره میکنه. به عبارتی:
index = hash_value % array_size
و به خاطر اینکه هش هر مقدار متفاوت به مقادیر دیگست جایی که قرار میگیرن هم متفاوت خواهد بود و در حقیق ترتیب مقادیر شما داخل set مقدار هش اونا % سایز هش تیبلتون و این باعث میشه که هرکدوم در یکجا رندوم قرار بگیرن. اما این رندوم بودن تا یکجایی ثابته
مثال زیر توجه کنید:
my_list = [10, 50, 20, 40, 30]
print(f"Original list: {my_list}")
my_set = set(my_list)
print(f"Set created from list: {my_set}")
my_set.add(60)
my_set.add(5)
print(f"Set after adding elements: {my_set}")
my_list_from_set = list(my_set)
print(f"List created from set: {my_list_from_set}")
خروجی:
Original list: [10, 50, 20, 40, 30]
Set created from list: {40, 10, 50, 20, 30}
Set after adding elements: {5, 40, 10, 50, 20, 60, 30}
List created from set: [5, 40, 10, 50, 20, 60, 30]
همون طور که میبینید در لحظه ساخت set از روی لیستی که داشتیم همچیش رندوم شد و وقتی هم یک مقدار جدید بهش اضافه کردیم order این set تغییر کرد اما وقتی از همون ست مجدد یک لیست ساختیم ترتیب قبلی رعایت شد.
دلیل این ماجرا هم اینه که set هش مقدار رو حساب میکنه و نسبت به اون هش مکانش داخل هش مپ رو تایین میکنه. پس تا زمانی که هش مپ شما resize نشده یا مقدار جدیدی بهش اضافه نشده ترتیب ست شما ثابت خواهد ماند D:
@TorhamDevCH
ماجرا رندوم بودن مقادیر در set برمیگرده به اینکه خود Set در پایتون چطور پیاده سازی شده.
پایتون set در حقیقت یک hash table / hash map هستش و دلیل رندوم بودنش هم دقیقا همینه. اما چرا؟
زمانی که شما یکسری مقادیر داخل ست میزارید پایتون اول میاد hash اون مقدار حساب میکنه و بعد از اون نسبت به هش اون مقدار جایی که باید ذخیره بشه رو انتخاب میکنه و اون رو داخل این مکان ذخیره میکنه. به عبارتی:
index = hash_value % array_size
و به خاطر اینکه هش هر مقدار متفاوت به مقادیر دیگست جایی که قرار میگیرن هم متفاوت خواهد بود و در حقیق ترتیب مقادیر شما داخل set مقدار هش اونا % سایز هش تیبلتون و این باعث میشه که هرکدوم در یکجا رندوم قرار بگیرن. اما این رندوم بودن تا یکجایی ثابته
مثال زیر توجه کنید:
my_list = [10, 50, 20, 40, 30]
print(f"Original list: {my_list}")
my_set = set(my_list)
print(f"Set created from list: {my_set}")
my_set.add(60)
my_set.add(5)
print(f"Set after adding elements: {my_set}")
my_list_from_set = list(my_set)
print(f"List created from set: {my_list_from_set}")
خروجی:
Original list: [10, 50, 20, 40, 30]
Set created from list: {40, 10, 50, 20, 30}
Set after adding elements: {5, 40, 10, 50, 20, 60, 30}
List created from set: [5, 40, 10, 50, 20, 60, 30]
همون طور که میبینید در لحظه ساخت set از روی لیستی که داشتیم همچیش رندوم شد و وقتی هم یک مقدار جدید بهش اضافه کردیم order این set تغییر کرد اما وقتی از همون ست مجدد یک لیست ساختیم ترتیب قبلی رعایت شد.
دلیل این ماجرا هم اینه که set هش مقدار رو حساب میکنه و نسبت به اون هش مکانش داخل هش مپ رو تایین میکنه. پس تا زمانی که هش مپ شما resize نشده یا مقدار جدیدی بهش اضافه نشده ترتیب ست شما ثابت خواهد ماند D:
@TorhamDevCH
👍15❤4
این روزها خوبه از uv استفاده کنید برای پروژههای پایتونی. uv یک پکیج منجیر مشابه بقیه پکیج منجیرا برای مثال poetry,pdm و غیره منتها دوستان Astral ( همونا که Ruff رو نوشتن) توسعه اش دادن با زبان Rust و بسیار سریع هستش.
https://docs.astral.sh/uv/
@TorhamDevCH
https://docs.astral.sh/uv/
@TorhamDevCH
docs.astral.sh
uv
uv is an extremely fast Python package and project manager, written in Rust.
👍13
الگوریتمهای Divide and Conquer چی هستند؟
الگوریتم تقسیم و حل و یا همون Divide and Conquer که به مخفف D&C هم شناخته میشن یک پرادایم الگوریتمی هستند که داخل این پرادایم ما با کوچک کردن مشکل ( problem ) به مشکلات کوچیکتر ( sub-problem ) اونها رو حل میکنیم. از معروفترین الگوریتمهای این پرادایم الگوریتمهای Merge sort و Quick sort هستند. الگوریتمهای D&C معمولا به سورت recursive نوشته میشن.
هر الگوریتم D&C قالبا از ۳ بخش اصلی تشکیل شده:
Divide: در این مرحله الگوریتم مشکل رو به مشکلات ساده تر و کوچیک تر تقسیم میکنه. که مشکلات کوچکتر باید بتونن خودشون به شکل مجزا حل بشند
Conquer: مشکلات کوچیک شده رو به صورت تکرارشوند یا ریکرسیو حل میکنه تا زمانی که مشکل انقدر ساده شده باشه که خودش حل شده محصوب بشه که به این حالت، حالت پایه یا بیسکیس گفته میشه
Combine: در این مرحله ما راه حل تمام مشکلات کوچیک شده ای که حل کردیم رو باهم ادغام میکنیم تا به یک جواب کامل برسیم.
برای مثال الگوریتم Merge sort :
divide: در این مرحله الگوریتم به شکل تکرارشونده لیست ورودی رو به دو تیکه تقسیم میکنه تا زمانی که این لیست حاوی یک ایندکس باشه که در حقیقت مرتب شده محسوب میشه
conquer: این مرحله همونجایی که الگوریتم خودش رو صدا میزنه تا زمانی که به حالت پایه یا همون بیسکیس برسه که لیستی فقط با یک ایندکس هستش
combine: این قسمت مهم در این الگوریتم هستش. در این مرحله الگوریتم لیستها کوچیک شده رو باهم مقایسه میکنه و اونا ترکیب میکنه تا به یک لیست بزرگتر ولی مرتب شده برسه و اینکار رو انقدر ادامه میده تا درنهایت فقط یک لیست مرتب شده باقی مونده باشه که خروجی الگوریتم محصوب میشه
الگوریتم merge sort بیشتر روی مرحله Combine تمرکز داره که نوشن میده الگوریتمها در این پرادایم میتونن به یکی از این ۳ حالت تمرکز بیشتری نشون بدن. برای مثال الگوریتم Quick sort بیشتر به مرحله Divide تمرکز میکنه و دنبال pivot میگرده و مکان pivot خودش رو مرتب میکنه.
امیدوارم درباره پارادایم D&C چیزی یادگرفته باشید D:
میتونید این پرادایم داخل مسائل دیگه هم استفاده کنید و مشکلاتتون حل کنید. در نهایت توانایی حل مسئله ما مهمه :)
@TorhamDevCH
الگوریتم تقسیم و حل و یا همون Divide and Conquer که به مخفف D&C هم شناخته میشن یک پرادایم الگوریتمی هستند که داخل این پرادایم ما با کوچک کردن مشکل ( problem ) به مشکلات کوچیکتر ( sub-problem ) اونها رو حل میکنیم. از معروفترین الگوریتمهای این پرادایم الگوریتمهای Merge sort و Quick sort هستند. الگوریتمهای D&C معمولا به سورت recursive نوشته میشن.
هر الگوریتم D&C قالبا از ۳ بخش اصلی تشکیل شده:
Divide: در این مرحله الگوریتم مشکل رو به مشکلات ساده تر و کوچیک تر تقسیم میکنه. که مشکلات کوچکتر باید بتونن خودشون به شکل مجزا حل بشند
Conquer: مشکلات کوچیک شده رو به صورت تکرارشوند یا ریکرسیو حل میکنه تا زمانی که مشکل انقدر ساده شده باشه که خودش حل شده محصوب بشه که به این حالت، حالت پایه یا بیسکیس گفته میشه
Combine: در این مرحله ما راه حل تمام مشکلات کوچیک شده ای که حل کردیم رو باهم ادغام میکنیم تا به یک جواب کامل برسیم.
برای مثال الگوریتم Merge sort :
divide: در این مرحله الگوریتم به شکل تکرارشونده لیست ورودی رو به دو تیکه تقسیم میکنه تا زمانی که این لیست حاوی یک ایندکس باشه که در حقیقت مرتب شده محسوب میشه
conquer: این مرحله همونجایی که الگوریتم خودش رو صدا میزنه تا زمانی که به حالت پایه یا همون بیسکیس برسه که لیستی فقط با یک ایندکس هستش
combine: این قسمت مهم در این الگوریتم هستش. در این مرحله الگوریتم لیستها کوچیک شده رو باهم مقایسه میکنه و اونا ترکیب میکنه تا به یک لیست بزرگتر ولی مرتب شده برسه و اینکار رو انقدر ادامه میده تا درنهایت فقط یک لیست مرتب شده باقی مونده باشه که خروجی الگوریتم محصوب میشه
الگوریتم merge sort بیشتر روی مرحله Combine تمرکز داره که نوشن میده الگوریتمها در این پرادایم میتونن به یکی از این ۳ حالت تمرکز بیشتری نشون بدن. برای مثال الگوریتم Quick sort بیشتر به مرحله Divide تمرکز میکنه و دنبال pivot میگرده و مکان pivot خودش رو مرتب میکنه.
امیدوارم درباره پارادایم D&C چیزی یادگرفته باشید D:
میتونید این پرادایم داخل مسائل دیگه هم استفاده کنید و مشکلاتتون حل کنید. در نهایت توانایی حل مسئله ما مهمه :)
@TorhamDevCH
❤6👍6
TorhamDev | تورهام 😳
الگوریتمهای Divide and Conquer چی هستند؟ الگوریتم تقسیم و حل و یا همون Divide and Conquer که به مخفف D&C هم شناخته میشن یک پرادایم الگوریتمی هستند که داخل این پرادایم ما با کوچک کردن مشکل ( problem ) به مشکلات کوچیکتر ( sub-problem ) اونها رو حل میکنیم.…
مثال الگوریتم Merge Sort که گفتم.
❤8
https://github.com/bregman-arie/devops-exercises
یک ریپوزیتوری خوب اگه دواپس کار هستید و حتی اگه نیستید!
تمرینها خوبی داخلش داره پایه ان بیشترشون و کمک میکنن داوپس بهتر بشید. من خودم بخش پایتونش دارم حل میکنم البته خیلی دواپسی نیست به نظرم بیشتر پایههای پایتونی.
@TorhamDevCH
یک ریپوزیتوری خوب اگه دواپس کار هستید و حتی اگه نیستید!
تمرینها خوبی داخلش داره پایه ان بیشترشون و کمک میکنن داوپس بهتر بشید. من خودم بخش پایتونش دارم حل میکنم البته خیلی دواپسی نیست به نظرم بیشتر پایههای پایتونی.
@TorhamDevCH
GitHub
GitHub - bregman-arie/devops-exercises: Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform…
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions - bre...
❤4👍2
دوستان امروز داشتم رو یکی از چالشهای سایت codecrafters کار میکردم که الان تموم شد :)
چالشش ساخت یک وب سرور از پایه بود فقط با استفاده از کتابخونه socket. چالشش چندین مرحله داشت که هر مرحله کدوتون پابلیش میکردید رو گیت خودشون و اونجا یکسری تست ران میشد روش. تجربه خوبی بود. منتها codecrafters پولی هستش و همین چالش برای این ماه رایگان بود :))
اگه دوست داشتید شما هم امتحانش کنید.
https://app.codecrafters.io/catalog
@TorhamDevCH
چالشش ساخت یک وب سرور از پایه بود فقط با استفاده از کتابخونه socket. چالشش چندین مرحله داشت که هر مرحله کدوتون پابلیش میکردید رو گیت خودشون و اونجا یکسری تست ران میشد روش. تجربه خوبی بود. منتها codecrafters پولی هستش و همین چالش برای این ماه رایگان بود :))
اگه دوست داشتید شما هم امتحانش کنید.
https://app.codecrafters.io/catalog
@TorhamDevCH
😘13👍3❤2🔥2