<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهدی رشیدی</title>
        <link>https://virgool.io/feed/@mrashidi</link>
        <description>توسعه دهنده نرم افزار، علاقمند به دنیای متن باز.</description>
        <language>fa</language>
        <pubDate>2026-06-07 08:40:11</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2546/avatar/cqLnZV.png?height=120&amp;width=120</url>
            <title>مهدی رشیدی</title>
            <link>https://virgool.io/@mrashidi</link>
        </image>

                    <item>
                <title>BGPSec چیست و چگونه عمل می کند؟</title>
                <link>https://virgool.io/@mrashidi/bgpsec-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%B9%D9%85%D9%84-%D9%85%DB%8C-%DA%A9%D9%86%D8%AF-tm663vrgy4nq</link>
                <description>پروتکل مسیر­یابی BGP  به شکل پیش­فرض یک پروتکل امن طراحی نشده و دارای مشکلات امنیتی است و با وجود این مشکلات امنیتی مورد حملات امنیتی از جمله Route Hijacking  قرار می­گیرد؛ این مشکل زمانی پیش می­ آید که یک ASمسیری نا معتبر را در شبکه پخش می­کند، به تازگی نوع دیگری از حملات که ترکیبی از BGP Hijacking و Man-In-The-Middle (MITM) است انجام می­شود، در این نوع حمله هکر ترافیک انتقالی در شبکه را به سمت نقطه­ ای خاص هدایت می­کند و پس از آن اطلاعات را به مقصد اصلی می­فرستد، هنگامی که اطلاعات رمزنگاری نشده باشند به­ راحتی برای هکر (MITM) قابل رویت و دست­یابی است.BGP Hijacking Attackچه اقداماتی برای افزایش امنیت BGP انجام شده است؟هم ­اکنون Internet Engineering Task Force (IETF)  اقداماتی برای بالا بردن سطح امنیت Routeها مانند ایجاد RPSL و SIDR انجام داده است. گروه SIDRراهکارهایی برای امنیت BGPتوسعه می­دهند که در این میان می­توان به BGPSec  که کار AS Path Validation  را انجام می­دهد اشاره کرد. BGPSec سعی می­کند از درستی به­روزرسانی های BGP و درستی مسیر طی شده توسط آن­ها اطمینان حاصل کند. BGPSec  بسیار شبیه به Secure BGP  یا S-BGP که در دهه 1990 توسط شرکت BBN Technologies  توسعه داده شده ­اند عمل می­کند. برخلاف RPKI، که مدیریت، توزیع و اجرای آن توسط پنج سازمان ثبت اینترنت منطقه­ای (RIRs) در سرتاسر دنیا انجام می­شود، BGPSec  بخش ناگسستنی از پروتکل BGP است، در نتیجه توسعه و پیاده سازی آن توسط روترهای BGP انجام می­شود. به منظور شکل­ گیری یک ارتباط BGPSec بین دو روتر BGP مشخصه AS_PATH با مشخصه BGPSec_Path در BGP Updates  جایگزین می­شود که عملکرد مشابه اما امنی را به ارمغان می آورد.five Regional Internet Registries (RIRs) in the worldساز و کار BGP در حالت معمولی به چه شکل است؟یک BGP Router  معمولی به هنگام تولید prefix (که وارد BGP  می­شود(، یک مشخصه AS_PATH  می­ سازد که فقط شامل شماره AS (Autonomous System) فعلی است. و در زمانی که یک روتر می­ خواهد BGP Update  را برای BGP های همسایه در AS  های دیگر منتشر کند، شماره AS  خود را از چپ به AS_PATH  اضافه می­کند، به این شکل روتر­ها می­توانند تشخیص دهند که این به ­روز ­رسانی تازه است یا نه، و در حالت تکراری بودن آن را نادیده بگیرند. یک به­ روزرسانی BGP می­تواند شامل تعداد مختلفی پیشوند (prefix) با AS_PATH یکسان و دیگر مشخصه ها بشود. زمانی که روتر می­خواهد یک به­روزرسانی BGP را به اعضای یک Peer Group ارسال کند، فقط یک به­روزرسانی BGP می­ سازد و کپی آن را برای یکایک اعضای گروه ارسال می­کند.BGPSec  چگونه عمل می­کند؟هنگامی که از BGPSec بهره می­بریم، به جای AS_PATH، مشخصه BGPsec_Path  ساخته می­شود و به­ طور کلی مشابه حالت قبل عمل می­کند، با این تفاوت که روتر ASN (Autonomous System Number) مقصد که به­ روزرسانی BGP به آن ارسال می­شود را نیز به Path اضافه می­کند، سپس یک امضای رمزنگاری شده (Cryptographic Signature) با استفاده از این اطلاعات تولید می­کند. برای حفظ یکپارچگی امضاهای تولید شده، روتر ها دیگر نمی­توانند چندین پیشوند(prefix) را در قالب یک به­روزرسانی ارسال کنند، و به دلیل اینکه شماره AS دریافت کننده در به­روزرسانی وجود دارد، باید برای هر همسایه یک به­روزرسانی جداگانه (به همراه یک امضای جداگانه) ساخته شود.BGPSec AS Path Validationبا استفاده از این روش هر جهش (hop) در AS Path  با یک امضای رمزنگاری شده محافظت شده است و روتری که به ­روزرسانی BGPرا که شامل مشخصه BGPSec_Path است دریافت می­کند، می­تواند به­ راحتی درستی AS Path را بررسی کند. برای مثال در نظر بگیرید AS Path  به شکل 791 612 566 باشد. در ابتدا روتر دریافت کننده امضای AS 566را بررسی میکند.  امضا شامل یک “Subject Key Identifier”است که اشاره به گواهینامه RPKI ای دارد که توسط روتر تولید کننده امضا ایجاد شده است، بنابراین روتر دریافت کننده با استفاده از این گواهینامه، درستی امضا را بررسی می­کند. همچنین روتر بررسی می­کند که 566 می­خواهد به­روزرسانی به 612 ارسال کند، در نتیجه امضای ساخته شده در AS 612 را بررسی می­کند، به همین ترتیب چون 612 قرار است به­روزرسانی به 791 ارسال بکند، امضای AS 791 نیز بررسی می­شود، در صورتی که درستی امضای ساخته شده در AS 791 اثبات شود، AS Path معتبر شناخته شده و می­توان از اطلاعات RPKIبرای پیوند دادن (bind) پیشوندهایی که توسط AS 566 تولید شده است، و آن مسیر معتبر (Validated AS Path) استفاده کرد.BGPSec Updatesشرایط لازم برای گسترش BGPSec به چه شکل است؟با گذر زمان و افزایش پشتیبانی ASها از ساز و کار جدید، گسترش فزاینده BGPSec امکان­پذیر است، اگرچه به منظور درست کار کردن BGPSec باید تمامی روترهایی که در مسیر وجود دارند، از روتری که به ­روزرسانی را منتشر می­کند تا روتری که درستی آن را تایید می­کند، از BGPSecپشتیبانی کنند. هنگامی که روتر با قابلیت BGPSec با یک روتر BGP معمولی ارتباط برقرار می­کند، مشخصه BGPSec_Path تبدیل به AS_PATH معمولی شده و تمام اطلاعات امنیتی ساخته شده کنار گذاشته می­شوند. توجه داشته باشید که پیاده سازی RPKI با این روش بسیار متفاوت است، از آنجایی که Regional Internet Registry (RIR) ها Route Origin Authorization (ROA) را تولید می­کنند، هر AS به­طور مستقل و بدون نیاز به پشتیبانی ASهای در مسیر یا تغییر در پروتکل BGP می­تواند اقدام به بررسی RPKI کند.نیازمندی های پیاده سازی BGPSec  چگونه است؟از آنجایی که پروتکل BGPSec تشنه منابع است، پیاده سازی آن می­­تواند بحران برانگیز باشد. به­روزرسانی های BGPSec به سبب در برگرفتن امضاها و اطلاعات پشتیبان حجیم­تر هستند و همچنین تعداد به­روز رسانی های ساخته شده بیشتر است چون هر به­روزرسانی فقط می­تواند یک پیشوند را انتقال دهد؛ از طرفی در هر AS موجود در مسیر بررسی امضا انجام می­شود، در نتیجه زمان بیشتری صرف پردازش به­روزرسانی­ها می­شود. برای نمونه با در نظر گرفتن یک جدول مسیریابی در مقیاس جهان با نیم میلیون پیشوند IPv4 و بطور میانگین چهار جهش AS به 2 میلیون بررسی امضا در شروع کار می­رسیم، که با در نظر گرفتن الگوریتم حتی با پردازشگر (CPU) سریع انجام این محاسبات چندین دقیقه طول می­کشد. روترهای BGPSec نیازمند دسترسی به تعداد زیادی اطلاعات RPKI هستند، در نتیجه به مقدار قابل توجهی حافظه بیشتر نسبت به روترهای معمولی نیاز دارند که منجر به استفاده بیشتر از منابع می­شود.جمع ­بندیهمان­گونه که گفته شد BGPSec  تاثیر به سزایی در بالا بردن سطح امنیت پروتکل مسیریابی BGPدارد اما محدودیت­هایی نیز برای پیاده سازی آن وجود دارد. در مجموع با پیش­رفت تکنولوژی و ارزان­تر شدن منابع، در آینده پروتکل BGP امن تر خواهد بود، حتا اگر این امنیت به قیمت پیچیدگی بیشتر و استفاده از سخت افزار های بزرگتر و سریعتر تمام شود.</description>
                <category>مهدی رشیدی</category>
                <author>مهدی رشیدی</author>
                <pubDate>Mon, 30 Dec 2019 14:02:14 +0330</pubDate>
            </item>
                    <item>
                <title>دقیقا چه کارهایی میشه با Python انجام داد؟ 3 کاربرد اصلی پایتون</title>
                <link>https://virgool.io/Software/what-can-you-do-with-python-the-3-main-applications-s84r494ikaan</link>
                <description>اگر به یادگیری پایتون فکر میکنید -- یا به تازگی یادگیری آنرا شروع کردید -- ممکنه از خودتون بپرسید؟&quot;من دقیقا برای انجام چه کارهایی میتونم از پایتون استفاده کنم؟&quot;خب، این سوال زیرکانه ایه و براحتی نمیشه بهش پاسخ داد، چون پایتون کاربرد های زیادی داره.اما با گذشت زمان من متوجه شدم که کاربرد های پایتون رو میشه به سه دسته بندی محبوب تقسیم کرد:توسعه نرم افزار های تحت وب (Web Development)علم داده (Data Science) -- شامل یادگیری ماشین (Machine Learning)، تحلیل داده (Data Analysis)  و تجسم داده (Data Visualization)اسکریپت نویسی (Scripting)در ادامه راجع به هرکدوم از این دسته ها به نوبت صحبت میکنیم.توسعه نرم افزار های تحت وب (Web Development)فریمورک های وب مثل Django و Flask که از زبان برنامه نویسی پایتون بهتره میبرند، اخیرا محبوبیت خیلی زیاد برای توسعه وب پیدا کردن.این فریمورک ها به شما کمک میکنند که کد سمت سرور (Back-End Code) خودتون رو ایجاد بکنید، این کد با کدی که در دستگاه یا مرورگر کاربر اجرا میشه (Front-End Code) متفاوته. اگر با تفاوت های بین کد سمت سرور (Back-End Code) و کد سمت کاربر (Front-End Code) آشنا نیستید به پاورقی مراجعه کنید.چرا به وب فریمورک نیاز داریم؟چون فریمورک ها کار مارو برای ساختن منطق سمت سرور خیلی راحت تر میکنن، نگاشت URL ها، ارتباط با پایگاه های داده (Databases) و تولید فایل های HTML که کاربرها با استفاده از مرورگر بتوانند بهش دسترسی داشته باشن.از کدوم فریمورک پایتون استفاده کنم؟جنگو - یکی از بهترین فریمورک های تحت وب بر پایه پایتونجنگو (Django) و فلسک (Flask) دو فریمورک محبوب پایتون هستن، اگر تازه شروع به یادگیری کردید توصیه میکنم یکی از این دو را انتخاب کنید. تفاوت های Django و Flask چیه؟فلسک - یکی دیگه از فریمورک های محبوب تحت وب با پایتونیک مقاله خیلی خوب در این مورد وجود داره که توسط Gareth Dwyer نوشته شده، اجازه بدید بخشیش رو اینجا نقل قول کنم:شروع نقل قولتفاوت های اصلی :از ویژگی های اصلی فلسک (Flask) میشه به سادگی (simplicity)، انعطاف پذیری (flexibility)، فلسک حداقل ابزار برای ایجاد بکند مورد نیازتون رو در اختیار میگذاره، به شدت دستتون بازه و میتونید برای هر موضوعی از کتابخانه مناسب کار خودتون استفاده بکنید. جنگو (Django) یک بسته کامل از سرویس های مورد نیاز وب رو در اختیارتون میگذاره، که شامل پنل مدیریت (admin panel)، رابط های پایگاه داده (database interfaces)، یک ORM و یک ساختار شخص برای برنامه و پروژه شما میشه.شما یکی از گزینه های زیر رو انتخاب میکنید :فلسک، درصورتی که تمرکز شما روی کسب تجربه و فرصت های یادگیریه، یا اینکه میخواهید کنترل بیشتری روی ابزارهایی که استفاده میکنید داشته باشید (بعنوان مثال پایگاه داده ای که استفاده میکنید و روش ارتباطتون با آن).جنگو، اگر تمرکز شما روی محصول نهاییه. مخصوصا وقتی شما در حال طراحی یک نرم افزار متداول مثل یک وبسایت اخبار، یک فروشگاه اینترنتی، یا وبلاگ هستید، و دوست دارید برای انجام هرکاری یک راه واضح پیش رو داشته باشید.پایان نقل قولبه عبارت دیگه، اگر شما تازه کار هستید، احتمالا Flask گزینه بهتری باشه چون با ابزارهای کمتری سر و کله میزنید، و همچنین اگر به شخصی سازی بیشتری نیاز دارید.با توجه به تجربه دوست مهندس داده من Jonathan T Ho، فلسک با توجه به انعطاف پذیری زیادش نسبت به جنگو برای ساخت وبسرویس ها (REST API&#x27;s) فریمورک مناسب تریه.و اگر میخواهید به سرعت و بدون اتلاف وقت به محصول مورد نظرتون برسید، جنگو گزینه مناسب تریه.خب حالا بریم سراغ مبحث بعدی!علم داده ای (Data Science) -- شامل یادگیری ماشین (Machine Learning)، تحلیل داده (Data Analysis) و دیداری سازی داده ها (Data Visualization) اول از همه، بیاید ببینیم یادگیری ماشین چیه.من فکر میکنم بهترین روش برای توضیح اینکه یادگیری ماشین چیه، استفاده از یک مثال ساده است.فرض کنیم شما میخواهید برنامه ای بنویسید که بصورت خودکار تشخیص بده چه چیزی داخل یک عکسه.بنابراین، با توجه به عکس زیر (تصویر 1)، شما میخواهید برنامه تون تشخیص بده که این یک سگه.تصویر 1 - سگو وقتی عکس زیر (تصویر 2) رو به نرم افزار دادید، تشخیص بده که این یک میزه.تصویر 2 - میزممکنه با خودتون بگید، خب من چند خط کد مینویسم که اینکارو انجام بده. بعنوان مثال اگر تعداد زیادی پیکسل به رنگ قهوه ای روشن وجود داشت، میتونیم بگیم که اون یه سگه.یا شاید، شما بخواید گوشه های داخل عکس رو شناسایی کنید، بعد بگید اگر تعداد زیادی خط مستقیم وجود داشت اون یه میزه.اگرچه، این رویکرد خیلی سریع دچار مشکل میشه، اگر یه سگ سفید داخل عکس بود که هیچ موی قهوه ای نداشت چی؟ اگر عکس فقط قسمت های گرد میز رو نشون میداد چی؟اینجا جاییه که یادگیری ماشین وارد صحنه میشه.یادگیری ماشین معمولا الگوریتمی را پیاده سازی میکند که بصورت خودکار یک الگو را در ورودی داده شده پیدا میکند.شما میتونید مثلا 1000 عکس از سگ و 1000 عکس از میز بعنوان ورودی به یک الگوریتم یادگیری ماشین بدید. سپس اون الگوریتم متوجه تفاوت های بین یک سگ و میز میشه.وقتی شده یک عکس جدید از یک سگ و یا میز بهش بدید، توانایی تشخیص اینکه کدومه (میز یا سگ) رو داره.من فکر میکنم یجورایی شبیه به بچه ای که چیزای جدید یاد میگیره میمونه. چطور یک بچه یاد میگیره که یچیز جدید شبیه به یه سگه یا یک میز؟ احتمالا با استفاده از تعداد نمونه.احتمالا شما مستقیم نمیرید به یک بچه بگید، &quot;اگر چیزی پشمالو و دارای موی روشن قهوه ای داشت، ممکنه یک سگ باشه.&quot;شما احتمالا بهش میگید، &quot;این یه سگه. اینم یه سگ دیگه. این یکی یه میزه، اون یکی هم یه میزه.&quot;یادگیری ماشین هم تقریبا همینجوری کار میکنه.شما میتونید همین ایده رو به موارد زیر تعمیم بدید :سامانه های پیشنهاد دهنده (به یوتیوب، آمازون و نت فلیکس فکر کنید)تشخیص چهرهتشخیص صدادر میان برنامه های کاربردی دیگه.الگوریتم های یادگیری ماشین که احتمالا راجع بهشون شنیده اید:شبکه های عصبی (Neural Networks)یادگیری عمیق (Deep Learning)ماشین بردار پشتیبانی (Support Vector Machines)جنگل تصادفی (Random Forest)شما میتونید از هرکدوم از این الگوریتم ها برای حل مشکل تشخیص عکس که پیش تر در موردش صحبت کردم استفاده کنید.استفاده از پایتون برای یادگیری ماشینتعدادی کتابخانه و فریمورک معروف یادگیری ماشین برای پایتون وجود داره.دو نمونه از محبوب ترین آنها scikit-learn و Tensorflow هست.سایکیت-لرن بصورت پیشفرض شامل یک سری از الگورتیم های یادگیری ماشین معروف میشه، که پیش تر بهشون اشاره کردیم.تنسورفلو بیشتر یک کتابخانه سطح پایینه که به شما اجازه میده الگوریتم های یادگیری ماشین شخصی سازی شده خودتون رو ایجاد کنید.اگر به تازگی یک پروژه یادگیری ماشین شروع کردید، پیشنهاد میکنم برای شروع از scikit-learn استفاده کنید، اگر دچار مشکل برای بهینه سازی شدید، سپس شروع به استفاده از Tensorflow بکنید.چطور میتونم یادگیری ماشین یاد بگیریم؟برای یادگیری پایه های یادگیری ماشین، دوره یادگیری ماشین دانشگاه استنفورد و یا دوره Caltech را پیشنهاد میکنم.توجه داشته باشید که شما باید دانش ابتدایی در مورد حساب و جبر خطی داشته باشید تا بتوانید بعضی از محتواییت این دوره ها را متوجه بشید.سپس به شما پیشنهاد میکنم مطالبی که از آن دوره ها یادگرفتید را در Kaggle تمرین کنید. در این وبسایت افراد در حال رقابت با همدیگه برای پیدا کردن بهترین الگوریتم برای حل مشکل داده شده هستند. در اینجا میتوانید آموزش های خوبی برای تازه کار ها هم پیدا کنید.در مورد تحلیل داده ها (Data Analysis) و دیداری سازی داده ها (Data Visualization) چطور؟برای کمک به فهم این موضوع ها بذارید یک مثال ساده براتون بزنم.فرض کنیم شما برای شرکتی کار میکنید که یک سری محصول بصورت آنلاین میفروشه.پس به عنوان یک تحلیل گر داده، شما یک نمودار میله ای به شکل زیر رسم میکنید :نمودار میله ای 1 - تولید شده توسط پایتونبا توجه به این نمودار ما میتونیم برداشت کنیم که مردها بیش از 400 واحد از این محصول و خانم ها حدود 350 واحد محصول در این یکشنبه خاص خریداری کرده اند.بعنوان یک تحلیل گر داده، شما ممکنه به چند توجیه برای این تفاوت فروش برسید.یکی از توجیه های واضح این هست که محصول مورد نظر بین آقایون از محبوبیت بیشتری نسبت به خانم ها برخوردار بوده. توجیه دیگه ممکنه این باشه که نمونه مورد بررسی ما خیلی کوچیکه و این اتفاق شانسی رخ داده. و آخر اینکه شاید مردا به دلیلی در روز های یکشنبه تمایل بیشتری برای خرید این محصول دارند.برای بررسی اینکه کدام یک از این موارد درسته، شما یک نمودار دیگه مشابه نمودار زیر رسم میکنید.نمودار خطی 1 - تولید شده توسط پایتونبجای اینکه فقط داده ها در روز یکشنبه را بررسی کنیم، به داده های کل هفته نگاه می کنیم، همینطور که مشاهده میکنید، با توجه به نمودار میبینیم که این تفاوت فروش در روز های مختلف شکل پایداری داره.با توجه به این تحلیل، شما ممکنه به این نتیجه متقاعد کننده برسید که این محصول نزد مردها از محبوبیت بیشتری برخورداره.اگر بجای این نمودار، نموداری مشابه زیر می دیدید چطور؟نمودار خطی 2 - تولید شده توسط پایتونخب، چه توجیهی برای این تفاوت فروش در یکشنبه ها وجود داره؟ممکنه بگید، مردها به یه دلیلی یکشنبه ها بیشتر از این محصول خریداری میکنن. یا، شاید این بصورت اتفاقی بوده و دلیل خاصی نداشته.این یک مثال خیلی ساده شده از تحلیل داده ای هست که تو دنیای واقعی اتفاق میافته.من از SQL در هر دو شرکت برای دست یابی به اطلاعات در پایگاه های داده استفاده کردم. سپس از Python و Matplotlib (در گوگل) یا جاوا اسکریپت  و D3.js (در مایکروسافت) برای دیدار سازی و تحلیل این داده استفاده کردم.تحلیل و دیداری سازی داده با پایتونیکی از محبوب ترین کتابخانه ها برای دیداری سازی داده Matplotlib هست.این کتابخانه خوبه برای شروع به دو دلیل :یادگیریش راحتهبعضی از کتابخانه های دیگه مثل Seaborn بر پایه این کتابخانه هستن. پس یادگیری Matplotlib باعث میشه بعدا کتابخانه های دیگه هم راحت تر یاد بگیرید.اسکریپت نویسی (Scripting)اسکریپت نویسی چیست؟معمولا به برنامه های کوچکی که طراحی و نوشته میشن تا وظایف ساده رو بصورت خودکار انجام بدن اسکریپت میگن.بگذارید اینجا یک مثال از تجربه شخصی خودم براتون بزنم.من قبلا در استارتاپ کوچکی در ژاپن کار میکردم، ما یک سیستم پشتیبانی ایمیلی داشتیم که می بایست توسط اون به سوال کاربرانی که از طریق ایمیل پرسیده میشد پاسخ بدیم.وقتی اونجا کار میکردم، باید تعداد ایمیل ها بر اساس کلیدواژه های خاص میشمردم تا بتوانیم ایمیل های دریافتی را تحلیل کنیم.میتونستیم اینکارو دستی انجام بدیم، اما بجاش، یه برنامه ساده نوشتم، یه اسکریپت ساده که این کارو بصورت خودکار انجام بده.درواقع ما اونموقع از Ruby برای اینکار استفاده کردیم، اما Python هم زبان بسیار خوبی برای این مدل کارهاست. بیشتر بخاطر این پایتون واسه اینجور کارها مناسبه، چون نوشتار (Syntax) ساده ای داره و به سرعت میشه یه برنامه ساده باهاش نوشت و تستش کرد.برنامه های  تعبیه شده (Embedded Applications) چطور؟با استفاده از کامپیوتر های کوچک و برد هایی مثل Raspberry Pi و قدرت پایتون تقریبا هرکاری تو این زمینه میتونید انجام بدید.در مورد توسعه بازی های چی؟شما میتونید با استفاده از کتابخانه PyGame برای توسعه بازی ها استفاده کنید، اما این کتابخانه معروف ترین موتور بازی سازی موجود نیست. بیشتر میتونید ازش بصورت تفریحی برای بازی سازی استفاده بکنید، اما اگر دنبال بازی سازی حرفه ای هستید شخصا این کتابخانه رو پیشنهاد نمیکنم.بجاش پیشنهاد میکنم برای اینکار از Unity و زبان برنامه نویسی #C استفاده کنید، که یکی از محبوب ترین موتور های بازی سازیه. یونیتی به شما اجازه میده برای بسیاری از پلتفرم ها از جمله مک، ویندوز، iOS و اندروید بازی بسازید.برای توسعه برنامه های دسکتاپی چکار میشه کرد؟میتونید با استفاده از Tkinter، Kivy، PyQt و زبان پایتون برای دسکتاپ برنامه های مختلفی بنویسید، اما این محبوب ترین گزینه برای توسعه برنامه های دسکتاپی نیست.در عوض، استفاده از زبان هایی مثل جاوا، سی شارپ و سی پلاس پلاس برای اینکار متداول تر هست.اخیره برخی از شرکت ها شروع به استفاده از JavaScript برای توسعه برنامه های دسکتاپی روی آوردن.بعنوان مثال نسخه دسکتاپی نرم افزار Slack از Electron برای توسعه استفاده میکنه. الکترون به شما اجازه میده برنامه های دسکتاپی با استفاده از جاوااسکریپت بسازید.شخصا اگر بخوام سمت توسعه برنامه های دسکتاپ برم از جاوا اسکریپت استفاده میکنم، چون به شما اجازه میده از بخش هایی از کد سمت وب استفاده مجدد بکنید.پایتون 3 یا پایتون 2 ؟من پایتون نسخه 3 رو پیشنهاد میکنم، چون مدرن تر و ویژگی های بیشتری در اختیارتون میگذاره، و اخیرا خیلی از نرم افزار ها مثل فریمورک Django شروع به توقف پشتیبانی از پایتون 2 در نسخه های جدیدتر میکنن.پاورقی : توضیح در مورد کد سمت سرور (Back-End Code) و کد سمت کلاینت (Front-End Code)فرض کنیم شما میخواهید برنامه ای مثل اینستاگرام بنویسید.پس شما باید برای دستگاه هایی که میخواهید پشتیبانی کنید کد سمت کلاینت (Front-End Code) بنویسید.برای مثال ممکنه استفاده بکنید از :سوییفت (Swift) برای iOSجاوا برای اندرویدجاوا اسکریپت برای مرورگر هاهر کد روی نوع دستگاه / مرورگر مخصوص به خودش اجرا میشه، این مجموعه کد تعیین میکنه ظاهر برنامه به چه شکل باشه، و اینکه دکمه ها چطوری باشن وقتی روشون کلیک می کنید.در هر صورت شما نیاز به قابلیتی دارید که بتوانید عکس ها و اطلاعات کاربران رو ذخیره بکنید، شما باید اینکارو در سرور خودتون انجام بدید و نه فقط در دستگاه خود کاربر، که دوستان هر شخص هم بتونن به این اطلاعات دسترسی پیدا بکنند.اینجا جاییه که کد سمت سرور (Back-End Code) وارد عمل میشه، شما نیاز دارید کد سمت سروری بنویسید که کارهایی مشابه موارد زیر انجام بده:مشخص کنه که هر فرد چه افرادی رو دنبال میکنهعکس هارو فشرده کنید که حجم زیادی از سرور اشغال نکنهبه کاربران تازه وارد پروفایل ها و عکس های مختلف پیشنهاد بدیداین تفاوت بین کد سمت سرور و کلاینته، درواقع کد سمت سرور منطق و محاسبات برنامه رو به عهده میگیره و کد سمت کلاینت زیبایی ظاهری برنامه.راستی، پایتون تنها گزینه خوب برای نوشتن کد سمت سرور نیست، گزینه های محبوب دیگه ای هم وجود دارن شامل Node.js که از جاوا اسکریپت استفاده میکنه.این مقاله ترجمه آزاد با کمی تغییر بود از مقاله زیر : https://medium.freecodecamp.org/what-can-you-do-with-python-the-3-main-applications-518db9a68a78 امیدوارم براتون مفید بوده باشه، بعضی از قسمت های مقاله نظر شخصی خودم نیست و سعی کردم به اصل مقاله لطمه ای وارد نشه، در بعضی از قسمت ها هم توضیحات بیشتری خودم اضافه کردم.اگر پیشنهادی برای بهتر شدن این مقاله داشتید خیلی خوشحال میشم در قسمت کامنت ها درمیون بگذارید.موفق و پیروز باشید :)</description>
                <category>مهدی رشیدی</category>
                <author>مهدی رشیدی</author>
                <pubDate>Tue, 14 Aug 2018 12:19:30 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش نصب NodeJS و NPM روی RaspberryPi</title>
                <link>https://virgool.io/Software/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%B5%D8%A8-nodejs-%D9%88-npm-%D8%B1%D9%88%DB%8C-raspberrypi-p4wlbqmo0iwo</link>
                <description>لوگو رزبری، node و npmگام اول :‌ تشخیص معماری پردازندهپردازنده استفاده شده در رزبری پای ARM هست، که با توجه به مدل میتونه ARMv6, ARMv7 و یا ARMv8 باشه. برای تشخیص اینکه رزبری شما از چه نسخه ای استفاده میکنه دستور زیر وارد کنید :uname -mخروجی شما مشابه تصویر زیر میشه :نوع پردازنده ARMv7 هست  گام دوم :‌ دانلود NodeJS برای معماری ARMحالا به وبسایت NodeJS برید و لینک مربوط به نسخه پردازنده خودتون رو کپی کنید :صفحه دانلود وبسایت NodeJsبا استفاده از دستور wget یا curl فایل آرشیو روی رزبری دانلود کنید :wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-armv7l.tar.xzگام سوم :‌ نصب NodeJSبرای اکسترکت کردن فایل tar.xz نیازه که پکیج xz-utils روی رزبری شما نصب باشه، با دستور زیر میتونید نصبش کنید :sudo apt-get install xz-utilsحالا با استفاده از دستور زیر فایل دانلود شده رو از حالت فشرده خارج کنید :tar -xf node-v8.11.3-linux-armv7l.tar.xzنتیجه دو دستور بالاحالا با دستور cd وارد فولدر ایجاد شده بشید :‌cd node-v8.11.3-linux-armv7lو با دستور زیر تمامی فایل های موجود را در مسیر /usr/local کپی کنید:sudo cp -R * /usr/local/گام چهارم : بررسی صحت نصبو تمام، node و npm روی رزبری پای شما نصب شده، برای بررسی صحت نصب از دو دستور زیر استفاده کنید:node -vnpm -vباید نسخه های نصب شده برای شما نمایش داده شود :پ.ن :‌ من در این آموزش از سیستم عامل OSMC که برپایه Debian هست و RaspberryPi 3 Model B استفاده کردم.امیدوارم این آموزش براتون مفید بوده باشه.موفق و پیروز باشید.</description>
                <category>مهدی رشیدی</category>
                <author>مهدی رشیدی</author>
                <pubDate>Sat, 11 Aug 2018 21:33:40 +0430</pubDate>
            </item>
                    <item>
                <title>حل مشکل نمایش ساعت در دوال-بوت لینوکس و ویندوز</title>
                <link>https://virgool.io/@mrashidi/%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%AF%D8%B1-%D8%AF%D9%88%D8%A7%D9%84-%D8%A8%D9%88%D8%AA-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D9%88-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-qukc9o1p3aam</link>
                <description>کامپیوتر شما زمان روی یک ساعت سخت افزاری در مادربورد ذخیره میکنه، که حتی وقتی کامپیوتر هم خاموش بود این ساعت از بین نره. ویندوز بصورت پیشفرض زمان محلی رو در نظر میگیره درحالیکه لینوکس زمان رو بر اساس ساعت جهانی (UTC) و تفاوت اون با موقعیت مکانی شما (offset) ذخیره میکنه. این باعث میشه وقتی شما همزمان از دو سیستم عامل ویندوز و لینوکس استفاده میکنید (Dual-Boot) یکی از سیستم عامل ها زمان رو درست نشون نده!تفاوت نمایش ساعت در لینوکس و ویندوزراه حل اول : کاری کنیم که لینوکس از زمان محلی استفاده کنه!اگر کاری کنیم که لینوکس زمان رو بصورت محلی، همانطور که ویندوز اینکارو انجام میده ذخیره کنه احتمالا بهترین گزینه است!ویندوز در تنظیمات رجیستری خودش گزینه ای داره که که زمان رو بصورت جهانی (UTC) ذخیره بکنه، اما این ممکنه برای نرم افزار های دیگه ویندوز که فرض بر این میگیرن که زمان محلی هست دچار مشکل بکنه و همچنین با قابلیت همگام سازی زمان ویندوز با اینترنت تداخل داره.مراحلی که انجام میدیم برای اینکه لینوکس شما از زمان محلی استفاده بکنه بسته به اینکه شما از چه توزیعی استفاده میکنید ممکنه متفاوت باشه. اگرچه در هر توزیعی که از systemd  استفاده میکنه شما میتونید با دستور timedatectl این تغییر رو انجام بدید. این روش روی نسخه های جدید اوبونتو، فدورا، ردهت، دبیان، مینت و توزیع های دیگه ای که از systemd  استفاده میکنن جواب میده.timedatectl set-local-rtc 1 --adjust-system-clockبرای دیدن تنظیمات فعلی سیستم دستور زیر اجرا کنید :timedatectlاگر شما عبارت &quot;RTC in local TZ: yes&quot; رو مشاهده کردید، نگهداری زمانی لینوکس روی حالت محلی بجای جهانی تنظیم شده. این دستور به شما اخطار میده که این حالت کامل پشتیبانی نمیشه و شما زمانی که بین موقعیت های زمانی مختلف (time zones) تغییر میکنید یا در حالت Daylight Saving ممکنه دچار مشکل بشه. اما این روش بهتر از گزینه پشتیبانی (UTC) توسط ویندوزه و وقتی شما دو-بوته (dual-boot) هستید و ویندوز رو بالا میارید، ویندوز خودش تنظیمات daylight saving برای شما انجام میده و از این بابت جای نگرانی نیست.اگر یه زمانی خواستید که تنظیمات رو به حالت قبل برگردونید از دستور زیر استفاده کنید :timedatectl set-local-rtc 0 --adjust-system-clockراه حل دوم : کاری کنیم که ویندوز از زمان جهانی استفاده کنه!این که کاری کنیم ویندوز از زمان جهانی استفاده بکنه، بهترین روش نیست. شما میتونید در رجیستری تغییراتی ایجاد کنید که ویندوز رو مجبور به استفاده از زمان جهانی (UTC) کنید، اما این روش یجورایی عوارضش از روش اول بیشتره.اگر واقعا میخواید این کار رو انجام بدید، اول باید قابلیت تنظیم زمان خودکار توسط اینترنت رو غیرفعال کنید. این باعث میشه مطمئن بشید در حین همگام سازی با اینترنت ساعت اشتباهی روی سیستمتون تنظیم نمیشه.در ویندوز 10 به مسیر زیر برید : Settings &gt; Time &amp; language و گزینه &quot;Set time automatically&quot; رو غیرفعال کنید.غیرفعال سازی تنظیم ساعت خودکاردر ویندوز 7 روی ساعت در تسک بار کلیک راست کنید و گزینه &quot;Adjust date/time&quot; رو انتخاب کنید، سپس تب &quot;Internet Time&quot; انتخاب و روی گزینه &quot;Change Settings&quot; کلیک کنید. تیک گزینه &quot;Synchronize with Internet time server&quot; بردارید و OK کنید.این مقاله ترجمه ای است از مقاله زیر با کمی تغییر : https://www.howtogeek.com/323390/how-to-fix-windows-and-linux-showing-different-times-when-dual-booting/ </description>
                <category>مهدی رشیدی</category>
                <author>مهدی رشیدی</author>
                <pubDate>Wed, 03 Jan 2018 18:52:13 +0330</pubDate>
            </item>
                    <item>
                <title>تبدیل تصویر به متن فارسی مثل آب خوردن!</title>
                <link>https://virgool.io/@mrashidi/persian-ocr-made-easy-aulili3tlhqa</link>
                <description>گاهی برامون اتفاق میافته که میخوایم  یه فایل PDF یا عکس که شامل متن  میشه رو به فایل متنی تبدیل کنیم!تبدیل عکس به متن قابل ویراش و جستجوبرای اینکار نرم افزار هایی با نام OCR Scanning Tools وجود دارن که هدفشون تشخیص حروف در تصویر (Optical Character Recognition) و تبدیل اون به یک متن پیوسته است؛ اما بیشتر این نرم افزار ها یا از زبان فارسی پشتیبانی نمیکنن یا خروجی قابل قبولی بهمون نمیدن.گوگل با ابزار Google Docs امکانی فراهم کرده که شاید در وهله اول به چشم نیاد، اما پشتیبانی عالی از زبان فارسی داره و اینکار رو بخوبی برامون انجام میده، در ادامه روش کار توضیح میدم.مرحله اول : آپلود تصاویر در Google Driveگوگل درایو باز کنید، یک فولدر  داخلش ایجاد کنید و تمام تصاویر یا فایل های اسکن شده خودتون رو آپلود کنید. تصاویر سند بارگزاری شده!نکته : اگر فایلتون PDF هست میتونید با استفاده از نرم افزار های خوندن PDF یا ابزار های آنلاین مثل این سایت خروجی JPG  بگیرید.مرحله دوم : باز کردن تصاویر در Google Docsروی تصاویر کلیک راست کنید و از منو Open With -&gt; Google Docs رو انتخاب کنید.مرحله سوم : گرفتن خروجی متنیشما به صفحه مشابه تصویر زیر هدایت میشید که در بالای صفحه تصویر آپلود شده و در پایین متن قابل ویراش و جستجو آماده است.حالا میتونید از منو File -&gt; Download as خروجی مورد نظرتون (docx، txt و ... ) رو هم انتخاب و دانلود کنید.و تمام!امیدوارم این آموزش مفید بوده باشه، اگر شما روش های دیگه ای برای تبدیل تصویر به متن سراغ دارید یا نظری برای بهبود این نوشته دارید باعث خوشحالیه که در نظرات مطرح کنید.</description>
                <category>مهدی رشیدی</category>
                <author>مهدی رشیدی</author>
                <pubDate>Wed, 03 Jan 2018 12:10:41 +0330</pubDate>
            </item>
            </channel>
</rss>