Syntax | سینتکس – Telegram
اپشن های کلاس متا مدل های جنگو به همراه توضیح

link

#django

@Syntax_fa
👍16
بیاید یکم علمی صحبت کنیم (مواردی هم غیر علمی و نظر شخصی😁)

انسان توانمندی دیدن آینده رو نداره، روش، پیش‌بینی هست و روش پیش‌بینی، سری زمانی و منبع آمار هست

پس با آمار صحبت می کنیم ، آمار که stack overflow سالانه می گیره
۸۴٪ برنامه نویس های دنیا تحصیلات آکادمیک در رشته‌های ict دارند و در سطوح حرفه‌ای این به ۹۴٪ میرسه،(ایران هم همینه، قبلا جادی سالانه آمار می گرفت)

این آمار موفق شده ها هست، کسانی که  مسیر برنامه نویسی رو اومدن و موفق نشدن برنامه نویس بشن رو نداریم

پس من اینجا نظر شخصی خودم رو میدم، برحسب تجربه شخصی از هر ۱۰ نفر که سمت این فیلد میان شاید ۱-۲ نفر برنامه نویس بشن

متاسفانه الان اکثریت(نه همه) سیستم آموزشی غیر رسمی مثل سایت های که دوره می فروشند و منتورها و...
از آموزش درآمدی ندارند، از رویا فروشی درآمد دارند،
مگر جامعه برنامه نویس های ایران چند نفر هست ، که اینقدر بازار بزرگی شده؟

بدبختانه شما نمی خواهد نگران اون حجم افراد ورود به بازار باشید اونها فقط و فقط ۱۶٪ بازار برنامه نویسی رو می گیرند و در سطوح حرفه‌ای ۶٪
و از سمت دیگه اکثرا فقط جیب یک سری افراد رو پر می کنند و با ضرر مالی از بازار میرن😔


راستی بازار آموزش غیر رسمی جزیی از بازار کار ict و رکن مهمی از این بازار هست و بودنش لازم ، و سازمان و افرادی هستند که تلاش می کنند و دوره ها و... خوب ارایه میدن و ارزشمند هم هست،

شما فقط تسلط علمی تو زیاد کن و ارتباطات خوبی بساز هیچ مشکلی در کسب کار و درآمد نخواهی داشت، ارتباطات خیلی خیلی مهمه (طبیعتاًsoft skills بحث مهمی در ارتباطات هست)

[rahim firouzi]

@Syntax_fa
👍20
Syntax | سینتکس
بیاید یکم علمی صحبت کنیم (مواردی هم غیر علمی و نظر شخصی😁) انسان توانمندی دیدن آینده رو نداره، روش، پیش‌بینی هست و روش پیش‌بینی، سری زمانی و منبع آمار هست پس با آمار صحبت می کنیم ، آمار که stack overflow سالانه می گیره ۸۴٪ برنامه نویس های دنیا تحصیلات آکادمیک…
نظر شخصی خودم:
اگه معرفی دوره هارو دیدی که میگن شیش ماه وقت بذار برنامه نویست میکنم و با حقوق عالی وارد بازار کار میشی. قطعا درست نیست.

درصد بالای شکست یکیش همین مورد هستش. از بیرون همه چی خوب بنظر میرسه ولی وقتی وارد میشی میبینی قضیه کلا فرق میکنه و خب ول میکنی میری.

در نهایت فرقی نمیکنه تحصیلات آکادمیک دارید یا نه. باید بتونید خودتون رو تبدیل به یه برنامه نویس کنید. ولی اگه آکادمیک رو هم پیش ببرید مسیر براتون راحت تر میشه.
👍19
چالش طراحی سیستم ارسال نوتیفیکیشن


در نظر بگیرید که قراره یه سرویس نوتیفیکیشن رو طراحی کنید که شرایط زیر رو داشته باشه:
- بتونه برای همه کاربران سیستم (بیش از ۵۰ میلیون کاربر) نوتیفیکیشن ارسال کنه
- بتونه برای یک سری از کاربران (مثلا ۱۰ میلیون کاربر) نوتیفیکیشن ارسال کنه
- بشه از طریق کانال های مختلف (ایمیل، پیامک، نوتیفیکیشن درون برنامه ای) ارسال کرد
- بشه نوتیفیکیشن های درون برنامه ای کاربران رو ردیابی کرد که وضعیت شون خوانده شده، خوانده نشده است

دغدغه اول، طراحی دیتابیس رو چطور انجام میدید که هم نوتیفیکیشن سیستمی رو پشتیبانی کنه و هم نوتیفیکیشن برای تعدادی کاربر؟ به ازاء هر کاربر یک رکورد در دیتابیس ذخیره می کنید؟ چه دیتابیسی رو استفاده می کنید؟

