<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های یاسین عربی</title>
        <link>https://virgool.io/feed/@yasinarabi</link>
        <description>Attention is all you need</description>
        <language>fa</language>
        <pubDate>2026-06-30 19:18:46</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/17947/avatar/x3QOIn.jpg?height=120&amp;width=120</url>
            <title>یاسین عربی</title>
            <link>https://virgool.io/@yasinarabi</link>
        </image>

                    <item>
                <title>ساخت کتابخانه Python با Rust برای سرعت بیشتر</title>
                <link>https://virgool.io/@yasinarabi/%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-python-%D8%A8%D8%A7-rust-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-ojvjihk7w5ih</link>
                <description>ساخت کتابخانه Python با Rust برای سرعت بیشترمقدمهپایتون امروزه در زمینه های مختلف کاربرد دارد. از ماشین لرنینگ و پردازش تصویر گرفته تا بک اند و ساخت ربات تلگرام. یادگیری پایتون راحت است و به شما این قابلیت را میدهد تا مدل اولیه ایده‌تان را در کمترین زمان لازم پیاده سازی کنید.اما این زبان دوست داشتنی یک مشکل اساسی یعنی سرعت پایین دارد. برای حل این مشکل قصد داریم در این آموزش از زبان Rust کمک بگیریم و نتایج رو با قبل و بعد از استفاده از Rust بررسی کنیم.ساخت کتابخانه پایتونکتابخانه های بزرگ و قدرتمندی مثل numpy, scipy, opencv و ... از زبان‌های C و C++ برای حل مشکل سرعت پایتون استفاده می‌کنند. از آنجایی که زبان Rust قصد دارد خودش را با C و C++ جایگزین کند و حتی راه خودش را به کرنل لینوکس هم باز کرده، می‌توان کتابخانه‌های پایتون را با زبان Rust هم ایجاد کرد. در ضمن Rust مشکلات مدیریت حافظه C یا C++ را تقریبا به طور کامل برطرف کرده است. در ادامه با من همراه باشید.تعریف سناریوبه تابعی نیاز داریم که یک رشته به عنوان ورودی دریافت کند و تعداد کاراکترهای &#x27;a&#x27; موجود در رشته را شمرده و خروجی دهد.پیاده سازی سناریو در Rustابتدا یک پروژه به اسم yasinlib به کمک cargo ایجاد می‌کنیم.cargo new yasinlib
cd yasinlibفایل Cargo.toml را مطابق زیر بازنویسی می‌کنیم.[package]
name = &amp;quotpyext-yasinlib&amp;quot
version = &amp;quot0.1.0&amp;quot
authors = [&amp;quotYasin Arabi &lt;yasinarabi@gmail.com&gt;&amp;quot]
edition = &amp;quot2021&amp;quot

[lib]
name = &amp;quotyasinlib&amp;quot
crate-type = [&amp;quotdylib&amp;quot]

[dependencies.cpython]
version = &amp;quot0.7&amp;quot
features = [&amp;quotextension-module&amp;quot]حال در فایل src/lib.rs تابع مدنظر را پیاده سازی می‌کنیم.use cpython::{Python, PyResult, py_module_initializer, py_fn};

fn count_as(_py: Python, val: &amp;str) -&gt; PyResult&lt;u64&gt; {
    let mut counter = 0u64;

    for c in val.chars() {
        if c == &#039;a&#039; {
            counter += 1;
        }
    }
    Ok(counter)
}

