برنامه نویسی | Teachify – Telegram
برنامه نویسی | Teachify
12.3K subscribers
999 photos
420 videos
231 files
647 links
برای موفق شدن 🌱 با این عبارت خداحافظی کن: "باشه فردا"🍃


Admin: @Yousef_Vafaei
Download Telegram
✔️ کنترل همزمانی در تراکنش‌های مالی و جلوگیری از Race Condition / Double Spending

در سرویس‌های مالی، اگر چند درخواست برداشت همزمان به یک حساب برسد، هر دو موجودی را در یک لحظه می‌خوانند و هر دو تراکنش را تأیید می‌کنند؛ نتیجه: برداشت بیش از موجودی و ایجاد Double Spending.

برای جلوگیری از این اتفاق، از قفل‌گذاری Redis استفاده می‌شود:

SET lock:user_id unique_token NX PX 10000


این دستور چه می‌کند؟


🔸 NX
فقط اگر قفل قبلاً وجود نداشته باشد، ثبت می‌شود؛ یعنی تنها یک فرآیند قفل را می‌گیرد.

🔸 PX 10000
قفل بعد از ۱۰ ثانیه خودکار آزاد می‌شود تا Deadlock رخ ندهد.

🔸 unique_token
یک UUID که تضمین می‌کند فقط صاحب قفل بتواند آن را آزاد کند.

با این مکانیزم، عملیات حساس روی حساب به‌صورت انحصاری انجام می‌شود و احتمال Double Spending از بین می‌رود.

@Teachify | برنامه‌نویسی
👍8
✔️ آشنایی با متد کاربردی dict.fromkeys در پایتون

گاهی لازم است یک دیکشنری با مجموعه‌ای از کلیدها بسازیم که همه مقادیر اولیه یکسان باشند. برای این کار، متد dict.fromkeys راهکاری سریع و استاندارد ارائه می‌دهد:

keys = ["a", "b", "c"]
d = dict.fromkeys(keys, 0)
print(d)
# خروجی: {'a': 0, 'b': 0, 'c': 0}


نکته مهم درباره مقادیر mutable

اگر مقدار اولیه از نوع mutable مثل لیست، دیکشنری یا set باشد، تمام کلیدها به یک آبجکت مشترک اشاره می‌کنند:

d = dict.fromkeys(["x", "y"], [])
d["x"].append(1)
print(d)
# خروجی: {'x': [1], 'y': [1]}


در این حالت، استفاده از dictionary comprehension پیشنهاد بهتری است.

متدهای مهم و رایج دیکشنری‌ها در پایتون

get(key, default) → دریافت مقدار بدون خطا
setdefault(key, default) → ایجاد کلید در صورت عدم وجود
update(mapping) → ادغام دو دیکشنری
pop(key, default) → حذف کلید و بازگرداندن مقدار
popitem() → حذف آخرین کلید اضافه‌شده
keys(), values(), items() → دسترسی به اجزای دیکشنری

@Teachify | برنامه‌نویسی
1👍1
✔️ سوءاستفاده از بلک‌فرایدی در ایران!

این روزها همه‌مون شاهدیم که بعضی از فروشگاه‌های ایرانی با چه جسارتی مردم رو دست می‌اندازن و تخفیف‌های ساختگی رو به‌عنوان «بلک‌فرایدی» جا می‌زنن.

شما هم اینجوری باهاش حساب کنین:

اسم فروشگاه رو در گوگل جست‌وجو کنید. روی لینک اول، سه‌نقطه‌ی سمت راستش رو بزنید و وارد گزینه‌ی Feedback بشید.
از بین گزینه‌ها، Irrelevant content رو انتخاب کنید.
در باکسی که ظاهر میشه، بنویسید:
scam shopping
و ارسالش کنید.
از بقیه هم بخواین همین کار رو انجام بدن. وقتی تعداد گزارش‌ها بالا بره، گوگل فروشگاه رو ریپورت می‌کنه و رتبه‌ش به‌شدت سقوط می‌کنه. این بهترین راهه تا بفهمن نمی‌تونن با بی‌شرمی، نامردی و سوءاستفاده از اعتماد مردم ادامه بدن.

در نهایت، همیشه به یاد داشته باشیم:
پنیرِ مفت فقط تو تلهٔ موشه.

همه میدونیم کدوم فروشگاه ها رو باید ریپورت کنیم(توی عکس ها من با آمازون یاد دادم ولی به اشتباه نرید آمازون رو بزنید)🙏

این پست رو share کنید تا همه در جریان باشن.

@kaliboys | کالی بویز
👍212👌1
✔️ تفاوت set و frozenset در پایتون

در پایتون، دو نوع ساختار برای کار با مجموعه‌های غیرتکراری وجود دارد: set و frozenset
تفاوت اصلی آن‌ها در قابلیت تغییر است:

▪️set (قابل تغییر – Mutable)
s = {1, 2, 3}
s.add(4)        #افزودن عنصر
s.remove(2)     # حذف عنصر
print(s)        # خروجی: {1, 3, 4}

کاربرد: زمانی که داده‌ها در طول برنامه نیاز به به‌روزرسانی دارند.

▪️frozenset (غیرقابل تغییر – Immutable)
fs = frozenset([1, 2, 3])
print(fs)       # خروجی: frozenset({1, 2, 3})
# fs.add(4)
#خطا: frozenset قابل تغییر نیست

کاربرد: داده‌های ثابت و hashable

