অবদান

শুরু করবেন কোথা থেকে

এখানকার বেশির ভাগ কাজেই কোড লাগে না। তালিকায় নেই এমন একটি শব্দ মানে এক লাইন, কাজের একটি বাগ রিপোর্ট মানে তিন লাইন, আর চারটি প্ল্যাটফর্মে এখনো কেউ হাত দেননি।

আজ বিকেলেই করে ফেলা যায়, এমন তিনটি কাজ

  1. কিবোর্ড চেনে না এমন একটি শব্দ যোগ করুন

    ধার করা শব্দের তালিকাটি দুই কলামের, আগে বাংলা পরে ইংরেজি: অ্যাকাউন্টের পাশে account। ইংরেজি শব্দ বাংলায় ঢোকে যেকোনো তালিকার নাগালের চেয়ে দ্রুত, আর en_bn_loanwords.tsv-এ একটি লাইন যোগ করলেই একটি শব্দ যোগ হয়ে যায়। এই প্রকল্পে প্রথম অবদান হিসেবে এটিই সবচেয়ে সহজ।

  2. ভুল বেরোয় এমন একটি শব্দ জানান

    তিন লাইন: ইংরেজি বর্ণে ঠিক যা লিখেছিলেন, যে বাংলা এসেছে, আর যে বাংলা চেয়েছিলেন। এই চেহারার রিপোর্ট সাধারণত ওই সপ্তাহেই একটা টেস্ট হয়ে দাঁড়ায়।

  3. এখানে কারও হাতে নেই এমন ফোনে লিখে দেখুন

    কোন ডিভাইস, iOS-এর কোন সংস্করণ আর কোন অ্যাপ, এটুকু লিখে দিলেই হয়। যে বাগগুলো রিলিজ পর্যন্ত টিকে যায় সেগুলো অন্য কারও ফোনেই ঘটে।

সবকিছু আছে github.com/unmukto-org-এ, আর সবটাই এমআইটি লাইসেন্সে।

কেউ শুরু করেননি এমন একটি প্ল্যাটফর্ম তুলে নিন

লিনাক্স, অ্যান্ড্রয়েড, উইন্ডোজ আর ক্রোমওএসের ঘরে এই সাইটে লেখা আছে আসছে, আর আসছে মানে এখনো কেউ শুরু করেননি। তারিখ নেই, রিপোজিটরি নেই, চলছে এমন কোনো কাজও নেই। যেটি চান, সেটি আপনার।

  • লিনাক্স IBus / Fcitx5

    একটি নয়, দুটি কাজ: X11 আর Wayland লেখা নেওয়ার কাজটা এতটাই আলাদাভাবে করে যে একটি শেষ করলে অন্যটি হাতে আসে না। C ABI সেই একই, অ্যাপলের অ্যাপগুলো যেটি ডাকে; কাজেই নিচের রাস্টের দিকটা একটি হেডার আর একটি লিংক ধাপ।

  • অ্যান্ড্রয়েড InputMethodService, JNI

    শূন্য থেকে আঁকা একটি কিবোর্ড, আর ABI-এর উপরে একটি JNI স্তর। ইঞ্জিনের README-তে cabi সুবিধাটি যাদের জন্য, সেই তালিকায় অ্যান্ড্রয়েডের কিবোর্ডের নাম আগে থেকেই আছে। চারটির মধ্যে এটিই সবচেয়ে বড়, অনেকখানি ব্যবধানে, আর ওই আকারের প্রায় পুরোটাই কিবোর্ড, নিচের ইঞ্জিন নয়।

  • উইন্ডোজ TSF text service

    সঙ্গে যে কাজগুলো কেউ পছন্দ করে না: ইনস্টলার, কোড সাইনিং, আর যে ফ্রেমওয়ার্কের সঙ্গে ওই সার্ভিস আসে তার চেয়ে পুরোনো অ্যাপ্লিকেশনেও সেটিকে ঠিকঠাক চালানো।

  • ক্রোমওএস IME API extension

    লিংক করার কিছুই নেই, ইঞ্জিন ব্রাউজারে এমনিতেই চলে, আর লেখার নিয়মের পাতায় যে বাক্সটি আছে সেটি 390 KB-র মতো একটি অপ্টিমাইজ করা WebAssembly বিল্ড। চারটির মধ্যে এটিই সবচেয়ে ছোট।

