Sadra Codes
Ir al canal en Telegram
Sadra Yahyapour ✌️ Let's dive deeper together. :) imsadra.dev github.com/lnxpy linkedin.com/in/sadra-yahyapour x.com/lnxpylnxpy lnxpylnxpy@gmail.com
Mostrar más3 555
Suscriptores
+624 horas
+377 días
+9130 días
Carga de datos en curso...
Canales Similares
Nube de Etiquetas
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
junio '26
junio '26
+141
en 3 canales
mayo '26
+39
en 2 canales
Get PRO
abril '26
+57
en 0 canales
Get PRO
marzo '26
+22
en 0 canales
Get PRO
febrero '26
+162
en 1 canales
Get PRO
enero '26
+14
en 0 canales
Get PRO
diciembre '25
+24
en 1 canales
Get PRO
noviembre '25
+57
en 1 canales
Get PRO
octubre '25
+65
en 0 canales
Get PRO
septiembre '25
+54
en 1 canales
Get PRO
agosto '25
+57
en 0 canales
Get PRO
julio '25
+72
en 1 canales
Get PRO
junio '25
+63
en 0 canales
Get PRO
mayo '25
+60
en 0 canales
Get PRO
abril '25
+47
en 0 canales
Get PRO
marzo '25
+88
en 8 canales
Get PRO
febrero '25
+62
en 6 canales
Get PRO
enero '25
+159
en 2 canales
Get PRO
diciembre '24
+204
en 5 canales
Get PRO
noviembre '24
+267
en 4 canales
Get PRO
octubre '24
+182
en 3 canales
Get PRO
septiembre '24
+182
en 5 canales
Get PRO
agosto '24
+253
en 10 canales
Get PRO
julio '24
+105
en 3 canales
Get PRO
junio '24
+392
en 7 canales
Get PRO
mayo '24
+151
en 7 canales
Get PRO
abril '24
+126
en 7 canales
Get PRO
marzo '24
+126
en 5 canales
Get PRO
febrero '24
+143
en 5 canales
Get PRO
enero '24
+166
en 2 canales
Get PRO
diciembre '23
+229
en 8 canales
Get PRO
noviembre '23
+63
en 2 canales
Get PRO
octubre '23
+23
en 0 canales
Get PRO
septiembre '23
+90
en 0 canales
Get PRO
agosto '23
+206
en 0 canales
Get PRO
julio '23
+85
en 0 canales
Get PRO
junio '23
+122
en 0 canales
Get PRO
mayo '23
+225
en 0 canales
Get PRO
abril '23
+279
en 0 canales
Get PRO
marzo '23
+214
en 0 canales
Get PRO
febrero '23
+32
en 0 canales
Get PRO
enero '23
+80
en 0 canales
Get PRO
diciembre '22
+97
en 0 canales
Get PRO
noviembre '22
+12
en 0 canales
Get PRO
octubre '22
+115
en 0 canales
Get PRO
septiembre '22
+15
en 0 canales
Get PRO
agosto '22
+16
en 0 canales
Get PRO
julio '22
+27
en 0 canales
Get PRO
junio '22
+26
en 0 canales
Get PRO
mayo '22
+24
en 0 canales
Get PRO
abril '22
+20
en 0 canales
Get PRO
marzo '22
+72
en 0 canales
Get PRO
febrero '22
+5
en 0 canales
Get PRO
enero '22
+2
en 0 canales
Get PRO
diciembre '21
+2
en 0 canales
Get PRO
noviembre '21
+4
en 0 canales
Get PRO
octubre '21
+4
en 0 canales
Get PRO
septiembre '210
en 0 canales
Get PRO
agosto '21
+2
en 0 canales
Get PRO
julio '21
+2
en 0 canales
Get PRO
junio '21
+7
en 0 canales
Get PRO
mayo '21
+4
en 0 canales
Get PRO
abril '21
+6
en 0 canales
Get PRO
marzo '21
+5
en 0 canales
Get PRO
febrero '21
+3
en 0 canales
Get PRO
enero '21
+3
en 0 canales
Get PRO
diciembre '20
+720
en 0 canales
| Fecha | Crecimiento de Suscriptores | Menciones | Canales | |
| 21 junio | +1 | |||
| 20 junio | +8 | |||
| 19 junio | +3 | |||
| 18 junio | +6 | |||
| 17 junio | +5 | |||
| 16 junio | +4 | |||
| 15 junio | +13 | |||
| 14 junio | +5 | |||
| 13 junio | +15 | |||
| 12 junio | +15 | |||
| 11 junio | +15 | |||
| 10 junio | +6 | |||
| 09 junio | +8 | |||
| 08 junio | +8 | |||
| 07 junio | +10 | |||
| 06 junio | +3 | |||
| 05 junio | +3 | |||
| 04 junio | +8 | |||
| 03 junio | +5 | |||
| 02 junio | 0 | |||
| 01 junio | 0 |
Publicaciones del Canal
واسه توسعه پکیج پایتون، من از استکها و محیطی استفاده میکنم که تقریبا تمام نیازمندهام رو برطرف میکنه. از تست و کاوریج و داکیومنت، تا اتومیشنها و..
توی این مقاله، راجع به پروسه و تصمیماتی که حین توسعه میگیرم نوشتم. راجع به ابزارهای زیر هم صحبت کردم که هرکدوم به چه دردی میخورن:
CodeCov - PyTest - Tox - Nox - Ruff - Mkdocs - Coverage.py - GitHub Actions - Pre-commit
Link: https://blog.imsadra.dev/python-open-source-development-how-i-build-and-maintain-open-source-repositories
Join 👉 @lnxpylnxpy
| 2 | یه موضوع هست راجع به تنظیم دپریکیشنها. مثلا شما قراره به زودی، یه utility که میتونه اصلا یه فانکشن باشه رو اسم یا ساختارش رو تغییر بدید. یا اصلا حذفش کنید و دیگه در دسترس نباشه و یک راه جایگزین واسش طراحی کنید. خلاصه قراره تغییری ایجاد کنید که شیوه استفاده از اون utility رو قراره تغییر بده.
def greet(name: str) -> str:
return f"hey {name}"
توی ورژن جدید قراره اسم greet به say_hi تغییر کنه. بهتره که از چند ورژن قبل تر، یه همچین حرکتی بزنید:
from warnings import deprecated
@deprecated("greet function will be renamed to say_hi")
def greet(name: str) -> str:
return f"hey {name}"
هر موقع که تابع greet کال شه، یه چنین وارنینگی هم نمایش داده میشه:
DeprecationWarning: greet function will be renamed to say_hi
یه سری پکیجها و ابزارها هم هستن واسه مدیریت این دپریکیشنها و تغییراتی که شیوه استفاده از اون موجودیت رو تغییر میدن. مثلا دقیقا توی چه ورژنی باید deprecationها رو ست کنید. دقیقا در چه ورژنی؟ بعدا راجع بهشون صحبت میکنیم. :)
Join 👉 @lnxpylnxpy | 552 |
| 3 | وقتی دارید روی یه پکیج کار میکنید که یوزرها برنامهنویس هستن، در قسمتهایی از پروژه، ورژن پکیج رو قید کردین. مسلما هر بیلد، یه ورژن خاص خودش رو داره. معروفترین نوع ورژنبندی هم که همه تقریبا باهاش آشناییم همون Semantic Versioning هست که از سه بخش اصلی درست شده:
[MAJOR].[MINOR].[PATCH]
شمارهٔ نسخهٔ اصلی (MAJOR) رو زمانی افزایش میدیم که تغییرات بزرگ اعمال شدن و ممکنه باعث Breaking Changes در بخشهایی از پروژه شده باشن.
شمارهٔ نسخهٔ جزئی (MINOR) رو زمانی افزایش میدیم که قابلیتهایی اضافه شدن که با نسخههای قبل سازگار هستند. (مثلا اکوسیستم و پترنها همون پترنهای قبلن، یه دوتا ماژول یا util جدید اضافه شدن به ساختار قبلی)
شمارهٔ نسخهٔ (PATCH) رو زمانی افزایش میدیم که صرفا یه باگ فیکس کردیم که با نسخههای قبل هم سازگار هست و Breaking Changesی نداریم.
یه اصطلاح هست به اسم Version Bumping. موقعی شما ورژن رو بامپ میکنید که تغییراتی ایجاد کردید و میخواید یه بیلد جدید بگیرید از پکیج. (شما هیچوقت نمیتونید از یه ورژن، دوتا بیلد داشته باشید. حتی اگه یه خط هم اضافه کنید، نیازه واسه منتشر کردنش، حتما یه ورژن بامپ کنید و بعد بیلد بگیرید)
قبلا من از bump-my-version استفاده میکردم. کاری که میکنن، ورژن فعلی رو از pyproject یا setup.py یا.. میخونن، ورژن فعلی رو پیدا میکنن توی تمام قسمتهای پروژه، سپس شما اجرا میکنی:
bump-my-version bump patch
و این میاد در هر قسمت از پروژه که ورژن اصلی (مثلا 1.2.3 ثبت شده) رو تبدیل میکنه به 1.2.4.
اگه از uv استفاده میکنید، با این روش هم میتونید ورژن رو بامپ کنید و خیلی بهتر و تمیزتره.
منبع: https://blog.imsadra.dev/python-313-new-features-deprecations
منبع: https://semver.org
Join 👉 @lnxpylnxpy | 733 |
| 4 | واسه اینکه راحتتر درک کنید قدرت Genericها رو در پایتون، چند مثال پایین رو ببینید، قشنگ جا میوفته واستون.
ساختار به این شکله:
def FUNCTION_NAME[TYPES](ARGS..) -> TYPE:
مثال:
```python
def select[T](items: List[T]) -> T:
...
پس داریم:
python
select(items=[1, 2, 3, 4, 5]) # T=int & List[T] = List[int]
select(items=["a", "b", "c"]) # T=str & List[T] = List[str]
select(items=[1.2, 1.3, 1.4]) # T=float & List[T] = List[Float]
# Therefore, we have..
users = [User("Abby"), User("Chris"), User("Nick")]
select(items=users) # T=User & List[T] = List[User]
همونطور که محسوسه، T داره بصورت داینامیک، طبق دیتایی که توی items قرار میگیره، ماهیت و نوعش تغییر میکنه. پوینت کل ماجرا همینه.
چرا اصلا اسمش T هست؟
اصلا مهم نیست اسمش چی باشه. یه سری مسائل هست که Conventionalان. یعنی یک سری قواعد نانوشتهای هستن که توسعهدهندهها ازش بصورت مرامی، پیروی میکنن وگرنه این مثال هم کاملا درسته:
python
def convert[B](item: B) -> Tuple[B, B, B]:
return (item,)
یه تابع، با چند Generic Type:
python
def convert[A, B](first: A, second: B) -> Tuple[A, B]:
return (first, second)
`
منبع: https://blog.imsadra.dev/generic-typing-in-python
Join 👉 @lnxpylnxpy | 1 225 |
| 5 | چرا Generic Typing مهمه؟
خیلی از برنامهنویسای پایتون هنگام استفاده از Type Hinting تنها از انواع مشخصی مانند str`، `int یا list[str] استفاده میکنن. اما زمانی که یک تابع یا کلاس باید با چندین نوع داده مختلف کار کنه، استفاده از Generic Typing باعث میشه هم انعطافپذیری حفظ شه و هم Type Safety از بین نره.
به جای اینکه برای هر نوع داده یک تابع جداگانه بنویسید، میتونید یک Type Variable تعریف کنید و نوع ورودی و خروجی رو به اون وابسته کنید. به این ترتیب ابزارهایی مثل MyPy و Pyright قادر خواهند بود خطاهای احتمالی رو پیش از اجرای برنامه تشخیص بدن.
from typing import TypeVar
T = TypeVar("T")
def first(items: list[T]) -> T:
return items[0]
در این مثال، تابع first میتونه روی لیستی از هر نوع دادهای کار کنه؛ اما نوع خروجی دقیقاً با نوع عناصر لیست مطابقت داره.
منبع: https://blog.imsadra.dev/generic-typing-in-python
Join 👉 @lnxpylnxpy | 1 524 |
| 6 | نزدیک به ۵۰ تا مقاله پیرامون تجربیاتم در زمینهها مختلف پایتون، وب، تستنویسی، برنامهنویسی، AI و.. نوشتم که همشون اینجا در دسترسن:
blog.imsadra.dev
هدفم اینه که مهمترین مقالهها و مواردی که بیشترین بازدید رو داشتن رو انتخاب و به کمک AI به فارسی برگردونم و ترجمه و بصورت bite-sized، همینجا به اشتراک بذارم.
اینطوری هم خسته نمیشید، هم مطالب در دسترسن. :) ❤️ | 1 612 |
| 7 | اگه نیاز به نسخه pdf کتابهای مرتبط با برنامهنویسی داشتین، احتمالا اینجا پیداش کنین:
@progerbooks
(تبلیغ نیست، خودم یه سری کتاب ها رو میخواستم و دقیقا همون ویرایش ها رو داشت) | 2 123 |
| 8 | Sin texto... | 2 038 |
| 9 | من برنامهنویسی در دبیرستان با csharp شروع کردم. کامپایلری بود، کد رو مینوشتی، کامپایل میشد و نهایتا یه فایل قابل اجرا بهت میداد که طبق منطقی که واسش برنامهنویسی کرده بودی، کار میکرد. اگه پروگرمت درست کار نمیکرد، دوباره باید ادیت میکردی، دوباره کامپایل و..
معقولانه بود. واسه شروع بد نبود. دید جالبی نسبت به برنامه نویسی بهم داد. بعد. رفتم سراغ پایتون. دیدم بهه بههه..! چه خوبه، سریع، بدون دردسر و خفنه ولی چرا نمیشه فایل اجرایی ازش گرفت؟ یعنی همیشه، پروگرمت هرجا میخواد بره، پایتونم باید اونجا نصب باشه؟ عهخ. این بده که.. اینجا بود که کم کم با مفهوم زبان های مفسری اشنا شدم.
فهمیدم اون فایل اجرایی که csharp بهم میداد هم همچین standalone نبود.. حتما باید dot net نصب داشته باشی واسه اجراش و چون بیسیک ترین ابزار ها روی ویندوز، دات نت از نیازمندیهاشونه (حتی خود سیستم عامل ویندوز)، واسه همین حس میکنی برنامه ای که نوشتی همه جا کار میکنه، روی تمام سیستم ها اجرا میشه و به به و اینا. (اینو موقعی فهمیدم که روی لینوکس اولین پروگرم سی شارپم رو کامپایل و اجرا کردم) 😁
بعد رفتم سراغ embedded و iot. دیدم اونجا، اکثر تمرکز دیگه سمت برنامه نویسی نیست. تقریبا ۷۰ درصد تمرکز سمت طراحی و معماری فیزیکی ماژول ها و الکترونیکه. برنامه نویسیش هم خیلی اصول خاصی نیاز نداره به رعایت کردن. (مگر در شرایط خاص که قرار باشه فریم ورک یا پروژه بزرگی رو پیاده کنی)
پلن بعدی جاوا اسکریپت و ریاکت بود. اولش خیلی گنگ بود واسم. حتی همون اوایل مسیرم. یه فانکشن مینوشتم، الان کار میکرد، نیم ساعت بعد هرچی رانش میکردم جواب نمیداد. کلا js تو دیدم یه چیز به شدت unreliable و غیرقابل اعتماد بود. نمیدونم چرا. 😂
یکم جی اس خوندم و ریکت رو شروع کردم. قشنگ لمس کردم که یه کمپانی یا تیم، چقدر خوب میتونه یه مفهوم رو به کل عوض کنه و کلا یک ساختار و معماری جدید، به شدت قدرتمند، زیبا و در عین حال باحال بسازه.
ریاکت، روی خوش js رو بهم نشون داد. واقعا کیف کردم از کار کردن با ریاکت. دیدم نسبت به این اکوسیستم و برنامهنویسی یکنواختی که انجام میدادیم عوض شد. ناگفته نماند، شما توی ریاکت، یه سری ساختارها و قابلیتهایی میبینید که هرکدومشون میتونن یه کورس جداگانه باشن بس که به ظاهر ساده و زیبا هستن، ولی به شدت عمیقان و سر از یه سری کانسپتهای خیلی پایهای در میارن. (دیگه یه سری از کتابخونه ها و پکیج هایی که واسه ریاکت درست شدنم نگم..)
بعد از ریاکت، صرفا بخاطر نیاز، یکم کوچ کردم به سمت ریاکت نیتیو و expo. تجربه جالب بود.
ولی خب پایتون یه چیز دیگهاس.. تو این مسیر، خیلی چیزا رو تجربه کردم. اینکه میگن ۱۰۰ درصد تمرکزت رو بذار روی یه زبان/فریم ورک یا تکنولوژی، بنظرم کاملا اشتباه هست. ناخوداگاه داره جلوی بروز خلاقیت در ذهنت رو میگیری.
هر استکی دیدید باحاله، حتما یه چنگی بهش بزنید. در کنارش، سر کار هم برید و تایتل پروفایل کاریتون ثابت باشه.
بنظرم اینجوری، تجربه شیرینتره، مسیر کمتر یکنواخته، خستگی کمتره، هیجان و کنجکاوی بیشتره و چیزی جز خودپروری و پیشرفت درش نمیبینم.
موفق باشید. :) ❤️ | 2 418 |
| 10 | Ah shit.. here we go again. 🚬 | 2 180 |
| 11 | بنظرم یه ترم جدید باید داشته باشیم تحت عنوان “Shipophobia” به خصوص تو این دوره که ابزارهایی مثل Claude و Codex و.. روند توسعه رو تغییر دادن.
به زودی راجع بهش مینویسم. بنظرم یه ترس و احساس خطریه که شاید اکثر کسایی که حرفهای (تا قبل از AI) کد میزدن تو این برهه باهاش مواجهان.
اینکه چطور باهاش مواجه شیم و بعنوان یه اهرم پیشرفت ازش استفاده کنیم رو واستون توضیح میدم. | 2 782 |
| 12 | خب شادباش میگم (؟!). یکی از زنجیرهایی که به پامون بسته بودن رو باز کردن و تنها یک گام به اینترنت آزاد (چیزی که حق انکارناپذیر مردمه و همه دنیا آزادانه ازش استفاده میکنن) نزدیکتر شدیم. همونجایی که همیشه بودیم؛ پس خوشحالی نداره.
درضمن، تو این ۸۰-۹۰ روزی که پشت سر گذاشتیم، بیشرفی و شرافت خیلیا به مردم ثابت شد.
امیدوارم هنوز امیدتون رو از دست نداده باشین. به امید روزهای بهتر. 💪❤️ | 2 918 |
| 13 | در هفته گذشته، بعد از ۱۵ سال اولین پیمنت ویزا و مستر کارت در سوریه انجام شد، همچنین اپل اولین نمایندگی رسمی خودش رو در افغانستان به ثبت رسوند.
و تو هنوز داری پینگ میگیری.. :) | 3 075 |
| 14 | تبلیغ:
امنیت شما خیلی واسمون مهمه، اما جیب شما مهمتر.
#اینترنت_پرو | 2 993 |
| 15 | چقد دلم واستون تنگ شده. ❤️🩹 | 2 268 |
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
