TorhamDev | تورهام 😳
https://www.youtube.com/watch?v=pTB30aXS77U این ویدیو درباره مفهوم solid و به نظرم تمیز و روان توضیح داد. شماهم ببینید:)
خلاصه ویدئو:
Defining the SOLID principles in layman's terms (based on this video alone):
1. Single Responsibility
Make things (classes, functions, etc.) responsible for fulfilling one type of role.
e.g. Refactor code responsibilities into separate classes.
2. Open/Closed
Be able to add new functionality to existing code easily without modifying existing code.
e.g. Use abstract classes. These can define what subclasses will require and strengthen Principle 1. by separating code duties.
3. Liskov Substitution
When a class is inherited from another class, the program shouldn't break, and you shouldn't need to hack anything to use the subclass.
e.g. Define constructor arguments to keep inheritance flexible.
4. Interface Segregation
Make interfaces (parent abstract classes) more specific rather than generic.
e.g. Create more interfaces (classes) if needed and/or provide objects to constructors.
5. Dependency Inversion
Make classes depend on abstract classes rather than non-abstract classes.
e.g. Make classes inherited from abstract classes.
Defining the SOLID principles in layman's terms (based on this video alone):
1. Single Responsibility
Make things (classes, functions, etc.) responsible for fulfilling one type of role.
e.g. Refactor code responsibilities into separate classes.
2. Open/Closed
Be able to add new functionality to existing code easily without modifying existing code.
e.g. Use abstract classes. These can define what subclasses will require and strengthen Principle 1. by separating code duties.
3. Liskov Substitution
When a class is inherited from another class, the program shouldn't break, and you shouldn't need to hack anything to use the subclass.
e.g. Define constructor arguments to keep inheritance flexible.
4. Interface Segregation
Make interfaces (parent abstract classes) more specific rather than generic.
e.g. Create more interfaces (classes) if needed and/or provide objects to constructors.
5. Dependency Inversion
Make classes depend on abstract classes rather than non-abstract classes.
e.g. Make classes inherited from abstract classes.
👍1
https://www.atlassian.com/git/tutorials/merging-vs-rebasing
این مقاله واقعا خوبه. واقعااااااا ها 😂. از دستش ندید.
این مقاله واقعا خوبه. واقعااااااا ها 😂. از دستش ندید.
Atlassian
Merging vs. Rebasing | Atlassian Git Tutorial
Compare git rebase with the related git merge command and identify all of the potential opportunities to incorporate rebasing into the typical Git workflow
👍4
Forwarded from جادی | Jadi
یه مجموعه ویدئویی شروع کردم که به نظرم جاش خالی بود: تمرینهای عملیاتی برنامهنویسی.
برای کمک به کسانی که زبان رو یاد گرفتن ولی در برنامه نوشتن مشکل دارن. هر قسمت یه مساله ساده رو تشریح و حل میکنم تا فکر کردن، الگوها، بخش بندی و تکنیکها و .. دیده بشه (:
https://youtu.be/jp75eufhOLc
برای کمک به کسانی که زبان رو یاد گرفتن ولی در برنامه نوشتن مشکل دارن. هر قسمت یه مساله ساده رو تشریح و حل میکنم تا فکر کردن، الگوها، بخش بندی و تکنیکها و .. دیده بشه (:
https://youtu.be/jp75eufhOLc
YouTube
تمرینهای عملیاتی برنامهنویسی؛ رمزگشایی یه پیام گیج و منگ با کار روی رشتههای حرفی
توی این سری، قراره مسالههای نسبتا باحالی رو مطرح کنم و بعد بگم چطوری حلش میکنم و بعد واقعا حلش کنم. و البته با این هدف که شما هم حلش کنین و هم منطق و الگوهای برنامه نویسی مرسوم رو بیشتر ببینین و هم دستتون در زبانی که دارین یاد میگیرین قویتر بشه.
توی…
توی…
👍3
جادی | Jadi
یه مجموعه ویدئویی شروع کردم که به نظرم جاش خالی بود: تمرینهای عملیاتی برنامهنویسی. برای کمک به کسانی که زبان رو یاد گرفتن ولی در برنامه نوشتن مشکل دارن. هر قسمت یه مساله ساده رو تشریح و حل میکنم تا فکر کردن، الگوها، بخش بندی و تکنیکها و .. دیده بشه (:…
من این شکلی حلش کردم :). قبل اینکه جواب جادی رو ببینم خودم حل کردمش و به نظرم این حرکت منطقی میومد. ولی راه حل جادی هم جالب بود که نشون میده چقدر ادماها باهم متفاوت فکر میکنن
💋5
Forwarded from Sadra Codes
بررسی جوانب پایتون ۳.۱۲
✅ از این به بعد میتونید fstring های تودرتو بنویسید. مثلا:
✅ لایبرری
✅ از این به بعد میتونید تایپ هینت
✅ تمام comprehensionهایی که در بدنه فانکشنها هستن، از لحاظ سرعت اجرا بهینهتر شدن.
✅ ارور مسیجها هم بهینه و هوشمندتر شدن. اگه که بتونن، در محدوده شرایط وسیعتری، سلوشن میدن.
➕ دوتا سینتکس جدید هم اضافه شده به پایتون. یکی
✅ از این به بعد میتونید fstring های تودرتو بنویسید. مثلا:
phrase = f"Hello {f"{name}"}"
# Hello Sadra
بنظرم آنچنان کاربردی نیست و فهمیدنش در نگاه اول یکم سخته. شاید هایلایترها درکش رو راحتتر کنن در آینده ولی یه فیچر جدید که اضافه شده و خوشم اومد، multiline fstring هست که بهتون اجازه میده، اف استرینگ رو در چند خط بنویسید و حسابی expandش کنید. تازه میتونید در بدنهاش، کامنت هم بنویسید:phrase = f"Hello {
name # User.name
}"
# Hello Sadra✅ بهینهسازی سیستم Tokenization. پایتون یه ماژول tokenizer داره که ازش واسه آنالیز و پارس کردن کلمات و حروف ولید پایتون استفاده میکنه. به هر چانک حروف از استرینگ ورودی توکن میگن. اکثر تولهای linting و formatting از این ماژول واسه فرمت و لینت کردن کد پایتون استفاده میکنن. تا نسخه ۳.۱۱، این ماژول به زبان پایتون بود. بدلیل اضافه شدن nested fstring و مولتی لاین fstring، مجبور شدن این ماژول رو بازنویسی کنن و با C نوشتنشن و از لحاظ زمان runtime، سرعتش به شدت رفته بالا. این باعث میشه تمام tool هایی که از tokenizer استفاده میکنن، سریعتر اون ماکروهاشون ران شن.
✅ لایبرری
distutils دیپریکت شده و دیگه توی standard library قرار نداره. از این لایبرری واسه نوشتن و توزیع کردن پکیج پایتون استفاده میشد که به دلیل سرعت پایین و محدودیتهایی که نسبت به پکیج setuptools داشت، ملت همیشه میرفتن سمت setuptools. حتی خود pip هم به setuptools وابسته هست. اگه venv بسازین، میبینید که بصورت دیفالت، setuptools نصبه. یه نکته که هست، setuptools جزو standard library نیست و درواقع از هسته distutils پایتون استفاده میکنه. از اونجا که distutilsی دیگه در کار نیست و pip نسخههای ۲۲.۱ به بالا دیگه وابستگی به setuptools نداره، عملا هیچ ابزار رسمیای واسه توزیع پکیج پایتون هم نخواهیم داشت. این هم خوبه، هم بد.pip (>= 22.1) does not require setuptools to be installed in the environment. setuptools-based (and distutils-based) packages can still be used with pip install, since pip will provide setuptools in the build environment it uses for building a package.حالا یه اتفاق دیگه هم افتاده. اونم اینکه
venv دیگه بخشی از پکیج setuptools نیست. تا امروز بود ولی دیگه نیس. حالا چیکار میشه کرد؟ خب distutils مستقل شده و شما میتونید خودتون setuptools رو pip install کنید و ازش استفاده کنید و واسه venv هم، virtualenv نصب کنید. دیگه کامند زیر کار نمیکنه:❌ python -m venv venv
بطور کلی، از این به بعد هر محیط venv که با virtualenv میسازید، در isolatedترین شکل ممکن قرار دارن و site-packageتون خالی خالیه. حتی wheel هم ندارید. فقط pip رو دارید. این بنظرم ساید خوبشه.✅ از این به بعد میتونید تایپ هینت
kwargs** رو کاستومایز کنید. من خودم همیشه انوتیت میکردم به typing.Any ولی از این به بعد میتونید TypedDict رو بهش انوتیت کنید:from typing import TypedDict, Unpack
class Values(TypedDict):
name: str
age: int
def main(**kwargs: Unpack[Values]): ...
✅ یه تایپ هینت جدید اومده که خیلی خوشم اومد، typing.override هست. این موقعی بدرد میخوره که میخواین تایپ هینت ست کنید واسه متدی که توی subclass قراره اوررایت شه. اگه تغییری توی superclass ایجاد شه و اسم اون متد توی سوپرکلس تغییر کنه، اگه یه سیستم type checking داشته باشین یه چیز مثل mypy، حتما خطا رو میگیره و بهتون نشون میده. این درحالیه که اگه کد رو اجرا کنید، ممکنه خطا نگیرید و اون متد هم override نشه.from typing import override
class A:
def greet(): ...
class B(A):
@override
def greet(): ...
توی این مثال، اگه روزی برسه که اسم متد greet توی سوپرکلس تغییر کنه به greeting، حتما type checker ارور میده ولی اگه annotate نکرده باشید، اروری دریافت نمیکنید و صرفا اون logic درست کار نمیکنه.✅ تمام comprehensionهایی که در بدنه فانکشنها هستن، از لحاظ سرعت اجرا بهینهتر شدن.
✅ ارور مسیجها هم بهینه و هوشمندتر شدن. اگه که بتونن، در محدوده شرایط وسیعتری، سلوشن میدن.
➕ دوتا سینتکس جدید هم اضافه شده به پایتون. یکی
type هست که واسه Type Alias استفاده میشه و دیگری هم Type Parameter هست که یه مدل جدید واسه تعریف فانکشنها و کلسهای جنریک پایتونه. شیوه استفاده ازشون به این شکله:type name = str
type age = int
قبلا باید جنریک فانکشن رو اینجوری تعریف میکردیم:def greet(name: List[str]): ...
ولی الان مینویسیم:type T = List[str]
def greet[T](name: T): ...
این باعث میشه که پرینسیپل DRY آسیب نبینه.👍5❤1
Forwarded from Python BackendHub
بزرگ ترین تغییر ۳.۱۲ نسبت به ۳.۱۱ که بنظرم صدرا اشاره نکرد بهش PEP 684 بود
A Per-Interpreter GIL
که البته فعلا تو سطح پایتون نیست و python api نداره.
ولی این تغییر تو ۳.۱۳ خودشو خیلی بیشتر نشون میده. جایی که API python اش میاد. طبق PEP 554.
https://peps.python.org/pep-0554/
جایی که ما میتونیم حالا از این تغییراتی که تو ۳.۱۲ انجام شده و API پایتونیش تو ۳.۱۳ هست استفاده کنیم:)
اینکه چیه و چیکار میکنه تو این پست نمیگنجه. توصیه میکنم حتما این دو PEP رو وقت بذارین و بخونید که از بقیه جلوتر باشید تا وقتی ۳.۱۳ اومد بدونید چی باید یاد بگیرید 😁 فقط یک مقایسه میکنم بین sub Interpreter و مولتی پروسس
True Parallelism -> Multiprocess: YES | Subinterpreters: Potential
Isolation -> Multiprocess: HIGH | Subinterpreters: MEDIUM
Overhead -> Multiprocess: HIGH | Subinterpreters: LOW
و توی theory حداقل باید Subinterpreters یک مموری ایزوله و هندل CPU Bound task به صورت بهینه تر رو به ما بدن که باعث میشه پایتون با استفاده از این مفهوم جدید برای real-time processing و streaming data بسیار مناسب تر شه. چرا؟چون میتونید یک subinterpreter داشته باشید که دیتا رو بگیره و یک subinterpreter داشته باشید که دیتا رو پروسس کنه که این ایزوله سازی باعث استفاده بهتر و بهینه تر از ریسورستون میشه و latency رو هم کاهش میده
@ManiFoldsPython
A Per-Interpreter GIL
که البته فعلا تو سطح پایتون نیست و python api نداره.
ولی این تغییر تو ۳.۱۳ خودشو خیلی بیشتر نشون میده. جایی که API python اش میاد. طبق PEP 554.
https://peps.python.org/pep-0554/
جایی که ما میتونیم حالا از این تغییراتی که تو ۳.۱۲ انجام شده و API پایتونیش تو ۳.۱۳ هست استفاده کنیم:)
اینکه چیه و چیکار میکنه تو این پست نمیگنجه. توصیه میکنم حتما این دو PEP رو وقت بذارین و بخونید که از بقیه جلوتر باشید تا وقتی ۳.۱۳ اومد بدونید چی باید یاد بگیرید 😁 فقط یک مقایسه میکنم بین sub Interpreter و مولتی پروسس
True Parallelism -> Multiprocess: YES | Subinterpreters: Potential
Isolation -> Multiprocess: HIGH | Subinterpreters: MEDIUM
Overhead -> Multiprocess: HIGH | Subinterpreters: LOW
و توی theory حداقل باید Subinterpreters یک مموری ایزوله و هندل CPU Bound task به صورت بهینه تر رو به ما بدن که باعث میشه پایتون با استفاده از این مفهوم جدید برای real-time processing و streaming data بسیار مناسب تر شه. چرا؟چون میتونید یک subinterpreter داشته باشید که دیتا رو بگیره و یک subinterpreter داشته باشید که دیتا رو پروسس کنه که این ایزوله سازی باعث استفاده بهتر و بهینه تر از ریسورستون میشه و latency رو هم کاهش میده
@ManiFoldsPython
Python Enhancement Proposals (PEPs)
PEP 554 – Multiple Interpreters in the Stdlib | peps.python.org
CPython has supported multiple interpreters in the same process (AKA “subinterpreters”) since version 1.5 (1997). The feature has been available via the C-API. [c-api] Multiple interpreters operate in relative isolation from one another, which facilit...
کمک کننده بود این مقاله. مخصوصا برای من که ردیس ام داخل داکر و فقط به redis-cli نیاز دارم داخل سیستم خودم
https://codewithhugo.com/install-just-redis-cli-on-ubuntu-debian-jessie/
https://codewithhugo.com/install-just-redis-cli-on-ubuntu-debian-jessie/
Code with Hugo
Install just redis-cli on Ubuntu, Debian, Jessie · Code with Hugo
<p>As part of adding integration tests to an app on CircleCI I ran into the following issues:</p>
<ul>
<li><code>redis-cli</code>’s API has changed from R
<ul>
<li><code>redis-cli</code>’s API has changed from R
طرز فکر یک برنامهنویس موفق.
اگه تازه شروع کردید و اول راه هستید حتما نگاه کنید:)
https://youtu.be/nogh434ykF0
اگه تازه شروع کردید و اول راه هستید حتما نگاه کنید:)
https://youtu.be/nogh434ykF0
YouTube
Mindset of Successful Programmers
Hi all. I discuss a few mindset changes that helped me learn to code and become a better programmer and Software Developer.
I hope you find value in this.
Music
Lo Fi Type Beat - Blue Moon (copyright free)
I hope you find value in this.
Music
Lo Fi Type Beat - Blue Moon (copyright free)
❤4👍1
این دو روز داشتم رو این کار میکردم. کد چلنج یکی از شرکتها که براشون رزومه فرستاده بودم. یک سیستم خرید کریپتو. این طوری خریدها رو میگیره داخل ردیس ذخیره میکنه ایونت و رکورد خرید رو. بعد یک تسک هر چند وقت یکبار اجرا میشه و اون خریدها رو نهایی میکنه و ایونتش رو از ردیس پاک میکنه.
این روش درست پیاده سازی همچین چیزی نیست چون یک تایم (اینجا ۳۰ ثانیه) طول میکشه ک اون تسک نهایی کردن خریدها ران بشه. درستش پیاده سازی با آپاچی کاکفا و من چون بلد نبودم با سلری و ... زدمش :)
ستاره بدید خوشحال شم 🫠
https://github.com/TorhamDev/buy-cryptocurrency
این روش درست پیاده سازی همچین چیزی نیست چون یک تایم (اینجا ۳۰ ثانیه) طول میکشه ک اون تسک نهایی کردن خریدها ران بشه. درستش پیاده سازی با آپاچی کاکفا و من چون بلد نبودم با سلری و ... زدمش :)
ستاره بدید خوشحال شم 🫠
https://github.com/TorhamDev/buy-cryptocurrency
GitHub
GitHub - TorhamDev/buy-cryptocurrency: A simple cryptocurrency purchase system :)
A simple cryptocurrency purchase system :). Contribute to TorhamDev/buy-cryptocurrency development by creating an account on GitHub.
❤8👍1
Forwarded from Django Expert (Shahriar Shariati)
✔️ مانیتور کردن سنسور دما و رطوبت
در این پروژه قصد دارم تا تجارب شخصی از راهاندازی یک سیستم مانیتورینگ دما و رطوبت بصورت درلحظه با کمک برد NodeMCU ESP8266 و فریمورک MicroPython را به اشتراک بذارم.
همچنین توضیح میدم که چطوری اطلاعات رو در دیتابیس Time-Series ذخیره و تحلیل کنیم و در نهایت اون رو روی صفحه نمایش موبایلمون نشون بدیم.
پ.ن: قرار هست بصورت دورهای مفاهیم پایه الکترونیک و تجارب شخصی از انجام یک پروژه اینترنت اشیاء رو در وبلاگم منتشر کنم.
🌐 https://shahriarshm.com/?p=33
™ @DjangoIR
〰️〰️〰️〰️〰️〰️〰️
© @DjangoEx
در این پروژه قصد دارم تا تجارب شخصی از راهاندازی یک سیستم مانیتورینگ دما و رطوبت بصورت درلحظه با کمک برد NodeMCU ESP8266 و فریمورک MicroPython را به اشتراک بذارم.
همچنین توضیح میدم که چطوری اطلاعات رو در دیتابیس Time-Series ذخیره و تحلیل کنیم و در نهایت اون رو روی صفحه نمایش موبایلمون نشون بدیم.
پ.ن: قرار هست بصورت دورهای مفاهیم پایه الکترونیک و تجارب شخصی از انجام یک پروژه اینترنت اشیاء رو در وبلاگم منتشر کنم.
🌐 https://shahriarshm.com/?p=33
™ @DjangoIR
〰️〰️〰️〰️〰️〰️〰️
© @DjangoEx
❤🔥2
ایونت لوپ چیست؟ درسته داخل js توضیح میده ولی این مفهوم همجا یک چیزه ما داخل Async پایتون هم ایونت لوپ رو داریم. و البته که یکم js یادگرفتن بد نیست :)
اگه یک نفر اینطوری js یاد میده، من برم js دولوپر شم 😂💔
https://www.youtube.com/watch?v=8aGhZQkoFbQ
اگه یک نفر اینطوری js یاد میده، من برم js دولوپر شم 😂💔
https://www.youtube.com/watch?v=8aGhZQkoFbQ
YouTube
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
JavaScript programmers like to use words like, “event-loop”, “non-blocking”, “callback”, “asynchronous”, “single-threaded” and “concurrency”.
We say things like “don’t block the event loop”, “make sure your code runs at 60 frames-per-second”, “well of course…
We say things like “don’t block the event loop”, “make sure your code runs at 60 frames-per-second”, “well of course…
👍4
https://youtu.be/8eRP-uzp9-U
تو این ویدیو اول فهمیدیم Task queue چیست؟ بعد فهمیدیم داخل ردیس چطوری میتونیم یکی بسازیم و بعدش با پایتون و ردیس باهاش یک برنامه نوشتیم :)
🍰 @Torham
تو این ویدیو اول فهمیدیم Task queue چیست؟ بعد فهمیدیم داخل ردیس چطوری میتونیم یکی بسازیم و بعدش با پایتون و ردیس باهاش یک برنامه نوشتیم :)
🍰 @Torham
YouTube
استفاده از Task queue ردیس در پایتون | Task queue چیست؟
تو این ویدیو اول فهمیدیم Task queue چیست؟ بعد فهمیدیم داخل ردیس چطوری میتونیم یکی بسازیم و بعدش با پایتون و ردیس باهاش یک برنامه نوشتیم :)
👍5👎1
TorhamDev | تورهام 😳 pinned «https://youtu.be/8eRP-uzp9-U تو این ویدیو اول فهمیدیم Task queue چیست؟ بعد فهمیدیم داخل ردیس چطوری میتونیم یکی بسازیم و بعدش با پایتون و ردیس باهاش یک برنامه نوشتیم :) 🍰 @Torham»