وقتی یکی میگه؛ حالا مگه الگوریتم چقدر مهمه ؟
آدما این سوال رو میپرسند،چون هیچوقت تفاوت عددی بین مثلا
O(log n), O(n log n)
درک نکردند و دوتا دلیل هم داره؛
۱- پردازندهها سرعت بسیار بالایی دارند.
۲- هیچوقت روی دیتاهای خیلی حجیم کار نکردند.
برای همین گشتم تا یک جدولی رو پیدا کنم؛ که الگوریتمها رو با زمان اجرا اونها مقایسه کنه!
مثلاً توی این جدول ñ² رو با n مقایسه کنید؛ برای ۱ میلیون ورودی!
دیگه همینجوری for تو در تو ننویسید!
پ.ن:
برای !n هم مسئله داریم توی دنیای کامپیوتر،
آدما این سوال رو میپرسند،چون هیچوقت تفاوت عددی بین مثلا
O(log n), O(n log n)
درک نکردند و دوتا دلیل هم داره؛
۱- پردازندهها سرعت بسیار بالایی دارند.
۲- هیچوقت روی دیتاهای خیلی حجیم کار نکردند.
برای همین گشتم تا یک جدولی رو پیدا کنم؛ که الگوریتمها رو با زمان اجرا اونها مقایسه کنه!
مثلاً توی این جدول ñ² رو با n مقایسه کنید؛ برای ۱ میلیون ورودی!
دیگه همینجوری for تو در تو ننویسید!
پ.ن:
برای !n هم مسئله داریم توی دنیای کامپیوتر،
فروشنده دورهگرد
❤🔥37👍21👏2❤1
این یکی هم مقایسه سرعت عملکرد
دلیل پافشاری من بر اینکه؛ حتماً
خوندنش اینطوری هست؛ ۱ سیکل سیپییو (توی چند نسل قبل اینتل ۱۴ تا
خوندن داده از سریعترین رمهای موجود؛ ۶ دقیقه میشه به نسبت اون! و خوندن از درایو
و اگر async کد نمیزنید توی تمام این مدت
حالا میتونید قشنگ درک کنید که چرا میگیم تسکهای I/O bound رو حتماً async کنید.
CPU
نسبت به گرفتن داده هست! دلیل پافشاری من بر اینکه؛ حتماً
concurrency
رو یاد بگیرید هم همین هست! خوندنش اینطوری هست؛ ۱ سیکل سیپییو (توی چند نسل قبل اینتل ۱۴ تا
instruction
میتونست انجام بده) رو اگر فرض کنیم ۱ ثانیه زمان میبره (زمان واقعیتر ستون وسط هست)خوندن داده از سریعترین رمهای موجود؛ ۶ دقیقه میشه به نسبت اون! و خوندن از درایو
SSD
(بسته به سرعت و ...) مثل این میمونه که بین ۲ تا ۶ روز زمان ببره!و اگر async کد نمیزنید توی تمام این مدت
CPU
شما بیکار هست، باید صبر کنه تا اون دادهها بهش برسه!حالا میتونید قشنگ درک کنید که چرا میگیم تسکهای I/O bound رو حتماً async کنید.
🔥44👍7❤4
#خارج_از_بحث
پست قبلی یک کلمه غلط املایی داشت؛
اصرار رو من اسرار نوشتم که باید بگم!
بعد یک پستی گذاشتم؛ که چندتا از دوستان لطف کردند پیام دادند که فرم درست این کلمه اصرار هست، توضیح دادم با این منظور که آقا کلمه رو بیخیال اگر مفهوم رو متوجه شدید من کارم رو کردم (البته که ازین دوستان ممنونم که انقدر دقیق پستها رو میخونند و اهمیت میدند، خداییشم خیلیها مودبانه این موضوع رو مطرح کردن) برای همین کلمه رو به پافشاری تغییر دادم.
ولی ازونجایی که توی هر جمعی چندتا بیشعور هم هست؛ بعضیها با کلمات و لحن نامناسب جواب دادند.
خطاب به این بیشعورها؛
یاد هزاران بار؛ مصاحبهها، دمو محصول برای مدیران و دانشگاه افتادم ...
وقتایی که یک بحث تخصصی رو انجام میدادی؛ یک محصول رو نشون میدادی یا ...
و همگی لال بودند، چون سواد نداشتند و مغزشون به این بحثها نمیکشید.
بعد در آخر جلسه؛ میگفتن چرا رنگ بنر رو آبی نکردی ؟ چرا اسلایدت فونت
پستهای قبلی گواه این موضوع هستند؛ گروهی که به کانال متصل بود بیشتر!
توی مملکت ما یکسری آدم عقدهای هستند، که برای اینکه بتونند عذاب وجدان بیسوادی رو از روی دوش خودشون بردارند، نشستند تا ازت ایراد بگیرند. اما چون سواد تخصصی ندارند ایراد گرفتنهاشون دقیقاً مثالهایی هست که زدم.
اینارو گفتم، چون توی کانالهای باقی دوستان بدتر از اینها رو دیدم (مخصوصاً اونهایی که به گروه وصل هستند)
همه مثل من بیادب و بیاعصاب نیستند که همونجا جواب بدند، خیلی از بچههای متخصص بیانگیزه میشوند.
اما برای دوستان متخصص:
پیشنهادمم اینه که، نه تنها نادیده بگیرید بلکه این افراد رو از گروها و کانالهاتون بن کنید!
همونجوری که کسی آدم لاابالی رو توی مهمونیش دعوت نمیکنه؛ تو میزبان این مهمونی هستی بذار مهمونات لذت ببرند، تمرکزت رو بذار روی لذت اونهایی که دعوتند.
بازهم ممنون از دوستانی که فقط برای درست بودن پست پیام دادند، نه برای ماهی گیری از آب گل آلود.
پست قبلی یک کلمه غلط املایی داشت؛
اصرار رو من اسرار نوشتم که باید بگم!
I don't give a shit about it ...
بعد یک پستی گذاشتم؛ که چندتا از دوستان لطف کردند پیام دادند که فرم درست این کلمه اصرار هست، توضیح دادم با این منظور که آقا کلمه رو بیخیال اگر مفهوم رو متوجه شدید من کارم رو کردم (البته که ازین دوستان ممنونم که انقدر دقیق پستها رو میخونند و اهمیت میدند، خداییشم خیلیها مودبانه این موضوع رو مطرح کردن) برای همین کلمه رو به پافشاری تغییر دادم.
ولی ازونجایی که توی هر جمعی چندتا بیشعور هم هست؛ بعضیها با کلمات و لحن نامناسب جواب دادند.
خطاب به این بیشعورها؛
یاد هزاران بار؛ مصاحبهها، دمو محصول برای مدیران و دانشگاه افتادم ...
وقتایی که یک بحث تخصصی رو انجام میدادی؛ یک محصول رو نشون میدادی یا ...
و همگی لال بودند، چون سواد نداشتند و مغزشون به این بحثها نمیکشید.
بعد در آخر جلسه؛ میگفتن چرا رنگ بنر رو آبی نکردی ؟ چرا اسلایدت فونت
Arial
نبود و ...پستهای قبلی گواه این موضوع هستند؛ گروهی که به کانال متصل بود بیشتر!
توی مملکت ما یکسری آدم عقدهای هستند، که برای اینکه بتونند عذاب وجدان بیسوادی رو از روی دوش خودشون بردارند، نشستند تا ازت ایراد بگیرند. اما چون سواد تخصصی ندارند ایراد گرفتنهاشون دقیقاً مثالهایی هست که زدم.
اینارو گفتم، چون توی کانالهای باقی دوستان بدتر از اینها رو دیدم (مخصوصاً اونهایی که به گروه وصل هستند)
همه مثل من بیادب و بیاعصاب نیستند که همونجا جواب بدند، خیلی از بچههای متخصص بیانگیزه میشوند.
اما برای دوستان متخصص:
پیشنهادمم اینه که، نه تنها نادیده بگیرید بلکه این افراد رو از گروها و کانالهاتون بن کنید!
همونجوری که کسی آدم لاابالی رو توی مهمونیش دعوت نمیکنه؛ تو میزبان این مهمونی هستی بذار مهمونات لذت ببرند، تمرکزت رو بذار روی لذت اونهایی که دعوتند.
بازهم ممنون از دوستانی که فقط برای درست بودن پست پیام دادند، نه برای ماهی گیری از آب گل آلود.
❤95👍27❤🔥6👏3
Python Hints
#تجربه بیش از ۹۸٪ پروژههای اپلیکیشنهایی که کار کردم دیتابیس رو اشتباه انتخاب کرده بودند! اصلا طبیعیت دیتاها و کار با دیتابیس و ... اشون SQL نیست اما ۱۰۰٪ تأکید دارند که از SQL استفاده بشه و اکثراً بعد از مدتی کوئریهای پیچیده کل سیستمشون رو میگیره !…
اینو میخواستم توی یک کانال دیگری بذارم ولی دیدم بحث انتخاب اشتباه دیتابیس اینجا بوده اینجا میذارم!
۵-۶ ماه پیش، یکی سوال پرسیده بود آقا من پستگرسم هی به مشکل میخوره روی پروژهام!
من هی میومدم کمک کنم، هر سوالی میپرسیدم یا جواب نمیداد (انگار داشت ناسا رو هک میکرد) یا نمیدونست.
چندبار بهش گفتم تا مشکل رو پیدا نکنم نمیشه به راهکار رسید
ولی
آخر عصبی شدم؛ گفتم برو
الان پیام داد، تشکر کرد بابت پیشنهاد
بعد توی همین صحبت فعلی متوجه شدم؛ دیتابیس برای کار ایشون واقعاً در همین حد
برای بکاپ هم بهش گفتم بذار برای خودت ایمیل کنه هر ۶ ساعت؛ واقعاً رفت اینم پیادهسازی کنه! 😂
خلاصه که تا ی چیزی توی ویدئو آموزشی میبینید نپرید سراغش؛ یک مقدار تحقیق بد هم نیست!
تجربه جالبی هم بود برای خودم!
۵-۶ ماه پیش، یکی سوال پرسیده بود آقا من پستگرسم هی به مشکل میخوره روی پروژهام!
من هی میومدم کمک کنم، هر سوالی میپرسیدم یا جواب نمیداد (انگار داشت ناسا رو هک میکرد) یا نمیدونست.
چندبار بهش گفتم تا مشکل رو پیدا نکنم نمیشه به راهکار رسید
ولی
آخر عصبی شدم؛ گفتم برو
sqlite
بزن! واقعاً منظورم این نبود که اینکارو بکنه میخواستم بفهمه که اینجوری نمیشه راهنمایی کرد و البته دیگه پیام نده.الان پیام داد، تشکر کرد بابت پیشنهاد
sqlite
(صحبت کردم باهاش اجازه گرفتم این پست رو بذارم) منم توضیحات بالا رو دادم بهش .... بعد توی همین صحبت فعلی متوجه شدم؛ دیتابیس برای کار ایشون واقعاً در همین حد
sqlite
زیادم بوده؛ کل دیتابیساش بعد از ۶ ماه کار به کمی کمتر از ۱۰۰ مگ رسیده (البته ازینجا به بعد سرعت رشدش کمتر میشه شاید سالی ۲۰-۳۰ مگ) برای بکاپ هم بهش گفتم بذار برای خودت ایمیل کنه هر ۶ ساعت؛ واقعاً رفت اینم پیادهسازی کنه! 😂
خلاصه که تا ی چیزی توی ویدئو آموزشی میبینید نپرید سراغش؛ یک مقدار تحقیق بد هم نیست!
تجربه جالبی هم بود برای خودم!
👍57❤12🔥7👏1
#یکبار_برای_همیشه
خیلی دیدم؛ دوستانی که از لینوکس دسکتاپ استفاده میکنند پارتیشن Swap رو تحت همه شرایط فعال میکنند.
بعضی وقتا حتی تا ۱۶ گیگ روی لپتاپ با رم ۱۶ گیگ دیدم بهش هارد اختصاص دادند.
اولاً که؛ ۹۹.۹٪ روی
اینکه خیلی از مدرسین لینوکس، هی میگن
اگر از تاریخچهاش بگذریم (اگر خواستید بخونید باید دنبال این باشید، از llm کمک بگیرید)
1970s Virtual memory on IBM OS/360 or Unix
این virtual memory یا نوع پیشرفته تر امروزش به اسم
امروزه فقط برای اینکه، به ادمین سرور وقت بده تا قبل از هنگ کردن یا .... سرور مشکل رو حل کنه استفاده میشه!
که ۹۹.۹٪ کاربرهای دسکتاپ این مشکل رو ندارند (نهایتاً ریاستارت میکنید، سرور که نیست بگی صدای یوزرهام در میاد) و استفاده از swap فقط باعث افت سرعت سیستم و هنگ کردن بسیار براشون میشه بخصوص اونایی که
خیلی دیدم؛ دوستانی که از لینوکس دسکتاپ استفاده میکنند پارتیشن Swap رو تحت همه شرایط فعال میکنند.
بعضی وقتا حتی تا ۱۶ گیگ روی لپتاپ با رم ۱۶ گیگ دیدم بهش هارد اختصاص دادند.
اولاً که؛ ۹۹.۹٪ روی
Desktop
و یوزر عادی نباید اصلا کار به Swap بکشه؛ توی باقی موارد هم برای ۱۶ گیگ رم نهایتاً ۱-۲ گیگ باید باشه که به محض اینکه دیدید رم درحال پرشدن هست؛ قبل از هنگ سیستم بتونید مشکل رو حل کنید.اینکه خیلی از مدرسین لینوکس، هی میگن
swap
رو فعال کنید و ... رو هم نمیفهمم!اگر از تاریخچهاش بگذریم (اگر خواستید بخونید باید دنبال این باشید، از llm کمک بگیرید)
1970s Virtual memory on IBM OS/360 or Unix
این virtual memory یا نوع پیشرفته تر امروزش به اسم
swap
برای این اومد که سیستمعاملها برای multi-task
مشکل رم داشتند و چون تکنولوژی رم حجم بالا اون موقع نبود ازین تکنیک استفاده کردند.امروزه فقط برای اینکه، به ادمین سرور وقت بده تا قبل از هنگ کردن یا .... سرور مشکل رو حل کنه استفاده میشه!
که ۹۹.۹٪ کاربرهای دسکتاپ این مشکل رو ندارند (نهایتاً ریاستارت میکنید، سرور که نیست بگی صدای یوزرهام در میاد) و استفاده از swap فقط باعث افت سرعت سیستم و هنگ کردن بسیار براشون میشه بخصوص اونایی که
swappiness
رو هم کانفیگ نمیکنند.👍40❤11👏2
چه تغییرات قشنگی داریم روی؛
برای من سه موردش خیلی جذاب هست؛
اولیش بالاخره؛
دومیش؛ پشتیبانی کامل از
تازه اگر پستهای قبلی رو دنبال کرده باشید میدونید
نهایتا یک سری
و یک اشاره هم بکنم به این پست (حدودا همین موقعها ۲ سال پیش):
https://t.iss.one/pyHints/117
هنوزم دیر نشده؛ وقت بذارید براش و درکش کنید!
پ.ن؛
از دوستان اشاره کردند،
شوخی خوبی بود، اگر نگرفتید:
بخاطر این هست که
PostgreSql 18
شماهم دیدید ؟برای من سه موردش خیلی جذاب هست؛
اولیش بالاخره؛
Asynchronous I/O
بله منم خوندم فعلا فقط روی Read
ولی همینم خوبه ۲-۳ برابر سرعت بیشتر اونم مفتی کیه که بدش بیاد ؟دومیش؛ پشتیبانی کامل از
UUIDv7
یعنی بدون دردسر میتونی حتی روی distributed system
هم primary key
کاملا یونیک داشته باشی.تازه اگر پستهای قبلی رو دنبال کرده باشید میدونید
UUIDv7
برای ایندکس هم عملکرد بهتری داره (مشکلی که خیلی از پروژهها با UUIDv4
داشتند و حالا تقریبا حل شده)نهایتا یک سری
Optimization
های خاص که بصورت اتومات کوئری شما رو قبل از اجرا بهبود میده مثلا اگر OR
زیاد باشه و بشه با Any تغییرش میده و ...و یک اشاره هم بکنم به این پست (حدودا همین موقعها ۲ سال پیش):
https://t.iss.one/pyHints/117
هنوزم دیر نشده؛ وقت بذارید براش و درکش کنید!
پ.ن؛
از دوستان اشاره کردند،
created_at
هم اگر یادمون بره به چخ نمیریم 😁شوخی خوبی بود، اگر نگرفتید:
بخاطر این هست که
UUIDv7
بر اساس زمان هستTelegram
Python Hints
#Quick
من این اخطار هارو همیشه زودتر به دوستان نزدیکم میگم
گفتم ازین به بعد بعضیهاش رو اینجا هم بگم:
اولین :
asyncio
رو هرچه زودتر یاد بگیرید، پترنها و مفاهیم برنامهنویسی
Async, Parallel, Concurent
قبلتر تأکید زیادی روش نداشتم، اما دیر نیست (توی…
من این اخطار هارو همیشه زودتر به دوستان نزدیکم میگم
گفتم ازین به بعد بعضیهاش رو اینجا هم بگم:
اولین :
asyncio
رو هرچه زودتر یاد بگیرید، پترنها و مفاهیم برنامهنویسی
Async, Parallel, Concurent
قبلتر تأکید زیادی روش نداشتم، اما دیر نیست (توی…
🔥27👍4
Python Hints
نمیدونم چرا ولی خیلیها پیام دادید کتاب برای fastapi هم معرفی کنم! برای خودمم نیاز بود یک کتاب خوب تو زمینه FastApi پیدا کنم برای معرفی؛ برای review مطالب یکی از دوستان هم اینکار رو زودتر شروع کرده بودم (۲ هفته قبل). تا اینجا ۳ تا کتاب رو خوندم که بنظرم…
👆👆👆👆👆
هر ۵ تا کتابی که گفتم + ۱ کتاب هم شما گفتید همرو خوندم.
اگر تا حالا اصلا سراغ FastApi نرفتید و خیلی با مفاهیم بکند هم آشنا نیستید؛ هرکدوم از کتابها که تاریخ 2024 یا 2025 خورده رو میتونید بخونید!
اما اگر ۳ ساعت بیشتر روی
داکیومنت FastApi رو بخونید!
داکیومنت ابزارهایی که معرفی کرده رو بخونید مثل celery یا sqlmodel بطور استثنا برای sqlalchemy کتاب خوب داریم (سرچ کنید میاد)
نگاهی هم به اسپانسرهاش و پروژههای open-source که باهاش نوشته شده بندازید که خودش یک دانشگاه هست!
متاسفم، کتابی برای این مورد نمیتونم معرفی کنم.
چون کتاب درخوری ندیدم
هر ۵ تا کتابی که گفتم + ۱ کتاب هم شما گفتید همرو خوندم.
اگر تا حالا اصلا سراغ FastApi نرفتید و خیلی با مفاهیم بکند هم آشنا نیستید؛ هرکدوم از کتابها که تاریخ 2024 یا 2025 خورده رو میتونید بخونید!
اما اگر ۳ ساعت بیشتر روی
FastApi
وقت گذاشتید؛ هیچکدوم از کتابها بدرد شما نخواهد خورد! داکیومنت FastApi رو بخونید!
داکیومنت ابزارهایی که معرفی کرده رو بخونید مثل celery یا sqlmodel بطور استثنا برای sqlalchemy کتاب خوب داریم (سرچ کنید میاد)
نگاهی هم به اسپانسرهاش و پروژههای open-source که باهاش نوشته شده بندازید که خودش یک دانشگاه هست!
متاسفم، کتابی برای این مورد نمیتونم معرفی کنم.
چون کتاب درخوری ندیدم
❤31👍11🔥3❤🔥2
Python Hints
#موقت #یادآوری 😁 حتماً باید تا آخر وقت امروز چند پست درمورد : Profiling بنویسم : timeit, cProfile, line_profiler, memory_profiler و خب پکیج مورد علاقه خودم Scalene
پستهای پروفایلینگ 👆👆👆
چون الان
ابزار scalene واقعاً کاربردی و فوقالعاده جذاب و راحت هست.
الان متوجه شدم پست آموزشش رو نذاشتم؛ ولی یادم نیست برای اینکه با متن نمیتونستم توضیح بدم پست نذاشتم
یا اینکه توی شلوغی روزهام فراموشش کردم!
#یادآوری
پست
چون الان
scalene
روزم رو نجات داد و توی ۱۵ دقیقه اشتباهات کد async
همکارم رو توی code review
پیدا کردم، گفتم یک اشاره بکنم به پستهای قدیمی که درمورد profiling
بوده ابزار scalene واقعاً کاربردی و فوقالعاده جذاب و راحت هست.
الان متوجه شدم پست آموزشش رو نذاشتم؛ ولی یادم نیست برای اینکه با متن نمیتونستم توضیح بدم پست نذاشتم
یا اینکه توی شلوغی روزهام فراموشش کردم!
#یادآوری
پست
scalene
رو روی کدهای Bashutils
بذارم 🤔❤23👍9❤🔥1
Forwarded from RandRng
اگر از Docker Desktop استفاده میکنید حتما باید آپدیتش کنید؛ یک vulnerability سطح بالا توی نحوه پیادهسازی داره (آپدیت آخر مشکل رو حل کرده)
https://nvd.nist.gov/vuln/detail/CVE-2025-9074
این مورد باعث میشه با ۲ خط کد بشه تمام موارد امنیتی رو دور زد و به سیستم عامل اصلی دسترسی گرفت.
توی گزارش اصلی فقط ویندوز گفته شده (نمیدونم مک هم داره یا نه)
https://nvd.nist.gov/vuln/detail/CVE-2025-9074
این مورد باعث میشه با ۲ خط کد بشه تمام موارد امنیتی رو دور زد و به سیستم عامل اصلی دسترسی گرفت.
توی گزارش اصلی فقط ویندوز گفته شده (نمیدونم مک هم داره یا نه)
👍26❤1
Forwarded from RandRng
دارم فصل ۱۰ کتاب Rust web programming 3rd edition رو ریویو میکنم، این بخش بهترین نکتهای هست که داره.
👍8
Forwarded from RandRng
خیلی پستهای مختلف میبینم که میگن؛ لایه logic, data, view, .... رو از هم جدا کنید و ازین حرفا (طرف ۲ هفتس کلین کد خونده) که نکته خیلی خوبی هست اما نه همه جا
و خیلی وقتا هم کد دستم اومده که دیدم؛ طرف زده
میرم کد رو میخونم میبینم ۱ خط کد نوشته یک return ساده.
این مدل جداسازی مزخرفترین کاری هست که میتونید انجام بدید.
نکتهاش توی کتاب بالا هم هست؛
دولوپر بعدی، بیچاره میشه تا ذهنش رو دور این چیزا سر و سامون بده و متوجه بشه فایلها و ... چطوری به هم ارتباط داره
همون کار رو میکنه؛ ۱۰۰ برابر خواناتر و تمیزتر هست و در صورت رشد کردن کدش؛ توی refactor جدا خواهد شد.
بعضی وقتا آدما برای
مثال دیگر:
این رو زیاد میبینم؛
بعد میرم توی مسیری که گفته شده:
ببین ذهن من چقدر باید اذیت بشه که توی توسعه کدهای بعدی یادش باشه که اینکار رو برای یک strip ساده انجام بده.
حالا فرض کنید یک پروژه ۱ میلیون خط کدی؛ اینطوری نوشته شده باشه!
بنظرتون این پروژه clean code هست یا shit code ؟!
یادتون نره؛ refactor پنالتی نیست، بلکه نشون میده شما به کد و پروژه زیر دستتون اهمیت میدید!
من ترجیح میدم
رو داشته باشم و وقتی این تمیز کاری دیتای ورودی بزرگتر شد اونوقت اون رو جدا کنم.
و خیلی وقتا هم کد دستم اومده که دیدم؛ طرف زده
get_repository
بعد این رو گذاشته توی یک پوشه و فایل دیگه میرم کد رو میخونم میبینم ۱ خط کد نوشته یک return ساده.
این مدل جداسازی مزخرفترین کاری هست که میتونید انجام بدید.
نکتهاش توی کتاب بالا هم هست؛
دولوپر بعدی، بیچاره میشه تا ذهنش رو دور این چیزا سر و سامون بده و متوجه بشه فایلها و ... چطوری به هم ارتباط داره
repository= .....
همون کار رو میکنه؛ ۱۰۰ برابر خواناتر و تمیزتر هست و در صورت رشد کردن کدش؛ توی refactor جدا خواهد شد.
بعضی وقتا آدما برای
clean code
زدن، گند میزنند توی خوانایی و حتی clean
بودن پروژه چرا چون clean code
رو فقط در سطح یک اسکریپت بهش نگاه میکنند در سطح کل پروژه.مثال دیگر:
این رو زیاد میبینم؛
cleaned_text = preprocess(mytext)
بعد میرم توی مسیری که گفته شده:
utils/preprocessing.py
def preprocess(text:str):
return text.strip()
ببین ذهن من چقدر باید اذیت بشه که توی توسعه کدهای بعدی یادش باشه که اینکار رو برای یک strip ساده انجام بده.
حالا فرض کنید یک پروژه ۱ میلیون خط کدی؛ اینطوری نوشته شده باشه!
بنظرتون این پروژه clean code هست یا shit code ؟!
یادتون نره؛ refactor پنالتی نیست، بلکه نشون میده شما به کد و پروژه زیر دستتون اهمیت میدید!
من ترجیح میدم
text = input.strip()
رو داشته باشم و وقتی این تمیز کاری دیتای ورودی بزرگتر شد اونوقت اون رو جدا کنم.
👍30❤3
Forwarded from RandRng
#موقت
وسط توضیح برق رفت
```python
```
from utils.preprocessing import preprocess
...
cleaned_text = preprocess(text)
...
این میزان کدی هست که باید برنامه نویس بعدی توی ذهنش نگهداره 👆
بجای :
text = input.strip()
حالا اینو ضربدر ۱۰۰ یا ۱,۰۰۰ کنید برای یک پروژه توی اسکیل استاندارد.
وسط توضیح برق رفت
utils/preprocessing.py
:def preprocessing(text: str) :
return text.strip()
utils/__init__.py
```python
```
from utils.preprocessing import preprocess
...
cleaned_text = preprocess(text)
...
این میزان کدی هست که باید برنامه نویس بعدی توی ذهنش نگهداره 👆
بجای :
text = input.strip()
حالا اینو ضربدر ۱۰۰ یا ۱,۰۰۰ کنید برای یک پروژه توی اسکیل استاندارد.
👍26❤4
Python Hints
یکی از پروژهها رو جابجا کردیم و اینطوری شد که: بجای docker از podman استفاده بشه بجای docker swarm, docker stack, ... هم از k8s استفاده بشه ی مقدار قبلتر هم که همگی روی ruff و mypy رفته بودیم و pre-commit رو اینطوری تنظیم کردیم. دیگه یکی از هم تیمیها…
دستورات مهم uv, چون درموردش ازم پرسیدید.
تمام پروژههای خودم رو بردم روی این مورد؛ و اکثر پروژههای شرکت که مسئولیت تیم نگهداری و توسعهاش با من هست.
برای دپلویها هم، از
تمام پروژههای خودم رو بردم روی این مورد؛ و اکثر پروژههای شرکت که مسئولیت تیم نگهداری و توسعهاش با من هست.
برای دپلویها هم، از
uv
تو مرحله build
روی Docker
استفاده میکنم👍13❤2
تا همین ماه پیش هم اگر از من راجب کتاب داکر میپرسید، نسخه اول کتاب
رو معرفی میکردم؛ نوشتار فوقالعاده و جزئیات به اندازه کافی و البته تصاویر خوب برای انقال نکات مهم.
توی کسانی که نسخه اول رو بهشون معرفی کردم، ندیدم کسی کتاب رو بخونه و درک اشتباه از عملکرد داکر داشته باشه.
حالا نسخه دوم کتاب معرفی شده (برای اونایی که بهونهاشون تغییر دستورات بود)
شخصاً هنوز فرصت نکردم بخونم، اما یک مرور سریع کردم و بنظرم ازین به بعد باید این نسخه رو دنبال کرد.
(راستی قابلیت استوری گذاشتن کانال رو از دست دادیم، اگر کتابهایی که قبلتر معرفی شدند رو خواستید روی اسم کانال بزنید و وارد بخش
#Book@pyHints
Docker in a month of lunches
رو معرفی میکردم؛ نوشتار فوقالعاده و جزئیات به اندازه کافی و البته تصاویر خوب برای انقال نکات مهم.
توی کسانی که نسخه اول رو بهشون معرفی کردم، ندیدم کسی کتاب رو بخونه و درک اشتباه از عملکرد داکر داشته باشه.
حالا نسخه دوم کتاب معرفی شده (برای اونایی که بهونهاشون تغییر دستورات بود)
شخصاً هنوز فرصت نکردم بخونم، اما یک مرور سریع کردم و بنظرم ازین به بعد باید این نسخه رو دنبال کرد.
(راستی قابلیت استوری گذاشتن کانال رو از دست دادیم، اگر کتابهایی که قبلتر معرفی شدند رو خواستید روی اسم کانال بزنید و وارد بخش
posts
بشید)#Book@pyHints
❤41👍10
Python Hints
اومدم یک تولز معرفی کنم و برم : من حدودا ۲ سالی میشه که Postman ندارم؛ از وقتی که لاگین و Sync و ... کم کم اجباری شد (احمقانه) ی مدت طولانی رفتم روی کد پایتون؛ یک بخشی داشتم به اسم api client توی اکثر کدهام که خودش ی پروژه کنار پروژه اصلی میشه ( کارفرما و…
Bruno
نسخه
vscode-extension
رو هم منتشر کرد.🔥23
توی معماری سیستم یک اصطلاحی داریم به اسم؛
که خب یک
معماری سیستم مثلاً قرار بوده micro-service باشه؛ در نگاه اول هم هست و حتی از تمام ابزارهای لازم هم داره استفاده میشه اما به اشتباه.
کل سیستم رو امروز کنار هم چیدم و روی یک سرور بالا آوردم (بجای چندتا سرور) و تبدیلش کردم به
البته من مطمئن بودم که اینطوری میشه به سه دلیل :
۱- به وضوح
۲- تعداد درخواستهای بین سرویسها زیاد بود
۳- خیلی از زمان پروفایلنگ، برای درخواست بین سرویسها هدر میرفت روی نتورک. (که خب حتی
این موضوع دلیلی شد؛ بیام چندتا تعریف اشتباه که دائم میشنوم رو انتقال بدم:
۱- توی ماکروسرویس هر سرویس باید دیتابیس جدا داشته باشه.
این تعریف درسته، اما تفسیر غلط ازش زیاده؛ مثلاً ۹۹٪ فکر میکنند این یعنی برای هر سرویس باید یک سرور
مثلاً سرویس
۲- هر تابع، متد یا ... باید
بله درسته، این یکی از موارد مهم هست اما تفسیر اشتباه ازش زیاده، مثلاً:
فرض کنید سرویس payment بالا، بعد از اینکه پرداخت انجام شد باید به بخش انبارداری تیکت بزنیم که پرداخت موفق بوده موجودی رو کم کن، به بخش حسابداری بزنیم که فاکتور صادر شده پرداخت شد و مثلاً به بخش ارسال کالا هم بگیم چیو بستهبندی و ارسال کنه به چه آدرسی ...
اینو دیدم که میگم، به طرف میگم، خب عالی توابع اینکارها رو بذار یکجا داخل یک تابع و درخواست بده اگر مشکلی توی پرداخت پیش اومد همه باهم باید
یک ساعت داشتم براش توضیح میدم؛ که این تابع SRP رو رعایت میکنه چون تو فقط داری میگی من پول رو پرداخت کردم موفق بود یا نه.
۳- ماکروسرویس بهتره ...
نه چون یک چیزی سختتر هست پیادهسازیش لزوماً بهتر نیست، بسیار بسیار پروژه دیدم که گفتم خب همهی چیزایی که اینا لازم دارن اگر
چندتا برداشت اشتباه دیگه هم بود که متأسفانه یادم نیست دیگه، ولی تبدیل سیستم به یک
حتی برای مرحله بعدی هم پیشنهاد کردم اول سراغ
و بالا آوردن چندتا
نهایتاً؛ البته من میدونم خیلی از این برداشتهای اشتباه از کجا میاد.
منابع ترجمه شده به فارسی.
ترجمه اشتباه لغوی یک کلمه، باعث میشه معنی یک جمله بطور کامل عوض بشه.
distributed monolithic
که خب یک
anti-pattern
هست برای معماری micro-service
اول هفته با یک شرکتی برای مشاوره صحبت کردیم (کارشون رو قبول نکردم ولی یک قرارداد کوچک بستم برای اینکه بگم مشکل فعلی سیستم کجاس) معماری سیستم مثلاً قرار بوده micro-service باشه؛ در نگاه اول هم هست و حتی از تمام ابزارهای لازم هم داره استفاده میشه اما به اشتباه.
کل سیستم رو امروز کنار هم چیدم و روی یک سرور بالا آوردم (بجای چندتا سرور) و تبدیلش کردم به
multi app monolithic
اولش خیلی ناراحت و نگران بودند که پرفورمنس خراب میشه و ازین حرفا ولی بعد توی تستها دیدند که حداقل ۲ برابر سرعت پاسخ و تعداد درخواستهایی که هندل میشه بیشتره.البته من مطمئن بودم که اینطوری میشه به سه دلیل :
۱- به وضوح
anti pattern
رو میدیدم۲- تعداد درخواستهای بین سرویسها زیاد بود
۳- خیلی از زمان پروفایلنگ، برای درخواست بین سرویسها هدر میرفت روی نتورک. (که خب حتی
async
هم نبود که حداقل cpu هدر نره) این موضوع دلیلی شد؛ بیام چندتا تعریف اشتباه که دائم میشنوم رو انتقال بدم:
۱- توی ماکروسرویس هر سرویس باید دیتابیس جدا داشته باشه.
این تعریف درسته، اما تفسیر غلط ازش زیاده؛ مثلاً ۹۹٪ فکر میکنند این یعنی برای هر سرویس باید یک سرور
Postgres
جدا داشته باشند، نه لزوماً مفهوم این تعریف اینه که: مثلاً سرویس
auth
شما نره دیتای سرویس payment
رو بخونه حتی اگر جفتشون روی یک دیتابیس هستند (فقط دوتا تیبل جداشده) و برای گرفتن دیتای مورد نیازش به سرویس payment
درخواست بده۲- هر تابع، متد یا ... باید
single responsibility
داشته باشه.بله درسته، این یکی از موارد مهم هست اما تفسیر اشتباه ازش زیاده، مثلاً:
فرض کنید سرویس payment بالا، بعد از اینکه پرداخت انجام شد باید به بخش انبارداری تیکت بزنیم که پرداخت موفق بوده موجودی رو کم کن، به بخش حسابداری بزنیم که فاکتور صادر شده پرداخت شد و مثلاً به بخش ارسال کالا هم بگیم چیو بستهبندی و ارسال کنه به چه آدرسی ...
اینو دیدم که میگم، به طرف میگم، خب عالی توابع اینکارها رو بذار یکجا داخل یک تابع و درخواست بده اگر مشکلی توی پرداخت پیش اومد همه باهم باید
rollback
بخوره (توجه به بحث قبل شما حق نداری، تیبل سرویسهای دیگه رو دستکاری کنی)؛ برگشته میگه پس Single Responsiblity
چی میشه ؟یک ساعت داشتم براش توضیح میدم؛ که این تابع SRP رو رعایت میکنه چون تو فقط داری میگی من پول رو پرداخت کردم موفق بود یا نه.
۳- ماکروسرویس بهتره ...
نه چون یک چیزی سختتر هست پیادهسازیش لزوماً بهتر نیست، بسیار بسیار پروژه دیدم که گفتم خب همهی چیزایی که اینا لازم دارن اگر
monolithic
بود، هم سریعتر بود هم سرعت توسعهاش بیشتر بود هم نیاز به این همه دولوپر نداشت.چندتا برداشت اشتباه دیگه هم بود که متأسفانه یادم نیست دیگه، ولی تبدیل سیستم به یک
monolithic
واقعی توی این پروژه نتایج خیلی بهتری داشت.حتی برای مرحله بعدی هم پیشنهاد کردم اول سراغ
Load balance
و بالا آوردن چندتا
instance
از همین monolithic
برند، بعد برای تبدیل به micro-sercive از یکی که معماری رو واقعاً بلد هست کمک بگیرند نه کسی که پوشه پوشه کردن فایلای پایتونش رو فقط یاد گرفته.نهایتاً؛ البته من میدونم خیلی از این برداشتهای اشتباه از کجا میاد.
منابع ترجمه شده به فارسی.
ترجمه اشتباه لغوی یک کلمه، باعث میشه معنی یک جمله بطور کامل عوض بشه.
👍40❤11👏2
#توضیح
خیلی وقتا بهم میگن؛ این چیزایی که میگی و تأکید میکنی روش برای کسی که تازه شروع کرده یا داره شروع میکنه خوب نیست، دست انداز میشه دلزده میشه و ....
اولاً من اینارو برای بچههای سطح بالاتر میگم؛ برای تازهکار شنیدنش خوبه ولی لزومی نداره روز اول بره سراغ این موارد.
ولی خب
یک مثال ساده میزنم همه درک کنند؛ زبان انگلیسی خوندن بچههای کوچیک رو دیدید ؟ زیر ۸ سال رو منظورم هست.
اگر سر کلاساشون نشسته باشید، هیچوقت درس دادن گرامر انگلیسی رو نمیبینید! گرامر جزو موارد سخت هست، چیز سخت دلزده میکنه بچه رو
ولی
این دلیل نمیشه معلم گرامر اشتباه استفاده کنه؛ توی طول آموزش بچه گرامر نخونده اصلا ولی موقع صحبت کردن از گرامر درست استفاده میکنه، حتی بعد چند ترم بدون خوندن گرامر پترن گرامر اشتباه رو هم یاد گرفته و اگر جلوش اشتباه بگی بهت میخنده
تست کنید 👆
داستان گیر دادن من هم همین هست؛ کسی که آموزش میده لزومی نداره تمام موارد و جزئیات رو به یک تازهکار بگه اما همین که توی آموزشش اشتباه نگه و از حالات درست استفاده کنه باعث میشه ذهن نیرویی که تربیت میکنه آماده باشه.
در نهایت:
همونطوری که خروجی همهی کلاسهای آموزش زبان انگلیسی، مترجمهای برتر ادبیات کلاسیک انگلیسی نیست و حتی ممکنه فقط
ازش در بیاد؛ قرار هم نیست خروجی همه شاگردهای شما
خلاصه؛ اگر حتی مقدمات یک چیزی رو درس میدی، باید اصول و قواعد رو رعایت کنی وگرنه خیانت داری میکنی
خیلی وقتا بهم میگن؛ این چیزایی که میگی و تأکید میکنی روش برای کسی که تازه شروع کرده یا داره شروع میکنه خوب نیست، دست انداز میشه دلزده میشه و ....
اولاً من اینارو برای بچههای سطح بالاتر میگم؛ برای تازهکار شنیدنش خوبه ولی لزومی نداره روز اول بره سراغ این موارد.
ولی خب
یک مثال ساده میزنم همه درک کنند؛ زبان انگلیسی خوندن بچههای کوچیک رو دیدید ؟ زیر ۸ سال رو منظورم هست.
اگر سر کلاساشون نشسته باشید، هیچوقت درس دادن گرامر انگلیسی رو نمیبینید! گرامر جزو موارد سخت هست، چیز سخت دلزده میکنه بچه رو
ولی
این دلیل نمیشه معلم گرامر اشتباه استفاده کنه؛ توی طول آموزش بچه گرامر نخونده اصلا ولی موقع صحبت کردن از گرامر درست استفاده میکنه، حتی بعد چند ترم بدون خوندن گرامر پترن گرامر اشتباه رو هم یاد گرفته و اگر جلوش اشتباه بگی بهت میخنده
تست کنید 👆
داستان گیر دادن من هم همین هست؛ کسی که آموزش میده لزومی نداره تمام موارد و جزئیات رو به یک تازهکار بگه اما همین که توی آموزشش اشتباه نگه و از حالات درست استفاده کنه باعث میشه ذهن نیرویی که تربیت میکنه آماده باشه.
در نهایت:
همونطوری که خروجی همهی کلاسهای آموزش زبان انگلیسی، مترجمهای برتر ادبیات کلاسیک انگلیسی نیست و حتی ممکنه فقط
I am a blackboard
ازش در بیاد؛ قرار هم نیست خروجی همه شاگردهای شما
Dennis Ritchie
باشه، اتفاقاً خیلیهاشون قراره خیلی زود متوجه بشوند اصلا علاقهای به برنامهنویسی ندارند فقط لایک شدن پستای اینستاگرامشون و ویدئو دادن توی یوتیوب براشون مهمهخلاصه؛ اگر حتی مقدمات یک چیزی رو درس میدی، باید اصول و قواعد رو رعایت کنی وگرنه خیانت داری میکنی
❤60👍29👏7
Python Hints
لطفاً پیامهای پین شده کانال رو بطور کامل نگاه کنید، قبل از هرگونه سوال و جواب : 🌹 زحمت این پست رو یکی از اعضا کشیدند 🌹 logging : https://t.iss.one/pyHints/446 https://t.iss.one/pyHints/81 https://t.iss.one/pyHints/127 Dunder methods https://t.iss.one/pyHints/12 https://t.iss.one/pyHints/14…
This media is not supported in your browser
VIEW IN TELEGRAM
❤23