TorhamDev | تورهام 😳 – Telegram
TorhamDev | تورهام 😳
2.84K subscribers
421 photos
49 videos
21 files
591 links
code, linux and anything related.

• YouTube
youtube.com/@techwithtori

• CodeNaline Podcast
@CodeNaline

• Group
@GothamProgrammers

• Github
github.com/TorhamDev

• Email
torhamdev@gmail.com
Download Telegram
آمازون وب سرویس یا همون AWS چیست؟

یک چیز خیلی مهم که تقریبا باید همه بک اند دولوپر ها بلدش باشن. البته در ایران AWS استفاده نمیشه. حدس بزنید چرا؟ درست حدس زدید.

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

https://www.youtube.com/watch?v=a9__D53WsUs
👍1
این حرف لوکوموتیو خیلی قشنگه.
اگه به حوزه خودمون بسطش بدیم. شما میتونید تا آخر عمرتون رو یک لول لنگر بندازید و مثلا تا آخر عمر همون دولوپر جنگوعه بمونید و اونی باشید که کد‌ها رو میزنه. یا میتونید شروع کنید رفتن به لول بعد و کم کم به اون مهندس بک‌اند که مشاوره میده و پول خیلی زیاد میگیره تبدیل بشید. انتخاب با شماست!
👍9
کتاب the clean coders خوندم. میخام به یک نفر هدیه بدم. نسخه چاپی‌عه.(انگلیسی)

همین‌طوری رندوم بدم یا قرعه‌کشی از این اداها؟
🍾11
تا حالا شده بخوایین یک پیج pypi نصب کنید اما از امنیتش مطمعن نباشید؟ داخل این وبسایت میتونید بررسی کنید این پکیج امن هست یا نه!. این وبسایت پکیج هارو اسکن میکنه و یکسری اطلاعات مثل امنیت، ایا پکیج هنوز توسعه داده میشه یا نه. چقدر دانلود داره و ..

و نه تنها برای pypi بلکه برای npm و docker و .... هم کارم میکنه :)


https://snyk.io/advisor/
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
به نظرتون چطوره؟ هنوز کاملش نکردم تمیز کاری هاش مونده اما اصل ماجرا اوکی شده کاملا.
لینک ریپو(استار؟) : https://github.com/TorhamDev/Better-Movie-finder
👍81
what SOLID stands for:
• S: Single responsibility principle
• O: Open/closed principle
• L: Liskov's substitution principle
• I: Interface segregation principle
• D: Dependency inversion principle
👍6
Forwarded from Sadra Codes
اگه پکیج پایتون قراره دیپلوی کنید توی داکر، از هیچکدوم از بیس ایمیج های آلپاین استفاده نکنید. منظورم:
python:*-apline
هست. بجاش از slim استفاده کنید. بزرگترین Advantageی که آلپاین داره، معماری سبک و کم حجم بودنشه که همین موضوع باعث میشه خیلی از پکیج های پایتون که بیسشون C هست نتونن اونجا کامپایل بشن.

بعنوان مثال، اصلا نمیتونید پکیج نامپای رو روی آلپاین نسخه ۳ به بالا نصب کنید!
https://github.com/TorhamDev/Better-Movie-finder/
پروژه خزنده هم دیگه تموم به نظرم :). به لطف مهدی حالا نسخه گرافیکی هم داره 😆.

البته هر چیزی میتونه توسعه پیدا کنه و بهتر بشه. مثلا میشه لاگین کردن اکانت های vip بهش اضافه کرد. اگه دوست داشتیدش استار بدید ❤️.


گیت‌هاب مهدی
6👍1
روز سیستم ادمین‌ها پادشاهان سرورهامون مبارک 😆❤️
14😁4👏2
sudo su 🥷
12👍32
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.
👍1
Forwarded from جادی | Jadi
یه مجموعه ویدئویی شروع کردم که به نظرم جاش خالی بود: تمرین‌های عملیاتی برنامه‌نویسی.
برای کمک به کسانی که زبان رو یاد گرفتن ولی در برنامه نوشتن مشکل دارن. هر قسمت یه مساله ساده رو تشریح و حل می‌کنم تا فکر کردن، الگوها، بخش بندی و تکنیک‌ها و .. دیده بشه (:
https://youtu.be/jp75eufhOLc
👍3
Forwarded from Sadra Codes
بررسی جوانب پایتون ۳.۱۲

از این به بعد می‌تونید 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 آسیب نبینه.
👍51
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