<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های یک برنامه‌نویس</title>
        <link>https://virgool.io/feed/@aminevaali</link>
        <description>توسعه دهنده‌ی وب ، دانشجوی مهندسی کامپیوتر، همیشه کنجکاو</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:50:23</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>یک برنامه‌نویس</title>
            <link>https://virgool.io/@aminevaali</link>
        </image>

                    <item>
                <title>تجربه‌ی من از youtube-dl و دانلود ویدیو از یوتیوب در لینوکس</title>
                <link>https://virgool.io/@aminevaali/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%DB%8C-%D9%85%D9%86-%D8%A7%D8%B2-youtube-dl-%D9%88-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%88%DB%8C%D8%AF%DB%8C%D9%88-%D8%A7%D8%B2-%DB%8C%D9%88%D8%AA%DB%8C%D9%88%D8%A8-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-tbec4hj4ehqn</link>
                <description>به عنوان یه کاربر لینوکسی خیلی تعریف youtube-dl رو شنیده بودم. youtube-dl یه برنامه‌ی لینوکسیه که همون‌طور که از اسمش معلومه به ما کمک می‌کنه از یوتیوب(یا جاهای دیگه) ویدیو دانلود کنیم. من چند باری سعی کردم که ازش استفاده کنم امّا هربار به مشکلی بر می‌خوردم و درست کار نمی‌کرد. تا این که امروز شدیدا بهش نیاز پیدا کردم و تصمیم گرفتم هرطور که شده باهاش یه ویدیو از یوتیوب دانلود کنم.نکته‌ی عجیب این بود که من چون با دستور sudo apt install youtube-dl نصبش کرده بودم بهم ارور زیر رو می‌داد.ERROR: YouTube said: Unable to extract video dataپس از جست و جوهای فراوان به این نتیجه رسیدم که باید اول حذفش کنم و به یه طریق دیگه نصبش کنم.برای حذفش کامل برنامه اول ترمینالو باز کردم و دستور زیر رو زدم.sudo apt remove --purge youtube-dlو بعد رفتم از این آدرس زیر یکی از لینک‌هارو کپی کردم تا با دستور wget فایل deb. برنامه‌رو دانلود کنم. توی ترمینال دستورای زیر رو زدم و تماام. عین ساعت کار کرد.cd ~/Downloads
