میخوام یک منبع معرفی کنم ولی قبلش باید بگم چرا به این نتیجه رسیدم؛
توی دوران نوجوانی بعد از چندسال
نوشتن کرک یا حذف قفل یا حتی فارسی سازی قطعات و ... یک بخش قضیه بود؛ کار با
همیشه همه جا میگم اگر یادگرفتن
توی اسمبلی کار کردن با مموری - شیفت دادن بیت برای اعمال ریاضی و ... همرو باید یاد بگیری چیزهایی که توی خیلی از زبانهای دیگه نیست (هرچند بعضیهاش رو توی دوره یوتیوب پایتون بررسی کردیم)
امروز داشتم کتاب
خلاصه خواستم بگم اگر شما هم توی این بحثها با من بودید و پیش از این گفتم همرو مدیون اسمبلی هستم؛ شما دیگه نیازی نیست سراغ اسمبلی برید میتونید
توی دوران نوجوانی بعد از چندسال
Linux Server Administrator بودن و وقتی تسکها برام تکراری و همگی اسکریپت شده بود رفتم سراغ مباحث امنیتی به مدت هک و امنیت رو خوندم و بعد به Reverse Engineering رو آوردم.نوشتن کرک یا حذف قفل یا حتی فارسی سازی قطعات و ... یک بخش قضیه بود؛ کار با
Assembly یک بحث دیگه (تنها درس دانشگاه که ۲۰ گرفتم هم همین بود بدون استاد و میانترم ببین چه عشقی به کد زدن و خوندن Assembly داشتم)همیشه همه جا میگم اگر یادگرفتن
assembly نبود قطعا زمانی که امنیت کار میکردم بدترین و وقت تلف کنترین بخش حرفهای عمرم بود ولی به لطف اسمبلی یادگرفتن عمرم تلف نشد؛ به همه بچهها هم از یک سطحی به بعد وقتی بهم میگفتن چطوری فلان چیز رو یاد میگری یا بدون خوندن میدونی چه عملکردی باید داشته باشه و ... میگم همش رو مدیون یادگیری اسمبلی هستم شما هم بخون و یاد بگیر.توی اسمبلی کار کردن با مموری - شیفت دادن بیت برای اعمال ریاضی و ... همرو باید یاد بگیری چیزهایی که توی خیلی از زبانهای دیگه نیست (هرچند بعضیهاش رو توی دوره یوتیوب پایتون بررسی کردیم)
امروز داشتم کتاب
Rust in Action رو یک مروری میکردم که دیدم تمام این مقاهیم رو صحبت کرده بسیار سادهتر و البته کاربردی چون همشون رو استفاده میکنه تا توی Rust یک پروژهای رو بزنه (مثلا cpu emulator یا OS نویسی و ...)خلاصه خواستم بگم اگر شما هم توی این بحثها با من بودید و پیش از این گفتم همرو مدیون اسمبلی هستم؛ شما دیگه نیازی نیست سراغ اسمبلی برید میتونید
Rust رو بخونید و بعد برید سراغ Rust in Action مسیر سادهتر؛ کاربردیتر و قطعا جذابتری هست.❤32👍14✍2
یک آپدیت بدم،
توی مقایسه فریمورکهای بکند بین دو مورد
ولی داستان این هست که توی مصاحبهها بسیار کار بیشتری برای
یک حسی مثل
گفتم اطلاع بدم که کسی اشتباه نکنه برای شغل درحال حاضر اولویت رو روی
توی مقایسه فریمورکهای بکند بین دو مورد
Axum, Actix گفتم که شخصاً رفتم سمت axum (اسمش از یک پادشاهی - حکومت اومده فکر کنم چون کلی مطلب تاریخی برام اومده، البته دقیق بررسی نکردم.) ولی داستان این هست که توی مصاحبهها بسیار کار بیشتری برای
actix بود درحالی که وقتی وارد میشدم اکثراً axum رو هم میپرسیدند.یک حسی مثل
Django, FastApi توی پایتون بهم دست داد؛ خلاصه چون بیشاز ۸۰٪ موارد مهم یکسان هست، شخصاً دارم روی هردو فریمورک کار میکنم.گفتم اطلاع بدم که کسی اشتباه نکنه برای شغل درحال حاضر اولویت رو روی
Axum بذاره؛ هرچند توی کارهای من Axum گزینه بهتر هست.👍19🔥3
#Quick
اگر از
الان اومد یک کدی رو بزنم چندتا از
اگر از
vscode برای Rust استفاده میکنید حتما این extension رو نصب کنید که دستورات sql رو براتون وسط کدهای rs به خوبی highlight میکنه ( از حالت str& خالی در میاد)الان اومد یک کدی رو بزنم چندتا از
Sql Query هاش خیلی طولانی و سخت شد بدون highlight خوندنش قطعا آزار دهنده بود با سرچ به این رسیدم و بنظرم گزینه بسیار کمک کننده و عالیای هست.👍14❤3🙏1
Rust for Python developers
#Quick اگر از vscode برای Rust استفاده میکنید حتما این extension رو نصب کنید که دستورات sql رو براتون وسط کدهای rs به خوبی highlight میکنه ( از حالت str& خالی در میاد) الان اومد یک کدی رو بزنم چندتا از Sql Query هاش خیلی طولانی و سخت شد بدون highlight…
توی بعضی شرایط rust-analyzer ممکنه رو دستش بیاد؛ اونوقت highlight به درستی انجام نمیشه اگر اینطوری شد توی تنظیمات
وارد بشید و گزینهاش رو غیر فعال کنید موقتا ( تا آخر پروژه مثلا)
Rust-analyzer > Semantic Highlighting > String
وارد بشید و گزینهاش رو غیر فعال کنید موقتا ( تا آخر پروژه مثلا)
👌6❤2👍2
Rust for Python developers
#Quick اگر از vscode برای Rust استفاده میکنید حتما این extension رو نصب کنید که دستورات sql رو براتون وسط کدهای rs به خوبی highlight میکنه ( از حالت str& خالی در میاد) الان اومد یک کدی رو بزنم چندتا از Sql Query هاش خیلی طولانی و سخت شد بدون highlight…
سر یک موضوع احمقانه ۱ ساعت وقتم رفت.
توی تصویر میبینید که خط رو شکونده دقیقا باید توی rust همینکارو بکنید وگرنه
چیزی که بدون مشکل هست:
خلاصه که حواستون باشه؛ من حتی توی کدهای دیگران هم دیدم این مورد رو.
توی تصویر میبینید که خط رو شکونده دقیقا باید توی rust همینکارو بکنید وگرنه
query درست نیست و بدتر از اون خطایی هم دریافت نمیکنید.r#"--sql SELECT name FROM users;"
چیزی که بدون مشکل هست:
r#"--sql
SELECT name FROM users;
"
خلاصه که حواستون باشه؛ من حتی توی کدهای دیگران هم دیدم این مورد رو.
😐10👍4
#Quick
توی پایتون (باقی زبانها) وقتی کسی بهم میگفت سریعترین راه برای پیشرفت کردن جیه میگفتم یاد بگیر خطاهارو خیلی زود بفهمی.
توی
توی
https://docs.rs/
به راحتی داخلش بچرخی و به راحتی بخونی و درک کنی (چیزی که ندیدم جایی آموزش بده) این موضوع رو توی سنیورهای
ولی برای جونیورها خیلی خیلی سخت هست انگار و اکثرا سمت داکیومنت نمیرن (خیلی دیر این سمتی میروند)
توی پایتون (باقی زبانها) وقتی کسی بهم میگفت سریعترین راه برای پیشرفت کردن جیه میگفتم یاد بگیر خطاهارو خیلی زود بفهمی.
توی
Rust این موضوع صادق نیست چون کامپایلر خیلی دقیق خطارو میکوبه تو صورتت اما یک چیز معادل داریم که توی تجربه این مدت بهش رسیدم.توی
Rust برای پیشرفت سریعتر باید یادبگیری داکیومنت اون crate ایی که داری باهاش کار میکنی رو توی سایت https://docs.rs/
به راحتی داخلش بچرخی و به راحتی بخونی و درک کنی (چیزی که ندیدم جایی آموزش بده) این موضوع رو توی سنیورهای
Rust به خوبی میشه دید سریعا متدهای struct, enum, ... رو پیدا میکنند trait هایی که باید پیادهسازی بشه و نحوه استفاده و ... ولی برای جونیورها خیلی خیلی سخت هست انگار و اکثرا سمت داکیومنت نمیرن (خیلی دیر این سمتی میروند)
👍29😁1
مصاحبه شرکتی در کره جنوبی رو قبول شدم.
روزی که
اول هفته درگیر ارسال مدارک بودم و امروز تماس تصویری داشتم و نتیجه :
روزی که
Rust رو شروع کردم و بابت کاری که میخوام انجام بدم کره جنوبی رو مقصد انتخاب کردم؛ با هدف یادگیری بیشتر.اول هفته درگیر ارسال مدارک بودم و امروز تماس تصویری داشتم و نتیجه :
متاسفانه امکان ادامه پروسه همکاری با شما را نخواهیم داشت.
شما درگیر جنگ هستید؛ دسترسی به شما سخت خواهد بود.
امیدواریم زودتر به صلح دست پیدا کنید.
به پیشرفت ادامه بده.
💔76😁14🗿5🤣4🤯2😢2😡2❤1😨1
Rust for Python developers
مصاحبه شرکتی در کره جنوبی رو قبول شدم. روزی که Rust رو شروع کردم و بابت کاری که میخوام انجام بدم کره جنوبی رو مقصد انتخاب کردم؛ با هدف یادگیری بیشتر. اول هفته درگیر ارسال مدارک بودم و امروز تماس تصویری داشتم و نتیجه : متاسفانه امکان ادامه پروسه همکاری با…
کد زدن بعد ی همچین شرایطی واقعا سخت هست مخصوصا اینکه هم هدفم بود هم خیلی روش حساب کرده بودم.
ولی
ما دیگه عادت کردیم.
شب قبل با یک
ولی
ما دیگه عادت کردیم.
شب قبل با یک
crate به اسم secrecy آشنا شدم بسیار عالی هست (نیازی نیست خودتون دیتاهای مهم رو mask کنید.)👍13😁6❤4💔2
Rust for Python developers
کد زدن بعد ی همچین شرایطی واقعا سخت هست مخصوصا اینکه هم هدفم بود هم خیلی روش حساب کرده بودم. ولی ما دیگه عادت کردیم. شب قبل با یک crate به اسم secrecy آشنا شدم بسیار عالی هست (نیازی نیست خودتون دیتاهای مهم رو mask کنید.)
چون صحبت شد
توی همین تصویر بالا بخوام مثال بزنم :
شما توی این پکیج یک
بر اساس داکیومنت خود
پس بنظرم بهترین مورد برای یادگیری اینه که
که خب وقتی میریم سراغ
اوکی پس همه چیز از
از
من توی کد بالا یک
استفاده کنم. این
برگردم سراغ مطلبی که توی
بگذریم اگر خواستید از
با توجه به توضیحاتی که دادم اگر مثل من
https://news.1rj.ru/str/pyrust/96
بخصوص اینکه سورس کد سادهای هم داره.
secrecy بنظر crate خیلی سادهای میاد ولی چون مثال نداره توی Rust community دیدم یک نفر درموردش سوال پرسیده و خب جوابی که بهش داده بودند بنظرم خوب نبود؛ بنظرم جواب سادهترین راهکار نبود برای همین رفتم سراغ داکیومنت و ...توی همین تصویر بالا بخوام مثال بزنم :
cargo add secrecy
شما توی این پکیج یک
struct اصلی دارید به اسم SecretBox که خب از اسمش پیداس ی Box باید ایجاد کنید براش (جلوتر میگم) و دوتا هم TypeAlias دارید به اسم SecretString, SecretSlice که خب من تو این مثال میرم سراغ SecretString ولی دقیقا داستان برای SecretSlice هم یکسان هست.بر اساس داکیومنت خود
secrecy ؛ خود SecretString هم چیزی نیست جز SecretBox که براش تریت From پیاده سازی شده (اصن برای همین بهش میگه TypeAlias) :This is a type alias for SecretBox<str> which supports some helpful trait impls.
Notably it has a From<String> impl which is the preferred method for construction.
پس بنظرم بهترین مورد برای یادگیری اینه که
From trait رو سورس کدش رو ببینیم :pub type SecretString = SecretBox<str>;
impl From<&str> for SecretString {
fn from(s: &str) -> Self {
Self::from(String::from(s))
}
}
که خب وقتی میریم سراغ
SecretBox هم میبیبنیم pub struct SecretBox<S: Zeroize + ?Sized> {
inner_secret: Box<S>,
}اوکی پس همه چیز از
zeroize میاد (اگر باهاش کار نکردید یک نگاهی بهش بندازید جزو crate های مهم هست)از
From فهمیدم که میتونم مستقیم String بهش بدم و SecretString بگیرم و همین نیازمندی من بود و کد بالا میشه :use secrecy::{SecretString, ExposeSecret};
...
password: SecretString::from(
env::var("DATABASE_PASSWORD").expect("DATABASE_PASSWORD env not provided."),
),
...من توی کد بالا یک
trait دیگه رو هم آوردم به اسم ExposeSecret چون password دیگه از تایپ String نیست برای اینکه توی مواقع مورد نیاز (مثل ساخت کانکشن دیتابیس) بتونم ازش استفاده کنم به این trait نیاز دارم و برای خوندنش هم مباید از password.expose_secret()
استفاده کنم. این
crate از من دربرابر اینکه حواسم نباشه و یک چیزی رو لو بدم محافظت میکنه مثل نوشتن پسورد توی println یا توی لاگها اتفاقی که برای فیسبوک؛ گوگل قبلا افتاده.برگردم سراغ مطلبی که توی
Rust Community بود؛ به همین راحتی مشکل طرف حل میشد یعنی استفاده از from یا .into که زیرش از from استفاده میشه ولی پیچونده بودنش سراغ پیادهسازی trait و ... ( نمیدونم برم درستش کنم یا نه چون به راهحل تیک سبز داده بود)بگذریم اگر خواستید از
new هم استفاده کنید میشه این : let mystring = "My Sample String".to_owned();
let mybox = Box::new(mystring);
let secret_string = SecretString::new(mybox);
با توجه به توضیحاتی که دادم اگر مثل من
Junior هستید داکیومنت این crate گزینه خوبی هست برای مطلبی که چندروز قبل نوشتم https://news.1rj.ru/str/pyrust/96
بخصوص اینکه سورس کد سادهای هم داره.
👍7❤4
Forwarded from Python Hints
بگذارید هرکس به آیین خودش باشد.
زنان را گرامی بدارید.
فرودستان را دریابید.
اجازه دهید هرکسی به تکلم قبیلهی خویش سخن بگوید.
آدمی تنها در مقام خویش به منزلت خواهد رسید.
۷ آبان روز بزرگداشت کوروش کبیر، همایون باد.
زنان را گرامی بدارید.
فرودستان را دریابید.
اجازه دهید هرکسی به تکلم قبیلهی خویش سخن بگوید.
آدمی تنها در مقام خویش به منزلت خواهد رسید.
۷ آبان روز بزرگداشت کوروش کبیر، همایون باد.
❤🔥27❤5💔2👎1
پاسخ من به یک سوال در مورد
——————————————————————————————
توی این داکرفایل من اول اومدم از یک ایمیج کامل
یک توی خط ۴ دارم پکیجهای دیگهای که برای کامپایل سریعتر نیاز دارم رو نصب میکنم؛ نکته مهم هم همینجاس من اینها رو فقط برای کامپایل نیاز دارم و نه برای اجرای کد نهایی
توی خط ۵
پس خط ۶ رو دارم که یک
اگر سورس کد من ی خط تغییر کرد ولی
همینجا اضافه کنم ی
خط ۸ و ۹ پروژه خودم رو کپی و کامپایل میکنم.
توی خط ۱۲ دارم از یک ایمیج دیگه استفاده میکنم که اصلا
خط ۱۴ تا ۱۸ پکیجهایی که این ایمیج نداره و نیاز دارم رو نصب میکنم مثل
در نهایت از مرحله قبل نتیجه
حجم نهایی کانتینر پروژه روی
اضافه کنم :
راجب
پ.ن :
سورس توی کامنت؛ اگر نمیتونید فونت رو بخونید.
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 ببینم مزیتش چیه.پ.ن :
سورس توی کامنت؛ اگر نمیتونید فونت رو بخونید.
👍11❤2
Rust for Python developers
پاسخ من به یک سوال در مورد multi-stage dockerfile که توی گروه بحث آزادمون شده بود دیدم روی rust دارم مثال میزنم گفتم اینجا هم بذارم. —————————————————————————————— توی این داکرفایل من اول اومدم از یک ایمیج کامل rust استفاده کردم برای بخش اول اسم این بخش…
یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژهام مینوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این
اما چندتا نکته (بر خلاف دنیای پایتون) :
۱- استفاده از اسم
۲- از
۲-۱: توی کد بالا من
۲-۲: توی همون شرایط و
۳- بجای استفاده از اداکر ایمیجهای معرفی شده توسط پروژه
۴- وقتی
۵- خیلی بهتره موقع استفاده از
—bin <appname>
استفاده کنم
نهایتا شد این :
اینکه این
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" ]
👍10❤2
چندتا مقاله قدیمی دارم میخونم درمورد
ًRust in production at figma (2018)
دیسکورد هم یک پست درمورد اینکه چرا از
Why discord is switching from go to rust
نکته آخر اینکه؛
۱- توجه کنید به نیازمندیها و ساختار سیستمهاشون
۲- درمود بدیهایی که با
Rust خیلی جالب بود برام.ًRust in production at figma (2018)
دیسکورد هم یک پست درمورد اینکه چرا از
Go به Rust رفته منتشر کرده (همون سال ۲۰۲۰)Why discord is switching from go to rust
نکته آخر اینکه؛
۱- توجه کنید به نیازمندیها و ساختار سیستمهاشون
۲- درمود بدیهایی که با
Rust گفته شده بسیاریش توی این چندسال رفع شده و توی پرفورمنس حتی Rust سریعتر هم شده.👍14
یک مشکلی داشتم،
من توی خونه برای راحتی فیلم دیدن خانواده یک سیستم
روی رزبری که به هارد وصل بود.
حدوداً ۲ سال قبل رزبری به مشکل خورد و سیستم رفت و منم دیگه حوصله و وقت کانفیگ نداشتم (نیازی هم نبود، هرکسی هرچی میخواست دوباره دانلود میکرد)
تا اینکه چندشب پیش یک سری فایل خواستیم به اشتراک بذاریم که حجمش خیلی زیاد میشد و اختصاصی هم بود.
دنبال راهکار، رزبری رو راه انداختم و
Sync directory
زدم، بعد به ذهنم رسید بجای nextcloud, ... همین کارو بکنم ی کد بزنم دائم یک پوشه رو مانیتور کنه
و اگر چیزی به پوشه اضافه شد که روی سرور (رزبپری نیست) اتومات آپلود کنه.
ابزار برای اینکار هست حتی کد پایتون برای ۱ کلاینت و چند سرور رو هم دارم خودم (فقط روی اسم و تایم کار میکنه البته)
اینو دارم با Rust مینویسم توی وقتای خالی (حتی ۱۰-۲۰ دقیقه) و خیلی پروژه جذاب و پر تمرینی شده
گفتم اگر کسی خواست تمرین کنه :
ویژگیها : چندتا آرگومان میگیره
اطلاعات ssh و کلید و ...
پوشه لوکال
پوشه سرور
همزمان میتونه چندتا پوشه رو هم track کنه.
روی تغییر متادیتا پوشه مثل زمان دسترسی و ... پوشه رو اسکن میکنه فایل جدید اگر پیدا کنه که hash اش توی جدول نباشه ( تیبل لوکال) تیبل سرور رو نگاه میکنه (ممکن اون فایل از طریق یک کامپیوتر یا دستگاه دیگه آپلود شده باشه) و اگر بود نوتیف میده که فایل آپلود شده
فیچر نوتیف داره، اما توی محیط غیر دسکتاپ خاموش هست، توی محیط دسکتاپ یوزر میتونه فعالش کنه (درصد آپلود رو نمایش میده) یک حداقل داره و اونم اینکه یوزر میتونه بگه اگر حجم آپلود جدید بیش از ۵ گیگ بود نوتیف بده، در غیر اینصورت نده
فیچر sync delete داره، برای موارد غیر حساس و ... مثلاً ی دوره آموزشی رو روی سیستم داری میخوای روی گوشی و تبلت و .... باشه که موقع خواب هم یک نگاهی بکنی بهش.
این مورد روی هر کلاینتی فعال باشه، فایل های اون کلاینت به محض پاک شدن از سورس از سرور هم پاک خواهند شد.
چندتا فیچر دیگه هم درآورم براش که توی سیستم نوشتم الان یادم نمیاد، ولی خب همین هم حجم تمرین بسیار بالایی داره و خیلی از
امیدوارم تمرین خوب و جذابی باشه.
من توی خونه برای راحتی فیلم دیدن خانواده یک سیستم
NAS ایجاد کرده بودم چندسال قبل NextCloud, ...روی رزبری که به هارد وصل بود.
حدوداً ۲ سال قبل رزبری به مشکل خورد و سیستم رفت و منم دیگه حوصله و وقت کانفیگ نداشتم (نیازی هم نبود، هرکسی هرچی میخواست دوباره دانلود میکرد)
تا اینکه چندشب پیش یک سری فایل خواستیم به اشتراک بذاریم که حجمش خیلی زیاد میشد و اختصاصی هم بود.
دنبال راهکار، رزبری رو راه انداختم و
Sync directory
زدم، بعد به ذهنم رسید بجای nextcloud, ... همین کارو بکنم ی کد بزنم دائم یک پوشه رو مانیتور کنه
و اگر چیزی به پوشه اضافه شد که روی سرور (رزبپری نیست) اتومات آپلود کنه.
ابزار برای اینکار هست حتی کد پایتون برای ۱ کلاینت و چند سرور رو هم دارم خودم (فقط روی اسم و تایم کار میکنه البته)
اینو دارم با Rust مینویسم توی وقتای خالی (حتی ۱۰-۲۰ دقیقه) و خیلی پروژه جذاب و پر تمرینی شده
گفتم اگر کسی خواست تمرین کنه :
ویژگیها : چندتا آرگومان میگیره
اطلاعات ssh و کلید و ...
پوشه لوکال
پوشه سرور
همزمان میتونه چندتا پوشه رو هم track کنه.
روی تغییر متادیتا پوشه مثل زمان دسترسی و ... پوشه رو اسکن میکنه فایل جدید اگر پیدا کنه که hash اش توی جدول نباشه ( تیبل لوکال) تیبل سرور رو نگاه میکنه (ممکن اون فایل از طریق یک کامپیوتر یا دستگاه دیگه آپلود شده باشه) و اگر بود نوتیف میده که فایل آپلود شده
فیچر نوتیف داره، اما توی محیط غیر دسکتاپ خاموش هست، توی محیط دسکتاپ یوزر میتونه فعالش کنه (درصد آپلود رو نمایش میده) یک حداقل داره و اونم اینکه یوزر میتونه بگه اگر حجم آپلود جدید بیش از ۵ گیگ بود نوتیف بده، در غیر اینصورت نده
فیچر sync delete داره، برای موارد غیر حساس و ... مثلاً ی دوره آموزشی رو روی سیستم داری میخوای روی گوشی و تبلت و .... باشه که موقع خواب هم یک نگاهی بکنی بهش.
این مورد روی هر کلاینتی فعال باشه، فایل های اون کلاینت به محض پاک شدن از سورس از سرور هم پاک خواهند شد.
چندتا فیچر دیگه هم درآورم براش که توی سیستم نوشتم الان یادم نمیاد، ولی خب همین هم حجم تمرین بسیار بالایی داره و خیلی از
crate هایی که توی مصاحبهها ازم پرسیده شد رو باید درست درک کنید برای پیادهسازیامیدوارم تمرین خوب و جذابی باشه.
👍19❤7
بجای انتظار کشیدن؛ ویدئو ببینیم
Youtube Video
وسط
بسیار بسیار ویدئو خوبی هست.
Youtube Video
وسط
build, compile, .... پروژه شرکت دیروز این رو شروع کردم و امروز دارم ویدئوهای بعدی رو ادامه میدم.بسیار بسیار ویدئو خوبی هست.
YouTube
Learning Rust! | Writing a 16bit Virtual Machine
Rust is cool but also hard and scary. I love writing little virtual machines, so today I'm going to start making one! I'll be talking about the project structure and how I want to reuse code between binaries.
Source code from this stream: https://github…
Source code from this stream: https://github…
👍9
RandRng
کلید RSA هم برای اولین بار شکسته شد. نیاز فوری به الگوریتم Encryption جدید و قویتر Blog Post
جنگ کوانتوم.
دستاوردهای گوگل و چین رو دیدید ؟
دستاوردهای گوگل و چین رو دیدید ؟
👍10❤1
fs::read_to_stringباگ خفته، یک سرویس کوچیک داریم که دائم
down میشه چک میکنیم میبینیم دقیقا قبلش دیوایس (Edge Device) اونم داره ریستارت میشه.پس نیرو میره سراغ مشکلات دیوایس؛ این وسط منم رفتم سورس کد بخونم.
اطلاعاتی هم از پروژه و مشکل داشتم و خب چندتا از بچهها گفتن مشکل از دیوایس هست.
توی سورس کد دیدم طرف اینطوری داره فایل رو میخونه؛ یک نمونه فایل رو گرفتم (بعد از کرش کردن دستگاه)
دیدم بله، حجم فایل بیشتر از رم دستگاه شده؛ مشکل همین بود.
برای همین توی اکثر آموزشهای حرفهای از این مورد استفاده نمیشه و راه سختتره read, buffer, ... پیش گرفته میشه
موضوع فقط بهینه بودن نیست؛ موضوع جلوگیری از کرش کردن هست.
گفتم اینجا هم بگم، شاید یک نفر دیگه رو هم از چندساعت دیباگ نجات داد.
👍26❤8
این پروژه limbo خیلی باحاله و دانشگاهیه برای آموزش crate های مختلف؛ سورس کدش رو بخونید
Limbo Github
داستان اینه که اومدن گفتن
من خود پروژه رو هنوز به کسی پیشنهاد نمیدم؛ ولی این خیلی خفنه مثلا برید توی سورس کد
اول اینکه هر پوشه ماژولار دیده شده و هر پوشه
بعد توی این سورس کد مثال
اینجا همش هست؛ تازه ماژولار و تر و تمیز با
Limbo Github
داستان اینه که اومدن گفتن
SQLite رو بهتر مینویسیم و با یک زبان امن که خب گزینهاش شده Rust و اینبار همه اجازه دارند کد Contribute کنند.من خود پروژه رو هنوز به کسی پیشنهاد نمیدم؛ ولی این خیلی خفنه مثلا برید توی سورس کد
cli/app.rs
اول اینکه هر پوشه ماژولار دیده شده و هر پوشه
Cargo.toml خودش رو داره که باحال بود (دفعه اول بود میدیدم)بعد توی این سورس کد مثال
clap رو ببینید؛ من برای پروژه چند وقت پیشم بیچاره شدم تا همه اینارو کنار هم درک کنم و بیارم.اینجا همش هست؛ تازه ماژولار و تر و تمیز با
Best Practice ها و خوبیش اینه که هممون به اندازه کافی از SQLite میدونیم و دانش خوبی داریم ازش.GitHub
GitHub - tursodatabase/turso: Turso is an in-process SQL database, compatible with SQLite.
Turso is an in-process SQL database, compatible with SQLite. - tursodatabase/turso
❤12👍7
Forwarded from Python Hints
هلوکاست ایرانی
یک زمانی شهردار تهران رو بخاطر ترافیک تهران اعدام کردند.
آخوند جز ویرانی، برای ایران دستاورد نداشت.
یک زمانی شهردار تهران رو بخاطر ترافیک تهران اعدام کردند.
آخوند جز ویرانی، برای ایران دستاورد نداشت.
👍39👎8🌭6😱2😭1