Forwarded from Fara Code | برنامه نویسی (M.z)
دکوراتور ها در پایتون
تا حالا شده بخوای بدون تغییر در ساختار اصلی یه تابع، یه قابلیت جدید بهش اضافه کنی؟
مثلاً یه لاگ بگیری، زمان اجراشو حساب کنی، یا قبل از اجراش چک کنی که ورودیهاش معتبرن یا نه؟
اینجاست که دکوراتورها (Decorators) وارد میشن!
دکوراتور یه تابعی هست که یه تابع دیگه رو میگیره، پردازشهایی روش انجام میده و در نهایت یه نسخه جدید از اون تابع رو برمیگردونه و باعث افزایش خوانایی و بهینهسازی کد میشن.
🎯 چند کاربرد معروف دکوراتورها
1 ثبت لاگها: بررسی این که چه زمانی یه تابع اجرا شده
2 کنترل سطح دسترسی: چک کردن اینکه کاربر مجوز لازم داره یا نه
3 کش کردن: ذخیره نتایج برای بهینهسازی اجراهای بعدی
🔍 مثال:
اندازهگیری زمان اجرای تابع:
📌 خروجی:
🎯 چرا از دکوراتورها استفاده کنیم؟
کد رو تمیزتر و خواناتر میکنه
بدون تغییر در توابع، ویژگیهای جدید اضافه میکنیم
قابلیت استفاده مجدد از کد رو افزایش میده
تا حالا از دکوراتور ها استفاده کردید؟
#python
@Learrning_Python
تا حالا شده بخوای بدون تغییر در ساختار اصلی یه تابع، یه قابلیت جدید بهش اضافه کنی؟
مثلاً یه لاگ بگیری، زمان اجراشو حساب کنی، یا قبل از اجراش چک کنی که ورودیهاش معتبرن یا نه؟
اینجاست که دکوراتورها (Decorators) وارد میشن!
دکوراتور یه تابعی هست که یه تابع دیگه رو میگیره، پردازشهایی روش انجام میده و در نهایت یه نسخه جدید از اون تابع رو برمیگردونه و باعث افزایش خوانایی و بهینهسازی کد میشن.
🎯 چند کاربرد معروف دکوراتورها
1 ثبت لاگها: بررسی این که چه زمانی یه تابع اجرا شده
2 کنترل سطح دسترسی: چک کردن اینکه کاربر مجوز لازم داره یا نه
3 کش کردن: ذخیره نتایج برای بهینهسازی اجراهای بعدی
🔍 مثال:
اندازهگیری زمان اجرای تابع:
Copy
Edit
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f" runtime : {end_time - start_time:.5f} sec")
return result
return wrapper
@timer_decorator
def heavy_function():
time.sleep(2)
print(" function is run")
heavy_function()
📌 خروجی:
function is run
runtime: 2.00012 sec
🎯 چرا از دکوراتورها استفاده کنیم؟
کد رو تمیزتر و خواناتر میکنه
بدون تغییر در توابع، ویژگیهای جدید اضافه میکنیم
قابلیت استفاده مجدد از کد رو افزایش میده
تا حالا از دکوراتور ها استفاده کردید؟
#python
@Learrning_Python
خووب
امروز یه مبحثک میخوایم استارتشو بزنیم که به نظرم خیلی نیاز و تقریبا هرکی که برنامه نویسی میکنه باهاش سر و کله میزنه
و قراره به صورت تخصصی از صفر براش محتوا تولید کنیم
البته بگم که این به این معنی نیس که همه مطالبو میگیم و کامل کامله...
این مطالب کلیاتی رو پوشش میده و میتونید منابع زیادی رو بعد از اون بخونید (حالا در ادامه منابعی رو خدمتتون معرفی میکنم)
قبل از شروع:
محتوا به صورت متنی است البته بعضی جاها نیاز باشه عکس و ویدیوم میگیرم
#git
امروز یه مبحثک میخوایم استارتشو بزنیم که به نظرم خیلی نیاز و تقریبا هرکی که برنامه نویسی میکنه باهاش سر و کله میزنه
و قراره به صورت تخصصی از صفر براش محتوا تولید کنیم
البته بگم که این به این معنی نیس که همه مطالبو میگیم و کامل کامله...
این مطالب کلیاتی رو پوشش میده و میتونید منابع زیادی رو بعد از اون بخونید (حالا در ادامه منابعی رو خدمتتون معرفی میکنم)
قبل از شروع:
محتوا به صورت متنی است البته بعضی جاها نیاز باشه عکس و ویدیوم میگیرم
#git
Forwarded from Python Hints
گفتم سال جدیدی یک لیستی از چیزهایی که یک
نکته مهم : من ۹۹.۹٪ وقتا فقط
۱- یک سری چیزها هست که شما باید بلد باشی ربطی به جنگو هم نداره؛ اگر میخوای پیشرفت کنی باید بتونی با اینا کار کنی:
بعضی وقتا
درحد
اگر تاحالا با
باقی موارد رو ولی کم کم یادبگیرید؛ کمی یادگیری - بعد تمرین یا استفاده توی پروژه - به چالش و مشکل خوردن - دوباره یادگیری (ادامه یادگیری) و اینکار رو تکرار کنید.
یادبگیرید هر کدوم از موارد بالا چه زمانی استفاده میشه و برای چه کاری این موضوع خیلی مهم هست؛ کی باید استفاده کنید و کی نباید استفاده کنید.
اما برای خود
استاندارد لاگ نویسی هم که درموردش قبلا یک صحبتی داشتیم اون حداقلش هست و بهترش اینه که به ابزارهای موجود وصل بشه.
یک سری چیزا هم توی خود
واسه همه اینها توی سطوح مختلف کلی ویدئو یوتیوب هست و برای مواردی هم که نیست مطمئنم به زودی درست خواهند کرد دوستان؛ ولی نکته مهمتر اینه که یادبگیرید داکیومنت هم بخونید و خودتون رو آپدیت نگه دارید.
پینوشت:
شخصا برنامهای برای ساخت آموزش روی این مباحث یا پروژهها ندارم.
Django Developer باید بلد باشه رو بهتون بدم؛ این موارد حداقل چیزهایی هست که به محض ورود به هر پروژه استاندارد Django باید بلد باشید.نکته مهم : من ۹۹.۹٪ وقتا فقط
Django Rest Framework استفاده میکنم پس توی متن هرجا گفتم Django منظورم همون DRF هست.۱- یک سری چیزها هست که شما باید بلد باشی ربطی به جنگو هم نداره؛ اگر میخوای پیشرفت کنی باید بتونی با اینا کار کنی:
Linux, PostgreSQL, Docker & Docker Compose, Redis, Nginx, Celery & Celery beatبعضی وقتا
RabbitMQ, Kafka هم نیازمندی هست؛ بسته به سطح شما به مرور زمان توی موارد بالا حرفهای تر میشید. لینوکس رو خیلیها کنار میذارند که خیلی اشتباه هست؛ ببین کل استک شما قراره بره روی docker, k8s, podman یا ... وقتی یک اتفاقی توی سیستم میوفته و لاگ سرور بهت داده میشه هم container شما لینوکس هست هم ۹۹.۹٪ سرور شما؛ اگر نتونی اون مشکل رو بازسازی کنی چطوری میخوای تست بگیری و متوجهاش بشی ؟درحد
LPIC1 هم کفایت میکنه (اگر خواستید مدرک بگیرید؛ پیشنهاد میکنم حتما برای آزمونهای redhat بخونید)اگر تاحالا با
Linux کار نکردید؛ پیشنهاد نصب و ... بهتون نمیدم؛ از wsl برای تمرین کردن آنچه که لازم هست استفاده کنید و محیط گرافیکی رو بندازید دور؛ شما روی سرور محیط گرافیکی ندارد (درست تمرین کنید).باقی موارد رو ولی کم کم یادبگیرید؛ کمی یادگیری - بعد تمرین یا استفاده توی پروژه - به چالش و مشکل خوردن - دوباره یادگیری (ادامه یادگیری) و اینکار رو تکرار کنید.
یادبگیرید هر کدوم از موارد بالا چه زمانی استفاده میشه و برای چه کاری این موضوع خیلی مهم هست؛ کی باید استفاده کنید و کی نباید استفاده کنید.
اما برای خود
Django حداقل چیزهایی که باید همزمان با Django بلد باشید؛ نشده جونیور (حتی بدون سابقه کاری) بیاد پیشم و این موارد رو بلد باشه (به فرض اینکه پایتون رو اصولی یاد گرفته) و توی مصاحبه رد بشه؛ اصلا تا حالا نداشتم واقعا میگم :pytest (basics), djagno-silk, drf-spectacular, faker, factory-boy, djangorestframework-simplejwt, django-axes, django-storageاستاندارد لاگ نویسی هم که درموردش قبلا یک صحبتی داشتیم اون حداقلش هست و بهترش اینه که به ابزارهای موجود وصل بشه.
یک سری چیزا هم توی خود
Django هست؛ مثل throttling, middleware, ... که مفاهیمی هست که روی بکند داریم و فارغ از فریمورک باید بلد باشید برای همین صحبتی راجب این موارد ندارم.واسه همه اینها توی سطوح مختلف کلی ویدئو یوتیوب هست و برای مواردی هم که نیست مطمئنم به زودی درست خواهند کرد دوستان؛ ولی نکته مهمتر اینه که یادبگیرید داکیومنت هم بخونید و خودتون رو آپدیت نگه دارید.
پینوشت:
شخصا برنامهای برای ساخت آموزش روی این مباحث یا پروژهها ندارم.
ماشین حساب شما سالم است؟
دیشب مشغول کدزدن با دوست جدیدمان جناب cursor بودم که جایی دیدم روی تست کیس خاصی کد درست کار نمیکند (یک جورهایی مساله parse کردن یک جور درخت بود). هر چه خودم تقلا کردم بفهمم چرا این طور شده نتوانستم. cursor را ندا دادم روی چنین تست کیسی درست کار نمیکنه ببین مشکل از کجاست. cursor هم شروع کرد به تقلا. به سرعت نوشت مشکل چیست و کد را عوض کرد و بعد هم شروع کرد خودش به نوشتن تست کیس. من دیگر از ماجرا پرت شده بودم و فقط شاهد تلاشهای این زبان بسته بودم که خودش تست کیس مینوشت و اجرا میکرد و گاها هم میدید روی تست کیس جواب نمیگیرد کد را تغییر میداد. چند دقیقهای تقلایش طول کشید و نهایتا گفت که great و تمام. کد با آن چیزی که من اول نوشته بودم بسیار تفاوت داشت طوری که برای فهمیدن منطقش باید از خود cursor دوباره میپرسیدم. شروع کردم چند testcase جدید را تست گرفتن و دیدم که روی همه آنها درست جواب میدهد. مساله تبدیل به یک مساله تصمیم ناپذیر شده بود. نمیتوانستم بگویم چرا درست کار میکند ولی هر چه تست کیس امتحان میکردم درست بود. فکر کردم دیدم آیا باید رها کنم؟ اگر جایی اشتباه کرده بود چه؟
ناخودآگاه یاد مثال همیشگی مقایسه LLM و ماشین حساب افتادم. فرض کنید الان یک جمع و ضرب چند رقمی را به ماشین حساب میدهیم و آن به ما جواب را میدهد. از کجا معلوم که اشتباه نکند؟ مثلا چه میدانم پالسی، سیمی، موجی روی هم بیافتند و یک رقم اشتباه شود. در این صورت آیا ما اصلا اغلب متوجه میشویم ؟!؟ کدام یک از ما نتیجه ماشین حساب را وریفای میکنیم؟ احتمالا روزهای اولی هم که ماشین حسابها اختراع شده بودند و مکانیکی تر از امروز بودند، افراد به آنها اعتماد کامل نداشتند و جواب نهاییشان را به نحوی وریفای میکردند. از جایی به بعد ولی احتمالا هم به خاطر اعتمادپذیری بیشتر و هم به خاطر این که محاسبات سنگین شده بودند دیگر هیچ کس به وریفای کردن جواب نهایی ماشین حساب فکر هم نمیکند. الغرض از نظر اعتمادپذیری بین LLMها و ماشینحسابها در لحظه فاصله زیاد است اما احتمالا روزی هم خواهد آمد که دیگر ما خروجیهای LLMها را وریفای نمیکنیم و از خود نمیپرسیم از کجا معلوم این درست بگوید؟ آن روز وضعمان شبیه به امروز است که برایمان سوال نمیشود از کجا معلوم این ماشین حساب درست محاسبه میکند؟
دیشب مشغول کدزدن با دوست جدیدمان جناب cursor بودم که جایی دیدم روی تست کیس خاصی کد درست کار نمیکند (یک جورهایی مساله parse کردن یک جور درخت بود). هر چه خودم تقلا کردم بفهمم چرا این طور شده نتوانستم. cursor را ندا دادم روی چنین تست کیسی درست کار نمیکنه ببین مشکل از کجاست. cursor هم شروع کرد به تقلا. به سرعت نوشت مشکل چیست و کد را عوض کرد و بعد هم شروع کرد خودش به نوشتن تست کیس. من دیگر از ماجرا پرت شده بودم و فقط شاهد تلاشهای این زبان بسته بودم که خودش تست کیس مینوشت و اجرا میکرد و گاها هم میدید روی تست کیس جواب نمیگیرد کد را تغییر میداد. چند دقیقهای تقلایش طول کشید و نهایتا گفت که great و تمام. کد با آن چیزی که من اول نوشته بودم بسیار تفاوت داشت طوری که برای فهمیدن منطقش باید از خود cursor دوباره میپرسیدم. شروع کردم چند testcase جدید را تست گرفتن و دیدم که روی همه آنها درست جواب میدهد. مساله تبدیل به یک مساله تصمیم ناپذیر شده بود. نمیتوانستم بگویم چرا درست کار میکند ولی هر چه تست کیس امتحان میکردم درست بود. فکر کردم دیدم آیا باید رها کنم؟ اگر جایی اشتباه کرده بود چه؟
ناخودآگاه یاد مثال همیشگی مقایسه LLM و ماشین حساب افتادم. فرض کنید الان یک جمع و ضرب چند رقمی را به ماشین حساب میدهیم و آن به ما جواب را میدهد. از کجا معلوم که اشتباه نکند؟ مثلا چه میدانم پالسی، سیمی، موجی روی هم بیافتند و یک رقم اشتباه شود. در این صورت آیا ما اصلا اغلب متوجه میشویم ؟!؟ کدام یک از ما نتیجه ماشین حساب را وریفای میکنیم؟ احتمالا روزهای اولی هم که ماشین حسابها اختراع شده بودند و مکانیکی تر از امروز بودند، افراد به آنها اعتماد کامل نداشتند و جواب نهاییشان را به نحوی وریفای میکردند. از جایی به بعد ولی احتمالا هم به خاطر اعتمادپذیری بیشتر و هم به خاطر این که محاسبات سنگین شده بودند دیگر هیچ کس به وریفای کردن جواب نهایی ماشین حساب فکر هم نمیکند. الغرض از نظر اعتمادپذیری بین LLMها و ماشینحسابها در لحظه فاصله زیاد است اما احتمالا روزی هم خواهد آمد که دیگر ما خروجیهای LLMها را وریفای نمیکنیم و از خود نمیپرسیم از کجا معلوم این درست بگوید؟ آن روز وضعمان شبیه به امروز است که برایمان سوال نمیشود از کجا معلوم این ماشین حساب درست محاسبه میکند؟
🔥1
Forwarded from Linuxor ?
درباره سیستم های پیشنهاد دهنده چی میدونید؟
این ریپو بهتون یاد میده چطوری یه سیستم ریکامندر شبیه به تیکتاک بسازین و مدل خودتون رو آموزش بدین همچنین روی کوبرنیتیز اونو بالا بیارین
https://github.com/decodingml/personalized-recommender-course
@Linuxor
این ریپو بهتون یاد میده چطوری یه سیستم ریکامندر شبیه به تیکتاک بسازین و مدل خودتون رو آموزش بدین همچنین روی کوبرنیتیز اونو بالا بیارین
https://github.com/decodingml/personalized-recommender-course
@Linuxor
Linuxor ?
درباره سیستم های پیشنهاد دهنده چی میدونید؟ این ریپو بهتون یاد میده چطوری یه سیستم ریکامندر شبیه به تیکتاک بسازین و مدل خودتون رو آموزش بدین همچنین روی کوبرنیتیز اونو بالا بیارین https://github.com/decodingml/personalized-recommender-course @Linuxor
وقت کردید یه سر بهش بزنید
خیلی ایده جالبی داره
خیلی ایده جالبی داره
مقدمهای بر گیت (Git) - جلسه اول
گیت (Git) یه سیستم کنترل نسخه هست که برای مدیریت تغییرات کدها و همکاری بین برنامهنویسها استفاده میشه. کار کردن با گیت توی سه مرحلهی اصلی انجام میشه:
۱. محیط کاری (Working Directory)
همون جایی که شما کدهاتون رو مینویسید و تغییرات ایجاد میکنید. این مرحله مثل میز کار شماست که هر تغییری که توی فایلها بدین، فقط توی سیستم خودتون اعمال میشه و هنوز به گیت اضافه نشده.
۲. محل استیج (Staging Area)
اینجا یه جورایی مثل برزخه! 😅
وقتی یه فایل رو توی گیت اضافه میکنید (git add)، در واقع اون رو میفرستید به این فضای میانی. توی این مرحله، فایلها هنوز ثبت نهایی نشدن و شما میتونید قبل از ثبت کردن، چک کنید که چی تغییر کرده.
۳. مخزن (Repository) - ثبت نهایی (Commit)
وقتی تغییرات رو تأیید کردید (git commit)، گیت یه عکس از وضعیت پروژه شما ثبت میکنه و تغییرات رو توی مخزن ذخیره میکنه. این مرحله همونجاییه که دیگه تغییرات شما به عنوان یه نسخه جدید ثبت میشه و قابل مشاهده و بازیابی خواهد بود.
🚀 بعد از این، اگه بخواید تغییراتتون رو با بقیه به اشتراک بذارید، باید اون رو روی یه مخزن راه دور (مثل GitHub یا GitLab) push کنید تا تیمتون هم بتونه ببینه و روش کار کنه.
خلاصهی کل مراحل:
1️⃣ ایجاد تغییرات توی فایلها (Working Directory)
2️⃣ اضافه کردن تغییرات به استیج (git add .)
3️⃣ ثبت تغییرات در مخزن (git commit -m "توضیح تغییرات")
4️⃣ ارسال تغییرات به مخزن راه دور (git push)
اینجا فقط یه نمای کلی از کار با گیت بود، توی جلسات بعدی وارد جزئیات بیشتر میشیم!
@softwrteach
--------‐----------------
🌐💻
گیت (Git) یه سیستم کنترل نسخه هست که برای مدیریت تغییرات کدها و همکاری بین برنامهنویسها استفاده میشه. کار کردن با گیت توی سه مرحلهی اصلی انجام میشه:
۱. محیط کاری (Working Directory)
همون جایی که شما کدهاتون رو مینویسید و تغییرات ایجاد میکنید. این مرحله مثل میز کار شماست که هر تغییری که توی فایلها بدین، فقط توی سیستم خودتون اعمال میشه و هنوز به گیت اضافه نشده.
۲. محل استیج (Staging Area)
اینجا یه جورایی مثل برزخه! 😅
وقتی یه فایل رو توی گیت اضافه میکنید (git add)، در واقع اون رو میفرستید به این فضای میانی. توی این مرحله، فایلها هنوز ثبت نهایی نشدن و شما میتونید قبل از ثبت کردن، چک کنید که چی تغییر کرده.
۳. مخزن (Repository) - ثبت نهایی (Commit)
وقتی تغییرات رو تأیید کردید (git commit)، گیت یه عکس از وضعیت پروژه شما ثبت میکنه و تغییرات رو توی مخزن ذخیره میکنه. این مرحله همونجاییه که دیگه تغییرات شما به عنوان یه نسخه جدید ثبت میشه و قابل مشاهده و بازیابی خواهد بود.
🚀 بعد از این، اگه بخواید تغییراتتون رو با بقیه به اشتراک بذارید، باید اون رو روی یه مخزن راه دور (مثل GitHub یا GitLab) push کنید تا تیمتون هم بتونه ببینه و روش کار کنه.
خلاصهی کل مراحل:
1️⃣ ایجاد تغییرات توی فایلها (Working Directory)
2️⃣ اضافه کردن تغییرات به استیج (git add .)
3️⃣ ثبت تغییرات در مخزن (git commit -m "توضیح تغییرات")
4️⃣ ارسال تغییرات به مخزن راه دور (git push)
اینجا فقط یه نمای کلی از کار با گیت بود، توی جلسات بعدی وارد جزئیات بیشتر میشیم!
@softwrteach
--------‐----------------
🌐💻
🔥4
🌐 فرانتاند و بکاند دو بخش اصلی و حیاتی در توسعه وب هستن که با هم همکاری میکنن تا یه وبسایت یا اپلیکیشن کامل و کاربردی بسازن. بیایید با هم نگاهی به هرکدوم بندازیم: 🔍
💻 فرانتاند (Front-End) بخش ظاهری و قابل مشاهده سایت یا اپلیکیشن هست. این همون قسمتیه که کاربر باهاش تعامل داره و همونطور که از اسمش پیداست، این بخش در "جبهه جلو" قرار داره! این بخش شامل طراحی، رابط کاربری (UI) و تجربه کاربری (UX) میشه. از تکنولوژیهایی مثل HTML، CSS و JavaScript برای طراحی و ساخت این بخش استفاده میشه.
فرانتاند وظیفه داره که اطلاعات رو از بکاند دریافت کنه و به شکلی کاربرپسند نمایش بده. مثلاً وقتی شما توی یه اپلیکیشن اطلاعات رو وارد میکنید یا توی یه سایت چیزی رو جستجو میکنید، همون اطلاعاتی که شما میبینید و باهاش تعامل میکنید، همگی کار فرانتاند هست.
⚙️ حالا بکاند (Back-End) پشت پرده میاد! این بخش مسئول پردازش دادهها، ذخیرهسازی، و انجام تمام محاسبات و منطقهای پیچیده است. معمولاً این بخش با سرورها، پایگاههای داده (مثل MySQL یا MongoDB) و APIها سروکار داره. بهطور ساده، بکاند همانند مغز سیستم عمل میکنه که اطلاعات رو مدیریت میکنه و به فرانتاند میده تا به کاربر نمایش داده بشه.
🔗 ارتباط بین این دو بخش با استفاده از APIها و پروتکل HTTP انجام میشه. وقتی کاربر یه درخواست (مثل جستجو یا ارسال فرم) به فرانتاند میده، فرانتاند اون رو به بکاند میفرسته، بکاند اطلاعات مورد نظر رو پردازش کرده و به فرانتاند برمیگردونه تا به کاربر نمایش داده بشه. به همین دلیل این دو بخش باید همزمان و بهدرستی با هم کار کنن تا یه تجربه کاربری بینقص ایجاد بشه.
👨💻 برای ارتباط بهتر بین این دو، تکنولوژیهای متنوعی هم وجود دارن. مثلاً GraphQL یه تکنولوژی جدیدتره که بهجای استفاده از APIهای معمولی REST، به فرانتاند این امکان رو میده که درخواستهای دقیقتری ارسال کنه و فقط همون دادههایی که لازم داره رو دریافت کنه. این میتونه سرعت اپلیکیشن رو افزایش بده و مصرف دادهها رو به حداقل برسونه.
@softwrteach
------------------------
🌐💻
💻 فرانتاند (Front-End) بخش ظاهری و قابل مشاهده سایت یا اپلیکیشن هست. این همون قسمتیه که کاربر باهاش تعامل داره و همونطور که از اسمش پیداست، این بخش در "جبهه جلو" قرار داره! این بخش شامل طراحی، رابط کاربری (UI) و تجربه کاربری (UX) میشه. از تکنولوژیهایی مثل HTML، CSS و JavaScript برای طراحی و ساخت این بخش استفاده میشه.
فرانتاند وظیفه داره که اطلاعات رو از بکاند دریافت کنه و به شکلی کاربرپسند نمایش بده. مثلاً وقتی شما توی یه اپلیکیشن اطلاعات رو وارد میکنید یا توی یه سایت چیزی رو جستجو میکنید، همون اطلاعاتی که شما میبینید و باهاش تعامل میکنید، همگی کار فرانتاند هست.
⚙️ حالا بکاند (Back-End) پشت پرده میاد! این بخش مسئول پردازش دادهها، ذخیرهسازی، و انجام تمام محاسبات و منطقهای پیچیده است. معمولاً این بخش با سرورها، پایگاههای داده (مثل MySQL یا MongoDB) و APIها سروکار داره. بهطور ساده، بکاند همانند مغز سیستم عمل میکنه که اطلاعات رو مدیریت میکنه و به فرانتاند میده تا به کاربر نمایش داده بشه.
🔗 ارتباط بین این دو بخش با استفاده از APIها و پروتکل HTTP انجام میشه. وقتی کاربر یه درخواست (مثل جستجو یا ارسال فرم) به فرانتاند میده، فرانتاند اون رو به بکاند میفرسته، بکاند اطلاعات مورد نظر رو پردازش کرده و به فرانتاند برمیگردونه تا به کاربر نمایش داده بشه. به همین دلیل این دو بخش باید همزمان و بهدرستی با هم کار کنن تا یه تجربه کاربری بینقص ایجاد بشه.
👨💻 برای ارتباط بهتر بین این دو، تکنولوژیهای متنوعی هم وجود دارن. مثلاً GraphQL یه تکنولوژی جدیدتره که بهجای استفاده از APIهای معمولی REST، به فرانتاند این امکان رو میده که درخواستهای دقیقتری ارسال کنه و فقط همون دادههایی که لازم داره رو دریافت کنه. این میتونه سرعت اپلیکیشن رو افزایش بده و مصرف دادهها رو به حداقل برسونه.
@softwrteach
------------------------
🌐💻
👍3
Forwarded from کالی بویز | ترفند | تکنولوژی (YOUSEF)
✔️ قضیه CAP در سیستم های توزیع شده
در دنیای مدرن که فناوری حرف اول را میزند، سیستمهای توزیع شده به بخش جداییناپذیری از زندگی ما تبدیل شدهاند. از خرید آنلاین گرفته تا انجام تراکنشهای بانکی و تعامل در شبکههای اجتماعی، همهجا ردپای این سیستمها دیده میشود. اما طراحی این سیستمها کار سادهای نیست. یکی از مفاهیم کلیدی که به ما در درک چالشهای این حوزه کمک میکند، قضیه CAP است. CAP که مخفف Consistency (یکسانی)، Availability (دسترسپذیری) و Partition Tolerance (تحمل پارتیشن) است، چارچوبی برای فهمیدن محدودیتها و انتخابهای پیش روی طراحان سیستمهای توزیع شده ارائه میدهد.
در این مقاله، صفر تا صد قضیه CAP را با زبانی ساده و قابلفهم توضیح میدهیم، جنبههای مختلف آن را بررسی میکنیم و با مثالهایی واقعی مثل خرید بلیط، سیستم بانکی و لایکهای شبکه اجتماعی، کاربردهایش را نشان میدهیم.
در کالی بویز بخوانید: قضیه CAP در سیستم های توزیع شده
✅ @kaliboys | کالی بویز
در دنیای مدرن که فناوری حرف اول را میزند، سیستمهای توزیع شده به بخش جداییناپذیری از زندگی ما تبدیل شدهاند. از خرید آنلاین گرفته تا انجام تراکنشهای بانکی و تعامل در شبکههای اجتماعی، همهجا ردپای این سیستمها دیده میشود. اما طراحی این سیستمها کار سادهای نیست. یکی از مفاهیم کلیدی که به ما در درک چالشهای این حوزه کمک میکند، قضیه CAP است. CAP که مخفف Consistency (یکسانی)، Availability (دسترسپذیری) و Partition Tolerance (تحمل پارتیشن) است، چارچوبی برای فهمیدن محدودیتها و انتخابهای پیش روی طراحان سیستمهای توزیع شده ارائه میدهد.
در این مقاله، صفر تا صد قضیه CAP را با زبانی ساده و قابلفهم توضیح میدهیم، جنبههای مختلف آن را بررسی میکنیم و با مثالهایی واقعی مثل خرید بلیط، سیستم بانکی و لایکهای شبکه اجتماعی، کاربردهایش را نشان میدهیم.
در کالی بویز بخوانید: قضیه CAP در سیستم های توزیع شده
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 اکستنشن REST Client در VS Code یک جایگزین عالی برای Postman یا Insomnia
📌 اصلا REST Client چیه؟
ابزار REST Client یه افزونه (اکستنشن) برای VS Code هست که بهت اجازه میده بدون نیاز به ابزارهای جانبی، مستقیماً توی ادیتورت درخواستهای HTTP ارسال کنی و APIها رو تست کنی!
💻 چرا REST Client؟
✅ سبک و سریع – نیازی به نصب نرمافزارهای سنگین نیست
✅ همه درخواستها در یک فایل – دیگه لازم نیست برای هر تست جداگانه کار کنی
✅ پشتیبانی از همه متدهای HTTP – GET، POST، PUT، DELETE و …
✅ مدیریت هدرها و توکنها – به راحتی میتونی Authorization و سایر تنظیمات رو انجام بدی
✅ پشتیبانی از متغیرها – دیگه لازم نیست بارها یه URL تکراری بنویسی
چطور از REST Client استفاده کنیم؟
برای شروع، یه فایل جدید با پسوند .http یا .rest بساز و یه درخواست ساده بنویس:
بعد از نوشتن، دکمه "Send Request" که بالای این درخواست ظاهر میشه رو بزن و نتیجه رو ببین!
📡 ارسال درخواست POST با JSON
با زدن Send Request، دادهها به سرور ارسال میشن و پاسخ برمیگرده!
🔗 ارتباط بهتر با متغیرها
گاهی اوقات ممکنه یه API چندین بار با URLهای مشابه تست بشه، اینجاست که متغیرها کمک میکنن:
حالا هروقت بخوای این درخواست رو تغییر بدی، فقط مقدار baseUrl رو عوض کن!
@softwrteach
------------------------
🌐💻
📌 اصلا REST Client چیه؟
ابزار REST Client یه افزونه (اکستنشن) برای VS Code هست که بهت اجازه میده بدون نیاز به ابزارهای جانبی، مستقیماً توی ادیتورت درخواستهای HTTP ارسال کنی و APIها رو تست کنی!
💻 چرا REST Client؟
✅ سبک و سریع – نیازی به نصب نرمافزارهای سنگین نیست
✅ همه درخواستها در یک فایل – دیگه لازم نیست برای هر تست جداگانه کار کنی
✅ پشتیبانی از همه متدهای HTTP – GET، POST، PUT، DELETE و …
✅ مدیریت هدرها و توکنها – به راحتی میتونی Authorization و سایر تنظیمات رو انجام بدی
✅ پشتیبانی از متغیرها – دیگه لازم نیست بارها یه URL تکراری بنویسی
چطور از REST Client استفاده کنیم؟
برای شروع، یه فایل جدید با پسوند .http یا .rest بساز و یه درخواست ساده بنویس:
GET https://jsonplaceholder.typicode.com/posts/1
بعد از نوشتن، دکمه "Send Request" که بالای این درخواست ظاهر میشه رو بزن و نتیجه رو ببین!
📡 ارسال درخواست POST با JSON
POST https://jsonplaceholder.typicode.com/posts
Content-Type: application/json
{
"noscript": "REST Client در VS Code",
"body": "این یه تسته!",
"userId": 1
}
با زدن Send Request، دادهها به سرور ارسال میشن و پاسخ برمیگرده!
🔗 ارتباط بهتر با متغیرها
گاهی اوقات ممکنه یه API چندین بار با URLهای مشابه تست بشه، اینجاست که متغیرها کمک میکنن:
@baseUrl = https://jsonplaceholder.typicode.com
GET {{baseUrl}}/posts/1
حالا هروقت بخوای این درخواست رو تغییر بدی، فقط مقدار baseUrl رو عوض کن!
@softwrteach
------------------------
🌐💻
Soft teach
https://github.com/MO-ZAREI84/learn-python
سلااام برو بچ
تو این ریپو چنتا تمرین کاربردی برای شاخه های مختلف پایتونو براتون بارگزاری کردم
تو این پروژه ها سعی شده کاربردی در عین حال به مسائل ابتدایی و پیشرفته پایتون پرداخته شه البته به جز فریمورک جنگو که داخل ریپو های دیگه میتونید یه نگاه بندازید...
اگه دوس داشتین و میخواید بصورت کاربردی تر پایتون رو یاد بگیرید حتما یه سری بزنید
@softwrteach
تو این ریپو چنتا تمرین کاربردی برای شاخه های مختلف پایتونو براتون بارگزاری کردم
تو این پروژه ها سعی شده کاربردی در عین حال به مسائل ابتدایی و پیشرفته پایتون پرداخته شه البته به جز فریمورک جنگو که داخل ریپو های دیگه میتونید یه نگاه بندازید...
اگه دوس داشتین و میخواید بصورت کاربردی تر پایتون رو یاد بگیرید حتما یه سری بزنید
@softwrteach
🔥1
دستیار هوش مصنوعی قدرتمند برای توسعه دهندگان...
با Bolt AI کدنویسی رو سریعتر، بهینهتر و لذتبخشتر تجربه کن:
✅ تحلیل هوشمند کد – پروژهتو آپلود کن، Bolt AI کیفیت و کارایی کد رو بررسی میکنه.
✅ مشاهده آنی تغییرات – تغییرات رو در لحظه ببین و سریعتر تصمیم بگیر.
✅ پروتوتایپ تمیز – کدنویسی اصولی و خوانا از همون اول!
✅ توسعه سریعتر – تست و دیباگ خودکار، بدون اتلاف وقت.
✅ نصب خودکار پکیجها – نیاز به چیزی داری؟ Bolt AI خودش انجامش میده!
✅ سازگار با زبانها و فریمورکهای محبوب – هر چی دوست داری، کد بزن!
⚡ با Bolt AI، سطح کدنویسیتو بالاتر ببر!
@softwrteach
------------------------
🌐💻
با Bolt AI کدنویسی رو سریعتر، بهینهتر و لذتبخشتر تجربه کن:
✅ تحلیل هوشمند کد – پروژهتو آپلود کن، Bolt AI کیفیت و کارایی کد رو بررسی میکنه.
✅ مشاهده آنی تغییرات – تغییرات رو در لحظه ببین و سریعتر تصمیم بگیر.
✅ پروتوتایپ تمیز – کدنویسی اصولی و خوانا از همون اول!
✅ توسعه سریعتر – تست و دیباگ خودکار، بدون اتلاف وقت.
✅ نصب خودکار پکیجها – نیاز به چیزی داری؟ Bolt AI خودش انجامش میده!
✅ سازگار با زبانها و فریمورکهای محبوب – هر چی دوست داری، کد بزن!
⚡ با Bolt AI، سطح کدنویسیتو بالاتر ببر!
@softwrteach
------------------------
🌐💻
❤3
Forwarded from برنامه نویسی | Teachify (YOUSEF)
✔️ جنگو 5.2 منتشر شد!
نسخهی جدید جنگو (Django 5.2) با ویژگیهای زیر منتشر شد:
+ ایمپورت خودکار مدلها در شل
+ پشتیبانی از کلیدهای اصلی ترکیبی (Composite Primary Keys) 😲
+ بهبود در نحوهی override کردن BoundField
این نسخه LTS (پشتیبانی طولانیمدت) است و تا آوریل 2028 پشتیبانی خواهد شد.
Django 5.2 Release Notes
#Django #Python
✅ @Teachify | برنامه نویسی
نسخهی جدید جنگو (Django 5.2) با ویژگیهای زیر منتشر شد:
+ ایمپورت خودکار مدلها در شل
+ پشتیبانی از کلیدهای اصلی ترکیبی (Composite Primary Keys) 😲
+ بهبود در نحوهی override کردن BoundField
این نسخه LTS (پشتیبانی طولانیمدت) است و تا آوریل 2028 پشتیبانی خواهد شد.
Django 5.2 Release Notes
#Django #Python
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Ninja Learn | نینجا لرن
آیا پایتون همیشه کنده؟ 🐢
چیزی که همیشه از زبون همه ی برنامه نویسا میشنویم (مخصوصا جامعه محترم C#) اینه که پایتون خیلی کنده (نسبت به زبان های دیگه هرچند این مقایسه اشتباهه بعضی جاها)
خب اره، درسته پایتون کنده (البته در حالت pure)
توی این پست میخوام بگم که چرا کنده و چجوری میشه سریعش کرد؟
چرا پایتون کنده ؟ 🤓
همونجور که میدونید پایتون به صورت پیشفرض با CPython اجرا میشه، که یه مفسر (interpreter) برای پایتونه و با زبان C نوشته شده. CPython کد پایتون رو به بایتکد (bytecode) تبدیل میکنه و بعد اون رو تو یه ماشین مجازی (VM) اجرا میکنه. این فرایند باعث میشه پایتون نسبت به زبانهای کامپایلشده مثل C یا Rust کندتر باشه، چون
تفسیر خطبهخط انجام میده و به جای کامپایل مستقیم به کد ماشین، پایتون تو زمان اجرا تفسیر میشه.
GIL (Global Interpreter Lock) تو CPython، یه قفل سراسری هست که جلوی اجرای چند نخ (thread) همزمان رو میگیره و برای کارهای multithreading مشکلساز میشه.
داینامیک تایپ بودن پایتون تایپها رو تو زمان اجرا چک میکنه، که یه کم سرعت رو پایین میاره.
ولی خبر خوب اینه که پایتون راه ها و ابزارهایی داره که میتونن این کندی رو برطرف کنن و پرفورمنس رو حسابی بالا ببرن
راه ها و ابزارهایی برای افزایش سرعت 📚
1️⃣ PyPy 🌟
Pypy یه مفسر جایگزین برای پایتونه که از JIT (Just-In-Time Compilation) استفاده میکنه.
و کارکردش اینجوریه که کد پایتون رو به جای تفسیر ساده، تو زمان اجرا به کد ماشین کامپایل میکنه. این یعنی برای حلقهها و عملیات تکراری خیلی سریعتره.
مزیتشم اینه تو بعضی موارد تا ۷ برابر سریعتر از CPython عمل میکنه
و باید توجه داشت باشید برای کدهایی که با C extensionها (مثل NumPy) کار میکنن، کامل سازگار نیست.
2️⃣ Cython ⚡
Cython یه ابزار که کد پایتون رو به C تبدیل میکنه و بعد کامپایلش میکنه.
اینجوری کار میکنه که میتونی تایپهای استاتیک (مثل
و تا چندین برابر سریعتر از CPython میشه، بهخصوص برای محاسبات سنگین.
3️⃣ Numba 🔥
Numba یه کامپایلر JIT برای پایتونه که با دکوریتور
کارکردش اینجوریه که کد پایتون رو تو زمان اجرا به کد ماشین تبدیل میکنه، بدون نیاز به تغییر زیاد تو کدنویسی.
برای حلقهها و محاسبات عددی (مثل کار با آرایهها) تا ۱۰۰ برابر سریعتر میشه
4️⃣ CPython با C Extensions 🛠️
میتونی بخشهای کند پروژت یا جاهایی که به سرعت بالا نیاز داری رو با C بنویسی و به CPython وصل کنی.
اینجوریه که کد C رو به صورت ماژول میسازی و تو پایتون لودش میکنی.
و سرعت C رو با سادگی پایتون ترکیب میکنی. کتابخونههایی مثل NumPy و Pandas از این روش استفاده میکنن.
و در اخر پایتون همیشه کند نیست 🙃
حقیقت اینه که پایتون به تنهایی برای خیلی از کارها به اندازه کافی سریعه، بهخصوص تو پروژههایی که I/O (مثل شبکه یا دیتابیس) گلوگاه اصلیه، نه CPU. ولی وقتی پای محاسبات سنگین وسط میاد، ابزارهایی مثل PyPy، Cython و Numba میتونن پرفورمنس رو چند برابر کنن. مثلاً:
یه حلقه ساده با Numba میتونه از ۵ ثانیه به ۰.۰۵ ثانیه برسه
PyPy تو برنامههای واقعی تا ۷ برابر سرعت رو بالا برده. 🐆
➖➖➖➖➖➖➖➖➖
چیزی که همیشه از زبون همه ی برنامه نویسا میشنویم (مخصوصا جامعه محترم C#) اینه که پایتون خیلی کنده (نسبت به زبان های دیگه هرچند این مقایسه اشتباهه بعضی جاها)
خب اره، درسته پایتون کنده (البته در حالت pure)
توی این پست میخوام بگم که چرا کنده و چجوری میشه سریعش کرد؟
چرا پایتون کنده ؟ 🤓
همونجور که میدونید پایتون به صورت پیشفرض با CPython اجرا میشه، که یه مفسر (interpreter) برای پایتونه و با زبان C نوشته شده. CPython کد پایتون رو به بایتکد (bytecode) تبدیل میکنه و بعد اون رو تو یه ماشین مجازی (VM) اجرا میکنه. این فرایند باعث میشه پایتون نسبت به زبانهای کامپایلشده مثل C یا Rust کندتر باشه، چون
تفسیر خطبهخط انجام میده و به جای کامپایل مستقیم به کد ماشین، پایتون تو زمان اجرا تفسیر میشه.
GIL (Global Interpreter Lock) تو CPython، یه قفل سراسری هست که جلوی اجرای چند نخ (thread) همزمان رو میگیره و برای کارهای multithreading مشکلساز میشه.
داینامیک تایپ بودن پایتون تایپها رو تو زمان اجرا چک میکنه، که یه کم سرعت رو پایین میاره.
ولی خبر خوب اینه که پایتون راه ها و ابزارهایی داره که میتونن این کندی رو برطرف کنن و پرفورمنس رو حسابی بالا ببرن
راه ها و ابزارهایی برای افزایش سرعت 📚
1️⃣ PyPy 🌟
Pypy یه مفسر جایگزین برای پایتونه که از JIT (Just-In-Time Compilation) استفاده میکنه.
و کارکردش اینجوریه که کد پایتون رو به جای تفسیر ساده، تو زمان اجرا به کد ماشین کامپایل میکنه. این یعنی برای حلقهها و عملیات تکراری خیلی سریعتره.
مزیتشم اینه تو بعضی موارد تا ۷ برابر سریعتر از CPython عمل میکنه
و باید توجه داشت باشید برای کدهایی که با C extensionها (مثل NumPy) کار میکنن، کامل سازگار نیست.
2️⃣ Cython ⚡
Cython یه ابزار که کد پایتون رو به C تبدیل میکنه و بعد کامپایلش میکنه.
اینجوری کار میکنه که میتونی تایپهای استاتیک (مثل
int یا float) به متغیرها اضافه کنی تا سرعتش بیشتر بشه. بعد Cython این کد رو به C تبدیل میکنه و یه فایل باینری سریع تحویلت میده.و تا چندین برابر سریعتر از CPython میشه، بهخصوص برای محاسبات سنگین.
3️⃣ Numba 🔥
Numba یه کامپایلر JIT برای پایتونه که با دکوریتور
@jit کار میکنه.کارکردش اینجوریه که کد پایتون رو تو زمان اجرا به کد ماشین تبدیل میکنه، بدون نیاز به تغییر زیاد تو کدنویسی.
برای حلقهها و محاسبات عددی (مثل کار با آرایهها) تا ۱۰۰ برابر سریعتر میشه
4️⃣ CPython با C Extensions 🛠️
میتونی بخشهای کند پروژت یا جاهایی که به سرعت بالا نیاز داری رو با C بنویسی و به CPython وصل کنی.
اینجوریه که کد C رو به صورت ماژول میسازی و تو پایتون لودش میکنی.
و سرعت C رو با سادگی پایتون ترکیب میکنی. کتابخونههایی مثل NumPy و Pandas از این روش استفاده میکنن.
و در اخر پایتون همیشه کند نیست 🙃
حقیقت اینه که پایتون به تنهایی برای خیلی از کارها به اندازه کافی سریعه، بهخصوص تو پروژههایی که I/O (مثل شبکه یا دیتابیس) گلوگاه اصلیه، نه CPU. ولی وقتی پای محاسبات سنگین وسط میاد، ابزارهایی مثل PyPy، Cython و Numba میتونن پرفورمنس رو چند برابر کنن. مثلاً:
یه حلقه ساده با Numba میتونه از ۵ ثانیه به ۰.۰۵ ثانیه برسه
PyPy تو برنامههای واقعی تا ۷ برابر سرعت رو بالا برده. 🐆
#️⃣ #python
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
#تجربه
نمایشگاه اینوتکس ۱۴۰۴
یکی از چیزهایی که بلافاصله بعد از ورود به نمایشگاه اینوتکس امسال توجهم رو جلب کرد، رشد چشمگیر و خیرهکنندهی استارتاپها و شرکتهایی بود که با محوریت هوش مصنوعی فعالیت میکردند. بهجرئت میتونم بگم بیش از ۷۰ درصد کل غرفهها و تیمهای حاضر، در حوزههای مرتبط با تکنولوژی و کامپیوتر بودن، و جالبتر اینکه از بین اونها، بخش زیادی هم مشخصاً روی AI تمرکز داشتن.
این رشد سریع و استقبال وسیع از هوش مصنوعی، در عین اینکه امیدوارکنندهست، بهنوعی هم نگرانکنندهست. حداقل از نگاه من، به نظر میرسه بسیاری از این تیمها و شرکتها، خواسته یا ناخواسته، وارد فاز جدیدی از مسیر کسبوکار شدن؛ فازی که بیشتر شبیه موجسواری روی ترندهاست تا ورود عمیق و هدفمند به دنیای هوش مصنوعی.
به بیان دیگه، بعضیها بهجای اینکه از نوآوری، قابلیتها و عمق مفهومی این حوزه بهره بگیرن، فقط تلاش کردن از «برچسب AI» استفاده کنن تا جذابتر بهنظر برسن. اما با این حال، نمیشه از حق گذشت؛ بودند تیمها و استارتاپهایی که بهوضوح برای حضور در این حوزه وقت گذاشته بودن، مسیر تحقیق و توسعه رو جدی گرفته بودن و محصولاتی با پشتوانهی فنی و ارزشافزوده واقعی ارائه داده بودن.
از طرفی، برخلاف سالهای گذشته، استارتاپهایی که بهصورت نرمافزاری یا به اصطلاح software-oriented بودن، خیلی حضور پررنگی نداشتن و فقط چند غرفهی محدود از این جنس دیده میشد که بیشتر هم با سابقه و تجربه قبلی پیش میرفتن.
اما یکی از دوستداشتنیترین و شاید دلگرمکنندهترین بخشهای نمایشگاه برای من، دیدن پروژهها و استارتاپهایی بود که اگرچه از لحاظ محصول، ساختار تیمی یا ارائه، هنوز جای کار زیادی داشتن، اما با این حال، درگیر کمالگرایی نشده بودن، پروژهشون رو لانچ کرده بودن و جسورانه وارد بازار شده بودن.
@softwrteach
------------------------
🌐💻
نمایشگاه اینوتکس ۱۴۰۴
یکی از چیزهایی که بلافاصله بعد از ورود به نمایشگاه اینوتکس امسال توجهم رو جلب کرد، رشد چشمگیر و خیرهکنندهی استارتاپها و شرکتهایی بود که با محوریت هوش مصنوعی فعالیت میکردند. بهجرئت میتونم بگم بیش از ۷۰ درصد کل غرفهها و تیمهای حاضر، در حوزههای مرتبط با تکنولوژی و کامپیوتر بودن، و جالبتر اینکه از بین اونها، بخش زیادی هم مشخصاً روی AI تمرکز داشتن.
این رشد سریع و استقبال وسیع از هوش مصنوعی، در عین اینکه امیدوارکنندهست، بهنوعی هم نگرانکنندهست. حداقل از نگاه من، به نظر میرسه بسیاری از این تیمها و شرکتها، خواسته یا ناخواسته، وارد فاز جدیدی از مسیر کسبوکار شدن؛ فازی که بیشتر شبیه موجسواری روی ترندهاست تا ورود عمیق و هدفمند به دنیای هوش مصنوعی.
به بیان دیگه، بعضیها بهجای اینکه از نوآوری، قابلیتها و عمق مفهومی این حوزه بهره بگیرن، فقط تلاش کردن از «برچسب AI» استفاده کنن تا جذابتر بهنظر برسن. اما با این حال، نمیشه از حق گذشت؛ بودند تیمها و استارتاپهایی که بهوضوح برای حضور در این حوزه وقت گذاشته بودن، مسیر تحقیق و توسعه رو جدی گرفته بودن و محصولاتی با پشتوانهی فنی و ارزشافزوده واقعی ارائه داده بودن.
از طرفی، برخلاف سالهای گذشته، استارتاپهایی که بهصورت نرمافزاری یا به اصطلاح software-oriented بودن، خیلی حضور پررنگی نداشتن و فقط چند غرفهی محدود از این جنس دیده میشد که بیشتر هم با سابقه و تجربه قبلی پیش میرفتن.
اما یکی از دوستداشتنیترین و شاید دلگرمکنندهترین بخشهای نمایشگاه برای من، دیدن پروژهها و استارتاپهایی بود که اگرچه از لحاظ محصول، ساختار تیمی یا ارائه، هنوز جای کار زیادی داشتن، اما با این حال، درگیر کمالگرایی نشده بودن، پروژهشون رو لانچ کرده بودن و جسورانه وارد بازار شده بودن.
@softwrteach
------------------------
🌐💻
❤6👍1🍾1
