🧑‍💻PythonDev🧑‍💻
365 subscribers
86 photos
3 videos
15 files
78 links
Python tips and tricks
The Good, Bad and the Ugly

📚توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

👨‍💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)👨‍💻


@Mtio975
Download Telegram
در پایتون، متغیرها یک نام نمادین هستند که مرجع یا اشاره‌گر یک شیء هستند.
متغیرها برای نشون دادن اشیاء با اون نام استفاده میشن.
#Fxl
#variable
بیایید باهم چند مثال تحلیل کنیم :



در این تصویر ، متغیر a به یک شیء صحیح اشاره داره.

#Fxl
فرض کنید مقدار صحیح 70 رو به یک متغیر جدید b اختصاص میدیم.

a = 70
b = a

متغیر b به همون شیء اشاره می‌کنه که به a اشاره می‌کنه ، چون پایتون شیء دیگری ایجاد نمی‌کنه.

#Fxl
بیایید مقدار جدید رو به b اختصاص بدیم . حالا هر دو متغیر به اشیاء مختلف ارجاع داده میشن.

a =70
b =90

اگه متغیر یکسانی رو به دو مقدار متفاوت اختصاص بدیم ، پایتون به‌طور مؤثر حافظه رو مدیریت می‌کنه.

#Fxl
هویت شیء در پایتون :

در پایتون، هر شیء ایجادشده به‌طور منحصربه‌فرد مشخص میشه.
پایتون تضمین می‌کنه که هیچ دو شیء شناسه یکسانی ندارند.
تابع id () داخلی، برای شناسایی شناسه شیء استفاده میشه.
به مثال توجه کنید.

#Fxl
خروجی :

ما b = a، a و b رو هر دو به یک شیء یکسان اختصاص میدیم.
وقتی تابع id () رو بررسی می‌کنیم ، همون شماره رو برمی‌گردونه.
ما a رو به 500 واگذار می‌کنیم. و بعد به شناسه جدید شیء اشاره کرد.

#Fxl
بنظرم به جای Makefile از justfile استفاده کنید بهتره, به دو دلیل:

۱. مولتی پلتفورمه
۲. خیلی سینتکس بهتری داره

تو هر پروژه ای, بنظرم باید کامندی وجود داشته باشه که:
۱. دیتا سپل جنریت کنه برای تست دستی
۲. دیتابیس رو ریست کنه با دیتای جدید
۳. تیبلا رو مجدد بسازه
۴. ماگریتی که نوشتین رو بتونه تست کنه
۵. اینستال پروژه هندل شه
۶. برای ران تست هم کامند جدا باید باشه

همیشه ترجیح میدم از poetry استفاده کنم چون خودش پکیج میسازه برام و lockfile داره و میتونم توش خودم پکیج بسازم که به صورت live از روش بخونه و آپدیتش کنه (مثل shared library بین سرویسا)

Justfile: https://github.com/casey/just


برای تست ماگریشنتون:
۱.  باید تیبل هاتون رو پاک کنید
۲. باید برید برنچی که ازش برنچ میگیرین مثلا dev
۳. دیتابیس رو بسازید با اون برنچ و migration هایی که بوده اونجا رو اسکیپ کنید
۴. برگردین برنچی که کار میکردین روش
۵. ماگریشن رو حالا ران کنید تا اخرین نسخه
۶. دیتابیسو چک کنید ببینید چه بلایی اوردین سره دیتابیس :))

بهتره خودکار انجام شه کل این پروسس با یک کامند
🥚 ایسترگ‌ها (Easter egg) و سیکرت‌های جالب پایتون!

1️⃣ - توی ترمینال یا CMD، واسه تست پایتونتون، کامند زیر رو ران کنید و پروگرم hello world اجرا میشه.

$ python -m hello
Hello World!

