چه زبانی برای تخصص من لازم است؟ (بخش دوم)

در قسمت قبلی این مقاله، به مهارت های طراحی وبسایت و اپلیکیشن پرداختیم. در این بخش میخواهیم کمی به ساخت بازی های ویدیوئی نگاهی بی اندازیم. در لینک زیر میتوانید بخش اول مقاله را مطالعه بفرمایید.

https://bit.ly/2YYeFPF

ساخت و توسعه بازی های ویدیویی

موتور گرافیکی محبوب Unreal engine

طراحی و توسعه بازی های ویدیویی یکی از مسائلی است که برای خیلی از مردم شاید ساده و سطحی جلوه کند اما به راحتی میتوان گفت یکی از خلاقانه ترین و پر زحمت ترین تخصص های دنیای کامپیوتر طراحی بازی های ویدیویی است.

یک بازی ویدیویی (کنسولی – گوشی های هوشمند – PC) شامل تخصص های متعددی در درون خود میشود. اگر بخواهیم بعضی از این تخصص ها را نام ببریم میتوانیم به ۱) نویسنده ۲) گرافیست ۳) طراح مراحل ۴) طراح صدا ۵) برنامه نویس و… اشاره کرد. پس اگر رویای ساخت بازی های بزرگ به صورت تک نفره را در سر دارید بهتر است همین الان این فکر را از سر خود بیرون کنید.

اما ساخت بازی به صورت تک نفره نیز امکان پذیر است که البته شامل بازی هایی میشوند که از نظر فنی خیلی پیچیده نیستند. مانند بازی ایرانی ۴۱۱۴۸، بازی فراگیر و جذاب اما ساده. البته از این موضوع هم نباید بگذریم که برای این موضوع که بتوانیم به صورت تک نفره یک بازی را پیاده کنیم باید آگاهی مورد نیاز از بخش های مختلف مانند داستان پردازی، گرافیک، صداگذاری، برنامه نویسی و… را داشته باشیم.

خب خیلی از اصل قضیه دور نشویم. میخواهیم تمرکزمان بر روی بخش های مرتبط به تخصص های کامپیوتری کار باشد نه صداسازی و طراحی مراحل و نویسندگی.

در ابتدا باید بدانیم که یک بازی به چه شکل ساخته میشود. یک بازی ویدیویی پس از اتمام طراحی های پایه گرافیکی و ساخت آبجکت های مورد نیاز، وارد یک موتور بازی سازی میشود. حال سوال اینجاست که یک موتور بازی سازی چیست؟

موتور های بازی سازی نرم افزار هایی هستند که یک محیط ویژوال و مناسب را جهت توسعه بازی فراهم میکنند. در این نرم افزار ها شما میتوانید بدون استفاده از کد خیلی از بخش ها را پیاده کنید. میتوانید توسط یک پنجره محیط بازی را مدام چک کنید و بازی را به راحتی اجرا کنید. در زیر سه تا از محبوب ترین موتور های ساخت بازی در سه سطح مختلف را بررسی میکنیم. موتور Unreal engine، Unity و Game maker studio.

موتور Unreal. این موتور یکی از سطح بالاترین موتور های گرافیکی و بازی سازی می باشد که رایگان نیز میباشد و برای برنامه نویسی از زبان C++ پشتیبانی میکند. از معروف ترین بازی های ساخته شده با این موتور میتوان به Unreal tournament، Borderlands 2،Batman: Arkham city،Gears of war 3 و Bioshock اشاره کرد.

موتور Unity. با اینکه این موتور پیشرفت های چشمگیری داشته اما همچنان در پایین آنریل انجین قرار میگیرد اما در هر صورت یکی از بهترین موتور های بازی سازی به خصوص برای توسعه بازی های اندرویدی می باشد. این موتور به شدت محبوب، بستر توسعه قوی ترین بازی های گوشی های هوشمند بوده است اما این موضوع دلیل نمیشود که این موتور توان پیاده سازی سطوح بالاتر را نداشته باشد. این موتور از زبان های C# و جاوااسکریپت پشتیبانی میکند. از محبوب ترین بازی های پیاده شده با این موتور میتوان به Dues Ex: The fall، Wasteland 2،Temple run و سری Shadow fight اشاره کرد.