دغدغه دوم، ارسال این همه نوتیفیکیشن از طریق کانال های مختلف رو چطوری مدیریت می کنید؟ از چه ابزارهایی استفاده می کنید؟

دغدغه سوم، مدیریت وضعیت نوتیفیکیشن های درون برنامه ای رو چطوری انجام میدید؟‌از چه الگو و چه ابزارهایی استفاده میکنید؟

اگه تمایل داشتید نظر بدید میتونید ویس بفرستید تو کامنت

اگه در مورد این چالش طراحی منبع خوبی رو میشناسید لینکش رو به اشتراک بذارید

@gocasts

#challenge

@Syntax_fa
👍131
چند نکته مهم وقتی تو جنگو از سواگر استفاده می کنی(پکیج drf-spectacular)

اولین چیزی که میخوام بگم اینه با خودتون فکر نکنید سواگر پروژه رو آوردید بالا دیگه همه چی تمومه و بصورت اتوماتیک براتون به درستی schema ای پی آی های شمارو مشخص می کنه. تو این پست قراره چند تا از مشکلات رایج و نحوه برطرف کردنش رو بررسی کنیم.

اشتباه نشون دادن request و response ای پی آی ها:
رایج ترین مشکل این مورد هستش که خیلی وقتا ورودی و یا خروجی api رو اشتباه نشون میده. یا اصلا ریسپانس شما چند تا حالت داره مثل:
200
406
401

اما بصورت اتوماتیک نمیتونه این موارد رو تشخصی بده. پس راه حل چیه؟
استفاده از دکوریتور extend_schema بالای متد هاتون.
مثلا:
    @extend_schema(request=RefreshAccessTokenSerializer, responses={
200: OpenApiResponse(response=AccessTokenSerializer, denoscription="new access token"),
401: OpenApiResponse(denoscription="invalid access token")}, tags=SCHEMA_TAGS)
def post(self, request):
...


ریکوئست رو توی request و ریسپانس هارو به این شکل توی responses مشخص می کنیم.


مشخص کردن تگ ها:
اگه api هاتون به این صورت شروع بشه:
/api/v1/
تگ همه api های شما v1 میشه و خوانایی رو میاره پایین. برای برطرف کردن این مشکل تگ هارو بصورت دستی مشخص می کنیم.
مثلا:
    @extend_schema(tags=("Auth",))
def post(self, request):
...


محدود کردن دسترسی به سواگر
اگه دوست دارید سواگر پروژه رو فقط ادمین بتونه ببینه، توی تنظیمات spectacular این موارد رو اضافه کنید:
# Spectacular
SPECTACULAR_SETTINGS = {
'SERVE_INCLUDE_SCHEMA': True,
# OTHER SETTINGS
'PLUGINS': [
'drf_spectacular.plugins.AuthPlugin',
],
'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAdminUser'],
# Auth with session only in docs without effect to api
'SERVE_AUTHENTICATION': ["rest_framework.authentication.SessionAuthentication",
"rest_framework_simplejwt.authentication.JWTAuthentication"],
}


توضیح:
پرمیشن رو تنظیم کرده که حتما ادمین باشه. همچنین authentication رو به دو روش سشن و توکن مشخص کردیم.

#Django #Swagger

@Syntax_fa
👍11🔥2
درود
من علیرضا، توسعه دهنده بک اند وب هستم(پایتون و گولنگ). تقریبا 4 سال پیش برنامه نویسی رو با زبان پایتون شروع کردم. کمی بعدش رفتم سمت وب و با جنگو آشنا شدم.

زبان گولنگ رو چند ماهی میشه شروع کردم و باهاش چند تا وب سرور با gin و net/http و fiber زدم. البته دوست دارم تو آینده با تمرکزی بیشتری ادامه بدمش.

به قول لینکدینی ها «امسال تصمیم گرفتم که چالش جدیدی رو تجربه کنم. اصلنم ربطی به این نداره که الان بیکارم و دنبال کار میگردم»

خوشحال میشم اگه تو تیمتون دنبال یه بک اند دولوپر با انگیزه و خلاق هستید، بهم خبر بدید.
(ریموت و یا حضوری تهران)

https://news.1rj.ru/str/Ayeef
🔥11👍31
1712043058828.pdf
1.3 MB
اصول و قواعدی که برنامه نویس ها باید بدونن