2️⃣ - برای چاپ کردن ذن پایتون، کافیه ماژول this رو ایمپورت کنید و یه لیست از استعاره‌های بامفهوم برنامه‌نویسی رو واستون چاپ می‌کنه.

$ python -c 'import this'

👈
ماژول ذن this.py در ریپازیتوری CPython

3️⃣ - اگه حوصلتون سر رفته و می‌خواید چند تا کامیک ساینس-طور ببینید، کامند زیر رو ران کنید. بهتون دسترسی به آرشیو xkcd میده که محفلیه پر از میم‌ها و جک‌های دنیای خودمون.

$ python -c 'import antigravity'

4️⃣
- اگه می‌خواید از فیچر‌هایی که قراره در آینده به پایتون اضافه شه استفاده کنید، می‌تونید از future استفاده کنید. مثلا توی پایتون۲، پرینت یه تابع نبود ولی اگه ماژول زیر رو ایمپورت می‌کردید، مفسر پایتون۲ از این به بعد به دید یه فانکشن به print نگاه می‌کرد و باید از پرانتز جلوی پرینت استفاده می‌کردید.

#!/usr/bin/python2
from future import print_function

حالا نکته جالبش اینجاس که ما توی تقریبا تمام زبان هایی که بیسشون C هست، از {} بعنوان تعیین اسکوپ فانکشن، شروط، کلس‌ها و.. استفاده می‌کنیم که توی پایتون به این شکل نیست و block-indentation مهمه. حالا اگه سعی کنید braces رو از future ایمپورت کنید میاد و اینجوری بهتون تیکه میندازه..

>>> from future import braces
SyntaxError: not a chance

5️⃣ - می‌دونستید میشه هش بی‌نهایت و Not-a-numbert رو توی پایتون نشون داد..؟! جالبه نه؟

>>> hash(float('inf'))
314159
>>> hash(float('nan'))
0

👈 اینجا جاییه که بعنوان دوتا ثابت در کدبیس CPython تعریف شدن

6️⃣ - میدونستید یه جایگزین جالب واسه آپریشن =! (نامساوی) توی پایتون هست؟!

>>> 1 != 0
True
>>> from future import barry_as_FLUFL
>>> 1 != 0
SyntaxtError: with Barry as BDFL, use '<>' instead of '!='
>>> 1 <> 0
True
>>> 2 <> 2
False

شاید واستون جالب باشه ولی این قضیه بعد از اینکه Maintain پروژه پایتون توسط Guido به Barry داده شد، رواج پیدا کرد. واسش حتی PEP401 هم نوشتن که من (شخصا) موجودیتش رو درک نکردم ولی ارزش خوندن داره و نکات جالبی درباره تاریخچه پایتون میگه. :)

=> منبع اصلی این پست در Medium
🧑‍💻PythonDev🧑‍💻
خروجی : ما b = a، a و b رو هر دو به یک شیء یکسان اختصاص میدیم. وقتی تابع id () رو بررسی می‌کنیم ، همون شماره رو برمی‌گردونه. ما a رو به 500 واگذار می‌کنیم. و بعد به شناسه جدید شیء اشاره کرد. #Fxl
خب شبتون بخیر دوستان شنیدم که تو شهر متغیر ها دارید میچرخید 😆

اومدم یه درس کوچولو بهتون بدم و در عین حال که ساده هست میتونه جذاب هم باشه.

