مورد اول:
عملگر های حسابی که شامل
+ برای جمع استفاده میشه
-برای منها کردن و کم کردن
* برای ضرب کردن
/ برای تقسیم کردن استفاده میشه
// برای خارج قسمت
% برای باقی مانده
برای توان استفاده میشه
بیایید برای مثال:
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 + 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
عملگر های مقایسه ای هستن که شامل:
> بزرگتر از
< کوچکتر از
== مساوی است با
!= نامساوی
=<کوچکتر مساوی
=>بزرگتر مساوی
از اسم این عملگر ها معلومه که کارشون کلا مقایسه هست مثلا مقایسه 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
W3Schools
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
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
کتابخونه 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
🎓به مناسبت روز دانشجو🎓
😉 ۲۰ ٪ تخفیف روی همه دورههای کوئراکالج
🙈 ۲۰ ٪ شارژ حساب کوئرایی بعد از ثبتنام
🗓 از ۱۱ تا ۱۶ آذر ماه
💎 مسیرهای یادگیری:
🔘مسیر 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 ازشون بپرسن بلد نیستن چون تو عمرشون زیاد تو دیتابیس نچرخیدن و سرو کله نزدن.
۱. اولا هیچ 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 خیلی کوتاه و خوانا هستند!
شما فرض کنید مقداری تراکنش یا سفارشات داخل یک دیتابیس روزانه دارین, به همراه قیمتی که فروخته شدن و مقدارشون و زمان فروخته شدنشون, مثلا:
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 کنیم (سفارشات هر روز رو)و بعد آنالیزشون کنیم. طبق جواب سید:
سوال دوم. خب مشخصه از ما mass operation میخواد. مثل mass insert. اگه نمیگفت آپدیت شدن یا ساخته شدن رو نشون بده اونوقت از upsert استفاده میکردیم. upsert یعنی اگه وجود داره update کن اگه نه insert. پس باید upsert رو به نوعی خودمون بسازیم. upsert چیکار میکنه دقیقا؟اول سعی میکنه insert کنه بعد اگه conflict به وجود اومد update میکنه. همینو کافیه خودمون بنویسیم و در نهایت بگیم که ایا اپسرت شده یا ایسنرت. نکته خیلی مهم تر هم اینه که RETURNING داشته باشیم. خیلی مفیده این. به شما میگه چه دیتایی رو آپدیت کردین
که طبق تابعی که نوشتم میتونید متوجه شین update بوده یا insert.
نکته مهم سوال اینه که
۱. با upsert آشنا باشین
۲. با returning آشنا باشین
۳. با on conflict آشنا باشین
اولین سوال چیه؟سوال راجب 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 همینه که یکی از دو طرف تو دنیای فعلی نیست.
۱. اینپوت شما همیشه باید خیلی با ارزش باشه. با ارزش بودن به این دلیل نیست که حتما قبول شه. به این دلیله که شنیده شه و حتی راجبش بحث شه یا جلسه گذاشته شه. غیر این باشه محیطی نیست که توش بتونید پیشرفت کنید. ممکنه همه 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 هست دستور زیر رو ران کنید:
اگه نیست دنبال پکیجی به نام cloudflare-warp بگردید یا به این لینک سر بزنید.
بعد از نصب (دیگه لینوکس فرقی نداره چی باشه) اون با دستور زیر میتونید اجراش کنید:
اگه اجرا نشد و به ارور
خوردید دستور زیر اجرا کنید تا اوکی بشه:
بعدش دوباره با دستور warp-cli connect اجراش کنید و باید کار کنه.
اگه وصل شد که تبریک میگم، اگه نشد که نمیدونم واقعا برای من رو نت همراه اول اوکی. میتونید با این دستور و گشتن دنبال warp=on بفهمید درست کار میکنه یا نه.
الان یک اشتراک ۱ گیگی رایگان دارید که داره کار میکنه ولی خوب یک گیگ کمه خدایی. از این ربات (@generatewarpplusbot ) یکدونه لاینسنس بگیرید و با دستور زیر واردش کنید. قبلش با دستور warp-cli disconnect دیسکانکت شید.
دوباره کانکت بشید و چک کنید warp=on هستش یا نه :). اگه بود لذت ببرید.
نکته: با این ابزار هنوز برای دنیا دارید از ایران میایید ولی خوب دیگه فیلترینگ ندارید.
برای ویندوز، مک، آیفون، اندروید هم به این لینک سر بزنید.
با نت همراه اول تست کردم اوکیه. بقیه رو نمیدانم.
۱. اگه لینوکستون دبیان بیس و خانواده اوبنتو و پکیج منیجرتون 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 هستش یا نه :). اگه بود لذت ببرید.
نکته: با این ابزار هنوز برای دنیا دارید از ایران میایید ولی خوب دیگه فیلترینگ ندارید.
برای ویندوز، مک، آیفون، اندروید هم به این لینک سر بزنید.
با نت همراه اول تست کردم اوکیه. بقیه رو نمیدانم.
Cloudflare Docs
Linux desktop client · Cloudflare WARP client docs
You have two ways of installing WARP on Linux, depending on the distro you are using:
🧑💻PythonDev🧑💻
یک فیلترشکن خوب که همین الان خودم بهش وصل ام warp کلاودفلر عه. روش استفاده اش داخل لینوکس: ۱. اگه لینوکستون دبیان بیس و خانواده اوبنتو و پکیج منیجرتون apt هست دستور زیر رو ران کنید: bash sudo apt install cloudflare-warp اگه نیست دنبال پکیجی به نام cloudflare…
لاینسنس رباتی که گفتم حدود ۲۳ پتابایت حالا حالا تموم نمیشه.
Duck typing, Dynamic Protocol
رو میشه با هم نشون داد؛ ی جمله معروف داره که همه بلد هستند اما خیلی ها مفهومش رو نمیدونند
Duck typing
:If it looks like a duck and quacks like a duck, it’s a duck.چیزی که این جمله سعی داره بگه اینه که؛
برای ما مهم نیست object کدوم کلاس هستی اگر این متدها و فانکشنالیتی ها رو داری عضوی از ما هستی.
ما برنامه نویسها همیشه
Duck type mode
هستیم بصورت پیشفرض؛ برای ما فرقی نمیکنه طرف رشته کامپیوتر خونده یا حقوق و حسابداری و ... یا اصلا درس نخونده برای ما مهم هست که طرف توانایی کد زدن داشته باشه و اگر بتونه این کار رو به خوبی انجام بده بهش لقب برنامه نویس میدیم.
پس توی
Duck typing
اولویت متدها هستند و نه خروجی isinstance
🧑💻PythonDev🧑💻
Duck typing, Dynamic Protocol رو میشه با هم نشون داد؛ ی جمله معروف داره که همه بلد هستند اما خیلی ها مفهومش رو نمیدونند Duck typing :If it looks like a duck and quacks like a duck, it’s a duck. چیزی که این جمله سعی داره بگه اینه که؛ برای ما مهم نیست object…
Dynamic Protocol
هم از همین مفهموم استفاده میکنه؛ اگر یادتون باشه قبلا راجب پروتوکل مربوط به Sequence صحبت کردیم و گفتیم که اگر یک
class
متدهای __len__, __getitem__
رو داشته باشه میتونیم بعنوان
Sequence Protocol
رو رعایت میکنه و پایتون میتونه مثل Sequence
باهاش رفتار کنه و برخی از فانکشنالیتیهایی که پیاده سازی هم نکردیم رو بهش بده.Dynamic Protocol
ی قدم جلوتر میره و میگه اگر قرار نیست
len
اون آبجکت رو بگیری پس نیازی نیست توی اون کلاس حتی __len__
رو پیاده سازی کنی و صرف وجود __getitem__
من بهت یک سری ویژگیهای Sequence
رو میدم؛ ویژگیهایی که فقط به __getitem__
نیاز داره و نه چیز دیگه.توی مثال تصویر قبل؛ من هیچوقت
__iter__
رو پیادهسازی نکردم اما میتونم روی dp
از for loop
استفاده کنم؛ به لطف Duck typing, Dynamic Protocol
پایتون از
__getitem__
استفاده میکنه و با شروع از اندیس 0
میتونه کار __iter__
رو انجام بده و for loop
بهمون خروجی خواهد داد.برای
in
هم موضوع همین هست؛ توی کد قبلی من هیچوقت __contain__
رو پیادهسازی نکردم اما 9 in dp
خروجی میده (اینبار هم پایتون از
__getitem__
بعنوان fallback
برای __contain__
استفاده میکنه)بحثی که پیش میاد اینه که؛ آیا این موضوع اتفاق خوبی هست ؟
نه همیشه؛ خیلی وقتها میشه نسخه
optimize
شده تری رو نوشت مثلاْ توی کد قبلی اگر من لیست رو بصورت sort
قرار باشه داشته باشم همیشه میتونم بجای __contain__
که خود پایتون بهم میده و linear search
هست که مرتبه زمانی O(n)
داره از Binary Search
استفاده کنم و مرتبه زمانی رو تا O(log n)
کاهش بدم.اما تا وقتی نیازی به بهبود ندارم؛ هیچوقت
__contain__
یا ... رو خودم پیادهسازی نمیکنم و از آنچه که پایتون بهم ارائه میده استفاده میکنم (اینطوری نه نیاز به تست هست؛ نه باگ ازش در میاد و کد تمیزتری هم خواهم داشت)استفاده نادرست از تابع super().init(root) در کلاس MyownDataset است. برای حل این مشکل باید نام تابع init را به صورت صحیح و با حروف بزرگ درست کنید. تابع init دستوری است که هنگام ایجاد شیء از یک کلاس فراخوانی میشود و باید به صورت init(self, root) تعریف شود.
🧑💻PythonDev🧑💻
استفاده نادرست از تابع super().init(root) در کلاس MyownDataset است. برای حل این مشکل باید نام تابع init را به صورت صحیح و با حروف بزرگ درست کنید. تابع init دستوری است که هنگام ایجاد شیء از یک کلاس فراخوانی میشود و باید به صورت init(self, root) تعریف شود.
در کلاس MyownDataset خودتان، شما تابع init(root) به طور اشتباه تعریف کردهاید. باید آن را به صورت init(self, root) تغییر دهید تا کد شما به صورت صحیح کار کند
📚یک ابزار مفید که هم مطالب سر کلاس رو برات جزوه میکنه هم مطالب مهم رو برات bold میکنه و براتون فلش کارت درست میکنه.
دیگه چی ازین بهتر!
👇🏻👇🏻👇🏻
Study Fetch | Revolutionize Your Learning With Ai
https://www.studyfetch.com/
=..=..=..=..=..=..=..=..=..=..=..=..=..=..=..=..=..=
دیگه چی ازین بهتر!
👇🏻👇🏻👇🏻
Study Fetch | Revolutionize Your Learning With Ai
https://www.studyfetch.com/
=..=..=..=..=..=..=..=..=..=..=..=..=..=..=..=..=..=
نحوه پورت کردن کد پایتون 2 به پایتون 3
خلاصه این طور هست که پایتون 2 اوایل سال 2020 به پایان عمر رسمی خودش رسید و این طور هستش که هیچ گزارش ، رفع اشکال یا تغییر جدیدی تو پایتون 2 ایجاد نشد و دیگر پشتیبانی نمیشه
ولی این راهنما که میخوام بگم بهتون برا ارائه مسیر به پایتون 3 برای کد های شما در نظر گرفته شده که شامل سازگاری با پایتون 3 به عنوان اولین قدم هم میشه
ولی اگه دنبال پوریت یک ماژول افزونه به جای کد پایتون خالص هستین لطفا به انتقال ماژول های پسوند تو پایتون 3 مراجعه کنین
فهرست پستی بایگانی شده با انتقال پایتون ممکه راهنمای مفیدی براتون باشه
خوب بریم سراغ توضیح
برای دستیابی به سازگاری python 2/3 تو یه پایه کد مراحل اصلی به روش زیر هستن
اول اینکه فقط نگران پشتیبانی از پایتون 2.7 باشین بعدش مطمئن بشین که پوشش ازمایشی خیلی خوبه هم داره که coverage.py میتونه کمک کنه
python -m pip install coverage
خلاصه این طور هست که پایتون 2 اوایل سال 2020 به پایان عمر رسمی خودش رسید و این طور هستش که هیچ گزارش ، رفع اشکال یا تغییر جدیدی تو پایتون 2 ایجاد نشد و دیگر پشتیبانی نمیشه
ولی این راهنما که میخوام بگم بهتون برا ارائه مسیر به پایتون 3 برای کد های شما در نظر گرفته شده که شامل سازگاری با پایتون 3 به عنوان اولین قدم هم میشه
ولی اگه دنبال پوریت یک ماژول افزونه به جای کد پایتون خالص هستین لطفا به انتقال ماژول های پسوند تو پایتون 3 مراجعه کنین
فهرست پستی بایگانی شده با انتقال پایتون ممکه راهنمای مفیدی براتون باشه
خوب بریم سراغ توضیح
برای دستیابی به سازگاری python 2/3 تو یه پایه کد مراحل اصلی به روش زیر هستن
اول اینکه فقط نگران پشتیبانی از پایتون 2.7 باشین بعدش مطمئن بشین که پوشش ازمایشی خیلی خوبه هم داره که coverage.py میتونه کمک کنه
python -m pip install coverage
🧑💻PythonDev🧑💻
نحوه پورت کردن کد پایتون 2 به پایتون 3 خلاصه این طور هست که پایتون 2 اوایل سال 2020 به پایان عمر رسمی خودش رسید و این طور هستش که هیچ گزارش ، رفع اشکال یا تغییر جدیدی تو پایتون 2 ایجاد نشد و دیگر پشتیبانی نمیشه ولی این راهنما که میخوام بگم بهتون برا ارائه…
خوب با تفاوت های پایتون 2 و 3 اشنا بشین
اول از همه از futurize (یا Moderinze ) برای به روز رسانی کردن کد هاتون استفاده کنید مثل مثال زیر
python -m pip install future
خوب بعدش از pylint استفاده کنین تا کامل مطمئن بشین که تو پشتیبانی پایتون 3 خود عقب نشینی نمی کنین
python -m pip install pylint
از caniusepython3 استفاده کنین تا متوجه بشین که کدام یکی از وابستگی های شما استفاده از python 3 رو مسدود میکنه
python -m pip install caniusepython3
وقتی که وابستگی هاتون دیگه شما رو مسدود نکرد از یکپارچه سازی مداوم استفاده کنین تا مطمئن بشین که با پایتون 2 و 3 سازگاری هستین (tox میتونه به ازمایش در برابر چندیدن نسخه از پایتون بهتون کمک کنه )
python -m pip install tox
استفاده از بررسی نوع استاتیک اختیاری رو هم در نظر داشته باشین تا مطمئن شوین استفاده از نوع شما تو هر دو پایتون هم 2 و هم 3 کار میکنه ( به عنوان مثال بخوام براتون بگم از mypy واسه بررسی تایپ خودتون تو پایتون 2 و3 استفاده کنین )
python -m pip install mypy
یه نکته که باید بهش توجه کنین استفاده از python -m pip install تضمین میکنه براتون که pip که فراخوانی می کنید همون pip هست که برای پایتون در حال استفاده نصب شده میتونه یه pip تو سطح سیستم هاتون باشه یا تو یه محیط مجازی نصب شده باشه
اول از همه از futurize (یا Moderinze ) برای به روز رسانی کردن کد هاتون استفاده کنید مثل مثال زیر
python -m pip install future
خوب بعدش از pylint استفاده کنین تا کامل مطمئن بشین که تو پشتیبانی پایتون 3 خود عقب نشینی نمی کنین
python -m pip install pylint
از caniusepython3 استفاده کنین تا متوجه بشین که کدام یکی از وابستگی های شما استفاده از python 3 رو مسدود میکنه
python -m pip install caniusepython3
وقتی که وابستگی هاتون دیگه شما رو مسدود نکرد از یکپارچه سازی مداوم استفاده کنین تا مطمئن بشین که با پایتون 2 و 3 سازگاری هستین (tox میتونه به ازمایش در برابر چندیدن نسخه از پایتون بهتون کمک کنه )
python -m pip install tox
استفاده از بررسی نوع استاتیک اختیاری رو هم در نظر داشته باشین تا مطمئن شوین استفاده از نوع شما تو هر دو پایتون هم 2 و هم 3 کار میکنه ( به عنوان مثال بخوام براتون بگم از mypy واسه بررسی تایپ خودتون تو پایتون 2 و3 استفاده کنین )
python -m pip install mypy
یه نکته که باید بهش توجه کنین استفاده از python -m pip install تضمین میکنه براتون که pip که فراخوانی می کنید همون pip هست که برای پایتون در حال استفاده نصب شده میتونه یه pip تو سطح سیستم هاتون باشه یا تو یه محیط مجازی نصب شده باشه