uk
Feedback
Sadra Codes

Sadra Codes

Відкрити в Telegram
3 569
Підписники
+624 години
+337 днів
+10530 день

Триває завантаження даних...

Залучення підписників
червень '26
червень '26
+159
в 3 каналах
травень '26
+39
в 2 каналах
Get PRO
квітень '26
+57
в 0 каналах
Get PRO
березень '26
+22
в 0 каналах
Get PRO
лютий '26
+162
в 1 каналах
Get PRO
січень '26
+14
в 0 каналах
Get PRO
грудень '25
+24
в 1 каналах
Get PRO
листопад '25
+57
в 1 каналах
Get PRO
жовтень '25
+65
в 0 каналах
Get PRO
вересень '25
+54
в 1 каналах
Get PRO
серпень '25
+57
в 0 каналах
Get PRO
липень '25
+72
в 1 каналах
Get PRO
червень '25
+63
в 0 каналах
Get PRO
травень '25
+60
в 0 каналах
Get PRO
квітень '25
+47
в 0 каналах
Get PRO
березень '25
+88
в 8 каналах
Get PRO
лютий '25
+62
в 6 каналах
Get PRO
січень '25
+159
в 2 каналах
Get PRO
грудень '24
+204
в 5 каналах
Get PRO
листопад '24
+267
в 4 каналах
Get PRO
жовтень '24
+182
в 3 каналах
Get PRO
вересень '24
+182
в 5 каналах
Get PRO
серпень '24
+253
в 10 каналах
Get PRO
липень '24
+105
в 3 каналах
Get PRO
червень '24
+392
в 7 каналах
Get PRO
травень '24
+151
в 7 каналах
Get PRO
квітень '24
+126
в 7 каналах
Get PRO
березень '24
+126
в 5 каналах
Get PRO
лютий '24
+143
в 5 каналах
Get PRO
січень '24
+166
в 2 каналах
Get PRO
грудень '23
+229
в 8 каналах
Get PRO
листопад '23
+63
в 2 каналах
Get PRO
жовтень '23
+23
в 0 каналах
Get PRO
вересень '23
+90
в 0 каналах
Get PRO
серпень '23
+206
в 0 каналах
Get PRO
липень '23
+85
в 0 каналах
Get PRO
червень '23
+122
в 0 каналах
Get PRO
травень '23
+225
в 0 каналах
Get PRO
квітень '23
+279
в 0 каналах
Get PRO
березень '23
+214
в 0 каналах
Get PRO
лютий '23
+32
в 0 каналах
Get PRO
січень '23
+80
в 0 каналах
Get PRO
грудень '22
+97
в 0 каналах
Get PRO
листопад '22
+12
в 0 каналах
Get PRO
жовтень '22
+115
в 0 каналах
Get PRO
вересень '22
+15
в 0 каналах
Get PRO
серпень '22
+16
в 0 каналах
Get PRO
липень '22
+27
в 0 каналах
Get PRO
червень '22
+26
в 0 каналах
Get PRO
травень '22
+24
в 0 каналах
Get PRO
квітень '22
+20
в 0 каналах
Get PRO
березень '22
+72
в 0 каналах
Get PRO
лютий '22
+5
в 0 каналах
Get PRO
січень '22
+2
в 0 каналах
Get PRO
грудень '21
+2
в 0 каналах
Get PRO
листопад '21
+4
в 0 каналах
Get PRO
жовтень '21
+4
в 0 каналах
Get PRO
вересень '210
в 0 каналах
Get PRO
серпень '21
+2
в 0 каналах
Get PRO
липень '21
+2
в 0 каналах
Get PRO
червень '21
+7
в 0 каналах
Get PRO
травень '21
+4
в 0 каналах
Get PRO
квітень '21
+6
в 0 каналах
Get PRO
березень '21
+5
в 0 каналах
Get PRO
лютий '21
+3
в 0 каналах
Get PRO
січень '21
+3
в 0 каналах
Get PRO
грудень '20
+720
в 0 каналах
Дата
Залучення підписників
Згадування
Канали
23 червня+6
22 червня+7
21 червня+6
20 червня+8
19 червня+3
18 червня+6
17 червня+5
16 червня+4
15 червня+13
14 червня+5
13 червня+15
12 червня+15
11 червня+15
10 червня+6
09 червня+8
08 червня+8
07 червня+10
06 червня+3
05 червня+3
04 червня+8
03 червня+5
02 червня0
01 червня0
Дописи каналу
توی پایتون، یه Operand داریم، یه Operator. در مثال زیر، به x و y می‌گیم Operand و به < می‌گیم Opeartor.
if (x > y): ...
حالا این وسط یه Operatorی داریم که شاید کمتر کسی راجع بهش بدونه. اسمش Walrus operator هست. کارش چیه؟ عبارت مقایسه‌ای ما که سرجاشه.. حالا این وسط میاد یه Variable assignment هم انجام میده. مثلا اگه قبلا می‌نوشتید:
length = len("test1234")