بحث عملگر ها) Operators(:از اسم بحث مشخصه که قراره کلی محاسبات داشته باشیم.
عملگر ها در اصل برای پردازش های حسابی و منطقی استفاده می‌شود.
عملگر ها سمبل هایی هستن که برای محاسبات و ریاضیات بیشتر مورد استفاده قرار میگیرن.
شما برای به جمع رسوندن 2 عدد صحیح نیاز دارید از یک عملگر استفاده کنید.
این عملگر چی میتونه باشه؟ یک + آره با یک + میتونید دو عدد رو به جمع برسونید
پس عملگرها در پایتون بر اساس تعاریف بالا شامل:
+
-
*
/
هستند اما تعداد و دایره عملگر ها فقط به این 4 تا محدود نمیشه.
درواقع ما انواع عملگر داریم که شامل موارد زیر هستن :
1.عملگر های حسابی
2.عملگر های مقایسه ای
3.عملگر های منطقی
4.عملگر های بیتی
5.عملگر های خاص
6.عملگر های تخصیص

در این درس فقط مورد اول و دوم رو قراره کار بکنیم و مابقی رو در جلسات آینده کار خواهیم کرد.



**بیایین پست بعدی بریم واس روستای عملگرها تو شهر متغیر ها یه هوایی تازه کنیم

#Operators
#Sxl
مورد اول:
عملگر های حسابی که شامل
+ برای جمع استفاده میشه
-برای منها کردن و کم کردن
* برای ضرب کردن
/ برای تقسیم کردن استفاده میشه
// برای خارج قسمت
% برای باقی مانده
برای توان استفاده میشه


بیایید برای مثال:
2 + 2
3 - 2
6 * 3
9 / 3
9 // 3
9 % 6
2
2

این عملگر هارو اگر با متغیر ها تلفیق کنید چه شود!!!
مثلا:
Input:
X = 10
Y = 20
Print (X * Y)

Output= 200

دوتا متغیر تعریف کردیم به اسم های X و Y برای هر دو متغیر 2 عدد لحاظ کردیم با عملگر = یعنی برابری دادیم اون عدد رو با اون متغیر بعد اومدیم پرینت گرفتیم)چاپ گرفتیم( ضرب این 2 متغیر رو.

یا به این مثال توجه کنید:
A = 100
B = 10
Print (A / B)

Output : 100


بریم برای پست بعدی.
#Operators
#python
#Sxl
مورد دوم :
عملگر های مقایسه ای هستن که شامل:
> بزرگتر از
< کوچکتر از
== مساوی است با
!= نامساوی
=<کوچکتر مساوی
=>بزرگتر مساوی
از اسم این عملگر ها معلومه که کارشون کلا مقایسه هست مثلا مقایسه 2 عدد باهم.مثلا در قسمت شرط دهی می‌نویسیم اگر فلان مورد برابر با فلان مورد باشد فلان چیز رو پرینت کن یا اگر فلان عدد بزرگتر از فلان عدد باشد بهمان چیز رو چاپ کن
در پست های بعدی با مثال های تحلیلی و کاربردی درسارو تکمیل تر میکنیم.


اینجا یه لینکی از عملگرها در پایتون میزارم براتون که بتونید یه مطالعه ای هم داشته باشید.
https://www.w3schools.com/python/python_operators.asp


یه مقاله خوبم براتون آوردم که میتونه براتون مفید باشه:
Operators in Python:
https://www.linkedin.com/pulse/operators-python-dharan-kumar-bera?utm_source=share&utm_medium=member_android&utm_campaign=share_via

#Sxl
This media is not supported in your browser
VIEW IN TELEGRAM
بدون نوشتن کد، داده‌هاتُ توی پایتون تحلیل کن

کتابخونه Bamboolib از اون کتابخونه‌هایی هست با این کتابخونه هر کسی میتونه بدون برنامه‌نویسی، داده‌هاش رو با پایتون تحلیل کنه.
این کتابخونه خودش کدهارو به صورت خودکار تولید میکنه که با خوندن این کدها، میتونیم حتی کدنویسی رو یاد بگیریم.
در اصل کتابخونه Bamboolib یک GUI برای Pandas هست که با Jupyter Notebook میشه ازش استفاده کرد.

https://pypi.org/project/bamboolib/
https://bamboolib.8080labs.com/
https://towardsdatascience.com/bamboolib-one-of-the-most-useful-python-libraries-you-have-ever-seen-6ce331685bb7
https://medium.com/analytics-vidhya/bamboolib-a-gui-for-pandas-e5109f7bccff
🔮 برای آینده کُد بنویس
🎓به مناسبت روز دانشجو
🎓

😉 ۲۰ ٪ تخفیف روی همه دوره‌های کوئراکالج
🙈 ۲۰ ٪ شارژ حساب کوئرایی بعد از ثبت‌نام

🗓 از ۱۱ تا ۱۶ آذر ماه

💎 مسیرهای یادگیری:
🔘مسیر Python - Django
🔘مسیر php- Laravel
🔘مسیر Golang
🔘مسیر Front-End
🔘مسیر Machine Learning
🔘مسیر المپیاد
🔘دوره‌های عمومی(Git-Linux-Database-NoSQL)

در کنار هم، پیش به سوی برنامه‌نویس شدن:
🔗 https://quera.org/r/ce8yr


#Quera #Quera_College
@Quera_ir
دوستانی که میپرسن چطور من sql یاد گرفتم:

۱. اولا هیچ query رو اخیرا دیگه رو اول تو orm به صورت کد نمینویسم مگه اینکه یک چیز خیلی ابتدایی باشه. اول همیشه با دیتابیس مینویسم بعد میام رو orm معادلشو مینویسم. این عادتو حتما ترک بدین و به محیط دیتابیس عادت کنید.

۲. کتاب خاصی نخوندم. اگه کسی میشناسه معرفی کنه بقیه هم استفاده کنند. ولی با کتاب خواندن حداقل تو این مورد به جایی نمیرسید. باید تمرین کنید.  بیشتر داک خوندم یا مقاله یا تحقیق کردم رسیدم به یک چیزی.

۳. همین query هایی که طی روز مینویسید تلاش کنید بهینه و با ۱ هیت بنویسید. با ۱ هیت نوشتن دلیل بر این نمیشه که query بهینه شد. explain و analyze رو بزنید ببینید چه اتفاقی داره میفته. با مفاهیم داخل دیتابیس آشنا باشین. بدونید cost estimate و execution plan وactual time و rows and width و buffers چیه. صرفا سریع ران شدن هم دلیل بر آپتیمایز بودن یک query نیست. ممکنه مموری خیلی زیادی مصرف کنه. پس متریک های دیتابیس رو یاد بگیرین. و کار کردن باهاش رو. مثل یک زمین بازی میمونه هرچی بیشتر توش بازی کنید بیشتر یاد میگیرین.

آیا مهمه؟
صد در صد 🙂 اخیرا دیدم تو community پایتون خیلی مانور میرن رو اینکه پایتون رو بشدت دیپ شن. بد نیستا ولی اولویت بندی کنید از بقیه چیزا غافل نشید. خیلیا که با orm کار میکنن اگه ۵ تا سوال sql ازشون بپرسن بلد نیستن چون تو عمرشون زیاد تو دیتابیس نچرخیدن و سرو کله نزدن.
پست امروز رو با دو سوال سطح سخت SQL شروع میکنم:

شما فرض کنید مقداری تراکنش یا سفارشات داخل یک دیتابیس روزانه دارین, به همراه قیمتی که فروخته شدن و مقدارشون و زمان فروخته شدنشون, مثلا:

id  product_id  product_amount  total_price   created_at  
1     1                     20                      100,000                   ...     


۱. یک query بزنید که تغییر قیمت رو به صورت روزانه به ازای تمام record ها دربیاره. و البته میانگین قیمت اون روز 🙂 با فرض اینکه فقط برای یک product id رو میخواین در بیارین (product_id = 1). تغییرات قیمت یعنی مثلا امروز پروداکت id=1 به ازای هر یک دونه اش  ۱۰۰ تومن بوده میانگینش, فردا شده ۹۹ تومن, پس ۱ تومن کم شده. اینو باید تو query اول به دست بیارین. که میشه -۱ مثلا. یا میتونه مثبت هم باشه. یعنی نسبت به روز قبلش باید حساب کنید ارزون شده یا گرون و چقدر؟.

۲. تیمی که سفارشات رو حاضر میکنه سفارشات رو export میگیره. همچنین داخل مغازه هم سفارشاتی میرسه. سپس مجددا دیتا رو ایمپورت میکنه. حالا تیم میخواد یک import به برنامه بده که اگه سفارش وجود داشت با مقادیر جدیدی که داخل اکسل داده آپدیتش کنه و اگه وجود نداشت بسازش. و در آخر بعد از ایمپورت متوجه شه چه سفارشاتی آپدیت شده و چه سفارشاتی ساخته شده. این رو با 1 query بنویسید.

راهنمایی:‌ دیتابیسمون PostgreSQL هست.وقتی تو رزومتون میزنید PostgreSQL بلدین یعنی دقیقا همچین Query هایی رو باید باهاشون آشنا باشین!
راهنمایی دوم:‌این دو query خیلی کوتاه و خوانا هستند!
🧑‍💻PythonDev🧑‍💻
پست امروز رو با دو سوال سطح سخت SQL شروع میکنم: شما فرض کنید مقداری تراکنش یا سفارشات داخل یک دیتابیس روزانه دارین, به همراه قیمتی که فروخته شدن و مقدارشون و زمان فروخته شدنشون, مثلا: id  product_id  product_amount  total_price   created_at   1     1  …
سید جواب سوال یک رو داد. اما چطوری جواب سوالا رو بدیم؟‌بحث میزان آشنایی با SQL و PostgreSQL هست. با توابع و window function ها اشنایی داشته باشیم. چیزایی که میتونه PostgreSQL رو خاص کنه.

اولین سوال چیه؟‌سوال راجب Financial analysis هست. اگه با LAG آشنا باشین دقیقا کاربرد اساسیش همینه. هرجایی که comparision و analysis بر اساس دیتا های قبلی و بعدی باشه میتونیم از lag استفاده کنیم. برای Performance Metric هم خیلی به درد میخوره! یا برای آنالیز Sequence ای از دیتا ها. مثلا آنالیز کن کاربر هایی که ۵ تا سفارش دادن ایا هر سفارششون بزرگ تر از سفارش قبل هست یا نه؟‌ (مثلا سفارش پنجیمشون بزرگ تر از چهارمیه؟) کل این با یک queryبدست میاد. معمولا هم خیلی خوانایی بالایی داره. یک نکته دیگه این سوال استفاده از cte هست چون اول باید دیتا رو batch کنیم (سفارشات هر روز رو)‌و بعد آنالیزشون کنیم. طبق جواب سید:


WITH DailyPrices AS (
    SELECT  DATE(created_at) AS date,  AVG(total_price / product_amount) AS average_price
    FROM orders WHERE product_id = 1 GROUP BY DATE(created_at)
)
SELECT
    date,
    average_price,
    average_price - LAG(average_price) OVER (ORDER BY date) AS price_change
FROM
    DailyPrices;


سوال دوم. خب مشخصه از ما mass operation میخواد. مثل mass insert. اگه نمیگفت آپدیت شدن یا ساخته شدن رو نشون بده اونوقت از upsert استفاده میکردیم. upsert یعنی اگه وجود داره update کن اگه نه insert.  پس باید upsert رو به نوعی خودمون بسازیم. upsert چیکار میکنه دقیقا؟‌اول سعی میکنه insert کنه بعد اگه conflict به وجود اومد update میکنه.  همینو کافیه خودمون بنویسیم و در نهایت بگیم که ایا اپسرت شده یا ایسنرت. نکته خیلی مهم تر هم اینه که RETURNING داشته باشیم. خیلی مفیده این. به شما میگه چه دیتایی رو آپدیت کردین


INSERT INTO product_order (id, user_id, product_id, product_amount, total_price, status)
VALUES
    (UUID..., 'txn1001', 1, 1.5, 15000, "DONE"),
    (UUID..., 'txn1002', 1, 2.0, 20000, "DONE"),
    (UUID..., 'txn1003', 1, 0.75, 7500, "DONE")
ON CONFLICT (id)
DO UPDATE SET
    status = EXCLUDED.status,
RETURNING id, user_id, product_id, product_amount, total_price, status
CASE WHEN xmax::text::int > 0 THEN 'Update' ELSE 'Insert' END AS operation_type;


که طبق تابعی که نوشتم  میتونید متوجه شین update بوده یا insert.
نکته مهم سوال اینه که
۱. با upsert آشنا باشین
۲. با returning آشنا باشین
۳. با on conflict آشنا باشین
یک سری نظرا رو شنیدم. من نظره خودمو میگم که بیشتر بحث کنیم, ببینید وقتی conflict وجود داره چند اشتباه ممکنه دو طرف بکنند که بهتره بررسیشون کنیم:

۱. اینپوت شما همیشه باید خیلی با ارزش باشه. با ارزش بودن به این دلیل نیست که حتما قبول شه. به این دلیله که شنیده شه و حتی راجبش بحث شه یا جلسه گذاشته شه. غیر این باشه محیطی نیست که توش بتونید پیشرفت کنید. ممکنه همه input هاتونم ریجکت شه و این موضوعو نباید سوءبرداشت شخصی ازش داشته باشین. پس اگه جای تصمیم گیرنده هستین این حس با ارزش بودن اینپوت و شنیدنشو منتقل کنید. فیدبک ها همیشه باعث بهتر شدن یک سیستم میشن.

۲. همیشه فکر میکنن ۲ تا نقطه مقابل هم وجود داره تو conflict در صورتی که اصلا اینطور نیست. مثلا کارفرما میگه اقا من این پروداکتو باید تا فلان روز برسونم سریع کدشو بزن. شمام میگی نه ریفکتور میخواد اصولی نیست. منتهی تو این سناریو یک راه حل سومی هست: که شما با اون فرد بشینی مذاکره کنی و بحث کنی. ممکنه یک نقطه وسط برسین. در درجه اول باید درک کنید طرف مقابل چی میگه. در درجه دوم راهکار خودتونو به نحوی بچرخونید که با هدف اون همسو باشه. مثلا این arguement اش این میشه که اقا من باید رو هر فیچر جدید دستی تست کنم که کار میکنه. من argue میکنم که اگه تست خودکار بنویسم وقت کمتری مصرف میکنم. پس نظرت چیه شرط ببندیم برای این فیچر جدید که من سریعتر میرسونم با داشتن تست؟‌ سرعت توسعه منو بیشتر میکنه. یا مثلا بگین اقا من این قسمت جدیدی که دارم اضافه میکنم رو تمیز کد میزنم. کاری ندارم به بقیه. و کارمو هم سریع تر میرسونم. ممکنه کد consistent نشه و یک دفعه خیلی متفاوت شه ولی بهترین راه کاره. اینطوری هم کارو سریع میرسونم هم کم کم ریفکتور میشه با فیچر های جدید تری که اضافه میکنیم به این پروژه.

۳. سطح علمی طرف مقابل رو در نظر نمیگیرین و یا pros یا cons رو خوب نمیگن. من به عنوان یک مهندس نرم افزار وظیفه دارم long time side effect این کار اشتباهو بگم. که تصمیم گیرنده درک بهتری داشته باشه. از حرفام با سند و مدرک و مقاله دفاع کنم. صرفا حرف شما به تنهایی ممکنه اعتبار نداشته باشه. همیشه وقتی یک بحثی میکشین وسط یادتون باشه هم pros باید گفته شه هم cons که شنونده احساس نکنه شما دارین احساسی تصمیم میگیرین و منطقی تصمیم گرفته شه.

۴. سعی کنید brain storming کنید. سعی کنید حوادث رو ارتباط بدین با مشکلی که دارین. مثلا بگین فلان باگ و فلان باگ و فلان باگ به وجود اومد چون اینکارا رو نکردیم. پس بهتره بکنیم.  هیچوقت یارکشی نکنید. بگید فلانی همیشه conflict منو رد میکنه یا فلان. این بد ترین چیزیه تو یک تیم. یادتون باشه اینپوتتون قرار نیست همیشه قبول شه. ولی باید با ارزش باشه.  یک کامنتی خیلی قشنگ نوشتن: ‌قاتل کار تیمی miscommunicationعه! و برعکسش هم صدق میکنه. برای همین brain storming خیلی میتونه مفید باشه.

۵. از دنیای فانتری فاصله بگیرین. واقعبین باشید. مثلا دیدم برنامه نویسا یک فریم ورک یا یک فیچر اصلا به دردشون نمیخورد ولی اضافه کردن چرا؟‌چون خوششون میاد. چون میخوان یادش بگیرن. این بد ترین کاریه که میتونید تو یک محیط حرفه ای کنید. یا مثلا میرن premature optimization انجام میدن و وقتشونو هدر میدن برای جایی که اصلا نیازی نبوده. یا بیش از حد کلین کد میزنن رو پروداکتی که requirement اش روز به روز تغییر میکنه. پس همیشه سعی کنید از دید model business پروداکتتون به محصولتون نگاه کنید تا بهترین کد هارو بنویسید 🙂 خیلی وقتا دلیل conflict همینه که یکی از دو طرف تو دنیای فعلی نیست.
This media is not supported in your browser
VIEW IN TELEGRAM
آپدیت جدید VsCode یک سری فیچر جدید اضافه کرده که به نظرم اونی که مهم‌تره ( شاید ) این floating window عه. :)
یک فیلترشکن خوب که همین الان خودم بهش وصل ام warp کلاودفلر عه. روش استفاده اش داخل لینوکس:
۱. اگه لینوکستون دبیان بیس و خانواده اوبنتو و پکیج منیجرتون apt هست دستور زیر رو ران کنید:
bash 
sudo apt install cloudflare-warp