py_module_initializer!(yasinlib, |py, m | {
    m.add(py, &amp;quot__doc__&amp;quot, &amp;quotThis module is implemented in Rust&amp;quot)?;
    m.add(py, &amp;quotcount_as&amp;quot, py_fn!(py, count_as(val: &amp;str)))?;
    Ok(())
});مطابق دستور زیر پروژه را build می‌کنیم.cargo build --releaseاگر با هیچ مشکلی مواجه نشویم باید در مسیر /target/release/ یک فایل به اسم libyasinlib.so داشته باشیمترمینالتست کردن کتابخانهاکنون فایل .so را در مسیر پروژه پایتون کپی می‌کنیم تا بتوانیم در فایل پایتون خود آن را import کنیم.حال کد زیر را در فایل main.py می‌نویسیم.در خط 6 یک رشته شامل یک میلیون کاراکتر تصادفی ایجاد می‌کنیم. تابعی که در خط 8 تا 13 نوشته ایم مشابه تابع کتابخانه Rust می‌باشد.در خط 15 و 16 به ترتیب با استفاده از تابع timeit زمان 200 بار اجرای هر کدام از توابعی که در Rust و پایتون نوشتیم را اندازه گیری می‌کنیم و در خطوط 18 تا 20 نتایج را چاپ می‌کنیم.نتایجهمانطور که می‌بینید تابعی که در کتابخانه yasinlib وجود دارد بیش از 32 برابر سریعتر از پایتون عمل می‌کند.</description>
                <category>یاسین عربی</category>
                <author>یاسین عربی</author>
                <pubDate>Tue, 29 Nov 2022 02:06:49 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت ربات تلگرام پروفایل ساز با پایتون</title>
                <link>https://virgool.io/@yasinarabi/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85-%D9%BE%D8%B1%D9%88%D9%81%D8%A7%DB%8C%D9%84-%D8%B3%D8%A7%D8%B2-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-tlsvfrtr05p0</link>
                <description>ربات تلگرام پروفایل سازتا جایی که یادمه اولین بار سال 1396 ربات های پروفایل ساز مطرح شدند. در بحبوحه انتخابات 96 و بعد از اون سال هم بعضی از کمپین های غیرسیاسی به ربات های پروفایل ساز رو آوردند.در این آموزش قراره یادبگیریم چجوری صفر تا صد یک ربات پروفایل ساز رو خودمون بالا بیاریم. برای این آموزش باید آشنایی ابتدایی با لینوکس، MySQL و فتوشاپ(برای ساخت کاور پروفایل) داشته باشید. یا میتونید از یک برنامه نویس و یک طراح کمک بگیرید.قدم اول - طراحی کاورابتدا وارد فتوشاپ بشید و یک فایل جدید با سایز 640 در 640 پیکسل ایجاد کنید.بعد از طراحی فایل را با فرمت png و به اسم foreground.png ذخیره کنید.قدم دوم - ساخت ربات در تلگرامدر تلگرام خود وارد ربات @BotFather شوید ابتدا دستور /newbot را وارد کنید و مراحل خواسته شده را طی کنید تا تلگرام، توکن ربات رو در اختیارتون قرار بده. در تصویر زیر توکن ربات با کادر زرد رنگ مشخص شده است.قدم سوم - کدبرای دانلود سورس کد، به ریپوزیتوری Github پروژه مراجعه کنید. همانطور که در توضیحات ریپو میبینید. تمام مراحل پیاده سازی پروژه مرحله به مرحله شرح داده شده. قراره در ادامه همین مراحل رو با توضیحات بیشتر و زبان فارسی توضیح بدهم.توجه داشته باشید که باید عکس طراحی شده در مرحله اول رو به جای عکس foreground.png و دقیقا با همین نام قرار دهید.قدم چهارم - پایگاه دادهکد ما با پایگاه داده MySQL کار میکنه، ابتدا باید یک دیتابیس و یوزر جدید درست کنیم برای اینکار کوئری زیر رو در MySQL اجرا می کنیم.CREATE DATABASE profilebot;
CREATE USER &#039;profilebot&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;PASSWORD&#039;;
GRANT ALL PRIVILEGES ON profilebot.* TO &#039;profilebot&#039;@&#039;localhost&#039;;
FLUSH PRIVILEGES;در ضمن حتما توجه داشته باشید که باید عبارت PASSWORD در خط دوم رو با یک رمزعبور قوی که شامل حروف بزرگ، کوچک، اعداد و علائم میشه جایگزین کنیم.قدم پنجم - اصلاح فایل config.iniفایل config.ini را باز کنید. در قسمت telegram مقدار token را برابر با توکنی که در مرحله دوم از تلگرام گرفتیم قرار دهید. همچنین در قسمت mysql مقدار pass را با عبارتی که در مرحله چهارم به جای PASSWORD وارد کردید قرار دهید.قدم ششم - آماده سازی Virtual Environmentابتدا محیط مجازی (Virtual Environment) خود را ایجاد کنید.$ virtualenv .venv
$ source .venv/bin/activateحالا باید کتابخونه های مورد نیاز رو نصب کنیم.$ pip install -r requirements.txtقدم ششم - اجرای رباتفایل bot.service را باز کنید، در این فایل باید محلی که کد پروژه رو قرار دادید رو با /path/to/file هایی که میبینید عوض کنید. حالا کافیه دستورات زیر رو اجرا کنید.cp bot.service /usr/lib/systemd/system/profile-bot.servic
systemctl daemon-reload
service profile-bot start
service profile-bot enableربات باید با موفقیت شروع به کار کردن کنه. با دادن ستاره به ریپوزیتوری گیت هاب این پروژه میتونید از من حمایت کنید.</description>
                <category>یاسین عربی</category>
                <author>یاسین عربی</author>
                <pubDate>Mon, 28 Nov 2022 12:14:34 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت ربات تلگرام دانلود از یوتیوب با پایتون</title>
                <link>https://virgool.io/@yasinarabi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%A7%D8%B2-%DB%8C%D9%88%D8%AA%DB%8C%D9%88%D8%A8-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-msvnkgnb0kj7</link>
                <description>آموزش ساخت ربات تلگرام دانلود از یوتیوب با پایتونساخت یک ربات تلگرام میتونه یک تمرین خوب واسه دست به کد شدن افرادی باشه که تازه شروع به برنامه نویسی کرده اند. در این آموزش قراره از زبان پایتون استفاده کنیم و انتظار میره که خواننده با زبان پایتون آشنا باشد. همچنین بهتره که آشنایی سطحی ای با سیستم عامل گنو/لینوکس داشته باشید.مرحله اول - ساخت ربات در تلگرامدر تلگرام خود وارد ربات @BotFather شوید ابتدا دستور /newbot را وارد کنید و مراحل خواسته شده را طی کنید تا تلگرام، توکن ربات رو در اختیارتون قرار بده. در تصویر زیر توکن ربات با کادر زرد رنگ مشخص شده است.مراحل ساخت ربات جدید در تلگراممرحله دوم - آماده سازی محیط برنامه نویسیابتدا محیط مجازی (Virtual Environment) خود را ایجاد کنید.$ virtualenv .venv
