কম্পিউটার টিউটোরিয়াল

কমান্ড-লাইন বেস্ট প্র্যাকটিস দিয়ে ওপেন-সোর্স রিপোজিটরি মাস্টার করুন

ইফেক্টিভ колাবোরেশন (effective collaboration), বিশেষ করে ওপেন সোর্স সফ্টওয়্যার ডেভেলপমেন্টে, ইফেক্টিভ অর্গানাইজেশন (effective organization) দিয়ে শুরু হয়। যাতে কিছুই মিস না হয়, সাধারণ নিয়ম, "এক ইস্যু, এক পুল রিকোয়েস্ট" (one issue, one pull request) একটি ভালো রুল অফ থাম্ব (rule of thumb)।

"ডকুমেন্টেশনের সব ব্রোকেন লিংক ফিক্স করুন" (Fix all the broken links in the documentation) মতো বড় স্কোপের একটি ইস্যু খোলার বদলে, ওপেন সোর্স প্রজেক্টগুলো ছোট এবং আরও ম্যানেজযোগ্য (manageable) আকারের একাধিক ইস্যু খোলার মাধ্যমে কন্ট্রিবিউটর (contributors) আকর্ষণ করতে বেশি সফল হয়।

পূর্বের উদাহরণে, আপনি ব্রোকেন লিংকগুলো সেকশন বা পেজ অনুযায়ী স্কোপ করতে পারেন। এটি আরও কন্ট্রিবিউটরদের আটকে যাওয়া ছাড়া ছোট টাইম উইন্ডো সমর্পণ করতে দেয়, একজন বक्ति বড় এবং টедиয়াস (tedious) কন্ট্রিবিউশন নিবেন না সেটি অপেক্ষা করতে হয় না।

ছোট স্কোপের ইস্যুগুলো প্রজেক্ট মেইনটেইনারদের (project maintainers) ও সাহায্য করে দেখতে যে কাজ কোথায় সম্পন্ন হয়েছে এবং কোথায় হয়নি। এটি সেকেন্স কমিয়ে দেয় যে ইস্যুর কোনো অংশ মিস হয়, সম্পন্ন মনে হয়, এবং পরে বাগ বা সিকিউরিটি ভালনারেবিলিটি (security vulnerabilities) এদে।

এটা সব ঠিক আছে। কিন্তু কী হবে যদি আপনি ইতিমধ্যে একাধিক বড় স্কোপের ইস্যু খুলে ফেলেছেন, কিছু PR ইতিমধ্যে সাবমিট বা মার্জ হয়েছে, এবং আপনার বর্তমানে কোনো আইডিয়া নেই যে কাজ কোথায় শুরু বা বন্ধ হয়েছিল?

আপনার প্রজেক্টের স্টেট (state) আবার নিয়ন্ত্রণে আনার জন্য একটু সর্টিং (sorting out) লাগবে। خوشকিসমتی से, একটি গুলগুল রিপোজিটরি স্ক্যান (scan), সর্ট (sort), এবং বুঝতে সাহায্য করার জন্য কমান্ড লাইন টুলস (command line tools) আছে। এখানে আমি যেসব ব্যবহার করি তার একটি ছোট সিলেকশন দেওয়া হলো।

ভিম (vim) দিয়ে ইন্টারেক্টিভ সার্চ-এন্ড-রিপ্লেস (Interactive search-and-replace)

আপনি ভিমে (Vim) একটি ফাইল খুলতে পারেন, তারপর ইন্টারেক্টিভলি সার্চ এন্ড রিপ্লেস করতে পারেন:

:%s/\<word\>/newword/gc 

% বোঝায় করেন্ট ফাইলের সকল লাইনে দেখুন, s মানে সাবস্টিটিউট (substitute), \<word\> পুরো ওয়ার্ড ম্যাচ করে, এবং g "global" মানে প্রতিটি অকারেন্স (occurrence) এর জন্য। শেষে c থাকলে আপনি প্রতিটি পরিবর্তন দেখতে এবং কনফার্ম করতে পারবেন এপ্লাই হওয়ার আগে। আপনি c ছাড়া অটোমেটিক্যালি এবং খুব দ্রুত চালাতে পারেন, কিন্তু প্যাটার্ন ম্যাচিং এরর করলে জটিলতা বড়াতে পারেন।

markdown-link-check নোড মডিউলটির একটি চমৎকার CLI বডি (buddy) আছে।

আমি এটাকে একটু বাশ এলিয়াস ফাংশন (Bash alias function) বনায় ফেলেছি কারণ এত বেশি ব্যবহার করি। একই কাজ করতে আপনার .bashrc-এ এটি যোগ করুন:

# Markdown link check in a folder, recursive function mlc () { find $1 -name \*.md -exec markdown-link-check -p {} \; } 

তারপর mlc <filename> দিয়ে চালান।

ফাইন্ড (find) দিয়ে গিট রিপোজিটরি সহ বা ছাড়া সাবডিরেক্টরি লিস্ট করুন

সকল সাবডিরেক্টরি প্রিন্ট করুন যারা গিট রিপোজিটরি, অর্থাৎ যাদের ভেতরে .git আছে:

find . -maxdepth 1 -type d -exec test -e '{}/.git' ';' -printf "is git repo: %p\n" 

