لینک گیتهاب دوره دیزاین پترن
جزوه و مثال های دوره همه اینجا ذخیره خواهند شد.
https://github.com/ManiMozaffar/design-101
@ManiFoldsPython
جزوه و مثال های دوره همه اینجا ذخیره خواهند شد.
https://github.com/ManiMozaffar/design-101
@ManiFoldsPython
GitHub
GitHub - ManiMozaffar/design-101: Deep Dive Into Design Patterns Lesson with python!
Deep Dive Into Design Patterns Lesson with python! - ManiMozaffar/design-101
❤16👍1
در ادامه دوره دیزاین پترن ها, دو ویدیو منتشر کردم/ جمع بندی از OOP کردیم که در ادامه دوره با کلمه هایی که استفاده میشه آشنایی کامل داشته باشین
تو این ویدیو پرداختم به مفاهیم ارث بری و hierarchies و مثال زدم و کاربردشون رو توضیح دادم
https://www.youtube.com/watch?v=2N-d_s1Lvqc&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=2
تو ویدیو بعدی پرداختم به Abstraction و Encapsulation و Polymorphism و مجددا مثال زدم که کدمون بدون رعایت این موارد چطور میشد و بعد از رعایتشون چطور شد و کاربردشون کجاست؟
https://www.youtube.com/watch?v=jvXn8VcJPNY&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=3
سوالی داشتین حتما کامنت کنید زیر ویدیو.
@ManiFoldsPython
تو این ویدیو پرداختم به مفاهیم ارث بری و hierarchies و مثال زدم و کاربردشون رو توضیح دادم
https://www.youtube.com/watch?v=2N-d_s1Lvqc&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=2
تو ویدیو بعدی پرداختم به Abstraction و Encapsulation و Polymorphism و مجددا مثال زدم که کدمون بدون رعایت این موارد چطور میشد و بعد از رعایتشون چطور شد و کاربردشون کجاست؟
https://www.youtube.com/watch?v=jvXn8VcJPNY&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=3
سوالی داشتین حتما کامنت کنید زیر ویدیو.
@ManiFoldsPython
YouTube
Abstraction, Polymorphism & Encapsulation
تو این ویدیو پرداختم به مباحث Abstraction, Polymorphism & Encapsulation
👨💻Source Code:
https://github.com/ManiMozaffar/design-101
🌍LinkedIn: https://www.linkedin.com/in/manimozaffar
👨💻 Github: https://github.com/ManiMozaffar
🔖 Chapters:
00:00 مقدمه…
👨💻Source Code:
https://github.com/ManiMozaffar/design-101
🌍LinkedIn: https://www.linkedin.com/in/manimozaffar
👨💻 Github: https://github.com/ManiMozaffar
🔖 Chapters:
00:00 مقدمه…
👍4❤3👏1
Forwarded from آموزش پایتون، دوآپس و مهندسی نرم افزار | BobyCloud (Boby Cloud)
این مدت پیامهای زیادی رو میگرفتم که بچهها میپرسیدن در ایران که دسترسی به AWS نداریم، چطور AWS رو یاد بگیریم؟
توی این ویدیو ۱۰ روش مختلف رو توضیح دادم که برای یادگیری AWS در ایران میتونید استفاده کنید و خودم هم زمانی که در ایران بودم از همین روشها استفاده کردم برای یادگیری AWS و سرویس دهندههای کلاد، امیدوارم کمک کننده باشه.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/WXwZ33Ntss8?si=9EeCKzjaaWV0vx2y
#AWS #Cloud
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
توی این ویدیو ۱۰ روش مختلف رو توضیح دادم که برای یادگیری AWS در ایران میتونید استفاده کنید و خودم هم زمانی که در ایران بودم از همین روشها استفاده کردم برای یادگیری AWS و سرویس دهندههای کلاد، امیدوارم کمک کننده باشه.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/WXwZ33Ntss8?si=9EeCKzjaaWV0vx2y
#AWS #Cloud
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
🔥8❤6👍1
Python BackendHub
😂😂 @ManiFoldsPython
تو گروه یک سوال خیلی خوب پرسیدن:
ایا امکان داره که از سمت بکند ی محدودیتی ایجاد کنیم و بگیم فقط از جایی که مشخص شده ریکوئست ها جواب داده بشه؟ مثلا من ی بکند دارم و ی فرانت اند و بگم فقطذاز سمت فرانتم بشه ریکوئست فرستاد و کسی نتونه دستی ریکوئست بزنه
چند تا جواب تو گروه دادن که خیلی کامل نبود. کتاب HTTP: The Definitive Guide رو توصیه میکنم بخونید. به عنوان یک بک اند دولوپر حتما و حتما باید درک کنیم http رو چون خیلی سرو کار داریم باهاش
ما یک چیزی داریم بهش میگن request spoofing. یعنی من یک هدر ست کنم و خودمو جای چیزی بزنم که نیستم.مثلا یوزر ایجنت ست کنم. به این کار میگن اسپوف کردن.
دسته اول
Forbidden header name
داخل مرورگر
https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
اینا رو میشه از کلاینت فیک کرد؟اره میشه. اینا تا زمانی قابل اعتمادن که شما فرض میگیری کلاینتت همیشه مرورگره. بیشتر از این نباید به این هدرا اعتماد کنی. اینا به راحتی قابل اسپوفن.
دسته دوم
یک سری هدر وجود داره که توسط لود بالانسرست میشه. به شرطی میتونی اعتماد کنی به این هدر ها که ۱۰۰درصد میدونی راه ارتباطی به جز لود بالانسر با اپلیکیشنت نیست.
X-Forwarded-For
مثل این
دسته سوم:
دیتا هایی که تو IP packet هست و بازم قابل دسترسیه. تو سطح شبکه هستن اینا. مثلا من میگم ای پی ادرس من ۱.۱.۱.۱ هست. میشه اسپوفش کنم؟اره میشه. ولی اگه بکنم اونوقت tcp یک طرفه میشه. چرا؟چون من درخواست میزنم google.com رو ببینم اونوقت google سعی میکنه دیتاشو بفرسته برای ۱.۱.۱.۱. و چون جوابی نمیده بهش سریع بسته میشه کانکشنش. که البته این خیلی ساده بود تو سناریو واقعی واقعا نمیتونید همچین کاری کنید
اما در اخر جواب دوستمون, شما قطعا نمیتونید کاری کنید که هیچ کلاینتی به جز فرانت به شما دیتا نفرسته. درسته cors و ... وجود داره ولی همه اونا برای مرورگره. در نهایت من میتونم بدون اینکه از فرانتتون استفاده کنم درخواست بفرستم.
چطوری جلوشو میگیرن؟ میان تشخیص میدن کلاینت هایی که از مرورگر نیستن و تو مرورگر هم از cors استفاده میکنن. راه های تشخیصش چیه؟
۱. کپچا (آسون و یکم قابل اعتماد)
۲. دیتکت user agent (آسون و غیر قابل اعتماد)
۳. فینگرپرینت مرورگر (پیچیده و خیلی قابل اعتماد)
راه سوم توسط شرکت های enterprise انتخاب میشه.
@ManiFoldsPython
ایا امکان داره که از سمت بکند ی محدودیتی ایجاد کنیم و بگیم فقط از جایی که مشخص شده ریکوئست ها جواب داده بشه؟ مثلا من ی بکند دارم و ی فرانت اند و بگم فقطذاز سمت فرانتم بشه ریکوئست فرستاد و کسی نتونه دستی ریکوئست بزنه
چند تا جواب تو گروه دادن که خیلی کامل نبود. کتاب HTTP: The Definitive Guide رو توصیه میکنم بخونید. به عنوان یک بک اند دولوپر حتما و حتما باید درک کنیم http رو چون خیلی سرو کار داریم باهاش
ما یک چیزی داریم بهش میگن request spoofing. یعنی من یک هدر ست کنم و خودمو جای چیزی بزنم که نیستم.مثلا یوزر ایجنت ست کنم. به این کار میگن اسپوف کردن.
دسته اول
Forbidden header name
داخل مرورگر
https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
اینا رو میشه از کلاینت فیک کرد؟اره میشه. اینا تا زمانی قابل اعتمادن که شما فرض میگیری کلاینتت همیشه مرورگره. بیشتر از این نباید به این هدرا اعتماد کنی. اینا به راحتی قابل اسپوفن.
دسته دوم
یک سری هدر وجود داره که توسط لود بالانسرست میشه. به شرطی میتونی اعتماد کنی به این هدر ها که ۱۰۰درصد میدونی راه ارتباطی به جز لود بالانسر با اپلیکیشنت نیست.
X-Forwarded-For
مثل این
دسته سوم:
دیتا هایی که تو IP packet هست و بازم قابل دسترسیه. تو سطح شبکه هستن اینا. مثلا من میگم ای پی ادرس من ۱.۱.۱.۱ هست. میشه اسپوفش کنم؟اره میشه. ولی اگه بکنم اونوقت tcp یک طرفه میشه. چرا؟چون من درخواست میزنم google.com رو ببینم اونوقت google سعی میکنه دیتاشو بفرسته برای ۱.۱.۱.۱. و چون جوابی نمیده بهش سریع بسته میشه کانکشنش. که البته این خیلی ساده بود تو سناریو واقعی واقعا نمیتونید همچین کاری کنید
اما در اخر جواب دوستمون, شما قطعا نمیتونید کاری کنید که هیچ کلاینتی به جز فرانت به شما دیتا نفرسته. درسته cors و ... وجود داره ولی همه اونا برای مرورگره. در نهایت من میتونم بدون اینکه از فرانتتون استفاده کنم درخواست بفرستم.
چطوری جلوشو میگیرن؟ میان تشخیص میدن کلاینت هایی که از مرورگر نیستن و تو مرورگر هم از cors استفاده میکنن. راه های تشخیصش چیه؟
۱. کپچا (آسون و یکم قابل اعتماد)
۲. دیتکت user agent (آسون و غیر قابل اعتماد)
۳. فینگرپرینت مرورگر (پیچیده و خیلی قابل اعتماد)
راه سوم توسط شرکت های enterprise انتخاب میشه.
@ManiFoldsPython
MDN Web Docs
Forbidden request header - Glossary | MDN
A forbidden request header is an HTTP header name-value pair that cannot be set or modified programmatically in a request. For headers forbidden to be modified in responses, see forbidden response header name.
👍12
Python BackendHub
تو گروه یک سوال خیلی خوب پرسیدن: ایا امکان داره که از سمت بکند ی محدودیتی ایجاد کنیم و بگیم فقط از جایی که مشخص شده ریکوئست ها جواب داده بشه؟ مثلا من ی بکند دارم و ی فرانت اند و بگم فقطذاز سمت فرانتم بشه ریکوئست فرستاد و کسی نتونه دستی ریکوئست بزنه چند تا…
راجب fingerprint
اینطوری کار میکنه که یک سری جاوا اسکریپت رو مرورگر شما ران میشه
و از api های مختلف مرورگرتون استفاده میکنه
و اطلاعات سیستمتون رو بیرون میکشه
و حتی شامل gpu هم میشه مثل canvas و webgl
اگه خوب پیاده سازی شده باشه تقریبا قابل اسپوف نیست, میتویند تست کنید خودتون. یعنی اسپوف کنید سرور میفهمه دروغ گفتین.
نمونش اینجاست.
https://abrahamjuliot.github.io/creepjs/
سایتا خیلی به Fingerprint id اعتماد نمیکنن چون خیلی راحت تغییر میکنه (مثلا اگه یک فونت اضافه کنید به سیستم عاملتون تغییر میکنه). معمولا به ترکیبی از FP ID و webgl و canvas اعتماد میکنن که gpu هم دخیل باشه! خیلی از صفحات امنیتی نت رو همین مکانیزم کار میکنند.
پی نوشت: اینارو تو اون کتاب نگفته ها 😂 اینا یافته های خودم بوده. مدت زیادی رو این چیزا کار میکردم چون قبلا خیلی زیاد کراول میکردم.
@ManiFoldsPython
اینطوری کار میکنه که یک سری جاوا اسکریپت رو مرورگر شما ران میشه
و از api های مختلف مرورگرتون استفاده میکنه
و اطلاعات سیستمتون رو بیرون میکشه
و حتی شامل gpu هم میشه مثل canvas و webgl
اگه خوب پیاده سازی شده باشه تقریبا قابل اسپوف نیست, میتویند تست کنید خودتون. یعنی اسپوف کنید سرور میفهمه دروغ گفتین.
نمونش اینجاست.
https://abrahamjuliot.github.io/creepjs/
سایتا خیلی به Fingerprint id اعتماد نمیکنن چون خیلی راحت تغییر میکنه (مثلا اگه یک فونت اضافه کنید به سیستم عاملتون تغییر میکنه). معمولا به ترکیبی از FP ID و webgl و canvas اعتماد میکنن که gpu هم دخیل باشه! خیلی از صفحات امنیتی نت رو همین مکانیزم کار میکنند.
پی نوشت: اینارو تو اون کتاب نگفته ها 😂 اینا یافته های خودم بوده. مدت زیادی رو این چیزا کار میکردم چون قبلا خیلی زیاد کراول میکردم.
@ManiFoldsPython
👍12
حالا یک سوال ازتون میپرسم
بنظرتون host تو هدر ارسال میشه قابل override هست توسط کلاینت؟
و اگه قابل اوراید باشه چه اتفاقاتی میفته بنظرتون؟ و کی داره این host رو ست میکنه؟
@ManiFoldsPython
بنظرتون host تو هدر ارسال میشه قابل override هست توسط کلاینت؟
و اگه قابل اوراید باشه چه اتفاقاتی میفته بنظرتون؟ و کی داره این host رو ست میکنه؟
@ManiFoldsPython
👍4
Python BackendHub
تو گروه یک سوال خیلی خوب پرسیدن: ایا امکان داره که از سمت بکند ی محدودیتی ایجاد کنیم و بگیم فقط از جایی که مشخص شده ریکوئست ها جواب داده بشه؟ مثلا من ی بکند دارم و ی فرانت اند و بگم فقطذاز سمت فرانتم بشه ریکوئست فرستاد و کسی نتونه دستی ریکوئست بزنه چند تا…
لینک کتاب HTTP The definitive guide که دیروز سایه تو گروه گذاشت
https://news.1rj.ru/str/HangBooks/13
@ManiFoldsPython
https://news.1rj.ru/str/HangBooks/13
@ManiFoldsPython
Telegram
Hangouts to Learn | Books 📚
❤3👎1
Python BackendHub
مصاحبه بابی ۹ روز دیگست با tech immigrant تو calendarتون بذارین که از دستش ندید🔥🔥 https://www.youtube.com/watch?v=dg5cliosE5w به شخصه خیلی از بابی یاد گرفتم و واقعا ممنونشم🙌 خیلی به کامینیتی کمک های زیادی کرده مصاحبه کنندشو نمیشناسم ولی میگن سوالات چالشی…
لایو بابی امشبه، منم هاستم.
تو خوده لایو هم میتونید سوالبپرسید، لایو هم ریکورد میشه.
سوالی داشتین کامنت کنید اگه نمیرسیدین 👇
تو خوده لایو هم میتونید سوالبپرسید، لایو هم ریکورد میشه.
سوالی داشتین کامنت کنید اگه نمیرسیدین 👇
🔥5👍3❤2
چند تا ریسورس برای یادگیری و عمیق تر شدن تو مفاهیم دیتابیس:
۱. این همون میمی بود که فرستادم. از این مقاله و گیت هاب پیداش کرده بودم. خیلی خوبه که ادم خودشو بسنجه ببینه چقدر sql بلده تو تو کدوم level هست.
https://github.com/airbytehq/SQL-Levels-Explained
https://avestura.dev/blog/explaining-the-postgres-meme
اینو قبلا معرفی کردم.
https://git.ir/p/xnEZB
اونایی که دارم میخونم(WIP):
https://www.pluralsight.com/cloud-guru/courses/postgresql-administration-deep-dive
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
(اینم دارم میخونم بحث high availability خیلی مهمه و واقعا خوب بهش پرداخته)
و اونی که دوست دارم ببینم در اینده:
https://www.udemy.com/course/database-engines-crash-course/
@ManiFoldsPython
۱. این همون میمی بود که فرستادم. از این مقاله و گیت هاب پیداش کرده بودم. خیلی خوبه که ادم خودشو بسنجه ببینه چقدر sql بلده تو تو کدوم level هست.
https://github.com/airbytehq/SQL-Levels-Explained
https://avestura.dev/blog/explaining-the-postgres-meme
اینو قبلا معرفی کردم.
https://git.ir/p/xnEZB
اونایی که دارم میخونم(WIP):
https://www.pluralsight.com/cloud-guru/courses/postgresql-administration-deep-dive
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
(اینم دارم میخونم بحث high availability خیلی مهمه و واقعا خوب بهش پرداخته)
و اونی که دوست دارم ببینم در اینده:
https://www.udemy.com/course/database-engines-crash-course/
@ManiFoldsPython
GitHub
GitHub - airbytehq/SQL-Levels-Explained: explaining sql levels based on one meme
explaining sql levels based on one meme. Contribute to airbytehq/SQL-Levels-Explained development by creating an account on GitHub.
❤3👍2🤮2
Python BackendHub
چند تا ریسورس برای یادگیری و عمیق تر شدن تو مفاهیم دیتابیس: ۱. این همون میمی بود که فرستادم. از این مقاله و گیت هاب پیداش کرده بودم. خیلی خوبه که ادم خودشو بسنجه ببینه چقدر sql بلده تو تو کدوم level هست. https://github.com/airbytehq/SQL-Levels-Explained …
اینم یک کانال دانلود کتاب که کامنت کرده بودن:
https://news.1rj.ru/str/Techbookology
https://news.1rj.ru/str/Techbookology
Telegram
تِکبوکولوژی | Techbookology
📍تِکبوکولوژی؛ بزرگترین مرجع دانلود کتابهای برنامهنویسی💥
◾️ ارتباط با ادمین پشتیبانی و تبلیغات:
@Techbookology_admin
◾️ ارتباط با ادمینهای اصلی:
@mehdijafarii7
@DanialAghaei22
◾️ ارتباط با ادمین پشتیبانی و تبلیغات:
@Techbookology_admin
◾️ ارتباط با ادمینهای اصلی:
@mehdijafarii7
@DanialAghaei22
❤4👎1
سه قسمت مورد علاقم تو مصاحبه با بابی👌:
+ بابی به کی میگی مهندس نرم افزار؟
- به کسی که بتونه خودش سولوشن هارو با trade offشون پیدا کنه، یعنی حل کننده و کارگشا مشکلات یک نرم افزار باشه.
+ بابی تو مصاحبه قبلی رشاد گفته بود به من که شخصا هرچیزیو هرقدری یاد میگیرم که یک بهش نیاز داشته باشم و دو بتونم اون کاربردی که برام داره رو درک کنم، نظرت راجب این چیه؟
- اره موافقم با این دیدگاه، بنظره من ما خیلی چیزا رو تو کار یاد میگیریم، و تو وقتی که وارد دنیای کار نشیم یاد نمیگیریم اون مباحثو، ولی وقتی تو کار به مشکل میخوریم و باهاش کلنجار میریم خیلی بهتر یادش میگیریم. به توییت جادیم اشاره کرد که من یادم نیست الان😅
- چرا میگین فلان اسکیل رو یاد بگیرم بعد رزومه میفرستم، یا اینقدر جلو برم بعد میرم دنبال کار. وقتی اینکارو میکنید خودتون دارین خودتونو ریجکت میکنید. بذارین اونا ریجکتتون کنند😁
———
سوال دوم خودم میدونستم، ولی یادم رفته بود این مدت. شاید این چند ماه knowledge ای که یاد میگرفتم نمیبردم تو محیط کار ازش استفاده کنم با وجود اینکه شرایطشو داشتم. خلاصه کسایی که تجربه کار ندارین بدونید دنیای واقعی مثل کتبی که میخونید نیست و تا زمانی که پروژه رو لوکال هاستتونه همه چیز گل و بلبله 😂
@ManiFoldsPython
+ بابی به کی میگی مهندس نرم افزار؟
- به کسی که بتونه خودش سولوشن هارو با trade offشون پیدا کنه، یعنی حل کننده و کارگشا مشکلات یک نرم افزار باشه.
+ بابی تو مصاحبه قبلی رشاد گفته بود به من که شخصا هرچیزیو هرقدری یاد میگیرم که یک بهش نیاز داشته باشم و دو بتونم اون کاربردی که برام داره رو درک کنم، نظرت راجب این چیه؟
- اره موافقم با این دیدگاه، بنظره من ما خیلی چیزا رو تو کار یاد میگیریم، و تو وقتی که وارد دنیای کار نشیم یاد نمیگیریم اون مباحثو، ولی وقتی تو کار به مشکل میخوریم و باهاش کلنجار میریم خیلی بهتر یادش میگیریم. به توییت جادیم اشاره کرد که من یادم نیست الان😅
- چرا میگین فلان اسکیل رو یاد بگیرم بعد رزومه میفرستم، یا اینقدر جلو برم بعد میرم دنبال کار. وقتی اینکارو میکنید خودتون دارین خودتونو ریجکت میکنید. بذارین اونا ریجکتتون کنند😁
———
سوال دوم خودم میدونستم، ولی یادم رفته بود این مدت. شاید این چند ماه knowledge ای که یاد میگرفتم نمیبردم تو محیط کار ازش استفاده کنم با وجود اینکه شرایطشو داشتم. خلاصه کسایی که تجربه کار ندارین بدونید دنیای واقعی مثل کتبی که میخونید نیست و تا زمانی که پروژه رو لوکال هاستتونه همه چیز گل و بلبله 😂
@ManiFoldsPython
👍13❤2🔥2👏2
چند درصد اگهیو بلدیم رزومه بفرستیم؟
چطور تو مصاحبه ها خوب عمل کنیم؟
چه کارایی کنیم شانس قبول شدنون بیشتر شه؟
@ManiFoldsPython
چطور تو مصاحبه ها خوب عمل کنیم؟
چه کارایی کنیم شانس قبول شدنون بیشتر شه؟
@ManiFoldsPython
👍25❤7
Python BackendHub
Voice message
این ویسو توصیه میکنم گوش بدید… به عنوان یک جونیوری که کار رسمی نداشته، بیمه نداشته، تحصیلاتش دیپلم بوده تونستم کار بگیرم و ایشالا اگه بشه باهاش مهاجرتم دارم میکنم، پس شما چرا نتونی؟😁
🔥14❤2👍2
Python BackendHub
Voice message
ریپو رزومه نویسی خودم
https://github.com/ManiMozaffar/awesome-resumes
کانال یوتویوب tech immigrant
https://www.youtube.com/c/techimmigrants
یک پلی لیست خوب از ماک اینترویو
https://www.youtube.com/playlist?list=PLtuWfrF8FU5xGKn2kb8OT2tAKZXPjEuWI
این هفته سرم خیلی شلوغه. بعدا وقت کنم خودمم یک playlist میزنم هم راجب mock interview و هم یک ریپو مینویسم راجب Interviews (مثل ریپو رزومه نویسیم)
@ManiFoldsPython
https://github.com/ManiMozaffar/awesome-resumes
کانال یوتویوب tech immigrant
https://www.youtube.com/c/techimmigrants
یک پلی لیست خوب از ماک اینترویو
https://www.youtube.com/playlist?list=PLtuWfrF8FU5xGKn2kb8OT2tAKZXPjEuWI
این هفته سرم خیلی شلوغه. بعدا وقت کنم خودمم یک playlist میزنم هم راجب mock interview و هم یک ریپو مینویسم راجب Interviews (مثل ریپو رزومه نویسیم)
@ManiFoldsPython
GitHub
GitHub - ManiMozaffar/awesome-resumes: Create resumes and CV with awesome-resumes. Practical tips, guidelines, guide, examples…
Create resumes and CV with awesome-resumes. Practical tips, guidelines, guide, examples and documentation for all IT fields - ManiMozaffar/awesome-resumes
❤9👍1🥰1
در پی ویدیو Encapsulation و Abstraction که فیلم گرفتم راجبش:
https://www.youtube.com/watch?v=jvXn8VcJPNY&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=3
من تو یکی از اپلیکیشن هام یک flowchart خیلی پیچیده داشتم
وقتی داشتم ریفکتورش میکردم واقعا maintain کردنش سخت شده بود. تبدیل شده بود به کد لگاسی. ۲ سال اونجوری افتاده بود دست نخورده مونده بود. و کلشو بردم تو یک کلس دیگه و کامل encapsulate کردم. یک متود decide هم گذاشتم که کل مسیر فلوچارتو طی کنه. و چند تا متود کمکی دیگه که لازم داشتم. شد ۲۵۰ خط کد که همش fi elif و match case میخوره. بعدش ریزالتشو یک آبجکت namedtupl ساختم و با enum و دیتا تایپ های مختلف parse کردم تو اون named tuple که اسمشو گذاشتم decision. خوانایی کدم با این encapsulate ای که انجام دادم حداقل ۱۰ برابر بیشتر شد جوری که همکارم که برنامه نویس هم نبود فهمید دارم چیکار میکنم :))
درنهایت سعی کنید از match case حتما استفاده کنید وقتی کاربردش پیش میاد جای if elif. سینتکس تازه ای هست تو پایتون و نمیبینید تو لایبری های اوپن سورس هنوز ولی واقعا قدرت خوانایی کدتون رو بالا میبره.
یک مقاله خوب میذارم بخونید عالیهه
Strong Static Typing to Prevent Illegal Code States | Python Patterns
https://towardsdatascience.com/strong-static-typing-to-prevent-illegal-code-states-7a13e122cbab
@ManiFoldsPython
https://www.youtube.com/watch?v=jvXn8VcJPNY&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=3
من تو یکی از اپلیکیشن هام یک flowchart خیلی پیچیده داشتم
وقتی داشتم ریفکتورش میکردم واقعا maintain کردنش سخت شده بود. تبدیل شده بود به کد لگاسی. ۲ سال اونجوری افتاده بود دست نخورده مونده بود. و کلشو بردم تو یک کلس دیگه و کامل encapsulate کردم. یک متود decide هم گذاشتم که کل مسیر فلوچارتو طی کنه. و چند تا متود کمکی دیگه که لازم داشتم. شد ۲۵۰ خط کد که همش fi elif و match case میخوره. بعدش ریزالتشو یک آبجکت namedtupl ساختم و با enum و دیتا تایپ های مختلف parse کردم تو اون named tuple که اسمشو گذاشتم decision. خوانایی کدم با این encapsulate ای که انجام دادم حداقل ۱۰ برابر بیشتر شد جوری که همکارم که برنامه نویس هم نبود فهمید دارم چیکار میکنم :))
درنهایت سعی کنید از match case حتما استفاده کنید وقتی کاربردش پیش میاد جای if elif. سینتکس تازه ای هست تو پایتون و نمیبینید تو لایبری های اوپن سورس هنوز ولی واقعا قدرت خوانایی کدتون رو بالا میبره.
یک مقاله خوب میذارم بخونید عالیهه
Strong Static Typing to Prevent Illegal Code States | Python Patterns
https://towardsdatascience.com/strong-static-typing-to-prevent-illegal-code-states-7a13e122cbab
@ManiFoldsPython
YouTube
Abstraction, Polymorphism & Encapsulation
تو این ویدیو پرداختم به مباحث Abstraction, Polymorphism & Encapsulation
👨💻Source Code:
https://github.com/ManiMozaffar/design-101
🌍LinkedIn: https://www.linkedin.com/in/manimozaffar
👨💻 Github: https://github.com/ManiMozaffar
🔖 Chapters:
00:00 مقدمه…
👨💻Source Code:
https://github.com/ManiMozaffar/design-101
🌍LinkedIn: https://www.linkedin.com/in/manimozaffar
👨💻 Github: https://github.com/ManiMozaffar
🔖 Chapters:
00:00 مقدمه…
👍9
dummy return or exception?
نظره شما چیست؟این سوالیه که این چند وقت خیلی برام مطرح شده بود.
اول توضیح بدم یعنی چی. دامی ریترن یعنی ریترن ساختگی. یعنی درواقع چیزی دارین ریترن میکنید که هدف تابع اون نبوده. مثلا داریم:
کاری به کد و بهتر شدنش نداشته باشین این یک مثاله برای اینکه صرفا درک کنید منظور از دامی ریترن چیست.
حالا همینو بخواین با exception بنویسید:
خوبی دامی ریترن:
شما signature یک تابع رو میبیند متوجه میشین که این تابع ممکنه دامی ریترن داشته باشه. نیازی نیست هردفعه برای استفاده ازش برین تو سورس کد و exception رو handle کنید. همینطور موقع کد زدن اگه یک کیس رو هندل نکرده باشین قطعا type checker کد ادیتورتون بهتون میگه.
بدی دامی ریترن:
نمیتونید متوجه شین دقیقا چرا None برگشته. یعنی بهتون tracability خوبی نمیده.
خوبی raise کردن و هندل کاستوم اکسپشن:
هرجایی از کدتون بخواین میتونید jump کنید و بپرین یک جای دیگه. قابلیت پرش تو کد با exception خیلی خوب میتونید داشته باشید. همینطور خیلی state رو خوب نگه میدارن تو خودشون و میتونید کارای خیلی باحالی کنید با همین پاس دادن state تو اکسپشن
بدی کاستوم اکسپشن:
مخفیه و تو signature تابع نیست. تو داک استرینگ هم بگین این تابع فلان اکسپشن رو raise میکنه بازم کامل نیست چرا چون ممکنه داخل اون تابع یک تابع دیگه باشه که یک exception دیگه raise میکنه. و همینطور لایه لایه زیاد میشه. اخرسر اینقدر overhead میشه که میبینید کد کدتون شده handle exception هایی که مخفی بوده از چشمتون و برنامتون خیلی باگ میخوره
من این مدت خیلی کلنجار رفتم با این و بنظرم:
دامی ریترن برای utilty function ها و reusable function ها خیلی مناسب ترن. چون برنامه نویسی رو برامون سخت نمیکنه و چند لایه اکسپشن و هندلر نمیخوریم
کاستوم اکسپشن برای business logic ها خیلی خوبه. باید تو بالا ترین سطح کد باشه و یکی دو لایه بیشتر نشه. کدی که قرار reusable باشه باید dummy return داشته باشه
نظر شما چیه؟ با من موافقین؟ مخالفین؟
@ManiFoldsPython
نظره شما چیست؟این سوالیه که این چند وقت خیلی برام مطرح شده بود.
اول توضیح بدم یعنی چی. دامی ریترن یعنی ریترن ساختگی. یعنی درواقع چیزی دارین ریترن میکنید که هدف تابع اون نبوده. مثلا داریم:
def get_order(order_id: OrderId) -> Order | None:
try:
reutrn Order.objects.filter(id=order_id)[1]
except Exception:
return None
کاری به کد و بهتر شدنش نداشته باشین این یک مثاله برای اینکه صرفا درک کنید منظور از دامی ریترن چیست.
حالا همینو بخواین با exception بنویسید:
def get_order(order_id: OrderId) -> Order:
try:
reutrn Order.objects.filter(id=order_id)[1]
except Exception:
raise OrderNotFound(id=order_id)
خوبی دامی ریترن:
شما signature یک تابع رو میبیند متوجه میشین که این تابع ممکنه دامی ریترن داشته باشه. نیازی نیست هردفعه برای استفاده ازش برین تو سورس کد و exception رو handle کنید. همینطور موقع کد زدن اگه یک کیس رو هندل نکرده باشین قطعا type checker کد ادیتورتون بهتون میگه.
بدی دامی ریترن:
نمیتونید متوجه شین دقیقا چرا None برگشته. یعنی بهتون tracability خوبی نمیده.
خوبی raise کردن و هندل کاستوم اکسپشن:
هرجایی از کدتون بخواین میتونید jump کنید و بپرین یک جای دیگه. قابلیت پرش تو کد با exception خیلی خوب میتونید داشته باشید. همینطور خیلی state رو خوب نگه میدارن تو خودشون و میتونید کارای خیلی باحالی کنید با همین پاس دادن state تو اکسپشن
بدی کاستوم اکسپشن:
مخفیه و تو signature تابع نیست. تو داک استرینگ هم بگین این تابع فلان اکسپشن رو raise میکنه بازم کامل نیست چرا چون ممکنه داخل اون تابع یک تابع دیگه باشه که یک exception دیگه raise میکنه. و همینطور لایه لایه زیاد میشه. اخرسر اینقدر overhead میشه که میبینید کد کدتون شده handle exception هایی که مخفی بوده از چشمتون و برنامتون خیلی باگ میخوره
من این مدت خیلی کلنجار رفتم با این و بنظرم:
دامی ریترن برای utilty function ها و reusable function ها خیلی مناسب ترن. چون برنامه نویسی رو برامون سخت نمیکنه و چند لایه اکسپشن و هندلر نمیخوریم
کاستوم اکسپشن برای business logic ها خیلی خوبه. باید تو بالا ترین سطح کد باشه و یکی دو لایه بیشتر نشه. کدی که قرار reusable باشه باید dummy return داشته باشه
نظر شما چیه؟ با من موافقین؟ مخالفین؟
@ManiFoldsPython
👍13👎2🔥1
مثال بهتر, من یک فانکشن دارم که قراره کلی جا ازش استفاده کنم به اسم get_user و از طرفی process_order هم دارم که قرار مثلا یک اوردر رو برام پروسس کنه طبق لاجیک بیزنس.
با دامی ریترن
بدون دامی ریترن:
من خودم حالت دوم رو اصلا نمیپسندم. حالت اولاستفاده از کد رو خیلی راحت تر میکنه و خوانایی کدو به شدت بیشتر میکنه.
@ManiFoldsPython
با دامی ریترن
def get_user() -> UserId | None
process_order() ->
user = get_user
if not user:
raise Stp[P(reason="User does not exist")
بدون دامی ریترن:
def get_user() -> UserId
process_order() ->
try:
user = get_user
except UserDoesNotExist as exception:
raise StopOrderProcessing(reason="User does not exist")
من خودم حالت دوم رو اصلا نمیپسندم. حالت اولاستفاده از کد رو خیلی راحت تر میکنه و خوانایی کدو به شدت بیشتر میکنه.
@ManiFoldsPython
👍6👎3💩3
Forwarded from Oh My Task!
I always have a respect for the aged geeks who have been growing with the technology and felt the history instead of reading it. One of them is David Beazley. He was one of the developers who used first versions of Python (<=1.0) in big projects and it’s cool to see these guys seen all the change history of these tools and programming languages.
Follow him on Youtube and watch his lectures about multi-threading and asyncio.
Here he’s teaching you how to build your async:
https://youtu.be/Y4Gt3Xjd7G8?si=A4GrpDoqQPZ8Q8G5
@OhMyTask
Follow him on Youtube and watch his lectures about multi-threading and asyncio.
Here he’s teaching you how to build your async:
https://youtu.be/Y4Gt3Xjd7G8?si=A4GrpDoqQPZ8Q8G5
@OhMyTask
YouTube
Build Your Own Async
Screencast based on a workshop originally presented at PyCon India, Chennai, October 14, 2019.
Code samples at: https://gist.github.com/dabeaz/f86ded8d61206c757c5cd4dbb5109f74
This workshop is about the low-level foundations and abstractions for asynchronous…
Code samples at: https://gist.github.com/dabeaz/f86ded8d61206c757c5cd4dbb5109f74
This workshop is about the low-level foundations and abstractions for asynchronous…
👏4👍1