موتور GameMaker Studio. این موتور برای شروع بازی سازی بهترین انتخاب است. البته تمرکز این موتور تنها بر روی بازی های دو بعدی است و موتوری برای توسعه بازی های سه بعدی ندارد. گرچه کتابخانه هایی نوشته شده برای توسعه بازی های سه بعدی این موتور اما واقعا کار را پیچیده میکند. این موتور طوری طراحی شده که شما میتوانید بدون نوشتن حتی یک خط کد به راحتی یک بازی بسازید. البته این کار توصیه نمیشود چون بازی پیاده شده بدون کد گذشته از محدودیت هایش بسیار سطحی میشود. این موتور از یک زبان خود ساخته تحت عنوان (GML (Game maker language پشتیبانی میکند که زبان بسیار ساده ای می باشد و تنها چیزی که نیاز دارید داشتن منبع و آشنایی با مبانی برنامه نویسی است. از محبوب ترین بازی های پیاده سازی شده با این موتور میتوان به Hotline Miami و Undertale اشاره کرد.

پس از تحقیق و بررسی فراوان و انتخاب موتور مورد نظر خود شما باید به رفرنس ها و آموزش هایی مراجعه کرده و کتابخانه های مورد نیاز برای برنامه نویسی بازی در آن موتور را بیاموزید.

با تشکر از وقت شما

نوشته چه زبانی برای تخصص من لازم است؟ (بخش دوم) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

آغاز یادگیری، ورود به دنیای چیزهایی که نمی‌دانیم

در فرآیند توسعه‌ی فردی یکی از عناصر کلیدی رشد توانایی‌ها یادگیریِ صحیح، مداوم، با برنامه و هدفمند است. اما یادگیری خود طی کردن مسیری است که عموماً زمان و انرژی زیادی از ما طلب می‌کند، گوهرهایی که در زمانه‌ی امروز بسیار نایاب شده‌اند. از طرفی ما نیاز داریم که به سرعت خود را با جهان درتلاطم اطرافمان هماهنگ کنیم و از طرفی نیز با دریایی بی حد و مرز از چیزهایی که نمی‌دانیم مواجهیم و انگار این وظیفه را بر گردن ما گذاشته‌اند که همه‌ی آن را در ذهن خود جای بدهیم. در این شرایط اولویت‌بندی و انتخاب چیزهایی که باید بیاموزیم کاری پرچالش است و این وضعیت وقتی توسعه‌دهنده‌ی نرم‌افزار باشید حتی می‌تواند اسفناک‌تر باشد. ما هر روز توسط تکنولوژی‌ها و ابزارهای تازه بمب باران می‌شویم و اگر نتوانیم دانش‌مان را به‌روز نگه داریم به سرعت از چرخه‌ی صنعت عقب می‌افتیم و پس از مدتی دیگر جایی در پروژه‌های جدید و جذاب نخواهیم داشت و مجبور خواهیم بود که در گوشه‌ای تاریک مشغول نگهداری و حل مشکلات روزمره‌ی نرم‌افزاری قدیمی باشیم. این شرایط مورد پسند من نیست و برای همین تلاش کردم که راهی پیدا کنم که بتوانم راحت‌تر و سریع‌تر چیزهایی که نیاز دارم را یاد بگیرم و در این نوشته تلاش می‌کنم با نگاه به فرآیندی که در یادگیری رخ می‌دهد این مسیر را ساده‌تر و دست‌یافتنی‌تر کنم.

یادگیری در واقع فرآیند دستیابی به آگاهی است، آگاهی از چگونگی انجام یک کار، یا چگونگی عملکرد یک سیستم، یا آگاهی از چرایی وجود یک پدیده. اما ما آگاهی‌های متفاوتی در سطوح مختلف نسبت به مسائل و چیزها داریم. ابن یمین، شاعر و فیلسوف ایرانی قرن هفتم شعری بسیار آموزنده و مشهور دارد که احتمالاً آن را شنیده‌اید:

آن کس که بداند و بداند که بداند
اسب خرد از گنبد گردون بجهاند
آن کس که بداند و نداند که بداند
آگاه نمایید که بس خفته نماند
آن کس که نداند و بداند که نداند
لنگان خرک خویش به منزل برساند
آن کس که نداند و نداند که نداند
در جهل مرکب ابدالدهر بماند

ابن یمین

این شعر به زیبایی انواع مختلفی از دانستن را معرفی کرده است. ما در این شعر با چند وضعیت مواجه هستیم. اول، موقعیتی که ما چیزی را می‌دانیم و نیز نسبت به دانش خود آگاهی داریم. من این سطح را تسلط می‌نامم. تسلط نسبت به یک موضوع، جایست که در سطح اول ما به آن موضوع آگاهی داریم و سطح دوم از میزان آگاهی خود نسبت به مسئله هم آگاه هستیم. این آگاهی دوم عنصری بسیار مهم است. در واقع ما باید ارزیابی درستی از اینکه چه چیزهایی را می‌دانیم، این دانسته‌ها چقدر است و چه چیزهایی را نمی‌دانیم داشته باشیم.

از لایه‌های میانی که بگذریم، پایین‌ترین سطح آگاهی و دانش جهل مرکب است. جایی که در آن ما چیزهایی را نمی‌دانیم و به ندانستن خود نیز آگاه نیستیم. برای مثال نمی‌دانم فلان دستگاه محاسباتی وجود دارد که فیزیکدان‌ها با استفاده از آن کارهای خاصی انجام می‌دهد اینکه چگونه کار می‌کند یا چه استفاده‌ای دارد پیش‌کش. ما درباره‌ی تقریبا تمام هستی در چنین وضعیتی هستیم. تقریباً تمام جهان را چیزهای فراگرفته که ما نه تنها آن‌ها را نمی‌دانیم که حتی به وجود آن‌ها نیز آگاه نیستیم. یک اتاق تاریک و بی‌انتها.

یادگیری در این سطح آغاز می‌شود، از تلاش ما برای خروج از جهل مرکب در مسائل گوناگون و تعامل با چیزهایی که نمی‌دانیم. ورود به هر فیلد تازه ورود به فضایی است با در هم تنیدگی‌های گوناگون دانشی که کاملاً برای ما ناشناخته است و ما باید با صرف مقدار انرژی و زمان معقولی با مختصات آن آشنا شویم. ما باید از جایی شروع کنیم و شروع به پیشروی کنیم راهکار شما برای مواجهه و افزایش بهروری یادگیری چیست؟

ورود به یک فیلد تازه چه فیلدی از برنامه‌نویسی باشد، یا یک رشته‌ی علمی یا کسب و کار می‌تواند استراتژی‌های متفاوتی داشته باشد. شما می‌توانید با یک کتاب شروع کنید، یا با مشورت یک متخصص یا ورود به یک رشته‌ی دانشگاهی. اگر همت و پشتکار داشته باشید به احتمال زیاد موفق خواهید شد. اما اگر یادگیری برای شما نیز مثل من یک کار روزمره‌است باید به دنبال روش‌هایی برای بهینه و سریع‌کردن این فرآیند باشید.

بالا رفتن از نردبال ابن یمین

گفتیم پایین‌ترین سطح آگاهی جهل مرکب است. جایی که ما راه یادگیری را شروع می‌کنیم. سطح بالاتر در شعر ابن یمین جاییست که ما ارزیابی نسبتا درستی درباره‌ی چیزهایی که نمی‌دانیم داریم. ما با رسیدن به این سطح خواهیم توانست لنگان خرک خویش به مقصد برسانیم. برای این کار راه خوب این است که با یادگیری نام‌ها شروع کنیم. اگر هدف شما برای مثال یادگیری برنامه‌نویسی است توصیه نمی‌کنم که از روز اول با خواندن کتاب آموزش یک زبان برنامه‌نویسی که یکی از دوستان یا آشنایان شما معرفی کرده شروع کنید این کار هم خسته کننده و کسالت‌بار است هم واقعا هیچ سودی برای شما نخواهد داشت. فکر می‌کنم کمی گشت زدن بهتر باشد. درباره‌ی کلمات مختلف سرچ کنید، فقط لازم است بدانید فلان نام اسم چیست یا بهمان مفهوم چه معنی می‌دهد. لازم نیست در کارکرد‌ها دقیق شوید، یا لازم نیست حتی کار کردن با چیزی را بیاموزید. فقط سعی کنید ببینید که در این جهان چه چیزهای وجود دارد و به چهار گوشه‌اش سرک بکشید.

این مسیر مانند پرسه‌زدن در شهری تازه‌ است. سعی کنید از این قدم زدن لذت ببرید، قرار نیست چیزی را حفظ کنید و قرار نیست خود را عذاب بدهید. گوگل و ویکیپدیا در این راه به شما کمک خواهند کرد. شما در این مرحله یک دانش سطحی اما نسبتا گسترده دارید، حواستان باشد که دچار اثر دانینگ-کروگر نشوید. این کار را تا جایی ادامه دهید که دستتان بیاید با چه چیزی سر و کار دارید و چه مسیری را باید طی کنید. حتما از دیگران کمک بگیرید اما حواستان باشد کسی نباید جز خود شما نباید مسیر یادگیری را برای شما مشخص کند. چون هر دانشی چیزهایی کسل کننده و اعصاب خرد کن و به درد نخور هم دارد، شما در آغاز یادگیری نباید اسیر این چاله‌ها شوید، زیرا بهروری یادگیری شما را به شدت کاهش می‌دهند. اگر شما قرار باشد شما به شهری تازه مهاجرت کنید، اولین روزهای خود را در این شهر تازه در خرابه‌ها و نقاط خطرناک و ناآشنا نمی‌گردید، پس چرا در هنگام ورود به فیلد تازه خود را مجبور به کنید که چیزهایی که دوست ندارید را از آن فیلد بیاموزید؟

اورکا اورکا،
کشف ارتباطات میان مفاهیم و درک شبکه‌ی دانش

فکر می‌کنم مثال مهاجرت به یک شهر تازه مثال خوبی بود. با همین ادامه دهیم. وقتی شما به یک فیلد تازه وارد می‌شوید و سعی می‌کنید با مفاهیم کلی و چیزهای مختلفی که در این فیلد وجود دارد آشنا شوید در واقع مانند این است که در این شهر تازه با میدان‌ها، خیابان‌ها و ساختمان‌های اصلی آشنا شوید. همان‌طور که دانستن نام خیابان‌های یک شهر به معنی بلد بودن شهر نیست، اما کمک می‌کند که بدانید این شهر چقدر بزرگ است و همین‌طور می‌توانید از ساکنان شهر با دقت بیشتری راهنمایی بخواهید. دانستن ابتدایی مفاهیم هم به معنی آشنا بودن با یک دانش یا مهارت نیست اما به شما کمک می‌کند که از میزان چیزهایی که نمی‌دانید ارزیابی درستی داشته باشید و بتوانید برای ادامه‌ی راه یادگیری برنامه‌ریزی کنید.

پس از آشنایی با مفاهیم کم کم ارتباطات میان این مفاهیم هم برای شما آشکار خواهد شد. درک این شبکه‌ی مفهومی نقطه‌ی آغاز آگاهی واقعی است. شما وقتی شهر را بلد خواهید بود که بدانید چگونه از هر نقطه‌ای به نقطه‌ی دیگر بروید و چگونه آدرس‌ها را پیدا کنید. پیدا کردن آدرس‌ها و یادگرفتن کوچه و برزن به شما این امکان را می‌دهد که بتوانید در شهر زندگی کنید و نیازهای خود را برطرف کنید. یاد گرفتن ارتباطات مفهومی و چیزهایی که در یک فیلد به هم مرتبط هستند هم کمک می‌کند که بتوانید در یک فیلد آگاهانه مسیر یادگیری خود را مشخص کنید و به میزان لازم از هر آن چیزی که نیاز دارید را یاد بگیرید. یادتان که نرفته، زمان و انرژی ما محدود است و ما باید محاسبه‌گرانه و هدفمند یادبگیریم پس باید به صورت مداوم قید یاد گرفتن چیزهایی را بزنیم که وقت ما را تلف خواهند کرد و به چیزهایی بپردازیم که برای ما اهمیت بیشتری دارند اما باید این توان را داشته باشیم که میان چیزها اولویت‌بندی کنیم.

دانش عمیق، یک درخت تناور به جای مزرعه‌ی هویج

پس از ورود به یک عرصه‌ی تازه‌ی دانش، هنگامی که ما شروع به گشت و گذار می‌کنیم و با چیزهای مختلفی آشنا می‌شویم باید همیشه حواسمان باشد که دانش ما سطحی است و به عمق هر مفهوم یا مهارت نفوذ نکرده‌ایم. با داشتن یک دانش سطحی ما نمی‌توانیم بیش از یک مصرف‌کننده‌ی صرف باشیم و نمی‌توانیم تغییری ایجاد کنیم. ما باید به عمق نفوذ کنیم اما از طرفی هم هر فیلد گستره‌ای وسیع از دانش دارد که عمر ما کفاف نمی‌دهد. پس باید دست به انتخاب بزنیم. به صورت کلی همه جا پیشنهاد می‌کنند که در هر فیلدی یادگیری T شکل داشته باشیم. یعنی در گستره‌ای وسیع دانشی سطحی داشته باشیم و در یک حوزه عمیق شویم.

البته من کمی با این متد مشکل دارم، فکر می‌کنم متد T شکل پس از مدتی دست و پای آدم را می‌بند و به دلیل توانمندی‌هایمان دچار محدودیت می‌شویم. مثل بدن‌سازی که فقط پشت بازو بزند و به باقی بدن کاری نداشته باشد. بازو‌های غول و پاهای ملخ ترکیب جالبی نیست.

تفاوت مدل V شکل و مدل T شکل در یادگیری

من متدی تقریبا V شکل را بهتر می‌‌دانم یعنی اینکه ما نه تنها در یک حوزه‌ی تخصصی که در زمینه‌های اطراف آن نیز دانش خوبی داشته باشیم. این مدل کمک می‌کند که بتوانیم کشف‌های بیشتری داشته باشیم و راهکارهای بهتری ارائه دهیم. در واقع شما با مدل T شکل می‌توانید به ژرفایی عمیق از دانش دست پیدا کنید اما من حس می‌کنم که این مدل آنچنان هم که باید عملگرایانه نیست و اگر شما بخواهید در بسترهای گوناگون از دانش خود استفاده کنید لازم دارید که مجموعه‌ای از مهارت‌های گوناگون را باهم داشته باشید.

جمع‌بندی

یادگیری امری مهم در مسیر توسعه‌ی فردی است و فکر می‌کنم این امر بر کسی پوشیده نیست. اما یادگیری هم مانند هر کار دیگری خود یک دانش و مهارت است. من در چند سال اخیر به دلیل محدودیت‌های زمانی نیاز داشتم که راهی را پیدا کنم که بتوانم چیزهای مختلفی که به آن‌ها علاقه داشتم یا برای پیشرفت شغلی نیاز داشتم را بهتر و سریع بیاموزم و به همین هدف سعی کردم که یاد گرفتن را یاد بگیرم. این نوشته اولین نوشته از مجموعه‌ای است که در آن تلاش خواهم کرد بیشتر درباره‌ی مهارت‌های توسعه‌ی فردی بنویسم. راستی تا یادم نرفته کتاب مهمی که در این فرآیند به من بسیار کمک کرد را به شما معرفی کنم. کتاب Soft Skills: The software developer’s life manual راهنمایی برای زندگی برای توسعه دهنده‌هاست، با لحن کتاب‌های فنی این حوزه نوشته شده و از بخش‌های کوچک و جذابی تشکیل شده که احتمالا پس از خواند هر از چند گاهی به آن‌ها سر خواهید زد. امیدوارم بتوانم در یک یادداشت دیگر درباره‌ی «مهارت‌های نرم» بنویسم، چیزهایی که ما برای زیستن بهتر و تعامل بهتر با دیگران به آن‌ها نیاز داریم. تا آن موقع می‌توانید در توییتر من را با @meysalehi پیدا کنید و نظراتتان را درباره‌ی این متن به من بگویید و با هم در این باره گپی بزنیم.

این مطلب پیش از این در وبلاگ شخصی من منتشر شده.


همچنین شاید نوشته‌ی قبلی من را هم دوست داشته باشید:

http://vrgl.ir/DXNsf

نوشته آغاز یادگیری، ورود به دنیای چیزهایی که نمی‌دانیم اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

الگوی آداپتور (الگوی وفق دهنده) – Adapter pattern با مثال PHP

Adapter pattern

الگوی آداپتور یک الگوی که یاد گیریش ساده است چون که همه ما در دنیای واقعی ازش استفاده میکنیم مثل همین تبدیل های سه شاخه به دوشاخه برق، پس درکش برامون ساده اس.

تبدیل سه شاخه به دوشاخه برق

اول ببینیم آداپتور(مبدل) چه کاری رو برامون انجام میده؟!! من یه مانیتور دارم که به برق نیاز داره که روشنش کنم اما دو شاخه و پریز برق از یک استاندار یا به زبان کد بخوام بگم یک اینترفیس ندارن خب من نیاز به یک وسیله رابط دارم که بتونم دوشاخه رو به پریز وصل کنم خب آداپتور یا به زبان عمیانه تبدیل یا مبدل استفاده میکنم.(آداپتور شارژ لپ تاپ هم از همین موضوع میاد چون برق شهری ۲۲۰ ولت رو به برق قابل استفاده برای شارژ لپ تاپ یعنی حدود ۹ ولت تبدیل میکنه)

فکر کنم حالا میشه حدس زد این دیزاین پترن چی کار میکنه، بریم با یه مثال یاد بگیریم چطوری پیاده سازیش کنیم.

یک مثال ابتدایی در مورد کتاب بزنیم، بیاین تصور کنیم که ما کتاب کاغذی داریم و هر کسی که میاد کتاب بخونه ما کتاب رو واسش باز میکنیم و براش کتاب رو ورق میزنم.

بیاید از درست کردن یک interface برای کلاس کتاب شروع کنیم و سعی کنیم از قوانین SOLID استفاده کنیم. اگه نمی دانید اینترفیس چیه پیشنهاد میکنم یکم در مورد اینترفیس، کلاس و ابسترکت کلاس(class, abstract class, interface) بخونید چیز جالبی هستش و اگه بخوام خیلی خلاصه بگم: یک اینترفیس فقط به شما اجازه می دهد که تا عملکرد(functionality) را تعریف کنید و نه این که آن را اجرا کنید. در حالی که یک کلاس می تواند یک کلاس انتزاعی (abstract class) را گسترش(extend) دهد و می تواند از چندین اینترفیس استفاده کند.

https://gist.github.com/vahid-almasi/4d7ad830ce06aa26db24b8aeb2a8d4a1

خب یه interface BookInterface ساختیم و بهش دو تا متد open و turnPage رو دادیم.

توی فایل بعدی یک کلاس Book ساخیتم و از اینترفیسکه داریم implements اش کردیم (معنیش این میشه که این کلاس باید دو تا متدی که توی اینترفیس بالا تعریف اش کریدم رو باید داشته باشه) و دو تا متد رو هم واسش ساختیم، داخل متد ها فقط برای این که مشخص شه، کاری که میکنند رو var_dump کردیم.

فایل سومی هم همون index.php ما هستش که کلاس person (شخص) رو توش نوشتیم، که یک متد read (خواندن) داره، که شئ ای که کتاب باشه رو بهش میدیم و اون برامون متد های open و turnPage رو اجرا میکنه, برای جلوگیری از این مشکل که شئ ای به جز کتاب بهش داده نشه از تله type-hinting استفاده کردیم (یه جور مثل ولیدیشن عمل میکنه، که مقدار ورودی حتما شئ (obj) باشه و از BookInterface ایمپلمنت شده باشه که حتما اون دو تا متد open و turnPage رو داشته باشه)

تا اینجا همه چی رو به راهه و سیستم داره درست کار میکنه، اما سیستم نیاز یه گسترش پیدا میکنه و ما باید کتاب خوان های الکترونیکی رو هم وارد همین سیستم کنیم. مثل کتاب جلوی افراد بذاریمش، روشنش کنیم و کتاب داخلش رو ورق بزنیم، اما یه مشکلی هست که این دستگاه ها به جای متدهای open و turnPage، متدهای turnOn و pressNextButton دارند.

https://gist.github.com/vahid-almasi/f37d96363c4689bc25ba10572ffded8d
https://gist.github.com/vahid-almasi/ef7da848de6328ed1f0914a0102704a2

فک میکنم که واضحه چی شد دقیقا کاری که برای کتاب انجام دادیم برای این هم تکرار شده، فقط اینو یادتون باشه که ما داریم توی یه شرایط فرضی این مطلب رو میگیم حتی میتونید فرض کنید که این کلاس داخل یک پکیج به شما داده شده و حق بازنویسی این پکیج رو ندارید اما باید از اون استفاده کنید. حالا دقیقا اون جاییه که ما نیاز به یک آداپتور(مبدل) داریم.

برای این کار باید کلاسی بسازیم که از ورودیش eReaderInterface باشه و خروجیش BookInterface پس میشه چیزی شبیه این

https://gist.github.com/vahid-almasi/f122d21013316e1974dc01726b2712b0

برای این که ورودی تابع قوانین این “ReaderInterface” اینترفیس باشه همین اینترفیس رو گذاشتیم واسه type-hinting (قبل آرگومان ورودی متد کانستراکتور) و برای این که کلاس خروجیش تابع قوانین این “BookInterface” اینترفیس باشه کلاس رو از همین اینترفیس ایمپلمنتس میکنیم، حالا متد turnOn رو داخل Open و pressNextButton رو داخل turnPage بر میگردونیم.

و از آداپتوری که ساختیم اینجوری استفاده میکنیم

https://gist.github.com/vahid-almasi/fdf996c151257bb6f0081178903cc752

امیدوارم قابل فهم بوده باشه، اگه نظری انتقادی برای بهتر شدن مطلب هست لطفا از یه طریقی به من نظرتون رو برسونید خوشحال میشم.

و در آخر لینک کامل پروژه روی گیت هاب و منبع که همون جفری وی عزیز هست و من فقط برداشت های خودم رو در قالب این مطلب نوشتم.

https://github.com/laracasts/Getting-Jiggy-With-Adapters
https://laracasts.com/series/design-patterns-in-php/episodes/2

نوشته الگوی آداپتور (الگوی وفق دهنده) – Adapter pattern با مثال PHP اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

محبوب من، ژوپیتر

ژوپیتر نوت‌بوک

چی شد که ژوپیتر؟

یه روز همینجوری داشتم وب گردی می کردم از این ور به اون ور و از این سایت به اون سایت که به یه چیزی برخوردم به نام ژوپیتر (Jupyter) اولا نفهمیدم دقیقا چیه ولی حس کردم باید چیز جالبی باشه برای همین شروع کردم به سرچ کردن درباره‌ش. دیدم یه چیزیه مربوط به کد زدن و پروژه های نمونه ای هم زیاد ازش هست توو اینترنت بعد رسیدم به سایت خودش تا بتونم دقیق تر درباره‌ش بفهمم.

زندگی من، قبل و بعد ژوپیتر

شاید بتونم بگم زندگی من توو زمینه برنامه نویسی به قبل و بعد آشنا شدن با ژوپیتر تقسیم میشه. اولای دانشگاه بودیم و درسای برنامه نویسی رو تازه پاس کرده بودیم و رسیده بودیم به یه سری درس تیوری که خیلیا رو اعصاب بودن، دوست داشتم برنامه نویسی کنم ولی چون ابزار خوبی نبود و حال و حوصله IDE هم نداشتم خیلی حال برنامه نویسی هم توم ایجاد نمی شد. ولی وقتی با ژوپیتر آشنا شدم، دیدم کد زدن چقد می تونه جالب و جذاب باشه برای همین اون حال از دست رفته‌م برگشت و روزها درگیر کد زدن شدم.

حالا این ژوپیتر چی هست؟

نمونه صفحه ژوپین

شما برای اینکه برنامه نویسی کنی می تونی از هییییچ ابزار و نرم افزاری استفاده نکنی و فقط یه ادیتور ساده مثل notepad ویندوز یا gedit اوبونتو رو باز کنی و یه فایل بسازی با پسوند مربوط به اون زبون(حتی گاهی پسوند هم مهم نیست =) ) و برنامه رو بنویسی و با کامپایل و اجرا کنی.

ولی ازونجایی که برنامه نویس ها بعضی وقتا خیلی تنبل می شن شروع کردن به ساختن ابزاری که برنامه نویسی که کارشون رو یه کمی راحت تر کنه (البته خدا وکیلی حق هم داشتن). اول Editorها و بعد IDEها که فرقشون رو می تونین اینجا یه کم دقیق تر بخونین.

حالا ژوپیتر یه چیزیه یه کم پیشرفته تر از اینا یا بهتر بگم مورد مصرفش یه کارای دیگه س. هم برای مبتدی ها خیلی خوبه و هم برای اونایی که می خوان گزارش آماده کنن از کدهاشون یا اسلاید یا نه می خوان نتیجه کداشون رو همونجا توو اون صفحه راحت ببینن با یه گرافیک جذاب =)