চারটির একটিও লিপ্যন্তরের সমস্যা নয়: ইঞ্জিন লেখা হয়ে গেছে, পরীক্ষাও হয়ে গেছে, আর একটি স্থির C ABI দিয়ে তার নাগাল পাওয়া যায়। হাত দেওয়ার আগে একটি ইস্যু খুলে জানিয়ে দিন কোন প্ল্যাটফর্ম, অনুমতি চাইতে নয়, বরং একই কিবোর্ডের পেছনে দুজনের তিন মাস যেন না যায়, আর রিপোজিটরিটি যেন প্রথম কমিট থেকেই সবার সামনে থাকে।

কোন জায়গাটা ভুল, বের করে নিন

একই জিনিস অন্য কোথাও লিখে দেখলেই উত্তরটা বেরিয়ে আসে। অক্ষরই যদি ভুল আসে, লেখার নিয়মের পাতায় যে বাক্সটি আছে তাতে লিখে দেখুন: ওতে চলে নিয়মভিত্তিক মূল অংশটি, WebAssembly-তে কম্পাইল করা, কিবোর্ডের সেই একই নিয়ম, কাজেই ওখানেও অক্ষর ভুল এলে দোষ ইঞ্জিনের।

বাক্সটি অক্ষর পর্যন্তই। অক্ষর ঠিক এসে কোনো সংশোধন বা পরের শব্দের পরামর্শ ভুল হলে সেই স্তরটি চলে ইঞ্জিন খেলাঘরে। দুই জায়গাতেই ঠিক এসে অ্যাপে ভুল হলে দোষ অ্যাপের।

তারপর ইস্যুটি খুলুন সেই রিপোজিটরিতে, সমস্যাটি যার। তালিকাটি এই পাতার শেষে; আর নিশ্চিত না হলে যে অ্যাপে লিখছিলেন তার নামেই খুলুন, দুবার লেখার চেয়ে ইস্যু সরিয়ে নেওয়া সহজ।

রিপোর্টে যা থাকলে ভুলটা আবার ঘটিয়ে দেখা যায়

ইংরেজি বর্ণ
ঠিক যা লিখেছিলেন। এই অংশটাই সবচেয়ে বেশি বাদ পড়ে যায়, অথচ ওটা ছাড়া ভুলটা আবার ঘটিয়ে দেখার উপায় থাকে না।
যা এসেছে
বাংলাটা পেস্ট করে দিন, ছবি তুলে নয়। বাংলার স্ক্রিনশট কপি করে টেস্টে বসানো যায় না, তবে সাজ বা ফাঁকা জায়গা নিয়ে কিছু হলে স্ক্রিনশটই ঠিক জিনিস।
যা চেয়েছিলেন
যে বাংলাটা আশা করেছিলেন।
কোথায়
কোন অ্যাপ, কোন ডিভাইস, আর অপারেটিং সিস্টেমের কোন সংস্করণ। আইফোন আর আইপ্যাডে অবাধ অ্যাপের About পর্দায় Copy Build Details নামে একটি বোতাম আছে; ওটিই পেস্ট করে দিন।

পাঁচটি কমান্ডে ইঞ্জিনটি বিল্ড করুন

ইঞ্জিনটি রাস্টে লেখা, আর সেটি নিজে নিজেই বিল্ড হয়।

git clone https://github.com/unmukto-org/obadh_engine
cd obadh_engine
./init.sh
cargo test
cargo run --features cli --bin obadh -- 'aji e probhate robir kor'

init.sh ডেটার সাবমডিউল আর Git LFS-এর ফাইলগুলো নামিয়ে আনে; শব্দভাণ্ডার আর মডেলের ফাইল ওখানেই থাকে। অ্যাপ দুটির জন্য আরও কিছু লাগে: Xcode, XcodeGen, আর এমন একটি রাস্ট টুলচেইন যা দিয়ে সুইফটের সঙ্গে জোড়া লাগা স্ট্যাটিক লাইব্রেরিটি বিল্ড হয়। অ্যাপের দুই রিপোজিটরিতেই ./scripts/bootstrap.sh সেটআপটা করে দেয়, আর প্রথম পুল রিকোয়েস্ট পাঠানোর আগে অবাধ কীভাবে তৈরি সেটুকু দশ মিনিট খরচ করে পড়ে নেওয়া ভালো।

কোডে দুটো জিনিস আছে, আগে থেকে কেউ না বলে দিলে যেগুলোর পেছনে একটা বিকেল চলে যায়। Xcode প্রজেক্টগুলো project.yml থেকে তৈরি হয়, তাই .xcodeproj-এ হাতে করা বদল পরের বার XcodeGen চালালেই মুছে যায়। আর ম্যাকে, ইনস্টল করা ইনপুট মেথড বান্ডলটি মুছে আবার কপি করবেন না, আর open দিয়ে সেটি চালু করবেন না: দুই ক্ষেত্রেই সারিয়ে না তোলা পর্যন্ত প্রতিটি কি-চাপ হারিয়ে যেতে থাকে। ইনস্টলার কাজটা ঠিকভাবে করে; ঝামেলাটা হাতে করতে গেলেই।

