<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد نصرآبادی</title>
        <link>https://virgool.io/feed/@mmnasrabadi</link>
        <description>توسعه دهنده‌ی نرم‌افزار تلفن همراه (IOS/Android)</description>
        <language>fa</language>
        <pubDate>2026-06-10 19:37:00</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/28933/avatar/XbnRL7.png?height=120&amp;width=120</url>
            <title>محمد نصرآبادی</title>
            <link>https://virgool.io/@mmnasrabadi</link>
        </image>

                    <item>
                <title>extension on Codable to Swift</title>
                <link>https://virgool.io/@mmnasrabadi/extension-on-codable-to-swift-nuwmrdp8521e</link>
                <description>امروز می خواهیم با Codable  کار کنیم. البته اگه سرچ کوچکی کنیم آموزش‌های فراوانی پیدا میشه پس من هک میخوام بهتون یاد بدم برای افرادی که استفاده از Codable رو بلد هستند.ما می دانیم که Codable یک پروتکل عالی برای کار با مدل ها و Json در لایه api است.اما نمی توان بر روی خود Codable یک extension بزنید:Non-nominal type ‘Codable’ (aka ‘Decodable &amp; Encodable’) cannot be extendedاگه لازم داریم یک متد خاص روی مدل‌ها اعمال باشه باید برای هر مدل، یک extension بزنیم و متد را داخلش copy &amp;  pase کنیم که باعث کثیفی کد میشه .برای هر Codable نیاز به یک extension مجزا دارد:راه خوب اینه که متدهای مشترک  extension بشن ولی چطور Codable رو مجبور کنیم؟؟ راه حل ساده اینه که ما از زبان سوییفت یاد بگیریم همینطور که شاید بدونیم خود Codable یک ‌‌پروتوکل است و ما میتوانیم پروتوکلی بسازیم که از یک پروتوکل دیگه تشکیل شده خب پس ما هم با استفاده این روش پروتوکل جدیدی از Codable برای خودمون میسازیم تا کاستی‌ها و محدودیت‌های اصلی رو نداشته باشه :حالا بجای استفاده از Codable دیفالت از CodablePro استفاده میکنیم:و روی پروتکل جدید کدهای مشترک رو وارد میکنیم :میبینیم که حالا User ما تابع جدید رو درون خودش داره بدون اینکه ما دوباره کد اضافی بزنیمیک CodablePro واقعی و کامل که من در پروژه هام استفاده کنم : https://gist.github.com/MMnasrabadi/2258f563d7bf027aa624b8cf0ad0f7d7#file-codablepro-swift سخن آخر:ما یک CodablePro ساده را پیاده سازی کردیم.امیدوارم با مفید باشه. همیشه سرچ کنیداگر مقاله و پروژه را دوست داشتید ❤️ فراموش نکنید که می توانید مرا در ویرگول دنبال کنید.ممنون از خواندن!</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Mon, 23 Mar 2020 20:46:19 +0430</pubDate>
            </item>
                    <item>
                <title>با هم قراره کرونا رو شکست دهیم</title>
                <link>https://virgool.io/@mmnasrabadi/%D8%A8%D8%A7-%D9%87%D9%85-%D9%82%D8%B1%D8%A7%D8%B1%D9%87-%DA%A9%D8%B1%D9%88%D9%86%D8%A7-%D8%B1%D9%88-%D8%B4%DA%A9%D8%B3%D8%AA-%D8%AF%D9%87%DB%8C%D9%85-i3ytcexfbmmv</link>
                <description>با در خانه ماندن و شرکت نکردن در اجتماعمناطق خطرخیز کرونا به دلیل ازدحام افراد پیادهالان بیش‌از یک ماه‌ی هست که کشور ما مستقیما درگیر کرونا شده. یک ویروس که از چین شروع شده و گفتن از سوپ خفاش بوده ولی به سرعت اعلام کردن نه از سوپ نبوده و از حیوونی شبیه مورچه‌خوار اومده و اسمش شد Coronavirus Disease 2019 (COVID-19) .خب بگذریم حالا چیکار کنیم؟  هیچی بشینیم توی خونه مسافرات نریم دورکاری کنیمعید دیدنی نریم تا زنجیره انتقال ویروس نباشیم، شاید ما قوی باشیم و دوران شوم این ویروس رو با کمی سختی پشت سر بگذاریم ولی بزرگ‌ترها که از سر احترام میریم دیدنی‌شون چه‌گناهی کردن ؟ بدن اونا به قوت ما که ویتامین D بیشتری داریم ضعیف حساب میشه میشه گفت نمیشه همش نشست توی خونه گاهی کاری پیش میاد که بریم بیرون حالا چیکار کنیم از کجا بریم که احتمال کرونا گرفتنمون کم بشه ؟ بله از اونجایی که تردد آدم‌های کمتری‌ه. از کجا بفهمیم کجا تردد زیاد بوده ؟ از برنامه نقشه و مسیر یاب نشان  تیم نشان با داده‌های آماری که دستشون میرسه برداشتن یک خدمت جدید به برنامه‌شون دارن اضافه میکنن به نام مناطق پرتردد این مطلب رو بخونید تا ببینید چی‌شده . دانلود نقشه و مسیریاب نشان</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Wed, 18 Mar 2020 20:26:02 +0330</pubDate>
            </item>
                    <item>
                <title>تئوری اسب مرده!</title>
                <link>https://virgool.io/@mmnasrabadi/%D8%AA%D8%A6%D9%88%D8%B1%DB%8C-%D8%A7%D8%B3%D8%A8-%D9%85%D8%B1%D8%AF%D9%87-ml6s04cxokta</link>
                <description>از اسب مرده پیاده‌شیماین تئوری یکی از جذاب‌ترین  تئوری‌هایی است که در این مدت خواندم. یک تئوری که کاربردهای وسیعی در  استارتاپ‌ها، مدیریت یک تیم و حتی مدیریت یک کشور دارد. فارغ از معنی عمیق  این تئوری، طنزی که در بیان این تئوری وجود دارد خیلی آن را قابل فهم‌تر  می‌کند.یک ضرب‌المثل قدیمی هندی می‌گوید: اگه دیدین سوار یه اسب مرده هستید، بهترین استراتژی اینه که پیاده شین.در حالی که معمولا استراتژی‌های  پیشرفته‌تری در دولت‌ها، شرکت‌ها، سیستم‌های آموزشی و ... استفاده می‌شود.  این استراتژی‌ها حتما برای شما هم آشنا هستند:- یه شلاق سنگین‌تر بخریم!- سوارکار رو عوض کنیم!- یک کمیته تشکیل بدیم تا اسب رو بررسی کنیم!- کشورهای دیگر رو ببینیم که تو فرهنگشون چطوری با اسب مرده سوارکاری می‌کنن!- استانداردهای زنده موندن رو پایین بیاریم تا این اسب هم زنده محسوب بشه!- در طبقه‌بندی جدید اسب‌ها، این اسب رو در دسته «زنده آسیب‌دیده» قرار بدیم!- با افرادی قرارداد ببندیم که سوارکاری اسب رو انجام بدن!- چند اسب مرده دیگه رو هم با هم افسار بزنیم تا سرعت بیشتر بشه!- پول بیشتری خرج کنیم و به اسب مهارت‌های لازم رو آموزش بدیم تا کاراییش بیشتر بشه!- تحقیق کنیم ببینیم تاثیر یک سوارکار لاغرتر روی بالارفتن سرعت اسب چقدره!- قانونی وضع کنیم که به اسب‌های  مرده غذا ندهیم. این از لحاظ اقتصادی بسیار به صرفه است و باعث می‌شه این  اسب‌ها حتی از بقیه اسب‌ها بیشتر به نفع اقتصاد باشند!- مستند «معیارهای کارایی اسب» رو بازنویسی کنیم که قاعدتا شامل این اسب هم می‌شه، تا خودش متوجه بشه!- اسب مرده رو به یک پست مدیریتی ارتقا بدیم!مفهومی که هنگام خواندن این ضرب‌المثل تداعی می‌شود، مفهوم Root Cause است. اغلب مشکلاتی که در اطراف ما  وجود دارد دارای دلایل واضح و سطحی است که غالبا منجر به حل آن مشکل  نمی‌شود. از طرفی، اگر تلاش کنید برای یک مشکل عمیق فکر کنید و به Root Cause آن برسید، مشکلات به طور عجیبی حل می‌شوند و حتی با حل یک مشکل، مشکلات دیگری نیز خود به خود حل می‌شوند.</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Sat, 09 Nov 2019 16:45:52 +0330</pubDate>
            </item>
                    <item>
                <title>پلاگین CodeGlance برای اندرویداستدیو !...</title>
                <link>https://virgool.io/devAndroid/%D9%BE%D9%84%D8%A7%DA%AF%DB%8C%D9%86-codeglance-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%B3%D8%AA%D8%AF%DB%8C%D9%88-cj9cgwao6fk1</link>
                <description>سلامماه قبل تیم‌اپل یک پلاگین روی xcode به‌نام ‌MiniMap معرفی کردن که خیلی بچه‌های ios رو خوشحال کرد و فکر کردن انقلابی توی کدنویسی دنیا اتفاق افتاده ولی یک‌چیز میگم یادتون نره jetbrains is the best foreverحالا چرا ؟؟ چون از سال ۲۰۱۵ این ویژگی عادی توی intellij idea بوده (هسته اصلی اندرویداستدیو کنونی)پلاگین Code glance :یک پلاگین مختص تمام پلتفرم‌هایی که با هسته intellij هستن، از جمله اندرویداستدیو .میتونید از محل زیر جهت نصب این پلاکین اقدام کنید :On MAC:Go Preference &gt; Plugins &gt; Browse repositories, then search  codeglance.On Linux or Windows:Go File &gt; Settings... &gt; IDE Settings &gt; Plugins &gt; Browse repositories, then search codeglance.یا دستی فایل پلاگین رو دانلود کنید و از قسمت import plugins وارد کنید .تصویرس پلاگین داخل اندرویداستدیو :