اصطلاحا به ابزاری مثل ژوپیتر می گن نوت‌بوک در واقع اسم کاملش Jupyter NoteBook هستش اینجا می تونین به سایت رسمی‌ش سر بزنین. مث یه دفترچه یادداشت که هم کد تووش داره هم عکس هم متن هم چارتا فرمول ریاضی هم نمودار هم … تازه اسلاید هم ازش می تونی خروجی بگیری.

چرا ژوپیتر؟

حالا که یه کمی فهمیدیم چیه ببینیم چرا باید ازش استفاده کنیم و چه ویژگی هایی خوبی داره.

  • اولا که ژوپیتر خیلی خوب و خوشگله و کلی تم داره و خیلی خودت می تونی تغییرش هم بدی
  • تست کردن تووش کد و هی پشت هم اجراش کردن تووش خیلی راحت تره، شما کد رو که می زنی
  • اجراش که می کنی همون زیر نتیجه شو می ده حتی نمودار ها یا عکسایی که داری توو کدت بازشون می کنی
  • تووش مثل یه دفتر یادداشت واقعی می تونی تووش پالا پایین بری و کدارو جابه جا کنی
  • خروجی های متعدد خوبی می ده. از PDF گرفته تا LEX و HTML و حتی خود فایل پایتون(py).
  • یه ابزار دم دستی خوبه که اگه می خوای یه چیزی رو تست کنی راحت می تونی بزنی و نتیجه ش رو ببینی
  • می‌تونی لابه لای کدت متن و توضیح و اینا بنویسی
  • با پکیج های مختلف پایتون سازگاری داره و با ترکیبشون با هم امکانات جالبی می ده که بعدا توضیح می‌دم
  • تحت‌ وب هستش ینی شما باهاش باید توو مرورگر کارکنی و از این جهت خوبه که دیگه فایلات وابسته به سیستم عامل نیست و همه جا می تونی ازش استفاده کنی

