یک اصلاحیه هم بکنم، تو over engineering همیشه باید در راستا بهتر شدن کد باشه،
یعنی مثلا پروتکل بنویسید برای هر کلس template ای که دارین مینویسید، حتی اگه یک بار ازش استفاده میکنید.
از داک استرینگ و دیتا کلس استفاده کنید
جای نوشتن query خام مثلا از orm استفاده کنید (تسکه کلا دو query داشت)
دیزاین داشته باشه کدتون، حتی اگه دیزاین داشتن نیاز نبوده و واسه دیزاین داشتن کد خیلی کم بوده (مگه کد ۱۵ خطی رو دیزاین میدن بهش؟ بله، تو روند استخدام باید بدید که نشون بدید مهارت کافی دارین برای نوشتن کد production quality)
ولی اینکه بخواین الکی کد عجیبی به پروژتون اضافه کنید که به هیچ دردی نمیخوره و فقط complicate ترش میکنه اونوقت اصلا اونکارو نکنید. Over engineer باید در جهت بالا رفتن کیفیت کد باشه
@ManiFoldsPython
یعنی مثلا پروتکل بنویسید برای هر کلس template ای که دارین مینویسید، حتی اگه یک بار ازش استفاده میکنید.
از داک استرینگ و دیتا کلس استفاده کنید
جای نوشتن query خام مثلا از orm استفاده کنید (تسکه کلا دو query داشت)
دیزاین داشته باشه کدتون، حتی اگه دیزاین داشتن نیاز نبوده و واسه دیزاین داشتن کد خیلی کم بوده (مگه کد ۱۵ خطی رو دیزاین میدن بهش؟ بله، تو روند استخدام باید بدید که نشون بدید مهارت کافی دارین برای نوشتن کد production quality)
ولی اینکه بخواین الکی کد عجیبی به پروژتون اضافه کنید که به هیچ دردی نمیخوره و فقط complicate ترش میکنه اونوقت اصلا اونکارو نکنید. Over engineer باید در جهت بالا رفتن کیفیت کد باشه
@ManiFoldsPython
👍9
یک سایت خیلی باحال امروز پیدا کردم
https://mockmate.com/
ماک میت!
یک AI بهتون سوال میده و با ویدیوباید جواب بدین و نهایتا بهتون امتیاز میده. تا 10 سوال طبق نوشته خوده پلتفورم رایگانه. تست نکردم ولی جذاب بود برام 😁 اگه کسی تست کرد ممنون میشم کامنت کنه.
@ManiFoldsPython
https://mockmate.com/
ماک میت!
یک AI بهتون سوال میده و با ویدیوباید جواب بدین و نهایتا بهتون امتیاز میده. تا 10 سوال طبق نوشته خوده پلتفورم رایگانه. تست نکردم ولی جذاب بود برام 😁 اگه کسی تست کرد ممنون میشم کامنت کنه.
@ManiFoldsPython
👍3👎1
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
چند سال پیش که سعی داشتم golang یاد بگیرم برام یک چیزی مشکل بود. اینکه توی پایتون عادت نداشتم ساختار جیسون رو از قبل بدونم و مثلا با دوتا فیلدش کار داشتم و میرفتم جلو. اما توی go باید ساختاری رو مشخص میکردم و بعد از اون استفاده میکردم برای parse کردنش.
بعد مدتی توی پایتون با امثال dataclasses و pydantic آشنا شدم و فهمیدم حالا درسته پایتون کاری نداره. ولی بهتره از این ساختار های منظم استفاده کنیم که کارمون خیلی بهتر و راحت تر و تمیز تر و بیوتیفول تر و گاد تر و ... پیش بره
جان سید برید توی پروژه هاتون از Pydantic استفاده کنید و لذت دنیا و اخرت رو یکجا تجربه کنید
✅ @SeYeD_BaX
بعد مدتی توی پایتون با امثال dataclasses و pydantic آشنا شدم و فهمیدم حالا درسته پایتون کاری نداره. ولی بهتره از این ساختار های منظم استفاده کنیم که کارمون خیلی بهتر و راحت تر و تمیز تر و بیوتیفول تر و گاد تر و ... پیش بره
جان سید برید توی پروژه هاتون از Pydantic استفاده کنید و لذت دنیا و اخرت رو یکجا تجربه کنید
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی
چند سال پیش که سعی داشتم golang یاد بگیرم برام یک چیزی مشکل بود. اینکه توی پایتون عادت نداشتم ساختار جیسون رو از قبل بدونم و مثلا با دوتا فیلدش کار داشتم و میرفتم جلو. اما توی go باید ساختاری رو مشخص میکردم و بعد از اون استفاده میکردم برای parse کردنش. بعد…
2 شگردی که میتونید با پاینداتیک انجام بدید
1. ساخت parser از رو json. کاری نداره واقعا. فقط باید json schema اش رو ببینید و از روش بسازید. حتی بنظرم خیلی نایس میشه که یک لایبری پیدا شه بیاد از رو json schema کد pydantic بده 😁 شایدم خودم نوشتم :))
2. ساخت query. مثلا میتونید هرچی تو parser یا schema pydantic اتون انتخاب کردین به طور خودکار تو response parserتون هم ادد شه 🤯 مثل متود get_selects که اینجا نوشتم
@ManiFoldsPython
1. ساخت parser از رو json. کاری نداره واقعا. فقط باید json schema اش رو ببینید و از روش بسازید. حتی بنظرم خیلی نایس میشه که یک لایبری پیدا شه بیاد از رو json schema کد pydantic بده 😁 شایدم خودم نوشتم :))
2. ساخت query. مثلا میتونید هرچی تو parser یا schema pydantic اتون انتخاب کردین به طور خودکار تو response parserتون هم ادد شه 🤯 مثل متود get_selects که اینجا نوشتم
@ManiFoldsPython
👍5
Forwarded from سیلیسیم (Mehran Tarif)
حتما این ویدیو رو ببینید تا متوجه بشید چرا کلاه برداری میشه و آدمایی مثل ماهان تیموری، دنیا جهانبخت و همین «جاوا اسکریپت کوچیک شده جاوا است» خودمون، چطور طعمه پیدا می کنند.
اگر نمیتونید گوش کنید، خلاصه اش اینه:
۱. هالو بودن از چهره مشخص نمیشه، پس باید کاری کنی تا افراد هالو خودشونو معرفی کنند.
۲. دلیل اینکه یه نفر با ۵ میلیون فالور میاد یه حرف کاملا مضخرف میزنه اینکه اگر، از اون ۵ میلیون، ۵۰۰ نفر به اون پست خیلی مضخرف واکنش نشون بدن، یعنی قطعا هالو هستن و میشه اونا رو دوشید.
۳. این رفتار الزاما نشاندهنده هوش کلاه بردار نیست. میتونه یه رفتار غریزی باشه که در طی زمان جواب داده.
@siliciumir
اگر نمیتونید گوش کنید، خلاصه اش اینه:
۱. هالو بودن از چهره مشخص نمیشه، پس باید کاری کنی تا افراد هالو خودشونو معرفی کنند.
۲. دلیل اینکه یه نفر با ۵ میلیون فالور میاد یه حرف کاملا مضخرف میزنه اینکه اگر، از اون ۵ میلیون، ۵۰۰ نفر به اون پست خیلی مضخرف واکنش نشون بدن، یعنی قطعا هالو هستن و میشه اونا رو دوشید.
۳. این رفتار الزاما نشاندهنده هوش کلاه بردار نیست. میتونه یه رفتار غریزی باشه که در طی زمان جواب داده.
@siliciumir
👍1👏1
سیلیسیم
حتما این ویدیو رو ببینید تا متوجه بشید چرا کلاه برداری میشه و آدمایی مثل ماهان تیموری، دنیا جهانبخت و همین «جاوا اسکریپت کوچیک شده جاوا است» خودمون، چطور طعمه پیدا می کنند. اگر نمیتونید گوش کنید، خلاصه اش اینه: ۱. هالو بودن از چهره مشخص نمیشه، پس باید کاری…
پست خیلی خوبیه. ولی یک نکته وجود داره که بهش پرداخته نشد چرا تو خارج همچین کلاه بردار هایی موفق نیستن؟ چرا تو ایران خیلی موفقن؟ دلیلی داره که من وقتی از ایران رفتم متوجه شدم
ما ایرانیا همیشه دنبال shortcut ایم. از بچگی میخواستیم به نت وصل شیم باید 100 ترفند و قلق میزدیم که وصل شه. کلی محدودیت های مختلف داشتیم که بازم باید با قلق دورشون میزدیم. بزرگ تر شدیم تو راهنمایی یاد گرفتیم جای اینکه کتاب درسی رو بخونیم بریم جزوه بخونیم. کلاغ سبز و این شرو ورا :)). بزرگ تر شدیم همین shortcut شد نکته کنکوری. شد کلاس کنکور. چیزایی که اصلا تو خارج نمیبینید شما.
ترم اول دانشگاه بودم رفتم سره کلاس گفتم استاد جزوه چی خوبه مثلا بگیریم؟ شاخ درآورد :)). گفت مگه کتاب چشه؟ همین موضوع سره ابزار هایی که استفاده میکنیم داره. ویندوز میخوایم نصب کنیم باید کرک باشه. هر برنامه ای بخوایم نصب کنیم یا اوپن سورسه یا کرک. کلا همیشه دنبال مسیر کج و غیر استاندارد بودیم و خواهیم بود. نسل ما اینطور بار اومده متاسفانه.
اینجا لوله کش اوردم یک چیز خیلی راحت رو حل نکرد گفت باید لوله رو عوض کنم و L بیارم. و هزینش اینقدر میشه. منم لوله رو ازش خریدم گرفتم لولش رو خودم دستی کج کردم L شد😂. اون به ذهنش اصلا نرسید همچین چیزی, چون به اون یاد دادن که به میانبر فکر نکنه و فقط به روش اصولی انجام کار پایبند باشه. اینه تفاوت یک مهندس خارجی و ایرانی. و این میانبر زدن زیاد هم خیلی جاها یقه میگیره و باعث میشه همون لوله نشت کنه و کل ساختمون خراب شه.
همین خصلتمون باعث شده که کلا این کاسبی این آدمای دلال و آرزو فروش و یک شبه پول دار شو بگیره.
@ManiFoldsPython
ما ایرانیا همیشه دنبال shortcut ایم. از بچگی میخواستیم به نت وصل شیم باید 100 ترفند و قلق میزدیم که وصل شه. کلی محدودیت های مختلف داشتیم که بازم باید با قلق دورشون میزدیم. بزرگ تر شدیم تو راهنمایی یاد گرفتیم جای اینکه کتاب درسی رو بخونیم بریم جزوه بخونیم. کلاغ سبز و این شرو ورا :)). بزرگ تر شدیم همین shortcut شد نکته کنکوری. شد کلاس کنکور. چیزایی که اصلا تو خارج نمیبینید شما.
ترم اول دانشگاه بودم رفتم سره کلاس گفتم استاد جزوه چی خوبه مثلا بگیریم؟ شاخ درآورد :)). گفت مگه کتاب چشه؟ همین موضوع سره ابزار هایی که استفاده میکنیم داره. ویندوز میخوایم نصب کنیم باید کرک باشه. هر برنامه ای بخوایم نصب کنیم یا اوپن سورسه یا کرک. کلا همیشه دنبال مسیر کج و غیر استاندارد بودیم و خواهیم بود. نسل ما اینطور بار اومده متاسفانه.
اینجا لوله کش اوردم یک چیز خیلی راحت رو حل نکرد گفت باید لوله رو عوض کنم و L بیارم. و هزینش اینقدر میشه. منم لوله رو ازش خریدم گرفتم لولش رو خودم دستی کج کردم L شد😂. اون به ذهنش اصلا نرسید همچین چیزی, چون به اون یاد دادن که به میانبر فکر نکنه و فقط به روش اصولی انجام کار پایبند باشه. اینه تفاوت یک مهندس خارجی و ایرانی. و این میانبر زدن زیاد هم خیلی جاها یقه میگیره و باعث میشه همون لوله نشت کنه و کل ساختمون خراب شه.
همین خصلتمون باعث شده که کلا این کاسبی این آدمای دلال و آرزو فروش و یک شبه پول دار شو بگیره.
@ManiFoldsPython
👏7👍3
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
اینجا مانی گفته کاش یک کانورتر هم براش بود
https://news.1rj.ru/str/manifoldspython/206
خواستم زودتر ازش ایده رو پیاده کنم که دیدم چه جالب حتی سایت زدن واسش آنلاین جنتریت میکنه
https://jsontopydantic.com/
اینجا هم خود pydantic یک پکیج معرفی کرده که این کار رو میکنه :
https://docs.pydantic.dev/latest/datamodel_code_generator/
✅ @SeYeD_BaX
https://news.1rj.ru/str/manifoldspython/206
خواستم زودتر ازش ایده رو پیاده کنم که دیدم چه جالب حتی سایت زدن واسش آنلاین جنتریت میکنه
https://jsontopydantic.com/
اینجا هم خود pydantic یک پکیج معرفی کرده که این کار رو میکنه :
https://docs.pydantic.dev/latest/datamodel_code_generator/
Please open Telegram to view this post
VIEW IN TELEGRAM
اگه فست کار میکنید هر مشکلی خوردین و نیاز داشتین که یکم کد ببینید تا مشکلتون برطرف شه توصیه میکنم از خود ریپو فست استفاده کنید
https://github.com/tiangolo/fastapi/tree/master/docs_src
داک سورسی که سبا درست کرده بینظیره. تقریبا خودش یک کاوریج کامل از فریم ورکشه با مثال های مختلف
@ManiFoldsPython
https://github.com/tiangolo/fastapi/tree/master/docs_src
داک سورسی که سبا درست کرده بینظیره. تقریبا خودش یک کاوریج کامل از فریم ورکشه با مثال های مختلف
@ManiFoldsPython
GitHub
fastapi/docs_src at master · fastapi/fastapi
FastAPI framework, high performance, easy to learn, fast to code, ready for production - fastapi/fastapi
👍10
یک لایبری خیلی مناسب و مدرن به جای celery برای scheduling که dependency کمی داره, کدبیس کم حجم و کاوریج 96 درصدی که statement-based scheduler هارو هم ساپورت میکنه مثل:
فقط dependency injection رو یک مقدار عجیب برطرف کرده که هنوز متوجه نشدم چرا, ولی خب همین موضوع حتی تو بقیه لایبری های مشابه هم نیست.
https://rocketry.readthedocs.io/en/stable/index.html
every("10 seconds")
با قابلیت ساپورت async, sync, parallel threading و multiprocessفقط dependency injection رو یک مقدار عجیب برطرف کرده که هنوز متوجه نشدم چرا, ولی خب همین موضوع حتی تو بقیه لایبری های مشابه هم نیست.
https://rocketry.readthedocs.io/en/stable/index.html
rocketry.readthedocs.io
Why Rocketry? — Rocketry
Rocketry, modern scheduling framework
👍9
دیروز با یک pen tester راجب بست پرکتیس های JWT صحبت میکردم و اینکه کلا چطور میشه هم مزیت های JWT رو داشت و هم به نحوی امن پیاده سازیش کرد, JWT همونطور که میدونید stateless هست یعنی نیازی به هیت به دیتابیس نداره. برای microservice و SOA هم بهتره چون overhead خیلی کمتری داره براشون و fault tolerance خیلی کمتر میشه.
چند تا از بست پرکتیس های JWT
1. طول عمر اکسز توکن بسیار کوتاه باید باشه, ماکسیموم 10 دقیقه.
2. قابلیت لاگ اوت که رفرش توکن invalid میشه. بلک لیست میشه تو دیتابیسی مثل redis. اکسز توکن نباید بلک لیست شه وگرنه اساس JWT زیر سوال میره. هکر اگه توکن رو دزدید و لاگین کرد قطعا شما خیلی دیرتر از 10 دقیقه متوجه میشین. وقتی متوجه شدین رفرش توکنی که هکر ساخته رو black list میکنید.
3. خود payload و claim ها نباید حاوی اطلاعات محرمانه باشن. بهترین کار همون user id هست چون خیلی پرایوت نیست و تو زدن query هم دیگه نیازی به جوین نخواهیم داشت.
4. روتیت کردن secret key به صورت periodic مثلا هر 3 ماه یا 6 ماه یک بار
5. استفاده از الگوریتم امن و غیرقابل پیشبینی
6. استفاده از UUID تو user id. اینطوری حتی سکرت کی هم لو بره کار هکر قطعا سخت خواهد بود😅
@ManiFoldsPython
چند تا از بست پرکتیس های JWT
1. طول عمر اکسز توکن بسیار کوتاه باید باشه, ماکسیموم 10 دقیقه.
2. قابلیت لاگ اوت که رفرش توکن invalid میشه. بلک لیست میشه تو دیتابیسی مثل redis. اکسز توکن نباید بلک لیست شه وگرنه اساس JWT زیر سوال میره. هکر اگه توکن رو دزدید و لاگین کرد قطعا شما خیلی دیرتر از 10 دقیقه متوجه میشین. وقتی متوجه شدین رفرش توکنی که هکر ساخته رو black list میکنید.
3. خود payload و claim ها نباید حاوی اطلاعات محرمانه باشن. بهترین کار همون user id هست چون خیلی پرایوت نیست و تو زدن query هم دیگه نیازی به جوین نخواهیم داشت.
4. روتیت کردن secret key به صورت periodic مثلا هر 3 ماه یا 6 ماه یک بار
5. استفاده از الگوریتم امن و غیرقابل پیشبینی
6. استفاده از UUID تو user id. اینطوری حتی سکرت کی هم لو بره کار هکر قطعا سخت خواهد بود😅
@ManiFoldsPython
👍11
سمت فرانت تنها کاری که باید انجام بدین که مربوط به JWT میشه:
فرش توکن اصلا نباید تو local storage ذخیره شه چون تو بک آپ browser هست و کلا دسترسی بهش غیر ممکن نیست. به جاش باید تو کوکی ذخیرش کنید تحت همچین ویژگی هایی:
prefixes (e.g. __HOST-)
attributes (Secure, HttpOnly, SameSite)
فرش توکن اصلا نباید تو local storage ذخیره شه چون تو بک آپ browser هست و کلا دسترسی بهش غیر ممکن نیست. به جاش باید تو کوکی ذخیرش کنید تحت همچین ویژگی هایی:
prefixes (e.g. __HOST-)
attributes (Secure, HttpOnly, SameSite)
👍11
برای پایین آوردن تایم بیلدتون از poetry با داکر میتونید از همچین داکرفایلی استفاده کنید
میتونید pip install poetry هم نزنید و از ایمیج خودش استفاده کنید. ولی فرقی نمیکنه از نظره تایم بیلد خیلی.
@ManiFoldsPython
FROM python:3.11.3
WORKDIR /src
COPY pyproject.toml poetry.lock* ./
RUN pip install poetry \
&& poetry config virtualenvs.create false \
&& poetry install --no-interaction --no-ansi
COPY . .
ENV PYTHONPATH=/app:$PYTHONPATH
EXPOSE YOUR_PORT
# handle deploy here
CMD ["make", "deploy"]
اینطوری وقتی بیلد بگیرین تا زمانی که پکیج جدیدی اضافه نکرده باشین پکیجا رو دوباره اینستال نمیکنه. میتونید pip install poetry هم نزنید و از ایمیج خودش استفاده کنید. ولی فرقی نمیکنه از نظره تایم بیلد خیلی.
@ManiFoldsPython
❤2
توصیه میکنم حتما بخونید و یاد بگیرین اگه با Microservice یا SOA سروکله دارین
https://opentelemetry.io/docs/getting-started/dev/
What is OpenTelemetry?
A short explanation of what OpenTelemetry is, and is not.
Microservices architectures have enabled developers to build and release software faster and with greater independence, as they were no longer beholden to the elaborate release processes associated with monolithic architectures.
As these now-distributed systems scaled, it became increasingly difficult for developers to see how their own services depend on or affect other services, especially after a deployment or during an outage, where speed and accuracy are critical.
Observability has made it possible for both developers and operators to gain that visibility into their systems.
@ManiFoldsPython
https://opentelemetry.io/docs/getting-started/dev/
What is OpenTelemetry?
A short explanation of what OpenTelemetry is, and is not.
Microservices architectures have enabled developers to build and release software faster and with greater independence, as they were no longer beholden to the elaborate release processes associated with monolithic architectures.
As these now-distributed systems scaled, it became increasingly difficult for developers to see how their own services depend on or affect other services, especially after a deployment or during an outage, where speed and accuracy are critical.
Observability has made it possible for both developers and operators to gain that visibility into their systems.
@ManiFoldsPython
OpenTelemetry
Getting started for Developers
This is the getting-started page for you if:
You develop software. Your goal is to get observability by writing code. You want to have your dependencies emit telemetry for you automatically. OpenTelemetry can help you! To accomplish your goals of having your…
You develop software. Your goal is to get observability by writing code. You want to have your dependencies emit telemetry for you automatically. OpenTelemetry can help you! To accomplish your goals of having your…
👍2
میخوام این چند روز مطالبو اختصاص بدم به opentelemetry و نحوه استفادش با FastAPI و کانفیگش. چون وقتی یک چیزیو توضیح میدم خودمم خوب متوجه میشم 😅
پارت یک
اولا که opentelemetry چیه؟ یک پروژه Cloud Native Computing Foundation هست که شامل یک سری ابزار و API و استاندار میشه که کار رو برای دولوپر ها و SRE ها راحت تر میکنه تا از سرویس هاشون راحت instrument (معادل فارسیش رو نمیدونم) بکنند و بتونند با دیتایی که جمع میکنن سیستم هاشون رو بهتر درک کنند و راحت تر دیباگ کنند.
کل دیتا جمع آوردی شده از 3 روش بدست میاد:
1. متریک: شامل اعدادی میشن که تو یک سری بازه زمانی خونده میشن. مثلا سی پی یو یوسیج یا ارور ها یا تعداد درخواست. این برای ارزیابی پرفومنس سیستم تو یک نگاه سریع استفاده میشه.
2. لاگ: رکورد های اتفاقاتی هستند که تو سرویس رخ میدن. اینفورمنیشن خیلی کاملی نسبت به حوادث میدن به ما. میتونه یک query که به دیتابیس زده میشه باشه یا هرچیزی که لاگ میندازین خودتون یا لایبری که ازش استفاده میکنید لاگ میندازه.
3. تریس:تو تریس ما از یک activity یک درخواست که تو سیستم میره رکورد میگیریم. خب شاید بگین این که شد همون لاگ؟ نه, تو تریس ما بسیار استراکچر منظم تری داریم و کاربردش اصلا با کاربرد لاگ یکی نیست. مثلا شما به یک external service درخواست زدین. تمام درخواست هایی که به اون external service میزنید رو با یک context manager فقط تو تریس همون سرویس ذخیره میکنید. این باعث میشه مثلا متوجه شین یکی از سرویس هاتون خیلی داره ارور میده چون کلی تریس اون سرویس فیل شده از سرویس های مختلف بدون اینکه لاگ هارو نیاز باشه بخونید حتی!
مثلا اینجا اومدم از سرویس authentication یک چیزی رو دریافت کنم. جای اینکه لاگ بندازم درخواست های به اون سرویس رو, موقع زدن کانکشن به اون سرویس یک context manager باز میکنم. این باعث میشه که تو دیتابیس هم هرچی fail بخوره زیر کانکتس منیجر تحت عنوان سرویس authentication رکورد شه نه سرویسی که داره درخواست میزنه. این کار باعث میشه همین که برم تو داشبورد جای اینکه ببینم مثلا 10 تا سرویسم همشون دارن ارور میدن, یک سرویس درواقع داره ارور میده رو 10 سرویس مختلف و داشبورد خودش traceback کرده چون tracer ای فیل شده که authentication بوده.
دو مورد دیگه هم تو trace هست که تو لاگ نیست,
یکیش اینه که timing information داره. یعنی دقیقا مشخص میکنه یک درخواست از چه سرویسی رفته به چه سرویس دیگه ای و چقدر تو هر سرویس بوده. پرفومنس همه سرویس هاتون رو اینطوری میتونید مشخص کنید. (خیلی خفنه نه ؟)
دوم اینکه trace ID و span ID داره که خب طبیعتا هر تریس ممکنه چندین span داشته باشه و با چند سرویس در کنش باشه. این باعث میشه مسیری که اون درخواست طی کرده هم ببینیم.
@ManiFoldsPython
پارت یک
اولا که opentelemetry چیه؟ یک پروژه Cloud Native Computing Foundation هست که شامل یک سری ابزار و API و استاندار میشه که کار رو برای دولوپر ها و SRE ها راحت تر میکنه تا از سرویس هاشون راحت instrument (معادل فارسیش رو نمیدونم) بکنند و بتونند با دیتایی که جمع میکنن سیستم هاشون رو بهتر درک کنند و راحت تر دیباگ کنند.
کل دیتا جمع آوردی شده از 3 روش بدست میاد:
1. متریک: شامل اعدادی میشن که تو یک سری بازه زمانی خونده میشن. مثلا سی پی یو یوسیج یا ارور ها یا تعداد درخواست. این برای ارزیابی پرفومنس سیستم تو یک نگاه سریع استفاده میشه.
2. لاگ: رکورد های اتفاقاتی هستند که تو سرویس رخ میدن. اینفورمنیشن خیلی کاملی نسبت به حوادث میدن به ما. میتونه یک query که به دیتابیس زده میشه باشه یا هرچیزی که لاگ میندازین خودتون یا لایبری که ازش استفاده میکنید لاگ میندازه.
3. تریس:تو تریس ما از یک activity یک درخواست که تو سیستم میره رکورد میگیریم. خب شاید بگین این که شد همون لاگ؟ نه, تو تریس ما بسیار استراکچر منظم تری داریم و کاربردش اصلا با کاربرد لاگ یکی نیست. مثلا شما به یک external service درخواست زدین. تمام درخواست هایی که به اون external service میزنید رو با یک context manager فقط تو تریس همون سرویس ذخیره میکنید. این باعث میشه مثلا متوجه شین یکی از سرویس هاتون خیلی داره ارور میده چون کلی تریس اون سرویس فیل شده از سرویس های مختلف بدون اینکه لاگ هارو نیاز باشه بخونید حتی!
with tracer.start_as_current_span("authentication"):
...مثلا اینجا اومدم از سرویس authentication یک چیزی رو دریافت کنم. جای اینکه لاگ بندازم درخواست های به اون سرویس رو, موقع زدن کانکشن به اون سرویس یک context manager باز میکنم. این باعث میشه که تو دیتابیس هم هرچی fail بخوره زیر کانکتس منیجر تحت عنوان سرویس authentication رکورد شه نه سرویسی که داره درخواست میزنه. این کار باعث میشه همین که برم تو داشبورد جای اینکه ببینم مثلا 10 تا سرویسم همشون دارن ارور میدن, یک سرویس درواقع داره ارور میده رو 10 سرویس مختلف و داشبورد خودش traceback کرده چون tracer ای فیل شده که authentication بوده.
دو مورد دیگه هم تو trace هست که تو لاگ نیست,
یکیش اینه که timing information داره. یعنی دقیقا مشخص میکنه یک درخواست از چه سرویسی رفته به چه سرویس دیگه ای و چقدر تو هر سرویس بوده. پرفومنس همه سرویس هاتون رو اینطوری میتونید مشخص کنید. (خیلی خفنه نه ؟)
دوم اینکه trace ID و span ID داره که خب طبیعتا هر تریس ممکنه چندین span داشته باشه و با چند سرویس در کنش باشه. این باعث میشه مسیری که اون درخواست طی کرده هم ببینیم.
@ManiFoldsPython
👍7
این چقدر باحاله!
https://github.com/behave/behave
یک فریم ورک BDD برای تست نویسی.
تو عکس یک مثالشو گذاشتم
واسه UI تست بنظرم خیلی میتونه خفن باشه. 😁
@ManiFoldsPython
https://github.com/behave/behave
یک فریم ورک BDD برای تست نویسی.
تو عکس یک مثالشو گذاشتم
واسه UI تست بنظرم خیلی میتونه خفن باشه. 😁
@ManiFoldsPython
👍5
برای لود تست هم locust رو داریم
https://github.com/locustio/locust
که میتونید scalability اپلیکشنتون رو باهاش بسنیجید که تو لود بالا چقدر پرفومنس داره.
خودشم GUI داره.
@ManiFoldsPython
https://github.com/locustio/locust
که میتونید scalability اپلیکشنتون رو باهاش بسنیجید که تو لود بالا چقدر پرفومنس داره.
خودشم GUI داره.
@ManiFoldsPython
👍3
Python BackendHub
دیروز با یک pen tester راجب بست پرکتیس های JWT صحبت میکردم و اینکه کلا چطور میشه هم مزیت های JWT رو داشت و هم به نحوی امن پیاده سازیش کرد, JWT همونطور که میدونید stateless هست یعنی نیازی به هیت به دیتابیس نداره. برای microservice و SOA هم بهتره چون overhead…
دارم رو یک boilerplate کار میکنم که همه اینا رو رعایت کرده باشه.
https://github.com/ManiMozaffar/fast-auth
امکاناتی که داره:
Secure JWT implementation
Redis black list access token
Refresh/login endpoint
Register endpoint
امکاناتی که مونده و باید ادد شه:
Add email field
Mail client
Email and verify email address on registration endpoint
Alarm unauthorized logins with mailing
Change username/email/password functionality with 2FA step (as email/gauth)
Opentelemetry integration
OAuth2 proto integration
OAuth support for gmail and apple
ROADMAP
اگه دوست داشتین میتونید کانتربیوت کنید. کدش کاملا کلین و اصولیه 😅
@ManiFoldsPython
https://github.com/ManiMozaffar/fast-auth
امکاناتی که داره:
Secure JWT implementation
Redis black list access token
Refresh/login endpoint
Register endpoint
امکاناتی که مونده و باید ادد شه:
Add email field
Mail client
Email and verify email address on registration endpoint
Alarm unauthorized logins with mailing
Change username/email/password functionality with 2FA step (as email/gauth)
Opentelemetry integration
OAuth2 proto integration
OAuth support for gmail and apple
ROADMAP
اگه دوست داشتین میتونید کانتربیوت کنید. کدش کاملا کلین و اصولیه 😅
@ManiFoldsPython
GitHub
GitHub - ManiMozaffar/fast-auth: FastAPI fully featured for authenication
FastAPI fully featured for authenication. Contribute to ManiMozaffar/fast-auth development by creating an account on GitHub.
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
مصاحبه رو صد در صد تضمینی با این روش با هر شرکتی پاس میشین 😂
@ManiFoldsPython
@ManiFoldsPython
😁21🖕1
Forwarded from DevTwitter | توییت برنامه نویسی
خبر مهم: کورسرا حق اشتراک ماهانه شو کرده ۱ دلار/یورو/پوند
همه دورهها رو برای یک ماه میتونید با این قیمت داشته باشید و از ماه بعد قیمت کامل تقریبا ۶۰ دلاری رو باید بپردازید.
آخرین فرصت خرید تا ۲۲ جوئن هست.
https://www.coursera.org/courseraplus/special/june-promo-2023
@DevTwitter | <Abbas عطاردوار/>
همه دورهها رو برای یک ماه میتونید با این قیمت داشته باشید و از ماه بعد قیمت کامل تقریبا ۶۰ دلاری رو باید بپردازید.
آخرین فرصت خرید تا ۲۲ جوئن هست.
https://www.coursera.org/courseraplus/special/june-promo-2023
@DevTwitter | <Abbas عطاردوار/>
👎4👍2
Perfect programming language! 😂😂
یکی از عجیب ترین زبون های برنامه نویسی رو تو ریپو زیر میتونید ببینید که البته بیشتر بنظرم شبیه میمه 😂
https://github.com/TodePond/DreamBerd
چند چیز عجیب این زبون که میشه به طور خلاصه بهش اشاره کنم:
میتونید یک integer رو دیلیت کنید.
delete 3!
print(2 + 1)! // Error: 3 has been deleted
😂😂😂
حتی میتونید دیلیت رو دیلیت کنید😂😂 ولی حواستون باشه که اگه دیلیت رو دیلیت کردین دیگه نمیتونید چیزیو دیلیت کنید! 😂
delete delete!
یک چیز باحال دیگه, استاد تو زبونش اتک هم زده به OOP کارا :))))))
You can make classes, but you can only ever make one instance of them. This shouldn't affect how most object-oriented programmers work
پ.ن: فیلم زیرو از دست ندین
https://www.youtube.com/watch?v=tDexugp8EmM
@ManiFoldsPython
یکی از عجیب ترین زبون های برنامه نویسی رو تو ریپو زیر میتونید ببینید که البته بیشتر بنظرم شبیه میمه 😂
https://github.com/TodePond/DreamBerd
چند چیز عجیب این زبون که میشه به طور خلاصه بهش اشاره کنم:
میتونید یک integer رو دیلیت کنید.
delete 3!
print(2 + 1)! // Error: 3 has been deleted
😂😂😂
حتی میتونید دیلیت رو دیلیت کنید😂😂 ولی حواستون باشه که اگه دیلیت رو دیلیت کردین دیگه نمیتونید چیزیو دیلیت کنید! 😂
delete delete!
یک چیز باحال دیگه, استاد تو زبونش اتک هم زده به OOP کارا :))))))
You can make classes, but you can only ever make one instance of them. This shouldn't affect how most object-oriented programmers work
class Player {
const var health = 10!
}
const var player1 = new Player()!
const var player2 = new Player()! //Error
ولی میتونید همینم دور بزنید 😂😂class PlayerMaker {
function makePlayer() => {
class Player {
const var health = 10!
}
const const player = new Player()!
return player!
}
}
const const playerMaker = new PlayerMaker()!
const var player1 = playerMaker.makePlayer()!
const var player2 = playerMaker.makePlayer()!
جدا از شوخی بعضی ایده هاش واقعا جالب بود که بهش نپرداختم. تو ریپو هست.پ.ن: فیلم زیرو از دست ندین
https://www.youtube.com/watch?v=tDexugp8EmM
@ManiFoldsPython
GitHub
GitHub - TodePond/GulfOfMexico: perfect programming language
perfect programming language. Contribute to TodePond/GulfOfMexico development by creating an account on GitHub.
🤣12👍1
Your wiki, docs, & projects. Together.
https://www.notion.so/
با اینترفیس notion خیلی حال کردم
همه چی داره! با UX و UI خیلی عالی. و کمپانی های خیلی بزرگیم ازش استفاده میکنن مثل آمازون و فیگما و uber و pixar.
نمونه داک فنیشو تو تصویر میتونید ببینید (پ.ن: درفته واقعی نیست :)) )
پلن پایه اش مجانیه میتونید تست کنید و اگه نیاز بود آپگرید کنید. 👍
@ManiFoldsPython
https://www.notion.so/
با اینترفیس notion خیلی حال کردم
همه چی داره! با UX و UI خیلی عالی. و کمپانی های خیلی بزرگیم ازش استفاده میکنن مثل آمازون و فیگما و uber و pixar.
نمونه داک فنیشو تو تصویر میتونید ببینید (پ.ن: درفته واقعی نیست :)) )
پلن پایه اش مجانیه میتونید تست کنید و اگه نیاز بود آپگرید کنید. 👍
@ManiFoldsPython
🤓4🍌1