امضا کردن کامیت‌های گیت [ در گیت‌هاب ] با امضای دیجیتال

اگر برنامه نویس هستین ولی با گیت (git) آشنا نیستین که مهمترین قدم بعدی شما در برنامه‌نویسی یاد گرفتن گیت است. اما اگر برنامه‌نویس نیستین و با گیت‌ هم آشنا نیستین، مهم نیست. الان یه توضیح خیلی خلاصه می‌دم.

گیت‌ یه روش برای نگهداری تاریخچه کارها و مشارکت در یک پروژه است. برنامه‌نویس‌ها (و خیلی‌های دیگه) از گیت‌ استفاده می‌کنن تا تاریخچه کارهاشون رو نگه‌دارن، مسیر پیشرفت و تغییرات و حل مسائل یه برنامه رو مدیریت کنن و بتونن تو پروژه با همکارهاشون روی یک محتوای مشترک کار کنن و بعد با هم ترکیبش کنن.

معمولا وقتی برنامه رو تغییر دادیم و فایل‌ها رو به گیت اضافه کردیم، با دستور commit این دستورات رو «تایید» می‌کنیم و می‌گیم آماده اضافه شدن به [تاریخچه] پروژه است. در این مرحله ممکنه لازم باشه «کامیت رو امضا کنیم»، یعنی با یه امضای دیجیتالی، ثابت کنیم که این تغییر توسط خود ما انجام شده و یکی به اسم ما تغییراتی رو به پروژه اضافه نکرده. روش آسون و سر راست اینکار، استفاده از کلیدهای ssh است. کافیه کلید اس اس اچ خودتون رو داشته باشین (یا با دستور ssh-keygen درستش کنین). این کلیدها معمولا توی لینوکس به مسیر ~/.ssh/ می‌رن.

حالا کافیه به گیت بگین که می‌خواین با اس اس اچ و با فلان کلید کامیت رو امضا کنین:

git config --global gpg.format ssh
git config --global user.signingkey /home/jadi/.ssh/id_rsa.pub

مشخصه که دستورات مربوط به من هستن. دایرکتوری یا اسم فایل شما ممکنه فرق کنه ولی در نهایت باید با کلید public کار کنین. حالا هر وقت کامیتی داشتین، کافیه اونو با سوییچ -S امضا کنین.

git add this_file that_file
git commit -S -m 'This is a signed commit'

و مشخصه که اگر کامیت آخر رو کردین و رییس تازه گفته باید امضاش کنین، می تونین با

git commit --amend -S

اینکار رو بکنین.

البته اگر از گیت‌هاب استفاده می‌کنین، باید کلید پابلیک خودتون رو هم بهش معرفی کنین تا بتونه علاوه بر امضا، تایید هم بکنه که امضا مال شماست. برای اینکار به صفحه https://github.com/settings/keys برین و دگمه اضافه کردن کلید رو بزنین و کلید پابلیک خودتون رو اضافه کنین و توی منوی دراپ داون، اوو به عنوان Signing Key مشخص کنین و خلاص.

نکته مهم: هیچ جایی در مورد کلید خصوصی حرفی کاری نکردیم. هیچ وقت محتویات فایل id_rsa یا فایل‌های مشابه (بدون پسوند pub.) نباید منتشر بشن. مگر اینکه دقیقا بدونین دارین چیکار می‌کنین.

جمعه‌های نرم افزار آزاد و بازمتن؛ شما هم می‌تونین بخشی از این دنیای حرفه‌ای باشین

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

