Python Hints
#Quick من این اخطار هارو همیشه زودتر به دوستان نزدیکم میگم گفتم ازین به بعد بعضیهاش رو اینجا هم بگم: اولین : asyncio رو هرچه زودتر یاد بگیرید، پترنها و مفاهیم برنامهنویسی Async, Parallel, Concurent قبلتر تأکید زیادی روش نداشتم، اما دیر نیست (توی…
#Quick
برای دوستانی که تازه میخوان یاد بگیرند این موضوع رو خیلی مهمه که روی پایتون 3.9 به بعد تمرین کنید و یاد بگیرید این موضوع رو
برای همین کتابی که توی پست pin شده معرفی کردم رو فقط تایید میکنم نسخه پایتون اون کتاب 3.10 هست با تغییرات و باگهای رفع شده آموزش میده.
برای دوستانی که تازه میخوان یاد بگیرند این موضوع رو خیلی مهمه که روی پایتون 3.9 به بعد تمرین کنید و یاد بگیرید این موضوع رو
برای همین کتابی که توی پست pin شده معرفی کردم رو فقط تایید میکنم نسخه پایتون اون کتاب 3.10 هست با تغییرات و باگهای رفع شده آموزش میده.
👍23❤2👎1
#Quick
از پایتون درست استفاده کنید.
دلیل این اختلاف زمانی و حافظه رو دوستان به خوبی توی کامنتها توضیح دادند پس دیگه من صحبت نمیکنم راجبش.
اما غیر از مورد اول :
که بهینه ترین حالت محاسبات و استفاده درست از numpy هست (وقتی میخواهید روی آرایه قبلی بنویسید) باقی موارد هر ۲ باعث خطا و terminate شدن کولب شدند.
شاید فکر کنید ۱ میلیارد عدد بزرگی هست :
۱- بستگی به موضوع داره ولی توی دنیای فعلی خیر واقعاً بزرگ نیست
۲- مدل
۳-
رو همیشه باید توی بدترین حالات محاسبه کرد (برای همین Big O رو یاد گرفتیم)
از پایتون درست استفاده کنید.
دلیل این اختلاف زمانی و حافظه رو دوستان به خوبی توی کامنتها توضیح دادند پس دیگه من صحبت نمیکنم راجبش.
اما غیر از مورد اول :
x1 *= 2
که بهینه ترین حالت محاسبات و استفاده درست از numpy هست (وقتی میخواهید روی آرایه قبلی بنویسید) باقی موارد هر ۲ باعث خطا و terminate شدن کولب شدند.
شاید فکر کنید ۱ میلیارد عدد بزرگی هست :
۱- بستگی به موضوع داره ولی توی دنیای فعلی خیر واقعاً بزرگ نیست
۲- مدل
LLAMA 2
(تلفظ : لاما) که چندروز پیش توسط meta
معرفی شد کوچکترینش 7 میلیارد و بزرگترینش 70 میلیارد پارامتر داره.۳-
performance
رو همیشه باید توی بدترین حالات محاسبه کرد (برای همین Big O رو یاد گرفتیم)
❤🔥29👍20🤪5✍3👎2⚡1❤1👏1💘1
Python Hints
من محمد عباسی (@abbasi_ai) یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو مینویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره) سعی میکنم نکاتی که فکر میکنم مهم هست تغییراتی که توی نسخههای اخیر…
#موقت
#Quick
دوستان من لینکدین رو هرروز چک نمیکنم مگر اینکه پیام یا کاری داشته باشم
اگر connect request فرستادید و طول کشید برای
Accept
کردن، عذرخواهی میکنم 🌹
توی مواردی که نخوام accept بزنم (پروفایل مشخص نیست، از نظر شغلی و ... به هم نمیخوریم مثلا مورد داشتیم طرف زده بود مشاور املاک، درخواست داده بود 😂) خودم reject میزنم. اما اگر ببینم بدون پاسخ نمیذارم.
این مورد برای پیامهای تلگرام هم صدق میکنه (اگر پیامی رو چندروز ندیدم یک پیام دیگه با متن up بفرستید که پیام بالا بیاد و ببینم)
#Quick
دوستان من لینکدین رو هرروز چک نمیکنم مگر اینکه پیام یا کاری داشته باشم
اگر connect request فرستادید و طول کشید برای
Accept
کردن، عذرخواهی میکنم 🌹
توی مواردی که نخوام accept بزنم (پروفایل مشخص نیست، از نظر شغلی و ... به هم نمیخوریم مثلا مورد داشتیم طرف زده بود مشاور املاک، درخواست داده بود 😂) خودم reject میزنم. اما اگر ببینم بدون پاسخ نمیذارم.
این مورد برای پیامهای تلگرام هم صدق میکنه (اگر پیامی رو چندروز ندیدم یک پیام دیگه با متن up بفرستید که پیام بالا بیاد و ببینم)
👍19👌8🗿5🤪2❤1
#Quick
این یکی از
یکی از سرویسهای شرکت رو چون جلوتر از
Sprint
بودم و بسیار بسیار شبیه یکی دیگه از سرویسهایی هست که خودم کد زده بودم بجای اینکه طبق معمول پیاده سازی کنم
پیادهسازی کردم با اینکه فکر میکردم چون
دوستان یوتیوبر بنظرم، ازین دورهها بسازید.
برای توسعه دهندهها شاید الان خیلی چیز پر دردسری باشه نسبت به موارد دیگه که وجود داره و نیاز به
ولی قطعاً آینده Django به این سمت هست و برای درآمد بهتر در اون زمان، الان وقت شروع تمرین هست بنظرم
این یکی از
Django
هست نسخه 3.2 به بعد (من فقط 3.2 و 4.2 رو تست کردم) یکی از سرویسهای شرکت رو چون جلوتر از
Sprint
بودم و بسیار بسیار شبیه یکی دیگه از سرویسهایی هست که خودم کد زده بودم بجای اینکه طبق معمول پیاده سازی کنم
Async
پیادهسازی کردم با اینکه فکر میکردم چون
ORM
هنوز async
نشده و نباید خیلی کمک بزرگی بهم بکنه اما طبق خروجی profiler
تقریباً ۲.۲ برابر request
بیشتری رو دارم هندل میکنم با سختافزار و کانفیگ یکسان.دوستان یوتیوبر بنظرم، ازین دورهها بسازید.
برای توسعه دهندهها شاید الان خیلی چیز پر دردسری باشه نسبت به موارد دیگه که وجود داره و نیاز به
sync_to_async , ...
ولی قطعاً آینده Django به این سمت هست و برای درآمد بهتر در اون زمان، الان وقت شروع تمرین هست بنظرم
👍26⚡7👎1
#Quick
برای بالا بردن سرعت کدها اولین کاری که میکنید اینه که میرید
یاد میگیرید ؟
اشتباه نکنید، چیزی که قبل از اون نیاز دارید و ۹۹.۹٪ مشکلاتتون رو حل میکنه
(شاید یک آموزشی هم براش گذاشتم)
برای مثال توی پروژه اخیر، بجای یک سری از پردازشهای مهم تصویر رو که با
numpy
پیاده سازی شده بود آوردیم روی
Cython (numpy)
زمان اجرا تمام پردازشها قبل از این برای ۱ عکس توی بنچمارک ۵۳ ثانیه بود و بعد از تبدیل به Cython به حدوداً ۱ ثانیه رسید.
خیلی مهمه با همین ابزارهایی که در اختیارتون هست آشنا باشید و بتونید کار کنید.
پ.ن : کتاب بروزی نداریم برای این موضوع متأسفانه ولی یکی از بهترین منابع که یادم هستم (چندسال قبل خوندم؛ با یکی از دوستان)
بود و البته داکیومنت خود
Cython
حتی یاد گیری مقدماتش هم میتونه تا ۴-۵ برابر کدهاتون رو سریعتر کنه
برای بالا بردن سرعت کدها اولین کاری که میکنید اینه که میرید
C
یاد میگیرید ؟
اشتباه نکنید، چیزی که قبل از اون نیاز دارید و ۹۹.۹٪ مشکلاتتون رو حل میکنه
Cython
(شاید یک آموزشی هم براش گذاشتم)
برای مثال توی پروژه اخیر، بجای یک سری از پردازشهای مهم تصویر رو که با
numpy
پیاده سازی شده بود آوردیم روی
Cython (numpy)
زمان اجرا تمام پردازشها قبل از این برای ۱ عکس توی بنچمارک ۵۳ ثانیه بود و بعد از تبدیل به Cython به حدوداً ۱ ثانیه رسید.
خیلی مهمه با همین ابزارهایی که در اختیارتون هست آشنا باشید و بتونید کار کنید.
پ.ن : کتاب بروزی نداریم برای این موضوع متأسفانه ولی یکی از بهترین منابع که یادم هستم (چندسال قبل خوندم؛ با یکی از دوستان)
Cython (A guide for python programmers) by Kurt W.Smith - O'Reilly
بود و البته داکیومنت خود
Cython
حتی یاد گیری مقدماتش هم میتونه تا ۴-۵ برابر کدهاتون رو سریعتر کنه
👍44🤯8👌4⚡1
Rust for Python developers
این یکی واقعاً جالبه، جایگزین Flake8, isort, black, pyupgrade, ... با سرعت خیلی بیشتر. Ruff که با Rust نوشته شده، و پروژه Scipy, Pandas, FastApi, ... هم سمتش رفتند.
#Quick
پست قبلی که گذاشتم راجب
توافق کردند از
استفاده کنند، بخصوص که حالا دیگه
تا اینجا که خیلی خوب پیش رفته (از صبح).
پست قبلی که گذاشتم راجب
uv
حقیقتا از اینجا متوجه پروژه شدم که تیمهایData Engineering, Backend, Test
توافق کردند از
ruff
استفاده کنند، بخصوص که حالا دیگه
vs-code extension
هم براش وجود داره و خیلی راحت شده کار بچهها گفتند ما هم بریم سراغش و منم دارم بررسی میکنم که نظراتم رو راجبش بدم، نسبت به تمام کانفیگهایی که داریم.تا اینجا که خیلی خوب پیش رفته (از صبح).
👍20❤1
#Quick
نوشتن
این مورد رو بین بچههای دیتاساینس و هوش خیلی زیاد میبینم و بین بچههای بکند هم وقتی دارند روی
موضوع فقط مصرف زیاد رم نیست؛ موضوع سرعت هم هست اگر قرار به تمیزکاری و پردازش هر نمونه دپتا یا خط به خط هست لطفا از
مشکل دارن با ما؛ ما اینجا زحمت میکشیم
تصویر ی نمونه خیلی ساده برای مثال هست (زمان اجرا کامنت شده)
نوشتن
list
اطراف هر تابع باید دوبار بهش فکر کنید. اگر اون تابع یک generator
باشه شما دارید بدترین کار ممکن رو میکنید.این مورد رو بین بچههای دیتاساینس و هوش خیلی زیاد میبینم و بین بچههای بکند هم وقتی دارند روی
CSV
, Json
و یا Json-line
کار میکنند.موضوع فقط مصرف زیاد رم نیست؛ موضوع سرعت هم هست اگر قرار به تمیزکاری و پردازش هر نمونه دپتا یا خط به خط هست لطفا از
generator
ها به درستی استفاده کنیدمشکل دارن با ما؛ ما اینجا زحمت میکشیم
generator
مینویسیم بعد اینا سریع میندازنش توی list
تصویر ی نمونه خیلی ساده برای مثال هست (زمان اجرا کامنت شده)
👍50❤2👎1🐳1
Python Hints
لطفاً پیامهای پین شده کانال رو بخونید 🌹 به لطف شما عزیزان, کانال قابلیت استوری گذاشتن داره و سعی میکنم ازین قابلیت برای معرفی کتابها استفاده کنم تا دوستان به راحتی بتونند کتابها رو پیدا کنند. همونطور که قبلاً گفتم، فقط و فقط کتابهایی رو معرفی میکنم…
#quick_note
تعداد افرادی که از کانالهای جنگو و هوش مصنوعی وارد این کانال شدند درحال افزایش هست
برای همین توی بخش معرفی کتابها و استوری ها ازین به بعد کتابهایی غیر از
معرفی کتاب که ضرری نداره (اما لطفا غیر از موضوع
هر موضوع دیگری : @DevChaiChat
در نهایت؛ یادآوری کنم من فقط کتابی رو معرفی میکنم که شخصا خونده باشم و بنظرم ارزش معرفی داشته باشه
اضافه کنم :
تمامی کتابهای معرفی شده رو میتونید با کلیک روی اسم کانال و رفتن توی قسمت
تعداد افرادی که از کانالهای جنگو و هوش مصنوعی وارد این کانال شدند درحال افزایش هست
برای همین توی بخش معرفی کتابها و استوری ها ازین به بعد کتابهایی غیر از
Core Python
رو هم اضافه میکنم.معرفی کتاب که ضرری نداره (اما لطفا غیر از موضوع
Core Python
) توی گروه متصل به کانال صحبتی نشههر موضوع دیگری : @DevChaiChat
در نهایت؛ یادآوری کنم من فقط کتابی رو معرفی میکنم که شخصا خونده باشم و بنظرم ارزش معرفی داشته باشه
اضافه کنم :
تمامی کتابهای معرفی شده رو میتونید با کلیک روی اسم کانال و رفتن توی قسمت
Posts
ببینید.#Quick
یک سری وقتها هست که توی پروژه بنا به هر دلیلی نیاز هست که یک پوشه خالی داشته باشید و اون رو روی
اکثرا برای
حالا مساله چیه ؟ هرکی برای خودش از یک استاندارد استفاده میکنه (همه موارد جواب میده)
۱- اونایی که توی
اضافه کردن فایل
۲- بچههای
اضافه کردن یکم فایل با نام دلخواه و شروع با
۳- ویندوزیها :
اضافه کردن یک فایل با پسوند
اما برای این کار یک قرارداد نانوشته مشترک بین همه برنامهنویسها هست اونم؛ توی اون پوشه خالی یک فایل به اسم
بسازید (جدای از
یعنی همه چیز داخل این پوشه رو برای
ربطی به موارد
یک سری وقتها هست که توی پروژه بنا به هر دلیلی نیاز هست که یک پوشه خالی داشته باشید و اون رو روی
git
هم بذارید.اکثرا برای
permission
درست و ... دیدم این کار انجام میشه.حالا مساله چیه ؟ هرکی برای خودش از یک استاندارد استفاده میکنه (همه موارد جواب میده)
۱- اونایی که توی
Mac
کد میزنند:اضافه کردن فایل
.DSStore
(با همچین اسمی به پوشه خالی)۲- بچههای
Linux
:اضافه کردن یکم فایل با نام دلخواه و شروع با
.
بیشترین مورد : .ignore
۳- ویندوزیها :
اضافه کردن یک فایل با پسوند
txt
اما برای این کار یک قرارداد نانوشته مشترک بین همه برنامهنویسها هست اونم؛ توی اون پوشه خالی یک فایل به اسم
.gitignore
بسازید (جدای از
gitignore
کل پروژه هست) و محتوای داخلش این خواهد بود:*
!.gitignore
یعنی همه چیز داخل این پوشه رو برای
git
نادیده بگیر به غیر از .gitignore
ربطی به موارد
advance
نداشت ولی چون دیدم خیلی کم رعایت میشه گفتم پست بذارم.👍59❤4🤨2🤝2⚡1🙊1
#Quick
هاردهاتون رو تمیز کنید
فضای خالی بدست اومد.
کاری که من کردم :
۱- کل فایلهای روی
بعد اول بر اساس اسم
و بعد از اون بر اساس تاریخ مرتب کردم
حدود
دیتاهای
کد قبلی رو با
۲- بعد از اون یک سری فایلها بودند که مشکوک بودم
پس با
۳- من همیشه توی کدهام، اسم
دقیق بررسی نکردم ولی فکر کنم
.
همرو دستی دیلیت کردم که این بخش یک مقدار زمانبر شد.
اضافه کنم:
برای آخر هفته یک
یک مورد هم برای
هاردهاتون رو تمیز کنید
1.6 TB
فضای خالی بدست اومد.
کاری که من کردم :
۱- کل فایلهای روی
۳
تا هارد اصلیم رو بدست آوردم و توی یک csv
شامل این ستونها ریختم؛اسم فایل، پسوند، مسیر، حجم فایل، تاریخ ایجاد
بعد اول بر اساس اسم
و بعد از اون بر اساس تاریخ مرتب کردم
حدود
۸۰۰
گیگ با همین وضعیت پاک شد.دیتاهای
duplicate
نبودند ولی مثلاً بکاپ فایلها بودند که خب با وجود اینکه توی تاریخهای بعدی نسخه آپدیتش رو گرفته بودم فراموش کرده بودم نسخه قبلی رو حذف کنم.کد قبلی رو با
multi-threading, ThreadPool
زدم و کمتر از ۱
ثانیه اجرا شد.۲- بعد از اون یک سری فایلها بودند که مشکوک بودم
duplicate
باشند؛ پس با
md5
شروع کردم hash
کردن، از multi-process
استفاده کردم، و اینجا هم حدود ۱۰۰
گیگ duplicate
پیدا شد که بعد بررسی دیدم دقیقاً یکسان هستند و پاک شد.۳- من همیشه توی کدهام، اسم
virtualenv
هارو .venv
میذارم پس دنبال اینها هم گشتم + مدلهای هوش مصنوعی با پسوندهای مختلف باقی موارد هم همگی برای اینها بود دقیق بررسی نکردم ولی فکر کنم
۲۰۰
گیگ .venv
داشتم (عادت دارم کل پوشه پروژه رو میفرستم روی هارد بکاپ) خلاصه که کار خوبیه و تکنیکهایی هم که گفتم برای من خیلی جواب بود، شما هم دوست داشتید استفاده کنید
.
۹۰٪
کدهاشم دادم codestral
برام نوشت و فقط مطمئن شدم پیادهسازی درست هست و اجرا کردم، اما دسترسی دیلیت بهش ندادم.همرو دستی دیلیت کردم که این بخش یک مقدار زمانبر شد.
اضافه کنم:
برای آخر هفته یک
auto indexer + notifier + web
هم پیاده خواهم کرد که بهم یادآوری کنه بکاپهای قدیمی رو پاک کنم اگر بر اساس اسم مشابه بود (همچنین باقی فایلا)یک مورد هم برای
.venv
اضافه کنم و در نهایت web endpoint
رو هم بذارم قبل از اینکه چیزی رو برای چندمین بار دانلود کنم بتونم سرچ کنم که آیا دانلود شده روی سیستم دارم یا خیر❤🔥38👍24🔥2👌2✍1
Python Hints
#بسیار_مهم #خارج_از_بحث خواهشاً بیاید این مورد رو آنقدر به اشتراک بذاریم که همه رعایت کنند. چند وقت پیش دنبال یک نیروی React برای شرکت یکی از دوستان میگشتم، گفتم میرم لینکدین چندتا پروفایل open to work رو میبینم و درخواست رزومه میدم به اونهایی که بنظرم…
#Quick
اگر توی
مهمترین موارد :
۱- لوکیشن (محل سکونت٫اقامت)
۲- توضیح مختصر در مورد خودتون، تجربیاتی که دارید
۳- اطلاعات سابقه کاری
۴- وضعیت تحصیل (دانشجو هستید یا خیر)
۵- مدارک و ....
توی این هفته، کلی پروفایل
یادتون باشه اگر توی
باقی مواردی که مهم نیست ولی بودنش قطعا کمک میکنی :
۱- تصویر پروفایل (بهتره تصویر پارک و ... نگذارید.)
۲- تصویر بنر
۳- پستهایی که پین کردید
۴- پستهایی که لایک٫کامنت میکنید
بازم همون قانونی که توی رزومه نویسی گفتم،
نه خیلی رنگی و ... که انگار برای موقعیت شغلی دلقک شرکت کردید (عاشق دلقک هستم)
و نه خیلی مشکی و بدون چیزی که حوصله سر بر باشه
مثل یک
باید جوری باشه که طرف حداقل ۱۰ دقیقه وقت بذاره (ولی توی ۲ دقیقه اطلاعات مهم روزمه شمارو بخونه، شما تو چشمش فرو کنید.)
پروفایل من رو مرجع نکنید، من توی لینکدین دنبال کار نمیگردم، برای همین اصلا آپدیت نشده.
اضافه کنم :
لطفاً از ابزارهای رزومه سازی استفاده نکنید (مخصوصاً اینایی که همهجای روزمه شما اطلاعات سایت رو مینویسند)
نهایتاً اینکه
ازشون ایده بگیرید، قالب رو بسازید و بعد خودتون خروجی
این موضوع خیلی مهم هست، و رعایت نکردنش نکته منفی بزرگی میتونه باشه برای کارجو.
اگر توی
LinkedIn
وضعیت خودتون رو به #OpenToWork تغییر میدید حتماً قبلش پروفایل و اطلاعات اصلی خودتون رو تکمیل کنید.مهمترین موارد :
۱- لوکیشن (محل سکونت٫اقامت)
۲- توضیح مختصر در مورد خودتون، تجربیاتی که دارید
۳- اطلاعات سابقه کاری
۴- وضعیت تحصیل (دانشجو هستید یا خیر)
۵- مدارک و ....
توی این هفته، کلی پروفایل
LinkedIn
رو که Open2Work
بودند بررسی کردم شاید بتونم بگم فقط ۳۰٪ بطور کامل تمام اطلاعات مهم رو درست و دقیق داشتند.یادتون باشه اگر توی
LinkedIn
جویای کار هستید، اولین برخورد و آشنایی قبل از همکاری کارفرما٫مدیر٫نیروی منابع انسانی و ... با صفحه شخصی شما در LinkedIn
خواهد بود.باقی مواردی که مهم نیست ولی بودنش قطعا کمک میکنی :
۱- تصویر پروفایل (بهتره تصویر پارک و ... نگذارید.)
۲- تصویر بنر
۳- پستهایی که پین کردید
۴- پستهایی که لایک٫کامنت میکنید
بازم همون قانونی که توی رزومه نویسی گفتم،
نه خیلی رنگی و ... که انگار برای موقعیت شغلی دلقک شرکت کردید (عاشق دلقک هستم)
و نه خیلی مشکی و بدون چیزی که حوصله سر بر باشه
مثل یک
ui/ux
کار ببینید.باید جوری باشه که طرف حداقل ۱۰ دقیقه وقت بذاره (ولی توی ۲ دقیقه اطلاعات مهم روزمه شمارو بخونه، شما تو چشمش فرو کنید.)
اضافه کنم :
لطفاً از ابزارهای رزومه سازی استفاده نکنید (مخصوصاً اینایی که همهجای روزمه شما اطلاعات سایت رو مینویسند)
نهایتاً اینکه
ازشون ایده بگیرید، قالب رو بسازید و بعد خودتون خروجی
pdf
بدون watermark
رو بگیرید و ارسال کنید.این موضوع خیلی مهم هست، و رعایت نکردنش نکته منفی بزرگی میتونه باشه برای کارجو.
👍42❤10😨1
#Quick
من این مشکل رو زیاد دیدم؛ بیش از حداقل 20% پروژههای خدماتی که دوستان روش کار میکنن. میبینم که
شاید به روی خودتون نیارید ولی خیلی از شما هم ازین پروژهها دیدید دیگه.
خواستم هم اهمیت
هم بگم پروژههایی مثل
مثال:
کاری به درست و غلط بودن دیزاین و ... ندارم و بحثم فقط همین مورد
یک کدی رو دیدم؛ طرف یک سیستم
این دیتابیس خیلی اهمیت زیادی نداره؛ هر کد قراره نهایتا
چرا میخواید شر درست کنید برای تیم
خیلی ها مشکلشون این هست که اطلاعات ندارند (هیچوقت هم جرات تجربه کردن نداشتند)؛ خود
بیش از 500 هزار
روی
اضافه کنم :
اینم rqlite اگر حتی خواستید
من این مشکل رو زیاد دیدم؛ بیش از حداقل 20% پروژههای خدماتی که دوستان روش کار میکنن. میبینم که
Postgresql
به معنای واقعی کلمه OverKill
هست. مخصوصا وقتی Sqlite
کار رو در میاره.شاید به روی خودتون نیارید ولی خیلی از شما هم ازین پروژهها دیدید دیگه.
خواستم هم اهمیت
SQLite
رو یادآوری کنمهم بگم پروژههایی مثل
rqlite
هم وجود دارههامثال:
کاری به درست و غلط بودن دیزاین و ... ندارم و بحثم فقط همین مورد
Sqlite
هست.یک کدی رو دیدم؛ طرف یک سیستم
verification
جدا براش طراحی کرده بود و تمام پروژههاشون ازین سرویس استفاده میکرد. فکر کنم این سرویس یا .net
بود یا golang
بعد بحث اصلی سر این بود که Postgres
بذارند یا MsSql
من درجا پیشنهاد SQlite
رو دادم.این دیتابیس خیلی اهمیت زیادی نداره؛ هر کد قراره نهایتا
۱۰
دقیقه valid
باشه. در صورت پاک شدن هم طرف یکبار دیگه درخواست میده (که من تاحالا پاک شدن خود به خود توش ندیدم).چرا میخواید شر درست کنید برای تیم
devops, server, database, ...
خیلی ها مشکلشون این هست که اطلاعات ندارند (هیچوقت هم جرات تجربه کردن نداشتند)؛ خود
SQLite
روی SSD
طبق بنچمارکها.بیش از 500 هزار
insert
در ثانیه رو پشتیبانی میکنه و برای read
هم این مورد به بیش از 1 میلیون میرسه و این مورد بدون config
های پرفورمنسی هست که توی داکیومنت خودش ارائه شده.روی
NVMe
هم چندسال قبل تست کردیم؛ اعداد بهتر هم میشه.اضافه کنم :
اینم rqlite اگر حتی خواستید
SQlite
رو بصورت distributed
داشته باشید (قبلا توی اون کی کانال راجبش صحبت کردم با K8s
)GitHub
GitHub - rqlite/rqlite: The lightweight, user-friendly, distributed relational database built on SQLite.
The lightweight, user-friendly, distributed relational database built on SQLite. - rqlite/rqlite
👍54👌5❤4✍3🍓1🗿1
#Quick
یک عادت خوبی که توی بچههای ایران هست که یک
برای اونایی که نمیدونند،
حالا چرا میگم اشتباه پیادهسازی میشه، اول میرم سراغ مانیتورینگ:
فرض کن شما یک بکند داری که برای کار کردن به
فکر کنم متوجه منظورم شدید؛ توی
توی مثال قبلی اگر
حالا چرا
هر
پس سرویس رو از exception, ... مانیتور کنید با
یک عادت خوبی که توی بچههای ایران هست که یک
endpoint
توی پروژههای بکند میسازند به اسم health-check
اما ۹۰٪ اشتباه پیادهسازی میشه متأسفانه.برای اونایی که نمیدونند،
health-check
برای این هست که بصورت اتوماتیک یک سیستم دیگه مثل k8s
یا سیستم مانیتورینگ بتونه وضعیت بکند رو بررسی کنه و اگر جوابی نگرفت ایمیل بزنه یا اون pod
رو ریست کنه.حالا چرا میگم اشتباه پیادهسازی میشه، اول میرم سراغ مانیتورینگ:
فرض کن شما یک بکند داری که برای کار کردن به
postgres, celery
نیاز داره با این وضعیت سیستم شما وقتی سالم هست که به postgres
شما بتونه یه درستی دسترسی بگیره و البته به celery
(عملکرد celery, postgres
رو اگر بخواید بررسی کنید نیاز به ۲ تا سیستم مانیتورینگ جدا دارید، برای شما توی سطح اپلیکیشن دسترسی به این سرویسها مهم هست)فکر کنم متوجه منظورم شدید؛ توی
health-check
باید دسترسی به سرویسهایی که بکند شما بدون اونا healthy
نیست رو هم چک کنید.توی مثال قبلی اگر
celery
برای شما اجبار نیست توی health-check
کانکشن بهش رو تست نمیکنید.حالا چرا
k8s
رو مثال زدم ؟ برای اینکه بگم استفاده از این endpoint
برای بررسی pod ها کار درستی نیست: هر
pod
بصورت جداگونه و بصورت تک سرویس در نظر گرفته میشه که به تنهایی میتونه restart
بشه بدون اینکه به سیستم لطمه بزنه (من HA
درنظرم گرفتم، k8s
برای همینه دیگه) پس باید تو سریعتر زمانی که عملکرد خودش رو از دست میده restart
بشه فکر کن load سیستم بره بالا در این شرایط هم از روی health-check
نمیشه مطمئن بود آیا چون load شبکه رفت بالا جواب دیر میاد یا memory leakage
داریم یا ...پس سرویس رو از exception, ... مانیتور کنید با
k8s
تا جایی که میشه.👍44✍12❤3👎1
Forwarded from Rust for Python developers
#Quick
اگر از
الان اومد یک کدی رو بزنم چندتا از
اگر از
vscode
برای Rust
استفاده میکنید حتما این extension
رو نصب کنید که دستورات sql
رو براتون وسط کدهای rs به خوبی highlight
میکنه ( از حالت str&
خالی در میاد)الان اومد یک کدی رو بزنم چندتا از
Sql Query
هاش خیلی طولانی و سخت شد بدون highlight
خوندنش قطعا آزار دهنده بود با سرچ به این رسیدم و بنظرم گزینه بسیار کمک کننده و عالیای هست.👍29❤6🙏2✍1🔥1
#Quick
مثالی برای یک بحث:
یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره.
یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبههام حذف میکنم :
مثلاً توی بکند؛
چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیجهای مورد نیاز برای کار با
این مثلاً ازون سوالاتی هست که اگر پوزیشن کاری جنگو باشه، توی سطح
اما اگر غیر از اون باشه حتماً توی سطح
به جوابش فکر کنید، اگر نمیدونید هم تحقیق کنید.
مثالی برای یک بحث:
یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره.
یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبههام حذف میکنم :
مثلاً توی بکند؛
چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیجهای مورد نیاز برای کار با
json
, dict
هم که وجود داره چرا مستقیم خودم اینکار رو نکنم و حتماً باید از serializer
استفاده کنم ؟این مثلاً ازون سوالاتی هست که اگر پوزیشن کاری جنگو باشه، توی سطح
mid
میپرسم.اما اگر غیر از اون باشه حتماً توی سطح
junior
میپرسم، یک نمونه از چیزهایی که میگم بکند رو فارغ از فریمورک یادبگیرید هم هست.به جوابش فکر کنید، اگر نمیدونید هم تحقیق کنید.
👍34🤔9❤2
Python Hints
#Quick مثالی برای یک بحث: یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره. یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبههام حذف میکنم : مثلاً توی بکند؛ چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیجهای مورد نیاز…
#Quick
یک سری پروژه داشتم نگاه میکردم، پروژههایی که یا توی دورههای مختلف گذاشته شده (برای آموزش) یا بچهها برای تمرین زدند.
(جلوتر میگم چرا اینکارو داشتم میکردم)
بعد میدیدم که خب هیچکدوم ازین پروژهها مثلاً از ابزاری مثل
اول اینکه مگه توی دنیای فعلی میشه شما پروژهای داشته باشی ولی
یا یک مثال دیگه، هیچکدوم از پروژهها رو نمیشد با تک کامند
بحث ci/cd نیست الان، ولی docker compose و ... باید به درستی نوشته بشه
و البته کلی نکات دیگه مثل این موضوع.
اینکه چرا دارم این موارد رو دنبال میکنم :
ضبط یک دوره کامل، اگر به نتیجه برسیم با یک تیم حرفهای.
یک سری پروژه داشتم نگاه میکردم، پروژههایی که یا توی دورههای مختلف گذاشته شده (برای آموزش) یا بچهها برای تمرین زدند.
(جلوتر میگم چرا اینکارو داشتم میکردم)
بعد میدیدم که خب هیچکدوم ازین پروژهها مثلاً از ابزاری مثل
Celery
استفاده نکردن یا Celery
داره ولی Flower
نداره.اول اینکه مگه توی دنیای فعلی میشه شما پروژهای داشته باشی ولی
celery
توش نباشه؟ یا اینکه celery
رو ببری روی پروداکشن ولی مانیتور نکنی (اینو توی خیلی پروژهها هم دیدم).یا یک مثال دیگه، هیچکدوم از پروژهها رو نمیشد با تک کامند
deploy
کرد.local, stage, production
بحث ci/cd نیست الان، ولی docker compose و ... باید به درستی نوشته بشه
و البته کلی نکات دیگه مثل این موضوع.
اینکه چرا دارم این موارد رو دنبال میکنم :
ضبط یک دوره کامل، اگر به نتیجه برسیم با یک تیم حرفهای.
👍77❤21👎5❤🔥3🔥2
Python Hints
اومدم یک تولز معرفی کنم و برم : من حدودا ۲ سالی میشه که Postman ندارم؛ از وقتی که لاگین و Sync و ... کم کم اجباری شد (احمقانه) ی مدت طولانی رفتم روی کد پایتون؛ یک بخشی داشتم به اسم api client توی اکثر کدهام که خودش ی پروژه کنار پروژه اصلی میشه ( کارفرما و…
#Quick
و در نهایت :
استفاده از
بخاطر اینکه برای استفاده ازین ۲ ابزار حتماً باید اکانت داشته باشید و حتماً هم این ابزارها تمام اطلاعات رو با سرورهاشون
پیشنهاد خودشون
پ.ن : اگر کسی گزینه بهتری میشناسه قطعاً منتظر شنیدنش هستم.
هم درحال حاضر استفاده میکنم البته، ولی خب چندتا از دولوپرها
و در نهایت :
استفاده از
Insomnia, Postman
توی شرکت برای پروژههای اصلی ممنوع شد.بخاطر اینکه برای استفاده ازین ۲ ابزار حتماً باید اکانت داشته باشید و حتماً هم این ابزارها تمام اطلاعات رو با سرورهاشون
Sync
میکنند.پیشنهاد خودشون
Bruno
بوده (پیشنهاد من بود) ولی هر ابزاری که بدون نیاز به اینترنت و sync
بشه استفاده کرد مشکلی نداره.پ.ن : اگر کسی گزینه بهتری میشناسه قطعاً منتظر شنیدنش هستم.
Thunder Client
هم درحال حاضر استفاده میکنم البته، ولی خب چندتا از دولوپرها
vscode
ندارند که دردسر شده.👍29✍6👎3👏2🤔2
#Quick
داشتم پروژه
اولین کاری کردم این بوده که یک سری دیتا تست با
چیز جالبی که دیدم؛ پروژه موقع کار کردن با
ولی
حجم دیتاهای تست رو کم کردم و مشکل حل شد؛ توی چندتا تست مختلف که زدم دیدم مسئله و مشگل از سمت پیکج
بجای اینکه برای
مشکل خیلی ساده حل شد؛ ولی برای این حل ساده خیلی زمان و درک
اهمیت
داشتم پروژه
django
شرکت رو میخوندم یک مشکل داریم سر بعضی endpoint
ها و برخی تسکها. اولین کاری کردم این بوده که یک سری دیتا تست با
faker
بهش دادم مثه loadtest
ولی بدون ابزار و بعد هم profiling
گرفتم و ذخیره کردم.چیز جالبی که دیدم؛ پروژه موقع کار کردن با
redis
به مشکل میخورد.ولی
redis
منابعش بیشتر از حد مورد نیازش بود.حجم دیتاهای تست رو کم کردم و مشکل حل شد؛ توی چندتا تست مختلف که زدم دیدم مسئله و مشگل از سمت پیکج
redis
هست توی پایتون و راهکار ساده رو هم خود redis
داده (هرچند من برعکس بهش رسیدم)$ pip install "redis[hiredis]"
بجای اینکه برای
parse
کردن دیتا از python
استفاده کنه وقتی hiredis
رو نصب کنید از C
استفاده میکنه (بنچمارکاش هم توی گیتهاب hiredis
هست ببینید)مشکل خیلی ساده حل شد؛ ولی برای این حل ساده خیلی زمان و درک
profiling
لازم بود.اهمیت
profiling
👍68🔥3❤2🆒2
#Quick
سوال مصاحبه یکی از دوستان بوده.
توی مصاحبه خیلی از زبانهای برنامهنویسی مختلف یکی از سوالاتی که پرسیده میشه مربوط به نحوه ارسال آرگومان به توابع هست اکثرا هم شما به یکی از دو حالت:
Pass by Value
Pass by Reference
اشاره میکنید؛ اما توی پایتون اینطوری نیست توی پایتون ما
Pass By Object Reference (Pass by Assignment)
رو داریم. اول برگردیم به این تعریف که:
وقتی یک آرگومان رو به تابع میدید؛ رفرنس اون آبجکت رو براش میفرستید و نه یک کپی از اون رو ولی این رفرنس رو بصورت pass by value میفرستید! گیج گننده شد؟ برای همین میگیم پایتون نه Pass By Reference هست نه Pass By Value
یک صندوق رو فرض کنید که توش وسایل شما قرار داره (این حکم object رو داره) حالا فرض کنید برای اینکه جاش رو یادتون نره آدرسش رو روی یک کاغذ نوشتید و توی جیبتون میذارید (این میشه reference شما)
یکی از دوستانتون میخواد صندوق رو ببینه؛ شما فقط کافیه آدرس رو بهش بدید که برای اینکار شما آدرس رو روی یک کاغذ جدید مینویسید و اون رو بهش میدید (این میشه Pass reference by Value)
و این میشه مدل پایتون؛ اگر رفیق شما بره اونجا و از داخل صندوق چیزی برداره یا تغییراتی روی صندوق انجام بده؛ شما هم اون تغییرات رو خواهید دید. اگرم که صندوق رو ببینه و کارش که تموم شد کاغذ آدرس صندوق رو بندازه دور اونوقت صندوق هنوز سرجاش خواهد بود و شما صاحبش هستید.
اگر بره از صندوق یدونه بسازه؛ صندوق شما تغییری نمیکنه فقط یکی دیگه مشابهش وجود داره (که ممکنه چیزایی که داخلش هست فرق کنه)
مثال بالا میشه برای Object هایی که قابل تغییر هستند مثل list
اما اگر Object قابل تغییر نبود چی ؟ مثل Int
اونوقت رفیق شما هر تغییری که بخواد بده اول باید ی دونه از روی چیزی که مال شما هست برای خودش بسازه بعد تغییرش بده.
سوال مصاحبه یکی از دوستان بوده.
توی مصاحبه خیلی از زبانهای برنامهنویسی مختلف یکی از سوالاتی که پرسیده میشه مربوط به نحوه ارسال آرگومان به توابع هست اکثرا هم شما به یکی از دو حالت:
Pass by Value
Pass by Reference
اشاره میکنید؛ اما توی پایتون اینطوری نیست توی پایتون ما
Pass By Object Reference (Pass by Assignment)
رو داریم. اول برگردیم به این تعریف که:
همه چیز در پایتون نهایتا object هست.
وقتی یک آرگومان رو به تابع میدید؛ رفرنس اون آبجکت رو براش میفرستید و نه یک کپی از اون رو ولی این رفرنس رو بصورت pass by value میفرستید! گیج گننده شد؟ برای همین میگیم پایتون نه Pass By Reference هست نه Pass By Value
یک صندوق رو فرض کنید که توش وسایل شما قرار داره (این حکم object رو داره) حالا فرض کنید برای اینکه جاش رو یادتون نره آدرسش رو روی یک کاغذ نوشتید و توی جیبتون میذارید (این میشه reference شما)
یکی از دوستانتون میخواد صندوق رو ببینه؛ شما فقط کافیه آدرس رو بهش بدید که برای اینکار شما آدرس رو روی یک کاغذ جدید مینویسید و اون رو بهش میدید (این میشه Pass reference by Value)
و این میشه مدل پایتون؛ اگر رفیق شما بره اونجا و از داخل صندوق چیزی برداره یا تغییراتی روی صندوق انجام بده؛ شما هم اون تغییرات رو خواهید دید. اگرم که صندوق رو ببینه و کارش که تموم شد کاغذ آدرس صندوق رو بندازه دور اونوقت صندوق هنوز سرجاش خواهد بود و شما صاحبش هستید.
اگر بره از صندوق یدونه بسازه؛ صندوق شما تغییری نمیکنه فقط یکی دیگه مشابهش وجود داره (که ممکنه چیزایی که داخلش هست فرق کنه)
مثال بالا میشه برای Object هایی که قابل تغییر هستند مثل list
اما اگر Object قابل تغییر نبود چی ؟ مثل Int
اونوقت رفیق شما هر تغییری که بخواد بده اول باید ی دونه از روی چیزی که مال شما هست برای خودش بسازه بعد تغییرش بده.
def demonstrate_passing_behavior(my_list, my_int):
print("\n--- INSIDE FUNCTION ---")
print(f"List ID: {id(my_list)}, Int ID: {id(my_int)}")
my_list.append(4)
print(f"List after append: {my_list}, ID(append): {id(my_list)}")
print("Copy of the original list")
my_list = list(my_list)
print(f"List copy and reassignment: {my_list}, ID(copy): {id(my_list)}")
print("Modifying integer...")
my_int = my_int + 10
print(f"Int after modification: {my_int}, ID(modified) : {id(my_int)}")
original_list = [1, 2, 3]
original_int = 5
print(f"Original list: {original_list}, ID: {id(original_list)}")
print(f"Original int: {original_int}, ID: {id(original_int)}")
demonstrate_passing_behavior(original_list, original_int)
print("\n--- AFTER FUNCTION CALL ---")
print(f"Original list: {original_list}, ID: {id(original_list)}")
print(f"Original int: {original_int}, ID: {id(original_int)}")
👍53❤23
چه تغییرات قشنگی داریم روی؛
برای من سه موردش خیلی جذاب هست؛
اولیش بالاخره؛
دومیش؛ پشتیبانی کامل از
تازه اگر پستهای قبلی رو دنبال کرده باشید میدونید
نهایتا یک سری
و یک اشاره هم بکنم به این پست (حدودا همین موقعها ۲ سال پیش):
https://t.me/pyHints/117
هنوزم دیر نشده؛ وقت بذارید براش و درکش کنید!
پ.ن؛
از دوستان اشاره کردند،
شوخی خوبی بود، اگر نگرفتید:
بخاطر این هست که
PostgreSql 18
شماهم دیدید ؟برای من سه موردش خیلی جذاب هست؛
اولیش بالاخره؛
Asynchronous I/O
بله منم خوندم فعلا فقط روی Read
ولی همینم خوبه ۲-۳ برابر سرعت بیشتر اونم مفتی کیه که بدش بیاد ؟دومیش؛ پشتیبانی کامل از
UUIDv7
یعنی بدون دردسر میتونی حتی روی distributed system
هم primary key
کاملا یونیک داشته باشی.تازه اگر پستهای قبلی رو دنبال کرده باشید میدونید
UUIDv7
برای ایندکس هم عملکرد بهتری داره (مشکلی که خیلی از پروژهها با UUIDv4
داشتند و حالا تقریبا حل شده)نهایتا یک سری
Optimization
های خاص که بصورت اتومات کوئری شما رو قبل از اجرا بهبود میده مثلا اگر OR
زیاد باشه و بشه با Any تغییرش میده و ...و یک اشاره هم بکنم به این پست (حدودا همین موقعها ۲ سال پیش):
https://t.me/pyHints/117
هنوزم دیر نشده؛ وقت بذارید براش و درکش کنید!
پ.ن؛
از دوستان اشاره کردند،
created_at
هم اگر یادمون بره به چخ نمیریم 😁شوخی خوبی بود، اگر نگرفتید:
بخاطر این هست که
UUIDv7
بر اساس زمان هستTelegram
Python Hints
#Quick
من این اخطار هارو همیشه زودتر به دوستان نزدیکم میگم
گفتم ازین به بعد بعضیهاش رو اینجا هم بگم:
اولین :
asyncio
رو هرچه زودتر یاد بگیرید، پترنها و مفاهیم برنامهنویسی
Async, Parallel, Concurent
قبلتر تأکید زیادی روش نداشتم، اما دیر نیست (توی…
من این اخطار هارو همیشه زودتر به دوستان نزدیکم میگم
گفتم ازین به بعد بعضیهاش رو اینجا هم بگم:
اولین :
asyncio
رو هرچه زودتر یاد بگیرید، پترنها و مفاهیم برنامهنویسی
Async, Parallel, Concurent
قبلتر تأکید زیادی روش نداشتم، اما دیر نیست (توی…
🔥27👍3