যে সাবডিরেক্টরিগুলো গিট রিপোজিটরি নয়, সেগুলো প্রিন্ট করতে টেস্টকে ! দিয়ে নেগেট (negate) করুন:

find . -maxdepth 1 -type d -exec test '!' -e '{}/.git' ';' -printf "not git repo: %p\n" 

xargs দিয়ে একটি লিস্ট থেকে একাধিক গিট রিপোজিটরি পুল (pull) করুন

আমি একদম 처음에는 এটি বাশ স্ক্রিপ্ট দিয়ে ল্যাপটপ অটোমেটিক্যালি রি-ক্রিয়েট করার অংশ হিসেবে ব্যবহার করেছিলাম, কিন্তু ক্লাউড ইনস্ট্যান্স (cloud instances) বা ডকারফাইলস (Dockerfiles) দিয়ে কাজ করার সময়ও এটি খুব হ্যান্ডি (handy)।

একটি ফাইল দেওয়া আছে, repos.txt যাতে প্রতিটি লাইনে একটি রিপোজিটরির SSH লিংক আছে (আপনার SSH কিজ সেটআপ করা থাকলে), রান করুন:

xargs -n1 git clone < repos.txt 

আপনি যদি অনেক রিপোজিটরি পুল ও পুশ করতে চান, তবে আমি আগে লিখেছিলাম কীভাবে একটি বাশ ওন-লাইনার (Bash one-liner) দিয়ে আপনার রিপোজিটরিগুলো ম্যানেজ করতে হয়।

জট (jot) দিয়ে ইস্যু নম্বর অনুযায়ী লিস্ট করুন

আমি OWASP Web Security Testing Guide রিপোজিটরির কো-অথর (co-author) এবং মেইনটেইনার (maintainer), যেখানে আমি gầnে একটি বড় ইস্যু নিলাম (হ্যাঁ, সেটি ছিল "Fix all the broken links in the documentation" - আপনি কীভাবে অনুমান করলেন?) এবং সেটি বেশ সাতাত্তরটি (thirty-seven) ছোট, আরও ম্যানেজযোগ্য ইস্যুতে ভাগ করলাম।

আমি মূল ইস্যুটি যে ছোট ইস্যুগুলতে রূপान्तরিত হয়েছে সেগুলো এনুমারেট (enumerate) করতে চেस्टাম। কিন্তু সাতাত্তরটি ইস্যু নম্বর (#275 through #312) টাইপ আউট করা খুব টেডিয়াস (tedious) এবং টাইম-কনসামিং (time-consuming) লাগল। তাই, প্রাকৃতিক প্রোগ্রামার ফ্যাশনে, আমি সেই সব নম্বর টাইপ করার সময়টাই বিতর্ক করলাম এবং এর বদলে এটি অটোমেট করার একটি উপায় খুঁজে বের করলাম।

jot ইউটিলিটি (apt install athena-jot) একটি ছোট টুল যা নম্বর প্রিন্ট করার সময় বড় সাহায্য করে। শুধু বলুন কতটা চান, এবং কোথায় থেকে কোথায়।

# jot [ reps [ begin [ end ] ] ] jot 37 275 312 

এটি ২৭৫ থেকে ৩১২ পর্যন্ত প্রতিটি নম্বর ইনক্লूसিভলি (inclusively) নতুন লাইনে প্রিন্ট করে। এগুলাকে ইস্যু নম্বর নোটেশন (issue number notation) বানাতে যা গিটহাব এবং অন্যান্য প্ল্যাটফর্ম অটোমেটিক্যালি রিকগনাইজ করে এবং লিংকে রূপান্তর করে, আপনি আউটপুটকে awk-এ পাইপ (pipe) করতে পারেন।

jot 37 275 312 | awk '{printf "#"$0", "}' #275, #276, #277, #278, #279, #280, #281, #282, #283, #284, #285, #286, #287, #288, #289, #290, #291, #292, #293, #295, #296, #297, #298, #299, #300, #301, #302, #303, #304, #305, #306, #307, #308, #309, #310, #311, #312 

আপনি jot-ও ব্যবহার করতে পারেন র‍্যান্ডম বা রিডান্ডান্ট (redundant) ডেটা জেনারেট করতে, মূলত ডেভেলপমেন্ট বা টেস্টিং উদ্দেশ্যে।

CLI-চালিত ওপেন সোর্স অর্গানাইজেশন

একটি ভালো অর্গানাইজড ওপেন সোর্স রিপোজিটরি হলো একটি ভালো মেইনটেইনড ওপেন সোর্স প্রজেক্ট। এই পোস্টটি হ্যান্ডি রেফারেন্সের জন্য সংরক্ষণ করুন, এবং আপনার নতুন CLI সুপারপাওয়ারগুলো ভালো কাজে লাগান! ?

  1. ৩টি আকর্ষণীয় কমান্ড-লাইন গেম দিয়ে দ্রুত ব্যাশ শিখুন

  2. ৯টি এক্সপার্ট ট্রিক দিয়ে আপনার ম্যাকের গেমিং পারফরম্যান্স বাড়ান

  3. Windows 10 মাস্টার করুন: উন্নত PC নিয়ন্ত্রণের জন্য ১৪টি ضرুরি কমান্ড-লাইন টিপস

  4. সাম্রাজ্য ও কৌশল নির্মাণের জন্য শীর্ষ ৫ ওপেন-সোর্স অ্যান্ড্রয়েড গেম