Rust for Python developers @pyrust Channel on Telegram

Rust for Python developers

@pyrust


Rust programming language for python developers

یک توسعه دهنده پایتون هستم که سعی میکنم rust یاد بگیرم.
تو این مسیر منابع و نظرات شخصی خودم رو با آیندگان هم به اشتراک میذارم

اگر به هوش مصنوعی و پایتون علاقه دارید به کانال :
@pytens
@pyhints
سر بزنید.

Rust for Python developers (Persian)

با عنوان 'Rust برای توسعه دهندگان پایتون'، کانال '@pyrust' یک منبع عالی برای توسعه دهندگان پایتون است که علاقه‌مند به یادگیری زبان برنامه‌نویسی Rust هستند. در این کانال، یک توسعه‌دهنده پایتون با اشتیاق به یادگیری Rust، منابع و تجربیات خود را با دیگران به اشتراک می‌گذارد. این کانال یک فضای عالی برای آموزش و گفتگو در مورد Rust برای توسعه‌دهندگان پایتون فراهم می‌کند. اگر شما نیز به هوش مصنوعی و پایتون علاقه‌مند هستید، به کانال ‌های '@pytens' و '@pyhints' هم سر بزنید تا از منابع دیگری در این زمینه بهره‌مند شوید.

Rust for Python developers

18 Jan, 17:05


هفته پیش اولین پروژه Rust خودم رو تحویل دادم.

یک ابزار تحت ترمینال برای آنالیز فایل (تعداد خیلی بالا) بود.
توی پایتون نوشته شده بود، می‌خواستند بیارنش روی Rust و یکسری ویژگی جدید هم بهش اضافه کنند.
هرچند من بعد از خوندن کدها بهشون اطلاع دادم که کد پایتون درست نوشته نشده و همون باعث کند بودن هست و می‌تونم درستش کنم ولی به خواست خودشون رفتم روی Rust امروز تأیید خروجی و تست‌ها و پرداخت انجام شد و شد اولین دستمزد Rust من و سریعترین درآمد مبلغ خوبم از یادگیری زبان برنامه‌نویسی جدید.

البته این درآمد نشه موضوعی برای اینکه برید Rust یادبگیرید، چون قطعاً تجربیات دیگری که داشتم باعث شد این پروژه رو بگیرم.

اما، خواستم این رو بگم که بیشترین کمک رو بهم، خوندن سورس کد دیگران کرد.
مثلاً پروژه Limbo که بالاتر گفتم، خیلی خیلی کمکم کرد که توی ۱ روز تمام دستورات cli پروژه رو بزنم.

ازم درخواست tui کردند که گفتم درحال حاضر وقتش رو ندارم و حقیقتا تا حالا هم tui برای Rust نخوندم.
احتمالاً بعد از خوندن ۲-۳ تا سورس کد دیگری که در دستم هست و تمرین کردنشون برم سراغ یادگیری پکیج‌های tui و بعد از اون Tauri یا Dioxus ولی این موضوع انگیزه شد مضاعف برای ادامه مسیر.

Rust for Python developers

16 Jan, 09:34


در ادامه تمرین‌های Rust رو آوردم به Dioxus چرا ؟
فقط چون با Rust میشه فرانت‌اند وب زد

البته توی داکیومنتش گفته که از Tauri هم استفاده می‌کنند برای desktop build های مختلفی که دارند و شاید بهتر باشه منم برم سراغ همین تا Tauri (فعلا روی بکند و tui هستم)

https://dioxuslabs.com

Rust for Python developers

04 Jan, 17:51


تو زندگیم ۲-۳ بار برای پروتوتایپ ایده‌ رفتم سمت Electron و قسم می‌خورم حتی ۲ مورد که سرمایه‌گذار داشته رو بعد از ۲ هفته ازش زدم بیرون چون بنظرم احمقانه بود و بعد از اون هیچوقت فکر نمی‌کردم بخوام برم سراغ اینکار

چندروزی هست دارم روی کار با Tauri وقت میذارم؛ شرکتی که باهاش کار می‌کنم چند وقت یکبار مسابقه ۱-۲ روزه میذاره سر اپتیمایز کردن برنامه‌ها و پروژه‌های موفق و جایزه درخوری هم میده (شرکت کننده‌ها هم براشون ساعت کاری رد میشه) دیگه گفتم ی جایزه‌ای بگیریم سیستم رو جایگزین کنم.

توی همین راستا رسیدم به یک مصاحبه خوب؛ توی این مسابقه طراحی سیستم؛ چرایی انتخاب‌ها و بعد پیاده‌سازی دمو اولیه خیلی مهمه منم از الان شروع کردم روش کار کردن (چون برای اینکه جایزه جواب آپگرید رو بده مجبورم یا تنها پیش برم یا نهایتا تیم رو دونفره ببندم)

Youtube Link

شما جایگزین بهتری می‌شناسید ؟

Rust for Python developers

29 Dec, 20:40


Fish shell

رو با بازنویسی کامل روی Rust برای نسخه 4 خواهیم داشت.

ازون گیت‌هابای پر از درس هست که خیلی خوب میشه سورس کدش رو خوند.
پروژه Limbo رو که یادتون هست ؟

