این گذارش برای بچههای توسعه دهنده هوش مصنوعی و انتخاب توزیع جایگزین برای ubuntu :
رو نصب کردم، مشکلات ubuntu رو اصلا نداشت، درایور تمام سختافزارها رو به درستی نصب کرده بود (خیلی جای تعجب داشت، چون روی اوبونتو و ... همیشه شخصا اینکار رو میکردم، اونم نسخه کاستومایز شده)
و البته dual screen رو خیلی فوقالعاده پشتیبانی میکرد
اما مشکلاتش برای کار ما:
متأسفانه تقریباً هر ورژن اصلی cuda فقط برای یک نسخه و ورژن از fedora اومده
11.8 --> fedora 35
12.0 --> fedora 36
12.2 --> fedora 37
و هیچکدوم بطور رسمی fedora 38 رو هم پشتیبانی نمیکنه که خب خوب نیست. (مشکل از LTS نبودن فدورا هست)
اما واقعاً فوقالعاده بود و بیش از حد سریع.
Rocky Linux 9
با نسخه ۸ بسیار کار کرده بودم و عالی بود بخصوص روی سرور ورژن ۹ قطعاً بهتر خواهد بود (امیدوارم)
و چون بر اساس
ساخته میشه خیالم کاملاً راحته که مشکلات آپدیت و ...
رو نخواهد داشت (این پروژه جایگزینCentOS هست و توسط مدیران ارشد همون پروژه اداره میشه، در پاسخ به IBM و عدم حمایت از
در نهایت اگر با این مورد هم زه مشکل بخورم
خیلی سال پیش معرفی کردم و روش بودم، (چون طرفدار
و حالا که پیشرفت زیادی داشته بهتر از ubuntu هم هست (بالاخره یک سرس چشم دیگه روی کدهای ubuntu و تستهاش هست دیگه) نهایت میرم سراغ این گزینه اگر هیچ چیز جواب نده
Fedora 38
رو نصب کردم، مشکلات ubuntu رو اصلا نداشت، درایور تمام سختافزارها رو به درستی نصب کرده بود (خیلی جای تعجب داشت، چون روی اوبونتو و ... همیشه شخصا اینکار رو میکردم، اونم نسخه کاستومایز شده)
و البته dual screen رو خیلی فوقالعاده پشتیبانی میکرد
اما مشکلاتش برای کار ما:
متأسفانه تقریباً هر ورژن اصلی cuda فقط برای یک نسخه و ورژن از fedora اومده
11.8 --> fedora 35
12.0 --> fedora 36
12.2 --> fedora 37
و هیچکدوم بطور رسمی fedora 38 رو هم پشتیبانی نمیکنه که خب خوب نیست. (مشکل از LTS نبودن فدورا هست)
اما واقعاً فوقالعاده بود و بیش از حد سریع.
Rocky Linux 9
با نسخه ۸ بسیار کار کرده بودم و عالی بود بخصوص روی سرور ورژن ۹ قطعاً بهتر خواهد بود (امیدوارم)
و چون بر اساس
RedHat
ساخته میشه خیالم کاملاً راحته که مشکلات آپدیت و ...
Ubuntu
رو نخواهد داشت (این پروژه جایگزین
CentOS
بعد از خرید Redhat
)در نهایت اگر با این مورد هم زه مشکل بخورم
Pop_OS
!خیلی سال پیش معرفی کردم و روش بودم، (چون طرفدار
system76
بودم) و حالا که پیشرفت زیادی داشته بهتر از ubuntu هم هست (بالاخره یک سرس چشم دیگه روی کدهای ubuntu و تستهاش هست دیگه) نهایت میرم سراغ این گزینه اگر هیچ چیز جواب نده
👍26🕊2
Python Hints
این گذارش برای بچههای توسعه دهنده هوش مصنوعی و انتخاب توزیع جایگزین برای ubuntu : Fedora 38 رو نصب کردم، مشکلات ubuntu رو اصلا نداشت، درایور تمام سختافزارها رو به درستی نصب کرده بود (خیلی جای تعجب داشت، چون روی اوبونتو و ... همیشه شخصا اینکار رو میکردم،…
#موقت
در طول این پروسه چون فکر میکنم خیلی طولانی تر از آنچه که باید میشه (بخاطر چیزایی که در مورد
Nvidia - linux
و درگیریشون میدونیم)
ادامه بحث رو توی
@DevChaiChat
میذارم، الان توی این وضعیتم که خب
Ubuntu *.04
که دیگه stable نیست (سرچ کنید دلایلش میاد)
Fedora
هم که LTS نداره و اتفاقات اخیر
RedHat
حتی تصمیم رو خطری میکنه
RockyLinux
به تنهایی فوقالعادهاس اما
Nvidia 3090
داره اذیت میکنه و نمیذاره محیطهای گرافیکی حتی موقت نمایش داده بشه (blank screen یا no reponse دارم)
یکی از بچهها پیشنهاد داد
Rocky
رو نصب کنم بعد توی tty2 بیام nvidia رو نصب کنم و ...
نمیدونم چطوری میشه اوضاع باید تست کنم ولی احتمال زیاد میرم سمت Xfce و بعد باید دستی بشینم کانفیگ کنم.
پافشاریم روی Rocky برای این هست که ۱۰ سال پشتیبانی داره
و اگر همین بار اول درست کانفیگ بشه، دیگه نباید دردسر خاصی داشته باشم.
در طول این پروسه چون فکر میکنم خیلی طولانی تر از آنچه که باید میشه (بخاطر چیزایی که در مورد
Nvidia - linux
و درگیریشون میدونیم)
ادامه بحث رو توی
@DevChaiChat
میذارم، الان توی این وضعیتم که خب
Ubuntu *.04
که دیگه stable نیست (سرچ کنید دلایلش میاد)
Fedora
هم که LTS نداره و اتفاقات اخیر
RedHat
حتی تصمیم رو خطری میکنه
RockyLinux
به تنهایی فوقالعادهاس اما
Nvidia 3090
داره اذیت میکنه و نمیذاره محیطهای گرافیکی حتی موقت نمایش داده بشه (blank screen یا no reponse دارم)
یکی از بچهها پیشنهاد داد
Rocky
رو نصب کنم بعد توی tty2 بیام nvidia رو نصب کنم و ...
نمیدونم چطوری میشه اوضاع باید تست کنم ولی احتمال زیاد میرم سمت Xfce و بعد باید دستی بشینم کانفیگ کنم.
پافشاریم روی Rocky برای این هست که ۱۰ سال پشتیبانی داره
و اگر همین بار اول درست کانفیگ بشه، دیگه نباید دردسر خاصی داشته باشم.
👍13❤2
Opera browser
رو نصب کنید، علاوه بر ویژگیهای خوبی که داره (
Adblock - Islands
, ... )که یک مرورگر فوقالعاده سریع هست و ...
مثل
Microsoft Edge
یک هوش مصنوعی برای پاسخ به سوالات هم داره من چندین سوال رو ازش پرسیدم بسیار بهتر از
Edge
جواب داد، بهش میگم که بهم توصیه شده فلان ابزار روی توی
/usr/local
نصب کنم ولی میدونم جاش باید توی
/opt
باشه، برام تحلیل کرده چرا opt منطقیتر هست، البته خودش هم از اول opt رو پیشنهاد کرده بود.
👍24👎1👾1
این آخرین پست درباره موضوع لینوکس و ... هست (با توجه به اتفاقات اخیر)
ببخشید که کمی از بحث دور شدم؛ اما هدف داشتم
خیلی از بچههایی که روی AI کار میکنند و خیلی دیگه از توسعه دهندههای پایتون که وقت کاستومایز کردن و ... ندارند به جز Ubuntu متاسفانه گزینه دیگری ندارند برای همین وقتی دیدم Ubuntu دیگه رو به افول گذاشته (تمرکزش روی سرور هست و داره تلاش میکنه مثل RedHat بتونه از سرور پول در بیاره) ترجیح دادم کمی از موضوع اصلی کانال دور بشم و روی جایگزینهای Ubuntu صحبت کنم.
توزیعهای بسیار زیادی رو دوستان معرفی کردند و خودم میشناختم اما موضوع پشتیبانی از فریمورکها و پکیجهای مورد نیاز AI هم بود و البته سادگی راهاندازی توزیع هدف و میزان استیبل بودنش
همه اینها من رو رسوند به
1- روی کاغذ هیچ توزیعی به اندازه این مورد استیبل نیست (که رایگان هم باشه) از روی
۲- راهاندازیش میتونه به اندازه سواد و توانایی شما؛ ساده یا سخت باشه
مثلا من برای راهاندازی چون کارت گرافیک
3- پکیجهایی که وجود نداره رو توی
چندتا توصیه اگر این ویژگیها رو دوست دارید و دستی هم بر آتش دارید یا علاقه به کاستومایز کردن :
در نهایت
تا اینجا هنوز هیچکدوم از مشکلات
امیدوارم تا چندسال آبنده هم همینطوری بمونه.
جایگزین مناسب برای
سوال بحث یا ... اگر بود توی گروه بحث آزاد :
@DevChaiChat
ببخشید که کمی از بحث دور شدم؛ اما هدف داشتم
خیلی از بچههایی که روی AI کار میکنند و خیلی دیگه از توسعه دهندههای پایتون که وقت کاستومایز کردن و ... ندارند به جز Ubuntu متاسفانه گزینه دیگری ندارند برای همین وقتی دیدم Ubuntu دیگه رو به افول گذاشته (تمرکزش روی سرور هست و داره تلاش میکنه مثل RedHat بتونه از سرور پول در بیاره) ترجیح دادم کمی از موضوع اصلی کانال دور بشم و روی جایگزینهای Ubuntu صحبت کنم.
توزیعهای بسیار زیادی رو دوستان معرفی کردند و خودم میشناختم اما موضوع پشتیبانی از فریمورکها و پکیجهای مورد نیاز AI هم بود و البته سادگی راهاندازی توزیع هدف و میزان استیبل بودنش
همه اینها من رو رسوند به
Rocky Linux
:1- روی کاغذ هیچ توزیعی به اندازه این مورد استیبل نیست (که رایگان هم باشه) از روی
RedHat Enterprise
ساخته میشه و افراد مهمی پشتش هستند ( کسانی که CentOS
رو این همه سال توسعه دادند )؛ پشتیبانی ۱۰ ساله هم داره ورژنهای اصلی.۲- راهاندازیش میتونه به اندازه سواد و توانایی شما؛ ساده یا سخت باشه
مثلا من برای راهاندازی چون کارت گرافیک
Onboard
ندارم نمیتونستم از نسخه workstation
برای نصب استفاده کنم و رفتم سراغ نسخه minimal
ترتیب نصب هم برای اینکه به مشکل نخورید :Rocky linux minimal --> install
tty : --> sudo dnf update
reboot
sudo dnf install group Workstation
nvidia-driver installation (follow cuda installation documentation instructions)
Before Reboot, Disable nouveau
reboot
Install cuda and ...
۲ تا نکته من چون تنبل بودم install group
رو استفاده کرد بعد مواردی که بدردم نمیخورد رو حذف یا ادیت کردمcuda, cudnn,
رو از روی داکیومنت اصلی خودشون که سایت nvidia
منتشر کرده نصب کردم و بعد از نصب (چون ورژن قدیمی تر رو میخواستم نه آخرین نسخه) repo
اش رو حذف کردم.3- پکیجهایی که وجود نداره رو توی
epel-release, flatpak, rpmfusion
قطعا پیدا میکنید که خیلی راحت نصب میشه چندتا توصیه اگر این ویژگیها رو دوست دارید و دستی هم بر آتش دارید یا علاقه به کاستومایز کردن :
Xfce
رو بجای Gnome
استفاده کنید؛ چندتا باگ وجود داره که احتمالا بخاطر تجهیزات من هست (البته بسیار بسیار کمتر از میزان تغییراتی هست که روی Ubuntu
باید میدادم تا سختافزارهام کار کنه) و اینکه آزار دهنده نیست.در نهایت
Python3.10
وجود نداره که خب باید کامپایل کنید و نصب کنید؛ اصلا هم سخت نیست دیگه (دیفالت 3.9 نصب هست و روی رپو هم 3.11 وجود داره) من اینطوری نصب کردم :dnf updateبرای دستور بعدی من ۱۴ تا ترد رو در اختیار گذاشتم که سریعتر کامپایل بشه (این عدد رو کمتر میتونید بکنید شما)
dnf install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make sqlite-devel xz-devel
wget https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz
tar xzf Python-3.10.13.tgz
cd Python-3.10.13
./configure --enable-optimizations
make -j 14بعد هم تست کنید که درست نصب شده باشه.
nproc
make altinstall
تا اینجا هنوز هیچکدوم از مشکلات
ubuntu
رو ندارم و با نصب هیچکدوم از پکیجها هم به مشکل نخوردم (حتی مشکلات و ارورهای بعد از نصب که توی ubuntu
وجود داشت رو هم ندارم)امیدوارم تا چندسال آبنده هم همینطوری بمونه.
جایگزین مناسب برای
Ubuntu
توی کارهای ما فعلا فقط و فقط Rocky Linux
رو میتونم تایید کنم.سوال بحث یا ... اگر بود توی گروه بحث آزاد :
@DevChaiChat
👍26❤11🆒2👎1🗿1
اگر راجب چیزی اطلاعی نداریم
نه توضیح میدیم
نه تخصصی حرف میزنیم
نه شوخی میکنیم.
این اصول رو یادگرفتن از خود کد زدن هم مهمتر هست.
نه توضیح میدیم
نه تخصصی حرف میزنیم
نه شوخی میکنیم.
این اصول رو یادگرفتن از خود کد زدن هم مهمتر هست.
❤62👍28✍7🗿3👏2
به طرز خیره کنندهای تعداد مشاغل
remote
برای پایتون و django با پرداخت دلاری مبالغ خوب توی چند هفته گذشته بالا رفته
حتماً یک سری بزنید (لینکدین)
جالبتر اینکه توی پایتون دیگه هوش مصنوعی و ... نیست
Senior Python Software Engineer
بسیار زیاد شده.
من هم که کرم مصاحبه رو دارم، چندتا مورد رو که مصاحبه دادم واقعاً سوالات بطور خیلی منطقی و درستی همون موضوعات
Software Engineering
هست، فارغ از هرگونه سوال درمورد
Framework
های معروف پایتون،
خیلیها فهمیدند که کسی که core python رو بخوبی بلد باشه میتونه توی همون چندماه onboard و تسکهای اولیه؛ فریمورک مورد نظر شرکت رو یاد بگیره
به امید روزی که توی ایران خودمون هم این موضوع جا افتاده بشه (هرجا که خودم مسئول باشم تمام تلاشم رو میکنم آدمهارو با میزان درک از core python استخدام کنم فریمورک رو همه میتونند زود یاد بگیرند)
یکی از خفنترین مصاحبهها سوالات الگوریتمش
2-3-4 Tree
بود که خب جزو مسائل سخت هست (حتی برای Senior Software Engineering که بسیار مصاحبه جذابی بود برای خودم).
پ.ن : منظورم از remote هم worldwide remote بود، که خب احتمال کار دادن به ایرانیها توش بیشتر هست.
remote
برای پایتون و django با پرداخت دلاری مبالغ خوب توی چند هفته گذشته بالا رفته
حتماً یک سری بزنید (لینکدین)
جالبتر اینکه توی پایتون دیگه هوش مصنوعی و ... نیست
Senior Python Software Engineer
بسیار زیاد شده.
من هم که کرم مصاحبه رو دارم، چندتا مورد رو که مصاحبه دادم واقعاً سوالات بطور خیلی منطقی و درستی همون موضوعات
Software Engineering
هست، فارغ از هرگونه سوال درمورد
Framework
های معروف پایتون،
خیلیها فهمیدند که کسی که core python رو بخوبی بلد باشه میتونه توی همون چندماه onboard و تسکهای اولیه؛ فریمورک مورد نظر شرکت رو یاد بگیره
به امید روزی که توی ایران خودمون هم این موضوع جا افتاده بشه (هرجا که خودم مسئول باشم تمام تلاشم رو میکنم آدمهارو با میزان درک از core python استخدام کنم فریمورک رو همه میتونند زود یاد بگیرند)
یکی از خفنترین مصاحبهها سوالات الگوریتمش
2-3-4 Tree
بود که خب جزو مسائل سخت هست (حتی برای Senior Software Engineering که بسیار مصاحبه جذابی بود برای خودم).
پ.ن : منظورم از remote هم worldwide remote بود، که خب احتمال کار دادن به ایرانیها توش بیشتر هست.
👍72❤2✍1
line_profiler
نصب :pip install line_profilerاین کد دقیقا همون کاری رو میکنه که مثال
cProfile
انجام میداد :اگر تصویر رو نتونستید بخونید پست قبلی رو ببینید :
https://t.iss.one/pyHints/146
اما بالای هر تابع یک
decorator
جدید اضافه شده؛ از صحبتهای قبلی ی وام بگیرم و اشاره کنم که line_profiler
رو همه جا یا رو کل پروژه استفاده نمیکنیم بخصوص اینکه بسیار کند هم هست.اول
cProfile
بعد توابع یا ... مشکوک رو میاریم داخل line_profile
(درحد یادآوری گفتم اشاره کنم)اسکریپت بالا رو ذخیره میکنیم و بعد دستور :
kernprof -l -v <script-name>.pyرو اجرا میکنیم که خب
<script-name>
اسمی هست که شما برای فایل پایتون خودتون انتخاب کردید.همینجا هم اشاره کنم اگر
-v
رو توی دستور بالا فراموش کردید بزنید و کد خیلی طول میکشید خروجی بده غم غصه نداره (دیدم که میگم)kernprof
خروجیش رو توی هر ۲ حالت توی همون دایرکتوری ذخیره میکنه ی فایل به اسم <script-name>.py.lprof
میتونید بعدش دستور :python -m line_profiler <script-name>.py.lprof
رو بزنید و خروجی بگیرید. ,و اما تفسیر خروجی👍17❤1⚡1🌚1
توی خروجی به تعداد
توی خروجی یک جدول ۶ ستونی هم داریم :
همینجا بپرم روی ستون آخر یعنی :
@profileهایی که نوشتید؛ خروجی خواهید داشت که کاملا از هم جدا هستند (توی مثال بالا
Total time
شروع نتیجه line_profiler
رو نشان میده)Timer unitباشه که جلوتر بگم چی هست ولی
۳
خط اول از اسمهاش مشخص هست :Total timeکل زمان اجرایی که تابع نیاز داشته.
File
اسم اسکریپت رو نشون میده (برای شرایطی که ماژولهای/اسکریپتهای تودرتو دارید)Function
اسم تابع و اینکه از چه خطی توی اسکریپت شروع شده (file
هم که میگه چه اسکریپتی)توی خروجی یک جدول ۶ ستونی هم داریم :
Line #
یا همون line number
خطی که کدهای مورد بحث داخلش هستهمینجا بپرم روی ستون آخر یعنی :
Line Contents
کدهای مورد بحث رو نمایش میده.👍15❤3⚡1
Python Hints
توی خروجی به تعداد @profile هایی که نوشتید؛ خروجی خواهید داشت که کاملا از هم جدا هستند (توی مثال بالا Total time شروع نتیجه line_profiler رو نشان میده) Timer unit باشه که جلوتر بگم چی هست ولی ۳ خط اول از اسمهاش مشخص هست : Total time کل زمان اجرایی که…
.
Hits
نشون میده موقع اجرای اون تابع چندبار اون خط اجرا شده (مثلا به for
های تو در تو نگاه کنید)Time
میزان زمانی که طول کشیده تا اون خط کد اجرا بشه (واحدش Timer Unit
هست) یعنی برای کد bubble_sort
توی خط 5
که نوشته شده 1910.6
این رو نیاید ثانیه تفسیر کنید؛1910.6 Timer unitطول کشیده که خود timer unit اینجا
1e-06 s
هست (یعنی ۱
میکروثانیه)Per Hit
گفتیم که Time
زمان کل Hits
هارو نشون میده اما اگر بخوایم بدونیم یک خط محاسباتی که داخل for loop
نوشته شده چقدر طول کشیده اونوقت چطور باید متوجه شد ؟ این ستون دقیقا همین رو بهتون نشون میده %Time
درصد زمان صرف شده روی این خط از کد نسبت به کل زمان صرف شده رو نشون میده (پس اول این ستون رو نگاه بندازید بهش و تفسیرش کنید)👍16❤1⚡1
یک ساعت نوشتم کنسل زدم پاک شد :/ (متن آپدیت میشه)
این هم یک روش استفاده زا
که خب قطعا من طرفدارش نیستم به دو دلیل :
۱- کدهای بیشتری لازمه؛ طبعا بعد از اتمام هم پاک کردنش دردسر بیشتری داره.
توی مورد
۲- خروجی
حالا شاید بگید خودت گفتی اصولی اینه که
نکته خوبیه ولی سطحی نبینیم :
من تا حالا پروژهای رو ندیدم که با تفییر یک خط کد توی یک تابع
این هم یک روش استفاده زا
line_profiler
هست که دیدم استفاده میشه برای اینکه نیاز نباشه از دستور kernprof -l -v
استفاده کنید.که خب قطعا من طرفدارش نیستم به دو دلیل :
۱- کدهای بیشتری لازمه؛ طبعا بعد از اتمام هم پاک کردنش دردسر بیشتری داره.
توی مورد
decorator
(قبلی) فقط کافی همون رو search & replace
بزنید با هیچی ۲- خروجی
profiling
رو ذخیره نمیکنید با این روش (که قبلا گفتم حداقل دو نسخه دارید یکی قبل تغییر یکی بعد از تغییر)حالا شاید بگید خودت گفتی اصولی اینه که
line_profile
بعد از cProfile
اجرا بشه و خروجی cProfile
رو هم داریم ذخیره میکنید پس نیازی نداریم دیگه ؟نکته خوبیه ولی سطحی نبینیم :
من تا حالا پروژهای رو ندیدم که با تفییر یک خط کد توی یک تابع
optimize
بشه و تمام پس نیاز میشه این فایلها؛ نکته بعدی حجم خروجی line_profile
چیزی نیست که بعد سر نداشتنش بخواهید با تیم سر اینکه چرا یک خط کد ناخواناتر شده بحث کنید (توی مثال بالا ۲۷۲ بایت
هست)👍17⚡2❤2🆒2
Forwarded from Rust for Python developers
این یکی واقعاً جالبه، جایگزین
Flake8, isort, black, pyupgrade, ...
با سرعت خیلی بیشتر.
Ruff
که با Rust نوشته شده، و پروژه
Scipy, Pandas, FastApi, ...
هم سمتش رفتند.
Flake8, isort, black, pyupgrade, ...
با سرعت خیلی بیشتر.
Ruff
که با Rust نوشته شده، و پروژه
Scipy, Pandas, FastApi, ...
هم سمتش رفتند.
docs.astral.sh
Ruff
An extremely fast Python linter and code formatter, written in Rust.
🔥24👍5❤1☃1
چندروز پیش یکی از دوستان ازم کمک خواست روی بررسی جوابی که به سوال مصاحبه داده بود؛ سوال برای سطح
ساده شده صورت مساله این بود :
اصل سوال بصورت توضیحات بخشی از یک پروژه بود که یادم نیست و شخص باید خودش تشخیص میداد چیکار کنه که من اون بخش رو هم توی سادهسازی گفتم دقیقا چی میخوام
پیادهسازی یک
این
پشتیبانی از اضافه کردن
همیشه فکر میکردم سوالات سخت همواره از مباحث درخت و ... هست (نه چیزهای ساده مثل مورد بالا) اما جوری توی پروژه واقعی گنجانده شده بود؛ صورت مساله اصلی رو میگم. که تبدیلش به اینکه دقیقا خود مساله چی میخواد حدود ۲۰ دقیقه وقت گرفت.
کل جلسه مصاحبه ۲ ساعت بود.
چندتا راهنمایی :
بعد از همین مورد برای
واقعا بنظرم سوال پر چالشی بود و توی این مصاحبه میشد به راحتی :
۱- نحوه حل مسئله
۲- میزان تمرکز
۳- میزان دقت
۴- نحوه کد زدن
۵- سواد پایتون
۶- سواد ساختمان داده و الگوریتم
۷- کنترل فشار عصبی و ...
رو تماما امتیازدهی کرد؛ بسیار سوال هوشمندانه و زیرکانهای بود بنظر من برای همین خواستم با شما هم به اشتراک بذارم (البته یک سری شرطها و شرایط خاص هم داشت که من از اونها گذشتم که خیلی طولانی نشه متن)
mid-level, senior
مطرح شده بود (ولی سطحش بالاتر از مدیور هست.)ساده شده صورت مساله این بود :
اصل سوال بصورت توضیحات بخشی از یک پروژه بود که یادم نیست و شخص باید خودش تشخیص میداد چیکار کنه که من اون بخش رو هم توی سادهسازی گفتم دقیقا چی میخوام
پیادهسازی یک
Ring Buffer
در پایتون بطوریکه بجای استفاده از لیستها از Circular Double Linked List
استفاده کنید؛ (پیاده سازی هر ۲ مورد با خود کاربر هست) این
Circular Double Linked List
شما باید یک ویژگی مهم رو داشته باشه :پشتیبانی از اضافه کردن
node
ها با استفاده از ایندکس دهی منفی.همیشه فکر میکردم سوالات سخت همواره از مباحث درخت و ... هست (نه چیزهای ساده مثل مورد بالا) اما جوری توی پروژه واقعی گنجانده شده بود؛ صورت مساله اصلی رو میگم. که تبدیلش به اینکه دقیقا خود مساله چی میخواد حدود ۲۰ دقیقه وقت گرفت.
کل جلسه مصاحبه ۲ ساعت بود.
چندتا راهنمایی :
Ring Buffer = Circular Queue
———Circular Double Linked List
رو باید اول پیادهسازی کنید؛ سریعترین راهکار اینه که اول linked list
رو پیاده سازی کنید؛ بعد همین رو تبدیل به نسخه circular
کنید بعد همین کد رو به double linked list
تبدیل کنید و در نهایت توی متد insert
ایندکسهای منفی رو هم پشتیبانی کنید.بعد از همین مورد برای
Ring Buffer
استفاده کنید (خیلی معقول بنظر نمیاد و دقیقا هم موضوع همین هست؛ قطعا چیزی که معقول نیست رو کتابی راجبش صحبت نکرده - شما هم روش تمرینی نداشتید)واقعا بنظرم سوال پر چالشی بود و توی این مصاحبه میشد به راحتی :
۱- نحوه حل مسئله
۲- میزان تمرکز
۳- میزان دقت
۴- نحوه کد زدن
۵- سواد پایتون
۶- سواد ساختمان داده و الگوریتم
۷- کنترل فشار عصبی و ...
رو تماما امتیازدهی کرد؛ بسیار سوال هوشمندانه و زیرکانهای بود بنظر من برای همین خواستم با شما هم به اشتراک بذارم (البته یک سری شرطها و شرایط خاص هم داشت که من از اونها گذشتم که خیلی طولانی نشه متن)
👍30❤4⚡1
Python Hints
چندروز پیش یکی از دوستان ازم کمک خواست روی بررسی جوابی که به سوال مصاحبه داده بود؛ سوال برای سطح mid-level, senior مطرح شده بود (ولی سطحش بالاتر از مدیور هست.) ساده شده صورت مساله این بود : اصل سوال بصورت توضیحات بخشی از یک پروژه بود که یادم نیست و شخص باید…
اضافه کردن node با ایندکس منفی
۱- چیزی که پیادهسازی نکنم رو راجبش پست نمیذارم (البته منم مثل شرایط مصاحبه همون لحظه کد زدم)
۲- یک راهنمایی دیگه؛ حتما len رو پیاده سازی کنید برای
۳- اگر کمکی لازم بود توی پیاده سازی حتما بپرسید (خوشحال میشم بتونم کمک کنم)
۱- چیزی که پیادهسازی نکنم رو راجبش پست نمیذارم (البته منم مثل شرایط مصاحبه همون لحظه کد زدم)
۲- یک راهنمایی دیگه؛ حتما len رو پیاده سازی کنید برای
Overflow (Ring buffer)
بهش نیاز دارید ۳- اگر کمکی لازم بود توی پیاده سازی حتما بپرسید (خوشحال میشم بتونم کمک کنم)
❤13👍7
متن این تصویر نصف ایران رو بدبخت کرده
نصف دیگه هم که نکرده، تو عمرشون برنامهنویس نبودند.
برنامهنویس سرمایه گذار شرکت شما نیست، به اندازه شما مطمئن به کار و ایده شما برای پیشرفت نیست (توی بهترین حالت اگر شما ۱۰۰٪ مطمئن از پیشرفت هستید برنامهنویس باید روی ۶۰-۷۰٪ بشینه بیش از اینش توهم و حرف هست)
این حق هر برنامهنویسی هست که موقع همکاری با شما با هرجایی که فکر میکنه بهتر هست و به پیشرفتش بیشتر کمک میکنه مصاحبه بده.
حتی اگر پیشرفتی هم نباشه براش و هم سطح کار شما باشه، برنده شرکتی هست که مزایا + برخورد بهتر + امنیت فکری بیشتری رو به نیرو ارائه میده
به همهی برنامهنویس ها هم باید بگم :
قبل از جابجایی مطمئن بشید ۲ بار فکر میکنید، جابجایی توی بهترین حالت هم همیشه ۱۰-۲۰٪ ریسک هست
اما پایندی به شرکتی لطف شما هست نه وظیفه شما.
پ.ن : این تصاویر هوشمندانه انتخاب میشهها، ارتباط شما با شرکت رو مثل روابط عاطفی و خانوادگی نشون میده (اون جمله احمقانه، ماها یک خانواده هستیم هم همین بود)
البته رابطه عاطفی کاملاً یکطرفه، شما پایبند میمونید ولی شرکت به وقت بینیازی شمارو اخراج میکنه
نصف دیگه هم که نکرده، تو عمرشون برنامهنویس نبودند.
برنامهنویس سرمایه گذار شرکت شما نیست، به اندازه شما مطمئن به کار و ایده شما برای پیشرفت نیست (توی بهترین حالت اگر شما ۱۰۰٪ مطمئن از پیشرفت هستید برنامهنویس باید روی ۶۰-۷۰٪ بشینه بیش از اینش توهم و حرف هست)
این حق هر برنامهنویسی هست که موقع همکاری با شما با هرجایی که فکر میکنه بهتر هست و به پیشرفتش بیشتر کمک میکنه مصاحبه بده.
حتی اگر پیشرفتی هم نباشه براش و هم سطح کار شما باشه، برنده شرکتی هست که مزایا + برخورد بهتر + امنیت فکری بیشتری رو به نیرو ارائه میده
به همهی برنامهنویس ها هم باید بگم :
قبل از جابجایی مطمئن بشید ۲ بار فکر میکنید، جابجایی توی بهترین حالت هم همیشه ۱۰-۲۰٪ ریسک هست
اما پایندی به شرکتی لطف شما هست نه وظیفه شما.
پ.ن : این تصاویر هوشمندانه انتخاب میشهها، ارتباط شما با شرکت رو مثل روابط عاطفی و خانوادگی نشون میده (اون جمله احمقانه، ماها یک خانواده هستیم هم همین بود)
البته رابطه عاطفی کاملاً یکطرفه، شما پایبند میمونید ولی شرکت به وقت بینیازی شمارو اخراج میکنه
👍59❤9
توی ادامه بحث
مثل منم باشید
برای پروفایلینگ مموری معمولا از کتابخونه
استفاده میشه ؛ اما حقیقتا شخصا ۶ ماه هست که جایگزین پیدا کردم و چقدر خوشحالم بابت این موضوع :
دقت کنید مصرف مموری کتابخونه
اما چطور ازش استفاده کنیم ؟
همینجا یک موضوع دیگه رو هم بگم (خودتون بخونید) یک پلاگین هم برای
profiling
اینبار میرسیم به اهمیت حافظه؛ وقتی از یک تازه سنیور شده از پروفایلینگ بپرسید راجب cpu
و ... صحبت میکنه از یک با تجربه بپرسید اهمیت مصرف حافظه در کنار زمان اجرا رو هم بهتون میگه مثل منم باشید
profiling GPU
رو هم گذارش میدید (البته به قدرت قبلیها نیست ولی از نداشتنش بهتره)برای پروفایلینگ مموری معمولا از کتابخونه
memory_profiler
استفاده میشه ؛ اما حقیقتا شخصا ۶ ماه هست که جایگزین پیدا کردم و چقدر خوشحالم بابت این موضوع :
memrayکه تصویر بالا خروجی اجرای live هست واقعا پروردگار اطلاعات دقیق مصرف مموری هست.
دقت کنید مصرف مموری کتابخونه
C, Rust, ...
هم که ایمپورت کردید توی پروژه و داره استفاده میشه رو نشون میده که خیلی خیلی مهمه.اما چطور ازش استفاده کنیم ؟
$ pip install memray
همینجا یک موضوع دیگه رو هم بگم (خودتون بخونید) یک پلاگین هم برای
pytest
داره که میتوندی بعدا دنبال کنیدpytest-memray
❤25👍3❤🔥2
Python Hints
توی ادامه بحث profiling اینبار میرسیم به اهمیت حافظه؛ وقتی از یک تازه سنیور شده از پروفایلینگ بپرسید راجب cpu و ... صحبت میکنه از یک با تجربه بپرسید اهمیت مصرف حافظه در کنار زمان اجرا رو هم بهتون میگه مثل منم باشید profiling GPU رو هم گذارش میدید (البته…
سادهترین راه اجرای
ازین دستورات استفاده کنید :
peak memory usage
(بیشترین مصرف مموری در طول اجرای کد) رو بهتون نشون میده.
باقی موارد به ازای هر خط کد یا
پ.ن: همیشه فایل
توی پستهای بعدی میگم چرا .
memray
استفاده از دستور run
هست + flamegraph
همونطور که قبلا گفتم خروجی تمام پروفایلینگهارو باید نگه دارید و نمودار لایو اینکار رو نمیکنه پس قبل از استفاده از نمودار لایو (حین اجرای برنامه تمام دستورات و مصرف مموریهارو نشون میده)ازین دستورات استفاده کنید :
$ memray run <my-script>.pyبعد از اجرا یک فایل با پسوند
bin
برای شما ذخیره میشه که تمام اطلاعات مورد نیاز داخل همین فایل هست.memray flamegraph <some-naming>.binبعد از اجرای دستور بالا یک فایل
html
برای شما ایجاد میشه که اگر با مرورگر باز کنید چیزی مشابه تصویر بالا خواهید داشت. تنها نکتهای که راجب این تصویر لازمه بگم بخش stats
هست که peak memory usage
(بیشترین مصرف مموری در طول اجرای کد) رو بهتون نشون میده.
باقی موارد به ازای هر خط کد یا
import
, .... مصرف مموری رو نشون میده (مثال من شاید خیلی خوب نباشه)پ.ن: همیشه فایل
.html
رو همراه با .bin
روی سیستم خودتون خروجی بگیرید و نگهدارید.توی پستهای بعدی میگم چرا .
❤19⚡1✍1
Python Hints
سادهترین راه اجرای memray استفاده از دستور run هست + flamegraph همونطور که قبلا گفتم خروجی تمام پروفایلینگهارو باید نگه دارید و نمودار لایو اینکار رو نمیکنه پس قبل از استفاده از نمودار لایو (حین اجرای برنامه تمام دستورات و مصرف مموریهارو نشون میده) ازین…
دستور
این حالت برای وقتایی هست که میخواید اثبات کنید
گرفتن ریپورت
بجای گزارشات کلی که توی تغییر سایز
همونطور که از اسمش پیداس میگه اگر از
از بین ۳ تا آپشن بالا توی این مدت شخصا فقط از
اما دوتا آپشن دوست داشتنی دیگه هم وجود داره :
همیشه بعد از اینکه دستور
هم همین کار رو میکنه اما گزارشات رو روی یک
پر استفادهترین حالت بعد از
حتما برای کاستومایز کردن خروجیها و بررسی دقیقتر داکیومنتش رو نگاه کنید (سعی کردم مهمترین مواردی که شخصا استفاده میکنم رو بگم فقط).
run
چندتا option
هم داره که هرکدوم توی شرایط خاص استفاده میشه :memray run --native <my-script>.py
این حالت برای وقتایی هست که میخواید اثبات کنید
numpy
, pandas
, ... هستند که دارند ازین میزان رم استفاده میکنند یا اینکه میخواهید بین توابع مختلفی که پیکجها ارائه میدهند مقایسه انجام بدید.گرفتن ریپورت
html
روی این حالت میتونه طولانی باشه (جزو حالاتی هست که هم bin
هم html
بهتره روی یک سیستم خروجی گرفته بشه)memray run --trace-python-allocators <my-script>.py
بجای گزارشات کلی که توی تغییر سایز
memory pool
گرفته میشه به ازای ایجاد و از بین رفتن هر آبجکت براتون گزارش مموری میده که باز هم خروجی خیلی کندتری خواهد داشت؛ و البته اطلاعات بسیار بیشتر. memray run --follow-fork <my-script>.py
همونطور که از اسمش پیداس میگه اگر از
parent process
فورک گرفته شد وضعیت مموری اون child process
رو هم توی ریپورت بیار.از بین ۳ تا آپشن بالا توی این مدت شخصا فقط از
native
استفاده کردم چندبار (باقی موارد رو نیاز نداشتم)اما دوتا آپشن دوست داشتنی دیگه هم وجود داره :
memray run --live <my-script>.py
همیشه بعد از اینکه دستور
run
رو اجرا کردم (ذخیره بشه) و بعد گزارش html
رو آماده کردم؛ تا وقتی دارم روی memory optimization
کار میکنم تنها دائما از live option
استفاده میکنم و ... رو بهم میده (برای
PID, Thread, Samples, Duration, Max heap size, current heap size
current heap size
) چون توی حالت لایو سریع تغییر میکنه از استفاده میکنم توی جایی که مشکوک هستم به میزان مصرف مموری و اینجوری ی پنجره ۱۰ ثانیهای برای خودم باز میکنم تا دقیق بررسی کنم توی رم چه اتفاقی داره رخ میده.
time.sleep(10)
memray run --live-remote <my-script>.py
هم همین کار رو میکنه اما گزارشات رو روی یک
port
خاص میفرسته (بازم من ازش استفاده نکردم)memray run --live --native <my-script>.py
پر استفادهترین حالت بعد از
live option
برای من استفاده ترکیبی از live
و native
هست (البته که حوصله آدم سر میره بعضی وقتها تا گزارشش آماده بشه)حتما برای کاستومایز کردن خروجیها و بررسی دقیقتر داکیومنتش رو نگاه کنید (سعی کردم مهمترین مواردی که شخصا استفاده میکنم رو بگم فقط).
👍14❤8⚡1🌚1
برای دوستانی که بهونه سابقه کاری میآوردند
همونطور که تو جلسه رزومه نویسی گفتم، اگر یاد بگیرید و نکاتی که گفتم رو رعایت کنید، در حداقل حالت باید به مصاحبه دعوت بشید.
اینکه به این مرحله نمیرسید بخاطر سابقه کاری و ... نیست (پوزیشن جونیور)
بلکه بخاطر عدم توانایی شما در نوشتن رزومه هست.
پ.ن : از ایشان برای اشتراک گذاری تصویر اجازه گرفته شد.
همونطور که تو جلسه رزومه نویسی گفتم، اگر یاد بگیرید و نکاتی که گفتم رو رعایت کنید، در حداقل حالت باید به مصاحبه دعوت بشید.
اینکه به این مرحله نمیرسید بخاطر سابقه کاری و ... نیست (پوزیشن جونیور)
بلکه بخاطر عدم توانایی شما در نوشتن رزومه هست.
پ.ن : از ایشان برای اشتراک گذاری تصویر اجازه گرفته شد.
👍29👏12❤2🤪1
Search term:
1) IBM north pole chip
2) ResNet50 performance comparison IBM northpole results
👍11✍2