معمولا پیش میاد توی پیاده سازی پروژه های مختلف و یا حتی توسعه یک نرم افزار ساده خیلی چیز هایی که ساده هستن رو ممکنه بی دلیل بزرگ و بزرگترش کنیم و یا بیشتر کار هایی که بایستی در اسرع وقت آماده بشن رو سعی کنیم کمال گرایانه توسعه بدیم و باعث بشیم که به موقع آماده نشه.
توی کتاب مهندسی نرم افزار یه عکس شاخصی هستش که یک فردی درخواست ساخت یک تاب برای بازی می کنه ولی در عوض طرفی که قراره بسازه ممکنه چندین مدل تفکر دربارش داشته باشه که تاب چیه شهر بازی تحویلش میدیم بره حال کنه! ولی واقعیت چیز دیگه ای هستش که بایستی تا زمانی که احساس نیازی نباشه چیزی توسعه ندیم که ویژگی هایی بیش از خواسته کاربر رو برآورده کنه.
این اصول بسیار ساده هستن و گاهی توی سوالات مصاحبه هم پرسیده میشن برای همینم میشه گفت اهمیت خاصی دارن.

اصول و قواعد کلی

- YAGNI
- DRY
- KISS (Keep It Simple, Stupid)
- SoC (Separation of Concerns)
- POLA
- DIP (Dependency Inversion Principle)
- LoD (Law Of Demeter)
- TDD (Test-Driven Development)
- SOLID Principles
- CI/CD

link

@Syntax_fa
👍10🔥21
How to use annotations in python.pdf
699.1 KB
نحوه استفاده از Annotations در پایتون

خوب خیلی ها اسم annotations به گوششون نخورده و یا اینکه مستقیما باهاش درگیر نشدن بلکه بیشتر جا ها دیدن ولی پاکش کردن! مثل اوایل کار من.
واقعیت اینه که اگر یه تعریف ساده ازش بخوام بکنم ،Annotation در واقع meta-data ای هستش که شما به بخش های کد اضافه میکنید تا خطایابی و درک کد بهتر بشه.
اما مدل های مختلفی از annotation ها رو ممکنه ببینید که یکسری روی متغیر ها، کلاس ، توابع ، ورودی و خروجی ها ، توضیحات کلی و ... قرار میگیرن.
همچنین در زمان ایجاد داکیومنتری هم خیلی کاربرد داره و بیش از پیش استفاده میشه.
معمولا از زمانی که شما با روابط شئ گرایی درگیر میشید شروع بهش شناخت annotation ها و موارد استفاده اون می کنین.

از انواع اون میشه به موارد زیر اشاره کرد:

- Type Annotations
- Custom Metadata Annoations
- Parameter Annotations
- Module Annotations
- Attribute Annotations
- Return Annotations

link

#python #annotation

@Syntax_fa | @Syntax_fa_group
👍5
اگه دنبال یه بات تلگرام میگردین که با استفاده از ChatGPT به سوالای اعضا جواب بده و امکان RateLimit کردن تعداد سوالای کاربرا رو هم داشته باشه، همچنین به زبان Go نوشته شده باشه کد زیر به دردتون میخوره.

https://github.com/m-ariany/telegram-gpt-bot

@Syntax_fa | @Syntax_fa_group
👍6
ورژن برنامه نویسیه این پست:

ببین رفیق
چند ساله دیگه کسی ازت نمی‌پرسه چند تا زبون برنامه نویسی بلد بودی. با کدوماشون پروژه پروداکشن زدی، رو کدوماشون تعصب داشتی!
چند سال دیگه ازت میپرسن

تخصصت چیه؟ درآمدت چقدره؟ بوگاتیت چه رنگیه؟

میدونم تلخه ولی باید باهاش کنار بیای. اصلا مهم نیست پی اچ پی کد میزنی یا راست
مهم اینه کدومش تو رو به پول میرسونه

راست خوبه
گولنگ خوبه
سی شارپ بد نیست
ولی تعصب به اندازش
هدفتو دنبال کن نوب🫶

#fun