اما از کجا شروع کنیم؟ از فردا؟ احتمالا خیلی‌هامون ماه‌ها یا حتی سال ها است که قراره از فردا اینکار رو شروع کنیم. اما یه ایده بهتر هم هست: از همین جمعه شروع کنیم! از امروز مثلا (: یا مثلا از پنجشنبه. توی دنیا برنامه‌ای هست به اسم جمعه‌ها با اوپن سورس که تشویق می‌کنه آدم‌ها بخشی از روز جمعه که می‌شه آخرین روز کاری‌شون رو به کمک به نرم‌افزارهای آزاد اختصاص بدن. پیشنهاد اینه که برین سراغ پروژه‌هایی که براتون جالبه و سورسشون رو روی گیت‌هاب پیدا کنین و اونها رو فالو کنین. ایشوها رو ببینین و اگر چیزی به نظرتون جالبه سعی کنین برای خودتون حلش کنین. اگر تا حدی موفق بودین می تونین زیر ایشو بگین دارین چیکار می کنین و پیش برین. معلومه که اصل اول اینه که پرمدعا و اسپم نباشیم. واقعا دنبال یاد گرفتن باشیم و همکاری کردن و لذت بردن ازش. من اگر بخوام رو چیزی کار کنم اول سعی می کنم مساله رو حل کنم .. مثلا تا ۷۰٪ و بعد تازه بگم که علاقمند به کار روی این ایشو هستم و اگر موافقت شد نشون بدم که دارم چیکار می‌کنم.

برای شروع می‌تونین سراغ باگ‌های ساده‌تر برین. مثلا توی ایشوها دنبال چیزهایی مثل good for beginners بگردین یا حتی با استفاده از سایت‌هایی مثل Up for Grab (میوه آماده چیدن) ایشوها و باگ‌ها و مشارکت‌های مناسب برای تازه کارها رو پیدا کنین. اگر هم دنبال پروژه‌های حرفه‌ای تر هستین یک ایده خوب اینه که کامیت‌ها رو نگاه کنین و ببینین مشکلات قبلی رو آدم‌های حرفه‌ای تر چطوری حل می کنن. اینطوری هم با پروژه و کدش آشناتر می‌شین و هم شیوه کار بقیه رو می‌بینین و کم کم پترن‌ها براتون آشناتر می‌شه.

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

امروز جمعه است (: دو ساعتی وقت بذارین و توی گیت هاب یا هر جا که دوست دارین عضو بشین و پروژه‌هایی که دوست دارین رو پیدا کنین و استار بدین و فالو کنین … صفحه اکسپلور گیت هاب می‌تونه جای خوبی برای شروع باشه.

پیدا کردن ایشوهای ساده برای مشارکت در هکتبرفست

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

در واقع ایده اصلی هکتبرفست اینه که دست شما در کارهای واقعی روون‌ بشه. در نتیجه اگر مهارتی دارین که فکر می کنین به اندازه کافی توش پیش رفتین و می تونین کارهای واقعی بکنین الان باید آستین بالا بزنین. در هر حوزه ای که باشین یاد گرفتن گیت و درک عمومی مفهوم پول ریکوئست قدم اوله – البته با فرض اینکه در حد برقراری ارتباط، از پس زبان بر میاین. بعدش باید یک پروژه پیدا کنین که توش مشارکت کنین. خیلی از پروژه ها در صفحه issue (مشکلات) می نویسن چه مشکلاتی دارن یا قدم بعدی شون چیه. اونها همچنین برای پیدا شدن راحتتر مشکلات آسونی که یه تازه کار می تونه برش داره، برچسب هایی مثل up for grabs، low hanging fuit و از بیشتر good first issue می زنن تا بگن این مساله، به نظرشون پیچیدگی خاصی نداره و مناسبه برای کسی که تازه می خواد با ماجرا آشنا بشه.

پس کافیه به گیت هاب برین و در سرچ بار چیزی مثل این بزنین

label:"good first issue" type:issue state:open

و در نتایج، بخش issue ها رو انتخاب کنین. معمولا اونهایی که کامنتشون صفر است انتخاب های بهتری هستن چون هنوز کسی روشون کار نمی کنه. همچنین می تونین با اضافه کردن language:rust یا هر زبانی که دوست دارین، زبان پروژه رو هم انتخاب کنین. معلومه که css و html هم جزو گزینه ها هستن.

شاید بعضی ها تمرکز بیشتری روی پروژه داشته باشن و بعضی ها روی خود ایشو. مثلا ممکنه من بخوام حتما در پروژه ای ایشو حل کنم که خودش هم چیز باحالیه. یا شاید بخوام در یک پروژه بسیار ساده، یه ایشوی خیلی ساده پیدا کنم که بهم اجازه مشارکت بده. هر کدوم که باشه در نهایت شما چند تا ایشو می بینین و یکیش به نظرتون جالبتر میاد.

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

  • زیر ایشو بنویسین که علاقمند هستین روی این کار کنین. مثلا May I start working on this؟
  • پروژه رو Fork کنین تا پروژه روی اکانت شما هم بیاد
  • پروژه رو از اکانت خودتون کلون کنید رو کامپیوتر خودتون
  • یه برنچ جدید باز کنید. مثلا به اسم ایشویی که دارین حل می کنین
  • تغییرات رو انجام بدین و تست کنین و مطمئن بشین دقیق است. اگر لازمه در ایشو از صاحب پروژه نظر بخواین در مورد راه حل و شیوه انجاممش و …
  • کد خودتون رو به گیت هاب خودتون پوش کنین (git push origin branch_name)
  • حالا اگر به صفحه اصلی پروژه برین، می بینین که یه دگمه اومده برای ساخت پول ریکوئست جدید. اونو که فشار بدین می تونین بگین برنچ روی فورک شما رو مرج کنه روی پروژه اصلی. خوبه توی توضیحات دقیق بگین چیکار کردین و یه لینک هم به ایشو بدین که گیت هاب اتوماتیک زیر ایشو هم لینک پی آر شما رو بزنه

و منتظر باشین (:

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

این وسط آدم‌های زیادی هم سعی کردن سایت / ریپوزیتوری هایی بسازن که توش این تیپ ایشوهای راحت رو یکجا جمع کنن، به تفکیک زبان یا چنین چیزهایی. مثلا Up For Grabs یا ایشو هاب یا First Timers Only یا مجموعه مشهور Awesome For Beginners ولی اگر نظر من ر می خواین، همون تکنینک سرچ بهتر جواب می ده‌ (:

ویژه هکتبرفست ۲۰۱۹: شیوه فرستادن پول ریکوئست در گیت هاب

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

یک اکتبر دیگه، یک هکتبرفست دیگه؛ زود باشین که بهترین فرصته برای شروع مشارکت در جامعه و بردن یه تی شرت باحال

اگر اهل برنامه نویسی و جنبش‌های آزاد باشین، می دونین که اکتبر ماه مهمی است؛ اگر هم نمی دونستین از این به بعد خواهید دونست. شرکت دیجیتال اوشن هر سال در یک برنامه ترویجی، هکتبرفست رو برگزار می کنه که توش کافیه از اول اکتبر تا ۳۱ اکتبر، فقط ۴ پول ریکوئست پذیرفته شده روی پروژه های روی گیت هاب داشته باشین و به خاطرش یه تیشرت مخصوص این برنامه رو هدیه بگیرین.

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

پس برای گرفتن جایزه و کسب تجربه، کافیه از همین الان شروع کنین و تا ۳۰ روز آینده، حداقل ۴ پول ریکوئست (PR) برای پروژه‌های عمومی گیت هاب بفرستین. حتما سعی میکنم در طول این ماه شیوه های مختلفی برای پیدا کردن پروژه های خوب برای مشارکت بهتون نشون بدم ولی قبل از اون اگر گیت بلد نیستین یاد بیگرین.

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

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

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

نکته ۲: عکس های بالا و پایین، بچه هایی هستن که پارسال تی شرت رو گرفتن و عکسشون رو برای من فرستادن

نکته ۳: سال بعد عکس شما اینجا خواهد بود (: البته اینجای اونجا. یعنی اینجای سال بعد!


مرتضیسم


شهروز.جی


نسرین


ارسلان


فرود و همکارها

سورس calc.exe یا همون ماشین حساب ویندوز روی گیت هاب

اخبار اوپن سورس از مایکروسافت زیاد به گوش می‌رسه و حالا هم کد ماشین حساب ویندوز رو روی گیت هاب گذاشته، اونم با مجوز MIT که حتی از مجوزهای بازی که تبلیغشون می کنیم هم بازتره. با اینم جوز شما حق دارین این سورس رو بردارین،‌ تغییر بدین، ببندین و فایل اجرایی نهایی رو به اسم «ماشین حساب ملی» منتشر کنین و از نظر لایسنسی هیچ خلافی هم نکرده باشین.

رپوزیتوری ماشین حساب ویندوز، تاریخچه رو از ۲۰۱۹ داره و نکته جالبش اینه که از بقیه برنامه نویس‌ها هم خواسته تا اگر کاری به نظرشون می رسه، روش انجام بدن و کامیت کنن. طراحی مدرن ماشین حساب (که یکی از اولین طراحی‌های فلوئنت دیزاین بود) هم باعث نشده که کدبیس قدیمی حذف بشه و شما می تونین حتی کدهایی از ۱۹۹۵ هم توش ببینین. مثلا توابع انجام محاسبات همون‌هایی هستن که از اول بودن و از اعداد گویا (حاصل تقسیم دو عدد صحیح) استفاده می‌کنن. همچنین وقتی لازمه از سری تیلور استفاده می‌شه تا اعدادی که به شکل اعداد گویا قابل بیان نیستن، تقریب زده بشن. بررسی کد نشون می ده این انتخاب در اوایل (مثلا ۱۹۸۹) نبوده و اون موقع از اعداد با ممیز شناور استفاده می‌شده.

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

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

منبع اصلی

به نیمه اکتبر رسیدیم ولی هنوزم وقت دارین توی هَکتُبرفِست، تی شرت برنده بشین

آلمانی ها یه جشن به اسم اکتبرفست دارن که تو تبلیغات این شکلی است:

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

بعد از ثبت نام در سایت هکتبرفست در طول ماه اکتبر ۵ تا پول ریکوئست به پروژه‌های دیگران در گیت‌هاب بفرستین و یکی از دریافت کننده‌های ۵۰هزار تی‌شرت ایونت بشین؛ به همراه استیکرها و از همه مهمتر، سابقه ۵ تا پول ریکوئست

معلومه که اولین سوال‌های خیلی‌ها اینه که «نمی شه به خودمون/دوستمون پول ریکوئست بدیم؟» جواب اینه که احتمالا با کمی تقلب می شه ولی خب چه کاریه. مساله اصلی هکتبرفست اینه که آدم‌ها رو درگیر پروژه‌های دیگران بکنه و یاد بگیریم مشارکت کنیم و کارهای مثبت بکنیم.

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

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

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

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

انتشار رایگان دوره گیت جادی برای مدیریت توزیع شده سورس ها

گیت این روزها مشهورترین و احتمالا پر کاربردترین روشی است که می تونیم باهاش سورس برنامه‌هامون رو مدیریت کنه. در واقع به جای درست کردن یک فولدر «پروژه» و بعد درست کردن یک New folder توش و بعد از مدتی کار کپی کردن New Folder به Working-18tir و بعد کار کردن روی یک فچیر و ذخیره کردن همه کارها در Final2-give2boss و بعد رفع باگ و درست کردن final3-full و … می تونیم به گیت بگیم همه تغییرات رو یادش نگه داره و ورژن بزنه و کد یکی دیگه رو با ما ترکیب کنه و کد جدید رو اسمگذاری کنه و غیره و غیره.

به نظرم دارم توضیحات چرت می دم (: خلاصه بحث اینه که با پیگیری دوستان فرادرس، من بالاخره دوره گیت رایگان رو تموم کردم و می تونین اگر لازم بود ثبت نام کنین. گیت چیزی است که شکی نیست هر کجای دنیای آی تی که باشین به دردتون می خوره و اگر از من می پرسین، هر کسی که با تغییر فایل ها سر و کار داره هم خوبه ازش بسیار بسیار استفاده کنن پس لازمه یک دونه رایگانش باشه، امیدوارم که خوب هم باشه.

سرفصل‌ها اینها هستن:

  • درس یکم: مقدمات گیت و نصب آن
  • درس دوم: اولین اینیت (init) و اولین کامیت
  • درس سوم: بررسی تاریخچه کارها
  • درس چهارم: بررسی تغییرات انجام شده
  • درس پنجم: آشنایی با شاخه ها یا همان برنچ ها (Branch)
  • درس ششم: کمی بیشتر در مورد برنچ ها
  • درس هفتم: آشنایی و استفاده از گیت هاب (GitHub)
  • درس هشتم: بررسی و حل کانفلیکت های (Conflict) ریموت
  • درس نهم: تگ زدن برای شناسایی نسخه ها
  • درس دهم: امضا کردن تگ ها و کامیت ها
  • درس یازدهم: دیباگ کردن با کمک گیت
  • درس دوازدهم: آشنایی با گیت لب و مشارکت در پروژه ها