https://t.me/pyrust/110

Rust for Python developers

29 Dec, 20:34


https://github.com/pykeras/neovim

بالاخره آماده شد.

تست هم رفتیم با ۸ نفر از دوستان و ۲ تا از بچه‌های گروه خودمون.

فکر می‌کنم خوب باشه.

توی ReadMe اصل داستان رو گفتم؛ نکاتی هم برای آنان که می‌اندیشند وجود داره

Rust for Python developers

19 Dec, 13:09


هلوکاست ایرانی

یک زمانی شهردار تهران رو بخاطر ترافیک تهران اعدام کردند.

آخوند جز ویرانی، برای ایران دستاورد نداشت.

Rust for Python developers

18 Dec, 17:10


این پروژه limbo خیلی باحاله و دانشگاهیه برای آموزش crate های مختلف؛ سورس کدش رو بخونید
Limbo Github

داستان اینه که اومدن گفتن SQLite رو بهتر می‌نویسیم و با یک زبان امن که خب گزینه‌اش شده Rust و اینبار همه اجازه دارند کد Contribute کنند.

من خود پروژه رو هنوز به کسی پیشنهاد نمیدم؛ ولی این خیلی خفنه مثلا برید توی سورس کد
cli/app.rs

اول اینکه هر پوشه ماژولار دیده شده و هر پوشه Cargo.toml خودش رو داره که باحال بود (دفعه اول بود می‌دیدم)

بعد توی این سورس کد مثال clap رو ببینید؛ من برای پروژه چند وقت پیشم بیچاره شدم تا همه اینارو کنار هم درک کنم و بیارم.
اینجا همش هست؛ تازه ماژولار و تر و تمیز با Best Practice ها و خوبیش اینه که هممون به اندازه کافی از SQLite می‌دونیم و دانش خوبی داریم ازش.

Rust for Python developers

17 Dec, 18:34


fs::read_to_string

باگ خفته، یک سرویس کوچیک داریم که دائم down می‌شه چک می‌کنیم می‌بینیم دقیقا قبلش دیوایس (Edge Device) اونم داره ریستارت میشه.
پس نیرو میره سراغ مشکلات دیوایس؛ این وسط منم رفتم سورس کد بخونم.

اطلاعاتی هم از پروژه و مشکل داشتم و خب چندتا از بچه‌ها گفتن مشکل از دیوایس هست.

توی سورس کد دیدم طرف اینطوری داره فایل رو می‌خونه؛ یک نمونه فایل رو گرفتم (بعد از کرش کردن دستگاه)

دیدم بله، حجم فایل بیشتر از رم دستگاه شده؛ مشکل همین بود.

برای همین توی اکثر آموزش‌های حرفه‌ای از این مورد استفاده نمی‌شه و راه سخت‌تره read, buffer, ... پیش گرفته می‌شه

موضوع فقط بهینه بودن نیست؛ موضوع جلوگیری از کرش کردن هست.


گفتم اینجا هم بگم، شاید یک نفر دیگه رو هم از چندساعت دیباگ نجات داد.

Rust for Python developers

15 Dec, 13:07


جنگ کوانتوم.

دستاوردهای گوگل و چین رو دیدید ؟

Rust for Python developers

12 Dec, 08:14


بجای انتظار کشیدن؛ ویدئو ببینیم
Youtube Video

وسط build, compile, .... پروژه شرکت دیروز این رو شروع کردم و امروز دارم ویدئوهای بعدی رو ادامه میدم.
بسیار بسیار ویدئو خوبی هست.

Rust for Python developers

01 Dec, 22:18


یک مشکلی داشتم،
من توی خونه برای راحتی فیلم دیدن خانواده یک سیستم NAS ایجاد کرده بودم چندسال قبل
NextCloud, ...
روی رزبری که به هارد وصل بود.

حدوداً ۲ سال قبل رزبری به مشکل خورد و سیستم رفت و منم دیگه حوصله و وقت کانفیگ نداشتم (نیازی هم نبود، هرکسی هرچی می‌خواست دوباره دانلود می‌کرد)

تا اینکه چندشب پیش یک سری فایل خواستیم به اشتراک بذاریم که حجمش خیلی زیاد می‌شد و اختصاصی هم بود.
دنبال راهکار، رزبری رو راه انداختم و
Sync directory
زدم، بعد به ذهنم رسید بجای nextcloud, ... همین کارو بکنم ی کد بزنم دائم یک پوشه رو مانیتور کنه
و اگر چیزی به پوشه اضافه شد که روی سرور (رزبپری نیست) اتومات آپلود کنه.

ابزار‌ برای اینکار هست حتی کد پایتون برای ۱ کلاینت و چند سرور رو هم دارم خودم (فقط روی اسم و تایم کار می‌کنه البته)

اینو دارم با Rust می‌نویسم توی وقتای خالی (حتی ۱۰-۲۰ دقیقه) و خیلی پروژه جذاب و پر تمرینی شده
گفتم اگر کسی خواست تمرین کنه :

ویژگی‌ها : چندتا آرگومان میگیره

اطلاعات ssh و کلید و ...

پوشه لوکال

پوشه سرور

همزمان می‌تونه چندتا پوشه رو هم track کنه.