ژوپیتر به درد کیا می‌خوره؟

نمایش جدول در ژوپیتر
  • اول برای محقق ها مخصوصا اونایی که دارن تو زمینه تحلیل داده و مصور سازی شون کار می کنن، چون یه سری امکانات و ابزار خوب برای این زمینه داره
  • دوم برای اونایی که می خوان یه کد رو به صورت اسلاید نشون بدن و از روش تدریس کنن
  • سوم برای اونایی که می خوان پروژه ی تحقیقاتی رو که رووش کار کردن رو با توضیحات مفصلش منتشر کنن و در اختیار دیگران قرار بدن
  • چهارم واسه کسایی مث من که دوست دارن لحظه به لحظه و خط به خط کدشون رو تست کنن و زیاد با کدشون و دیتاست های مختلف ور می رن. برای این کار هم خیلی مفید و دم دستیه.

و در آخر …

باید بگم که این ابزار واقعا ابزار خوب و فوق العاده ایه، مخصوصا برای کسایی که خیلی با دیتا کار می کنن. توو این متن فقط خواستم به طور کلی و عمومی با این ابزار و فایده ها و استفاده هاش آشناتون کنم، در ادامه به امید خدا مفصل توضیح می دم که چجوری میشه نصبش کرد و راه انداختش و ازش استفاده کرد و لذت برد.