weights = {frozenset(["سیب", "موز"]): 120}
key = frozenset(["موز", "سیب"])
print(weights[key])  # خروجی: 120

@Teachify | برنامه نویسی
👍42
✔️ حقیقتی که باید قبول کنیم

عزیزان ،

اگر صرفا یک Endpoint از OpenAI یا هر AI Service Provider دیگری را صدا میزنید و یک اتفاقی می افتد، شما از خدایان هوش مصنوعی نیستید - باور کنید شما اصلا چیز خاصی نیستید، شما در حال حرام شدن و یک استعداد کشف نشده نیستید، شما صرفا یک صدا کننده یک API هستید - زیاد خودتان را اذیت نکنید !! - کسی هم در هیچ کجای دنیا الاف این تخصص عجیب شما نیست - به همان CRUD ادامه بدهید - خبری هم از حقوق 800 هزار دلاری نیست - بشین سر جات دوست من !

پیروز باشید

@Teachify | #AliKolahdoozan
😁11👍73
برنامه نویس های عزیز شما دلتون گرفتنی چیکار میکنید؟
👨‍💻142
✔️ سطح توسعه‌دهنده، فقط کدنویسی نیست!

برنامه نویس Junior

کد می‌زنه تا برنامه فقط کار کنه.

برنامه نویس Mid-Level

کد رو تمیز و مرتب می‌کنه. می‌دونه:
هر چیزی که کار می‌کنه، لزوماً خوب نیست.

برنامه نویس Senior
می‌فهمه کی باید کد بزنه، کی نزنه و کی کد رو حذف کنه.

برنامه نویس Lead
اصلاً نمی‌ذاره کد اشتباه نوشته بشه.
قبل از اجرا، مسئله رو درست تعریف می‌کنه.

حقیقت ساده ولی مهم:
هر چی جلوتر میری، کمتر کد می‌زنی
ولی مسئولیت تصمیم‌هات خیلی سنگین‌تر می‌شه.

تجربه فقط به سال‌ها نیست؛
طرز فکر و تصمیم‌گیریه که سطح واقعی تو رو نشون می‌ده.

@Teachify | برنامه نویسی
👍19
✔️ چه بلایی سر MinIO اومده؟

تیم توسعه MinIO رسماً اعلام کرده است که نسخه متن‌باز MinIO وارد Maintenance Mode شده است.

- توسعه فعال نسخه Community متوقف شده است
- رفع مشکلات تنها برای باگ‌های امنیتی حیاتی انجام می‌شود
- افزودن قابلیت‌های جدید یا بهبودهای عمده دیگر در نسخه متن‌باز ارائه نخواهد شد
- تمرکز تیم توسعه اکنون به سمت نسخه Enterprise با نام AIStor معطوف شده است

—> به عبارت دیگر، نسخه متن‌باز MinIO دیگر در حال رشد و توسعه فعال نیست و تنها برای اطمینان از ثبات و امنیت نگه‌داری می‌شود.

پیامدها برای کاربران:

_ پروژه‌هایی که روی نسخه Community بنا شده‌اند، ممکن است نیازمند بازبینی و برنامه‌ریزی بلندمدت باشند
- انتشار باینری‌ها و تصاویر رسمی Docker/Helm نسخه متن‌باز متوقف شده است
- مدیریت و تنظیمات پیشرفته UI به نسخه Enterprise منتقل شده است

جایگزین‌های متن‌باز معتبر:

Ceph
SeaweedFS
Garage
Zenko

🔗 لینک رسمی پروژه: MinIO GitHub

@Teachify | برنامه نویسی
💔2
✔️ تفاوت repr و str در پایتون

متد repr:
نمایش رسمی و دقیق شیء
مخصوص برنامه‌نویس، دیباگ و لاگ
متد str:
نمایش کاربرپسند شیء
مخصوص خروجی برای کاربر نهایی

class User:
    def init(self, name):
        self.name = name

    def repr(self):
        return f"User(name={self.name!r})"

    def str(self):
        return self.name

u = User("Yousef")
print(u)        # Yousef
repr(u)         # User(name='Yousef')`

نکته مهم:
اگه str نباشه پایتون از repr استفاده می‌کنه.

@Teachify | برنامه نویسی
5
✔️ 8 مدل LLM مناسب اجرا روی لوکال (دسامبر 2025)

1️⃣ Devstral-2-123B
بهترین برای برنامه‌نویسی
مخصوص توسعه نرم‌افزار، دیباگ، ریفکتور و ساخت Agent

2️⃣ MiniMax-M2
Agent + Coding + UI
مناسب فول‌استک و پروتوتایپ سریع

3️⃣ GLM-4.5-Air
بهترین انتخاب کلی
روزمره، سریع و پایدار

4️⃣ Qwen3-VL-235B-A22B
متن + تصویر
بهترین مدل بینایی (VLM)

5️⃣ GLM-4.6 (REAPed)
استدلال قوی + کدنویسی پیشرفته
قدرت بالا در مسائل پیچیده

6️⃣ Nemotron-3-Nano-30B-A3B
سبک ولی قدرتمند
کیفیت بالا با مصرف کمتر

7️⃣ GPT-OSS-120B
GPT-5 روی سیستم خودت
Agent و Coding سنگین

8️⃣ GPT-OSS-20B
سریع و کم‌مصرف
مناسب Automation و Tool Calling

@Teachify | برنامه نویسی
4