تقلب Zeus:
از اونجایی که این مطلب رو دوست عزیزی نوشتن که خوره دنیای کامپیوتر و نرمافزار هستند ؛ لازمه برای درک بهتر کاربردهای احتمالی در دنیای نرمافزار یه سری تقلب به دوستان الکترونیکی و سختافزاری برسونم شاید باعث بشه که فلسفه و کاربرد این مساله رو بهتر نشون بده.
به احتمال خیلی زیاد اسم سی شارپ ( #C ) به گوشتون آشنا باشه ! توی ایران اغلب افرادی که دستشون به کیبورد خورده خودشون رو برنامهنویس میدونن و اغلب مسلط به زبان برنامهنویسی سی شارپ هم هستند !
هیچ کسی منکر این قضیه نیست که دات نت واقعا برنامهنویسی برای پلتفرم ویندوزی رو ساده کرده ؛ اونقدر ساده که حتی مادربزرگها هم کدنویس شده اند 🙂 حالا فرض کنید این مقدار از راحتی رو توی دنیای متن باز لینوکس داشته باشید ؛ واقعا وسوسه کننده است ؛
شاید شما هم قبلا رزبری رو تهیه کرده باشید به امید این که بتونید روش برنامه خودتون رو بریزید اما کار کردن با لینوکس و سرکله زدن با GCC شما رو خسته کرده باشه و کلا قیدش رو زده باشید ! این مقاله دقیقا بدرد شما میخوره ؛ چون به سادگی قادر خواهید بود برنامه دلخواه خودتون رو با استفاده از دات نت کُور ( Net Core. ) بر روی هر نوع برد لینوکسی که دوست دارید بنویسید.
این که ماکروسافت پا به عرصه متن باز گذاشته ؛ واقعا جای تامل داره ؛ چرا میگیم ماکروسافت پا به عرصه متن باز گذاشته ؛ دقیقا بخاطر همین فعالیت های اخیرش در خصوص متن باز منتشر کردن سورس ها ، نمونش ویژوال استودیو کد ؛ یا دات نت کُور و…
Net Core. هنوز از رابط گرافیکی (GUI) پیشتیبانی نمیکنه البته قراره توی ورژن سوم GUI هم بهش اضافه بشه ؛ ولی خوب کی اهمیت میده هنوز خیلی کارها هست که میشه انجام داد ؛ دعوتتون میکنم که این مقاله و قسمت های بعدی رو مطالعه کنید.
قبلاً اینجا و اینجا درباره بخشهایی از دنیای فوقالعاده و گسترده نرمافزار صحبت کردیم، و حالا نویسنده نه چندان محبوب سیسوگ بین الکترونیکیها! قراره توی این مقاله توضیح بده چطور با یه حمله جانانه قسمتی از دنیای الکترونیک رو تسخیر کنیم!
معمولاً توی بحثهای گاه و بیگاهی که با دوستان الکترونیکی دارم، وقتی کار به جاهای باریک میکشه و عرصه برشون تنگ میشه سریع یه برد از توی جیبشون در میارن و میگن ببین برای ما همین کافیه! همین رو وصل میکنیم به منبع تغذیه و پروژه کار میکنه، مثل شما لازم نیست کامپیوتر و سرور و n تا نرمافزار نصب کنیم تا بالاخره پروژه بیاد بالا!
هرچند من محکوم میکنم این استدلال رو اما به هر حال قسمتی از حرفشون منطقیه!
حالا ما قراره با یه لشکر کشی جانانه نات آنلی این بخش از دنیاشون رو تصرف کنیم، بات آلسو در پایان پا را فراتر بگذاریم و ادعا کنیم میتونیم پروژههایی رو انجام بدیم که احتمالاً درصد زیادی از دوستان الکترونیکی حداقل به تنهایی قادر به انجامش نیستند.
شاید برای شما مفید باشد: آموزش رزبری پای از 0 تا 100 از مقدماتی تا پیشرفته
ندای وظیفه
برای شروع نبرد اول باید جنگجویان رو معرفی کنیم.
به لطف سیستم عامل روی این بردهای بامزه، میشه با بعضی زبانهای برنامهنویسی سطح بالا برنامه نوشت و از دست پیچیدگیهای زبانهایی مثل C یا ++C راحت شد.
و در نهایت سیستم عامل که حلقه ما رو تکمیل میکنه، هر چند سیستم عامل پیشنهادی مخصوص این بردها Raspbian هست اما میشه روی رزبری پای سیستم عاملهای مختلفی نصب کرد.
نقشه حمله
نقشه ساده است، یه پروژه خیلی مقدماتی مینویسیم و روی رزبری پای اجرا میکنیم، و وقتی دشمن هنوز درگیر حمله اولیه است، ضربه نهایی رو بهش وارد میکنیم!
حمله
طبیعتاً اولین گام انتخاب برد مناسبه، از اونجایی که ما زبان برنامهنویسی .Net Core رو انتخاب کردیم حتماً باید رزبری پای ۲ یا ۳ رو داشته باشیم، امکان نصب .Net Core روی رزبری پای ۱ یا زیرو نیست.
من یه برد رزبری پای ۳ از بچههای سیسوگ قرض گرفتم!
اینجا میتونید لیست بعضی از سیستم عاملهایی که میشه نصب کرد رو ببینید، ما Raspbian Stretch Lite رو انتخاب کردیم، چون هم حجم کمتری داره و هم سبکتره و طبیعتاً منابع و انرژی کمتری مصرف میکنه. هرچند ممکنه نداشتن واسط گرافیکی برای بعضیها خوشایند نباشه، شما میتونید سیستم عامل محبوب خودتون رو دانلود کنید.
نصب سیستم عامل روی رزبری
اول فایل فشرده رو از سایت دانلود کنید، اگه خیلی از کامند زدن خوشتون نمیاد میتونید از نرمافزار Etcher استفاده کنید که برای لینوکس، ویندوز و مک نسخه قابل نصب داره.
کار کردن باهاش هم اینقدر آسونه که نیازی به توضیح نیست، فایل رو انتخاب میکنید، درایو MicroSD رو پیدا میکنید و تمام.
اگه هم دوست ندارید نرمافزار اضافه نصب کنید، توی لینوکس میتونید از این دستور استفاده کنید:
اول دستور زیر رو بزنید تا لیست پارتیشنها رو ببینید:
1 | lsblk |
که بسته به پارتیشنهایی که دارید ممکنه چیزی شبیه این ببینید:
توی تصویر بالا دیسک مورد نظر ما mmcblk0 هستش و بعد دستور زیر رو با جایگزین کردن اسم فایل و اسم پارتیشن اجرا میکنیم.
1 | sudo dd bs=4M if=2018-11-13-raspbian-stretch-lite.img of=/dev/mmcblk0 status=progress conv=sync |
به همین سادگی، با هر روشی که رفتید مموری رو داخل رزبری پای بگذارید و روشنش کنید.(خود من چند ساعت بخاطر استفاده از رم ریدر خراب وقتم تلف شد!)
نام کاربری و پسورد پیشفرض pi , raspberry هستش،
قبل از اینکه بریم سراغ پروژه یه کار مهم دیگه باید بکنیم و اون انجام تنظیمات شبکه برای رزبری هستش.
1 | sudo raspi-config |
این دستور رو بزنید تا واسط گرافیکی به سبک صدسال پیش اما فوق العادی کاربردی رزبری رو ببینید:
ابزار دم دستی برای اسکرین شات گرفتن تو اون محیط پیدا نکردم!
خیلی ساده گزینه Network Options رو انتخاب کنید، اگه بردتون Wi-Fi رو پشتیبانی میکنه که عالیه، اسم شبکه و کلمه عبورش رو وارد کنید و تمام، اگه هم از شبکه داخلی استفاده میکنید که آی پی رو مشخص کنید و تمام. (پیشنهاد میکنم اگه از کاراکترهای ویژه مثل # تو کلمه عبورتون استفاده کردید اول مطمئن بشید که کارکاتر درست رو وارد میکنید چون ممکنه کیبوردها مثل هم نباشند)
رزبری رو فعلاً همینجا رهاش میکنیم و میریم سراغ پروژه.
پروژه چی شد؟
البته واضح و مبرهن است که ما اینجا قرار نیست آموزش برنامه نویسی .Net Core رو قرار بدیم. اگه علاقه داشته باشید میتونید اینجا روی گیت هاب من سورس کامل پروژه رو ببینید.
فعلاً توی این قسمت از حمله، تغییر چندانی توی پروژه ایجاد نکردیم، این چند خط رو کمی توضیح میدیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | namespace rpi.Controllers { [Produces("application/json")] [Route("")] [ApiController] public class DataController : ControllerBase { [HttpGet] public async Task<IActionResult> SayHello() { return Ok("Hi from pi!!"); } } } |
این پروژه موقع اجرا روی پورت 5000 اجرا میشه، کل این خطها میگن اگه کسی اومد و من رو با دستور GET فراخوانی کرد (مثلا توی مرورگرش آدرس localhost:5000 رو باز کرد) یه سلامی بهش برسون!
تا اینجا که روی پروژه کار مهمی نکردیم، کار مهم رو فعلاً خود .Net Core انجام میده چون میشه با منتشر کردنش برای arm-7 اون رو آماده انتقال به رزبری پای کرد!
به محل ذخیره پروژه میریم و این دستور رو میزنیم:
1 | dotnet publish -c Release -r linux-arm |
با این دستور خروجی پروژه روی فولدر \bin\Release\netcoreapp2.0\linux-arm\publish قرار میگیره، رزبری رو خاموش کنید، مموری رو مجدداً به کامپیوتر متصل کنید، یه پوشه مثلاً به اسم publish درست کنید و تمام فایلها رو به اون منتقل کنید. (طبیعتاٌ اگه با لینوکس آشنا باشید میدونید که باید توی فولدر home\pi این فولدر رو ایجاد کنید)
مجدداً مموری رو داخل رزبری پای بگذارید و روشنش کنید به داخل فولدری که ساختید برید. بسته به اسم پروژهای که ساختهاید (من اسم پروژه رو rpi گذاشتم) دستوری مشابه این را باید اجرا کنید.
1 | ./rpi |
اگه کانفیگ کارت شبکه رو درست انجام داده باشید میتونید توی مرورگر کامپیوترتون که احتمالاً با رزبری توی یک شبکه قرار داره، آی پی رزبری رو با شماره پورت 5000 بزنید و خروجی زیر رو ببینید:
دشمن پشت دروازه شهر
اگه تونستید خروجی بالا رو بگیرید ، بهتون تبریک میگم!
اینجا، دقیقاً همینجا لحظه فروریختن اولین دژ دفاعی دشمنه! اولین پیروزی در سرزمین سیمها!
اگه هنوز داغ هستید! باید بگم همین مرحله یعنی ما تونستیم (و طبیعتاً باز هم میتونیم!) خیلی از برنامهها که نیاز به پردازش سنگین و عجیب غریب نداره رو بدون کامپیوتر و تجهیزات جانبی روی یک برد فسقلی اجرا کنیم!
و فراموش نمیکنیم که وقتی روی همین بردها اینترنت داریم دسترسی به دنیایی از سرویسهای آنلاین داریم که استفاده از اون تقریباً برای برنامهنویسهای الکترونیک با زبانی مثل C++ ممکن نیست.
با این حال ضربه اصلی رو در قسمت بعدی خواهیم زد!
ورود به دنیای سی شارپ شاید راحت باشه و خیلی سریع بتونید HelloWorld بنویسید اما در این مرحله کسی برنامه نویس نیست. دنیای دات نت هم پیچیدگی ها و ریزه کاری هایی داره که دیگه مادربزرگ شما نمیتونه پیشروی کنه در اون.
نوشتن کد سی شارپ روی رزبری از نظر ماجراجویی ارزش داره. اما به درد کار اجرایی و عملیاتی نمی خوره. حتی اگر رزبری پای 4 با 4 گیگابایت رم هم داشته باشیم بازهم دات نت راه حل خوبی نیست. ما سخت افزار خوب می خریم که کار سطح بالا انجام بدیم نه از ابزارهای سنگین استفاده کنیم.
🙂 فکر میکنم مثالی که دوستمون مطرح کرده بیشتر به این خاطره که نشون بده دات نت چقدر کار برنامه نویسی رو ساده کرده ! که کسی هم نمیتونه منکرش بشه
در خصوص مطلب کاربردی بودن خیلی برمیگرده به کاری که میخواد انجام بشه و نگاهی که ما به سیستم داریم !!
سلام خدمت نویسنده عزیز.
من نمیدونم این مرز بندی های مندرآوردی رو کی درست کرده!؟ اون الکترونیکی که شما ازش حرف میزدین سال 1980 دیگه از بین رفت! اولا، الان هر الکترونیکی ای که برنامه نویسی بلد نباشه بدرد لای جرز دیوار میخوره. چون الان دیگه میکروکنترلر ها و میکرو کامپیوتر ها (همینی که شما باهاش نقشه حمله کشیدید) بخش اعظمی از کار ما الکترونیکی ها با اونا انجام میشه. دوما، وجود برنامه نویس ذاتا بخاطر وجود الکترونیکی هست و بهتره مخلوق همیشه شکرگذار خالقش باشه و بهش احترام بزاره و باهاش سر جنگ نداشته باشه.
سلام
کامنت جالبی بود!
البته همونطور که توی متن هم اشاره شده میدونیم که دوستان الکترونیک و سخت افزاری از C یا ++C برای کد نویسی هاشون استفاده می کنند، اما مقدار تسلطی که به این زبان های فوق العاده دارند و مدل کد نویسی شون فقط اونقدر هست که کارشون رو راه بندازه و تقریبا به اون از لحاظ فنی نمیشه گفت برنامه نویسی! هرچند اینجا منظور ما برنامه نویسی با زبان های سطح بالا بوده.
در مورد نکته بامزه دومتون هم مثل اینه که ادعا کنیم تفنگ های امروزی مدیون اون سنگی هست که قابیل تو سر هابیل زد یا برعکس!
بیشتر در مور .net core که اینچه چی هست و باهاش چه کارها میشه انجام داد
آیا زبان برنامه نویسیه یا فریم ورکه
.net core یک فریم ورک هست و زبان برنامه نویسی اون #C.
به طور معمول برای ساختن API ها برای استفاده توی سایر نرم افزارها استفاده میشه اما توی رزبری پای کارهای جالب دیگه هم میشه باهاش کرد!
ما که چیزی سر در نیاوردیم
لطفا در این زمینه برای علاقه متدان آموزش هایی ارائه بدید یا حد اقل منابع آموزش معرفی کنید
باتشکر
توی کدوم قسمت ابهام داشتید دوست عزیز؟ شاید بتونم بهتر کمک کنم
اگه مربوط به کد نویسی .Net Core میشه ابهامتون خوب یکم مبحث طولانیه اما اگه توی نصب سیستم عامل یا درک کلی مقاله ابهامی وجود داره بفرمایید.