<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علیرضا احمدی</title>
        <link>https://virgool.io/feed/@alirezaahmadi</link>
        <description>مدیر تولید محتوای وبسایت آموزشگام</description>
        <language>fa</language>
        <pubDate>2026-06-07 08:19:53</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/38640/avatar/R5GkOt.png?height=120&amp;width=120</url>
            <title>علیرضا احمدی</title>
            <link>https://virgool.io/@alirezaahmadi</link>
        </image>

                    <item>
                <title>شیوه حذف لیست Recent file در فتوشاپ</title>
                <link>https://virgool.io/@alirezaahmadi/%D8%B4%DB%8C%D9%88%D9%87-%D8%AD%D8%B0%D9%81-%D9%84%DB%8C%D8%B3%D8%AA-recent-file-%D8%AF%D8%B1-%D9%81%D8%AA%D9%88%D8%B4%D8%A7%D9%BE-a7ittezt0dab</link>
                <description>به نام خداسلام دوستای خوبم، حال دلتون چطوره ؟ همیشه یکی از معذل های من در استفاده از نرم افزار فتوشاپ، نمایش پروژه ها در بخش Recent file بوده. مثلا من دیروز داشتم روی عکس شخصی کار میکردم که تمایل ندارم خانواده اونو ببینن اما امروز که فتوشاپ رو باز کردم متاسفانه عکس اون شخص توی بخش Recent file بود و همه اعضای خانواده هم دیدنش.این قضیه زیاد برام جالب نبود و به فکر حذف لیست Recent file خودم افتادم. در ابتدا شروع به کلیک راست یا استفاده از دکمه delete صفحه کلید کردم که متاسفانه مثمر ثمر واقع نشد و نتونستم این لیست رو خالی کنم. سرچ در گوگل هم این تصور رو به من داد که برای این کار روشی وجود نداره و این فایل ها باید نمایش داده بشن. منتهی امروز که در نرم افزار فتوشاپ داشتم گزینه های مختلف رو برای ضبط آموزش گرافیک برای برنامه نویسان بررسی میکردم، ناگهان به گزینه ای عجیب برخورد کردم و سرانجام فهمیدم که چجوری میشه این بخش رو حذف کرد. پس بریم و راهکار رو در ادامه ببینیم :برای حذف این بخش بر روی تب file کلیک کرده و زیر گزینه open recent رو انتخاب کنید. حالا کافیه آخرین گزینه در این لیست یعنی clear recent file list رو انتخاب کنید تا تمامی عکس ها و پروژه هایی که در بخش Recent file شما قراره گرفته به طور کامل از اون بخش حذف بشن و دیگه نمایش داده نشن. نکته اول : با این کار هرگز فایل اصلی پروژه شما حذف نمیشه و فقط در بخش Recent file نمایش داده نخواهد شد.نکته دوم : فایل های جاری در بخش Recent file حذف میشن اما اگر دوباره عکسی رو در فتوشاپ باز کنید، باز اون عکس به بخش Recent file منتقل خواهد شد.خوب امیدوارم همواره حال دلتون خوب باشه.به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Tue, 18 May 2021 01:48:14 +0430</pubDate>
            </item>
                    <item>
                <title>مشکل عدم شناسایی id در اندروید استودیو</title>
                <link>https://virgool.io/@alirezaahmadi/%D9%85%D8%B4%DA%A9%D9%84-%D8%B9%D8%AF%D9%85-%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C-id-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D9%88%D8%AF%DB%8C%D9%88-rcqqmdoftwos</link>
                <description>به نام خداسلام دوستای خوبم؛ حال دلتون چطوره؟خوب به تازگی مشکلی تحت عنوان عدم شناسایی id در اندروید استودیو به وجود اومده که ممکنه برای خیلی از کاربران سردر گم کننده باشه. در این مقاله قصد داریم این مشکل جدید رو رفع کنیم؛ اما مهمتر از رفع این مشکل، دلیل ایجاد این مشکل و علت به وجود اومدن اون هست که در ادامه بررسی میکنیم.رفع مشکل عدم شناسایی id در اندروید استودیو : این مشکل از جایی به وجود اومد که پلاگین یا افزونه Kotlin Android Extensions از حالت پیشفرض اندروید استودیو خارج شد. حالا دیگه نمیتونیم id مثلا textView خودمون رو به راحتی در اکتیویتی شناسایی کنیم. اگر بخوایم به شیوه قبلی این کار رو انجام بدیم، باید حتما خط کد زیر رو به فایل build.gradle مربوط به ماژول app خودمون اضافه کنیم :با افزودن خط کد بالا به اندروید استودیو و سینک کردن گردل، دوباره این پلاگین به اندروید استودیو اضافه شده و میتونیم به راحتی id های خودمون رو در اکتیویتی شناسایی کنیم و ازشون استفاده کنیم. ( لینک ویدیوی آموزشی افزودن این پلاگین به اندروید استودیو )  منتها سوال اساسی اینه که چرا گوگل این پلاگین رو از حالت پیشفرض خارج کرد ؟ پلاگین Kotlin Android Extensions منسوخ شده :علت خارج شدن پلاگین Kotlin Android Extensions از حالت پیشفرض، منسوخ شدن این پلاگین هستش. یعنی دیگه گوگل و جت برینز از این کتابخونه پشتیبانی نمیکنن. راه حل چیه؟ استفاده از ابزاری که گوگل و جت برینز اون رو جایگزین Kotlin Android Extensions اعلام کردند. این ابزار چیزی نیست جز کتابخونه قدرتمند View Binding که اگر اطلاعات بیشتری در رابطه با View Binding و دلایل منسوخ شدن Kotlin Android Extensions نیاز دارید، میتوانید از لینک مرجع این مقاله که در ادامه براتون قرار میدم، استفاده کنید :لینک مقاله : https://amozeshgam.ir/articles/kotlin-android-extensions</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Sat, 13 Mar 2021 21:55:09 +0330</pubDate>
            </item>
                    <item>
                <title>اهمیت استفاده از محافظ برق برای کامپیوتر</title>
                <link>https://virgool.io/Amozeshgam/%D8%A7%D9%87%D9%85%DB%8C%D8%AA-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%85%D8%AD%D8%A7%D9%81%D8%B8-%D8%A8%D8%B1%D9%82-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-j5xyuu4hos9j</link>
                <description>به نام خداسلام دوستای خوبم؛ حال دلتون چطوره ؟خوب سوال اینجاست که اهمیت استفاده از محافظ برق برای کامپیوتر از چه جهت هست و آیا واقعا نیازه که ما برای کامپیوتر خودمون یه محافظ خوب بگیریم ؟نوسانات برق شهری :خوب بر کسی پوشیده نیست که اختلالات در هر زمینه ای وجود دارد. حتی در زمینه برق رسانی. نوسانات برق شهری بسیار زیاد است و هر نوسان یعنی یک خطر جدی برای پاور کامپیوتر. خیلی از دوستان این نظر به ذهنشون میرسه که پاور سیستم ما خیلی قوی و استاندارد هست و در برابر نوسانات هم میتونه از خودش دفاع کنه. حتی دارای استاندارد های زیر هست :Over Voltage Protection - OVPUnder Voltage Protection - UVPOver Power Protection - OPPOver Temperature Protection - OTPShort Circuit Protection - SCPاستاندارد های پاور کامپیوتر :خوب اینجا باید دقت کنید که استاندارد های نامبرده شده جهت محافظت از قطعات سیستم در برابر نوسانات خود پاور هست. یعنی پاور در برابر برق شهری کاملا بی دفاع بوده و هیچ حسابی نمیشه روش باز کرد. این حرف رو کسی داره بهتون میگه که خودش کامپیوترش به علت نبود محافظ، آتیش گرفته.خطر برای کامپیوتر خاموش هم وجود داره ؟بله دوستان. کامپیوتر آتیش گرفته در حالت خاموش قرار داشته. اما با قطع کردن پاور با استفاده از دکمه ای که روی پاور وجود داره، میتونید از نرسیدن برق به پاور و سیستم مطمئن بشید. پس حواستون باشه که هنگام خاموش بودن سیستم هم نوسانات برق میتونن به پاور لطمه بزنن. مگر اینکه دکمه پاور رو قطع کرده باشید.گرفتن خسارت از بیمه :چنانچه به علت نوسانات ناشی از برق شهری، وسیله ای از شما خراب شد، حتما همان روز به نزدیک ترین شرکت برق مراجعه کرده و موضوع رو باهاشون در میون بزارید. کارشناسی جهت بررسی صحت ادعای شما به مکان مدنظر فرستاده میشه و در صورت تایید، خسارت شما رو بیمه پرداخت میکنه.راه حل :حتما حتما حتما از یک محافظ خوب و قوی بر سر راه برقی شهری و پاور سیستم خودتون استفاده کنین. قیمت یک محافظ خوب آنچنان گرون نیست که مقرون به صرفه نباشه. اگر الان کمی هزینه کنید و یه محافظ بخرید، چند ماه دیگه خدایی نکرده چند میلیون ضرر بهتون وارد نمیشه.پس در راه جلوگیری از آسیب های ناشی از نوسانات برق شهری، حتما از محافظ برق استفاده کنید.خرید محافظ برق خوب امیدوارم همواره حال دلتون خوب باشه.به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Wed, 17 Feb 2021 07:08:19 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش کاتلین در سال 2021</title>
                <link>https://virgool.io/Amozeshgam/%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-2021-pjmzy4ohtn39</link>
                <description>به نام خداسلام دوستای خوبم؛ حال دلتون چطوره ؟خوب در این نوشته میخوایم حول محور زبان برنامه نویسی کاتلین صحبت کنیم؛ ببینیم در سال 2021 این زبان چقدر کاربرد داره و آینده این زبان به چه شکلی خواهد بود؟ و اینکه چطور میتونیم این زبان رو به بهترین شکل ممکن آموزش ببینیم؟کاتلین در سال 2021زبان کاتلین :زبان برنامه نویسی کاتلین در سال 2011 توسط جت برینز ساخته شد و در سال 2017 بود که گوگل پشتیبانی خودش از این زبان قدرتمند رو اعلام کرد. از اون سال به بعد افراد زیادی سمت کاتلین اومدن و در سال 2019 کاتلین زبان اول توسعه برنامه های اندروید به شمار رفت. زبان کاتلین یک زبان شی گراست که قابلیت کامپایل به زبان جاوا اسکریپت را نیز دارد.آموزش کاتلین برای اندروید :در زمینه برنامه نویسی اندروید کاتلین حرف اول رو میزنه. دلیل این امر هم مختصر نویسی، سادگی و قدرتمندی کاتلین هستش. کاتلین به نسبت جاوا سریع تر توسعه داده میشه. یعنی برنامه ای رو اگر با کاتلین بخواید بنویسید خیلی سریع تر از جاوا میتونید این کار رو بکنید که دلیل این امر هم مختصر بودن کد های زبان کاتلین به نسبت جاوا هست.جایگاه زبان های برنامه نویسی در سال 2021 :خیلی از افراد برای فهمیدن جایگاه یک زبان برنامه نویسی به سایت های خارجی مراجعه میکنند. هر چند من این کار رو منع نمیکنم اما حتما باید دقت کنید که وقتی چیزی برای جهان غرب مناسبه، صرفا برای ما مناسب نخواهد بود. مثال بزنم؟ خوب فلان لباس که تنها بخشی از بدن رو میپوشونه در آمریکا به عنوان لباس برتر سال معرفی میشه ولی آیا میشه در ایران پوشید؟ مثال دیگه بزنم؟ فلان ماشین مرسدس بنز به عنوان بهترین ماشین اروپا انتخاب میشه؛ آیا میشه اون رو به ایران آورد؟ موتور های قدرتمند و پر سر و صدا رو چطور؟ خیلی از چیزها وجود داره که بهترین انتخاب میشن اما عملا در ایران کاربردی نیستند. مثال از برنامه نویسی بزنم؟ با زبان ++C خیلی از نرم افزار های بزرگ رو پیاده سازی میکنند. خیلی از سیستم عامل ها رو با این زبان کد نویسی میکنند. خوب شما اگر این زبان رو یاد بگیرید چقدر در ایران بازار کار خواهد داشت برای شما؟ چند تا شرکت در ایران برای ویندوز نرم افزار های قول پیکر مینویسن؟ چند شرکت میتونن در ایران سیستم عامل پیاده سازی کنن؟جایگاه کاتلین در سال 2021جایگاه زبان برنامه نویسی کاتلین در سال 2021 :من این جایگاه رو بر اساس دانش خودم میخوام مورد بررسی قرار بدم نه بر اساس متون و رفرنس های خارجی. پس این جایگاه رو در ایران مورد بررسی قرار میدیم. زبان کاتلین در سال 2021 جزو 5 زبان برتر و پر کاربرد در ایران محسوب میشه. بازار کار خیلی خوبی داره و همچنان در حال پیشرفت هستش. دلایل متعددی برای این ادعای من وجود داره که برخی ازونا رو مورد بررسی قرار میدیم :1 - کاتلین زبان اول برنامه نویسی اندروید :میدونیم که با افزایش نجومی ارزش دلار و بالا رفتن قیمت گوشی های اپل یا همون گوشی های آیفون، بسیاری از کاربران، گوشی های آیفون رو فروخته و دوباره به اندروید و شرکت شیائومی روی آوردن. پس در حال حاضر بیش از 80 درصد ( نظر خودم بیش از 90 درصد هست ) از کاربران از گوشی های اندروید استفاده میکنن. درسته که تعداد آیفون ها داشت زیاد میشد اما با این افزایش نرخ عملا شانس آیفون برای تثبیت قدرت در ایران به صفر نزدیک شد.زبان برنامه نویسی کاتلین خوب زبان کاتلین زبان اول توسعه نرم افزار های اندروید هست. اندروید هم که در حال حاضر داره در ایران غوغا میکنه و به حداکثر استفاده خودش رسیده. پس بازار کار بزرگی وجود داره و دیگه توی هر خانواده ای حداقل 2 گوشی اندروید پیدا میشه. این میتونه سبب بالا رفتن جایگاه زبان کاتلین باشه.2 - امکان تبدیل کد کاتلین به جاوا اسکریپت :خیلی از مقالات خارجی مدعی هستند که جاوا اسکریپت به علت داشتن کتابخانه های متنوع، زبان برتر برنامه نویسی در جهان محسوب میشه و اون رو در شماره 1 قرار میدن. نکته اینجاست که یادگیری جاوا اسکریپت کمی سخت و مبهم خواهد بود. در صورتی که کاتلین یادگیری ساده تر و شیواتری داره. اگر جاوا اسکریپت زبان برتر هست؛ و اگر کاتلین با وجود سادگی، قادر هست به زبان جاوا اسکریپت کامپایل بشه، پس خود این موضوع باز قدرت کاتلین رو افزایش میده.تبدیل کاتلین به جاوا اسکریپت یعنی توانایی گرفتن خروجی IOS از زبان کاتلین. تبدیل کاتلین به جاوا اسکریپت یعنی توانایی اجرای کد های نوشته شده با کاتلین در سمت کلاینت. که همه این ها قدرت زبان برنامه نویسی کاتلین و کامپایلر های اون رو به رخ میکشه.3 - توانایی کاتلین در استفاده از کتابخانه های جاوا :کاتلین به علت کامپایل شدن به بایت کد و اجرای درون ماشین مجازی جاوا ( JVM ) قادر است از تمامی کتابخانه های موجود برای جاوا استفاده کند. یعنی شما در زبان کاتلین از تمامی کتابخانه هایی که برای جاوا نوشته شده اند، میتونید استفاده کنید. این باعث میشه که کاتلین قدرت جاوا رو هم قرض بگیره و به قدرت خودش اضافه کنه. در نتیجه کاتلین هیچ کمبودی نداشته و انبوهی از کتابخانه ها نیز برای اون وجود دارن که میتونیم ازشون استفاده کنیم.4 - بازار کار خوب زبان برنامه نویسی کاتلین :با یک سرچ ساده و تماشای برخی از آگهی های استخدام میتونید متوجه بشید که کاتلین به نسبت مثلا سی پلاس پلاس یا روبی یا R خیلی بیشتر مورد توجه شرکت های برنامه نویسی هستش. اندک شرکت هایی در ایران بر روی پردازش تصویر و هوش مصنوعی کار میکنن، پس کم تر شرکتی به دنبال برنامه نویسان متلب و روبی خواهد بود. حال با اینکه ممکن است زبان روبی از کاتلین در رفرنس های خارجی در جایگاه بهتری قرار گرفته باشه.ویژگی های کاتلیندلیل بالاتر بودن رتبه جاوا به نسبت کاتلین در مقالات خارجی : جاوا زبانی قدرتمند هست که ورژن های متنوع و مختلفی داره. بالا تر بودن رتبه جاوا به این معنی نیست که جاوا از کاتلین برای اندروید بهتره. جاوا سمت سرور خیلی استفاده میشه. گوگل و اوراکل در پیاده سازی سرور های خودشون خیلی زیاد از جاوا استفاده کردن. همینطور از جاوا برای کد نویسی نرم افزار های بزرگی همچون اندروید استودیو، پی اچ پی استورم و نیز کد نویسی سیستم عامل اندروید استفاده شده. پس دلیل بالاتر بودن جاوا، استفاده جاوا در زمینه های غیر از اندروید هستش. بالاخره جاوا سالهاست که وجود داشته و کتابخونه های عظیم الجثه زیادی برای اون نوشته شده؛ در سرور ها کاربرد داشته و در نوشتن نرم افزار های قول پیکر از اون استفاده شده. منتها بازار کار جاوا برای نوشتن نرم افزار هایی مشابه اندروید استودیو در ایران وجود نداره و تنها کاربرد جاوا در ایران برنامه نویسی اندروید بود که اون هم به لطف کاتلین داره از جاوا صلب میشه. آموزش کاتلین در سال 2021 در آموزشگام :کاتلین هم مثل تمامی تگنولوژی ها، از سال 2017 تا به الان پیشرفت هایی داشته و تکامل پیدا کرده. در حال حاضر یادگیری جدیدترین ویرایش کاتلین میتونه خیلی براتون مفید و پر فایده باشه. البته همچنان منابع بروز برای یادگیری زبان کاتلین کم هستند. اما کم بودن به معنای وجود نداشتن نخواهد بود. اگر تصمیم دارید کاتلین رو یاد بگیرید و الان میخواید این کار رو شروع بکنید، خیلی خوبه که برید سراغ یه پکیج آموزشی که هم رایگان باشه، هم بروزرسانی شده و هم فارسی و قابل درک. این پکیج در سایت اموزشگام موجوده.شما میتونید دوره رایگان آموزش زبان برنامه نویسی کاتلین ( 2021 ) رو از آموزشگام دریافت کنید :https://amozeshgam.ir/course-basic-kotlin-2021/خوب امیدوارم همواره حال دلتون خوب باشه.به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Mon, 08 Feb 2021 19:43:06 +0330</pubDate>
            </item>
                    <item>
                <title>علم بهتر است یا ثروت؟ (از زاویه ای جدید)</title>
                <link>https://virgool.io/@alirezaahmadi/science-or-wealth-btfvoiyug2jy</link>
                <description>به نام خداسلام دوستان. امیدوارم که حالتون خوب باشهبارها موضوع انشا بهمون دادن که علم بهتر است یا ثروت و ما هم هرچی که به ذهنمون رسیده رو نوشتیم. ولی تا حالا از این زاویه به این قضیه نگاه نکرده بودم...چند وقت پیش که رفته بودم دندون پزشکی، داخل سالن انتظار چند تا خانوم داشتن با هم بحث میکردن سر این قضیه. یکی از این خانوما می گفت: &quot; قدیما همه میگفتن علم از ثروت بهتره و با علم میشه ثروتمند شد و... در حالی که تو این دوره زمونه هیچ چیز بهتر از ثروت نیست و خیلی راحت با پول میشه علم رو خرید و یه مدرک فوق لیسانس جور کرد. من اگه 100 میلیون داشتم همین الان همه دندونامو خوب میکردم و راحت میشدم!!&quot;یکم به فکر فرو رفتم و با خودم گفتم : این خانوم چطوری میتونه تصمیم بگیره که ثروت از علم بالاتره؟ چطور میتونه بفهمه که با ثروت چه کارهایی میشه کرد؟ از کجا میدونه که مدرک رو میشه با پول خرید؟ این خانوم چطوری میتونه تصمیم بگیره که اگه 100 میلیون داشت میتونست همه دندوناشو خوب کنه؟ چرا این خانوم نگفت اگه من 100 میلیون داشتم همه شو آتیش میزدم؟ به راستی اگر شما 100 میلیون همین الان یهویی بریزن به حسابتون باهاش چیکار میکنین؟ از کجا میفهمید که باید چیکار کنید؟ چرا صد میلیون رو آتیش نمیزنید؟ آیا همین که شما میفهمید 100 میلیون رو در چه راهی خرج بکنید، خودش علم نیست؟ ما دقیقا همون زمانی که داریم میگیم ثروت بهتر از علم هست، داریم ثابت میکنیم که علم بهتره. چرا؟ چون با علم هست که شما میتونید تصمیم بگیرید که بین دو چیز، کدوم بهتره. وقتی شما با 100 میلیون میرید دندوناتون رو خوب میکنین یا توی یه بنگاه سرمایه گذاری میکنین یعنی اینکه شما علمش رو دارید. وقتی شما 100 میلیون پول رو به آتیش نمیکشید یعنی اینکه شما عالم هستید به این موضوع که با 100 میلیون میشه کارهای بهتری انجام داد. اما اگر 900 میلیون هم دست یک دیوانه سپرده بشه، آیا میتونه درست استفاده کنه؟ کسی که از عقل بهره نبرده باشه و علم کافی نداشته باشه آیا ثروت کمکش میکنه؟ چه پول هایی که خود من و شما به هدر دادیم و از جیبمون رفته به دلیل اینکه علم استفاده از اون رو نداشتیم.پس از این منظر علم بهتر است از ثروت چون اگر علم نداشته باشی، 200 میلیون دلار رو میتونی توی یه لحظه در یک قمار ببازی و هیچ پولی نداشته باشی که حتی غذایی نوش جان کنی. پس وقتی میگن علم بهتره یا ثروت؟ منظور این نیست که مدرک دکتری بهتره یا 500 میلیون پول. بلکه منظور از علم هر گونه دانش و مهارتی هست که به شما کمک میکنه تا بتونید از ثروت خودتون درست استفاده کنید. البته منظور از ثروت هم فقط پول نیست؛ ثروت هایی چون سلامتی، تندرستی، امنیت و... که تا علم نداشته باشید نمیتونید قدرشون رو بدونید.نکته : تمامی نوشته های این مقاله زاده تخیل و نظر شخصی بنده بوده و هیچ پایه و اساس علمی ندارد.به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Fri, 27 Sep 2019 22:16:46 +0330</pubDate>
            </item>
                    <item>
                <title>مفهوم thread و برنامه نویسی نا همزمان در اندروید</title>
                <link>https://virgool.io/MobileLab/thread-in-android-miqcyoyjej7o</link>
                <description>به نام خداسلام دوستان امیدوارم حالتون خوب باشه...فکر میکنم همین تصویر بالا رو یه نگاه بندازید دیگه نیازی به توضیح عملکرد thread ها در اندروید نباشه ولی بازم یه توضیح میدم. ببینید ما یه thread اصلی داریم که هر برنامه ای که اجرا میکنیم میاد داخل این بخش و شروع به کار میکنه. شما میدونید که برنامه های جاوا و کاتلین پس از کامپایل شدن و تبدیل شدن به بایت کد، توسط گوشی کاربر تفسیر میشن. تفسیر شدن به معنای اجرای خط به خط کد ها هستش. حالا یه سوال پیش میاد. کاربر روی یک دکمه در برنامه شما کلیک میکنه که اون دکمه مسئول دانلود یه فیلم هست. حالا اگر شما کاربر رو مجبور کنید که تا پایان دانلود فیلم هیچ کاری نکنه که به شدت تجربه کاربری اپ خودتونو پایین میارید. اینجاست که از thread های دیگه استفاده میکنید. یعنی اجرای این عملیات رو به یک بخش دیگه از سی پی یو واگذار میکنید تا در عین دانلود فیلم، کاربر بتونه داخل اپ به تعامل بپردازه...خوب شاید با خودتون بگین هر کاری که قراره انجام بدیم رو بفرستیم به thread دیگه ای تا سرعت اپ بالا بره اما باید بدونید که اولا مدیریت کردن thread ها کار آنچنان ساده ای نیست و همین الان هم از کتابخونه هایی نظیر رتروفیت و آر ایکس برای انجام کار های مختلف در thread های مختلف استفاده میکنیم و ثانیا برخی از کار ها رو شما باید در thread اصلی انجام بدین. چه کاری ؟ هر کد اندرویدی رو شما باید داخل thread اصلی استفاده کنید در غیر این صورت برنامه کرش میکنه. مثلا اگر شما در thread بکگراند یه رشته ای رو از اینترنت گرفتید، حالا اگر بخواین اون رشته رو Toast کنید ، با توجه به اینکه Toast یک کد اندرویدی محسوب میشه ، باید به thread اصلی برگردید وگرنه برنامه کرش میکنه.به طور کلی میتونیم بگیم thread ها برای انجام کار های زمان بر مورد استفاده قرار میگیرن تا از قفل شدن UI و در واقع هنگ کردن برنامه از نگاه کاربر جلوگیری کنیم.و اما برنامه نویسی نا همزمان چیه؟دقیقا همین چیزایی که تا الان گفتم. یعنی به مفهوم اینکه ما یه قطعه کد سنگین رو برای اجرا شدن به thread دیگری بفرستیم تا از قفل کردن ui جلوگیری کنیم. یعنی در عین حالی که برنامه داره فیلم دانلود میکنه، کاربر بتونه با برنامه تعامل داشته باشه و حس نکنه که برنامه هنگ کرده. اما سوال بسیار حیاتی پیش میاد. اینکه برنامه ما در آن واحد هم دانلود میکرده باشه و هم قابل تعامل باشه که مفهوم همزمان بودن رو میرسونه، یعنی چند تا کار دارن همزمان انجام میشن؛ پس چرا میگن برنامه نویسی نا همزمان؟ دلیلش اینه که اونایی که این اسم رو گذاشتن از یه جنبه دیگه به قضیه نگاه کردن. چه جنبه ای؟ ببینید وقتی شما برای اون قطعه کد سنگینی که دارید ( همون دانلود فیلم ) ، از یک thread دیگه استفاده نکنید، باعث میشه که thread اصلی قفل کنه و منتظر پاسخ اون قطعه کد بمونه که بهش میگن برنامه نویسی همزمان؛ یعنی در همین زمان باید پاسخ اون قطعه کد داده بشه تا برنامه بره سراغ سایر بخش ها. اما زمانی که شما برای اجرای اون قطعه کد از thread دیگه ای استفاده میکنید ، یعنی پاسخ رو به زمان دیگه ای موکول کردید؛ بدین معنی که به سیستم گفتید این کد رو یه جای دیگه اجرا کن و هر وقت جوابش اومد خبرمون کن. پس بدین دلیل به این روش میگن برنامه نویسی نا همزمان.امیدوارم منظورمو رسونده باشم.به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Wed, 14 Aug 2019 14:20:49 +0430</pubDate>
            </item>
                    <item>
                <title>ساز و کار RX و پترن observer در اندروید</title>
                <link>https://virgool.io/@alirezaahmadi/rx-observer-in-android-rgbnmjsxqiqu</link>
                <description>به نام خداسلام دوستان. امیدوارم که حال کد هاتون خوب باشه...خوب یک راست بریم سر اصل مطلب. چرا RX آمد و ساز و کار این ویژگی چیه؟ ببینید دوستان فرقی نمیکنه شما جاوا کار میکنید یا کاتلین یا حتی php و سی شارپ و... چون برنامه نویسی به سبک RX یه ویژگی هست که داخل همه این زبان ها گنجانده شده و شما میتونید از پکیج های مختلفی نظیر RXKotlin ، RXJava و... برای زبان های مختلف استفاده کنید. اما این کتابخونه ها یا این ساز و کار در زبان های برنامه نویسی چه کاری انجام میدن؟یه مثال براتون میزنم و در این مثال هم فرض رو بر این میگیرم که شما اندروید کار کردین :فرض کنید یه دیتا کلاس دارید به نام Person که یه فیلد name داره و یه فیلد family . حالا شما داخل اکتیویتی میاید همین دیتا کلاس رو مقدار دهی میکنید و از همین دیتا کلاس هم برای پر کردن دو تا تکست ویو استفاده میکنید. مثل کد زیر :خوب تا اینجا Alireza Ahmadi به کاربر نمایش داده خواهد شد. اما حالا اگر من داخل رویداد کلیک یک Button بیام مقادیر این نمونه ساخته شده از کلاس Person رو تغییر بدم، آیا view یا همون xml من هم متوجه این تغییر میشه؟ جواب خیر میباشد ههههه. چرا؟ چون من اگر بخوام view هم متوجه این تغییر بشه باید بیام بعد از تغییر دادن نمونه، دوباره name و family رو به text view های خودم پاس بدم تا view هم تغییر کنه مثل کد زیر : اما RX با استفاده از پترن observer این مشکلات رو حل میکنه. اما برای درک عمیق تر این مبحث بزارید یکم راجب پترن observer براتون بنویسم. این پترن میگه در چنین مواقعی ما نیاز به یک مشاهده شونده و یک مشاهده کننده داریم؛ یعنی چی؟ یعنی کلاسی که داده هارو داره فراهم میکنه، باید از نوع مشاهده شونده در نظر بگیریم و اونایی که قراره این داده ها رو دریافت کنن از نوع مشاهده کننده. خوب این یعنی چی؟ یعنی اینکه ما کلاس Person رو از نوع مشاهده شونده در نظر بگیریم که قراره اکتیویتی ما به اون نگاه کنه که هر موقع داده های اون تغییر کرد، اکتیویتی هم بیاد داده های جدید رو به تکست ویو ها پاس بده؛ بدین صورت که اگر قراره ما name و family رو پاس بدیم به تکست ویو ، بیایم این کار رو داخل یک تابع بنویسیم و این تابع رو هم به مشاهده شونده یا همون کلاس Person خودمون معرفی کنیم و بگیم هر وقت که مقادیر name و family تو تغییر کرد، این تابع رو صدا بزن تا text تکست ویو های ما هم تغییر کنه. برای درک کامل پترن observer به لینک زیر مراجعه کرده و چگونگی پیاده سازی این پترن رو مشاهده کنید:https://github.com/alirezaahmadi056/kotlin-design-patternsو اما آر ایکس :در کتابخونه RX چند تا مفهوم بزرگ وجود داره که کلا میشه گفت ساز و کار آر ایکس رو مشخص میکنه : مشاهده شونده یا observableمشاهده کننده یا observerمشترک شدن یا Subscribeآزاد کننده منابع از دست دادنی یا disposableخوب مشاهده شونده که همون منبع یا کلاسی هست که داده هارو انتشار میده و مشاهده کننده هم اون کلاس هایی هستن که خودشون رو به مشاهده شونده معرفی میکنن و بلافاصله بعد از انتشار داده توسط مشاهده شونده، این مشاهده کننده ها با خبر میشن و هر کار دوست داشته باشن انجام میدن. اما چطور یک مشاهده کننده خودشو به مشاهده شونده معرفی میکنه؟ با استفاده از Subscribe یا همون مشترک شدن؛ پس هر مشاهده کننده باید برای دریافت داده از سمت مشاهده شونده، به مشاهده شونده subscribe کنه یا به عبارتی مشترک بشه.حالا شما فرض کنید یک مشاهده کننده به یک مشاهده شونده متصل هست و داره اطلاعات رو دریافت میکنه که یهو گوشی زنگ میخوره؛ در اینجا اگر داده ها آزاد یا free نشن، برنامه تون کرش میکنه؛ پس disposable هم میشه آزاد سازی داده ها در شرایط خاص که تمام این کارها رو خود آر ایکس برای ما انجام میده و ما فقط باید متد ها و توابع رو فراخونی کنیم.یکی دیگه از قابلیت های مهم و اساسی RX اینه که ما میتونیم دریافت اطلاعات رو به صورت ناهمزمان انجام بدیم و در واقع گرفتن اطلاعات از سرور که کاری زمان بر هست رو میتونیم به یک thread دیگه محول کنیم که حالا به مباحث thread و برنامه نویسی همزمان و ناهمزمان و اینکه چرا نام این دو روش ( همزمان و ناهمزمان ) جابه جا شده، در مقاله بعدی به صورت کامل میپردازیم.یه سوال هم پیش میاد که چرا باید در کنار RXJava یا حالا RXKotlin از RXAndroid هم استفاده کنیم. ببینید دوستان، RXAndroid چند تا متد داره که مخصوص اندروید هست و در مواقعی ما به این متد ها نیاز داریم؛ به عنوان مثال شما میاین با استفاده از متد های RXJava مشخص میکنید که گرفتن اطلاعات از سرور در thread بک گراند اتفاق بیوفته؛ اما زمانی که داده ها گرفته شد میخواین برگردین به thread اصلی یا main تا بتونید از کد های اندروید نظیر toast استفاده کنید ( اگر در thread بکگراند از toast استفاده کنید برنامه کرش میکنه چون کد اندروید جاش توی بکگراند نیست و باید در thread اصلی یا همون ui thread استفاده بشه ) پس برای این کار و برگشتن به thread اصلی شما باید از متد RXAndroid استفاده کنی چون java و kotlin که thread اصلی رو نمیشناسن و UI thread براشون معنی نداره دیگه...خوب تا مقاله بعدی خدا یار و نگهدارتون باشه.به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Tue, 06 Aug 2019 20:33:26 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی کتابخانه Room برای ایجاد دیتابیس در کاتلین</title>
                <link>https://virgool.io/@alirezaahmadi/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-room-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AF%D8%B1-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-ohtlapqxl6tg</link>
                <description>به نام خداسلام دوستان امیدوارم که حالتون خوب باشه...خوب Room چیه؟  Room یه کتابخونه پایگاه داده هستش.همون طور که همگی شما بهتر از من میدونید، ما در اندروید برای ذخیره سازی داده هامون از دیتابیس مخصوص اندروید یعنی SQLite استفاده میکنیم که به زبان SQL هست و خوب قطعا برای استفاده از این دیتابیس، ما باید از کلاس های Helper مخصوص این دیتابیس استفاده کنیم که کمی پیچیده هست و ممکنه موجب سردرگمی ما بشه. خوب برای حل این مشکلات ما میایم از دیتابیس های ORM اسفتاده میکنیم. اما منظور از ORM بودن یک دیتابیس چی هست؟ ORM یا همون Object-Relational Mapping روشی هست که به یک برنامه نویس این امکان رو میده که عمل Query رو از سمت برنامه انجام بده و دیگه نیازی نیست که توسعه دهنده بیاد و Query های مدنظر خودش رو به زبان SQL بنویسه؛ پس نیازی نیست که شما SQL بلد باشید و فقط کافیه که بتونید با یک ORM کار کنید. در واقع ORM یک لایه مترجم بین زبان برنامه نویسی و پایگاه داده رابطه ای هست که این دو تا رو به هم تبدیل میکنه وباعث میشه باهم ارتباط برقرار کنن.کتابخونه Room تمامی قدرت دیتابیس SQLite رو شامل میشه و برخی از نواقص این دیتابیس رو هم برطرف میکنه و از بین میبره. در واقع Room با استفاده از حاشیه نویسی یا همون  annotation ، استفاده از دیتابیس رو برای ما آسون تر و راحت تر میکنه؛ و ما بدون نگرانی از اینکه خطایی در دیتابیس به وجود بیاد که نتونیم متوجه اون بشیم، به ساخت و استفاده از دیتابیس میپردازیم. اما چطور میتونیم مطمئن بشیم که خطایی در دیتابیس رخ نمیده و همه چیز کاملا درست داره پیش میره؟خوب در Room ، پرس و جوها یا همون Query ها در زمان کامپایل بررسی میشن ( یعنی نه تنها Syntax بلکه تمامی جداول موجود هم مورد بررسی قرار میگیرن ) پس هیچ خطری برنامه رو در زمان اجرا تهدید نمیکنه که باعث کرش شدن اپ ما بشه...در ضمن کتابخونه Room با سایر اجزای معماری نظیر LiveData به صورت کامل و جامع سازگاری داره و میتونیم در کنار هم از همه این اجزا استفاده کنیم. علاوه بر این ها ، سرعت این کتابخونه در اتصال به دیتابیس و اجرای Query ها باعث شده تا بتونیم به راحتی از Room به منظور ساخت Cache برنامه استفاده کنیم و این موضوع در Document های اصلی مربوط به این کتابخونه هم عنوان شده...خوب این رو هم بگم که استفاده از این کتابخونه اصلا کار سختی نیست و به راحتی میتونین این کتابخونه رو به برنامه خودتون اضافه کرده و ازش استفاده کنین؛ اما خوب به محض اینکه سرم یکم خلوت تر بشه یه فیلم آموزشی کامل جهت شروع کار با این کتابخونه جذاب و مفید رو داخل آپارات آپلود میکنم و همین جا براتون لینک میکنم که بتونین به راحتی هرچه تمام تر ، کار با این کتابخونه رو شروع کنید و شاید هم کمی ترغیب بشید برای استفاده از معماری ها در برنامه نویسی اندروید.پس این داستان ادامه دارد...به امید روزای بهتر</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Sun, 28 Apr 2019 09:29:30 +0430</pubDate>
            </item>
                    <item>
                <title>من بدون گوشی هوشمند هم میتونم زندگی کنم!!</title>
                <link>https://virgool.io/@alirezaahmadi/%D9%85%D9%86-%D8%A8%D8%AF%D9%88%D9%86-%DA%AF%D9%88%D8%B4%DB%8C-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D9%87%D9%85-%D9%85%DB%8C%D8%AA%D9%88%D9%86%D9%85-%D8%B2%D9%86%D8%AF%DA%AF%DB%8C-%DA%A9%D9%86%D9%85-d62u3po5cj8u</link>
                <description>به نام خدا سلام دوستان، امیدوارم که حالتون خوب باشه...خوب من شخصی ام که میتونم ادعا کنم جزو اولین ایرانی هایی هستم که داخل شبکه اجتماعی اینستاگرام ثبت نام کرده. زمانی که من شروع به چت کردم، مرسوم ترین پیام رسان، لاین بود که خیلی ها ازش استفاده میکردن و بعد یه مدت بیتالک به دلیل نمایش افراد نزدیک به محل استقرار فرد، محبوبیت خاصی در بین سایر پیام رسان ها پیدا کرد و خیلی ها از لاین کوچ کردن به سمت بیتالک. خوب اون زمان کار من فقط پیام بازی توی این شبکه های اجتماعی بود و وقتی اینستاگرام رو نصب کردم، کارم شده بود کار هایی که بقیه خوششون میومد. من شده بودم دلقکی که باید همه کار بکنه تا بقیه رو بخندونه و راضی نگه داره که مبادا یه وقت آنفالو بشه از طرف اونا... من مدیر یه کانال 20 هزار نفری و یه گروه 700 نفری داخل تلگرام و در اینستاگرام هم صاحب یه اکانت 15K با حدود 7K لایک خور بودم و فک میکردم کسی هستم. من سه سال پیش با زبان برنامه نویسی جاوا آشنا شدم و شروع کردم به برنامه نویسی برای گوشی های اندروید. خوب پیشرفت من لاک پشت وار بود. خیلی برنامه ها میریختم برای خودم، مثلا میگفتم که هفته ای 3 مطلب جدید رو حداقل یاد بگیرم تا توی کارم حرفه ای بشم اما...وقتی شروع میکردم به یاد گرفتن یک مطلب جدید یهو با خودم میگفتم برم ببینم استوری ای که گذاشتم چند تا ویو خورده و چند نفر دیدن، پس میرفتم سراغ گوشی و وارد اینستا میشدم. به محض وارد شدن میدیدم که اووووووو فلانی هم که پست گذاشته، اووووووو فلانی هم که لایکم کرده، اووووووو این دختره کیه منو فالو کرده، اووووووو این یکی دختره کی هست که رفیقم عکسشو استوری کرده، اووووووو حالا که اومدم بیا یه سر به ناحیه سرچ هم بزنم؛ این اینستاگرام از خدا بی خبر هم که کاملا علایق من رو فهمیده بود و چیزایی رو توی ناحیه سرچ بهم نشون میداد که کاملا دنبالش بودم. خلاصه چشم بهم میزدم میدیدم 2 ساعتی گذشته و دیگه وقتشه برم سراغ اهدافم؛ پس تا به خودم میامدم که برگردم به دامان یادگیری، با خودم میگفتم حالا بیا تا تلگرام هم برم ببینم رفقا چه پست هایی گذاشتن توی کانال. خوب وارد تلگرام که میشدم میدیدم بحث توی گروهمون داغ شده و یه عده هم که دارن ادمین رو صدا میکنن و منم که غیرتی و... ای بابا یکی نیست بگه به تو چه ربطی داره که کی به کی چی گفته؛ خلاصه چشم به هم میزدم میدیدم 3 ساعت دیگه هم رفته و باید برم تمرین فوتبال و از تمرین که برمیگشتم که جاتون خالی خوابم میامد. پس در نتیجه هیچ کار مفیدی نمیکردم.یک سال و نیم پیش بود که با دو نفر از دوستای برنامه نویسم که برنامه نویسی PHP با فریم ورک لاراول کار میکنن به یه ایده ای برخورد کردیم؛ در واقع به یک نیاز. میخواستیم یه کاری انجام بدیم و برای انجام اون کار خیلی دردسر کشیدیم و از اخر هم نتونستیم بریم و این بود که نشستیم و فکر کردیم که چطور میشه تا این ضعف رو برطرف کرد و بستری به وجود آورد که سهولت جای سختی رو بگیره و دیگران حداقل مثل ما ضد حال نخورن. خلاصه به فکر شروع یک استارت آپ افتادیم و راجب این ایده با برخی از بزرگان این عرصه در شهرمون هم صحبت کردیم. اما من میدونستم که اولین قدم در راه اندازی این ایده اینه که من یک برنامه نویس پیشرفته اندروید بشم اما با این وضع اعتیاد به گوشی و شبکه های اجتماعی آیا این کار ممکن بود؟پس تصمیم خودمو گرفتم و محکم گفتم که من بدون گوشی هم میتونم زندگی کنم...در قدم اول تمام پست های اینستا رو پاک کردم و تمامی فالوئینگ های خودمو هم آنفالو کردم و بعد اکانت رو رها کردم به امون خدا. رفتم توی تلگرام و تمامی کانال و گروه های الکی رو پاک کردم و فقط 3 تا کانال که مربوط به برنامه نویسی بود رو گذاشتم که بمونه. در مرحله بعد احساس ضعف آموزش کردم و فهمیدم که برخی از اموزش هارو باید بخرم و ببینم و در برخی از کلاس های آموزشی هم بایستی شرکت کنم اما اون موقع درآمدی برای اینکار نداشتم پس گوشی خودمو فروختم و صرف آموزش کردم. و خوب برای زنگ زدن و اس ام اس دادن هم مجبور شدم یک گوشی ساده با سیستم عامل جاوا بخرم.الان یک سال از این قضیه میگذره و من در حوضه برنامه نویسی اندروید پیشرفت های چشم گیری کردم. منی که آرزو داشتم هفته ای سه موضوع جدید رو یاد بگیرم، الان به راحتی روزی یک موضوع رو در کنار تمامی کارهایی که برای اون استارت آپ انجام میدم، دارم یاد میگیرم. از تلگرام هم تا حدودی برای ارتباط با تیم استفاده میکنم و داخل لب تاب نصبش کردم. دیگه نه  رغبتی به اینستاگرام دارم و نه انگیزه ای برای دلقک بازی کردن و باشگاه رفتن صرفا برای گرفتن عکس هایی که بقیه از من خوششون بیاد و دنبالم کنن. گویا زندگی اینجوری شیرین تر شده. وقت برای مطالعه، یادگیری، مقاله نوشتن، کار کردن و ورزش کردن هست و دیگه هیچ کاری پشت گوش انداخته نمیشه.در پایان این رو هم بگم که من 5 سال پیش فک میکردم فوتبالیست میشم و اینقدر فوتبال بازی میکردم که توپ از من خسته شده بود، اما الان هفته ای یک بار فقط برای سلامتی میرم ورزش میکنم و به این نتیجه رسیدم که باید به صورت واقع بینانه به اهدافت نگاه کنی نه به صورت رویایی...در پایان هم اینو بهتون بگم که به معنای واقعی به این نتیجه رسیدم که من بدون گوشی هوشمند هم میتونم زندگی کنم و امیدوارم شما هم هرچه زودتر فکری برای حذف کارهای وقت گیر خودتون و تبدیل فرصت هایی که دارید به راه هایی برای رسیدن به اهداف پیدا کنید و موفق بشید...به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Sat, 27 Apr 2019 06:23:15 +0430</pubDate>
            </item>
                    <item>
                <title>من بدون زبان انگلیسی هم میتونم برنامه نویس بشم!!</title>
                <link>https://virgool.io/coderlife/%D9%85%D9%86-%D8%A8%D8%AF%D9%88%D9%86-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A7%D9%86%DA%AF%D9%84%DB%8C%D8%B3%DB%8C-%D9%87%D9%85-%D9%85%DB%8C%D8%AA%D9%88%D9%86%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%A8%D8%B4%D9%85-ahpvxcezwt93</link>
                <description>به نام خداسلام دوستای گلم...خوب ماجرا از اون جایی شروع شد که من تصمیم خودمو گرفتم که بزنم تو خط اندروید و بشم یه برنامه نویس پیشرفته اندروید که حریف نداره. به همین منظور رفتم سراغ پادکست ها و مقالات آموزشی ای که اساتید مختلف نوشته بودن و میتونست کمکم کنه. در اکثر این موارد توجه شایانی به زبان انگلیسی برای ورود به دنیای برنامه نویسی شده بود در حدی که دیگه داشتم کلافه میشدم. خلاصه رفتم سراغ برنامه نویس های خوب شهرم و باهاشون مشورت هایی انجام دادم که چیکار کنم تا یه برنامه نویس عالی در زمینه اندروید بشم؟ خوب اونا هم در بین تمامی نکاتی که بهم گفتن و میشه گفت ارشادم کردن، اکیدا پیشنهاد دادن که زبان انگلیسی خودمو تقویت کنم و برم سراغ یادگیری زبان. اما مشکل کجا بود؟مشکل اینجا بود که من کلا با زبان میونه خوبی نداشتم و اصلا خوشم نمی آمد که گرامر زبان رو یاد بگیرم و در حد خیلی ابتدایی با زبان آشنا بودم و میتونستم کارهای روزانه خودمو راه بندازمو و گلیم خودمو از آب بکشم. اما با این پیشنهاد هایی که بهم شد و اخلاقی که من داشتم و موضعی که من در برابر زبان گرفته بودم، نشستم و در طی یک مذاکره با خودم به این نتیجه رسیدم که آقا من بدون زبان انگلیسی هم میتونم یه برنامه نویس پیشرفته اندروید بشم و نیازی به زبان ندارم.خلاصه تصمیم خودمو گرفتم و شروع  کردم به گشت و گذار برای پیدا کردن منابع آموزشی فارسی. اوایل خوب پیش میرفت و چند تا منبع خوب هم پیدا کردم، یه آموزش صفر تا صد هم خریدم و شروع کردم به نگاه کردن فیلم های اموزشی و یادگیری زبان برنامه نویسی جاوا برای توسعه اپ های اندرویدی. اما چند وقتی که گذشت و یه مقدار که تازه داشتم با اندروید و جاوا آشنا میشدم کنفرانس لعنتی گوگل آمد و کاتلین رو معرفی کرد. این رو هم بگم که مدیر یه شرکتی بهم قول کار داده بود و قرار بود بعد اینکه برنامه نویسی اندروید رو در حد مقدماتی یاد گرفتم برم توی شرکت اون بنده خدا کار کنم. خلاصه طرف بهم پیام داد و گفت نیاز شرکت ما فعلا برنامه نویسی اندروید به زبان کاتلین هست. هر چه زود تر شیفت بده سمت کاتلین و شروع کن به یادگیری این زبان جدید و هرچه زودتر یادگیری رو تموم کنی به نفع خودت هست.خوب من هم که به صورت محکم به زبان انگلیسی گفته بودم &quot;نه!&quot;.پس شروع کردم به گشتن برای یافتن آموزش زبان برنامه نویسی کاتلین برای توسعه اپ اندروید؛ اما بعد از چند روز گشتن و پیدا کردن چند تا نوشته خیلی کوتاه و نا کارآمد، از گشتن در منابع فارسی نا امید شدم و رفتم سراغ رفرنس های خود گوگل و سایت رسمی کاتلین. شروع کردم به خوندن رفرنس ها و ترجمه کردن خط به خط مقالات انگلیسی با استفاده از مترجم گوگل اما علاوه بر اینکه یه کار خیلی زمان بر بود و من بعد از یک هفته فقط تونستم شیوه تعریف متغیر رو یاد بگیرم، هیچی هم نمیفهمیدم. یعنی ترجمه ای مترجم ها برای اون مقالات و رفرنس ها به من ارائه میکردن اینقدر گنگ بود که اصلا درک نمیکردم چی داره میگه. به ذهنم رسید که برم و تو یوتیوب به دنبال آموزش های ویدئویی بگردم؛ نه که پیدا نکرده باشم، چرا اتفاقا چند تا آموزش قدم به قدم هم پیدا کردم که برای شروع خیلی خوب بود اما با اینکه طرف به زبان ساده انگلیسی هم صحبت میکرد، من هیچی نمیفهمیدم و یهو میدیدم یه کد نوشت و اون کد داره لیست ویو رو نمایش میده. همین و بس... اما این پایان کار نبود...بعد یه مدت سر و کله زدن با سایت های انگلیسی و زبان اصلی، پیامک دادن های اون مدیر شرکت هم شروع شد که میگفت : &quot; یاد گرفتی یا نه؟ راستی کاتلین رو که یاد گرفتی برو سراغ کتابخونه های جدیدی که با کاتلین معرفی شدن و معماری هم یاد بگیر &quot;. خوب من داشتم از فرط ناراحتی منفجر میشدم و کمی به فکر فرو رفتم که شاید وقت اون رسیده که موضع خودمو نسبت به زبان انگلیسی تغییر بدم...خوب بیاید کاملا دوستانه و منطقی با این موضوع برخورد کنیم و نگاهی جامع به این قضیه داشته باشیم :زبان تولید تکنولوژی در حال حاضر زبان انگلیسی هستش و اگر شما شخصی هستید که دوست دارید پیشرفت کنید، پس هر روز باید خودتونو با مطالب جدید آپدیت کنید و چیزای جدیدی که وارد بازار میشه رو یاد بگیرید و تنها راه سریع یاد گرفتن تکنولوژی های جدید و مطالب روز دنیا، یاد گرفتن زبان تکنولوژی ها هست. پس یاد گیری زبان انگلیسی به اندازه فهم و درک یک مقاله در زمینه تخصص و مهارت شما امری ضروری هست.اما بزارید یه دلیل دیگه هم برای یادگیری زبان انگلیسی رو با هم بررسی کنیم. همون طور که میدونید روز به روز زبان های برنامه نویسی دارن سطح بالاتر میشن و به زبون محاوره ای انسان نزدیک تر میشن اما نه به زبون مادری من و شما بلکه به زبان انگلیسی. پس شما با یاد گرفتن زبان انگلیسی میتونید خیلی راحت تر کلمات کلیدی و سینتکس زبان برنامه نویسی سطح بالای مدنظر خودتون رو یاد بگیرید.در ضمن تنها جایی که شما به تمام قابلیت های یک تکنولوژی بدون پنهان کاری دسترسی دارید ، رفرنس های سایت منبع اون تکنولوژی هست که قطعا انگلیسی هست ؛ پس با دانش نسبی در زبان انگلیسی، سرعت یادگیری تکنولوژی رو در خودتون به نهایت برسونید.من علاوه بر از دست دادن اون موقعیت شغلی، توی خیلی از مشکلاتی که در برنامه نویسی برام پیش اومد گیر کردم و ماه ها برای رفع اون ها وقت گذاشتم چرا که به دلیل نه گفتن به انگلیسی نمیتونستم در سایت هایی نظیر Stack overflow مشکلات خودمو با جامعه برنامه نویسان جهانی به اشتراک بزارم تا در کمترین زمان ممکن به راه حل مطلوب برسم.اما به عنوان نکته پایانی این رو هم بگم که واقعا نیازی به یاد گرفتن تخصصی زبان در حدی که مثل بلبل بتونید مکالمه کنید ندارید؛ فقط در این حد که اگر یه موقع خواستین کتابی انگلیسی نظیر کتاب جامع و کامل آموزش Clean code رو بخونید، مثل من به مشکل نخورید چون من همچنان در این زمینه مشکل دارم ):همینجا تاکید میکنم که حتما کتابی که بالا معرفی کردم رو بخونید چون خیلی کمکتون میکنه در کد نویسی تمیز و قابل فهم. خوب بهترین راه برای شروع روند آموزشی به سمت زبان انگلیسی هم یادگیری کلمات تخصصی و مورد نیاز در حوزه آی تی هست که از طریق لینک زیر میتونید این کلمات رو به صورت pdf دانلود کنید و از همین الان موضع خودتون رو نسبت به زبان انگلیسی تغییر بدید.  دانلود کلمات تخصصی حوزه آی تیبه امید روز های بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Tue, 23 Apr 2019 06:40:29 +0430</pubDate>
            </item>
                    <item>
                <title>من بدون معماری هم میتونم تمیز کد بزنم!!</title>
                <link>https://virgool.io/@alirezaahmadi/%D9%85%D9%86-%D8%A8%D8%AF%D9%88%D9%86-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%87%D9%85-%D9%85%DB%8C%D8%AA%D9%88%D9%86%D9%85-%D8%AA%D9%85%DB%8C%D8%B2-%DA%A9%D8%AF-%D8%A8%D8%B2%D9%86%D9%85-uqmxggrg11vw</link>
                <description>به نام خداAndroid Architectureسلام دوستان. من دو سالی هست که به صورت جدی دارم اندروید کار میکنم و در حال حاضر با زبان کاتلین برنامه هام رو توسعه میدم. در شروع کار که بودم ( یعنی قبل از این دوسال ) خیلی دنبال افکار و تجربه های افرادی بودم که تو این زمینه تخصص بیشتری نسبت به من دارن. به همین دلیل میرفتم سراغشون و یا مقاله هایی که نوشته بودند رو میخوندم. بیشترین تاکیدی که این افراد برای پیشرفت در کارم به من میکردند، یادگیری معماری در کدنویسی بود. خوب منم خیلی زود به حرفشون گوش دادم و رفتم سراغ یادگیری معماری اما به دلیل موجود نبودن منبعی کامل به زبان قابل فهم برای من، خیلی دچار پیچیدگی های کار شدم و کلا به فکر فرو رفتم که واقعا چرا باید معماری رو یاد بگیرم؟خوب یه مقدار که خودم فکر کردم و به نتیجه ای نرسیدم، رفتم سراغ گوگل و مقالات تا بلکه بتونم دلیل استفاده از معماری رو درک کنم. بزرگترین موضوعی که تمامی مقالات روی اون تمرکز کرده بودن و مانور میدادن، بحث کد نویسی تمیز یا همون Clean Code بود. یعنی میگفتن که تو باید از معماری استفاده کنی تا وقتی بعد از 6 ماه به کد و برنامه ای که نوشتی سر میزنی و نگاه میکنی، گیج نشی و خیلی سریع بفهمی که چه کاری انجام دادی!! خوب منی که بعد از یه مقدار تلاش برای یادگیری معماری MVVM خیلی به مشکل و سختی های کار برخورد کرده بودم و از معماری زده شده بودم، به نظرتون چه انتخابی کردم؟خوب درست حدس زدید، اومدم نشستم و شروع کردم به فکر کردن : &quot; خوب برای کد نویسی تمیز و اینکه خودم متوجه بشم چیکار کردم که خیلی راحته دیگه، اول میام برای هر چیزی یه پکیج میسازم ( مثلا برای adapter هام یه پکیج و برای Activity های مربوط به هم یه پکیج و... ) و در مرحله بعد برای هر بخشی که کد نویسی یکم دشوار شده و ممکنه بعدا یادم بره میام کامنت فارسی میزارم که مثلا توی این قطعه کد اومدم اینکار رو کردم&quot;.خلاصه اینکه به این نتیجه رسیدم که بدون معماری هم میتونم تمیز کد بزنم و بعدا بفهمم هر کدی داره چه کاری انجام میده اما غافل از اینکه معماری رو درست متوجه نشدم و اهمیت کار با اون رو درک نکردم. اما واقعا اهمیت استفاده از معماری ها چیه؟ببینید دوستان، شما زمانی که یه برنامه نسبتا بزرگ و پر حجم مینویسید، هزار و یک خطا در انتظار شماست. مثلا یه قسمت از برنامه که دارید یه ریسایکلر ویو رو نمایش میدید، یهو برنامه کرش میکنه و بسته میشه و اررور Memory leak دریافت میکنید؛ حالا شما هزار هم که داخل کد خودت به فارسی کامنت گذاری کردی باشی ربطی به هندل کردن یا بهتره بگم مدیریت کردن یه همچین خطایی نداره و اینجاست که میگی کاش از معماری استفاده میکردم. چون معماری ها میان و تو رو مجبور به پیروی از قوانینی میکنن که تا حد بسیار زیادی جلوی این خطا هارو میگیره اما این هم تنها مزیت معماری نیست...خوب پس بریم سراغ مزیت مهم دیگه ای که استفاده از معماری برای ما به ارمغان میاره. بزارید اینطوری بگم که معماری یعنی کد زدن به سبک کد نویس ها و برنامه نویس های بزرگ ( هر چند در ابتدا ممکنه یکم براتون دشوار باشه اما همین که درکش کنید میفهمید که چقدر درک و فهمتون نسبت به برنامه نویسی وسیع تر میشه ) . یکی از مهمترین روش ها برای پیشرفت سریع و چشم گیر شما در حیطه برنامه نویسی، اینه که شما عضوی از جامعه برنامه نویس های جهانی بشید. یعنی چی؟ آیا باید داخل سایت خاصی ثبت نام کنم؟ یا باید پولی پرداخت کنم؟ خیر...نیازی نیست این کارها رو انجام بدید. کافیه معماری و کد نویسی تمیز رو یاد بگیرید. چه ربطی داره اصلا این دو مقوله به هم؟ربطش اینه که برنامه نویس های جهانی که اکثریت اون هارو خارجی ها تشکیل میدن، گروهی از افراد هستن که دارن از معماری ها پیروی میکنن و با استفاده از تکنیک های کد نویسی تمیز کد میزنن و برنامه مینویسن. پس اگر پس فردا یه فریم ورک جدید یا کتابخونه جدید وارد بازار شد، به جای اینکه منتظر بمونید که چند سال دیگه قراره یه آموزش کامل فارسی از اون کتابخونه بیاد بیرون، کافیه برین و سورس برنامه نمونه اون کتابخونه رو از بخش مربوط به اون سایت از گیت هاب دانلود کنید و به کد ها نگاهی بندازین تا همه چی بیاد دستتون. اما اگر درک شما از کد زنی پیشرفته پایین باشه و نه معماری بلد باشید و نه کد نویسی تمیز، چطور میخواید اون سورس رو متوجه بشید؟ جز اینه که از ادامه تجزیه و تحلیل اون سورس بی خیال شده و باز میشینید منتظر آموزش های فارسی؟ پس هر چه زودتر با معماری و درک کد نویسی پیشرفته تر و بهتر و تمیز تر آشنا بشید و یاد بگیرید. اما همچنان قابلیت های استفاده از معماری ادامه داره...فرض کنید که شما برنامه ای بزرگ نوشتید برای سایت خودتون یا مشتری یا حتی استارت آپ خودتون رو راه اندازی کردید و برای اون یه اپ ساختید؛ خوب شما داخل برنامه از معماری و روش های کد نویسی پیشرفته تر و تمیز تر استفاده نکردید. حالا برنامه شما برخی از آبجکت های ساخته شده و اشیاء به وجود اومده رو نگه میداره و به آشغال جمع کن جاوا اجازه پاک کردن اون آبجکت ها از حافظه Heap رو نمیده. چه اتفاقی رخ میده؟ اگر این اتفاق زیادی به وقوع بپیونده که برنامه کرش میکنه و آبروتون میره اما اگر کرش نکنه و در اون حد اوضاع خراب نباشه چی؟ خوب ما فرض میکنیم که شما تصمیم گرفتید برنامه تون رو بروزرسانی کنید و یه نسخه جدید برای کاربر بفرستید؛ در این موقعیت اگر کد نویسی اپ شما درست نباشه و مدیریت حافظه داخل اپ به درستی صورت نگرفته باشه و آبجکت هایی داخل رم باقی مونده باشن، متاسفانه برنامه شما نمیتونه آپدیت بشه و باید به تک تک کاربراتون بگید که مشکل از اپ شماست نه از گوشی اونا و اونا باید اول نسخه قبلی نرم افزار رو پاک کنن و سپس نشخه جدید رو نصب کنن. پس میبینید که با استفاده نکردن از قواعد و مقررات کد نویسی جهانی هم عرصه رو برای خودتون تنگ میکنید و هم کار رو برای مشتری ها و کاربراتون. پس هر چه زودتر شروع کنید بهتره...سخن اخر :معماری ها و کد نویسی تمیز خیلی قابلیت ها به شما میده که به نظر من مهمترین قابلیت، افزایش درک شما در کد نویسی هست. پس اگر با این روش ها قهر بوده اید و فکر میکردید بدرد نخور هستند، هرچه زود تر دسته گلی خریده و با آنها آشتی کنید...به امید روزای بهتر...</description>
                <category>علیرضا احمدی</category>
                <author>علیرضا احمدی</author>
                <pubDate>Mon, 22 Apr 2019 09:00:43 +0430</pubDate>
            </item>
            </channel>
</rss>