اگر نکته خاصی رو سوال داشتین توو کامنتا بپرسید.

و اگر این متن رو دوست داشتین و به دردتون خورد با دوستاتون به اشتراک بذارین‌ش

پ.ن: اینجا می تونین ژوپیتر نوت‌بوک رو آنلاین تست کنین.

ممنون 🙂

نوشته محبوب من، ژوپیتر اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

ساخت برند کارفرمایی فنی [اینفوگرافیک]

با رشد شرکت‌های IT در ایران، بازار تقاضا برای جذب نیروهای برنامه نویس توسط سازمان‌ها به شکل روزافزونی رو به افزایش بوده است. یکی از گام‌های اساسی سازمان‌ها برای جذب استعدادهای برتر برنامه نویسی کشور، ساخت برند کارفرمایی فنی (Tech Talent Brand) است.

در این اینفوگرافیک برخی از نکات اساسی برای ساخت یک برند کارفرمای موفق معرفی شده‌اند:

> دانلود نسخه بزرگ اینفوگرافیک

متن اینفوگرافیک:

جذب توسعه‌دهندگان و برنامه‌نویسان در این بازار به شدت رقابتی نیازمند ساخت یک برند قدرتمند کارفرمایی فنی است. برای ساخت این برند نیاز است که مدیران منابع انسانی (HR Managers) و متخصصان جذب نیروهای فنی (Tech Recruiters) با یکدیگر همکاری تنگاتنگی داشته باشند.

