<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های دامون</title>
        <link>https://virgool.io/feed/@Damun</link>
        <description>برنامه نویس خجالتی، کتابخون حرفه‌ای، نویسنده خودخوانده، گرافیست ناشی و چندتا چیز دیگه :)</description>
        <language>fa</language>
        <pubDate>2026-06-16 19:12:09</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/240845/avatar/Qp6Gck.png?height=120&amp;width=120</url>
            <title>دامون</title>
            <link>https://virgool.io/@Damun</link>
        </image>

                    <item>
                <title>تجربه ساخت ربات در پیامرسان‌های داخلی</title>
                <link>https://virgool.io/@Damun/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AF%D8%B1-%D9%BE%DB%8C%D8%A7%D9%85%D8%B1%D8%B3%D8%A7%D9%86-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AE%D9%84%DB%8C-xu1bj3pu5bes</link>
                <description>چند وقت پیش روی یه پروژه کار میکردم که قرار بود توی اون یه ابزار طراحی کنم برای ارسال پیام پست‌های کانال تلگرام به پیامرسان‌های داخلی! منم فرصتو غنیمت شمردم و گفتم برم یه تست بکنم و تجربمو به عنوان یه نیمچه برنامه‌نویس با بقیه برنامه‌نویسا و سازندگان پیامرسان در میون بزارم.باشد که مفید واقع گردد :)۱- پیامرسان بلهپیامرسان بله اولین چیزی بود که رفتم سراغش ومیشه گفت خیلی هم راحت بود. بله API خودش رو سازگار با API تلگرام طراحی کرده و میشه با همون کتابخونه‌های مربوط به بات تلگرام براش ربات نوشت :)دیگه فکر کنم توضیح خاصی نیاز نیست به جز اینکه یسری مشکلات داره موقع ارسال فایل که توی گیتهابشونم مطرح شده و تا الان متاسفانه جوابی ندادن :(۲- پیامرسان ایتاایتا برای ارسال و دریافت داده‌ها کتابخونه خاصی نداره و با ریکوئست زدن میتونید ازش استفاده کنید. نکته‌ای که نظرمو جلب کرد این بود که برای ارسال عکس یا ویدیو یا ... نیاز نیست نوعش رو مشخص کنید، فقط فایل رو آپلود میکنید و اگه کپشن و چیزای دیگه میخواید به همراهش میفرستید و خودش بقیه کارا رو انجام میده :)۳- پیامرسان سروشپیامرسان سروش یه کتابخونه برای پایتون و PHP داره و کار راه بندازه. (آخرین آپدیتش مربوط به ۳ سال پیشه ?)البته برای ارسال پیام به کانال یه‌سری تغییرات کوچیک لازمه (اضافه کردن major type به دیتای ارسالی) و البته خوب بود این رو توی کتابخونه هم اضافه می‌کردن!۴- پیامرسان آیگپاین پیامرسان برای سریالایز کردن داده‌ها به‌جای Json از پروتوبافر استفاده میکنه و میشه با ریکوئست زدن ازش استفاده کرد. (کتابخونه نداره)مشکل اینه که همه فایل‌های .proto رو برای زبان‌های مختلف دیکد نکردن (مثل Channel Send Message) و من فایل‌های .proto رو که روی گیتهابشون بود برداشتم و با ابزار protoc برای پایتون دیکد رو انجام دادم. مشکلی توی استفاده نداشت ولی برای ارسال پیام به کانال باید room id کانال رو داشته باشید (مشابه chat_id در تلگرام). خب ربات در پی‌وی و گروه میتونه با دریافت یه پیام از یوزرها این آی‌دی رو پیدا کنه ولی توی کانال، پیدا کردنش کار حضرت فیله!این مشکل رو با پشتیبانی هم در میون گزاشتم و این جواب رو دریافت کردم:با تشکر از پشتیبانی خدوم آیگپخب من که نتونستم کاری کنم و بیخیالش شدم. شما اگه تونستید بهم بگید!۵- پیامرسان گپگپ یکم اوضاعش با بقیه فرق میکنه و دو نوع ربات مختلف داره. من خودم بین پیامرسانای داخلی گپ رو بیشتر میپسندم و بیشتر ازش استفاده می‌کنم. ساختن ربات هم توش راحته و فقط امکان ارسال پیام به کانال رو نداره (شایدم داره و من نتونستم)!من خیلی روی این قسمت وقت نزاشتم و در نهایت هم نتونستم کاری که میخواستم رو انجام بدم :(جمع بندیپیامرسان‌های داخلی بعد از فیلترینگ تلگرام خیلی مطرح شدن و فرصت خوبی داشتن که جای تلگرامو بگیرن، ولی هیچوقت به پای تلگرام نرسیدن! البته خود تلگرام هم اون اوایل که توی ایران اومده بود چیز خفنی نبود (نسخه‌های قدیمی تلگرام از ۵ سال پیش تا الان) ولی با آپدیت‌های معروفش هر دفعه همه‌رو سورپرایز می‌کرد.ایده‌هایی مثل استیکر، بات، استیکر متحرک، بات‌های اینلاین، چت صوتی گروه‌ها و ... چیزایی بودن که این پیامرسان رو روز به روز جذاب‌تر میکردن!نکته دیگه‌ی تلگرام این بود که به پلتفرم‌های غیر از اندروید و ios هم توجه می‌کرد، چیزی که توی پیامرسان‌های ایرانی شاهدش نیستیم (داشتن کلاینت ویندوز لزوما دلیل بر توجه به اون پلتفرم نیست)به هر حال امیدواریم که پیامرسان‌های ایرانی روز به روز بهتر بشن تا به جایی برسن که از تلگرام و بقیه پیامرسانا بزنن جلو :)اگه نظری داشتید کامنت کنید، اگه مطلب مفید بود به اشتراک بزارید و دیگه همین دیگه :)مراقب سلامتیتون باشید یا حق ??</description>
                <category>دامون</category>
                <author>دامون</author>
                <pubDate>Wed, 14 Apr 2021 12:01:32 +0430</pubDate>
            </item>
                    <item>
                <title>قسمت اول: سلام WPF، حالت چطوره؟</title>
                <link>https://virgool.io/@Damun/%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D8%B3%D9%84%D8%A7%D9%85-wpf-%D8%AD%D8%A7%D9%84%D8%AA-%DA%86%D8%B7%D9%88%D8%B1%D9%87-ocxab08ysy9i</link>
                <description>سلام. من دامون هستم و دارم یه مجموعه آموزش WPF بنویسم. توی قسمت قبلی درمورد اینکه WPF چیه صحبت کردیم و فهمیدیم که چرا WPF بهتر از ویندوزفرمه! توی این قسمت کمی درمورد زبان XAML توضیح میدم و میریم که اولین پروژه WPF خودمون، یا به اصطلاح «Hello World» رو بنویسیم! پس بزن بریم ... !سلام WPF، حالت چطوره؟زبان XAML چیست؟زبان XAML یک زبان بسیار ساده، و برپایه XML هست که برای مقدار دهی اشیاء در دات‌نت (.NET) استفاده می‌شه. توی WPF همه کارهایی که مربوط به ظاهر برنامه هست رو با XAML انجام می‌دیم!همونطور که گفتم این زبان برپایه XML هست و اگه قبلا با XML یا HTML کار کردین راحت‌تر می‌تونید این زبان رو یاد بگیرید. (البته کلا راحت می‌تونید یاد بگیرید (: )یه سند XAML از چندین عنصر XAML تشکیل شده و هر عنصر XAML هم این شکلیه که باید یه تگ رو باز کنی، اطلاعات توشو بنویسی، بعد ببندیش! اینجوری:&lt;openTag&gt; ... data ... &lt;/closeTag&gt;این وسط ممکنه توی یه عنصر XAML ما بیایم یک یا چندتا عنصر دیگه اضافه کنیم. مثل این مثال:&lt;Tag&gt;
          &lt;Element1&gt; ... &lt;/Element1&gt;
          &lt;Element2&gt; ... &lt;/Element2&gt;
          &lt;Element3&gt; ... &lt;/Element3&gt;
&lt;/Tag&gt;بعضی عناصر هم هستن که نیازی به تگ بسته ندارن! یعنی قرار نیست اطلاعاتی توش بنویسیم. اونها رو اینجوری میبندیم: (قبل از علامت &lt; یه اسلش / میزاریم)&lt;Tag /&gt;درست مثل XML ما میتونیم برای هر عنصر خواصی تعریف کنیم؛ مثل ارتفاع و رنگ و ... که برای اینکار به این صورت عمل می‌کنیم:&lt;Tag att1=&amp;quotvalue1&amp;quot att2=&amp;quotvalue2&amp;quot ... attN=&amp;quotvalueN&amp;quot&gt; ... data ... &lt;/Tag&gt;
* OR
&lt;Tag att1=&amp;quotvalue1&amp;quot att2=&amp;quotvalue2&amp;quot ... attN=&amp;quotvalueN&amp;quot /&gt;بین عناصر XAML ممکنه رابطه پدر فرزندی وجود داشته باشه! که اونم به این صورته:&lt;parent&gt;
        &lt;child1&gt; ... data ... &lt;/child1&gt;
        &lt;child2&gt;
                &lt;grandchild1&gt; ... data ... &lt;/grandchild1&gt;
        &lt;/child2&gt;
&lt;/parent&gt;و در آخر هم بگم که XAML به حروف کوچک و بزرگ حساسه! یعنی به عنوان مثال کلمه Button با button فرق میکنن.تا اینجا خواستم سینتکس کلی XAML رو بهتون نشون بدم. اگه جایی براتون گنگ بود یا متوجه نشدید هیچ اشکالی نداره! وقتی عملی باهاش کار کنید متوجه می‌شید که XAML چه نعمت بزرگیه و چقدر کارمون رو راحت می‌کنه :)حالا که کمی با XAML آشنا شدیم، بریم و اولین برنامه WPF خودمون رو بنویسیم ...یک نکته قبل از نوشتن برنامهبرای نوشتن برنامه شما می‌تونید از هر برنامه نوشتاری استفاده کنید، حتی نوت‌پد! اما معمولا برنامه‌نویس‌ها ترجیح میدن که از یه IDE خوب استفاده کنن که همه کارها از جمله ساختن فایل‌های موردنیاز، دیباگ و کامپایل رو انجام بده. و چه IDE ای بهتر از ویژوال استودیو؟ اگر ایران هستید میتونید نسخه کرک شده Visual Studio رو نصب کنید و حالشو ببرید :) اما اگه خارج از ایران هستید بهتره این اشتباهو نکنید و مثل بچه آدم برید نسخه Community ویژوال استودیو رو از این لینک به‌صورت رایگان و قانونی دانلود کنید و خیالتون رو راحت کنید! (خب اگه خارج از ایران هستید میتونید برنامه کامل رو با چندرغاز دلار بخرید و مثل ما حالشو ببرید D: )یادتون نره موقع نصب ویژوال استودیو بسته ‪.NET desktop development‬ رو حتما نصب کنید (۰_۰)ما فرض می‌کنیم که شما در این مرحله ویژوال استودیو رو نصب کردید و از اضافه‌گویی در این مورد پرهیز می‌کنیم. بریم که اولین برنامه‌مون رو بنویسیم :)ساخت اولین برنامه با WPF : سلام WPFمعمولا اولین و کلاسیک ترین برنامه‌ای که در ابتدای کلاس‌های برنامه نویسی آموزش داده می‌شه «سلام دنیا»ست که اینجا ما با یک شیطنت اون رو به «سلام WPF» تغییر دادیم!وارد ویژوال استودیو بشید و از منوی File گزینه New project رو انتخاب کنید. توی پنجره‌ی باز شده از بخش تمپلیت (سمت چپ) زبان سی‌شارپ (‪C#‬) رو انتخاب کنید و از اونجایی که داریم برای ویندوز برنامه می‌نویسیم گزینه Windows رو انتخاب کنید. با اینکار لیستی از برنامه‌های ویندوزی در سمت راست نمایش داده میشه. مطابق عکس زیر گزینه WPF Application رو انتخاب کنید:ساخت برنامه WPFاسم و آدرس پروژه رو هم هرچی دوست داشتین بنویسین. مثلا من نوشتم HelloWPF.اگه همه کارها رو درست انجام داده باشید باید پنجره MainWindox.xaml براتون باز بشه. مثل این تصویر:پنجره MainWindox.xamlو توی قسمت پایین (کدهای XAML) باید یه همچین کدی رو ببینید:&lt;Window x:Class=&amp;quotWpfApplicationName.MainWindow&amp;quot
    xmlns=&amp;quothttp://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot
    xmlns:x=&amp;quothttp://schemas.microsoft.com/winfx/2006/xaml&amp;quot
    Title=&amp;quotMainWindow&amp;quot Height=&amp;quot350&amp;quot Width=&amp;quot525&amp;quot&gt;
            &lt;Grid&gt;

           &lt;/Grid&gt;
&lt;/Window&gt;این پایه و اساس کدی هست که ویژوال استودیو برای ما نوشته. بعدا بیشتر بررسی‌ش می‌کنیم. شما می‌تونید از منوی Debug یا کلیک روی دکمه سبز بالای صفحه، و یا فشردن کلید F5 از روی کیبورد برنامتون رو اجرا کنید. قاعدتا ما هنوز بخشی به برنامه اضافه نکردیم، پس باید یه پنجره خالی باز بشه. مثل عکس زیر:پنجره خالی اولین برنامه WPFحالا ما می‌خوایم که یه متن رو توی برنامه خودمون بنویسیم. اگه هنوز پنجره خالی برنامه‌تون رو نبستین ببندینش :) حالا در محیط ویژوال استودیو در بخش کدهای XAML یک المان تکست بلاک درون Grid Panel اضافه می‌کنیم. مطابق کد زیر:&lt;Window x:Class=&amp;quotWpfApplication1.MainWindow&amp;quot
 xmlns=&amp;quothttp://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot
 xmlns:x=&amp;quothttp://schemas.microsoft.com/winfx/2006/xaml&amp;quot
 Title=&amp;quotMainWindow&amp;quot Height=&amp;quot350&amp;quot Width=&amp;quot525&amp;quot&gt;
               &lt;Grid&gt;
                     &lt;TextBlock HorizontalAlignment=&amp;quotCenter&amp;quot VerticalAlignment=&amp;quotCenter&amp;quot FontSize=&amp;quot72&amp;quot&gt;
                                Hello WPF!
                     &lt;/TextBlock&gt;
                &lt;/Grid&gt;