কোনো বদল সহজে মার্জ হয় একটা টেস্টের জোরে, আর প্রকল্পের অভ্যাসগুলো কোডেই আছে, দেখে দেখে করা যায়। নিয়মভিত্তিক মূল অংশে হাত দিলে সবচেয়ে বেশি প্রশ্নের মুখে পড়তে হবে, কারণ যে নিয়মটি বদলাচ্ছেন সেটি কারও না কারও আঙুলের মুখস্থ, আর একসঙ্গে সব প্ল্যাটফর্মে। কারণটা সঙ্গে আনুন: বাংলাভাষী কী আশা করেন, বানানের নিয়ম কী বলে, কিবোর্ডে সেটির দাম কত।

বাংলা জানা মানুষের কাজ

বাংলা বানান যিনি জানেন, তিনি এক বিকেলে এমন সব জিনিস ঠিক করে দিতে পারেন যা কোনো প্রোগ্রামার ঠিক করতে পারবেন না। এর বেশির ভাগই একটা টেক্সট ফাইল আর একটা পুল রিকোয়েস্ট।

  • শব্দভাণ্ডার

    obadh_autocorrect_dataset

    845,461টি বাংলা ভুক্তি, সঙ্গে কোনটি কত ব্যবহৃত হয় তার হিসাব; বাছাই করা EPUB, বাংলা উইকিপিডিয়া আর বাংলা সংবাদপত্র থেকে নিয়ে ছেঁকে বানানো। কর্পাসের নিজের বানান-ভুল, নিজের OCR-এর ক্ষত আর নিজের ফাঁকগুলোও এর সঙ্গে আসে: নাম, আঞ্চলিক শব্দ, ভাষায় সদ্য ঢোকা যেকোনো কিছু। অটোকারেক্ট ঠিক ততটাই ভালো যতটা ভালো এই ফাইলটি।

  • ধার করা শব্দের তালিকা

    lexicons/loanwords/en_bn_loanwords.tsv

    1,815টি ভুক্তি থেকে আলাদা ইংরেজি শব্দ পাওয়া যায় 1,776টি, কারণ গুটিকয়েক ইংরেজি শব্দ মানুষ একাধিক বাংলা বানানে লেখে। adapter-এর পাশে আছে অ্যাডাপ্টার; আপনি যে বানানে লেখেন সেটি না থাকলে সেটিও আরেকটি লাইন।

  • বাংলায় ইমোজির শব্দ

    obadh-ios

    ইউনিকোডের CLDR ভাষায় যা চালু আছে তা-ই লিখে রাখে, তাই হৃদয়ের চিহ্নটির বাংলা টীকা সেখানে হার্ট। মানুষ লেখে ভালোবাসা। হাতে সাজানো তালিকায় কেবল সেই শব্দগুলোই ঢোকে যেগুলোর বিপরীতে একজন বাংলাভাষী একটিই ইমোজি আশা করবেন, অন্য কিছু নয়, ফলে প্রতিটি এন্ট্রিই একটা বিচারের ব্যাপার, আর প্রতিটি বানানের নিজের লাইন লাগে।

  • নিয়মগুলো নিজেই

    data/rules/

    data/conjuncts.csv-তে আছে 352টি যুক্তবর্ণ, প্রতিটির উপাদান আর একটি করে উদাহরণ শব্দসহ। কোনো নিয়ম ভুল মনে হলে সেটি ভাষাতাত্ত্বিক যুক্তিসহ একটি বাগ রিপোর্ট, আর সেটি স্বাগত। অন্য কোনো কিবোর্ড কোনো বিকল্প রূপ নেয় বলেই অবাধ সেটি যোগ করে না।

  • অ্যাপ দুটিকে বাংলায়

    obadh-ios, obadh-macos

    অ্যাপ দুটির কোনোটিরই ইন্টারফেস এখনো বাংলায় নেই, চালু করার পর্দা, সেটিংসের সারি, বোতামের লেখা, সবই ইংরেজি। এই সাইটের প্রতিটি পাতা ইংরেজি থেকে অনুবাদ করা নয়, বাংলা হিসেবেই লেখা; যন্ত্রে অনুবাদ করা পাতা এখানে প্রকাশ করা হয় না, আর অ্যাপের লেখাগুলোরও ওই একই হাত দরকার।

  • ডিজাইন

    কিবোর্ড ছাড়া বাকি সব

    ইমোজির প্যানেল, অ্যাপটি নিজে আর এই ওয়েবসাইট, সবই খোলা, আর উপরের চারটি প্ল্যাটফর্মের প্রতিটির সঙ্গেও শূন্য থেকে আঁকার মতো একটি ইন্টারফেস আসে। ব্যতিক্রম কিবোর্ডটি নিজে: তার মাপ আর রং মাপ দিয়ে বাঁধা, তাই এগুলো নাড়ানোর প্রস্তাবের সঙ্গে সেই মাপটাও লাগবে যা বদলটিকে যুক্তিসংগত করে।