۱) اهداف را واضح کنید.

مدیران و استخدام‌کنندگان باید روی اهداف کلیدی استخدام به توافق برسند. این کار به تمام تصمیم‌ها جهت می‌دهد.

۲) مخاطبان را درک کنید.

هر دو گروه باید درک مشابهی از خواسته‌های برنامه‌نویسان داشته باشند.

ملاک‌های اصلی یک برنامه نویس هنگام پیدا کردن کار چیست؟

  • تعادل بین کار و زندگی ۵۶.۵%
  • رشد در حرفه ۵۵.۱%
  • پاداش ۴۵.۴%
  • تیم و افراد هوشمند ۴۳.۶%
  • چالش‌های جالب ۴۳.۳%

۳) مسئول مشخص داشته باشید.

مسئولیت افراد مختلف در ساخت برند کارفرمایی فنی متفاوت است. از این اینفوگرافیک استفاده کنید تا آگاه شوید چه کسانی باید مسئول بخش‌های مختلف این پروسه باشد.

۴) مدیر منابع انسانی: فضایی برای نمایش محیط کارتان ایجاد کنید.

برنامه‌نویسان برای رشد و یادگیری ارزش قائل می‌شوند، پس از فضاهایی مانند وبلاگ‌های مهندسی برای نشان دادن چیزی که می‌سازید استفاده کنید. (نمونه: وبلاگ مهندسی کافه‌بازار)

۴) استخدام‌کنندگان فنی: با توسعه‌دهندگان کنونی صحبت کنید.

با توسعه‌دهندگان خودتان مصاحبه کنید تا متوجه شوید چرا شغل‌شان را دوست دارند و چگونه فرصت‌های رشد به دست آورده‌اند.

۵) مدیر منابع انسانی: از فرصت‌های صحبت کردن حداکثر منفعت را ببرید.

از سخنرانی در کنفرانس‌های توسعه‌دهندگان استقبال کنید تا نوآوری خود را به نمایش بگذارید.

۵) استخدام کنندگان فنی: حضور شرکت خود را در شبکه‌های اجتماعی بیشتر کنید.

با تیم مارکتینگ همکاری کنید تا پست‌های مربوط به برنامه‌نویسان را در رسانه‌های اجتماعی بیشتر کنید.

۶) مدیر منابع انسانی: وارد اجتماع‌های توسعه دهندگان شوید.

ترتیب دادن جلسات، میزبانی از چالش‌های عمومی کدزنی و برگزاری هکاتون می‌تواند به پیشرفت برند کارفرمایی شما کمک کند.

۶) استخدام کنندگان فنی: به چهره‌ی خود در رسانه‌ها توجه کنید.

درصد زیادی از افراد قبل از تصمیم شغلی، در رسانه‌ها و فضای مجازی درباره‌ی شما جستجو و مطالعه می‌کنند.

۷) به صفحه فرصت‌های شغلی خود دقت ویژه‌ای داشته باشید.

صفحه فرصت‌های شغلی شما اهمیت بسیار زیادی در جذب استعدادها دارد. انعطاف پذیری در ساعات کاری، مهارت‌های جدیدی که افراد یاد می‌گیرند، ترسیم مسیر شغلی آن‌ها و مزایایی که شرکت شما در اختیار کارجویان قرار می‌دهد، از جمله چیزهایی است که مورد توجه افراد قرار می‌گیرد. (نمونه: پروفایل شرکت پوشه در کوئرا)

۸۹% توسعه‌دهندگان خواستار ساعات کاری منعطف هستند.

۸) درباره‌ی شرح موقعیت‌های شغلی مجدداً فکر کنید.

در مورد چیزهایی که برنامه نویس در فرآیند استخدام باید انتظارش را داشته باشد و چگونگی ارزیابی مهارت آن‌ها، شفاف باشید.

۹) کارکنان کنونی را درگیر کنید.

نظرات کارکنان فعلی شرکت شما درباره محیط کارشان، اهمیت بیشتری برای کارجویان دارد تا صحبت‌های مدیران عامل و روزنامه‌نگاران. برای جلب اعتماد دیگران، کارکنان خود را تشویق به فعالیت در شبکه‌های اجتماعی کنید.

۱۰) رویکرد داده‌محور داشته باشید.

با ابتکارهای متفاوت آزمایش کنید و سپس داده‌های آن‌هایی که موثر بودند و آن‌هایی که نبودند را جمع‌آوری کنید تا تیم شما در گذر زمان روند پیشرفت خود را حفظ کند.

بر اساس راهنمای برندسازی کارفرمایی در HackerRank

کوئرامگ: نسخه کارفرما، مجله‌ای تخصصی برای مدیران منابع انسانی و مدیران فنی سازمان‌ها است که به شکل ماهانه با مطلب‌هایی در زمینه چالش‌های منابع انسانی در حوزه برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید کوئرا را در لینکدین دنبال کنید.

نوشته ساخت برند کارفرمایی فنی [اینفوگرافیک] اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تجربه آپلود تصاویر با کدگذاری base64 در لاراول

سلام ^_^

موضوع چیه ؟

اگه شما هم از پلاگین های جاوااسکریپتی استفاده کرده باشین حتما لازمتون شده که تصویر رو به صورت کدگذاری شده برای API ارسال کنین. توی این پست قصد دارم هم اعتبارسنجی (Validation) تصویر رو انجام بدم و هم ذخیره سازی روی دیسک.


چی لازم دارم ؟

باید یه اعتبارسنج بنویسم که بتونم به صورت زیر ازش استفاده کنم :

$validator = Validator::make($request->all(), [
    'image' => 'required|base64image:png,jpeg'
]);

و البته خوبه که یک مبدل داشته باشم که تصویر کدگذاری شده رو بازیابی کنه و اطلاعات فایل رو برگردونه.


من چیکار کردم ؟

ابتدا یک هلپر (Helper) برای تبدیل فایل کدگذاری شده نوشتم :

function decodeBase64File( $encodedFile )
{
    // اینجا اطلاعات اضافی رو پاک میکنم تا کد اصلی رو بگیرم
    $file = str_replace(' ', '+', $encodedFile );
    $file = substr( $file, strpos( $file,';base64,' ) + 8 );
    $decodedFile = base64_decode($file);

    // با کمک توابع پی اچ پی، مشخصات فایل رو بررسی می کنم 
    $fileMimeType = finfo_buffer( finfo_open() , $decodedFile , FILEINFO_MIME_TYPE );
    $fileExt = substr($fileMimeType, strpos($fileMimeType,'/')+1);

    return [
        'file' => $decodedFile, // فایل آماده برای ذخیره سازی در دیسک
        'mime'  => $fileMimeType, // نوع فایل
        'ext'   => $fileExt, // اکستنشن فایل
        'size'  => (int)strlen( $decodedFile ) // حجم فایل با واحد بایت
    ];
}