$ source .venv/bin/activateحالا باید کتابخونه های مورد نیاز رو نصب کنیم.$ pip install python-telegram-bot
$ pip install pytube3مرحله سوم - کدکد این آموزش رو میتونید از اینجا دانلود کنید و فایل main.py را باز کنید. در این مرحله خط به خط  کد را توضیح میدهیم. برای درک بهتر مفاهیم میتونید در تصویر زیر کد رو به صورت کامل مشاهده کنید.کد برنامهابتدا کتابخانه های مورد نیاز را import میکنیم.( خطوط 1 تا 6)# Import libraries
from telegram import Update
from telegram.ext import Updater, CallbackContext, CommandHandler, MessageHandler, Filters
from pytube import YouTubeimport os, reدر خطوط 7 تا 9 متغیر DOWNLOAD_LOCATION را تعریف میکنیم. این متغیر محل ذخیره سازی ویدیوهایی که دانلود میکنیم را مشخص میکند.# Base variables
DOWNLOAD_LOCATION = &amp;quot./temp/&amp;quotدر خطوط 10 تا 14 تابع start را تعریف میکنیم. این تابع قراره موقعی که کاربر دکمه start را میزنه فراخوانی بشه و یک پیام خوش آمدگویی به کاربر ارسال کنه.# Send welcome message to new users
def start(update: Update, context: CallbackContext) -&gt; None: 
    update.message.reply_text(&#039;Welcome to my youtube downloader bot.&#039;)در خطوط 15 تا 36 تابع download را تعریف میکنیم. وقتی که کاربر یه متن را برای ما ارسال میکنه این تابع اجرا میشه. در خطوط 19 تا 21 چک میکنیم که کاربر برای ربات یک لینک یوتیوب فرستاده یا نه؟ اگر جواب مثبت باشه خطوط 23 تا 32 و در غیر اینصورت خط 34 اجرا میشه.خطوط 23 تا 32 شامل سه قسمت میشه. اول در خطوط 23 تا 26 ویدیو را از یوتیوب دانلود، سپس در خطوط 27 تا 30 ویدیو را به کاربر ارسال، و نهایتا در خطوط 31 و 32 ویدیو را از روی حافظه خودمون پاک میکنیم تا در دراز مدت فضای سرورمون پر نشه.خط 34 هم یک پیغام به کاربر ارسال میکنه که میگه لینک وارد شده توسط شما معتبر نیست.# Download video from youtube and send to user
def download(update: Update, context: CallbackContext) -&gt; None:
    user_id = update.message.from_user[&#039;id&#039;]
    # Check if user message is a valid youtube video link
    link = update.message.text
    pattern = r&amp;quothttp(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&amp;(amp;)?‌​[\w\?‌​=]*)?&amp;quot
    result = re.match(pattern, link)
    if result:
        # Download video from youtube
        youtube = YouTube(link)
        youtube_stream = youtube.streams.get_highest_resolution()
        youtube_stream.download(DOWNLOAD_LOCATION)
        # Send video to user
        file_name = youtube.streams.get_highest_resolution().default_filename
        file_dir = f&amp;quot{DOWNLOAD_LOCATION}{file_name}&amp;quot
        context.bot.send_video(chat_id=user_id, video=open(file_dir, &#039;rb&#039;), supports_streaming=True)
        # Delete video from disk after sending to user
        os.remove(file_dir)
    else:
        update.message.reply_text(&#039;Your link is not valid.&#039;)خطوط 37 تا 46 خطوط نهایی است. توجه داشته باشید که توکن ربات ( که در مرحله اول به دست آوردیم) را در خط 38 جایگزین عبارت TOKEN کنید.مرحله چهارم - اجرای کدبرای اجرای کد کافیست فایل main.py را با پایتون اجرا کنید.$ python main.pyهمانطور که در تصویر زیر مشاهده میکنید. ربات با موفقیت اجرا میشود.تست برنامهامیدوارم این آموزش براتون مفید بوده باشه. میتونید با لایک کردن این نوشته یا ریپوزیتوری github از من حمایت کنید.</description>
                <category>یاسین عربی</category>
                <author>یاسین عربی</author>
                <pubDate>Sat, 09 Jul 2022 17:39:24 +0430</pubDate>
            </item>
            </channel>
</rss>