<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های احسان محمدی</title><link>https://virgool.ir/feed/@ehsan-mohammadi</link><description>مهندس نرم‌افزار هستم و علاقه‌مند به کامیپوتر و برنامه‌نویسی</description><language>fa</language><pubDate>2026-11-11 10:57:50</pubDate><image><url>https://files.virgool.ir/upload/users/90409/avatar/g3PuaE.jpeg</url><title>احسان محمدی</title><link>https://virgool.ir/@ehsan-mohammadi</link></image><item><title>گریزی به دوران کودکی؛ بازی‌ها جذاب هستند!</title><link>https://virgool.ir/@ehsan-mohammadi/گریزی-به-دوران-کودکی؛-بازیها-جذاب-هستند-nepnindfwkps</link><description>بله؛ بازی‌ها جذاب هستند! لینوس توروالدز، خالق لینوکس، در کتاب فقط برای تفریح می‌گوید:اینکه بازی‌ها در لبه‌ی تکنولوژی قرار گرفته‌اند و اولین برنامه‌هایی هستند که برنامه‌نویسان می‌نویسند، دلیلی دارد. بخشی از دلیل مربوط به این واقعیت است که در بسیاری از مواقع، باهوش‌ترین برنامه‌نویس‌ها بچه‌های پانزده، شانزده ساله‌ای هستند که در اتاق خوابشان مشغول ور رفتن با کامپیوتر هستند...فکر نمی‌کنم باهوش باشم، اما اولین برنامه‌هایی که من هم نوشتم بازی‌ها بودند؛ و در اصل نقش بزرگی در آشنایی من با برنامه‌نویسی داشته‌اند. من کامپیوتر را با بازی شناختم. اولین دیدار رو در روی من با یک کامپیوتر مربوط به زمانی می‌شود که 11 ساله بودم؛ و اولین چیزی که در این دیدار روی مانیتور کامپیوتر به چشمم می‌خورد، یک بازی بود. خب بازی‌های کامپیوتر نسبت به بازی‌های نینتندوی من، گرافیک فوق‌العاده‌ای داشتند. من از آن زمان به کامپیوتر علاقه‌مند شدم. البته نه همیشه برای بازی کردن؛ برای هر نوع کنجکاوی! و چون صاحب کامپیوتر، دایی گرامی بود، من این شانس را داشتم تا هر هفته که به خانه‌ی مادربزرگ می‌رویم در حد یکی دو ساعت با کامپیوتر ور بروم. هر هفته را برای رسیدن به جمعه روزشماری می‌کردم تا بتوانم به کامپیوتر برسم؛ و اگر شانس میاوردم و بین هفته هم به خانه‌ی مادربزرگ می‌رفتیم، خب بی‌نهایت عالی بود!تصور کنید در حالی که همه، روز آخر هفته دور هم نشسته‌اند و گرم خوردن چای و خوش و بش هستند، یک پسربچه در اتاق، تنها مشغول بازی کردن یا کنجکاوی با کامپیوتر است. عکس‌ها و فیلم‌هایی از آن دوران وجود دارد و به خاطر دارم هنگام گرفتن همین عکس و فیلم‌ها، صدایم می‌زدند که:احسان! پاشو از پشت کامپیوتر. میخواییم دسته‌جمعی یادگاری بگیریم.«احسان! پاشو از پشت کامپیوتر» برایم جمله‌ی غریبی نیست و تقریباً در حال تبدیل شدن به یک استاندارد برای صدا زدن من توسط دیگران بود! بگذریم، به هرحال بازی‌های کامپیوتری نقش عمده‌ای در گرایش من به کامپیوتر داشتند.بازی‌ها را چطور می‌سازند؟این سؤال من بود. به خاطر دارم روزی دایی‌ام گفته بود:برای هر حرکت که توی این بازی‌ها میبینی یک برنامه نوشتن.و نمی‌دانم متوجه برداشت احمقانه‌ی من درمورد ساخت بازی شدید یا نه! تفکر من این بود که احتمالاً بازی‌ها مجموعه‌ای از هزاران عکس هستند که با فشردن یک کلید، یک عکس خاص ظاهر می‌شود و بنابراین هر حرکتی که بازیکن در بازی می‌کند یا هر اتفاقی که در بازی می‌افتد، قبلاً توسط طراح بازی عکس گرفته شده و در بازی قرار داده شده است. خب شاید برای آن سن و سال خیلی هم احمقانه نباشد؛ اما به هرحال برداشت من از حرف دایی‌ام اشتباه بود.کامپیوتر شخصی خودمیکسال بعد، زمانی که 12 ساله بودم، و پس از علاقه‌ی زیاد نشان دادن به کامپیوتر، پدر و مادر متقاعد شدند تا برای من یک کامپیوتر بگیرند. امتحانات نوبت اول دوره‌ی اول راهنمایی به پایان رسیده بود. یک روز ظهر در حالی که از مدرسه به خانه رسیدم، با دیدن یک کامپیوتر در اتاقم غافل‌گیر شدم. حس ذوق آن لحظه قابل وصف نیست و لبخند از روی رضایت پدر و مادر که از ذوق من خوشحال بودند.یک کامپیوتر گرافیک 64، رم 256 و ویندوز XP! البته که من در آن زمان اطلاعاتی از سخت‌افزار کامپیوتر نداشتم اما می‌دانستم این یکی از بهترین کامپیوترهای آن دوران بود که برایم گرفته بودند. و مهمترین چیزی که بی‌نهایت خوشحالم می‌کرد این بود که دیگر نیاز به صبر کردن تا آخر هفته و رفتن به خانه‌ی مادربزرگ برای کامپیوتر بازی نیست! ناگفته نماند که به دلیل نداشتن جنبه در استفاده از کامپیوتر و افت شدید تحصیلی، در نهایت تصمیم بر این شد که اجازه داشته باشم فقط در روزهای پنجشنبه و جمعه تا ظهر ساعت 12 با کامپیوتر مشغول باشم و باقی زمان‌ها را به فکر درس و مدرسه باشم. به این قانون تا سال آخر دوره‌ی دبیرستان پایبند بودم.اولین بازی که ساختمیکسال بعد، در حالی که در تعطیلات تابستان با اینترنت Dial-up مشغول پیدا کردن یک بازی بودم، اتفاقی چشمم به یک عنوان در یک سایت افتاد:به راحتی و بدون داشتن دانش خاصی از برنامه‌نویسی، با Game Maker بازی بسازید.عنوان تحریک‌کننده بود. قسمت عجیب ماجرا هم تصمیم آن زمان من بود که به خودم گفتم:خب! چرا باید بازی دانلود کنم؟ بازی خودم رو میسازم و بازی می‌کنم!و شروع کردم به دانلود و نصب Game Maker. نیم ساعت بعد از نصب Game Maker، تصمیم به حذف برنامه داشتم؛ اما مثال‌های پیش‌ساخته‌ای که در Game Maker وجود داشت، مانع شدند. درمورد کدنویسی هیچ چیزی نمی‌دانستم. بزرگترین مزیت Game Maker برای من این بود که نیازی به نوشتن کد برای دستورات ساده نداشتید. تعدادی از کدها به صورت فلوچارت داده شده بود و تنها کار این بود که بر اساس منطقی که در نظر داشتید، این ابزارها را به داخل پنجره‌ی مخصوص می‌کشیدید.چون از فلوچارت‌ها هم سررشته‌ای نداشتم، یک ایده به ذهنم رسید و آن این بود که مثال‌های Game Maker را باز می‌کردم و کدها و فلوچارت‌های آن را خط به خط در یک پروژه‌ی خالی کپی می‌کردم. سپس دکمه‌ی Run را می‌زدم تا ببینم در خروجی چه اتفاقی می‌افتد. بر اساس خروجی متوجه می‌شدم که این کد چه کاری را انجام می‌دهد. با این شیوه پیش رفتم و در نهایت در پایان سال توانستم اولین بازی کامپیوتری خودم را بسازم.قطعاً بازی که ساخته بودم از نظر کدنویسی افتضاح بود؛ اما خب از یک پسربچه‌ی 13-14 ساله انتظار نوشتن کد درست و حسابی نبود. به هرحال خروجی به درستی کار می‌کرد و این برای آن زمان من خوب بود!تلاش برای ساخت بازی‌های دیگریکسال بعد از آشنایی با Game Maker، به صورت خیلی ابتدایی برنامه‌نویسی یاد گرفته بودم و پیشرفت کرده بودم و از خودم راضی بودم. تصمیم گرفتم بازی بسازم و بین سایر دوستان همکلاسی به اشتراک بگذارم. و توانستم در سال سوم راهنمایی یک بازی ریاضی بنویسم و از طریق معلم ریاضی آن دوران من، که استقبال زیادی از این فعالیت‌ها می‌کرد، آن را بین سایر دوستان و تعدادی از مدارس راهنمایی شهر معرفی کنم.تمام این اتفاقات باعث علاقه‌ی بیشتر و بیشتر من به کامپیوتر، برنامه‌نویسی و بازی شد. با گذشت زمان، پیشرفت بهتری در برنامه‌نویسی کردم. یکی از تفریحات من در حوزه‌ی ساخت بازی، تلاش برای کپی کردن و بازنویسی بازی‌های آن زمان بود. این کار باعث می‌شد بیشتر، چالش‌های شرکت‌هایی که این بازی‌ها را می‌سازند، درک کنم؛ و البته پیشرفت بیشتری در برنامه‌نویسی داشته باشم.طراحی بازی، یک تفریح پر از چالشامروز من یک مهندس نرم‌افزار هستم و همچنان در حال یادگیری و تجربه. علاقه‌ی زیادی به کامپیوتر و برنامه‌نویسی دارم. و البته همچنان علاقه‌ی زیادی به طراحی بازی. طراحی بازی هنوز هم برای من جذاب است و هنوز در کنار طراحی و توسعه‌ی نرم‌افزار، بخشی از زمان برنامه‌نویسی خودم را به کسب تجربه و توسعه‌ی بازی‌های کامپیوتری می‌گذرانم.به قول دیوید فولر، یکی از اعضای تیم ASP.Net مایکروسافت و خالق SignalR:من فکر می‌کنم هر توسعه‌دهنده باید توسعه‌ی بازی را امتحان کند. هیچ چیزی به اندازه‌ی نوشتن کدهایی که به صورت بصری، پیکسل‌های روی صفحه نمایش را حرکت می‌دهد، پاداش ندارد.با این جمله موافقم و به نظرم این زمینه بی‌نهایت جذاب و چالش برانگیز است. امتحانش ضرری ندارد :)</description><category>احسان محمدی</category><author>احسان محمدی</author><pubDate>Sun, 01 Dec 2019 17:06:44 +0330</pubDate></item><item><title>تجربه‌ی مشارکت با مایکروسافت، با طعم اوپن سورس!</title><link>https://virgool.ir/@ehsan-mohammadi/تجربهی-مشارکت-با-مایکروسافت-با-طعم-اوپن-سورس-eqjqosqjtim1</link><description>در نگاه خیلی از افراد، از جمله خودم، کار کردن روی پروژه‌های شرکت‌های بزرگ، کاری جالب، حرفه‌ای و احتمالاً سخت است. معمولاً با مواجه شدن با این عنوان‌ها و یا خواندن داستان این افراد با خودم می‌گویم: «پسر، ببین چه کار خفنی!» و شاید به دلیل همین حس مشترک، عنوان این مطلب، شما را به اینجا کشانده است! با اینکه نمی‌توانم منکر این مورد شوم که این تجربه‌ها نیازمند بخش عمده‌ای تخصص و البته حوصله است، اما گاهی شروع این همکاری می‌تواند به سادگی اصلاح یک قطعه کد یا حتی یک به‌روز رسانی کوچک باشد.من یک برنامه‌نویس #C هستم که از قضا به اوپن سورس علاقه‌مند است. در نگاه بعضی از دوستان، این دو مورد کنار یکدیگر همخوانی ندارند و به قولشان: «یک جای کار می‌لنگه!» شاید مسئله از آن‌جایی شکل می‌گیرد که نمی‌توانند اوپن سورس و مایکروسافت را کنار هم جای دهند. به هرحال، داستان درمورد فلسفه‌ی اوپن سورس و انحصار نیست. داستان درباره‌ی تجربه‌ی مشارکت در یکی از پروژه‌های اوپن سورس مایکروسافت است.از کجا شروع شد؟شروع این مشارکت برمی‌گردد به مرداد امسال. برای برنامه‌نویس‌ها، گیت‌هاب کاملاً فضایی شناخته شده است. من گیت‌هابم را از سال 2016 راه‌اندازی کرده بودم؛ اما در شروع استفاده‌ی چندانی از آن نمی‌کردم. هنوز هم نمی‌توانم بگویم استفاده‌ی زیادی از آن می‌کنم! اما با آشنا شدن با این فضا و امکان مشارکت در پروژه‌ها و همان مفهومی که تا الان شاید 10 بار در این نوشته آن را تکرار کردم (اوپن سورس!)، به آن علاقه‌مند شدم. یکی از چالش‌های من این بود که اگر یک شرکت بزرگ کدهای پروژه‌ی خود را آزادانه در اختیار شما قرار می‌دهد و اگر شما می‌توانید در توسعه‌ی آن مشارکت کنید، پس من می‌توانم بخشی از یک پروژه‌ی یک شرکت بزرگ باشم. و شرکت موردنظر، مایکروسافت بود!پروژه‌ی Microsoft vcpkgدر این سال‌ها مایکروسافت پروژه‌های زیادی را روی گیت‌هاب منتشر کرده است. استقبال کاربران هم از این پروژه‌ها طبیعتاً زیاد بوده است. کافیست به آدرس github.com/Microsoft بروید و روی هر کدام از پروژه‌هایی که می‌خواهید کلیک کنید تا تعداد افرادی که آن پروژه را پسندیده‌اند یا در حال مشارکت روی آن هستند را ببینید. خب برای شروع من باید پروژه‌ای مناسب را پیدا می‌کردم که توانایی کار روی آن را داشته باشم. در نهایت بعد از بالا و پایین کردن و بررسی زیاد، پروژه‌ی vcpkg را برای خودم مناسب دیدم. با اینکه این پروژه به زبان #C و تخصص اصلی من نبود.پروژه‌ی vcpkg به شما کمک می‌کند تا کتابخانه‌های C و ++C را روی پلتفرم‌های مختلف ویندوز، لینوکس و مک او اس مدیریت کنید. به این صورت که زمانی که شما به یک کتابخانه احتیاج دارید و این کتابخانه در لیست vcpkg قرار دارد، می‌توانید به سادگی با نوشتن یک خط دستور آن را اضافه و مدیریت کنید.جستجو برای یک Pull Request ساده و مناسباگر بخواهم خیلی ساده Pull Request را توضیح دهم، باید یک تغییر ساده و مناسب را پیدا می‌کردم تا با اعمال آن به پروژه، پروژه را بهتر می‌کردم؛ و در نهایت درخواست اعمال این تغییر را به همراه خود تغییراتی که در پروژه داده‌ام، ارسال می‌کردم. سپس در صورت موافقت تیم، تغییرات من به پروژه‌ی اصلی اعمال می‌شد و من بخشی از مشارکت‌کنندگان پروژه می‌شدم.با بررسی پروژه متوجه شدم که برای دسترسی به کتابخانه‌ها، هرکدام از آن‌ها به همراه نسخه و سایر اطلاعات مورد نیاز برای نصب، در مسیری از پروژه نوشته می‌شود. از زمانی که من پروژه را بررسی می‌کردم، بیش از 1000 کتابخانه به همراه اطلاعاتشان در vcpkg گنجانده شده بودند. مشکل بزرگ این بود که کتابخانه‌ها هر چند مدت، توسط سازنده‌ی اصلی هر کتابخانه، به‌روز رسانی می‌شدند و اگر این به‌روز رسانی به vcpkg اعلام نمی‌شد، زمانی که از vcpkg برای نصب آن کتابخانه استفاده می‌کردید، نسخه‌ای قدیمی از آن را برای شما نصب می‌کرد. بنابراین تعدادی از مشارکت‌ها جهت به‌روز رسانی نسخه‌ها انجام می‌شود.این مورد برای شروع بد نبود. چون با مطالعه‌ی تقریبی مستندات (Documentation) احتمالاً می‎توانستم حداقل یک مشارکت در پروژه داشته باشم. پس سعی کردم تا این کار را انجام دهم و بالاخره بعد از بررسی نسخه‌های تعدادی کتابخانه از میان لیست بلند بالای 1000+ کتابخانه‌ها و کدهای سایر مشارکت‌کنندگان، توانستم اولین Pull Request خود را اعمال کنم. بعد از این باید منتظر بررسی تغییراتم توسط تیم می‌بودم.فردای آن روز، اولین مشارکت من تأیید شد و من در لیست تقریباً 600 مشارکت‌کننده‌ی پروژه در جایگاه آخر قرار گرفتم :)تکرار برای مشارکتشیرینی اینکه من در این لیست قرار گرفته بودم باعث می‌شد تا انگیزه داشته باشم به این مشارکت ادامه دهم. مخصوصاً اگر یکی از اعضای تیم از شما به خاطر مشارکت کوچکی که کردید تشکر می‌کرد بیشتر راضی می‌شدید. به هرحال من به مشارکت ادامه دادم. تعدادی کتابخانه‌ی دیگر هم به‌روز رسانی شد. اما گشتن میان لیست کتابخانه‌ها کاری زمانبر بود. و این مشکلی بود که من می‌توانستم به عنوان یک مهندس نرم‌افزار راه‌حلی برایش پیدا کنم.پروژه‌ی vcpkg-port-update-alertاین اسم طولانی نام راه‌حل من بود! البته این راه‌حل به پروژه‌ی اصلی اضافه نمی‌شد؛ اما برنامه‌ای جانبی بود که شما با اجرای آن می‌توانستید لیستی از کتابخانه‌های استفاده شده توسط vcpkg را که به به‌روز رسانی نیاز دارند، مشاهده کنید. این پروژه‌ی کم فروغ، از نظر تعداد افرادی که پسندیدند، را به صورت اوپن سورس روی گیت‌هابم قرار دادم. البته پروژه‌ای نبود که به درد هر کسی بخورد و بیشتر مشکل خودم را حل می‌کرد. در مجموع این پروژه را تنها یک نفر پسندید؛ اما یکی از اعضای تیم اصلی vcpkg؛ که این برایم ارزش داشت. همچنین به دلیل سرعتی که در شناسایی کتابخانه‌های نیازمند به‌روز رسانی به من می‌داد، باعث می‌شد بیشتر بتوانم در vcpkg مشارکت کنم.چالش بعدیبالاخره توانستم عضو کوچکی از یک پروژه باشم. و خب قطعاً قرار نبود این پایان ماجرا باشد. در پایان هر ماه، یک نسخه از vcpkg داده می‌شد و در سایت مایکروسافت مطلبی درباره‌ی نسخه‌ی جدید می‌نوشتند و در پایان از مشارکت‌کنندگان برتر ماه قدردانی می‌کردند. البته من در این مورد اطلاعی نداشتم و یکی از روزهایی که درباره‌ی مشارکت‌های خودم در توئیتر پیامی منتشر کرده بودم، پاسخی را دریافت کردم:از تارا راج: ممنون به خاطر تمام مشارکت‌های شما. به نظر میاد نام شما در مطلب آینده‌ی بلاگ vcpkg مایکروسافت درج خواهد شد!تارا راج، یکی از کارمندان مایکروسافت و از افرادی بود که در بلاگ مایکروسافت درمورد vcpkg می‌نوشت. این اتفاق خوبی بود اگر اسم من در بلاگ مایکروسافت درج می‌شد؛ هرچند به دلیل اینکه از اول چنین هدفی نداشتم، برایش برنامه‌ریزی نکرده بودم. به هرحال، چالش جدیدی را برای خودم در نظر گرفتم و آن این بود که در ماه آگوست، جزو 10 مشارکت‌کننده‌ی برتر باشم.در پایان ماه آگوست، نتیجه فراتر از انتظار من بود و برترین مشارکت‌کننده‌ی ماه شدم! هر چند این اتفاق هرگز نیفتاد که نام من در بلاگ مایکروسافت برود (به این دلیل که درج مطلب درمورد نسخه‌های ماهیانه‌ی vcpkg در بلاگ متوقف شد)، اما تجربه‌ی اول شدن و آشنا شدن با فردی مانند تارا راج برای من لذت‌بخش بود. ضمن اینکه به این مورد فکر می‌کردم که این مشارکت‌ها رزومه‌ی خوبی برایم خواهد شد.مشارکت، مشارکت و باز هم مشارکت!و همینقدر جالب و شاید ساده یکی از مشارکت‌کنندگان vcpkg شدم. اکنون که این مطلب را می‌نویسم، از میان 723 مشارکت‌کننده‌ی فعلی پروژه، بین 100تای برتر و با دو رتبه تنزل در جایگاه 13-ام قرار دارم. در این مدت مشارکت‌های من تنها به‌روز رسانی نبود. سعی کردم کارهایی مانند نوشتن Patch، اصلاح و اضافه کردن کتابخانه، پاسخگویی به سوالات دیگر کاربران و بازبینی کدهای سایر مشارکت‌کنندگان را هم فرا بگیرم. در طول مدت مشارکت، نکات بسیاری را فرا گرفتم، مشکلات بسیاری که داشتم توسط سایر اعضای تیم به من گوشزد شد و با افراد بسیاری از تیم آشنا شده و ارتباط برقرار کردم، که حقیقتاً مورد آخر ارزش بیشتری برایم داشت. تا به امروز سعی کردم این مشارکت را همچنان ادامه دهم و از انجام این کار لذت ببرم.مقصود از نوشتن این مطلب، مخصوصاً به عنوان اولین پست، «شوآف!» نبود. خواستم تجربه‌ای را از یک مشارکت هرچند کوچک در پروژه‌ای از یک شرکت بزرگ، بنویسم. شاید در ابتدا که خواندن مطلب را شروع کرده باشید، کار را بزرگ ببینید؛ اما امیدوارم اکنون که در حال مطالعه‌ی این قسمت هستید، نظرتان عوض شده باشد! همه چیز به همین سادگی شروع شد و ادامه پیدا کرد.در پایان قبول می‌­کنم؛ کمی هم شوآف کردم!</description><category>احسان محمدی</category><author>احسان محمدی</author><pubDate>Sun, 24 Nov 2019 17:16:55 +0330</pubDate></item></channel></rss>