این تابع رشته ی ورودی از سمت کاربر رو میگیره و اطلاعات کامل فایل رو برمیگردونه.


حالا باید کلاس اعتبارسنج لاراول (Validator) رو توسعه بدم و متد دلخواه خودم رو به اون اضافه کنم. طبق مستندات لاراول سه روش برای این کار وجود داره که من ساده ترینش رو انتخاب می کنم ^_^


داخل متد boot از کلاس AppServiceProvider کد های زیر رو اضافه می کنم :

Validator::extend(
    'base64image',
    function($attribute, $value, $params, $validator)
    {
        // اگه پارامتری برای اعتبارسنج ثبت نشه مقادیر پیش فرض زیر رو میگیره
        $validExtensions = $params ?: ['png','jpeg','bmp','gif','webp'];

        // الگوی تصاویر کدگذاری شده با بیس۶۴ به این صورته
        
        $pattern = "/^([A-Za-z0-9+/]+)={0,2}/";
        
        // اگه طبق الگو نبود خب خطا داره 🙂
        if(!preg_match( $pattern , $value)) return false;

        // اطلاعات ارسالی رو  به هلپری که قبلا نوشتم میدم تا صحیح بودنش رو چک کنم
        $decodedImage = decodeBase64File($value);

        // اینم آخرین گام اعتبار سنجی
        // چک میکنیم که اکستنشن فایل، جزو آرایه ی پارامترهای ورودی باشه
        return in_array( $decodedImage['ext'] , $validExtensions );
    }
);

خب اینم از اعتبارسنجمون.

حالا توی کنترلر تصویر رو دریافت و ذخیره می کنم.

$validator = Validator::make($request->all(), [
    'logo' => 'required|base64image:png,jpeg' // از همون اعتبارسنج خودم استفاده میکنم 
]);  

if ($validator->fails())  return abort(400 , $validator->errors());  

// اطلاعات تصویر آپلود شده رو میگیرم
$imageData = decodeBase64File($request->image); 
$extension = $imageData['ext'];
$file= $imageData['file'];

// اسم فایل رو انتخاب میکنم
$imageName = 'uploaded_image.'.$extension; 

// فایل رو یه جایی که میخوام ذخیره می کنم 
Storage::put('uploads/'.$imageName , $file );

به همین سادگی !

الان تصویرمون به خوبی و خوشی آپلود میشه ^_^


سپاسگزارم که تا اینجا رو خوندین، بیشتر سپاسگزار خواهم بود اگر دیدگاهتون رو هم با من به اشتراک بذارین

نوشته تجربه آپلود تصاویر با کدگذاری base64 در لاراول اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تجربه من از شروع کار با PWA(بخش اول)

سلام

این نوشته فقط تجربه شروع من با PWA هست و صدر در صد چون تجربه است و شروعه اولیه برای یادگیری هست شاید دارای اشکالاتی باشه.

خب اصلا PWAچیه؟ Progressive Web Applicationیا PWA یک وب اپلیکیشنه که با مرورگرهای مدرن سازگاری داره البته با مرورگرهای قدیمی هم کار میکنه ولی قابلیت هاش توی مرورگر های جدید بیشتره.

حالا مزایاش چیه؟ اول اینکه برای نصب به مارکت ها احتیاج نداره نصبش خیلی آسونه کاربر اونو به homeScreen گوشیش اضافه میکنه.

دوم اینکه به صورت آفلاین هم میتونه کار کنه و محتوایی رو به کاربر نشون بده در صورتی که کاربر اینترنتش قطع شد از محتوای آفلاین استفاده میکنه.

سوم اینکه کاملا رسپانسیو هستش و سرعت خوبی داره.


خب برای شروع من یک پوشه جدید ساختم و یک پروژه htmlجدید ساختم که از materialize برای css استفاده کردم.هیچ ایده ای برای ساخت نداشتم برای همین یه پروژه ساده ایجاد کردم تا کم کم ببرمش جلو.قیافه اولیه اش هم این شکلیه زیاد چیز جالبی نیست :))

خب بعد اینکه پروژه خودمونو با HTML و CSS ساختیم ( البته من برای باز بسته شدن منو سمت راست از جاوا اسکریپت استفاده کردم) چندتا کار باید انجام بدیم.اولیش اینه که شما برای اجرا گرفتن احتیاج به یک سرور مجازی دارین که از هرکدوم که باهاش راحتین میتونین استفاده کنین.اگر از vs code استفاده میکنید میتونید (live server extension) نصب کنید.دومیش هم یک شبیه ساز برای اجرا گرفتن روی گوشی.که بازم بستگی به سلیقه خودتون داره که از کودوم استفاده میکنین من از شبیه ساز nox استفاده میکنم ولی شما اگر اندروید استودیو دارید میتونید از شبیه ساز اندروید استودیو استفاده کنید.سومین کار اینکه من دو تا فایل به پروژه ام اضافه میکنم.اولیش فایل manifest.json هستش. حالا وظیفه این فایل چیه؟یک سری ویژگی رو داخل خودش داره که نحوه نمایش وب اپلیکیشن رو کنترل میکنه.

فایل manifest.json

خب اما این ویژگی ها چیه:(انگلیسی ها رو آخر پاراگراف نوشتم برای اینکه بهم میریخت:)))

خباماتعریفاینویژگیها:

اسم کوتاهی هست که برای اپلیکیشن انتخاب میشه: Shortname

صفحه شروع اپلیکیشن ما یا همون صفحه خانه: Start_url

دیسپلی: حالت نمایش اپلیکیشن هست (standalone:به صورت اپلیکیشن نمایش میده و fullscreen : به صورت کامل نمایش میده و browser : که به صورت پیشفرض این حالت رو میگیره )

تا زمانی که اپلیکیشن در حال لود شدنه از این رنگ استفاده میشه در پس زمینه : Background_color

این هم مثله رنگ پس زمینه اس کارش فقط رنگ نوار بالایی رو مشخص میکنه : Theme_color

نوع نمایش اپلیکیشن هست که من روی عمودی گذاشتم بقیه مقدارهاشو از این لینک میتونید ببینید : Orientation

این آیکونه برنامه اس.البته برای اسپلش اسکرین برنامه هم ازین استفاده میکنه.یعنی زمانی که کاربر روی آیکون برنامه کلیک میکنه اولین صفحه ای که نمایش میده اسپلش اسکرینی هست که از همین آیکون میسازه و نمایش میده من توی یک آرایه اندازه های مختلفشو ست کردم تا خودش براساس اندازه صفحه نمایش از اونا استفاده کنه : Icons

البته ویژگی های دیگه ام داره که فعلا ازشون استفاده نکردم و نمیدونم چی هستن میتونید شما به این <لینک> برید و مستنداتشو بخونید.

خب کارمون با این فایل تموم شد فقط کافیه که بریم داخل تگ head فایل index.html خودمون و manifest رو لینک کنیم.