اگه نیست دنبال پکیجی به نام cloudflare-warp بگردید یا به این لینک سر بزنید.

بعد از نصب (دیگه لینوکس فرقی نداره چی باشه) اون با دستور زیر میتونید اجراش کنید:
warp-cli connect

اگه اجرا نشد و به ارور
Error: "Unable to connect to CloudflareWARP daemon. Maybe the daemon is not running?"

خوردید دستور زیر اجرا کنید تا اوکی بشه:
sudo systemctl enable --now warp-svc.service

بعدش دوباره با دستور warp-cli connect اجراش کنید و باید کار کنه.
اگه وصل شد که تبریک میگم، اگه نشد که نمیدونم واقعا برای من رو نت همراه اول اوکی. میتونید با این دستور و گشتن دنبال warp=on بفهمید درست کار میکنه یا نه.
curl https://www.cloudflare.com/cdn-cgi/trace/


الان یک اشتراک ۱ گیگی رایگان دارید که داره کار میکنه ولی خوب یک گیگ کمه خدایی. از این ربات (@generatewarpplusbot ) یکدونه لاینسنس بگیرید و با دستور زیر واردش کنید. قبلش با دستور warp-cli disconnect دیسکانکت شید.
warp-cli set-license <your-warp-plus-license-key>


دوباره کانکت بشید و چک کنید warp=on هستش یا نه :). اگه بود لذت ببرید.
نکته: با این ابزار هنوز برای دنیا دارید از ایران میایید ولی خوب دیگه فیلترینگ ندارید.

برای ویندوز، مک، آیفون، اندروید هم به این لینک سر بزنید.

با نت همراه اول تست کردم اوکیه. بقیه رو نمیدانم.