داشتم راجب
دیدم توکیو همهکاره اینکار رو هم میکنه؛ اما نه کاملا بهینه ولی
من روی تمرین
linux io_uring میخوندم؛ که برام سوال شد آیا Rust هم ازش استفاده میکنه ؟دیدم توکیو همهکاره اینکار رو هم میکنه؛ اما نه کاملا بهینه ولی
bytedance شرکت مادر Tiktok یک پروژه داره به اسم monoio که کاملا هم فعال و آپدیت بگیر هست و بدون سربار داره از io_uring استفاده میکنه.من روی تمرین
Socket توی Rust به این موضوع رسیدم و دارم بیشتر باهاش آشنا میشم اما خوشحال میشم اگر کسی تجربه کار با این ابزار یا آشنایی دقیقی با io_uring داره یک پست؛ ویدئو یا ... مارو مهمون کنه توی کامنتها.GitHub
GitHub - bytedance/monoio: Rust async runtime based on io-uring.
Rust async runtime based on io-uring. Contribute to bytedance/monoio development by creating an account on GitHub.
👍12❤2😁1
ماکروسافت دیروز اعلام کرد که کامپایلر
یک دلیلی که من مخالف ترجمه فارسی خیلی از مباحث هستم همین موضوع هست؛ ماکروسافت نگفته کامپایلر رو بازنویسی میکنه بلکه دقیقا تاکید روی
یعنی همون کدهای قبل رو کپی پیست میکنند توی یک فایل جدید و مطمئن میشن سینتکس و ... به
بگذریم؛ توی این بحث طرفدارای
مثلا نویسنده
اما بعنوان کسی که علاقه بسیاری به
اما تیم
دلیل انتخاب
Typenoscript رو منتقل کرده روی Go (قبلا روی خود TypeScript بود) یک دلیلی که من مخالف ترجمه فارسی خیلی از مباحث هستم همین موضوع هست؛ ماکروسافت نگفته کامپایلر رو بازنویسی میکنه بلکه دقیقا تاکید روی
Port کردن داشته.یعنی همون کدهای قبل رو کپی پیست میکنند توی یک فایل جدید و مطمئن میشن سینتکس و ... به
Go تبدیل بشه. (واقعا فارسی توضیح دادن تفاوت rewrite, port کردن خیلی سخته)بگذریم؛ توی این بحث طرفدارای
Go و البته اونایی که درک درستی از موضوع نداشتند خواستند از آب گلالود ماهی بگیرند که دورههای Go خودشون رو بفروشند یا اینکه نفرت پراکنی کنند راجب Rust ؛ اول اینکه اگر بیشتر رصد کنید خیلیها کمی ناامید شدند که چرا Rust انتخاب نشد.مثلا نویسنده
Vue که توی توییتهای مختلف توضیح داده که Go برای بعضی کاربردها مثل web assembly مناسب نیست و ...اما بعنوان کسی که علاقه بسیاری به
Rust دارم بنظرم تیم TypeScript تصمیم خوبی گرفته؛ اگر قرار به بازنویسی کامل TypeScript بود قطعا Rust بهترین گزینه میشد و با توجه به اینکه تیم کرنل ویندوز هم داره خیلی از لایبراریهای اصلی رو میبره روی Rust نشون میده مشکلی هم با این قضیه نیست.اما تیم
TypeScript نمیخواد مجدد همه چیز رو از بیخ بازنویسی کنه و فقط داره Port میکنه تا زمان کامپایل رو کاهش بده؛ برای همین نیازی به سختیهای Rust, C نداره و البته همین Port کردن کم هزینه هم حداقل بهش 10x سرعت داده.دلیل انتخاب
Golang بجای Rust, C فقط این موضوع بوده؛ خواستم شفاف بشیم روش.👍34🤣1
#5min_Rust
قبل از اینکه دوپایی بپریم توی معرفی انواع
توی
اما توی
پس توی
پس با این حساب یادگیری
بازم بر خلاف پایتون نوع
اگر نوع
عدد 32 نشان دهنده تعداد بیت حافظه هست و محدوده اعدادی که این مقدار میتونه نگهداره رو شامل میشه.
برای راحتی من با
اینجا
برای بدست آوردن رنج
برای بدست آوردن رنج
علامت
اگر با اعداد باینری کمی آشنایی داشته باشید نیازی به حفظ کردن فرمولها نیست؛ توی نوع
اما توی هر دوحالت حاصل محسابات و به توان رسوندن همیشه
بر همین اساس شما همهی آنچه برای درک جدول تصویر پیوست لازمه رو میدونید؛ فقط یک مورد میمونه :
که یعنی این نوع به معماری سیستم بستگی داره (معماری سیستم روی
بعد از اون نوع داده
یعنی برای نوع داده
برای تعیین نوع داده هم بعد از ساخت متغییر و قبل از مقدار دهی میتونید نوع داده رو مشخص کنید:
بیشترین سوالی که پرسیده میشه؛ آیا باید همیشه برای پرفورمنس بیشتر کوچکترین نوع داده رو انتخاب کنیم ؟
خیر.
اولین و مهمترین موضوع؛ اجرا شدن درست برنامه هست؛ اما بعضی وقتا کاملا میشه مطمئن بود نوع دادهای باید چه مقداری باشه.
مثلا فرض کنید ما دارید یک برنامه برای پردازش تصاویر
اما برای مواردی که مطمئن نیستید
قبل از اینکه دوپایی بپریم توی معرفی انواع
Data type توی Rust یک تفاوت رو بین Rust, Python ببینیم.توی
rust بر خلاف python برنامهنویس نمیتونه هر زمانی که دلش خواست توی متغییر مقداری با دیتا تابپ متفاوت بریزه؛ کد زیر توی پایتون درست هست:my_var = 5
print(f"The content is {my_var} of type {type(my_var).__name__}")
my_var = "@pyrust"
print(f"The content is {my_var} of type {type(my_var).__name__}")
اما توی
rust شما اجازه اینکار رو نداریدfn main() {
let my_var: i32 = 5;
println!("The content is {my_var} of type {}", std::any::type_name::<i32>());
my_var = "Hello"; // ٍError: expected `i32`, found `&str`
}پس توی
rust خیلی مهم هست که مشخص کنید متغیر شما از چه نوعی باید باشه؛ البته توی خیلی موارد نیازی به نوشتن نداره و خود کامپایلر میتونه بر اساس استفادهای که از متغییر میکنید (اولین نوع دادهای که داخلش میریزید) تصمیم بگیره.پس با این حساب یادگیری
Data Type مهم میشه و اولین نوع دادهای که بررسی میکنیم Integer خواهد بود.بازم بر خلاف پایتون نوع
int توی rust خودش چندین مدل داره؛ بصورت پیشفرض اگر هیچ موردی رو انتخاب نکنید کامپایلر برای شما i32 رو درنظر میگیره ولی این یعنی چی ؟i32 : i = Signed, 32 = 32-bit value
اگر نوع
int شما با i شروع شده بود یعنی Signed هست و این به این معنی هست که این نوع داده شامل اعداد صحیح مثبت و منفی میشه.عدد 32 نشان دهنده تعداد بیت حافظه هست و محدوده اعدادی که این مقدار میتونه نگهداره رو شامل میشه.
برای راحتی من با
i8, u8 مثال میزم:اینجا
u به معنی unsigned هست و یعنی این نوع داده اعداد منفی قبول نمیکنه؛ برای اینکه بفهمیم یک نوع داده چه رنج اعدادی رو داخل خودش نگهداری میکنه میتونیم از فرمول زیر استفاده کنیم:i8 : Signed, 8bit برای بدست آوردن رنج
signed کافیه تعداد bit رو داخل این فرمول بذارید :[-2^(n-1), (2^(n-1))-1] ==> [-2^7, (2^7)-1) ==> [-128, 127]
u8برای بدست آوردن رنج
unsigned ها کافیه تعداد bit رو داخل این فرمول بذارید:(2^n)-1 ==> (2^8)-1 ==> 255
علامت
^ نماد توان هست.اگر با اعداد باینری کمی آشنایی داشته باشید نیازی به حفظ کردن فرمولها نیست؛ توی نوع
unsigned ازونجایی که عدد مثبت و منفی رو قبول میکنه پس ۱ بیت رو از دست میده برای اینکه مشخص کنه عدد منفی هست یا مثبت پس این یعنی بخش توان فرمول -1 رو خواهد داشت فقط برای unsigned ها اما توی هر دوحالت حاصل محسابات و به توان رسوندن همیشه
-1 رو توی بخش مثبت هم داره؛ خیلی ساده دلیلش اینه که بزرگترین عدد مثبتی رو وقتی میتونید بسازید که همهی بیتهای باینری 1 باشند و هروقت بیت اول (از راست) مقدار 1 بگیره حاصل حتما عددی فرد خواهد بود.بر همین اساس شما همهی آنچه برای درک جدول تصویر پیوست لازمه رو میدونید؛ فقط یک مورد میمونه :
arch | isize | usize
که یعنی این نوع به معماری سیستم بستگی داره (معماری سیستم روی
index گذاری برای دسترسی به خانههای RAM مهم هست) برای همین هرجا صحبت از دسترسی به حافظه یا index , ... باشه این نوع داده رو خواهید دید. اگر سیستم ۳۲ بیتی باشه مقدار isize = i32, usize = u32 خواهند بود و برای سیستمهای ۶۴ بیتی مقادیر isize=i64, usize=u64 رو خواهیم داشت.بعد از اون نوع داده
float رو داریم؛ شامل f32, f64 تفاوتشون توی precision هست (تعداد اعدادی که بعد از اعشار میاد) f32 precision: 6-9 digits
f64 precision: 15-17 digits
یعنی برای نوع داده
f32 بعد از ۶-۹ رقم اعشار دقت رو از دست میدیم و حاصل محاسبات بعد از ۶-۹ رقم اعشار رند شده خواهد بود؛ برای f64 این مقدار به ۱۵-۱۷ میرسه؛ بصورت دیفالت کامپایلر متغیرها رو f64 درنظر میگیره مگر اینکه شما مشخص کنید نوع داده چیز دیگری باشه.اگر رند کردن براتون قابل قبول نیست Decimal رو باید در نظر بگیرید که خب توی این مرحله راجبش صحبت نمیکنیم.
برای تعیین نوع داده هم بعد از ساخت متغییر و قبل از مقدار دهی میتونید نوع داده رو مشخص کنید:
let red_pixel: u8 = 25;
let my_negative_number: i32 = -5654891;
let pi: f64 = 3.14
بیشترین سوالی که پرسیده میشه؛ آیا باید همیشه برای پرفورمنس بیشتر کوچکترین نوع داده رو انتخاب کنیم ؟
خیر.
اولین و مهمترین موضوع؛ اجرا شدن درست برنامه هست؛ اما بعضی وقتا کاملا میشه مطمئن بود نوع دادهای باید چه مقداری باشه.
مثلا فرض کنید ما دارید یک برنامه برای پردازش تصاویر
jpg مینویسید؛ توی این تصاویر همیشه مقدار هر پیکسل بین 0-255 خواهد بود و این یعنی شما برای متغییرهای کار با پیکسل میتونید با خیالت راحت نوع داده رو روی u8 تعریف کنید.اما برای مواردی که مطمئن نیستید
i32 شروع خوبی هست که پیشفرض کامپایلر هم همین مقدار هست.👍20❤3
Rust for Python developers
#5min_Rust قبل از اینکه دوپایی بپریم توی معرفی انواع Data type توی Rust یک تفاوت رو بین Rust, Python ببینیم. توی rust بر خلاف python برنامهنویس نمیتونه هر زمانی که دلش خواست توی متغییر مقداری با دیتا تابپ متفاوت بریزه؛ کد زیر توی پایتون درست هست: my_var…
#5min_Rust
از حالتهای دیگهای که میتونید نوع داده رو مشخص کنید استفاده از
در نهایت
رو هم برای دیدن کوچکترین و بزرگترین مقدار اون نوع داده میتونید
از حالتهای دیگهای که میتونید نوع داده رو مشخص کنید استفاده از
_ و البته as که ممکن توی کدهای دیگران ببیند.در نهایت
std::<TYPE>::MIN
std::<TYPE>::MAX
رو هم برای دیدن کوچکترین و بزرگترین مقدار اون نوع داده میتونید
print کنید.👍13❤1
توی گروه codecraft همینجوری که دارم تسکها رو تمرین میکنم کدها رو با rust مینویسم و به اشتراک میذارم.
خیلی از مواردی که توی پستهای ۵ دقیقه یادم میره مثال بزنم یا مثال به ذهنم نمیاد توی کدهای اونجا هست (الته کدها بصورت تصویر هست) تا حتی اگر کسی خواست از روی کدها هم تسکها رو انجام بده حداقل مجبور بشه یکبار کد رو بخونه (موقع تایپ)
https://news.1rj.ru/str/codecrafter_fa/472
خیلی از مواردی که توی پستهای ۵ دقیقه یادم میره مثال بزنم یا مثال به ذهنم نمیاد توی کدهای اونجا هست (الته کدها بصورت تصویر هست) تا حتی اگر کسی خواست از روی کدها هم تسکها رو انجام بده حداقل مجبور بشه یکبار کد رو بخونه (موقع تایپ)
https://news.1rj.ru/str/codecrafter_fa/472
Telegram
M Abbasi in Code Craft (Review)
#Build_your_own_dns_server
#Rust
#Beginner
#task_0-5
HeaderFlags
بجای متد new حالا متد parse داره.
و روی to_be_byte اش هم یک مقدار تغییرات دادم؛ مثلا استفاده از bitwise or برای خوانایی بیشتر.
نکته مهم این بخش این بود که توی to_be_bytes حتما باید QR مقدارش…
#Rust
#Beginner
#task_0-5
HeaderFlags
بجای متد new حالا متد parse داره.
و روی to_be_byte اش هم یک مقدار تغییرات دادم؛ مثلا استفاده از bitwise or برای خوانایی بیشتر.
نکته مهم این بخش این بود که توی to_be_bytes حتما باید QR مقدارش…
👍11
توزیع
مشکل اصلی هم بخاطر، باگهای گزارش شده سر
پرفورمنس از کجا میاد؛ قطعا
توسط پروژه
اطلاع بیشتر :
Link
پ.ن : راستی اگر اینطوری بشه یعنی
زخممون نمیکنند که
اگر این مشکل رو حل میکنه من ۱۰۰٪ پایهام 😂
ubuntu اعلام کرده میره سراغ پروژه uutils؛ این پروژه یکی از بزرگترین بازنویسیها توی Rust هست که تمام ابزارهای مهم پروژه GNU Linux رو با Rust بازنویسی میکنه.ls, cd, cp, mv, mkfifo, ....مشکل اصلی هم بخاطر، باگهای گزارش شده سر
Memory Safety هست؛ اوبنتو هم این مورد و پرفورمنس رو دلیل این حرکت دونسته.پرفورمنس از کجا میاد؛ قطعا
Rust به خودی خود از C سریعتر نیست ولی سختی مالتیترد و مالتی پراسس روی C باعث شده بسیاری از توسعه دهندههای core utils سراغ اینکار نروند و خب بارها صحبت این موضوع شده بود که این یک bottleneck برای خیلی از ابزارهای دیگه که بر اساس core utils توسعه داده میشوند هست، مشکلی که توی Rust وجود نداره و با یک جستجو حتی نتایج بنچمارکها روی ابزارهایی که امکان Multi thread / Multi Process شدن براشون بوده رو میبینید که توی بعضی موارد حتی تا 10x سریعتر هستند.توسط پروژه
oxidizer میتونید همین الان اینکار رو بکنید و تست بگیرید ubuntu با نسخه rust ابزارها چیکار خواهد کرد.اطلاع بیشتر :
Link
پ.ن : راستی اگر اینطوری بشه یعنی
GNU از Ubuntu و بعد از Linux حذف بشه؛ دیگه اینایی که تازه مدرک کار با ترمینال لینوکس گرفتن زخممون نمیکنند که
Linux نگو، باید بگی Gnu Linux اگر این مشکل رو حل میکنه من ۱۰۰٪ پایهام 😂
👍29🤣17😁2
Forwarded from RandRng
Media is too big
VIEW IN TELEGRAM
نوروز مبارک 🌹🎊🎉🎉🎊🎉🌹
امیدوارم سال جدید از سالی که لحظات آخرش هست، بهتر باشه.
پر از خبرای شادی بخش برای ایران و ایرانیان.
سایه آخوند از وطن دور
امیدوارم سال جدید از سالی که لحظات آخرش هست، بهتر باشه.
پر از خبرای شادی بخش برای ایران و ایرانیان.
سایه آخوند از وطن دور
❤🔥25🎉3
شاید شما هم تعجب کردید؛ شایدم نه که موزیلا مدتی قبل یک سری اخراج توی تیمهاش انجام داد (که کم هم نبود) ولی اپلیکیشنهاش توی
دلیلش خیلی تو مخ من بود (فکر میکردم از ابزاری مثل
این قضیه تو مخی من بود تا اینکه متوجه توسعه
ابنطوری منطق رو ۱ بار مینویسه و بعد توی کدهای مختلف
مثال جایی که کاربرد زیادی داره:
یک پروژهای چندین سال قبل داشتم که شامل بیش از ۵۰ تا فرمول ریاضی و بیش از ۲۰ مورد الگوریتم بود تا خروجی درست رو تحویل بده؛ حتما پیش خودتون میگید ببرش ۱ بار روی سرور پیادهسازی کن یک
گزینه خوبی هست ولی نه وقتی مزیت رقابتی کار شما نسبت به باقی
پس مجبور بودیم؛ ۴ بار پیادهسازی کنیم:
۱- تیم تحقیقاتی که دائمی روی پایتون کار میکرد.
۲- تیم
۳- تیم
۴- تیم
خیلی وقتا پیش میومد یک اشتباه توی منطق کار با آرایههای چند بعدی (برای
هیچ وقت یادم نمیره اون روزا مجبور بودم کار با آرایه رو روی
اون زمان اینطوری بودیم که تا مجبور نشدیم؛ الگوریتم جدید رو برای پیادهسازی نفرستیم وقتی رقیبا الگوریتمهاشون به خوبی کار ما میشد اونوقت نسخه جدید میدادیم. اینطوری بود که تیم تحقیق
ios, android, desktop توی آپدیتهای بعدی به مراتب بهتر و بهتر شد.دلیلش خیلی تو مخ من بود (فکر میکردم از ابزاری مثل
Dioxus استفاده میکنند؛ که درست در نمیومد چون هنوز تیمهای native خودشون رو داشتند.این قضیه تو مخی من بود تا اینکه متوجه توسعه
UniFFI شدم؛ بر اساس خود داکیومنت :UniFFI is currently used extensively by Mozilla in Firefox mobile and desktop browsers; written once in Rust, auto-generated bindings allow that functionality to be called from both Kotlin (for Android apps) and Swift (for iOS apps). It also has a growing community of users shipping various cool things to many users.
ابنطوری منطق رو ۱ بار مینویسه و بعد توی کدهای مختلف
android, ios, desktop اون رو استفاده میکنند. دیگه مشکلی هم برای استفاده از جدیدترین فیچرهای هر پلتفرم نداره (وقتی ایده خوب و پیادهسازی خوب کنار هم میاد).مثال جایی که کاربرد زیادی داره:
یک پروژهای چندین سال قبل داشتم که شامل بیش از ۵۰ تا فرمول ریاضی و بیش از ۲۰ مورد الگوریتم بود تا خروجی درست رو تحویل بده؛ حتما پیش خودتون میگید ببرش ۱ بار روی سرور پیادهسازی کن یک
endpoint بده به فرانت تموم بشه بره.گزینه خوبی هست ولی نه وقتی مزیت رقابتی کار شما نسبت به باقی
privacy دیتای کاربر هست و این محاسبات بطور کامل باید روی دستگاه کاربر باشه؛ غیر از اون حجم دیتاها توی بعضی شرایط بسیار بالا بود که خیلی عاقلانه نبود برای اون دیتاها هم از کاربر بخوایم آپلود انجام بده.پس مجبور بودیم؛ ۴ بار پیادهسازی کنیم:
۱- تیم تحقیقاتی که دائمی روی پایتون کار میکرد.
۲- تیم
C# که برای ویندوز نرمافزار رو تولید میکرد (دسترسی بالاتر)؛ کاربر ios, android میتونستند دیتاهاشون رو باهاش به اشتراک بذارند برای همین نیاز بود قابلیت پردازش قویتر هم داشته باشه اگر خواست گزارش جزئی تری بدست بیاره و ....۳- تیم
Swift که روی نسخه iOS, iPadOS کار میکرد.۴- تیم
Kotlin که روی نسخه Android کار میکرد.خیلی وقتا پیش میومد یک اشتباه توی منطق کار با آرایههای چند بعدی (برای
optimization باید اینطوری پیادهسازی میشد که بشه از GPU, CPU همزمان استفاده کرد) باعث میشد یا نتایج نهایی اشتباه بشه یا محاسبات خیلی کند بشه و البته گوشی بیش از حد داغ کنه.هیچ وقت یادم نمیره اون روزا مجبور بودم کار با آرایه رو روی
C#, Js, Kotlin, Swift یاد بگریم تا ایرادات بچهها رو پیدا کنم؛ کاری که اگر به عقب برگردم حتما یکبارم که شده با این پکیج تستش میکنم.اون زمان اینطوری بودیم که تا مجبور نشدیم؛ الگوریتم جدید رو برای پیادهسازی نفرستیم وقتی رقیبا الگوریتمهاشون به خوبی کار ما میشد اونوقت نسخه جدید میدادیم. اینطوری بود که تیم تحقیق
v70 الگوریتم روی میداد برای پیادهسازی ولی روی اپلیکیشن میشد v5 الگوریتم. خیلی میفهمم چرا یک تیم باید از چنین ابزاری استفاده کنه.👍20❤4
Forwarded from دستاوردهای یادگیری عمیق(InTec)
کاش یک سالی هم بیاد که توش اصلاً لازم نشه بهم #تسلیت بگیم.
اصلاً یادمون بره ی روزی توی این مملکت، آخوندایی که جز خوندن :
احکام ریدن و جهتش و ...
شعور و فهم چیز دیگهای نداشتند، مسئولیت داشتند.
یعنی میشه؟ تا ما زندهایم !
یک سال وقتی تموم میشه، بیام اینجا بزنم:
بچهها دقت کردید، امسال لازم نشد بهم دیگه تسلیت بگیم !!
من واسه اون روز میجنگم.
#بندرعباس
اصلاً یادمون بره ی روزی توی این مملکت، آخوندایی که جز خوندن :
احکام ریدن و جهتش و ...
شعور و فهم چیز دیگهای نداشتند، مسئولیت داشتند.
یعنی میشه؟ تا ما زندهایم !
یک سال وقتی تموم میشه، بیام اینجا بزنم:
بچهها دقت کردید، امسال لازم نشد بهم دیگه تسلیت بگیم !!
من واسه اون روز میجنگم.
#بندرعباس
❤30👍4🎉3
کتاب
اومدم بخونم که توش پیشنهاد داده بود قبلش
Rust web programming
رو بخونم که توسط همین نویسنده منتشر شده (توی لیست کتابهایی که اکر وقت کنم میخونم، نگهش داشته بودم)
تا اینکه شروع کردم توی اوقات کانفیگ سرور و ... خوندن؛ خوشحالم که این کتاب رو قبل از Async Rust دارم میخونم.
واقعاً جذاب هست؛ هر دو کتاب این نویسنده رو پیشنهاد میکنم حتماً بخونید.
پ.ن:
برای آموزشهای ۵ دقیقهای، فراموش نکردم فقط این روزها بسیار بسیار زمانبندی فشردهای دارم. سرور و داوپس و شبکه و برنامهنویسی و هوش مصنوعی و ... همرو دارم انجام میدم 🤦
قطعاً کمی شرایط بهتر بشه، ادامه خواهم داد.
async rust منتشر شده.اومدم بخونم که توش پیشنهاد داده بود قبلش
Rust web programming
رو بخونم که توسط همین نویسنده منتشر شده (توی لیست کتابهایی که اکر وقت کنم میخونم، نگهش داشته بودم)
تا اینکه شروع کردم توی اوقات کانفیگ سرور و ... خوندن؛ خوشحالم که این کتاب رو قبل از Async Rust دارم میخونم.
واقعاً جذاب هست؛ هر دو کتاب این نویسنده رو پیشنهاد میکنم حتماً بخونید.
پ.ن:
برای آموزشهای ۵ دقیقهای، فراموش نکردم فقط این روزها بسیار بسیار زمانبندی فشردهای دارم. سرور و داوپس و شبکه و برنامهنویسی و هوش مصنوعی و ... همرو دارم انجام میدم 🤦
قطعاً کمی شرایط بهتر بشه، ادامه خواهم داد.
🔥27👍9
Forwarded from RandRng
#تجربه
از تجربیات دوستان :
من عیناً متن رو گذاشتم، ایشون از من راهنمایی خواسته؛ اما چندتا چیز دیگه که توی صحبت مشخص شد :
۱- تسک براشون ایمیل نشده؛ یک اکانت تلگرام براشون فرستاده
۲- طرف حتی خودشم معرفی نکرده، فقط راجب یک نفر که اونجا وجود نداشته صحبت کرده (اسم برده و ...)
حالا تحلیل من :
قبلاً گفتم بازم میگم، تسک فرستادن هم حتی کار درستی نیست، مصاحبه کننده در ۲ حالت به شما تسک میده :
۱- سواد نداره شمارو ارزیابی کنه؛ ۹۹٪ مواقع.
۲- شما شدیداً استرس و ... دارید و نمیتونید توانایی خودتون رو نشون بدید ولی مصاحبه کننده حس میکنه توانایی و سوادش رو دارید و بهتون یک شانس میده؛ ۱٪ مواقع.
مورد سوم هم تیمهایی هست که یک بخش پروژهاش رو میده سنیور بزنه، که خداروشکر سنیورها دیگه تسک قبول نمیکنند.
حالا فرض کنیم که این مورد درست؛ چرا برای ارسال تسک ... از ایمیل رسمی شرکت استفاده نشده ؟ ایمیل رسمی با اسم و اطلاعات ارسال کننده با متن و موضوع دقیق که این تسک برای استخدام هست، حتی تیمهای استارتاپی هم یک ایمیل (دامنه رسمی ندارند) ارسال میکنند و بعد با شمارهی شرکت پیامک میدند که تسک مصاحبه شرکت فلان برای شما ارسال گردید.
اینکه طرف خودش رو هم معرفی نکرده، چیز عجیبی نیست ولی کنار باقی موارد خیلی عجیب میشه.
موضوع بعدی، چرا نباید بعد از انجام تسک؛ با نیرو قرارداد بسته بشه ؟ توی قانون ما حتی قرارداد موقت و برای ارزیابی هم داریم که نیازی به پرداخت بیمه و مالیات و ... هم نداره
قرارداد ۳ ماهه هم هست و حتی میشه ۱۵ روز بعد هم کنسل کرد قرارداد رو.
درنهایت من به ایشون گفتم :
نه تسک رو انجام بده، نه سراغ پروژه بره؛ این بسیار بسیار شبیه به اون شرکتها و قراردادهایی هست که افراد توی لینکدین میزنند پولشون رو پرداخت نکرده و ...
همیشه گفتم بازم میگم؛
مجانی واسه هیچکس کار نکنید.
قرارداد رسمی و دقیق ببندید و دقت هم بکنید، که واسه پولتون التماس نکنید.
از تجربیات دوستان :
قبل من یکی تو بود
بعدش من رفتم و مکالمه اونارو هم قبلش شنیده بودم.
خیلی از رزومه خوشش اومده بود و شروع کرد از یکی از نیروهاش که تو تیمشه هی تعریف کردن ولی
گفت یه تسک میدیدم ما خیلی راحتم هست ببینیم چجوری انجام میدین ۱۶ ساعت زمان دارین، همونجا هم گفت و راحت بود.
نکته بعدی اینکه دورکاری هستن کل تیمش.
بعد گفت یه پروژه انجام میدید و بعد از اون قرارداد میبندیم.
در نهایت گفت از لحاظ مالی مساله ای نیست و اگر بخواید بیمه و ... هم رد میشه؛ ازین حرفا که ما دنبال آدم درست هستیم که هم فنی و هم اخلاقی بتونیم کار کنیم.
زمینه های کاری هم ویژن و هم ان ال پی بود.
اینکه ریموت هست هم منو خوشحال میکنه
ولی اینکه شفاف نیست این قسمتش و اینکه راجب حقوق هیچی نگفت عجیبه
من عیناً متن رو گذاشتم، ایشون از من راهنمایی خواسته؛ اما چندتا چیز دیگه که توی صحبت مشخص شد :
۱- تسک براشون ایمیل نشده؛ یک اکانت تلگرام براشون فرستاده
۲- طرف حتی خودشم معرفی نکرده، فقط راجب یک نفر که اونجا وجود نداشته صحبت کرده (اسم برده و ...)
حالا تحلیل من :
قبلاً گفتم بازم میگم، تسک فرستادن هم حتی کار درستی نیست، مصاحبه کننده در ۲ حالت به شما تسک میده :
۱- سواد نداره شمارو ارزیابی کنه؛ ۹۹٪ مواقع.
۲- شما شدیداً استرس و ... دارید و نمیتونید توانایی خودتون رو نشون بدید ولی مصاحبه کننده حس میکنه توانایی و سوادش رو دارید و بهتون یک شانس میده؛ ۱٪ مواقع.
مورد سوم هم تیمهایی هست که یک بخش پروژهاش رو میده سنیور بزنه، که خداروشکر سنیورها دیگه تسک قبول نمیکنند.
حالا فرض کنیم که این مورد درست؛ چرا برای ارسال تسک ... از ایمیل رسمی شرکت استفاده نشده ؟ ایمیل رسمی با اسم و اطلاعات ارسال کننده با متن و موضوع دقیق که این تسک برای استخدام هست، حتی تیمهای استارتاپی هم یک ایمیل (دامنه رسمی ندارند) ارسال میکنند و بعد با شمارهی شرکت پیامک میدند که تسک مصاحبه شرکت فلان برای شما ارسال گردید.
اینکه طرف خودش رو هم معرفی نکرده، چیز عجیبی نیست ولی کنار باقی موارد خیلی عجیب میشه.
موضوع بعدی، چرا نباید بعد از انجام تسک؛ با نیرو قرارداد بسته بشه ؟ توی قانون ما حتی قرارداد موقت و برای ارزیابی هم داریم که نیازی به پرداخت بیمه و مالیات و ... هم نداره
قرارداد ۳ ماهه هم هست و حتی میشه ۱۵ روز بعد هم کنسل کرد قرارداد رو.
درنهایت من به ایشون گفتم :
نه تسک رو انجام بده، نه سراغ پروژه بره؛ این بسیار بسیار شبیه به اون شرکتها و قراردادهایی هست که افراد توی لینکدین میزنند پولشون رو پرداخت نکرده و ...
همیشه گفتم بازم میگم؛
مجانی واسه هیچکس کار نکنید.
قرارداد رسمی و دقیق ببندید و دقت هم بکنید، که واسه پولتون التماس نکنید.
👍14❤🔥4❤2
#5min_Rust
توی این آموزشها فرض بر این بوده که شما پایتون رو بلد هستید (یا با زبان دیگری کد زدید).
یادم نیست توی صحبتهای قبلی راجب نوع داده
راجب
and:
تا اینجا همه نوع دادههایی که دیدیم
اما نوع دیگری هم داریم به اسم
برای شروع بحث راجب این نوع بهترین گزینه بنظرم همون
https://news.1rj.ru/str/pyHints/64
آرایهها چندتا محدودیت دارند که مهمترین اونها :
۱- تمام عناصر داخلشون باید از یک نوع باشه؛ مثلا همگی
۲- طول آرایه باید از قبل کاملا مشخص باشه.
همین دو مورد برای بهینه بودن آرایهها کفایت میکنه. (بیشتر توضیح نمیدم اگر لازم بودیم میتونید بپرسید که دقیفتر توی پایتون توضیح بدم)
اما برگردیم به
توی این مثال چون من درجا دارم مقدار هم به متغییر (لیبل) میدم نیازی نبود که نوع دادهاش رو مشخص کنم؛ البته که یادمون هست بصورت دیفالت برای اعداد
برگردیم به صحبت راجب
در نهایت اگر قرار نیست آرایه رو در لحظه تعریف کردن مقدار دهی کنید حتما حتما باید نوع دادهای که قرار هست داخلش بریزید و تعداد اون رو براش مشخص کنید.
چندتا نکته :
اندیسها توی rust هم از 0 شروع میشه
مقدار دیفالت دادن توی مثال رو میبینید:
که به کاماپلر میگه یک آرایه از شامل ۵ تا
درنهایت اگر بخوایم یک عنصر از آرایه رو تغییر بدیم؛ حتما باید اون رو
توی این آموزشها فرض بر این بوده که شما پایتون رو بلد هستید (یا با زبان دیگری کد زدید).
یادم نیست توی صحبتهای قبلی راجب نوع داده
char صحبت کردم یا نه؛ این نوع داده فقط ۱ عنصر داره (scalar type) و با ' هم نمایش داده میشه.راجب
boolean هم که صحبتی نیست؛ فقط چندتا نکته and:
&&, or: ||, not: !تا اینجا همه نوع دادههایی که دیدیم
scalar type بودن (شامل یک مقدار میشن) مثلا برای int32 شما فقط یک مقدار میتونی مشخص کنی (نمیتونی بیش از ۱ عدد به یک متغیر از نوع int32 بگی که برات نگهداری کنه در لحظه)اما نوع دیگری هم داریم به اسم
compound type توی پایتون list, tuple, array , ... رو یادتون بیاد که در لحظه میتونند چندین مقدار رو نگهداری کنند.برای شروع بحث راجب این نوع بهترین گزینه بنظرم همون
array هست (بله دوستان توی پایتون list همون array نیست؛ یک ماژول جدایی داریم برای این منظور و این اشتباه مدرسین و کتابها هست که لیست رو آرایه معرفی میکنند)https://news.1rj.ru/str/pyHints/64
آرایهها چندتا محدودیت دارند که مهمترین اونها :
۱- تمام عناصر داخلشون باید از یک نوع باشه؛ مثلا همگی
int32 (دیگه حق ندارید توش int8 بریزید)۲- طول آرایه باید از قبل کاملا مشخص باشه.
همین دو مورد برای بهینه بودن آرایهها کفایت میکنه. (بیشتر توضیح نمیدم اگر لازم بودیم میتونید بپرسید که دقیفتر توی پایتون توضیح بدم)
اما برگردیم به
Rust و ببینیم چطوری باید با array کار کنیم.fn main() {
let numbers: [i8; 5] = [0, 2, 25, 7, 9];
}توی این مثال چون من درجا دارم مقدار هم به متغییر (لیبل) میدم نیازی نبود که نوع دادهاش رو مشخص کنم؛ البته که یادمون هست بصورت دیفالت برای اعداد
int کامپایلر نوع داده i32 رو بر میداره و من نوع داده رو خودم i8 گذاشتم اما مقدار دوم 5 مربوط میشه به تعداد عناصری که این آرایه میتونه داشته باشه.برگردیم به صحبت راجب
stack, heap؛ چون نوع داده و تعدادش رو میدونیم پس آرایه numbers من جاش توی stack هست.در نهایت اگر قرار نیست آرایه رو در لحظه تعریف کردن مقدار دهی کنید حتما حتما باید نوع دادهای که قرار هست داخلش بریزید و تعداد اون رو براش مشخص کنید.
fn main() {
let mut tg_ids: [&str; 5] = [""; 5];
tg_ids[0] = "@pyrust";
println!("The first telegram channel is: {}", tg_ids[0]);
}چندتا نکته :
اندیسها توی rust هم از 0 شروع میشه
مقدار دیفالت دادن توی مثال رو میبینید:
[""; 5]
که به کاماپلر میگه یک آرایه از شامل ۵ تا
"" بسازهدرنهایت اگر بخوایم یک عنصر از آرایه رو تغییر بدیم؛ حتما باید اون رو
mut کنیم ولی تعداد عناصر رو نمیتونیم تغییر بدیم.Telegram
Python Hints
همونطوری که گفتم توی پایتون
list, array
۲ تا موضوع متفاوت از هم هست.
کار با لیست بخاطر خاصیت داینامیک بودن (هم از نظر سایز و حافظه و هم نوع دادهای) راحت تر هست اما همین دو ویژگی توی لیست باعث سرباز زیادی میشه
تصویر بالا مربوط به میزان مصرف حافظه
Array…
list, array
۲ تا موضوع متفاوت از هم هست.
کار با لیست بخاطر خاصیت داینامیک بودن (هم از نظر سایز و حافظه و هم نوع دادهای) راحت تر هست اما همین دو ویژگی توی لیست باعث سرباز زیادی میشه
تصویر بالا مربوط به میزان مصرف حافظه
Array…
👍11❤2
تقریباً
شب قبل داشتم با یکی از دوستان صحبت میکردم که بسیار درگیر یادگیری و درک مطالب شده؛ مطالبی مثل :
و دنبال
شرایط رو برای ایشون توضیح دادم؛ گفتم اینجا هم بگم:
دوستان وضعیت یادگیری من رو با خودتون مقایسه نکنید، چرا ؟
من بیشترین میزان کاری که انجام میدم
باقی موارد خرج این میشه که آیا منطق کد درست هست و ...
برای من یادگیری و درک این مفاهیم اجبار هست؛ چون ممکنه کسی که کدهاش رو میخونم از تمام این موارد استفاده کرده باشه.
اما اگر شما از یک زبان سطح بالا؛ مثلاً پایتون، جاوااسکریپت یا .... اومدید و دارید
پیشنهاد و راهکار:
مباحث مقدماتی رو یاد بگیرید؛ جوری که بتونید کدهای عادی رو بزنید.
بعد سعی کنید روی همون کدها
توی مسیر که دارید بیشتر و بیشتر پروژه میزنید جاهایی پیش میاد که مزیت نوشتن macro, async, .... رو درک میکنید اگر این اتفاق افتاد بعد شروع کنید به درک دقیق اون مبحث.
توجه کنید؛ همهی افرادی که توی این کانال هستند قرار نیست دیتابیس بنویسند یا کرنل لینوکس، خیلی از مباحث عمیق شدن توش برای اون افراد هست.
همچنین اون افراد قرار نیست بهینه کردن تعداد درخواست به وبسرور رو انجام بدند و ....
میخوام بگم؛ اونقدری یاد بگیرید که خطرناک باشید نه تو همه زمینهها بلکه توی کار خودتون.
اجازه بدید زمان و تمرین، خیلی مباحث رو براتون آسونتر کنه.
roadmap یادگیری من روی Rust مشخص هست و اکثراً هم میدونید.شب قبل داشتم با یکی از دوستان صحبت میکردم که بسیار درگیر یادگیری و درک مطالب شده؛ مطالبی مثل :
Error Handling, Traits, Async, ...و دنبال
best practices هرکدوم هست؛ لنظر خودش یادگیری انجام نشده مگر با درک همه این موارد پس پروژهای رو شروع نمیکنه.شرایط رو برای ایشون توضیح دادم؛ گفتم اینجا هم بگم:
دوستان وضعیت یادگیری من رو با خودتون مقایسه نکنید، چرا ؟
من بیشترین میزان کاری که انجام میدم
code review هست؛ چیزی بالغ بر ۸۰٪ وقتم روی این قضیه میره باقی موارد خرج این میشه که آیا منطق کد درست هست و ...
برای من یادگیری و درک این مفاهیم اجبار هست؛ چون ممکنه کسی که کدهاش رو میخونم از تمام این موارد استفاده کرده باشه.
اما اگر شما از یک زبان سطح بالا؛ مثلاً پایتون، جاوااسکریپت یا .... اومدید و دارید
Rust رو یاد میگیرید، اینکه همون اول میخواید همه چیز رو بفهمید و بعد پروژه زدن رو شروع کنید ممکن هست اوضاع رو براتون وخیم کنه.پیشنهاد و راهکار:
مباحث مقدماتی رو یاد بگیرید؛ جوری که بتونید کدهای عادی رو بزنید.
بعد سعی کنید روی همون کدها
best practice ها رو رعایت کنید و کدها رو تمیز کنید.توی مسیر که دارید بیشتر و بیشتر پروژه میزنید جاهایی پیش میاد که مزیت نوشتن macro, async, .... رو درک میکنید اگر این اتفاق افتاد بعد شروع کنید به درک دقیق اون مبحث.
توجه کنید؛ همهی افرادی که توی این کانال هستند قرار نیست دیتابیس بنویسند یا کرنل لینوکس، خیلی از مباحث عمیق شدن توش برای اون افراد هست.
همچنین اون افراد قرار نیست بهینه کردن تعداد درخواست به وبسرور رو انجام بدند و ....
میخوام بگم؛ اونقدری یاد بگیرید که خطرناک باشید نه تو همه زمینهها بلکه توی کار خودتون.
اجازه بدید زمان و تمرین، خیلی مباحث رو براتون آسونتر کنه.
👍24❤9
Forwarded from Python Hints
تعجب کردید چطوری جنگندههای اسرائیلی به آسمان مشهد رسیدند ؟
من نکردم؛ چون آسمان بیصاحاب شد وقتی سپهبد #نادر_جهانبانی رو برای حفظ حریم هوایی به ناحق کشتید.
حتی موقعی که کشتیدش هم لباس خدمت به وطن رو از تنش در نیاورد ♥️💔
من نکردم؛ چون آسمان بیصاحاب شد وقتی سپهبد #نادر_جهانبانی رو برای حفظ حریم هوایی به ناحق کشتید.
حتی موقعی که کشتیدش هم لباس خدمت به وطن رو از تنش در نیاورد ♥️💔
❤48👍2❤🔥1
Forwarded from Python Hints
#ایران
وقتی این روزها رو پشت سر گذاشتیم جون مادرتون چندتا کار رو انجام بدید :
۱- از روسیه فاصله بگیرید؛ به جرم جاسوسی بگیرید هرکی که اسم روسیه رو آورد.
نه سوخو داریم
نه s300-s400
نه حمایت
فقط پول رو خرجش کردیم؛ کشوری که پاره شدیم گفتیم تو تاریخ همیشه نامرد بوده برای ما.
۲- مهاجرین غیرقانونی رو اخراج کنید؛ جرم انگاری سنگین بذارید برای ورودهای غیرقانونی.
با خانواده اخراجشون کنید؛ اینکه فقط مرداشون رو اخراج کنید دوای درد نیست.
۳- تریبون رو از رائفیپورها بگیرید؛ بوالله که اگر اینها جاسوس نباشند دوست نیستند.
خریت اینها مملکت رو به این روز انداخت؛ نذاشتند با دنیا تعامل کنیم.
نذاشتند بخش نظامی تقویت بشه؛ انقدر که با جفنگیات خواستند جلوی بمب و موشک و ... رو بگیرند.
من هنوز هم باور ندارم که اینها انقدر احمق باشند؛ تنها موردی که به ذهنم میرسه جاسوس بودن هست.
نمیدونم چی بگم دیگه ...
به امید روزای روشن برای ایران عزیزم ♥️
وقتی این روزها رو پشت سر گذاشتیم جون مادرتون چندتا کار رو انجام بدید :
۱- از روسیه فاصله بگیرید؛ به جرم جاسوسی بگیرید هرکی که اسم روسیه رو آورد.
نه سوخو داریم
نه s300-s400
نه حمایت
فقط پول رو خرجش کردیم؛ کشوری که پاره شدیم گفتیم تو تاریخ همیشه نامرد بوده برای ما.
۲- مهاجرین غیرقانونی رو اخراج کنید؛ جرم انگاری سنگین بذارید برای ورودهای غیرقانونی.
با خانواده اخراجشون کنید؛ اینکه فقط مرداشون رو اخراج کنید دوای درد نیست.
۳- تریبون رو از رائفیپورها بگیرید؛ بوالله که اگر اینها جاسوس نباشند دوست نیستند.
خریت اینها مملکت رو به این روز انداخت؛ نذاشتند با دنیا تعامل کنیم.
نذاشتند بخش نظامی تقویت بشه؛ انقدر که با جفنگیات خواستند جلوی بمب و موشک و ... رو بگیرند.
من هنوز هم باور ندارم که اینها انقدر احمق باشند؛ تنها موردی که به ذهنم میرسه جاسوس بودن هست.
نمیدونم چی بگم دیگه ...
به امید روزای روشن برای ایران عزیزم ♥️
👍37❤18❤🔥2🔥2
Forwarded from Python Hints
و تمام!!!!
اعلام آتشبس توسط هر دو طرف.
آپدیت :
عجب خر تو خری شد؛
عراقچی؛ از ۴ صبح آتش بس میتونه صورت بگیره.
اسرائیل میزنه تا آخرین ثانیهها
سپاه؛ خب ماهم با چندتا موشک جواب میدیم چون ثانیههای آخر سنگین زده
اسرائیل؛ اینارو رهگیری میکنیم، میگیم به اهداف جنگ رسیدیم و تمام.
خبرگزاریهای آمریکا؛ ونس، ویتکاف، روبیو با مقامات ایران مذاکره مستقیم و غیرمستقیم داشتند.
ترامپ؛ چندتا پست درمورد صلح:
بخصوص، صلح با زور
همه چیز بنظر صلح میاد؛
سپاه، دوباره شلیک ۱ موشک به سمت حیفا.
مثل اینکه آتش بس پذیرفته نشده.
بنظر میاد؛ ترامپ هم پستهاش راجب صلح رو پاک کرده (کندی اینترنت اجازه بررسی به بنده نداد)
اعلام آتشبس توسط هر دو طرف.
آپدیت :
عجب خر تو خری شد؛
عراقچی؛ از ۴ صبح آتش بس میتونه صورت بگیره.
اسرائیل میزنه تا آخرین ثانیهها
سپاه؛ خب ماهم با چندتا موشک جواب میدیم چون ثانیههای آخر سنگین زده
اسرائیل؛ اینارو رهگیری میکنیم، میگیم به اهداف جنگ رسیدیم و تمام.
خبرگزاریهای آمریکا؛ ونس، ویتکاف، روبیو با مقامات ایران مذاکره مستقیم و غیرمستقیم داشتند.
ترامپ؛ چندتا پست درمورد صلح:
بخصوص، صلح با زور
همه چیز بنظر صلح میاد؛
سپاه، دوباره شلیک ۱ موشک به سمت حیفا.
مثل اینکه آتش بس پذیرفته نشده.
بنظر میاد؛ ترامپ هم پستهاش راجب صلح رو پاک کرده (کندی اینترنت اجازه بررسی به بنده نداد)
واقعاً خاورمیانه از فیلم ترکی و فیلم هندی هم غیرقابل پیشبینی تر هست
👍9
#5min_Rust
توی مبحث
اما نوع
توی مبحث مربوط به توابع راجبش دقیقتر صبحت میکنیم؛ نکته بعدی اینکه این مورد هم مثل
یکی از استفادههای خوبی که از
چون توی این مثال از
توی مبحث
compound type نوع بعدی که بهش میرسیم مربوط هست به tuple مثل پایتون اینجا هم tuple میتونه چندین نوع متفاوت داده رو داخل خودش نگهداری کنه (بر خلاف آرایهها که همهی داده ها باید از یک نوع باشند)اما نوع
tuple توی Rust واقعا توسط () مشخص و ایجاد میشه؛ یادآوری کنم اگر یک tuple خالی داشته باشیم مثل: () اصطلاحا توی Rust بهش میگیم unit type و بصورت دیفالت چیزی هست که function هایی که return ندارند برمیگردونه (مثل main) توی مبحث مربوط به توابع راجبش دقیقتر صبحت میکنیم؛ نکته بعدی اینکه این مورد هم مثل
array,vector چیزی به اسم display trait رو نداره و برای پرینت کردنش باید از debug trait استفاده کنید.( توی پستهای بعدی به این مباحث اشاره میکنم؛ لطفا الان درگیرش نشید)یکی از استفادههای خوبی که از
tuple میشه برای نگهداری دیتاهای مربوط به دیتابیس هست؛ نوع داده هر ستون - تعداد ستونها مشخص هست ولی لزوما نوع داده هر ستون یکسان نیست. fn main() {
let dog = ("Rex", 2, "Alex", 100);
// this line will return error as the tuple doesn't implement display trait --> don't use: {}
// println!("{dog}");
// Printing Tuple
// // using the debug macro is easier (also it will send result to stderr)
// dbg!(dog);
// // this is how we use debug trait for print --> use :?
// println!("Dog tuple ==> {dog:?}");
// // this is how we can pretty print the debug trait result --> use :#?
// println!("Dog tuple (pretty printed) ==> {dog:#?}");
// Working with Tuple Data
println!("1) {} has a dog named {}, who is {} years old, and his health score is {}.",
dog.2, dog.0, dog.1, dog.3);
// Tuple Destructuring
let (name, age, owner, health) = dog;
// use number to reposition the data for printing.
println!("2) {2} has a dog named {0}, who is {1} years old, and his health score is {3}.",
name, age, owner, health);
}چون توی این مثال از
dbg! استفاده کردم خیلی سریع و ساده بگم؛ که به توابعی که انتهای اسم اونها از ! استفاده میشه اصطلاحا توی Rust ماکرو گفته میشه؛ و نکته مهمش اینه که بدون در زمان کامپایل با کدهای دیگری جایگزین میشه. (فعلا همین تعریف کفایت میکنه تا وقتی که خودمون macro توسعه بدیم)❤8👍2