روی تغییر متادیتا پوشه مثل زمان دسترسی و ... پوشه رو اسکن می‌کنه فایل جدید اگر پیدا کنه که hash اش توی جدول نباشه ( تیبل لوکال) تیبل سرور رو نگاه می‌کنه (ممکن اون فایل از طریق یک کامپیوتر یا دستگاه دیگه آپلود شده باشه) و اگر بود نوتیف میده که فایل آپلود شده

فیچر نوتیف داره، اما توی محیط غیر دسکتاپ خاموش هست، توی محیط دسکتاپ یوزر می‌تونه فعالش کنه (درصد آپلود رو نمایش میده) یک حداقل داره و اونم اینکه یوزر می‌تونه بگه اگر حجم آپلود جدید بیش از ۵ گیگ بود نوتیف بده، در غیر اینصورت نده

فیچر sync delete داره، برای موارد غیر حساس و ... مثلاً ی دوره آموزشی رو روی سیستم داری می‌خوای روی گوشی و تبلت و .... باشه که موقع خواب هم یک نگاهی بکنی بهش.
این مورد روی هر کلاینتی فعال باشه، فایل های اون کلاینت به محض پاک شدن از سورس از سرور هم پاک خواهند شد.

چندتا فیچر دیگه هم درآورم براش که توی سیستم نوشتم الان یادم نمیاد، ولی خب همین هم حجم تمرین بسیار بالایی داره و خیلی از crate هایی که توی مصاحبه‌ها ازم پرسیده شد رو باید درست درک کنید برای پیاده‌سازی

امیدوارم تمرین خوب و جذابی باشه.

Rust for Python developers

28 Nov, 09:12


کلید RSA هم برای اولین بار شکسته شد.
نیاز فوری به الگوریتم Encryption جدید و قویتر

Blog Post

Rust for Python developers

14 Nov, 09:27


چندتا مقاله قدیمی دارم می‌خونم درمورد Rust خیلی جالب بود برام.

ًRust in production at figma (2018)

دیسکورد هم یک پست درمورد اینکه چرا از Go به Rust رفته منتشر کرده (همون سال ۲۰۲۰)

Why discord is switching from go to rust

نکته آخر اینکه؛
۱- توجه کنید به نیازمندی‌ها و ساختار سیستم‌هاشون
۲- درمود بدی‌هایی که با Rust گفته شده بسیاریش توی این چندسال رفع شده و توی پرفورمنس حتی Rust سریعتر هم شده.

Rust for Python developers

28 Oct, 21:51


یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژه‌ام می‌نوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.

اما چندتا نکته (بر خلاف دنیای پایتون) :

۱- استفاده از اسم src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب می‌کنند پس app رو جایگزین کردم

۲- از cargo-chef استفاده کردم به ۲ دلیل :
۲-۱: توی کد بالا من compile انجام نمیدادم و فقط پکیج‌هارو دانلود میکردم؛ قصدم این بود توی استپ بعدی سراغش برم ولی خب توی بعضی شرایط خاص دردسرش زیاد میشه که الان فرصتش رو نداشتم.
۲-۲: توی همون شرایط و crate های خاص (که اتفاقا یکی از دوستان توی پروژه‌اش بهم نشون داد) باعث میشه قابلیت cache رو از دست بدید؛ دلیل اصلیش رو نمی‌دونم.

۳- بجای استفاده از اداکر ایمیج‌های معرفی شده توسط پروژه cargo-chef از همون rust:1.82.0 استفاده کردم و فقط یک استیج بیشتر ساختم که دستورات زیر رو داشته باشه :
RUN apt update && apt install lld clang -y && cargo install cargo-chef