if length < 8:
    print(f"Your password is {length} chars long. It must be longer than 8 
chars.")
زین پس بنویسید:
if (length:=len("test1234")) < 8:
    print(f"Your password is {length} chars long. It must be longer than 8 
chars.")
و چه شرط true باشه چه false، متغیر length همیشه در دسترس خواهد بود. حالا یه اپراتور داریم که شاید اصلا ندیده باشینش. البته Deprecate شده ولی خب هنوز میشه ازش استفاده کرد و اسمش Barry Warsaw's Operator هست. بری خان دولوپر پایتون بوده و اون زمان، بجای =! یا همون Not equal، از <> استفاده می‌کردن.
>>> 2 != 3
True
>>> 2 <> 3
  File "<python-input-1>", line 1
    2 <> 3
      ^^
SyntaxError: invalid syntax
>>> from __future__ import barry_as_FLUFL
>>> 2 != 3
  File "<python-input-3>", line 1
    2 != 3
      ^^
SyntaxError: with Barry as BDFL, use '<>' instead of '!='
>>> 2 <> 3
True
>>>
کاملا بی‌مصرف و چرت. 😄 منبع: https://blog.imsadra.dev/10-python-easter-eggs Join 👉 @lnxpylnxpy

2
توی cli، ران کنید: python -c "import antigravity" Join 👉 @lnxpylnxpy
590
3
Love is neither true, or false. Love is just love. This is love. 🖤 >>> import this >>> love = this >>> this is love True >>> love is True False >>> love is False False >>> love is not True or False True >>> love is not True or False; love is love True Join 👉 @lnxpylnxpy
750
4
دیگه بهتر از بانو، نیاد.. 🖤 Join 👉 @lnxpylnxpy
718
5
واسه توسعه پکیج پایتون، من از استک‌ها و محیطی استفاده می‌کنم که تقریبا تمام نیازمندهام رو برطرف می‌کنه. از تست و کاوریج و داک
واسه توسعه پکیج پایتون، من از استک‌ها و محیطی استفاده می‌کنم که تقریبا تمام نیازمندهام رو برطرف می‌کنه. از تست و کاوریج و داکیومنت، تا اتومیشن‌ها و.. توی این مقاله، راجع به پروسه و تصمیماتی که حین توسعه می‌گیرم نوشتم. راجع به ابزارهای زیر هم صحبت کردم که هرکدوم به چه دردی می‌خورن: 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
1 230
6
یه موضوع هست راجع به تنظیم دپریکیشن‌ها. مثلا شما قراره به زودی، یه 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
971
7
وقتی دارید روی یه پکیج کار می‌کنید که یوزرها برنامه‌نویس هستن، در قسمت‌هایی از پروژه، ورژن پکیج رو قید کردین. مسلما هر بیلد، یه ورژن خاص خودش رو داره. معروف‌ترین نوع ورژن‌بندی هم که همه تقریبا باهاش آشناییم همون 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
1 048
8
واسه اینکه راحت‌تر درک کنید قدرت 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 430
9
چرا 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 758
10
نزدیک به ۵۰ تا مقاله پیرامون تجربیاتم در زمینه‌ها مختلف پایتون، وب، تست‌نویسی، برنامه‌نویسی، AI و.. نوشتم که همشون اینجا در دسترسن: blog.imsadra.dev هدفم اینه که مهم‌ترین‌ مقاله‌ها و مواردی که بیشترین بازدید رو داشتن رو انتخاب و به کمک AI به فارسی برگردونم و ترجمه و بصورت bite-sized، همینجا به اشتراک بذارم. اینطوری هم خسته نمی‌شید، هم مطالب در دسترسن. :) ❤️
1 807
11
اگه نیاز به نسخه pdf کتاب‌های مرتبط با برنامه‌نویسی داشتین، احتمالا اینجا پیداش کنین: @progerbooks (تبلیغ نیست، خودم یه سری کتاب ها رو میخواستم و دقیقا همون ویرایش ها رو داشت)
2 349
12
Немає тексту...
2 217
13
من برنامه‌نویسی در دبیرستان با csharp شروع کردم. کامپایلری بود، کد رو مینوشتی، کامپایل میشد و نهایتا یه فایل قابل اجرا بهت می‌داد که طبق منطقی که واسش برنامه‌نویسی کرده بودی، کار می‌کرد. اگه پروگرمت درست کار نمی‌کرد، دوباره باید ادیت می‌کردی، دوباره کامپایل و.. معقولانه بود. واسه شروع بد نبود. دید جالبی نسبت به برنامه نویسی بهم داد. بعد. رفتم سراغ پایتون. دیدم بهه بههه..! چه خوبه، سریع، بدون دردسر و خفنه ولی چرا نمیشه فایل اجرایی ازش گرفت؟ یعنی همیشه، پروگرمت هرجا می‌خواد بره، پایتونم باید اونجا نصب باشه؟ عهخ. این بده که.. اینجا بود که کم کم با مفهوم زبان های مفسری اشنا شدم. فهمیدم اون فایل اجرایی که csharp بهم میداد هم همچین standalone نبود.. حتما باید dot net نصب داشته باشی واسه اجراش و چون بیسیک ترین ابزار ها روی ویندوز، دات نت از نیازمندی‌هاشونه (حتی خود سیستم عامل ویندوز)، واسه همین حس میکنی برنامه ای که نوشتی همه جا کار می‌کنه، روی تمام سیستم ها اجرا میشه و به به و اینا. (اینو موقعی فهمیدم که روی لینوکس اولین پروگرم سی شارپم رو کامپایل و اجرا کردم) 😁 بعد رفتم سراغ embedded و iot. دیدم اونجا،‌ اکثر تمرکز دیگه سمت برنامه نویسی نیست. تقریبا ۷۰ درصد تمرکز سمت طراحی و معماری فیزیکی ماژول ها و الکترونیکه. برنامه نویسیش هم خیلی اصول خاصی نیاز نداره به رعایت کردن. (مگر در شرایط خاص که قرار باشه فریم ورک یا پروژه بزرگی رو پیاده کنی) پلن بعدی جاوا اسکریپت و ری‌اکت بود. اولش خیلی گنگ بود واسم. حتی همون اوایل مسیرم. یه فانکشن می‌نوشتم، الان کار می‌کرد، نیم ساعت بعد هرچی رانش میکردم جواب نمیداد. کلا js تو دیدم یه چیز به شدت unreliable و غیرقابل اعتماد بود. نمیدونم چرا. 😂 یکم جی اس خوندم و ریکت رو شروع کردم. قشنگ لمس کردم که یه کمپانی یا تیم، چقدر خوب می‌تونه یه مفهوم رو به کل عوض کنه و کلا یک ساختار و معماری جدید، به شدت قدرتمند،‌ زیبا و در عین حال باحال بسازه. ری‌اکت، روی خوش js رو بهم نشون داد. واقعا کیف کردم از کار کردن با ری‌اکت. دیدم نسبت به این اکوسیستم و برنامه‌نویسی یک‌نواختی که انجام میدادیم عوض شد. ناگفته نماند، شما توی ری‌اکت، یه سری ساختارها و قابلیت‌هایی می‌بینید که هرکدومشون می‌تونن یه کورس جداگانه باشن بس که به ظاهر ساده و زیبا هستن، ولی به شدت عمیق‌ان و سر از یه سری کانسپت‌های خیلی پایه‌ای در میارن. (دیگه یه سری از کتابخونه ها و پکیج هایی که واسه ری‌اکت درست شدنم نگم..) بعد از ری‌اکت، صرفا بخاطر نیاز، یکم کوچ کردم به سمت ری‌اکت نیتیو و expo. تجربه جالب بود. ولی خب پایتون یه چیز دیگه‌اس.. تو این مسیر، خیلی چیزا رو تجربه کردم. اینکه می‌گن ۱۰۰ درصد تمرکزت رو بذار روی یه زبان/فریم ورک یا تکنولوژی، بنظرم کاملا اشتباه هست. ناخوداگاه داره جلوی بروز خلاقیت در ذهنت رو میگیری. هر استکی دیدید باحاله، حتما یه چنگی بهش بزنید. در کنارش، سر کار هم برید و تایتل پروفایل کاریتون ثابت باشه. بنظرم اینجوری، تجربه شیرین‌تره، مسیر کمتر یکنواخته، خستگی کمتره، هیجان و کنجکاوی بیشتره و چیزی جز‌ خودپروری و پیشرفت درش نمی‌بینم. موفق باشید. :) ❤️
2 654
14
Ah shit.. here we go again. 🚬
2 312
15
بنظرم یه ترم جدید باید داشته باشیم تحت عنوان “Shipophobia” به خصوص تو این دوره که ابزارهایی مثل Claude و Codex و.. روند توسعه
بنظرم یه ترم جدید باید داشته باشیم تحت عنوان “Shipophobia” به خصوص تو این دوره که ابزارهایی مثل Claude و Codex و.. روند توسعه رو تغییر دادن. به زودی راجع بهش می‌نویسم. بنظرم یه ترس و احساس خطریه که شاید اکثر کسایی که حرفه‌ای (تا قبل از AI) کد می‌زدن تو این برهه باهاش مواجه‌‌ان. اینکه چطور باهاش مواجه شیم و بعنوان یه اهرم پیشرفت ازش استفاده کنیم رو واستون توضیح میدم.
2 966
16
خب شادباش می‌گم (؟!). یکی از زنجیرهایی که به پامون بسته بودن رو باز کردن و تنها یک گام به اینترنت آزاد (چیزی که حق انکارناپذیر مردمه و همه دنیا آزادانه ازش استفاده می‌کنن) نزدیک‌تر شدیم. همونجایی که همیشه بودیم؛ پس خوشحالی نداره. درضمن، تو این ۸۰-۹۰ روزی که پشت سر گذاشتیم، بی‌شرفی و شرافت خیلیا به مردم ثابت شد. امیدوارم هنوز امیدتون رو از دست نداده باشین. به امید روزهای بهتر. 💪❤️
3 110
17
در هفته گذشته، بعد از ۱۵ سال اولین پیمنت ویزا و مستر کارت در سوریه انجام شد، همچنین اپل اولین نمایندگی رسمی خودش رو در افغانستان به ثبت رسوند. و تو هنوز داری پینگ می‌گیری.. :)
3 075
18
تبلیغ: امنیت شما خیلی واسمون مهمه، اما جیب شما مهمتر. #اینترنت_پرو
2 993
19
چقد دلم واستون تنگ شده. ❤️‍🩹
2 268