&lt;/Window&gt;درواقع ما فقط این کد رو به برنامه اضافه کردیم:&lt;TextBlock HorizontalAlignment=&amp;quotCenter&amp;quot VerticalAlignment=&amp;quotCenter&amp;quot FontSize=&amp;quot72&amp;quot&gt;                                 
            Hello WPF!
&lt;/TextBlock&gt;بزارید یکم این کد رو با هم مرور کنیم. ما یه تگ Text Block رو تعریف کردیم. بعد سه تا خصوصیت هم بهش دادیم. به ترتیب گفتیم که ۱- به صورت عمودی در وسط قرار بگیر ۲- به صورت افقی وسط قرار بگیر ۳- اندازه فونت رو بکن ۷۲بعد مطابق سینتکس زبان XAML ما تگ خودمون رو بستیم و در بین این دو تگ داده (Data) رو وارد کردیم که در اینجا متن داخل Text Block بود! به همین راحتی :)اضافه کردن یک Text Block به برنامهحالا برنامه رو اجرا کنید و از نخستین برنامه WPF خودتون لذت ببرید :)سلام WPFدر پایان، اگه توی هرکدوم از مباحث مشکلی داشتید یا بخشی به نظرتون نامفهوم و یا اشتباه بود لطفا برام کامنت بزارید. (خیلی زود جواب می‌دم!) من دامون هستم و دارم یه مجموعه آموزش WPF بنویسم. اگه از این آموزش خوشتون اومد خوشحال میشم برام کامنت بزارید و بهم بگید :)در ضمن، از این بخش هم می‌تونید به قسمت‌های قبل و بعد دسترسی داشته باشید :)قسمت قبلی: https://virgool.io/@Damun/%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-wpf-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%D8%B2-%D8%A2%D9%86-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-ilvrm6uiqsqj قسمت بعدی:(هنوز ننوشتم!)با نگاهی به وب‌سایت WPF Tutorial</description>
                <category>دامون</category>
                <author>دامون</author>
                <pubDate>Wed, 12 Aug 2020 14:25:29 +0430</pubDate>
            </item>
                    <item>
                <title>تکنولوژی WPF چیست و چرا باید از آن استفاده کنیم؟</title>
                <link>https://virgool.io/@Damun/%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-wpf-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%D8%B2-%D8%A2%D9%86-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-ilvrm6uiqsqj</link>
                <description>اگه شما هم برنامه نویس سی‌شارپ (‪C#‬) هستید، احتمالا اولین بار در محیط کنسول (Console) یا ویندوزفرم (Windows Form) برنامه نوشته‌اید و مبانی این زبان را فرا گرفته‌اید. اما بیشتر شما احتمالا با تکنولوژی WPF که آخرین تکنولوژی مایکروسافت برای طراحی رابط گرافیکی (GUI) است آشنا نیستید!تکنولوژی WPF چیست و چرا باید از آن استفاده کنیم؟سلام. من دامون هستم و تصمیم گرفتم که یه سلسله آموزش WPF رو بنویسم. اول از همه بگم که برای این همچین موضوعی رو انتخاب کردم که خودم موقع یادگیری این تکنولوژی هیچ منبع رایگان فارسی پیدا نکردم. گفتم حالا که تونستم از منابع انگلیسی این تکنولوژی رو یاد بگیرم بد نیست اونچه که آموختم رو با شما به اشتراک بگذارم، امیدوارم که مفید واقع بشه.بخش اول: WPF چیست؟تکنولوژی WPF آخرین تکنولوژی مایکروسافت برای طراحی رابط گرافیکی‌یه. رابط گرافیکی (GUI) هم دقیقا همون ظاهر برنامست که شما می‌بینید. GUI مشخص میکنه که هر برنامه چطور نمایش داده بشه و اگه نباشه شما مجبورید تمام بخش‌های برنامه رو به صورت دستی ترسیم کنید و هی کد بزنید که قطعا کار بسیار زمان‌بری هست و حرفه‌ای ترین برنامه‌نویس‌ها هم به این کار تن نمی‌دن (مگه اینکه شما برنامه‌نویس شرکت آدوبی باشید (: )ما توی ویندوزفرم هم از GUI استفاده می‌کردیم با این تفاوت که اونجا مجبور بودیم از کنترل‌های پیش‌فرض ویندوزی توی برنامه‌هامون استفاده کنیم و اگه می‌خواستیم که مثلا یه دکمه طراحی کنیم که پس‌زمینه‌ش یه عکس باشه و یه هاله نور دورش باشه :/ ، باید می‌رفتیم از شرکتایی که المان‌های خودشون رو تولید می‌کنند استفاده می‌کردیم و پای یه شرکت دیگه تو برنامه‌مون باز می‌شد و کلی هزینه رو دستمون می‌افتاد و ...حالا مایکروسافت در WPF اومده یه امکانی رو فراهم کرده که ما برای هر المانی در برنامه‌مون بیایم و بگیم که بیا اینو این شکلی طراحی کن و اونو رنگ کن و دور فلانی رو خط بکش، ببخشید دور المان رو خط بکش! خب بگذریم. WPF ساختارش بر اساس DirectX هست و همین باعث میشه بتونید بدون اضافه کردن هرچیزی به برنامه و سنگین کردن اون، از جنبه‌های گرافیکی زیادی استفاده کنید که انجام دادن اونها توی ویندوزفرم خیلی سخت یا حتی غیرممکنه! کارهایی مثل ترسیم گرادینت‌ها، رسم اشکال دلخواه، اعمال افکت‌های مختلف، ایجاد انیمیشن‌ها و خیلی چیزای دیگه!تا اینجا فهمیدیم که WPF به ما کمک می‌کنه برنامه‌های زیباتری بسازیم. البته که مزیت‌هاش به همین‌جا محدود نمی‌شه. بیاین ادامه نوشته رو بخونیم ;)بخش دوم: چرا باید از WPF استفاده کنیم؟اینجا یه لیست از برتری‌های WPF رو میارم تا بدونید چرا باید این تکنولوژی رو یاد بگیریم:این تکنولوژی جدیدتر از ویندوزفرمه و با استانداردهای فعلی تطابق بیشتری دارهخود مایکروسافت درحال استفاده از این تکنولوژی در برنامه‌هایی مثل VisualStudio هستانعطاف‌پذیری بیشتری داره و نیازی به خرید کنترل‌ها از شرکت‌های دیگه نداریدزبان XAML باعث راحت‌تر شدن کار طراحی میشه و محیط برنامه‌نویسی از محیط طراحی رابط کاربری جدا میشنمورد آخر که خیلی مهمه: WPF برای رابط کاربری مستقیم به GPU میره و این باعث میشه که CPU آزاد باشه و برنامه کارایی بهتری داشته باشهبنابراین WPF هم ظاهر بهتری به ما میده، هم به‌روزه، هم سریعتر اجرا میشه و خیلی هم های دیگه ...البته WPF یه بدی هم داره و اونم اینه که اگه بخواید کنترل‌های ویندوز رو در اون استفاده کنید، به زمان بیشتری نیاز دارید. البته که الان کسی زیاد از کنترل‌های ویندوزی استفاده نمی‌کنه و اگه به دنبال یه برنامه زیبا و پرسرعت هستید، ارزشش رو داره یکم برای طراحی ظاهر دلخواهتون وقت بگذارید.سخن پایانیاگر که قصد دارید در برنامه‌نویسی سی‌شارپ به یه جایی برسید یا توی شرکت‌های مختلف کار کنید، یاد گرفتن این تکنولوژی براتون ضروریه. یادگیری WPF خیلی آسون و لذت‌بخشه. توی قسمت بعدی درمورد زبان XAML بیشتر توضیح میدم و اولین برنامه WPF خودمون رو خواهیم نوشت :)پ ن: لایک و کامنت فراموش نشه!در ضمن، از این بخش هم می‌تونید به قسمت‌های قبل و بعد دسترسی داشته باشید :)قسمت بعدی: https://virgool.io/@Damun/%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D8%B3%D9%84%D8%A7%D9%85-wpf-%D8%AD%D8%A7%D9%84%D8%AA-%DA%86%D8%B7%D9%88%D8%B1%D9%87-ocxab08ysy9i موفق و پیروز باشیدبا نگاهی به وبسایت WPF Tutorial</description>
                <category>دامون</category>
                <author>دامون</author>
                <pubDate>Wed, 05 Aug 2020 02:16:46 +0430</pubDate>
            </item>
            </channel>
</rss>