به ابزار متکی نباشیم و هر روز چیز جدید یاد بگیریم .....در پناه حق</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Mon, 23 Sep 2019 10:03:28 +0330</pubDate>
            </item>
                    <item>
                <title>دو پلاگین اجباری اندرویداستدیو !</title>
                <link>https://virgool.io/devAndroid/%D8%AF%D9%88-%D9%BE%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A7%D8%AC%D8%A8%D8%A7%D8%B1%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%B3%D8%AA%D8%AF%DB%8C%D9%88-bdnrhzljtvnj</link>
                <description>سلاماندرویداستدیو همیشه دو تا پلاگین کم داره :۱.   انجام کارهای تکراری مثل حدف اپ از روی گوشی یا حذف کش برنامه توسط adb ۲.  پلاگین اتصال گوشی به دیباگر با وای‌فای (پست قبلی)از این دوتا پلاگین استفاده کنید قول میدم پوست‌تون شفاف‌تر بشه.۱ . پلاگین ADB Idea :پلاگینی که دستورات پر کاربرد adb رو براتون سریع اجرا میکنه.این دستورات دستورات زیره :ADB Uninstall AppADB Kill AppADB Start AppADB Restart AppADB Clear App DataADB Clear App Data and RestartADB Revoke PermissionsADB Start App With DebuggerADB Restart App With Debuggerمیتونید از محل زیر جهت نصب این پلاکین اقدام کنید :On MAC:Go Preference &gt; Plugins &gt; Browse repositories, then search  ADB Idea.On Linux or Windows:Go File &gt; Settings... &gt; IDE Settings &gt; Plugins &gt; Browse repositories, then search  ADB Idea.یا دستی فایل پلاگین رو دانلود کنید و از قسمت  import plugins  وارد کنید . تصویرس پلاگین داخل اندرویداستدیو :ADB Idea- دو راه برای اجراش وجود داره :از تب‌های بالا :Through the Tools-&gt;Android-&gt;ADB Idea menuبا کلید های میانبر :By searching for &amp;quotADB&amp;quot in &amp;quotFind Actions&amp;quot (osx: cmd+shift+a, windows/linux: ctrl+shift+a) ۲. پلاگین  ADB WiFi Connect :پلاگینی که کمک میکنه شما tcp رو کنترل کنید !!!!!!!!!!!توی پست قبلی یاد دادم چطوری همیشه گوشی رو برای کار با سیم به کامپیوتر وصل نکنیم و البته ما میدونیم هر کاری که تکراری باشه میشه براش کدنویسی کرد تا با کمترین دخالت ما به ترتیب کارها رو انجام بده پس بجای یک روال همیشگی زدن کد adb connect و وارد کرد ip این پلاگین با یک حرکت گوشی رو بدون سیم به دیباگر وصل میکنه :)  بدون هرچ کار اضافه‌ای سمت شما .....قابلیت ویژه : اتصال و مدیرت چندین دستگاه متصل با wifi و بدون سیم به دیباگرمسیر نصب :On MAC:Go Preference &gt; Plugins &gt; Browse repositories, then search  ADB WiFi Connect.On Linux or Windows:Go File &gt; Settings... &gt; IDE Settings &gt; Plugins &gt; Browse repositories, then search  ADB WiFi Connect.یا دستی فایل پلاگین رو دانلود کنید و از قسمت  import plugins  وارد کنید . وقتی نصب میشه یک آیکون جدید براتون بالای توبار اندرویداستدیو میاد :محیط پلاگین : ADB WiFi Connect.همیشه سرچ کنیم . تقریبا برای همه چیز راه حل بهتر از کاری که ما میکنیم وجود داره در پناه حق</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Sun, 22 Sep 2019 16:39:09 +0330</pubDate>
            </item>
                    <item>
                <title>اتصال گوشی بدون سیم به اندرویداستدیو و دیباگر</title>
                <link>https://virgool.io/@mmnasrabadi/%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D8%AF%D9%88%D9%86-%D8%B3%DB%8C%D9%85-%DA%AF%D9%88%D8%B4%DB%8C-%D8%A8%D9%87-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D8%AF%DB%8C%D9%88-%D9%88-%D8%AF%DB%8C%D8%A8%D8%A7%DA%AF-j0iujj41neuj</link>
                <description>سلامهمه می‌دونیم موبایلِ برنامه‌نویس‌هایِ اندروید به دلیل شغل‌شون باطری‌های داغونی داره چون همیشه برای اتصال به دیباگر اندروید‌استدیو یا همون لاگ‌کت وصل بشه اما ....واقعا به ذهن‌تون خطور نکرده؟؟ شاید بدونید چه چیزی رو میخوام بگم یا سوالی که مطرح کردم توی ذهنتون به وجود آمده باشه؟ برای خودم همیشه سوال بود که الان پروتوکل‌های زیادی هست و همه‌چیز داره وای‌فای خور میشه :) چرا ما هنوز سیم وصل میکنیمسرچ کنیم سرچ کردم و توی اولین نتیجه یه مطلب محبوب دیدم که دقیقا سوال منو پرسیده بود و جوابش برای سال ۲۰۱۰ بود اون موقع سال ۲۰۱۴ بود :| و من سه سال بود با دردسر، کدنویسی میکردم. حالا جواب  ?توی این پست میخوام یاد بدم چطوری بدون اتصال سیم، گوشی رو به کامپیوتر و دیباگر اندروید‌استدیو وصل باشه پروتکل‌ tcp/ip : یه پروتکل توی لایه شبکه‌س . مراحل اتصال با tcpip ۱.  [باید] کامپیوتر و گوشی‌تون توی یک شبکه اینترنت باشه۲.  از تنظیمات، ip گوشی که متصل به اینترنت هست رو خارج کنید۳.  گوشی رو باید حداقل یک بار به کامپیوتر وصل کنید و دستورات زیر رو در ترمینال اندروید‌استدیو یا cmd  وارد کنید :$ adb tcpip 5037که تصویر زیر رو میبینید که سیستم از حالت usb حالت tcpip رو روی پورا ۵۰۳۷ فعال میکنه(توجه: بهتره از دو پورت پیشنهادی ۵۵۵۵ و ۵۰۳۷ استفاده کنید که برنامه دیگه‌ای تداخل ایجاد نکنه براتون)۴.  حالا ip  گوشی مورد نظر که به کامپیوتر هم وصل‌ه از قسمت تنظیمات گوشی به دست بیارید. و بعد کد زیر رو در ترمینال وارد کنید تا مطمئن باشید گوشی به سیستم وصل‌ه و adb متصل شده بهش :$ adb devicesتصویری بخوام بگم به صورت زیر نشون میده یک گوشی به سیستم من وصل‌ه :۵.  حالا دستور زیر روی داخل ترمینال وارد کنید :$ adb connect 192.168.0.152:5037که شامل ip دستگاه شما و پورت اتصال شماس :خب حالا گوشی رو جدا کنید و لذت ببرید . * برای چک کردن اینکه آیا بعد از جدا کردن کابل هنوز adb به گوشی متصل مانده دوباره دستور زیر رو اجرا کنید :$ adb devices* برای قطع کردن اتصال از دستور disconnect استفاده کنید :*  برای قطع کردن تمام اتصالات، tcpip رو با کد زیر قطع کنید : * *  امان از تنبلی .ممکنه بگید خب حال ندارم برم دنبال ip گوشیم، خب سرچ کنید با کد دستوری زیر زمانی که گوشی به سیستم متصل ه و اینترنت هم وصل‌ه، adb به شما اطلاعات شبکش رو میده که ip اون وسط‌اس :‌$ adb shell ip addr show wlan0راه حل بهتر یک پلاگین‌ه که توی پست بعدی معرفی میکنم.در پناه حق</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Sat, 21 Sep 2019 01:36:21 +0430</pubDate>
            </item>
                    <item>
                <title>سرآغاز یک شروع دوباره</title>
                <link>https://virgool.io/@mmnasrabadi/%D8%B3%D8%B1%D8%A2%D8%BA%D8%A7%D8%B2-%DB%8C%DA%A9-%D8%A2%D8%BA%D8%A7%D8%B2-omwwbilj8v7a</link>
                <description>هی میگن برو ویرگول بنویسقبلنا میگفتن برو گیت بنویس‌آ حالا شده ویرگولاندروید کار بودم که همیشه وقتی یک تیکه کد تمیز، کلاس یا یک لایبرری دست‌سازم رو به کسی میدادم میگفت بابا خفن، برو داخل گیت‌هاب بنویس، برای آیندت خوبه، رزومه میشه برنامه‌نویسی اندروید رو بعد ۵ سال در اوج گذاشتم کنار (خودش داستان داره که چی شد اندروید نویسم شدم ولی فقط تا همینجا که خدا بیامرزه پدر استاد راهنمای خوبی که از ترم ۴ هول‌و‌بلای کار رو انداخت بجونمون استاد اکبرزاده)اوایل سربازی بود که رفتم سراغ ios نوشتن حالا بعد از سربازی، حس نوشتن اومده . ویرگول مینویسم ان‌شاالله[ویرگول] کدهاش هم گیت میکنم تا بماند برای همه.همچی در هم، گاهی هم یک دلنوشته swift.ios.xcode.java.android.androidStudio.plugins.php.api.داشتم میزدم پست منتشر بشه فکر کردم دیدم که واقعا برای چی میخوام بنویسم میخوام بنویسم به خاطر خودخواهیم، چون یاد دادن به دیگران حس خوب بهم میده</description>
                <category>محمد نصرآبادی</category>
                <author>محمد نصرآبادی</author>
                <pubDate>Thu, 05 Sep 2019 19:00:47 +0430</pubDate>
            </item>
            </channel>
</rss>