wget http://ftp.us.debian.org/debian/pool/main/y/youtube-dl/youtube-dl_2021.06.06-1_all.deb
sudo apt install ./youtube-dl_2021.06.06-1_all.deb
youtube-dl &lt;video-url&gt; نکته: ممکنه زمانی که شما این متن‌رو می‌خونید لینکی که من توی دستور استفاده کردم دیگه کار نکنه. پس بهتره خودتون برید و از اون آدرسی که بالاتر بهتون گفتم یکی از لینک‌هارو کپی کنید. نکته ۲: دستور youtube-dl ویدیویی که دانلود می‌کنه داخل پوشه‌ی جاری ذخیره می‌کنه. یعنی مسیری که تو ترمینال بازه.پ ن: اگر با دستور sudp apt install youtube-dl برنامه‌رو نصب کردید ممکنه دستور زیر مشکلو حل کنه.sudo youtube-dl --update</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Mon, 22 Nov 2021 18:07:37 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه‌ی من در کار با vim و استفاده از آن در همه‌جا</title>
                <link>https://virgool.io/coderlife/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87%DB%8C-%D9%85%D9%86-%D8%AF%D8%B1-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-vim-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%D9%86-%D8%AF%D8%B1-%D9%87%D9%85%D9%87%D8%AC%D8%A7-qsr1liliassw</link>
                <description>دیدگاه ادیتور vim به ویرایش فایل‌ها بسیار جالب و کاربردیه؛ این که ما موقع ویرایش فایل، ۹۰ درصد مواقع در حال بالا و پایین رفتن و جابه‌جا شدن بین خطوط و ور رفتن با فایل هستیم و ۱۰ درصد مواقع در حال تایپ کردن هستیم. به خاطر همین دیدگاه vim دو حالت command و insert داره. وقتی توی حالت command هستیم چیزی توی فایل تایپ نمی‌کنیم و دکمه‌های روی کیبورد وظایف دیگه‌ای رو به عهده دارن که به ما کمک می‌کنن راحت‌تر با فایلمون ور بریم، بین خط‌ها جابه‌جا بشیم، یه خط‌رو حذف کنیم و ... توی حالت insert هم که می‌تونیم توی فایلمون تایپ می‌کنیم.ادیتور vim یه ادیتور قدیمیه که توی اکثر جاها (لینوکس، مک، ویندوز و ...) قابل استفادس.اگه برنامه‌نویسی می‌کنید vim ‌واقعا می‌تونه سرعت کارتونو بالا ببره و یادگیریش خالی از لطف نیست.من خیلی وقت نیست که با vim آشنا هستم ولی تو همین مدّت کم واقعا عاشقش شدم به خاطر امکانات خیلی زیادی که داره. vim معمولا توی ترمینال و کامندپرامپت استفاده می‌شه ولی این به کار من نمیومد چون برنامه‌نویسی اندروید و نوشتن کدای جاوا بخش اعظم کارای منو تشکیل می‌ده، خب اوّلین فکری که به ذهنم رسید این بود که از افزونه‌های vim استفاده کنم و کدای جاوارو بنویسم... ولی یکم که فکر کردم دیدم واقعا هیچّی نمی‌تونه جای اندروید استودیورو بگیره. یکم دیگه فکر کردم... چی می‌شه اگه به جای این که امکانات اندروید استودیورو به vim اضافه کنم بیام و امکانات vim رو به اندروید استودیو اضافه کنم؟?با یه سرچ ساده متوجّه شدم که یه افزونه به نام IdeaVim هست که به راحتی امکانات vim رو به اندروید استودیو اضافه می‌کنه. چی بهتر از این؟?البته این افزونه برای سایر IDE های شرکت جت‌برینز (intellij idea, pycharm, phpstorm, clion , ...) هم قابل استفادس. احتمالا برای سایر IDE ها هم بتونید افزونه‌ای برای این کار پیدا کنید، از دوست خوبمون گوگل کمک بگیرید?اگرم دوست داشتید توی خود محیط vim کار کنید خبر خوب اینه که vim افزونه‌های فراوونی داره که می‌تونید استفاده کنید، فقط کافیه سرچ کنید.خلاصه که vim عالیه و به شدّت سرعت کارمونو بالا می‌بره، حالا اگه توی IDE محبوبمون‌هم داشته باشیمش که عالی می‌شه.راستی تا یادم نرفته، جادی عزیز یه سری ویدیوی سه قسمتی آموزش vim ضبط کرده که از صفر vim رو یاد می‌ده. اینم لینکش:https://youtu.be/BnfJJtcVFPo</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Sat, 16 May 2020 19:59:43 +0430</pubDate>
            </item>
                    <item>
                <title>مشکل عجیب در sql و راه حل جالب و کلک رشتی برای آن</title>
                <link>https://virgool.io/@aminevaali/%D9%85%D8%B4%DA%A9%D9%84-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D9%86%D8%A7%D9%85-%D8%AA%DB%8C%D8%A8%D9%84-%D8%AF%D8%B1-sqlite-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-pv92iyfd3umu</link>
                <description>سلام چند وقت پیش مشکل عجیبی موقع نام‌گذاری جدول‌های sql برام پیش اومد که خیلی طول کشید دلیلشو بفهمم و بعد با یه کلک جالب مشکلو حل کردم.من دارم یه اپ اندرویدی می‌نویسم که توی اون سنارویی پیش اومد که کاربر یک نوشته(استرینگ) رو توی برنامه وارد می کنه و این نوشته توی جدولی از دیتابیس A داخل یک رکورد ذخیره می‌شه و همچنین توی دیتابیس B یک جدول ایجاد می‌شه که نام اسمش همین رشته‌ایه که کاربر وارد کرده.خب یه عکس زشت (به بزرگی خودتون ببخشید دیگه?) آماده کردم که این سناریو رو نشون می‌ده.این کار بعضی وقتا باعث ایجاد خطا در برنامه می‌شه. امّا چرا؟ دلیلش اینه که ما کنترلی روی ورودی کاربر نداریم و کاربر می‌تونه هر رشته‌ای وارد کنه ولی sql هر اسمی‌رو به عنوان نام جدول قبول نمی‌کنه!-راه اوّل: خب یه راهی که به ذهن می‌رسه اینه که کاربر رو مجبور به وارد کردن ورودی معتبر برای نام جدول بکنیم که تجربه‌ی کاربری خوبی نیست.- راه دوّم: یه راه بهتر که به ذهن می‌رسه اینه که بذاریم کاربر هر چیزی رو که می‌خواد به عنوان ورودی وارد کنه و ما بیایم و اون ورودی رو برای نام جدول معتبرسازی(validate) کنیم.-یه راه سوّمی‌هم هست که جواب اصلی مسئله‌ی ماست (پایین‌تر بعد از راه دوّم توضیحش دادم??)بررسی راه دوّم:نام جدول‌ها در sql باید دارای یک سری شرایط باشه. مثلا نباید داخلش از کاراکتر اسپیس یا * یا ٪ و... استفاده کرد. شما می‌تونید از این لینک شرایط لازم برای نام جدول در sql رو مطالعه کنید.خب من برای این کار تابعی با نام validateTableName نوشتم که یک استرینگ به عنوان ورودی می‌گیره، اون‌ رو برای نام جدول sql معتبرسازی می کنه و برمی‌گردونه. کار این تابع اینه که اگه کاراکتر نامعتبری داخل ورودی باشه یه سری کاراکتر درهم و برهم به جای اون کاراکتر قرار می‌ده. من دیگه وارد جزئیات این تابع نمی‌شم خودتون می‌تونید بخونید.private static String[] specialChars =
        new String[]{&amp;quot &amp;quot, &amp;quot!&amp;quot, &amp;quot\&amp;quot&amp;quot, &amp;quot#&amp;quot, &amp;quot$&amp;quot, &amp;quot%&amp;quot, &amp;quot&amp;&amp;quot, &amp;quot\&#039;&amp;quot, &amp;quot(&amp;quot, &amp;quot)&amp;quot, &amp;quot*&amp;quot,
        &amp;quot+&amp;quot, &amp;quot,&amp;quot, &amp;quot-&amp;quot, &amp;quot.&amp;quot, &amp;quot/&amp;quot, &amp;quot:&amp;quot, &amp;quot&amp;quot, &amp;quot&lt;&amp;quot, &amp;quot=&amp;quot, &amp;quot&gt;&amp;quot, &amp;quot?&amp;quot, &amp;quot@&amp;quot, &amp;quot[&amp;quot, &amp;quot\\&amp;quot, &amp;quot]&amp;quot, &amp;quot^&amp;quot, &amp;quot_&amp;quot, &amp;quot`&amp;quot, &amp;quot{&amp;quot, &amp;quot|&amp;quot, &amp;quot}&amp;quot, &amp;quot~&amp;quot};

public static String validateTableName(String input) {
    input = &amp;quot_&amp;quot+input;
    for (String s :
            specialChars) {
        input = input.replace(s, validateChar(s));
    }

    return input;
}

private static String validateChar(String s) {
    String result;
    switch (s) {
        case &amp;quot &amp;quot:
            result = &amp;quotSpace&amp;quot
            break;
        case &amp;quot!&amp;quot:
            result = &amp;quotExclamation&amp;quot
            break;
        case &amp;quot\&amp;quot&amp;quot:
            result = &amp;quotDouble quote&amp;quot
            break;
        case &amp;quot#&amp;quot:
            result = &amp;quotNumber sign (hash)&amp;quot
            break;
        case &amp;quot$&amp;quot:
            result = &amp;quotDollar sign&amp;quot
            break;
        case &amp;quot%&amp;quot:
            result = &amp;quotPercent&amp;quot
            break;
        case &amp;quot&amp;&amp;quot:
            result = &amp;quotAmpersand&amp;quot
            break;
        case &amp;quot\&#039;&amp;quot:
            result = &amp;quotSingle quote&amp;quot
            break;
        case &amp;quot(&amp;quot:
            result = &amp;quotLeft parenthesis&amp;quot
            break;
        case &amp;quot)&amp;quot:
            result = &amp;quotRight parenthesis&amp;quot
            break;
        case &amp;quot*&amp;quot:
            result = &amp;quotAsterisk&amp;quot
            break;
        case &amp;quot+&amp;quot:
            result = &amp;quotPlus&amp;quot
            break;
        case &amp;quot,&amp;quot:
            result = &amp;quotComma&amp;quot
            break;
        case &amp;quot-&amp;quot:
            result = &amp;quotMinus&amp;quot
            break;
        case &amp;quot.&amp;quot:
            result = &amp;quotFull stop&amp;quot
            break;
        case &amp;quot/&amp;quot:
            result = &amp;quotSlash&amp;quot
            break;
        case &amp;quot:&amp;quot:
            result = &amp;quotColon&amp;quot
            break;
        case &amp;quot&amp;quot:
            result = &amp;quotSemicolon&amp;quot
            break;
        case &amp;quot&lt;&amp;quot:
            result = &amp;quotLess than&amp;quot
            break;
        case &amp;quot=&amp;quot:
            result = &amp;quotEqual sign&amp;quot
            break;
        case &amp;quot&gt;&amp;quot:
            result = &amp;quotGreater than&amp;quot
            break;
        case &amp;quot?&amp;quot:
            result = &amp;quotQuestion mark&amp;quot
            break;
        case &amp;quot@&amp;quot:
            result = &amp;quotAt sign&amp;quot
            break;
        case &amp;quot[&amp;quot:
            result = &amp;quotLeft bracket&amp;quot
            break;
        case &amp;quot\\&amp;quot:
            result = &amp;quotBackslash&amp;quot
            break;
        case &amp;quot]&amp;quot:
            result = &amp;quotRight bracket&amp;quot
            break;
        case &amp;quot^&amp;quot:
            result = &amp;quotCaret&amp;quot
            break;
        case &amp;quot_&amp;quot:
            result = &amp;quotUnderscore&amp;quot
            break;
        case &amp;quot`&amp;quot:
            result = &amp;quotGrave accent (backtick)&amp;quot
            break;
        case &amp;quot{&amp;quot:
            result = &amp;quotLeft brace&amp;quot
            break;
        case &amp;quot|&amp;quot:
            result = &amp;quotVertical bar&amp;quot
            break;
        case &amp;quot}&amp;quot:
            result = &amp;quotRight brace&amp;quot
            break;
        case &amp;quot~&amp;quot:
            result = &amp;quotTilde&amp;quot
            break;
        default:
            return s;

    }

    result = &amp;quotiii&amp;quot + result + &amp;quotabcسلام&amp;quot + &amp;quotjjj&amp;quot
    return result;
}این تابع می‌تونه برای رفع مشکل ایجاد شده به درد بخوره امّا توی این سناریو یه راه بهتر به ذهنم رسید.بررسی راه سوّم:- و امّا اون راه چیه؟ همون طور که توی عکس بالا هم دیدید متنی که کاربر وارد می کنه داخل رکوردی از Database A =&gt; table1 ذخیره می‌شه و سپس یک جدول در دیتابیس B ایجاد می شه که نامش همین ورودی کاربره. خب چه کاریه؟ نام جدولی که توی دیتابیس B ساخته می‌شه رو بر اساس id ای که در Database A =&gt; table1 هست انتخاب می‌کنیم. با این کار، کاربر هر چیزی که بخواد به عنوان ورودی وارد می‌کنه، اون ورودی داخل رکوردی از Database A =&gt; table1 ذخیره می‌شه و ‌id متناظر با این رکورد برای نام جدول ساخته شده در دیتابیس B استفاده می‌شه?.توجّه: نام جدول نمی‌تونه یه عدد باشه در صورتی که ‌id یک عدد هست که برای رفع این مشکل هم یک آندرلاین به اوّل id اضافه کردم?.String tableName = &amp;quot_&amp;quot + id;خیلی ممنون که وقت گذاشتید و این نوشته‌رو خوندید. اگر شما راه بهتری به ذهنتون می‌رسه حتما تو کامنتا بگید.? و نظرم یادتون نره!</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Sat, 20 Jul 2019 20:00:43 +0430</pubDate>
            </item>
                    <item>
                <title>قسمت چهارم JavaFX _ معماری و ساختار</title>
                <link>https://virgool.io/TutorialJavafx/%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-javafx-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%88-%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1-m6ptjekcglvn</link>
                <description>سایر قسمت هارا در اینجا ببینید.توجّه این قسمت تقریباً حالت معرّفی کلّی بخش های مختلف JavaFX را دارد و ممکن است به کلمات یا جملاتی برخورد کنید که باعث گیج شدنتان شود. اصلاً نگران این موضوع نباشید، متن را به دقّت بخوانید و هرجارا که نفهمیدید از آن رد شوید. این قسمت صرفاً برای آشنایی کلّی با معماری برنامه های JavaFX می باشد.ـ JavaFX یک API کامل با مجموعه ای غنی از کلاس ها و اینترفیس ها برای ساخت اپلیکیشن های گرافیکی با گرافیک غنی را فراهم می کند.پکیج های مهمّ این API عبارت اند از _ ـ javafx.animation _ شامل کلاس هایی برای اضافه کردن انیمیشن های مبتنی بر انتقال از قبیل پر کردن(fill)، محو شدن(fade)، چرخش(rotate)، تغییر مقیاس(scale) و جابه جایی(translation) برای nodeهای JavaFX است.نکته: node ها المان های گرافیکی JavaFX هستند.ـjavafx.application _ شامل مجموعه ای از کلاس ها است که چرخه ی زندگی(life cycle) برنامه های JavaFX را بر عهده دارند.ـ javafx.css _ شامل کلاس هایی برای طرّاحی CSSمانندِ اپلیکیشن های گرافیکی JavaFX می باشد.ـ javafx.event _ شامل کلاس ها و  اینترفیس هایی برای ارائه و مدیریت رویداد های JavaFX است.ـ javafx.geometry _ شامل مجموعه ای از کلاس ها برای تعریف کردن اشیاء 2بعدی و عملیات بر روی آن هاست.ـ javafx.stage _ این بسته دارای کلاس های نگه دارنده ی(container) سطح بالای اپلیکیشن های JavaFX است.ـ javafx.scene _ این بسته کلاس ها و اینترفیس هایی را برای پشتیبانی از گرافیک صحنه(Scene Graph) فراهم می کند. علاوه بر این، زیربسته ها یا sub_package هایی از قبیل بوم، نمودار، کنترل ها، افکت، تصویر، ورودی، لایه، مدیا، رنگ، شکل، متن، تبدیل، وب و... را فراهم می کند. اجزای متعدّدی هستند که این API غنی JavaFX، پشتیبانی می کنند. There are several components that support this rich API of JavaFX. تصویر زیر ساختار API جاوا اف ایکس را نشان می دهد. در اینجا می توانید اجزایی که API جاوا اف ایکس پشتیبانی می کنند مشاهده کنید.ساختار ای پی آی های JavaFX و اجزایی که از این APIها پشتیبانی می کنند.گراف صحنه(Scene Graph)در JavaFX ، اپلیکیشن های گرافیکی با استفاده از گراف صحنه کد نویسی شده اند. گراف صحنه نقطه ی شروع ساخت اپلیکیشن است. گراف صحنه(Scene Graph) اِلِمان های اصلی اپلیکیشن های گرافیکی JavaFX را که node نامیده می شوند در خود نگه داری می کند.ـ node یک شیء بصری یا گرافیکی است و می تواند شامل این موارد باشد _ اشیای هندسی (گرافیکی) _ (2بعدی و 3بعدی) از قبیل دایره، مستطیل، چند ضلعی و...کنترل های UI _ از قبیل Button ، CheckBox ، Choice box ، Text Area و...ظروف شامل شونده (Containers) _ (پنجره های لایه ها یا layout panes)مثل Border Pane و Grid pane و Flow Pane و... (نگران نباشید بعداً به طور کامل همه ی این هارا بررسی خواهیم کرد.)عناصر رسانه (Media elements) _ مانند آبجکت های صوتی، ویدیویی و تصویری.به طور کلّی مجموعه ای از node ها یک گراف صحنه(scene graph) را می سازد. همه ی این node ها در یک سلسله مراتب(وراثتی) مرتّب شده اند که در تصویر زیر نشان داده شده است.نمودار وراثتی node هاهر node در گراف صحنه(scene graph) یک والد تک دارد، و node ای که هیچ والدی ندارد به عنوان nodeریشه یا root node شناخته می شود.به طور مشابه node ها یک یا چند فرزند دارند، و node ای که هیچ فرزندی نداشته باشد leaf node نامیده می شود؛ node ای که دارای فرزند باشد branch node نامیده می شود.در یک گراف صحنه(scene graph) فقط یک node می تواند اضافه شود. node ِ گراف صحنه می تواند افکت(Effects)، شفّافیت(Opacity)، تغییر شکل (transform) و Event Handler داشته باشد. (نگران نباشید در ادامه ی آموزش درباره ی همه ی این موارد توضیح داده خواهد شد)ـPrismـprism یک عملکرد گرافیکی سطح بالاست که برای تفسیر گرافیکی در JavaFX استفاده می شود. که می تواند هر دوی گرافیک های دو بعدی و سه بعدی را تفسیر کند.در صورتی که سیستم مورد نظر سخت افزار لازم برای پردازش گرافیکی را پشتیبانی نکند، prism از تفسیر نرم افزاری برای پردازش گرافیکی استفاده می کند.زمانی که از کارت گرافیک یا GPU استفاده شود، گرافیک روان تری ارائه می شود. فقط زمانی که سیستم کارت گرافیک نداشته باشد، prism به صورت پیش فرض از پردازش گرافیکی نرم افزاری استفاده می کند.GWT (Glass Windowing Toolkit)ـGWT سرویس هایی برای مدیریت پنجره ها، تایمرها، سطوح برنامه(Surfaces) و صف رویدادها ارائه می دهد. GWT بسترِ JavaFX را به سیستم عامل بومی سیستم متّصل می کند.وب ویو (WebView)با استفاده از JavaFX شما می توانید محتوای HTML را هم در گراف صحنه ی خود قرار دهید. WebView کامپوننتی(جزئی) است که نمایش این محتوارا بر عهده دارد. وب ویو از تکنولوژی ای به نام Web Kit استفاده می کند که یک مرورگر وب داخلی منبع باز(open source) است.  این جزءِ JavaFX از تکنولوژی های مختلف مربوط به وب پشتیبانی می کند مانند HTML5 و CSS و JavaScript و DOM و SVG.با استفاده از وب ویو شما می توانید _ محتوای HTML را از بخش محلّی(local) یا آدرس URL ، رندر کنید.پشتیبانی از تاریخ و ارائه ی قابلیت برگشت و جلو رفتن در صفحات وب.بارگیری مجدّد محتوا (reload the content)اعمال افکت روی صفحات وب.ویرایش محتوای HTML.اجرای دستورات JavaScript.مدیریت رویدادها.به طور کلّی با استفاده از WebView می توانید محتوای وب را از جاوا کنترل کنید.موتور رسانه یا Media Engineموتور رسانه ی JavaFX مبتنی بر یک موتور() منبع باز است که به عنوان یک استریمر(streamer) شناخته می شود. این موتور رسانه از پخش ویدیو و محتوای صوتی پشتیبانی می کند.موتور رسانه ی JavaFX فایل های صوتی با فرمت های زیر را پشتیبانی می کند _قالب های پشتیبانی شده در موتور رسانه ی JavaFXبسته ی javafx.scene.media ، کلاس ها و اینترفیس هایی را برای ارائه ی قابلیت رسانه در JavaFX فراهم می کند. این در قالب سه جزء ارائه شده است که موارد زیر هستند _ ـMedia Object _ این نشان دهنده ی یک فایل رسانه ای است.ـMedia Player _ برای پخش محتوای رسانه.ـMedia View _ برای نمایش رسانه.در ادامه با این سه بهتر آشنا خواهیم شد. فعلاً اسمشان را در گوشه ی ذهن خود داشته باشید تا بعد.لطفا ? و نظر یادتون نره!همچنین اگر دوست داشتید مرا در تلگرام دنبال کنید.</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Wed, 14 Nov 2018 17:56:42 +0330</pubDate>
            </item>
                    <item>
                <title>قسمت سوّم JavaFX_ آماده سازی محیط(Environment) در JavaFX</title>
                <link>https://virgool.io/TutorialJavafx/%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%D9%88%D9%91%D9%85-javafx-%D8%A2%D9%85%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%D8%AD%DB%8C%D8%B7environment-%D8%AF%D8%B1-javafx-ozhaazhyrae7</link>
                <description>سایر قسمت هارا در اینجا ببینید.از جاوای 8 به بعد، JDK کتابخانه ی JavaFX را در خودش دارد. پس برای اجرای اپلیکیشن های JavaFX، باید جاوای8 یا ورژن بالاتر را روی سیستم خود  نصب کنید.علاوه بر این ، IDEهایی مثل اکلیپس و نت بینز JavaFX را پشتیبانی می کنند.نصب جاوا 8اوّل از همه باید مطمئن شوید که آیا جاوا روی سیستمتان نصب شده یا نه، فقط با باز کردن خط فرمان و تایپ کردن دستور &quot;java&quot; و زدن دکمه ی Enter.اگر جاوا روی سیستم شما نصب نکرده باشد خط فرمان پیامی مشابه عکس زیر نشان می دهد.سپس Java را مطابق مراحل زیر نصب کنید:مرحله 1_ اوّل از همه شما باید JDK را دانلود کنید. شرکت اوراکل کشور مارا تحریم کرده بنابراین با آی پی ایران نمی تونید از سایت اوراکل JDK رو دانلود کنید ، ولی نگران نباشید سایت های زیادی در سطح اینترنت JDK رو برای دانلود قرار دادن.مثلاً می توانید از این سایت JDK مناسب سیستم خودتان را دانلود کنید.نصب JDK بسیار راحت است و مانند نصب نرم افزارهای دیگر در ویندوز هست و با چند کلیک ساده می توانید نصب را انجام دهید.(این قسمتش دیگه به عهده ی خودتون)معرّفی مسیر به ویندوزبعد از نصب JDK، روی &#x27;My Computer&#x27; راست کلیک کنید و روی &#x27;Properties&#x27; کلیک کنید.مانند شکل بالا روی &#x27;Advanced system settings&#x27; کلیک کنید. سپس پنجره ی زیر باز خواهد شد.در اینجا روی تب Advanced کلیک کنید. سپس روی Environment Variables کلیک می کنیم.حالا با پنجره ای مانند شکل زیر مواجه می شوید که دو بخش است.در بخش پایین که System variables نام دارد باید روی گزینه ی path کلیک کنید و سپس روی Edit کلیک کنید.حالا در قسمت Variable value ، در آخر مسیرهایی که به صورت پیش فرض قرار گرفته یک علامت  ;\ قرار دهید و مسیری که JDK را در آن نصب کرده اید به طور کامل وارد نماییدبرای پیدا کردن مسیر نصب JDK مطابق مسیر زیر پیش بروید.اگر نصب جاوا درست انجام شده باشد در پوشه ی Program Files ویندوز باید پوشه ای به عنوان Java وجود داشته باشد. حال وارد پوشه ی زیر شوید:حال وارد پوشه ی bin شوید:حالا مسیریابی تمام شده است و باید این آدراس را کپی کنید.برای این کار مثل عکس زیر عمل کنید.همان طور که در تصویر بالا می بینید اوّل باید با نشانگر موس روی مکانی که با فلش قرمز مشخّص شده یک دفعه کلیک می کنیم. بعد از کلیک کردن آدرس این پوشه نشان داده می شود.حالا این آدرس را کپی کنید و در فیلد Variable value که گفته شد وارد کنید و روی دکمه ی OK کلیک کنید. خب تنظیمات JDK در سیستم عامل ویندوز تمام شد.تنظیم محیط NeatBeans در JavaFXنت بینز 8 (NetBeans8) پشتیبانی داخلی از JavaFX ارائه می دهد. با نصب آن شما می توانید یک برنامه ی JavaFX ایجاد کنید ، بدون هیچ گونه پلاگین یا فایل JAR اضافه. برای راه اندازی محیط NetBeans باید مراحل زیر را دنبال کنید.مرحله 1 _ به  وبسایت نت بینز  مراجعه کنید و روی دکمه ی Download کلیک کنید تا نت بینز دانلود شود.مرحله 2 _ با کلیک روی دکمه ی Download، وارد صفحه ی دانلود نرم افزار NetBeans می شوید که بسته های نرم افزاری نت بینز را برای برنامه های مختلف جاوا اراده می دهد. همان طور که در تصویر زیر نشان داده شده نرم افزار NetBeans را برای JavaSE دانلود کنید.مرحله ی 3 _ با کلیک روی این دکمه یک فایل به نام &quot; netbeans-8.0-windows.exe &quot; در سیستم شما دانلود خواهد شد. برای نصب نرم افزار این فایل را اجرا کنید. با اجرای این فایل، نصب کننده ی NetBeans به نمایش در می آید. که در تصویر زیر نشان داده شده:بعد از کامل شده پیکربندی (configuration) ، صفحه ی خوش آمدگویی یا همان Welcome Page را خواهید دید.مرحله 4 _ روی دکمه ی Next کلیک کنید و فرایند نصب کردن را ادامه دهید.مرحله 5 _ صفحه ی بعدی شامل توافقنامه ی NetBeans IDE می باشد.آن را با دقت بخوانید(اگه حوصلشو داشتید) و با تیک زدن &quot; I accept the terms in the license agreement &quot; توافقنامه را قبول کنید و سپس روی دکمه ی Next کلیک کنید.مرحله 6 _ در این صفحه با قرارداد توافقنامه برای Junit مواجه خواهید شد. با انتخاب گزینه ی &quot; I accept the terms in the license agreement, Install JUnit &quot; آن را قبول کنید و روی Next کلیک کنید.مرحله 7 _ مسیری را که می خواهید NetBeans در آن نصب شود انتخاب کنید.علاوه بر این شما می توانید مسیری را JDK در آن نصب شده است مرور کنید.(به نظر من کاریش نداشته باشید دردسر می شه?).خب مثل همیشه روی Next کلیک کنید.مرحله ی 8 _ به طور مشابه مسیر مقصد را برای Glassfish Server انتخاب کنید. از طریق باکس دوّم می توانید مسیر نصب JDK را دستکاری کنید(این بار برای مرجع Glassfish که بازم من پیشنهاد می کنم ولش کنید?) و روی Next کلیک کنید.مرحله 9 _ اگر می خواهید در صورت وجود آپدیت چدید ، به صورت اتوماتیک برنامه آپدیت شود تیکِ &quot;Check for Updates&quot; را بزنید. سپس روی دکمه ی Install کلیک کنید تا فرایند نصب آغاز شود.مرحله 10 _ در این مرحله نصب NetBeans IDE شروع می شود و ممکن است کمی طول بکشد.مرحله 11 _ بعد از تمام شدن فرایند نصب ، برای پایان نصب روی Finish کلیک کنید.مرحله 12 _ وقتی که NetBeans IDE را راه اندازی کردید، مانند شکل زیر صفحه ی شروع را خواهید دید.مرحله 13 _ مانند شکل زیر در منوی File ، گزینه ی New Project را انتخاب کنید تا صفحه ی ساخت پروژه ی جدید باز شود.مرحله 14 _ در صفحه ی ساخت پروژه ی جدید ، JavaFX را انتخاب کنید و روی Next کلیک کنید. حالا شروع به ساختن یک اپلیکیشن JavaFX می کند.مرحله 15 _ در پنجره ی برنامه ی جدید JavaFX ، نام پروژه و محلّ پروژه را انتخاب کنید و سپس روی Finish کلیک کنید. این یک برنامه ی نمونه با نام داده شده ایجاد می کند.در این مثال یک برنامه با نام javafxsample ایجاد شده است. در داخل این برنامه،  NetBeans یک کلاس جاوا با نام Javafxsample.java خواهد ساخت همان طور که در تصویر زیر نشان داده شده است. این کلاس در نت بینز در پکیج مقابل ساخته خواهد شد: Source Packages → javafxsample مرحله 16 _ روی فایل راست کلیک کنید و گزینه ی Run File را انتخاب کنید تا این کد اجرا شود. همانند تصویر زیر:حالا به طور خودکار یک برنامه ای ایجاد می کند که شامل کدهایی است که یک برنامه ی ساده ی JavaFX ایجاد می کند که شامل یک دکمه با متن Say &#x27;Hello World&#x27; است. هروقت روی این دکمه کلیک کنید، رشته ی Hello World در کنسول نمایش داده خواهد شد.بسیار خب، نحوه ی نصب ابزار ها برای توسعه ی برنامه های JavaFX تمام شد. توجّه: به جای NetBeans می توانید از Eclipse نیز استفاده کنید.(که البته من توصیه نمی کنم)توجّه _ در قسمت های بعدی، بیشتر درباره ی کدها صحبت خواهیم کرد.لطفا ? و نظر یادتون نره! همچنین اگر دوست داشتید مرا در تلگرام دنبال کنید.</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Thu, 01 Nov 2018 19:39:30 +0330</pubDate>
            </item>
                    <item>
                <title>قسمت دوّم JavaFx (دید کلّی)</title>
                <link>https://virgool.io/TutorialJavafx/%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%91%D9%85-javafx-%D8%AF%DB%8C%D8%AF-%DA%A9%D9%84%D9%91%DB%8C-fpetz7repepa</link>
                <description>توجّه: در این قسمت ممکن است با واژه ها یا عباراتی مواجه شوید که باعث گیج شدنتان شود.اصلاً نگران این موضوع نباشید، متن را با دقّت بخوانید و هرکجارا که متوجّه نشدید از آن رد شوید. این قسمت صرفاً برای آشنایی کلّی شما با JavaFX است پس زیاد حسّاس نباشید.برنامه های غنی اینترنتی یا RIA&#x27;s اپلیکیشن های وبی هستندکه امکانات و تجربه ای مشابه با برنامه های دسکتاپ فراهم در اختیار می گذارند. آن ها تجربه ی بصری بهتری در مقایسه با برنامه های وب معمولی برای کاربران فراهم می کنند. این برنامه ها به صورت پلاگین های مرورگر یا توسّط ماشین مجازی ارائه می شوند و برای تبدیل اپلیکیشن های استاتیک سنّتی به برنامه های پیشرفته، روان، متحرّک و جذّاب استفاده می شوند.بر خلاف اپلیکیشن های دسکتاپ سنّتی، RIA ها(Rich Internet Applications) برای اجرا نیازی به داشتن هیچ برنامه ی اضافی ندارند.در عوض بسته به برنامه، شما باید نرم افزارهایی مانند ActiveX ، Java ، Flash را نصب کنید.در یک RIA مدیریت پردازش گرافیکی برنامه در سمت کلاینت(سرویس گیرنده) انجام می شود که دارای یک افزونه است که از گرافیک غنی(Rich Graphics) پشتیبانی می کند. خلاصه این که مدیریت داده ها در RIA ها در سرور و به کارگیری عنصر گرافیکی مرتبط در سمت کلاینت انجام می شود.سه تکنولوژی وجود دارند که برای توسعه ی RIA ها استفاده می شود که عبارت اند از:Adobe FlashMicrosoft  SilverlightJavaFXAdobe Flash(ادوبی فلش)این پلت فرم نرم افزاری توسط شرکت Adobe Systems توسعه یافته است و در ساخت RIAها استفاده می شود. علاوه بر این شما می توانید برنامه های دیگری مانند نمودار، انیمیشن ها، بازی های مرورگر، برنامه های دسکتاپ، بازی و... ایجاد کنید.این پلتفرم رایج ترین پلتفرم برای توسعه و اجرای RIAها با مرورگر دسکتاپ با میزان استفاده ی 96% است. Microsoft Silverlightدرست مانند Adobe Flash ،  مایکروسافت سیلورلایت هم یک فریم ورک کاربردی برای توسعه و اجرای RIA ها است. در ابتدا این فریم ورک برای استریم کردن مدیاها مورد استفاده قرار گرفت. نسخه های فعلی از چندرسانه ای(multimedia) ، گرافیک و انیمیشن به خوبی پشتیبانی می کند.این پلت فرم به ندرت در مرورگر دسکتاپ مورد استفاده قرار می گیرد.JavaFxو امّا JavaFX یک کتابخانه ی جاوا است که شما می توانید از آن برای توسعه ی RIAها استفاده کنید. با استفاده از تکنولوژی جاوا، این اپلیکیشن ها دارای نفوذ 76درصدی در مرورگرها است.سوال: JavaFX چیست؟خب. JavaFX یک کتابخانه ی جاوا است که برای ساخت برنامه های غنی اینترنتی(RIA&#x27;s) به کار می رود. اپلیکیشن هایی که با JavaFx توسعه داده شده اند می توانند روی دستگاه های مختلفی مانند کامپیوتر های رومیزی ، تلفن های همراه ، تلویزیون ها ، تبلت ها و ... اجرا شوند. برای توسعه ی برنامه های رابط کاربری گرافیکی با استفاده از زبان برنامه نویسی جاوا، برنامه نویسان از کتابخانه هایی مانند awt  و  Swing  استفاده می کنند(یا شاید بهتره باشه بگیم استفاده می کردند).بعد از ظهور JavaFx الآن برنامه نویسان جاوا می توانند برنامه های کاربردی گرافیکی موثّرتر و کارآمدتر و باحال تری را  با JavaFx توسعه دهند. نیاز به JavaFX:برای توسعه ی اپلیکیشن های سمت کلاینت با امکانات غنی، برنامه نویسان از کتابخانه های مختلفی برای اضافه کردن امکاناتی مانند مدیا ، کنترل ها، وب، 2D ، 3D و... استفاده می کردند.JavaFX تمام این امکانات را در کتابخانه ای واحد در بردارد.و JavaFX مجموعه ای غنی از APIهای گرافیک(graphic) و رسانه(media) را در اختیار می گذارد و از طریق پردازش گرافیکی سخت افزاری پردازش گرافیکی مدرنی را به ارمغان می آورد.JavaFX همچنین رابط هایی را فراهم می کند که با استفاده از آن توسعه دهندگان(برنامه نویسان) می توانند انیمیشن گرافیکی و کنترل های رابط کاربری را ترکیب کنند. می توان از JavaFX با تکنولوژی های مبتنی بر JVM استفاده کرد.مانند JRuby، Groovy،java و...اگر برنامه نویس JavaFX را انتخاب کند دیگر نیازی به یادگیری تکنولوژی های جدید ندارد، به عنوان دانش قبلی هر یک از تکنولوژی های فوق برای توسعه ی RIAها به اندازه ی کافی خوب هستند.توجّه: درباره ی پاراگراف بالا نگران نشید.صرفاً خواستم متن سایت انگلیسی رو ترجمه کرده باشم.همین که شما جاوا بلد باشید کافیه.گفتم که نگی نگفتی!!!امکانات JavaFX:در زیر چندتا از امکانات مهمّ JavaFX نوشته شده است.نوشته شده در جاوا _ کتابخانه ی JavaFX در جاوا نوشته شده است و برای زبان هایی که در JVM اجرا می شوند در دسترس است که شامل Java و Groovy و JRuby است.همچنین این برنامه های JavaFX مستقل از پلتفرم هستند.ابزار FXML _ خوب است بدانید JavaFX دارای یک زبان شناخته شده به عنوان FXML است که مانند زبان نشانه گذاری HTML است.تنها هدف این زبان ساخت رابط کاربری در برنامه است.سازنده ی صحنه (Scene Builder) _ـ JavaFX یک اپلیکیشن به نام Scene Builder یاسازنده ی صحنه برای شما فراهم می کند.در ادغام این برنامه در IDEهایی مانند اکلیپس(Eclipse) و نت بینز(NetBeans) کاربران می توانند به یک رابط طرّاحی کشیدن و رها کردن دست یابند و با آن برنامه های FXML را توسعه دهند و در واقع از نوشتن کدهای FXML به صورت دستی راحت شوند.قابلیت همکاری با سویینگ(Swing) _ در برنامه های JavaFX شما می توانید محتوای Swing را با استفاده از کلاس Swing Node جاسازی کنید.به طور مشابه شما می توانید برنامه های موجود Swing با ویژگی های JavaFX مانند وب ویوها و مدیاهای گرافیکی غنی را آپدیت کنید.کنترل های درون ساخت UIـ (Built-in UI controls) _کتابخانه JavaFX ، کنترل های UI را تهیه میکند که میتوانیم یک اپلیکیشن فول آپشن رو گسترش بدیم. طرّاحی ظاهر CSS مانند _ـ JavaFX یک امکان طرّاحی ظاهر برنامه،شبیه به CSSرا فراهم می کند. با استفاده از این امکان شما می توانید طرّاحی ظاهر برنامه ی خودرا با یک دانش ساده از CSS ارتقا دهید.ای پی آی(API) بوم نقّاشی و چاپ_ـ JavaFX یک بوم نقّاشی(canvas) را فراهم می کند، یک API با سبک توسعه ی سریع. داخل پکیج  javafx.scene.canvas  مجموعه ای از کلاس ها برای نقّاشی(canvas) وجود دارد که با استفاده از آن ما می توانیم به طور مستقیم در یک قسمت از صحنه ی(scene) جاوا اف ایکس رسم کنیم(نقشی را بکشیم).همچنین JavaFX کلاس هایی را برای اهداف مربوط به پرینت گرفتن در پکیج javafx.print فراهم می کند.مجموعه ی غنی از API ها_ کتابخانه ی JavaFX مجموعه ی غنی ای از APIهارا برای توسعه ی اپلیکیشن های گرافیکی(GUI applications)، گرافیک های دو بعدی(2D) و سه بعدی(3D) و... فراهم می کند.این مجموعه از APIها شامل قابلیت های پلتفرم جاوا نیز می باشد. بنابراین با این API شما می توانید به امکانات جاوا از قبیل Genericها ، Annotationها ، MultiThreading و عبارت های lambda دسترسی داشته باشید.مجموعه ها و کتابخانه های قدیمی جاوا بهبود یافته و مفاهیمی مانند لیست های قابل مشاهده(observable lists) و نقشه ها(maps) در آن گنجانده شده است.با استفاده از این کاربران تغییرات در دیتامدل هارا مشاهده کنند.کتابخانه ی مجتمع گرافیک( Integrated Graphics library )_ـ JavaFX کلاس هایی را برای گرافیک های دوبعدی و سه بعدی فراهم می کند.مراحل کار گرافیکی( Graphics pipeline )_ـ JavaFX از گرافیک مبتنی بر خطوط سخت افزاری گرافیکی که به نام منشور(prism) شناخته می شود پشتیبانی می کند.هنگامی که با کارت گرافیک پشتیبانی شده یا GPU مورد استفاده قرار می گیرد گرافیکی روان را اراده می دهد. در صورتی که سیستم از کارت گرافیک پشتیبانی نکند منشور(prism) از تفسیر نرم افزاری استفاده می کند.تاریخچه ی JavaFXـ JavaFX در ابتدا توسّط چِرس اولیور(Chirs Oliver) توسعه داده شد ، زمانی که او برای شرکتی به نام &quot; See Beyond Technology Corporation &quot; کار می کرد.که بعدها در سال 2005 شرکت &quot;سان مایکروسیستمز&quot; آن را تصاحب کرد.نکات زیر اطّلاعات بیشتری درباره ی این پروژه به ما می دهد _ در ابتدا این پروژه F3 نام داشت که مخفّف Form Follows Functions است.این پروژه با هدف آماده سازی یک رابط غنی تر برای توسعه ی برنامه های گرافیکی توسعه داده شده است.شرکت سان مایکروسیستمز(Sum Microsystems) در سال 2005 شرکتِ &quot; See Beyond company&quot; را خرید و JavaFX را از پروژه ی F3 اقتباس کرد.در سال 2007 JavaFX رسماً در جاوای 1 معرّفی شد ، در یک کنفرانس جهانی وب که هرساله برگزار می شود.در سال 2008 نت بینز(NeatBeans) با JavaFX ادغام شد.در همان سال کیت توسعه ی جاوا برای JavaFX نسخه ی 1.0 منتشر شد.در سال 2009 شرکت اوراکل(Oracle)  ، سان مایکروسیستمز را به دست آورد(خرید) . در همان سال نسخه ی بعدی JavaFX یعنی 1.2 منتشر شد.در سال 2010 ، JavaFX نسخه 1.3 بیرون آمد و در سال 2011، JavaFX نسخه 2.0 منتشر شد.آخرین ورژن ، JavaFX8 ، به عنوان بخشی جدایی ناپذیر در 18 مارس 2014 منتشر شد.لطفا ? و نظر یادتون نره! همچنین اگر دوست داشتید مرا در تلگرام دنبال کنید.</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Fri, 19 Oct 2018 12:23:49 +0330</pubDate>
            </item>
                    <item>
                <title>قسمت اوّل javaFX</title>
                <link>https://virgool.io/TutorialJavafx/%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%91%D9%84-javafx-vfpfhzpxcqhd</link>
                <description>سلام به همه ی علاقه مندان به برنامه نویسی اونم از نوع جاواش!!همان طور که می دانید زبان جاوا در جاهای مختلفی کاربرد دارد،از برنامه نویسی گوشی و دسکتاپ گرفته تا برنامه های تحت وب و... .حال اگر بخواهیم با زبان برنامه نویسی جاوا، اپلیکیشن های گرافیکی بنویسیم می توانیم از کتابخانه های مختلفی استفاده کنیم که یکی از بهترین کتابخانه ها در این زمینه، کتابخانه ی JavaFX است.توجّه: همین ابتدا باید این نکته را بگویم که اگر به دنبال برنامه نویسی اندروید هستید این آموزش به درد شما نمی خورد.درواقع JavaFX یک کتابخانه ی جاوا است که برای ساخت برنامه های دارای رابط گرافیکی(GUI applications) استفاده می شود و برای توسعه ی اپلیکیشن های غنی اینترنتی یا RIA&#x27;s به کار می رود.توجّه: RIA مخفّف عبارت Rich Internet Application به معنی اپلیکیشن های غنی اینترنتی می باشد. یعنی وب اپلیکیشن های گرافیکی که از طریق پلاگین ها(افزونه های) مرورگرها اجرا می شوند.برنامه هایی که با این کتابخانه نوشته شده اند می توانند در سیستم عامل ها و دستگاه های مختلف مثل کامپیوتر های رومیزی، تلفن های همراه، تلویزیون ها، تبلت ها و... اجرا شوند.(درواقع برنامه هایی که با این کتابخانه نوشته می شوند روی هر دستگاهی که JRE روی آن نصب شده باشد اجرا می شوند)در این آموزش، درباره ی همه ی عناصر گرافیکی ضروری JavaFx که شما برای توسعه ی اپلیکیشن های باحال و مفید خود نیاز دارید صحبت خواهیم کرد.مخاطباناین آموزش برای افراد مبتدی ای که می خواهند با JavaFX اپلیکیشن های گرافیکی توسعه دهند آماده شده است.پیش نیازهادر این آموزش، فرض بر این است که شما یک دانش قبلی درباره ی زبان برنامه نویسی جاوا دارید.لطفا ? و نظر یادتون نره! همچنین اگر دوست داشتید مرا در تلگرام دنبال کنید.</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Fri, 19 Oct 2018 12:22:21 +0330</pubDate>
            </item>
                    <item>
                <title>منوی دکمه های شناور در اندروید(Floating action buttons)</title>
                <link>https://virgool.io/android-libraries/floatingactoinmenu-wn4yikcwwfqu</link>
                <description>به نام یگانه برنامه نویس جهان هستیمن خودم به شخصه نیاز به استفاده از Fab Menu ها پیدا کردم و یه سرچ انگلیسی زدم و به جواب رسیدم و با خودم گفتم خوبه که این جواب رو ترجمه کنم تا شاید چند نفر دیگه هم ازش استفاده کنن.لینک سایت انگلیسی زبان این هستش:https://android-arsenal.com/details/1/1684#!descriptionدر این آموزش از یک کتابخانه ی مفید استفاده می کنیم. ابتدا نحوه ی ساخت دکمه های شناور را بررسی می کنیم و سپس قرار دادن این دکمه های شناور در یک منو را بررسی می کنیم.توجّه: برای استفاده از این کتابخانه نسخه ی api گوشی اندرویدی کاربر باید 14 به بالا باشد.همچنین برای دیدن نسخه ی آزمایشی می توانید از شبیه ساز اندروید روی مرورگر استفاده کنید.خیلی خب شروع می کنیم به توضیح این کتابخانه:کتابخانه ی زیر را در build.gradle برنامه ی خود قرار دهید.dependencies { 
    compile &#039;com.github.clans:fab:1.6.4&#039;
}و سپس  com.github.clans.fab.FloatingActionButton  را در لایه ی xml مورد نظر قرار دهید.مانند مثال زیر: &lt;FrameLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:fab=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&gt;

    &lt;ListView
        android:id=&quot;@+id/list&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot; /&gt;

    &lt;com.github.clans.fab.FloatingActionButton
        android:id=&quot;@+id/fab&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_gravity=&quot;bottom|right&quot;
        android:layout_marginBottom=&quot;8dp&quot;
        android:layout_marginRight=&quot;8dp&quot;
        android:src=&quot;@drawable/ic_menu&quot;
        fab:fab_colorNormal=&quot;@color/app_primary&quot;
        fab:fab_colorPressed=&quot;@color/app_primary_pressed&quot;
        fab:fab_colorRipple=&quot;@color/app_ripple&quot;/&gt;