@Syntax_fa
🤣30👍64🤨1
Django ORM Queries Tips Part 1.pdf
962.6 KB
نکته های کاربردی در Django ORM (بخش اول(

قراره یه سری قواعد کلی و انواع مدل های query رو در django orm بررسی کنیم ولی اولش می خوام با پر مصرف ترین هاش شروع کنم، قاعدتا دونستن django orm به تنهایی کافی نیست و دید خوبی به زبان sql و query ها هم لازم هستش اما گاهی وقتا بر عکس میشه، شما می دونین چه query باید بزنین ولی نمی دونین چطور با orm این کار رو انجام بدید.
توی این سری از نکته های کاربردی Django ORMمی خوام به بستری گسترده از این query ها بپردازم و نکاتی که توی کتاب های مختلف دیدم رو به صورت خلاصه و سریع بهتون انتقال بدم.
توی این بخش فعلا مسائل پایه و اینکه اصلا چطور یک داده از دیتابیس واکشی میشه و تبدیل به یک آبجکت در پایتون و به خصوص ORM Django میشه رو بررسی می کنیم و query ها و فیلتر های مختلفش رو تست می کنیم تا به مدل دلخواه برسیم.

link

#django

@Syntax_fa
👍16
برنامه نویس:
امنه امنه

تعداد بک دور های اپلیکیشن

link

#fun

@Syntax_fa
🤣31👍1
تو مصاحبه بک اند ممکنه بپرسن که آیا برای مایکروسرویس ها از API Gateway استفاده می کنید؟
مزیت ها و کاربرد های مختلف API

Gateway:
1. Routing
کلاینت فقط به یک endpoint درخواست میزنه و Gateway درخواست رو به مایکروسرویس مربوطه میده که دیزاین کلی سیستم ساده میشه

2. Rate limiting and throttling
می تونیم با اعمال Rate limiting جلوی حمله DDoS رو بگیریم و این موضوع در Gateway انجام بشه نه در هر مایکروسرویس

3. Caching
می تونیم پاسخ های هر مایکروسرویس رو Cache کنیم و اگر درخواست مشابه بود همون رو برگردونیم که بار کلی سیستم کم میشه

4. Authentication and Authorization می تونیم دسترسی دادن رو یکجا انجام بدیم تا اینکه هر مایکروسرویس جداگانه اینکار رو بکنه

5. Load Balancing
اگر از یک سرویس چند instance داشته باشیم می تونیم بینشون load balance کنیم

6. Monitoring
می تونیم یه سری metric جمع آوری کنیم و ببینیم کدوم مایکروسرویس ها ضعیف تر عمل میکنند و reliability سیستم رو بالا ببریم

7. Transformation
اگر مثلا یه سرویس SOAP قدیمی داشته باشیم که XML برمیگردونه می تونیم تبدیلش به JSON کنیم حتی میتونم داده های سرویس های مختلف رو ترکیب کنیم

8. Request and response
ولیدیشن اگر Schema از request و response مایکروسرویس ها داشته باشیم جایی که یک مایکروسرویس خطا خورده میتونیم متوجه بشیم و خطای مناسب برگردونیم

9. Circuit Breaker
با استفاده از این الگو اگر یک مایکروسرویس مشکلی داشت می تونیم از یک مایکروسرویس جایگزین استفاده کنیم

10. Service Discovery
کلاینت ها نیاز ندارن که بدونن هر مایکروسروس کجاست و با این الگو می تونیم راحت سرویس اضافه و کم کنیم

11. API Versioning Gateway
می تونه از وجود چند نسخه از یک API خبر داشته باشه و دولوپر ها راحت می تونن نسخه های جدید رو توسعه بدن

12. Error Handling
می تونیم خطا با فرمت یکسان تولید کنیم حتی اگر یک مایکروسرویس از دسترس خارج شده باشه

13. Service Aggregation
تو این الگو به جای اینکه یک کلاینت به چند مایکروسرویس درخواست بده، Gateway پاسخ چند مایکروسرویس رو تو یک response ترکیب می کنه که بار کلی سیستم کم میشه

14. Web Application Firewall (WAF)
می تونیم یک Firewall اضافه کنیم و جلوی حملاتی مثل XSS و DDoS و SQL Injection رو بگیریم

15. API Documentation
می تونیم تو Gateway با یک فرمت استادندارد مثل OpenAPI یا Swagger مستندات کلی سیستم رو تولید کنیم.

این مطالب همه تئوری هستند اما با استفاده از nginx می تونید اینها رو پیاده سازی کنید

link

#api_gateway

@Syntax_fa
👍11🔥4
چند تا میم ببینید

#fun

@Syntax_fa
😁11
Django rich-text editors.pdf
502.3 KB
معرفی انواع ویرایشگر های متن (rich-text editor) در جنگو

خیلی پیش میاد در پروژه هایی که مبتنی بر render هستش بخواید از یک ویرایشگر متن خیلی خوب برای تولید محتوا استفاده کنین.

تمام ویرایشگر های متنی خصوصیت های مشترکی دارن منتهی بعضی هاشون توی ساز و کار جنگو بهتون قابلیت آپلود عکس و در کل کار با media ها رو هم فراهم می کنن و جایگاهشون خاص تر میشه.

البته شما می تونین بدون استفاده از این ماژول ها هم بر حسب نیازتون به صورت مستقیم از این ها ساتفاده کنین ولی خوب باید تنظیمات متفاوتی رو درش اعمال کنین که معمولا زمان بر هستش. از جمله ویرایشگر های جنگو میشه به این ها اشاره کرد، البته فقط محدود به این ها نیستن:
django-ckeditor - django-froala-editor - django-summernote - django-quill - django-tinymce

البته که جنگو محدود به این ها نیستش و می تونین ماژول های متفاوتی هم توسعه بدید و یا پیدا کنین ولی این ماژول ها جزو پر مصرف ترین ها به شمار میان.

انتخاب خودم:
من به شخصه بیشتر از ckeditor استفاده می کنم به خصوص اینکه پشتیبانی از آپلود فایل رو هم داره

link

@Syntax_fa
👍82