خب اگر من به inspect برم و در تب اپلیکیشن روی manifest کلیک کنم میبینیم که فایلم به صفحه ام اضافه شده و ویژگی های manifest رو داره میخونه.

مرحله آخرم هم میام و روی گوشی اونو تست میکنم.خروجی که من داخل گوشی از اپلیکیشن ام گرفتم به شکله زیره:

یک فایل ضروریه دیگه که وب اپلیکیشن بهش احتیاج داره فایل service worker هست.وظیفه این فایل جاوا اسکریپت اینه که اطلاعات مارو بگیره تا زمانی که ما آفلاین هستیم هم بتونیم از اپلیکیشن استفاده کنیم که توی پست آینده هم راجع به اون از چیزایی که فهمیدم می نویسم.

خب همین .تو پست بعدی میگم که چطوری آیکون برنامه رو به هوم اسکرین گوشی منتقل کنیم تا با لمس کردنه آیکون، برنامه برامون اجرا بشه و نیازی به مرورگر نداشته باشیم.

نوشته تجربه من از شروع کار با PWA(بخش اول) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

معرفی بازی برنامه نویسی!

codingame

1 – Robocode:

دراین بازی شما باید با زبان هایی مثل جاوا، اسکالا، سی شارپ و…تانک ها را برنامه نویسی کنید تا با یکدیگر بجنگند

۲ – Codingame:

این بازی که یک وب اپلیکیشنه یه سری معماها و چالش ها رو به شما میده که شما باید با ۲۵ زبان برنامه نویسی که به شما ارائه میشه این چالش ها رو حل کنید

۳ – Codecombat:

این بازی هم یه وب اپلیکیشنه و مثل بازی قبلی دارای معماها و چالش های مختلفه که شما باید اونا رو با کد نویسی حل کنید

۴ – Codewars:

این بازی برای کدنویسی و حل چالش های الگوریتمی طراحی شده و به شما با توجه به راه حلتون امتیاز میده… (این روش جزو روش های جدید یادگیری برنامه نویسیه!)

۵ – Codehunt:

این بازی یک روند جالب برای یادگیری زبان های جاوا و سی شارپ ارائه میده

۶ – Vim Adventures:

این بازی به شما در واقع نحوه ی استفاده از Vim بعنوان یکی از ابزار های قدرتمند ویرایش متن رو آموزش میده

۷ – TIS – 100:

بازی برنامه نویسی به زبان اسمبلی؛ این بازی کاربر رو مجبور به یادگیری و کدنویسی با زبان اسمبلی برای حل معماها میکنه و پایانش بازه

۸ – Shenzhen I/O:

در این بازی کاربر باید با زبان اسمبلی مدار هایی به زبان ساده بنویسه

۹ – Human Resource Machine:

این بازی به تقویت مغز برنامه نویسی، مفاهیم منطقی و مدیریت حافظه کمک زیادی میکنه…

۱۰ – Screeps:

توی این بازی باید با کدهای جاوا اسکریپت رفتار های بازی رو برنامه نویسی کنید و امپراطوری خودتون رو بسازید…

نوشته معرفی بازی برنامه نویسی! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

روز سی ام از چالش ۱۰۰ روز کد زدن – مروری بر مباحث یک ماه

درود بر شما خواننده گرامی،

امیدوارم حال تک تک شما هم میهنان عزیزم خوب و خوش باشه. امروز بعد از گذشت ۳۰ روز از چالش که میشه معادل ۳۰% اون، با توجه به فرار بودن مسائل و همچنین تکرار آنها جهت درج در حافظه بلند مدت، تصمیم گرفتم یک مرور کلی از مباحث ابتدای چالش تا آنچه که دیروز فرا گرفتم، داشته باشم.

به همین دلیل موضوع جدیدی رو بررسی نکردم و اینکار رو برای فردا، سی و یکمین روز از چالش انجام میدم. طبق معمول به شدت به همه شما عزیزان پیشنهاد میدم این فرآیند صد روزه رو انجام بدن. واقعا مسیر پر چالش و لذتبخشی هست که در آینده به عنوان یکی از بهترین تجربیات زندگیتون توی مسیر پر پیچ و خم برنامه نویسی ازش یاد می کنید.

سعی میکنم در پستی جداگانه، مزایا، معایب و تجربیاتم در این ۳۰% رو با شما به اشتراک بگذارم.

شاد و خرم و پیروز، در پناه حق باشید.

https://virgool.io/@mohstarsos1/%D8%B4%D8%B1%D9%88%D8%B9-%DA%86%D8%A7%D9%84%D8%B4-%DB%B1%DB%B0%DB%B0-%D8%B1%D9%88%D8%B2-%DA%A9%D8%AF-%D8%B2%D8%AF%D9%86-fxbkp0t9btcy

نوشته روز سی ام از چالش ۱۰۰ روز کد زدن – مروری بر مباحث یک ماه اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

روز بیست و نهم از چالش ۱۰۰ روز کد زدن – Express JS

درود بر شما خواننده گرامی،

در ادامه چالش ۱۰۰ روز کد زدن و بعد از گذراندن مقدمه ای از Node.js، برای تکمیل مبحث و بنا به پیشنهاد رسمی قریب به اتفاق ۹۹٪ آموزش های Node.js رفتم سراغ فریمورک محبوب و کاربردی Express js.

اکسپرس‌ جی‌ اس (Express js)، یا بطور ساده، اکسپرس (Express) یک فریم‌ورک انعطاف پذیر وب برای نود جی‌ اس است که مجموعه‌ ای از ویژگی ها همچون APIهای ساده در اختیار ما قرار می‌دهد تا در ساختن بخش مدیریت (بک-اند یا back-end) در یک وبسایت یا اپلیکیشن موبایل از آنها استفاده کنیم. اکسپرس متن باز است و درحال حاضر توسط موسسه نود جی‌ اس پشتیبانی می‌شود. اکسپرس (Express js) همچنین میان‌افزارها (middlewares) و تعاریف مسیرنویسی (Routing) پایه را برای ما فراهم می‌سازد. فلسفه ی طراحی این پلتفرم به این صورت است که سعی شده پلتفرم به ابتدایی ترین شکل ممکن طراحی شود و کارکرد ها به صورت افزونه به آن اضافه شود.

در قطعه کد زیر بعد از وارد کردن آدرس localhost:3000 بر روی مرورگر Hello World را مشاهده می کنیم.

شاد و سرافراز و پیروز، در پناه حق باشید.

https://virgool.io/@mohstarsos1/%D8%B4%D8%B1%D9%88%D8%B9-%DA%86%D8%A7%D9%84%D8%B4-%DB%B1%DB%B0%DB%B0-%D8%B1%D9%88%D8%B2-%DA%A9%D8%AF-%D8%B2%D8%AF%D9%86-fxbkp0t9btcy

نوشته روز بیست و نهم از چالش ۱۰۰ روز کد زدن – Express JS اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی