Forwarded from Python BackendHub (Mani)
ما یک لایبری داریم تو راست به اسم pyo3 که بهت اجازه میده تو راست کد binding بزنی بدون اینکه بخوای یک عالمه بویلرپلیت بنویسی. اما چطور؟ core پایتون expose شده تحت لایبری C به اسم libpython
لایبری مثل Pyo3 که اجازه میده با راست برای پایتون کد binding بزنی اینطوری کار میکنه که میاد اون لایبری libpython رو wrap میکنه ولی به صورت تایپ سیف و مموری سیف. من الان یکم داکشو خوندم فکر کنم بخوام یک ادد ساده بنویسم این شکلی میشه:
و ظاهرا خوده PyO3 برام فایل stub هم میسازه که مشخص شه اینترفیس پکیجم چطوری شده.
بعد با این لایبری میام کد rustمو کامپایل میکنم. میزنم maturin develop که پکیج رو کامپایل میکنه به فایل so یا dll. و خودش هم میفرسته رو pypi همون فایلو با دستور maturin publish.
بعدش پکیجمو نصب میکنم نویسم
و جوابش میاد میشه ۳. اما تو ران تایم چطوری اجرا میشه؟
فایل .so بهش میگن shared object.
وقتی داری یک چیزی رو کامپایل میکنی دو حالت داره:
۱. یا اینکه بیای static linking انجام بدی. یک executable میدی بیرون که اونو اجرا میکنی درجا اجرا میشه.
۲. یا اینکه بیای dynamic loading انجام بدی. یعنی نمیای executable بدی که قابل اجراست و و همه چیز داخلش هست. به جاش میای باینری کد برنامتو کمپایل میکنی به همراه یک سری symbol و executable نیست دیگه مستقیم.سیمبل میشه function ها و variable هات.و یک برنامه دیگه اونوقت میتونه بیاد با استفاده از اون سیمبل ها, به صورت داینامیک از ماشین کدت استفاده کنه.
حالا چطوری؟ تو سیستم عامل یک چیزی وجود داره به اسم dynamic loader که وظیفش اینه دقیقا همین فایل های .so رو ران کنه. اینم رفرنس لینوکیسش.
در نهایت مفسر پایتون میتونه تو ران تایم کد rust ای که تحت فایل .so داری رو با داینامیک لودر ران کنه. و اون کد so دقیقا توابعی که تو راست نوشتی ماشین کدشو به صورت callable پایتون داره و از اون جایی که libpython هم wrap شده میتونی از api های libpython استفاده کنی. مثل گرفتن GIL و ریلیز کردنش. بقیه extension های C هم همینطوری کار میکنند.
@PyBackendHub
لایبری مثل Pyo3 که اجازه میده با راست برای پایتون کد binding بزنی اینطوری کار میکنه که میاد اون لایبری libpython رو wrap میکنه ولی به صورت تایپ سیف و مموری سیف. من الان یکم داکشو خوندم فکر کنم بخوام یک ادد ساده بنویسم این شکلی میشه:
use pyo3::prelude::*;
#[pyfunction]
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[pymodule]
fn my_module(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(add, m)?)?;
Ok(())
}
و ظاهرا خوده PyO3 برام فایل stub هم میسازه که مشخص شه اینترفیس پکیجم چطوری شده.
def add(a: int, b: int) -> int
بعد با این لایبری میام کد rustمو کامپایل میکنم. میزنم maturin develop که پکیج رو کامپایل میکنه به فایل so یا dll. و خودش هم میفرسته رو pypi همون فایلو با دستور maturin publish.
بعدش پکیجمو نصب میکنم نویسم
from my_module import add
add(1,2)
و جوابش میاد میشه ۳. اما تو ران تایم چطوری اجرا میشه؟
فایل .so بهش میگن shared object.
وقتی داری یک چیزی رو کامپایل میکنی دو حالت داره:
۱. یا اینکه بیای static linking انجام بدی. یک executable میدی بیرون که اونو اجرا میکنی درجا اجرا میشه.
۲. یا اینکه بیای dynamic loading انجام بدی. یعنی نمیای executable بدی که قابل اجراست و و همه چیز داخلش هست. به جاش میای باینری کد برنامتو کمپایل میکنی به همراه یک سری symbol و executable نیست دیگه مستقیم.سیمبل میشه function ها و variable هات.و یک برنامه دیگه اونوقت میتونه بیاد با استفاده از اون سیمبل ها, به صورت داینامیک از ماشین کدت استفاده کنه.
حالا چطوری؟ تو سیستم عامل یک چیزی وجود داره به اسم dynamic loader که وظیفش اینه دقیقا همین فایل های .so رو ران کنه. اینم رفرنس لینوکیسش.
در نهایت مفسر پایتون میتونه تو ران تایم کد rust ای که تحت فایل .so داری رو با داینامیک لودر ران کنه. و اون کد so دقیقا توابعی که تو راست نوشتی ماشین کدشو به صورت callable پایتون داره و از اون جایی که libpython هم wrap شده میتونی از api های libpython استفاده کنی. مثل گرفتن GIL و ریلیز کردنش. بقیه extension های C هم همینطوری کار میکنند.
@PyBackendHub
GitHub
GitHub - PyO3/maturin: Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages - PyO3/maturin
Forwarded from Linuxor ?
اگه دارین برای اکوسیستم اپل یا مایکروسافت برنامه مینویسین بهتره سیستم عامل هم متناظر با همون انتخاب کنید در غیر این صورت لینوکس بهترین گزینه برای برنامه نویسی با اکثر زباناست.
لینوکس بهتون قوی ترین خط فرمان ممکن رو میده، رایگان و متن بازه، اگه برنامه سمت سرور مینویسین خیالتون از بابت خطا های احتمالی روی سرور راحت تره، نصب ابزار ها و کتابخونه ها توی لینوکس راحت تره.
البته به این توجه داشته باشین که کوچ کردن به لینوکس کمی زمان بره و ممکنه اوایل زیادی دستتون برای کار کردن با سیستم عامل باز نباشه ولی شما رو محدود نمیکنه، و برعکس آزادی عمل بیشتری هم حتی بهتون میده.
🐧 @Linuxor
لینوکس بهتون قوی ترین خط فرمان ممکن رو میده، رایگان و متن بازه، اگه برنامه سمت سرور مینویسین خیالتون از بابت خطا های احتمالی روی سرور راحت تره، نصب ابزار ها و کتابخونه ها توی لینوکس راحت تره.
البته به این توجه داشته باشین که کوچ کردن به لینوکس کمی زمان بره و ممکنه اوایل زیادی دستتون برای کار کردن با سیستم عامل باز نباشه ولی شما رو محدود نمیکنه، و برعکس آزادی عمل بیشتری هم حتی بهتون میده.
🐧 @Linuxor
Forwarded from PhiloLearn | فیلولرن
بچه ها اگر از توان سیستمتون یا قدرت اینترنتتون اطمینان ندارید، نرید سراغ fne-tune کردن مدلی
آخرش مثل من دچار سر درد حاد میشید
اول مواد اولیه رو تامین کنید بعد از این کارا بکنید
آخرش مثل من دچار سر درد حاد میشید
اول مواد اولیه رو تامین کنید بعد از این کارا بکنید
Forwarded from Yasha
بچهها اخیرا توی تلگرام یه بازی به نام گوبلین اومده که میشه امتیازات بازی رو به TON تبدیل کرد. توی این ویدیو ۱۰ دقیقهای یکم دربارهاش صحبت کردم و آموزش دادم که چطوری میشه انجامش داد.
https://youtu.be/BBKNgwiiTaQ
@Yasha
https://youtu.be/BBKNgwiiTaQ
@Yasha
Forwarded from Code Module | کد ماژول (𔓙)
Forwarded from Rust for Python developers
سر یک موضوع احمقانه ۱ ساعت وقتم رفت.
توی تصویر میبینید که خط رو شکونده دقیقا باید توی rust همینکارو بکنید وگرنه
چیزی که بدون مشکل هست:
خلاصه که حواستون باشه؛ من حتی توی کدهای دیگران هم دیدم این مورد رو.
توی تصویر میبینید که خط رو شکونده دقیقا باید توی rust همینکارو بکنید وگرنه
query درست نیست و بدتر از اون خطایی هم دریافت نمیکنید.r#"--sql SELECT name FROM users;"
چیزی که بدون مشکل هست:
r#"--sql
SELECT name FROM users;
"
خلاصه که حواستون باشه؛ من حتی توی کدهای دیگران هم دیدم این مورد رو.
Forwarded from Rust for Python developers
#Quick
توی پایتون (باقی زبانها) وقتی کسی بهم میگفت سریعترین راه برای پیشرفت کردن جیه میگفتم یاد بگیر خطاهارو خیلی زود بفهمی.
توی
توی
https://docs.rs/
به راحتی داخلش بچرخی و به راحتی بخونی و درک کنی (چیزی که ندیدم جایی آموزش بده) این موضوع رو توی سنیورهای
ولی برای جونیورها خیلی خیلی سخت هست انگار و اکثرا سمت داکیومنت نمیرن (خیلی دیر این سمتی میروند)
توی پایتون (باقی زبانها) وقتی کسی بهم میگفت سریعترین راه برای پیشرفت کردن جیه میگفتم یاد بگیر خطاهارو خیلی زود بفهمی.
توی
Rust این موضوع صادق نیست چون کامپایلر خیلی دقیق خطارو میکوبه تو صورتت اما یک چیز معادل داریم که توی تجربه این مدت بهش رسیدم.توی
Rust برای پیشرفت سریعتر باید یادبگیری داکیومنت اون crate ایی که داری باهاش کار میکنی رو توی سایت https://docs.rs/
به راحتی داخلش بچرخی و به راحتی بخونی و درک کنی (چیزی که ندیدم جایی آموزش بده) این موضوع رو توی سنیورهای
Rust به خوبی میشه دید سریعا متدهای struct, enum, ... رو پیدا میکنند trait هایی که باید پیادهسازی بشه و نحوه استفاده و ... ولی برای جونیورها خیلی خیلی سخت هست انگار و اکثرا سمت داکیومنت نمیرن (خیلی دیر این سمتی میروند)
Forwarded from Woland's Linux Journal (Woland)
💠کنترل کردن ترمینال💠
مطلبی درباره شروع کار با کدهای انسی و بش برای ساختن برنامههای ترمینالی نوشتم که در سایت بارگذاری شده.
توی این اسکریپت یک Hello World را در ترمینال حرکت میدهیم.
قبلاً هم فرستهای درباره خلاقیت در Hello World نوشته بودم.
چون پرسیده بودین چطور میشه نوشتن چنین کدهایی رو شروع کرد، بسیار سادهاست! اینطور شروع میکنند!
توی این سایت منبعد مطالب زیادی از این دست خواهم گذاشت.
👉🔗 Bash-Notes
#آموزش #بش
#bash
مطلبی درباره شروع کار با کدهای انسی و بش برای ساختن برنامههای ترمینالی نوشتم که در سایت بارگذاری شده.
توی این اسکریپت یک Hello World را در ترمینال حرکت میدهیم.
قبلاً هم فرستهای درباره خلاقیت در Hello World نوشته بودم.
چون پرسیده بودین چطور میشه نوشتن چنین کدهایی رو شروع کرد، بسیار سادهاست! اینطور شروع میکنند!
توی این سایت منبعد مطالب زیادی از این دست خواهم گذاشت.
👉🔗 Bash-Notes
#آموزش #بش
#bash
Forwarded from کدنویس یکروزه (𝕻𝖊𝖉𝖗𝖆𝖒 𝕽𝖆𝖍𝖎𝖒𝖎)
دوبلهی ویدیو با لب خوانی!
با این هوش مصنوعی زبان ۱۸۰ کشور دنیا رو قادریم به هم دوبله کنیم و لبخوانی صحیح رو هم در فیلم جدید داشته باشیم!
تصور کنید یک تولید کنندهی محتوا هستین و تصمیم دارین آموزش های خودتون رو بدون دردسر در کشورهای مختلف دوبله و به فروش برسونین.
نسخهی رایگان اون از هر فیلم ۱ دقیقه و روزی ۳ دقیقه رو تبدیل میکنه. ولی می تونین با ارتقای پولی اکانت تا ۹۰ دقیقه دوبله انجام بدین!
اینجا تونستم از یک پست جالب که قبلاً به فارسی ارسال کرده بودم و کد مرتبط رو هم فرستاده بودم، نسخه های انگلیسی و ترکی هم بسازم!
در بخش کامنت و دیدگاههای همین پست نمونهی خروجی ها رو قرار میدم که کیفیت کار رو بتونین ببینید.
https://www.vidnoz.com/ai-dubbing.html
با این هوش مصنوعی زبان ۱۸۰ کشور دنیا رو قادریم به هم دوبله کنیم و لبخوانی صحیح رو هم در فیلم جدید داشته باشیم!
تصور کنید یک تولید کنندهی محتوا هستین و تصمیم دارین آموزش های خودتون رو بدون دردسر در کشورهای مختلف دوبله و به فروش برسونین.
نسخهی رایگان اون از هر فیلم ۱ دقیقه و روزی ۳ دقیقه رو تبدیل میکنه. ولی می تونین با ارتقای پولی اکانت تا ۹۰ دقیقه دوبله انجام بدین!
اینجا تونستم از یک پست جالب که قبلاً به فارسی ارسال کرده بودم و کد مرتبط رو هم فرستاده بودم، نسخه های انگلیسی و ترکی هم بسازم!
در بخش کامنت و دیدگاههای همین پست نمونهی خروجی ها رو قرار میدم که کیفیت کار رو بتونین ببینید.
https://www.vidnoz.com/ai-dubbing.html
Vidnoz
AI Dubbing: Localize & Dub Video into Any Language Free
Vidnoz AI Dubbing, the best free AI video dubbing tool helps translate and localize videos online for free. Auto dub videos into any language in 1 click now!
Forwarded from Gopher Academy
🔵 عنوان مقاله
Joining Errors in Go
🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی دو رویکرد در زبان برنامهنویسی Go میپردازد: استفاده از چندین %ws و استفاده از دستور errors.Join که در نسخه 1.20 زبان Go معرفی شده است. رویکرد اول، %ws، از دستورهای فرمتبندی متنی برای ایجاد نتیجهای استاندارد و یکپارچه استفاده میکند. این رویکرد به برنامهنویس اجازه میدهد که خروجیها و پیامها را به شکل واضح و دقیق نمایش دهد، خصوصاً در محیطهایی که نیاز به ترکیب و نمایش چندین مقدار متفاوت است. رویکرد دوم، errors.Join، امکان مدیریت و ترکیب چندین خطا را در یک پیغام خطا الحاقی فراهم میکند که بسیار مفید است برای دستهبندی خطاها و واکنشهای مرتبط با آنها. این امکان به برنامهنویس کمک میکند تا خطاهای متعدد را به شکل مؤثری دریابد و رفع کند، و در نهایت به بهبود خوانایی و قابلیت نگهداری کد کمک میکند.
🟣لینک مقاله:
https://golangweekly.com/link/160481/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Joining Errors in Go
🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی دو رویکرد در زبان برنامهنویسی Go میپردازد: استفاده از چندین %ws و استفاده از دستور errors.Join که در نسخه 1.20 زبان Go معرفی شده است. رویکرد اول، %ws، از دستورهای فرمتبندی متنی برای ایجاد نتیجهای استاندارد و یکپارچه استفاده میکند. این رویکرد به برنامهنویس اجازه میدهد که خروجیها و پیامها را به شکل واضح و دقیق نمایش دهد، خصوصاً در محیطهایی که نیاز به ترکیب و نمایش چندین مقدار متفاوت است. رویکرد دوم، errors.Join، امکان مدیریت و ترکیب چندین خطا را در یک پیغام خطا الحاقی فراهم میکند که بسیار مفید است برای دستهبندی خطاها و واکنشهای مرتبط با آنها. این امکان به برنامهنویس کمک میکند تا خطاهای متعدد را به شکل مؤثری دریابد و رفع کند، و در نهایت به بهبود خوانایی و قابلیت نگهداری کد کمک میکند.
🟣لینک مقاله:
https://golangweekly.com/link/160481/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
tpaschalis.me
Joining errors in Go
I recently realized that the stdlib errors package in Go supports joining
multiple errors in addition to the more common %w wrapping.
multiple errors in addition to the more common %w wrapping.
Forwarded from Linuxor ?
اجرا کردن ماشین مجازی رو مرورگر وب
https://dev.to/nadchif/run-a-virtual-machine-in-your-browser-2kjk
🐧 @Linuxor
https://dev.to/nadchif/run-a-virtual-machine-in-your-browser-2kjk
🐧 @Linuxor
Forwarded from Linuxor ?
برای گرفتن سرتیفیکیت HTTPS روی localhost از این روش میتونین استفاده کنین :
https://tailscale.com/kb/1153/enabling-https
🐧 @Linuxor
https://tailscale.com/kb/1153/enabling-https
🐧 @Linuxor
Forwarded from Morteza Bashsiz مرتضی باشسیز (Morteza Bashsiz)
This media is not supported in your browser
VIEW IN TELEGRAM
درود
من از همتون معذرت میخوام که سالهای سال بهتون اشتباه گفتم سیستم عامل لینوکس
گویش درست این سیستم عامل رو باهم یاد بگیریم
#باهندزفریگوشکنید
من از همتون معذرت میخوام که سالهای سال بهتون اشتباه گفتم سیستم عامل لینوکس
گویش درست این سیستم عامل رو باهم یاد بگیریم
#باهندزفریگوشکنید
Forwarded from Morteza Bashsiz مرتضی باشسیز (Morteza Bashsiz)
همه توپوق میزنن
من خودم هزاران بار واژهها رو به اشتباه خوندم و خیلی چیزها رو هنوزم نمیدونم که درستشون چیه
برای همین خوب درکش میکنم
من خودم هزاران بار واژهها رو به اشتباه خوندم و خیلی چیزها رو هنوزم نمیدونم که درستشون چیه
برای همین خوب درکش میکنم
Forwarded from محتوای آزاد سهراب
Forwarded from IRCF | اینترنت آزاد برای همه
Media is too big
VIEW IN TELEGRAM
Forwarded from محتوای آزاد سهراب
Digiato | دیجیاتو
کشور جالبی داریم کلاً.
همه کاراشون بدون اخطار قبلیه، فقط بلدن ببندن.
براشونم مهم نیست که کی چقدر ضرر میکنه کی نمیکنه.
@SohrabContents
همه کاراشون بدون اخطار قبلیه، فقط بلدن ببندن.
براشونم مهم نیست که کی چقدر ضرر میکنه کی نمیکنه.
@SohrabContents
Forwarded from CleverDevs (Mammad)