۴- وقتی sqlx رو توی پروژه دارم؛ توی استیج runtime حتما باید sqlx migrate runtime رو اجرا کنم. (برایحجم کمتر این مورد رو با migrate macro اجرا کردم.

۵- خیلی بهتره موقع استفاده از cargo build —release توی استیج builder باید از فلگ:
—bin <appname>
استفاده کنم


نهایتا شد این :
FROM rust:1.82.0 AS chef
WORKDIR /app
RUN apt update && apt install lld clang -y && cargo install cargo-chef

FROM chef as planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json

FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
ENV SQLX_OFFLINE true
RUN cargo build --release --bin XYZ

FROM debian:bookworm-slim AS runtime
WORKDIR /app
RUN apt update -y \
&& apt install -y --no-install-recommends openssl ca-certificates \
&& apt autoremove -y \
&& apt clean -y \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/XYZ XYZ
COPY .env .env
ENTRYPOINT [ "./XYZ" ]

Rust for Python developers

28 Oct, 16:18


پاسخ من به یک سوال در مورد multi-stage dockerfile که توی گروه بحث آزادمون شده بود دیدم روی rust دارم مثال میزنم گفتم اینجا هم بذارم.

——————————————————————————————

توی این داکرفایل من اول اومدم از یک ایمیج کامل rust استفاده کردم برای بخش اول اسم این بخش رو گذاشتم builder؛ این ایمیج شامل همه چیزهایی که من لازم دارم هست مثل یک لینوکس دبیان کامل و اگر سایزش رو هم ببینید بصورت خام 1.47 GB هست.

یک توی خط ۴ دارم پکیج‌های دیگه‌ای که برای کامپایل سریعتر نیاز دارم رو نصب می‌‌کنم؛ نکته مهم هم همینجاس من این‌ها رو فقط برای کامپایل نیاز دارم و نه برای اجرای کد نهایی

توی خط ۵ Cargo.toml, Cargo.lock رو کپی می‌کنم که dependency هارو داشته باشم ولی Rust مثل python نیست؛ یعنی نمیشه بدون داشتن سورس کد dependency هارو دانلود کرد و cache کرد یا بگی روی این environment نصبش کن و ...
پس خط ۶ رو دارم که یک main.rs خالی میسازم برای اینکه بتونم dependency هارو بگیرم و cache کنم مراحل رو ایده هم اینه :
اگر سورس کد من ی خط تغییر کرد ولی dependency عوض نشد نباید مجبور بشم dependency هارو مجدد دانلود کنم و ...

همینجا اضافه کنم ی crate داریم به اسم cargo chef که برای همین کار هست؛ من تا جایی که مجبور نباشم ازش استفاده نمی‌کنم که یک dependency کمتر برای داکر داشته باشم.

خط ۸ و ۹ پروژه خودم رو کپی و کامپایل می‌کنم.


توی خط ۱۲ دارم از یک ایمیج دیگه استفاده می‌کنم که اصلا rust, rustc, cargo , ... رو هم نداره و image مرحله قبل بر پایه این هست حجم این ایمیج فقط و فقط 75MB هست.
خط ۱۴ تا ۱۸ پکیج‌هایی که این ایمیج نداره و نیاز دارم رو نصب می‌کنم مثل openssl, ca-certificates اینم برای دسترسی به سرویس دیتابیس هست چون روی یک سرور دیگه هست.

در نهایت از مرحله قبل نتیجه compile رو بر میدارم + .env پروژه و پروژه رو اجرا می‌کنم
حجم نهایی کانتینر پروژه روی 200MB هست درحالی که اگر از multi-stage استفاده نمی‌کردم و می‌خواستم روی ایمیج 1.47GB اجراش کنم حجمش به بیش از 3GB میرسید و با هر تغییر توی کدهام باید حتی منتظر دانلود شدم پکیج‌ها و .. هم می‌موندم.

اضافه کنم :
راجب cargo-chef هم مزیتش رو نمی‌فهمم (بنظرم یک bottleneck و یک نگرانی اضافه هست) قطعا یک discussion جدید می‌سازم روی rust community ببینم مزیتش چیه.


پ.ن :
سورس توی کامنت؛ اگر نمی‌تونید فونت رو بخونید.

Rust for Python developers

28 Oct, 09:25


بگذارید هرکس به آیین خودش باشد.
زنان را گرامی بدارید.
فرودستان را دریابید.
اجازه دهید هرکسی به تکلم قبیله‌ی خویش سخن بگوید.

آدمی تنها در مقام خویش به منزلت خواهد رسید.

۷ آبان روز بزرگداشت کوروش کبیر، همایون باد.

Rust for Python developers

23 Oct, 10:19


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

شب قبل با یک crate به اسم secrecy آشنا شدم بسیار عالی هست (نیازی نیست خودتون دیتاهای مهم رو mask کنید.)

Rust for Python developers

21 Oct, 20:09


#Quick

توی پایتون (باقی زبان‌ها) وقتی کسی بهم می‌گفت سریعترین راه برای پیشرفت کردن جیه می‌گفتم یاد بگیر خطاهارو خیلی زود بفهمی.
توی Rust این موضوع صادق نیست چون کامپایلر خیلی دقیق خطارو می‌کوبه تو صورتت اما یک چیز معادل داریم که توی تجربه این مدت بهش رسیدم.

توی Rust برای پیشرفت سریعتر باید یادبگیری داکیومنت اون crate ایی که داری باهاش کار می‌کنی رو توی سایت
https://docs.rs/
به راحتی داخلش بچرخی و به راحتی بخونی و درک کنی (چیزی که ندیدم جایی آموزش بده) این موضوع رو توی سنیورهای Rust به خوبی میشه دید سریعا متدهای struct, enum, ... رو پیدا می‌کنند trait هایی که باید پیاده‌سازی بشه و نحوه استفاده و ...
ولی برای جونیورها خیلی خیلی سخت هست انگار و اکثرا سمت داکیومنت نمیرن (خیلی دیر این سمتی میروند)

Rust for Python developers

21 Oct, 20:00


سر یک موضوع احمقانه ۱ ساعت وقتم رفت.
توی تصویر می‌بینید که خط رو شکونده دقیقا باید توی rust همینکارو بکنید وگرنه query درست نیست و بدتر از اون خطایی هم دریافت نمی‌کنید.
r#"--sql SELECT name FROM users;"

چیزی که بدون مشکل هست:
r#"--sql
SELECT name FROM users;
"


خلاصه که حواستون باشه؛ من حتی توی کدهای دیگران هم دیدم این مورد رو.

Rust for Python developers

20 Oct, 20:11


توی بعضی شرایط rust-analyzer ممکنه رو دستش بیاد؛ اونوقت highlight به درستی انجام نمیشه اگر اینطوری شد توی تنظیمات
Rust-analyzer > Semantic Highlighting > String

وارد بشید و گزینه‌اش رو غیر فعال کنید موقتا ( تا آخر پروژه مثلا)

Rust for Python developers

20 Oct, 20:03


#Quick

اگر از vscode برای Rust استفاده می‌کنید حتما این extension رو نصب کنید که دستورات sql رو براتون وسط کدهای rs به خوبی highlight می‌کنه ( از حالت str& خالی در میاد)

الان اومد یک کدی رو بزنم چندتا از Sql Query هاش خیلی طولانی و سخت شد بدون highlight خوندنش قطعا آزار دهنده بود با سرچ به این رسیدم و بنظرم گزینه بسیار کمک کننده و عالی‌ای هست.

Rust for Python developers

16 Oct, 23:14


یک آپدیت بدم،

توی مقایسه فریمورک‌های بکند بین دو مورد Axum, Actix گفتم که شخصاً رفتم سمت axum (اسمش از یک پادشاهی - حکومت اومده فکر کنم چون کلی مطلب تاریخی برام اومده، البته دقیق بررسی نکردم.)

ولی داستان این هست که توی مصاحبه‌ها بسیار کار بیشتری برای actix بود درحالی که وقتی وارد می‌شدم اکثراً axum رو هم می‌پرسیدند.

یک حسی مثل Django, FastApi توی پایتون بهم دست داد؛ خلاصه چون بیش‌از ۸۰٪ موارد مهم یکسان هست، شخصاً دارم روی هردو فریمورک کار می‌کنم.

گفتم اطلاع بدم که کسی اشتباه نکنه برای شغل درحال حاضر اولویت رو روی Axum بذاره؛ هرچند توی کارهای من Axum گزینه بهتر هست.

Rust for Python developers

13 Oct, 10:44


می‌خوام یک منبع معرفی کنم ولی قبلش باید بگم چرا به این نتیجه رسیدم؛
توی دوران نوجوانی بعد از چندسال Linux Server Administrator بودن و وقتی تسک‌ها برام تکراری و همگی اسکریپت شده بود رفتم سراغ مباحث امنیتی به مدت هک و امنیت رو خوندم و بعد به Reverse Engineering رو آوردم.

نوشتن کرک یا حذف قفل یا حتی فارسی سازی قطعات و ... یک بخش قضیه بود؛ کار با Assembly یک بحث دیگه (تنها درس دانشگاه که ۲۰ گرفتم هم همین بود بدون استاد و میانترم ببین چه عشقی به کد زدن و خوندن Assembly داشتم)

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

توی اسمبلی کار کردن با مموری - شیفت دادن بیت برای اعمال ریاضی و ... همرو باید یاد بگیری چیزهایی که توی خیلی از زبان‌های دیگه نیست (هرچند بعضی‌هاش رو توی دوره یوتیوب پایتون بررسی کردیم)

امروز داشتم کتاب Rust in Action رو یک مروری میکردم که دیدم تمام این مقاهیم رو صحبت کرده بسیار ساده‌تر و البته کاربردی چون همشون رو استفاده می‌کنه تا توی Rust یک پروژه‌ای رو بزنه (مثلا cpu emulator یا OS نویسی و ...)

خلاصه خواستم بگم اگر شما هم توی این بحث‌ها با من بودید و پیش از این گفتم همرو مدیون اسمبلی هستم؛ شما دیگه نیازی نیست سراغ اسمبلی برید می‌تونید Rust رو بخونید و بعد برید سراغ Rust in Action مسیر ساده‌تر؛ کاربردی‌تر و قطعا جذابتری هست.

Rust for Python developers

11 Oct, 16:11


امروز آخرین مصاحبه درخواست همکاریم توی سری اول شرکت‌هایی که براشون رزومه فرستاده بودم به عنوان Rust developer/software engineer بود.

گفتم شاید بد نباشه که تجربیات این ۲-۳ هفته رو در اختیار دوستان بذارم، توجه کنید که هیچکدوم از موقعیت‌ها ایران نبود.

اولین موضوع مشترک توی همه مصاحبه‌ها این بود که بسیار مصاحبه‌هام مفهومی بود، بخش اول مصاحبه‌ها واقعاً تئوری و نحوه عملکرد بخش‌های مختلف توی Rust بود

دقیقاً این دوتا مورد ازم سوال شد (دوتا شرکت مختلف) :

https://t.me/pyrust/77
https://t.me/pyrust/82

بعد با توجه به پوزیشن شغلی وارد مفاهیم، سیستم‌ یا بکند یا ... می‌شدیم که خب اینها خیلی وابسته به زبان‌برنامه‌نویسی نبود.

ولی خیلی جالب بود، هیچکدوم سوال الگوریتم و ساختمان داده نپرسیدند (منظورم توی بخش کد زدن هست.)

تمام موارد چون بعنوان junior rust درخواست پر کرده بودم؛ کسی رو می‌خواستند که بتونه کد بزنه، من توی بخشی که اون‌ها نیازی نداشتند عملکرد خوبی داشتم
System design, Software Architecture, ...

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

چیزی که من متوجه شدم این بود که حداقل برای پوزیشن جونیور و شاید حتی میدلول باید لیست crate های مهم رو بلد باشی، چون دقیقاً توی مرحله توسعه کد مصاحبه ازت همچین چیزی می‌خوان.

برای مثال امروز از من توسعه یک ابزار خواستند که ۷-۸ تا آرگومان توی حالات مختلف می‌گرفت و یک سری لاگ رو بررسی می‌کرد چه بصورت file و چه بصورت stdin.

تمام منطقی که بهم داده بودند رو پیاده‌سازی کردم تقریباً هم سریع بودم ولی وقتی رسیدم به استفاده از clap بسیار سرعتم کند شد چون تا امروز از این crate استفاده نکرده بودم و برای args از خود std استفاده می‌کردم.

چندروز قبل متوجه این قضیه شدم و بعد از اون دیگه قرار مصاحبه‌ای رو قبول نکردم و به سمت

Blessed crate
ها رفتم تا نقطه ضعف‌هام رو تقویت کنم.


دلیل مصاحبه رفتنم هم همین بود، نقاط ضعف خودم رو پیدا کنم.

راستی clap رو هم کامل خوندم و به اندازه کافی یادگرفتم.

Rust for Python developers

04 Oct, 10:50


ببین چی پیدا کردم؛ واسه مصاحبه الگوریتم به زبان Rust برید سراغ این

https://github.com/TheAlgorithms/Rust/blob/master/DIRECTORY.md

Rust for Python developers

03 Oct, 17:04


وقتی شروع میکنی از Rust بیشتر و بیشتر استفاده کردن بعضی وقتا بین اینکه از کدوم crates استفاده کنی میمونی مخصوصا اینکه برای هر کلمه کلیدی شاید چند صفحه crate بیاد.

حقیقتا برای من که درحال یادگیری هستم وقتگیر هست بررسی کردن دونه دونه نتایج و اوایل یادگیری چیزی که برام مهم هست maintenance, popularity اون پکیج هست.

https://blessed.rs/crates

اصطلاحا به پکیج هایی با ویژگی بالا که گفتم (محبوبیت و نگهداری) میگن blessed crates و این سایت هم برای همین این اسم رو داره و شده منبع اصلی من برای یافت پکیج های اصلی برای تسکهای مختلف.

خلاصه که شما هم می‌تونید ازین استفاده کنید و با خیال راحت crate های مورد نیاز رو یاد بگیرید.

Rust for Python developers

03 Oct, 10:37


دیروز برای اولین بار یکی از پروژه‌ها رو به انتخاب خودم روی Rust کد زدم.

یک کد کوچیکی داشتیم که زحمتش زو یکی از بچه‌ها کشیده بود، باید خیلی سریع قیمت یک سری سرور رو پیدا می‌کرد و اگر ارزونتر بود درخواست اجاره سرور رو می‌داد، بعد خودشون به کاربر اجاره می‌دهند.

ولی رقیب‌های بسیار زیادی داره این موضوع که هیچی به ما نمیرسه و همین باعث شد من وارد پروژه بشم.

خود دولوپر می‌گفت سرعت پاسخ سرور فروشنده کم هست؛ برای همین کد رو بردیم روی ۳ تا سرور مختلف و با curl درخواست دادیم.
زمان پاسخ بسیار سریعتر از نسخه پایتون بود وقتی دیتا برامون میومد.

شک کردم سربارهای فریمورک‌های پایتون باشه، بجای اینکه فریمورک عوض کنم چون همه چیز API بود و سختی نداشت.

کل زبان برنامه‌نویسی رو عوض کردم و اومدم روی Rust، بعد از اتمام برای اولین بار تونستیم ۷ تا سرور رو بگیریم، یک سرچ دیگه زدم و یک سری optimization flag پیدا کردم که هم حجم فایل نصف شد هم مصرف memory، سرعتمون هم بالاتر رفت.

خلاصه که الان همه سرورها رو می‌بینیم و اگر خوشمون نیاد رد می‌کنیم تا باقی بخرند، برای خودم خیلی جذاب بود گفتم با شما هم به اشتراک بذارم.

یادم باشه optimization flag هارو باهاتون به اشتراک بذارم.

Rust for Python developers

02 Oct, 18:42


توی این هفته freecodecamp دوتا دوره عالی گذاشته؛ این دو مورد ربطی به پایتون نداره اما بدرد خیلیا میخوره بخصوص :
@pytens, @pyrust

اینکه دارم پست رو اینجا میذارم چون متوجه شدم خیلی از بچه ها این کانال فوق العاده رو نمی شناسند و باهاش آشنا نیستند؛ بهونه کردم برای معرفی کانال.

دوره ها کدوم موارد هستند ؟


1- Cuda Programming Course (in C)

2- Linux Device Driver Development (in C)


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

امیدوارم شما هم لذت ببرید؛ کانسپت مهم هست.

Rust for Python developers

29 Sep, 21:12


nice

Rust —> RemoteDesktop

Rust for Python developers

25 Sep, 23:11


من خیلی از این اطلاعات رو در مورد مموری توی Rust مجبور شدم دونه دونه بخونم مثلا اینکه
stack: 2MB-8MB

و ... شاید به کار خیلی‌ها نیاد ولی برای System developer جزو واجبات هست که حداقل یکبار این موارد رو برای زبان برنامه‌نویسی که کد میزنه ببینه و بررسی کنه.

خیلی اتفاقی توی یوتیوب این ویدئو رو شروع کردم و دیدم داره این اطلاعات رو همرو یکجا توضیح میده؛ الان روی دقیقه ۸ هستم و دارم ازین ویدئو لذت می‌برم امیدوارم بدرد شما هم بخوره

Youtube Link

بعدش میرم سراغ ۱۵ صفحه Rust خوندن امروز
با وجود کم خوابی ۲۴ ساعت گذشته؛ دارم از یادگیری Rust لذت میبرم و همین نمیذاره بخوابم.

Rust for Python developers

24 Sep, 18:30


قطعا اگر با multi-threading توی Rust کار کرده باشید؛ حتما این ارور رو دیدید.
همیشه هم راهکار ساده هست و با گوگل سرچ اول بدست میاد. شما move رو قبل از closure میذاری و مشکل حل میشه وقتی هم که سرچ میزنی چرا همه زدند که move بصورت زوری ownership رو میده به closure.

سوالی که امروز توی فروم دیدم؛ من که توی مثال بالا غیر از چاپ کردن counter کاری باهاش نمیکنم پس چرا با reference کار نمی کنه ؟ یا از کجا باید بدونم چه زمان هایی باید از move استفاده کنم ؟

بخش اول سوال جوابش بر میگرده به خود ownership و تفکیک بودن thread ها از هم؛ یادتون باشه توی Rust هر value باید فقط و فقط یک owner داشته باشه که توی threading ممکنه نقض بشه اگر راهکار فعلی براش نبود.

اما بخش دوم؛ سواد closure رو میخواد و ربطی به thread نداره؛ closure هارو به ۳ حالت توی annotation استفاده میکنند.
Fn : که بعنوان ورودی یک رفرنس میگیره
FnMut : که بعنوان ورودی یک رفرنس با قابلیت تغییر میگیره
FnOnce : خود value رو میگیره

دقیقا هم FnOnce توی ویژگی هایی هست که متد spawn بهش نیاز داره و بررسی می کنه و اسم FnOnce هم برای این Trait کاملا عالی هست؛ چون Ownership اون value رو میگیره و بعد دیگه غیر قابل استفاده میشه.

برای همین هست که باید توی مثال تصویر؛ closure رو مجبور کنیم که ownership متغییر counter رو بگیره چراکه خود کلوژر می دونه به reference فقط نیاز داره و Fn براش کفایت می کنه اما spawn نیاز به FnOnce داره برای امن بودن threading, ownership پس با استفاده از move کلوژر رو میبریم روی FnOnce.

Rust for Python developers

24 Sep, 10:49


Linus Torvalds: Speaks on the Rust vs C Linux Divide

Rust for Python developers

23 Sep, 11:27


چیزی که درد واقعه رو بیشتر می‌کنه

#معدن_طبس

Rust for Python developers

21 Sep, 11:22


وقتی توی گروها سوال می‌بینم، از داخلش می‌شه فهمید باقی افراد روی چه مباحثی مشکل دارند.

مثلاً توی موضوع lifetime متوجه شدم که خیلی از بچه‌ها فکر می‌کنند, وقتی
&’static str
میزنند، به اون string slice دارن lifetime جدیدی می‌دهند.

درصورتی که این برداشت اشتباه هست

موضوع lifetime annotation هم مثل موضوع generic هست، شما وقتی می‌زنی T: Display داری میگی که من دیتایی رو میدم که حتماً Display trait براش پیاده‌سازی شده.

توی مثال:
&’static str
شما میگی این دیتا می‌تونه lifetime به اندازه طول برنامه داشته باشه، اگر دیتایی بدید که این مقدار lifetime رو نداره کامپایل نمی‌شه و بهت ارور میده

موضوع بعدی قوانین lifetime مشخص کردن توی توابع هست (تحت چه شرایطی حتماً lifetime نیازه) که خب بنظرم باشه برای یک پست دیگری.

Rust for Python developers

20 Sep, 14:09


توی گروهی بحث دیدم راجب تفاوت های :
.iter(), .iter_mut(), .into_iter().
و دیدم انگار خیلی از اعضا تفاوت هاش رو درک نکردن برای همین closure های داخل متدهایی که با iterator میاد رو متوجه نمیشدند.

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

1- Borrowing and Ownership
2- Memory (stack, heap, binary)


توی iterator ها هم تفاوت روی borrowing and ownership هست؛ وقتی از iter استفاده می کنید چیزی که برای هر آیتم تحویل میگیرید یک immutable reference خواهد بود & خالی وقتی از iter_mut استفاده کنید حتما mutable reference خواهید داشت &mut اما موضوع برای into_iter کمی متفاوت هست.

اگر مستقیم روی value استفاده بشه؛ ownership رو به دست خواهد گرفت.
اگر روی reference ایی از اون value استفاده بشه عملکرد iter رو خواهد داشت.
و در نهایت اگر روی mutable reference ایی از اون value استفاده بشه عملکردش مثل iter_mut خواهد شد.

برای همین توی closure متدهایی که روی اینها میاد مثل map, … حالات مختلفی رو میبینید.


امیوارم منظورم رو رسونده باشم؛ اگر نه حتما توی کامنت بپرسید.

Rust for Python developers

16 Sep, 20:19


اگر شما هم به Axum علاقمند شدید (هرچند من بعد از این مورد احتمالا سراغ Actix هم خواهم رفت) این دوره هم خوبه بنظرم :

Youtube Video

البته مدرس هندی هست (ولی لهجه‌اش قابل تحمل؛ بخصوص تو سرعت بالا ولی انگار AI داره صحبت می‌کنه)

خوبیش اینه که axum 0.7.5 رو کار می‌کنه؛ بیشتر بدرد کسایی می‌خوره که بکند رو بلدند و روی Rust, Axum و کتابخونه‌های اینور می‌خوان سینتکس رو یاد بگیرند.

Rust for Python developers

11 Sep, 19:55


آپدیت وضعیت:

این مدت کارهای شرکت‌هایی که استعفا دادم رو پیش بردم و نیروهای جایگزین رو onboard کردم.
هرچند هنوز خودم درگیر هستم (ولی خیلی سعی می‌کنم دور بمونم و ساعت کاری پر نکنم)
پیشنهاد دستمزد بالاتر هم بهم دادند ولی دیگه نمی‌خوام کار کنم (پروژه‌ها خسته کننده شده)

توی این مدت بهم اجازه داد روزی ۳-۴ ساعت Rust کد بزنم.
الان از توانایی کد زدنم مطمئن شدم، اما با مدل پروژه‌هام حال نمی‌کنم بنظرم می‌شه بهتر ازین باشه واقعاً.

برای همین تصمیم گرفتم، از امروز دوباره برگردم روی آموزش خوندن، خوبی این مدت کد زدن این بود که فهمیدم یک سری مفاهیم رو جزئیاتش رو ندیدم توی آموزش‌های قبلی و این جزئیات برای کد بهتر و تمیزتر زدن مهم هست.

می‌تونم با سرچ بهش برسم ولی هربار سرچ کردن و خوندن با توجه به اینکه مرض درک جزئیات دارم زمان زیادی ازم داره میگیره، پس تصمیم گرفتم یک مقدار کد زدن رو کنار بذارم و باز به آموزش دیدن رو بیارم.

الان میدونم دقیقاً کجاها ضعف دارم و چه چیزهایی رو به جزئیاتش نیاز، البته که با منابع جدید ادامه خواهم داد.


این وسط یک اتفاق دیگه هم افتاد، چندروز قبل مدیرم با مدیرعامل headquarter اصلی برای دفاع از آنچه که به ناحق علیه تیم‌های فنی بود دعوا کرد.
امروز هم استعفا داد، با اینکه این شرکت تنها جایی بود که کار میکرد.
برای من بعنوان مدیر میانی (تیم‌لید بودم بیشتر) این موضوع خیلی درگیری ذهنی ایجاد کرد تا اینکه امروز به این تصمیم رسیدم با وجود اینکه این شرکت درآمد ساده و خوبی رو بهم می‌داد استعفا بدم در حمایت از مدیر خودم که به حق دعوا کرد، حدود ظهر اینکار رو کردم و متوجه شدم باقی مدیرهای فنی همراه ایشون هم استعفا دادند.

و بعد از اون یکسری از نیروهای زیر دست، متأسفانه با من هماهنگ نشده بود ولی همگی متنی یکسان برای استعفا داده بودند با این خلاصه که :

با توجه به اتفاقات افتاده، به این نتیجه رسیدیم مدیرعامل جدید درک درستی از کارهای فنی نداره و شرکت موقعیتش توی بازار جهانی رو از دست خواهد داد.
نمی‌خواهیم شاهد نابودی آنچه که ساختیم باشیم.

حدود ۷۰ نفر استعفا دادند در کل، اینجوری شد ۳ تا استعفای شغلی برای من
ولی بابت این آخری خیلی خوشحالم، بعد از این استعفا واقعاً حالم خوب شد چون طرف درستی وایسادم.

در نهایت اینکه؛ یک جورایی داره بهم الهام میشه که شاید وقتش هست برم سمت Rust برای موقعیت شغلی بعدی.

برای همین ۵-۶ مورد دعوت به همکاری که این چندروز بعد از تعطیلات دریافت کردم رو فعلا رد کردم؛ شاید با همین ۲ تا شغل که دارم بمونم و به وقت گذاشتن روی Rust ادامه بدم

شایدم ۱ مورد دیگر رو هم اضافه کنم، چون از اول تصمیم روی استعفا از ۲ تا شغل بود نه ۳ مورد.

ولی بطور خلاصه، برگشتم روی یادگیری باز و اینبار عمیق‌تر قرار هست Rust بخونم.

Rust for Python developers

09 Sep, 09:14


این ویدئو جالب بود (داستان پیدایش Rust هست + تمام اخبار اخیر.) ولی با AI براش تصویر و ... درست کرده.

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

Youtube Video

Rust for Python developers

31 Aug, 14:48


Youtube

سورس کدش برای ایده و یادگیری خوبه