&lt;/FrameLayout&gt;شما می توانید با ویژگی android:src برای دکمه ی شناور خود آیکون قرار دهید. برای این کار از drawableهایی با اندازه ی 24dp استفاده کنید. با Android Assets Studio می توان آیکون هایی با اندازه ی مناسب درست کرد.دکمه ی شناور یا Floating action buttonsدر اینجا همه ی اتریبیوت های xml مربوط به دکمه ی شناور یا همان Floating action button را با مقادیر پیش فرض آن ها نوشته ایم. توجّه: نیازی نیست که همه ی اتریبیوت هارا خودتان بنویسید.فقط مواردی که نیاز به تغییر دارند را بنویسید. &lt;com.github.clans.fab.FloatingActionButton
        android:id=&quot;@+id/fab&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_gravity=&quot;bottom|right&quot;
        android:layout_marginBottom=&quot;8dp&quot;
        android:layout_marginRight=&quot;8dp&quot;
        android:src=&quot;@drawable/your_icon_drawable&quot;
        app:fab_colorNormal=&quot;#DA4336&quot;
        app:fab_colorPressed=&quot;#E75043&quot;
        app:fab_colorRipple=&quot;#99FFFFFF&quot;
        app:fab_showShadow=&quot;true&quot;
        app:fab_shadowColor=&quot;#66000000&quot;
        app:fab_shadowRadius=&quot;4dp&quot;
        app:fab_shadowXOffset=&quot;1dp&quot;
        app:fab_shadowYOffset=&quot;3dp&quot;
        app:fab_size=&quot;normal&quot;
        app:fab_showAnimation=&quot;@anim/fab_scale_up&quot;
        app:fab_hideAnimation=&quot;@anim/fab_scale_down&quot;
        app:fab_label=&quot;&quot;
        app:fab_progress_color=&quot;#FF009688&quot;
        app:fab_progress_backgroundColor=&quot;#4D000000&quot;
        app:fab_progress_indeterminate=&quot;false&quot;
        app:fab_progress_max=&quot;100&quot;
        app:fab_progress=&quot;0&quot;
        app:fab_progress_showBackground=&quot;true&quot;/&gt;همه ی اتریبیوت هایی که در بالا دیدید getter و setter های متناظر دارند. پس شما می توانید با برنامه نویسی هم آن هارا تغییر دهید.منوی دکمه های شناور (Floating action menu)در اینجا تمام اتریبیوت های FloatingActionMenu با مقادیر پیش فرض آن ها نوشته شده است یعنی نیازی نیست شما همه ی آن هارا بنویسید. &lt;com.github.clans.fab.FloatingActionMenu
        android:id=&quot;@+id/menu&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_alignParentBottom=&quot;true&quot;
        android:layout_alignParentRight=&quot;true&quot;
        android:layout_marginRight=&quot;10dp&quot;
        android:layout_marginBottom=&quot;10dp&quot;
        android:layout_marginLeft=&quot;10dp&quot;
        fab:menu_fab_size=&quot;normal&quot;
        fab:menu_showShadow=&quot;true&quot;
        fab:menu_shadowColor=&quot;#66000000&quot;
        fab:menu_shadowRadius=&quot;4dp&quot;
        fab:menu_shadowXOffset=&quot;1dp&quot;
        fab:menu_shadowYOffset=&quot;3dp&quot;
        fab:menu_colorNormal=&quot;#DA4336&quot;
        fab:menu_colorPressed=&quot;#E75043&quot;
        fab:menu_colorRipple=&quot;#99FFFFFF&quot;
        fab:menu_animationDelayPerItem=&quot;50&quot;
        fab:menu_icon=&quot;@drawable/fab_add&quot;
        fab:menu_buttonSpacing=&quot;0dp&quot;
        fab:menu_labels_margin=&quot;0dp&quot;
        fab:menu_labels_showAnimation=&quot;@anim/fab_slide_in_from_right&quot;
        fab:menu_labels_hideAnimation=&quot;@anim/fab_slide_out_to_right&quot;
        fab:menu_labels_paddingTop=&quot;4dp&quot;
        fab:menu_labels_paddingRight=&quot;8dp&quot;
        fab:menu_labels_paddingBottom=&quot;4dp&quot;
        fab:menu_labels_paddingLeft=&quot;8dp&quot;
        fab:menu_labels_padding=&quot;8dp&quot;
        fab:menu_labels_textColor=&quot;#FFFFFF&quot;
        fab:menu_labels_textSize=&quot;14sp&quot;
        fab:menu_labels_cornerRadius=&quot;3dp&quot;
        fab:menu_labels_colorNormal=&quot;#333333&quot;
        fab:menu_labels_colorPressed=&quot;#444444&quot;
        fab:menu_labels_colorRipple=&quot;#66FFFFFF&quot;
        fab:menu_labels_showShadow=&quot;true&quot;
        fab:menu_labels_singleLine=&quot;false&quot;
        fab:menu_labels_ellipsize=&quot;none&quot;
        fab:menu_labels_maxLines=&quot;-1&quot;
        fab:menu_labels_style=&quot;@style/YourCustomLabelsStyle&quot;
        fab:menu_labels_position=&quot;left&quot;
        fab:menu_openDirection=&quot;up&quot;
        fab:menu_backgroundColor=&quot;@android:color/transparent&quot;
        fab:menu_fab_label=&quot;your_label_here&quot;
        fab:menu_fab_show_animation=&quot;@anim/my_show_animation&quot;
        fab:menu_fab_hide_animation=&quot;@anim/my_hide_animation&quot;&gt;

        &lt;com.github.clans.fab.FloatingActionButton
            android:id=&quot;@+id/menu_item&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:src=&quot;@drawable/ic_star&quot;
            fab:fab_size=&quot;mini&quot;
            fab:fab_label=&quot;Menu item 1&quot; /&gt;

    &lt;/com.github.clans.fab.FloatingActionMenu&gt;اگر از یک استایل(style) شخصی سازی شده(customize) برای لیبل ها(labels) استفاده کنید سایر ویژگی ها(attributes) نادیده گرفته خواهند شد.تنظیمات سایه(shadow)ی برچسب ها بستگی به تنظیمات سایه ی دکمه های شناور(Floating action button) دارد.خب این آموزش تموم شد??لطفا ? و نظر یادتون نره!سایر کتابخانه های اندروید را در این ? انتشارات ببینید. همچنین اگر دوست داشتید مرا در تلگرام دنبال کنید.</description>
                <category>یک برنامه‌نویس</category>
                <author>یک برنامه‌نویس</author>
                <pubDate>Thu, 04 Oct 2018 17:48:48 +0330</pubDate>
            </item>
            </channel>
</rss>