Forwarded from بنیاد پایتون کاران فارسی (M4hdi)
✔️ چگونه فایلهای json عه بزرگ را بدون تموم شدن مموریمون 😬 بخونیم
یک مشکلی که بعضا برای کسایی که با json خصوصا فایلهایی با حجم بالا کار میکنن اینه که استفاده غیرطبیعی و بسیار زیاد مموری رو تجربه میکنن!!
برای جلوگیری از این مشکل چندین راهحل وجود داره که در این مقاله راجع بهشون صحبت شده:
https://pythonspeed.com/articles/json-memory-streaming/
〰〰〰〰〰
©@PSFarsi
یک مشکلی که بعضا برای کسایی که با json خصوصا فایلهایی با حجم بالا کار میکنن اینه که استفاده غیرطبیعی و بسیار زیاد مموری رو تجربه میکنن!!
برای جلوگیری از این مشکل چندین راهحل وجود داره که در این مقاله راجع بهشون صحبت شده:
https://pythonspeed.com/articles/json-memory-streaming/
〰〰〰〰〰
©@PSFarsi
Python⇒Speed
Processing large JSON files in Python without running out of memory
Loading complete JSON files into Python can use too much memory, leading to slowness or crashes. The solution: process JSON data one chunk at a time.
Forwarded from سیلیسیم (Mohammad Babazadeh)
✔️ پایپ لاین ایدهآل CI/CD
در این ویدئو به بررسی یک پایپلاین ایدهآل CI/CD میپردازیم و راجع به انواع تستهای پرکاربرد نرمافزار نظیر:
1. Unit Test
2. Integration Test
3. End-to-End Test
4. Smoke Test
5. Security Test
6. White-box & Black-box Test
7. Performance Test
8. Scalibility Test
9. Load Test
10. Stress Test
11. etc.
صحبت میکنیم.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/Zrtdon8XH4M
#devops #CICD #دوآپس
〰️〰️〰️〰️〰️〰️
@siliciumir
در این ویدئو به بررسی یک پایپلاین ایدهآل CI/CD میپردازیم و راجع به انواع تستهای پرکاربرد نرمافزار نظیر:
1. Unit Test
2. Integration Test
3. End-to-End Test
4. Smoke Test
5. Security Test
6. White-box & Black-box Test
7. Performance Test
8. Scalibility Test
9. Load Test
10. Stress Test
11. etc.
صحبت میکنیم.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/Zrtdon8XH4M
#devops #CICD #دوآپس
〰️〰️〰️〰️〰️〰️
@siliciumir
* و / توی آرگومانهای فانکشنها چیکار میکنن؟
اون دوتا کاراکتری که بالا گفتم اینجا به کار میان:
فکر کنید میخواید تابع بالا رو بنویسید و خیلی براتون مهمه که ترتیب آرگومانها به همین شکل باشه و مثلا پارامتر وسط فقط مقدار دیفالت داشته باشه. چیکار میتونیم بکنیم؟
میتونیم قبل از تعریف بقیه پارامترها، یدونه * بذاریم. مثل زیر:
یعنی وقتی میخواید تابع رو صدا بزنید. فقط میتونید اونها رو به عنوان keyword argument به تابع پاس بدید. مثلا:
تابعی که اول پست گفتم شاید رایج ترین شکل استفاده از * باشه. این مثال رو زدم که اگه یه وقت باهاش مواجه شدید، بدونین چیکار میکنه. حالا جلوتر استفادههای دیگهاش رو هم میگم.
حالا بریم سر وقت اینکه / چیکار میکنه. در واقع برعکس حالت قبل عمل میکنه و مارو مجبور میکنه که آرگومانهامون رو به صورت positional only پاس بدیم.
مثلا:
اگه دوست دارید بیشتر در این باره بخونید:
نمونه کد از FastAPI
این سوال استکاورلفو
pep3102
این پاراگراف از داکیومنت FastAPI
def func(param1: int, param2: str = "name", param3: bool):
...
احتمالا قبلا به صورت اتفاقی هم که شده اینجوری توی پایتون تابع نوشتید و بعدش با اروری مواجه شدید که میگفت: "نمیتونی بعد از یه پارامتر که مقدار دیفالت داره، پارامتری بذاری که مقدار دیفالتی نداره"اون دوتا کاراکتری که بالا گفتم اینجا به کار میان:
فکر کنید میخواید تابع بالا رو بنویسید و خیلی براتون مهمه که ترتیب آرگومانها به همین شکل باشه و مثلا پارامتر وسط فقط مقدار دیفالت داشته باشه. چیکار میتونیم بکنیم؟
میتونیم قبل از تعریف بقیه پارامترها، یدونه * بذاریم. مثل زیر:
def func(*, param1: int, param2: str = "name", param3: bool):
...
البته این کار یه بدی هم داره که اینه که اون * میاد تمام آرگومانهای بعد از خودش رو keyword only میکنه. میگید این یعنی چی؟یعنی وقتی میخواید تابع رو صدا بزنید. فقط میتونید اونها رو به عنوان keyword argument به تابع پاس بدید. مثلا:
func(param1=1, param2="hello", param3=True)
در واقع اون ستاره میاد تمام positional argument های بعدش رو میخوره.تابعی که اول پست گفتم شاید رایج ترین شکل استفاده از * باشه. این مثال رو زدم که اگه یه وقت باهاش مواجه شدید، بدونین چیکار میکنه. حالا جلوتر استفادههای دیگهاش رو هم میگم.
حالا بریم سر وقت اینکه / چیکار میکنه. در واقع برعکس حالت قبل عمل میکنه و مارو مجبور میکنه که آرگومانهامون رو به صورت positional only پاس بدیم.
def func(param1: int, param2: str, param3: bool, /):
...
در این حالت دیگه نمیتونیم موقع صدا کردن تابع، از اسم اون آرگومان استفاده کنیم (param1=1) و باید اونا رو به شکل positional بهش بدیم:func(1, "hello", True)
حالا جالب اینجاست که این دوتا رو میتونیم با هم ترکیب کنیم!مثلا:
def func(param1, param2, /, param3, *, param4, param5):
...
اینجوری تمام پارامترهای قبلا از / رو positional only میکنیم، و پارامترهای بعد از * رو هم keyword only میکنیم. توی این حالت، اینجوری تابع رو میتونیم صدا بزنیم:func(1, "name", True, param4=4, param5=5)
یاfunc(1, "name", param3=True, param4=4, param5=5)
که param3 میتونه به هر دو حالت صدا بشه.اگه دوست دارید بیشتر در این باره بخونید:
نمونه کد از FastAPI
این سوال استکاورلفو
pep3102
این پاراگراف از داکیومنت FastAPI
Imgur
Post with 0 votes and 2 views.
Forwarded from نوشتههای ترمینالی
نوشتههای ترمینالی
کاش گیت undo داشت. انواع مختلفی از روش ها که میتونید باهاشون آندو کنید https://ohshitgit.com/
تا حالا شده شروع کنید به ادیت کردن یا اضافه کردن یه فیچر به کد، و یهو یادتون بیاد ای بابا چرا یه برنچ جدید نساختم و ادیتامو روی master انجام دادم؟
تنها کاری که باید قبل از کامیت کردن بکنید اینه که همون موقع برنچ جدید رو بسازید:
تنها کاری که باید قبل از کامیت کردن بکنید اینه که همون موقع برنچ جدید رو بسازید:
git checkout -b newBranchlink
Reading materials
تا حالا شده شروع کنید به ادیت کردن یا اضافه کردن یه فیچر به کد، و یهو یادتون بیاد ای بابا چرا یه برنچ جدید نساختم و ادیتامو روی master انجام دادم؟ تنها کاری که باید قبل از کامیت کردن بکنید اینه که همون موقع برنچ جدید رو بسازید: git checkout -b newBranch link
حالا اومدید و تغییرات رو کامیت کرده بودید. اونوقت چیکار میکنید؟
میتونید از این سوال جوابتون رو بگیرید
میتونید از این سوال جوابتون رو بگیرید
Stack Overflow
moving committed (but not pushed) changes to a new branch after pull
I've done a fair bit of work ("Your branch is ahead of 'origin/master' by 37 commits.") which really should have gone into its own branch rather than into master. These commits only exist on my lo...
Forwarded from a pessimistic researcher (Kc)
اگه حوصله ندارید مقالهی فوق العاده زیبای فوق را بخوانید
این ویدئو را ببینید
https://youtu.be/qT8NyyRgLDQ
این ویدئو را ببینید
https://youtu.be/qT8NyyRgLDQ
YouTube
Computer Science ∩ Mathematics (Type Theory) - Computerphile
As computers are used more and more to confirm proofs, is it time to take computer science's contribution to mathematics further? Dr Thorsten Altenkirch discusses Type Theory vs Set Theory.
A Longer version of this interview can be found here: https://y…
A Longer version of this interview can be found here: https://y…
Monorepo vs Multirepo
https://kinsta.com/blog/monorepo-vs-multi-repo/
سعی میکنم توی پست بعدی یه نمونه واقعی از multirepo که توی یک پروژه واقعی استفاده کردم رو شرح بدم، و همچنین اینکه چجوری مدیریتش کردم
https://kinsta.com/blog/monorepo-vs-multi-repo/
سعی میکنم توی پست بعدی یه نمونه واقعی از multirepo که توی یک پروژه واقعی استفاده کردم رو شرح بدم، و همچنین اینکه چجوری مدیریتش کردم
Kinsta®
Monorepo vs Multi-Repo: Pros and Cons of Code Repository Strategies
Monorepo vs multi-repo — which one is best? There are pros and cons to each. Learn about the benefits and drawbacks of each approach here.
ادامه پست قبل...
توی یکی از پروژهها، قرار شد سیستم چند تا سرویس داشته باشه،
یک سرویس بکاندAPI، یک سرویس بات تلگرام، یک سرویس فرانتاند، یک سرویس payment.
توی پروداکشن قرار بود همه این سرویسها به هم وصل بشن، و خب بهترین و ساده ترین راه برای مدیریت این سرویسها این بود که هر کدوم ریپازیتوری خودشون رو داشته باشن، چون ممکن بود افراد مختلفی بخوان هرکدوم رو بزنن(که همشون رو هم خودم زدم).
چون همه اینا باید با هم بالا باشن،
اولین چیزی که به ذهنم رسید این بود که یه اسکریپت بنویسم که بیاد همه اینا رو یک به یک از گیت کلون کنه، و بعد اجراشون کنه.
که خب این مشکلات خودش رو داره:
اول این که بعد از نصب اولیه، برای اپدیت هر پکیج باید جدا اون رو از گیت pull بکنی.
دوم این که هر کدوم از اینها خودشون یه ریپوی جدا هستن و جدا باید مدیریت بشن، جدا از هم اجرا بشن(هر کدوم از پروژه ها یه Dockerfile داشتن) و کلی مشکلات کوچیک و بزرگ دیگه.
کاری که در نهایت انجام دادم چی بود؟ استفاده از git submodules
برای این کار اومدم یه ریپازیتوری مادر، مثلا به اسم Main ساختم، و تمام سرویس ها رو به عنوان ساب ماژول به این ریپازیتوری اضافه کردم.
توی ریپازیتوری مادر از docker-compose استفاده کردم که میومد تمام Dockerfile های داخل هر ساب ماژول رو برمیداشت و از روی اون پروژه ها رو اجرا میکرد، به علاوه اون تمام دیتابیسها و سرویسهای مورد نیاز دیگه رو هم قبل از اونا بالا میاورد.
حالا یه مشکل دیگه که اینجا پیش اومد، آپدیت کردن هر ساب ماژول بعد از اپدیت شدن ریپوش بود.
مثلا وقتی من یه اپدیتی روی ریپازیتوری بکاند میزدم، اون نسخه ازش که توی ریپوی مادر بود آپدیت نمیشد.
که خب یه راه خوب هم برای این پیدا کردم.
از ورکفلوهای گیتهاب اکشنز استفاده کردم، یه ورکفلو برای ریپوی مادر، یه ورکفلو برای هرکدوم از سرویسها:
۱. ورکفلوی سرویسها:
کاری که میکردن این بود که هر وقت چیزی به برنچ master پوش شد و تستها پاس شدن، یک آدرسی رو صدا کنه.
۲. ورکفلوی ریپوی مادر:
اون آدرسی که گفتم صدا میشه مربوط به این بخشه، هر وقت اون ادرس صدا میشد، ورکفلوی ریپوی مادر اجرا میشد و میومد سابماژول ها رو آپدیت میکرد.
میتونید از این لینک دقیق ببینید چجوری کار میکنه.
تمام این کارا روی ریپازیتوری های گیتهاب اتفاق میوفتاد.
حالا سمت سرور چی؟
برای دفعه اول فقط کافیه ریپوی مادر رو مثلا اینجوری کلون کنید:
(اگه فرصتش رو داشتم یه نمونه پروژه دموی این شکلی میسازم و لینک گیتش رو اینجا قرار میدم)
توی یکی از پروژهها، قرار شد سیستم چند تا سرویس داشته باشه،
یک سرویس بکاندAPI، یک سرویس بات تلگرام، یک سرویس فرانتاند، یک سرویس payment.
توی پروداکشن قرار بود همه این سرویسها به هم وصل بشن، و خب بهترین و ساده ترین راه برای مدیریت این سرویسها این بود که هر کدوم ریپازیتوری خودشون رو داشته باشن، چون ممکن بود افراد مختلفی بخوان هرکدوم رو بزنن(که همشون رو هم خودم زدم).
چون همه اینا باید با هم بالا باشن،
اولین چیزی که به ذهنم رسید این بود که یه اسکریپت بنویسم که بیاد همه اینا رو یک به یک از گیت کلون کنه، و بعد اجراشون کنه.
که خب این مشکلات خودش رو داره:
اول این که بعد از نصب اولیه، برای اپدیت هر پکیج باید جدا اون رو از گیت pull بکنی.
دوم این که هر کدوم از اینها خودشون یه ریپوی جدا هستن و جدا باید مدیریت بشن، جدا از هم اجرا بشن(هر کدوم از پروژه ها یه Dockerfile داشتن) و کلی مشکلات کوچیک و بزرگ دیگه.
کاری که در نهایت انجام دادم چی بود؟ استفاده از git submodules
برای این کار اومدم یه ریپازیتوری مادر، مثلا به اسم Main ساختم، و تمام سرویس ها رو به عنوان ساب ماژول به این ریپازیتوری اضافه کردم.
توی ریپازیتوری مادر از docker-compose استفاده کردم که میومد تمام Dockerfile های داخل هر ساب ماژول رو برمیداشت و از روی اون پروژه ها رو اجرا میکرد، به علاوه اون تمام دیتابیسها و سرویسهای مورد نیاز دیگه رو هم قبل از اونا بالا میاورد.
حالا یه مشکل دیگه که اینجا پیش اومد، آپدیت کردن هر ساب ماژول بعد از اپدیت شدن ریپوش بود.
مثلا وقتی من یه اپدیتی روی ریپازیتوری بکاند میزدم، اون نسخه ازش که توی ریپوی مادر بود آپدیت نمیشد.
که خب یه راه خوب هم برای این پیدا کردم.
از ورکفلوهای گیتهاب اکشنز استفاده کردم، یه ورکفلو برای ریپوی مادر، یه ورکفلو برای هرکدوم از سرویسها:
۱. ورکفلوی سرویسها:
کاری که میکردن این بود که هر وقت چیزی به برنچ master پوش شد و تستها پاس شدن، یک آدرسی رو صدا کنه.
۲. ورکفلوی ریپوی مادر:
اون آدرسی که گفتم صدا میشه مربوط به این بخشه، هر وقت اون ادرس صدا میشد، ورکفلوی ریپوی مادر اجرا میشد و میومد سابماژول ها رو آپدیت میکرد.
میتونید از این لینک دقیق ببینید چجوری کار میکنه.
تمام این کارا روی ریپازیتوری های گیتهاب اتفاق میوفتاد.
حالا سمت سرور چی؟
برای دفعه اول فقط کافیه ریپوی مادر رو مثلا اینجوری کلون کنید:
git clone git@github.com:Username/Main.git --recurse-submodulesبعد از اون برای آپدیت پروژه ها توی سرور فقط کافی بود این شکلی ریپوهارو اپدیت کنم:
git submodules update —remote
و اینجوری هم ایمیج های داکر رو بیلد کنم و سرویس ها رو بالا بیارم:docker-compose up —build
به همین سادگی!(اگه فرصتش رو داشتم یه نمونه پروژه دموی این شکلی میسازم و لینک گیتش رو اینجا قرار میدم)
Stack Overflow
Using GitHub Actions to automatically update the repo's submodules
Title says it all. I tried using a bunch of different git commands like git submodule update --remote --merge and git submodule foreach git pull origin master which work fine on my computer, but no...
نوشتن یه پروژه با قابلیت اضافه کردن پلاگین
https://www.youtube.com/watch?v=fY3Y_xPKWNA
https://www.youtube.com/watch?v=fY3Y_xPKWNA
YouTube
a python plugin system via entrypoints (intermediate) anthony explains #128
today I show how to use importlib.metadata + setuptools entrypoints to build a small plugin system!
playlist: https://www.youtube.com/playlist?list=PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY
==========
twitch: https://twitch.tv/anthonywritescode
dicsord: http…
playlist: https://www.youtube.com/playlist?list=PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY
==========
twitch: https://twitch.tv/anthonywritescode
dicsord: http…
Reading materials
نوشتن یه پروژه با قابلیت اضافه کردن پلاگین https://www.youtube.com/watch?v=fY3Y_xPKWNA
اگه میخواید یه نمونه واقعی ببینید میتونید pytest رو ببینید:
https://github.com/pytest-dev/pytest
و پلاگین pytest-cov براش:
https://github.com/pytest-dev/pytest-cov
https://github.com/pytest-dev/pytest
و پلاگین pytest-cov براش:
https://github.com/pytest-dev/pytest-cov
GitHub
GitHub - pytest-dev/pytest: The pytest framework makes it easy to write small tests, yet scales to support complex functional testing
The pytest framework makes it easy to write small tests, yet scales to support complex functional testing - pytest-dev/pytest
اگه فکر میکردید
اینجوری ایمپورت کردن توی پایتون سریع تر و memory efficentتره، یجورایی اشتباه فکر میکردید:
https://youtu.be/ZWCyNz0fUsc
from some_module import some_funcاینجوری ایمپورت کردن توی پایتون سریع تر و memory efficentتره، یجورایی اشتباه فکر میکردید:
https://youtu.be/ZWCyNz0fUsc
YouTube
from imports aren't faster! (beginner - intermediate) anthony explains #398
I often hear the assertion that python from imports are faster because they don't need to import the whole module (or that they save memory, etc. etc.) -- I show why that's wrong and how the import system works!
playlist: https://www.youtube.com/playlis…
playlist: https://www.youtube.com/playlis…
Forwarded from نوشتههای ترمینالی
Forwarded from برنامه نویسی با علیرضا
This media is not supported in your browser
VIEW IN TELEGRAM
jless — a command-line JSON viewer
خیلی باحال میتونید داخل ترمینال یه جیسون ویور داشته باشید :)🔥
🔹 linux
🔸 mac
🔗 jless.io
#json #linux
@alirezabashi_98 🚀
خیلی باحال میتونید داخل ترمینال یه جیسون ویور داشته باشید :)🔥
🔹 linux
🔸 mac
🔗 jless.io
#json #linux
@alirezabashi_98 🚀
Forwarded from نوشتههای ترمینالی
یه برنامهای هست به اسم reflector برای arch linux که میاد به شکل خودکار و در پس زمینه میرورهای خوب برای آپدیت رو پیدا میکنه و لیست میرورهای pacman رو خودش بروز میکنه.
آموزش راهاندازیش اینجاست:
Automatically update Arch Linux mirrors by Josh Sherman
https://joshtronic.com/2021/03/14/automatically-update-arch-linux-mirrors/
(نمیگم استفاده چون یه بار راه بندازید دیگه کار میکنه)
آموزش راهاندازیش اینجاست:
Automatically update Arch Linux mirrors by Josh Sherman
https://joshtronic.com/2021/03/14/automatically-update-arch-linux-mirrors/
(نمیگم استفاده چون یه بار راه بندازید دیگه کار میکنه)
Joshtronic
Automatically update Arch Linux mirrors - Joshtronic
Forwarded from نوشتههای ترمینالی
بحث rate limit هم جالبه. ایده اینه که یه سرور (یا کلا خدمت دهنده) داریم که به یکسری مشتری میخواد خدمت بده، اما نمیخواد یه مشتری زیاد از منابع استفاده کنه که سر سرور شلوغ بشه و به بقیه منابع نرسه. برای همین میان یه محدودیت میذارن که مثلا هر اکانت میتونه روزی ۶۰۰۰ تا توییت بخونه یا ۲۰۰ تا توییت بنویسه یا این ip صد بار در روز بیشتر آب و هوا رو چک نکنه.
حالا الگوریتمهای مختلفی که باهاش rate limit پیادهسازی میشه چیا هستن؟
https://nordicapis.com/different-algorithms-to-implement-rate-limiting-in-apis/
حالا الگوریتمهای مختلفی که باهاش rate limit پیادهسازی میشه چیا هستن؟
https://nordicapis.com/different-algorithms-to-implement-rate-limiting-in-apis/
Nordic APIs
Different Algorithms to Implement Rate Limiting in APIs | Nordic APIs |
There are many ways to rate limit APIs. Here are a few examples and algorithms to help you implement rate limiting effectively.