কোথায় কী আছে

পাঁচটি রিপোজিটরি, আর প্রতিটির নিচের লাইনটি বলছে তাতে কী কী যায়।

  • রাস্টে লেখা ইঞ্জিন, আর প্রতিটি প্ল্যাটফর্মের ভাগে যেটুকু এক। লিপ্যন্তর, লেখার নিয়ম আর অটোকারেক্ট কোন শব্দকে আগে রাখবে, এসবের ইস্যু এখানে; সঙ্গে নিয়মের উৎস, C ABI, কমান্ড লাইনের টুল আর WebAssembly খেলাঘর।

  • আইফোন আর আইপ্যাডের কিবোর্ড, আর যে অ্যাপ থেকে সেটি চালু করে নিতে হয়। ফোনে যা কিছু চোখে পড়ে বা আঙুলে ঠেকে: কিবোর্ডের সাজ, কি-গুলোর মাপ, পরামর্শের সারি, ইমোজির প্যানেল, হ্যাপটিক, চালু করার ধাপগুলো।

  • ম্যাকের ইনপুট মেথড। শব্দ বসার আগে নিচে দাগ পড়া লেখাটা, ক্যান্ডিডেট বার আর সেটা কোথায় বসছে, ইনপুট সোর্স হিসেবে নিবন্ধন, ডিস্ক ইমেজ।

  • শব্দভাণ্ডার, ধার করা শব্দের তালিকা, আর সেগুলো থেকে বানানো FST ফাইল। শব্দভাণ্ডারে কোনো শব্দ ভুল থাকলে বা না থাকলে সেটি এখানে। শুধু ডেটা, কোনো কোড নেই।

  • বাক্যের কর্পাস, শব্দতালিকা, আর পরের শব্দের মডেল।

ইঞ্জিন খেলাঘরে নিয়মভিত্তিক মূল অংশের সঙ্গে অটোকারেক্ট আর পরামর্শের স্তরগুলোও চলে, যেগুলো লেখার নিয়মের পাতার বাক্সে নেই।

ইস্যু লেখার আগে, আর পরে

কিছু প্রশ্ন ইস্যু লেখার চেয়ে জিজ্ঞেস করে ফেলা সহজ: কোনো জিনিস বাগ না কি টাইপ করার অভ্যাস, কোনো নিয়ম কী করার কথা ছিল, অ্যান্ড্রয়েডের কাজ কেউ শুরু করেছেন কি না। ওগুলো ডিসকর্ডে জিজ্ঞেস করুন। সার্ভারটা নতুন, অ্যাপ দুটোও 0.1.0-তে, তাই ভিড় নয়, ফাঁকা ঘরই পাবেন।

লিখিত হিসাব থাকে GitHub ইস্যুতে, আর প্রশ্ন সেখানেও করা যায়। যে ইস্যু শেষমেশ বাগ নয় বলে বেরোয়, সেটিও প্রকল্পকে জানিয়ে দেয় যে কোথাও কিছু পরিষ্কার ছিল না, আর চ্যাটের কথার সঙ্গে তার তফাত হলো, এক বছর পরেও সেটি খুঁজে পাওয়া যায়।

রিভিউ দেরি হতে পারে। কোনো ইস্যু এক মাস পড়ে থাকতে পারে, কেউ পড়েনি বলে নয়, যিনি পড়েছেন তিনি তখন অন্য কিছুতে ডুবে ছিলেন বলে। বিনিময়ে যা পাবেন তা হলো, গোটা জিনিসটা মাথায় ধরে যায়: একটা ইঞ্জিন, এ পর্যন্ত দুটো অ্যাপ, দু-একটা ডেটার রিপোজিটরি, আর কোড পড়ার আগে শিখে নিতে হয় এমন কোনো ফ্রেমওয়ার্ক নেই। আপনি একটা নিয়ম ঠিক করলে সেটি একসঙ্গে সব প্ল্যাটফর্মে পৌঁছে যায়, কারণ নিয়মটির বাস্তবায়ন একটাই।