Crafting Interpreters: 15 महीनों में पूरी की गई 640-पेज की किताब
(journal.stuffwithstuff.com)15 महीनों में 640-पेज की किताब पूरी
- 29 जुलाई 2021 को प्रोग्रामिंग लैंग्वेज पर लिखी गई किताब "Crafting Interpreters" पूरी हुई। 15 महीने पहले इसे पूरा बताया था, लेकिन अब यह सचमुच पूरी हो गई है। प्रिंट, e-book और PDF — तीनों संस्करण अब तैयार हैं और खरीदे जा सकते हैं.
- 640 पेज की यह किताब 8 इंच चौड़ी और 10 इंच ऊँची है, यानी अनुमान से काफी बड़ी बन गई.
नया build system विकसित किया
- लगभग एक महीने के आराम के बाद फिर काम शुरू किया। पाठकों द्वारा बताई गई टाइपो और गलतियाँ ठीक कीं।
- किसी खास वजह के बिना किताब का build system Dart में दोबारा लिखा। पहले वाला Python संस्करण बहुत धीमा था और maintain करना मुश्किल था।
- नया build system मनचाहे तरीके से ठीक-ठीक HTML और syntax-highlighted code बनाता है, और पुराने Python संस्करण की तुलना में 10 गुना तेज है।
- इससे Markdown processing पर बेहतर नियंत्रण मिल गया, हालाँकि उस समय यह काम बस मज़े के लिए किया गया था।
किताब की design
- बड़े graphic design project वेब या गेम प्रोग्रामिंग की तरह दो चरणों में चलते हैं। पहले "framework" या "engine" सेट किया जाता है, फिर उसकी संरचना में content भरा जाता है।
- Adobe InDesign में styles और masters सेट किए जाते हैं। master पेज margins और grid lines को define करते हैं, और styles CSS की तरह किसी खास text या object पर font, style और color लागू करते हैं।
- किताब की design शाब्दिक रूप से 2D space में काम करना है। horizontal और vertical — दोनों दिशाओं में यह आसान काम नहीं है।
चौड़ाई और ऊँचाई तय करना
- मुख्य text column इतना चौड़ा होना चाहिए कि वह सबसे लंबी code line को समायोजित कर सके। Aside को किसी खास वाक्य के बगल में रखना होता है, इसलिए उसके लिए अतिरिक्त जगह चाहिए।
- आखिरकार 8-इंच चौड़े पेज metric को चुना गया। 10-इंच ऊँचाई चुनने का कारण POD (Publish on Demand) कंपनी द्वारा समर्थित size constraints थे।
- कुल मिलाकर किताब बड़ी है, लेकिन उम्मीद है कि बहुत ज़्यादा बड़ी नहीं लगेगी। अगर अगली बार किताब लिखूँगा, तो शायद छोटी किताब लिखूँगा।
XML processing
- InDesign XML import को support करता है। कुछ tags पर styles अपने-आप apply की जा सकती हैं।
- Markdown processing पर पूरा नियंत्रण होने की वजह से InDesign के लिए optimize किया गया XML सीधे generate किया जा सका।
InDesign में JavaScript
- सिर्फ XML import से काम नहीं चलता। Aside और code location markers को मुख्य text से निकालकर बगल में रखना पड़ता है।
- InDesign में JavaScript scripting संभव है। लेकिन debugger या stack trace जैसी चीजें नहीं हैं, सिर्फ alert() है।
- किसी तरह Aside और location tags को निकालकर अलग text boxes बनाने वाली script तो लिखी गई, लेकिन सही positioning नहीं हो सकी। InDesign की anchor सुविधा से यह कुछ हद तक हल हुआ।
संपादन कार्य
- पूरी किताब को फिर से पढ़ते हुए edit किया। तब पता चला कि एक ही तरह के शब्द-खेल बहुत बार दोहराए गए थे। इसमें 5 महीने लगे।
- एक professional copy editor को hired किया। Word पर निर्भर editing दुनिया के विपरीत, मैंने plain text और Git पर ही टिके रहना चुना। editor ने इसमें अच्छी तरह खुद को ढाल लिया।
typesetting
- typesetting की प्रक्रिया इस प्रकार थी:
- अगले chapter के लिए नया InDesign file बनाना
- XML में export करना
- InDesign में XML import करना
- JS script से Aside और location tags निकालना
- Sidebar elements पर anchors लगाना
- पेज के आखिर में खाली जगह adjust करना
- चरण 1~5 आसान थे, लेकिन चरण 6 सबसे कठिन था।
- चित्र कटने नहीं चाहिए, Aside अगले पेज पर नहीं जाना चाहिए, और जहाँ तक संभव हो code भी पेज के बीच में नहीं टूटना चाहिए। header के नीचे बिना content के पेज समाप्त होना भी टालना था, और widow/orphan से बचना भी ज़रूरी था।
- 630 पेजों में इन सभी नियमों को लागू करना आसान नहीं था।
illustrations
- illustrations अपेक्षाकृत आसान थीं। वे black-and-white pen drawings थीं, इसलिए print के लिए उपयुक्त थीं।
- लेकिन उन्हें पेज पर रखना अलग समस्या थी। किताब का text illustrations का सीधे संदर्भ देता है, इसलिए illustration उस जगह के पास होना चाहिए जहाँ उसका उल्लेख है। इस वजह से 630 पेजों में illustrations, code और text का संतुलन बैठाने के लिए हाथ से बहुत adjustments करनी पड़ीं।
front/back matter
- पहली बार पता चला कि professional indexers भी होते हैं। मैंने खुद 2 हफ्तों में index बनाया।
- front matter में title, copyright, dedication और acknowledgments जोड़े, और InDesign से table of contents अपने-आप बनवाया। यहाँ तक पहुँचते-पहुँचते आखिरकार किताब का अंदरूनी हिस्सा पूरा हो गया।
cover design
- किताब का cover महत्वपूर्ण है। इस किताब की पहचान pen-and-ink style illustrations हैं, इसलिए उसी का उपयोग करने का फैसला किया गया।
- चढ़ाई के रूपक के रूप में इस्तेमाल किए गए पहाड़ के चित्र को और बड़ा और detailed बनाया। title भी हाथ से दोबारा लिखा।
- रंगों के लिए 1950s scout manual जैसा एहसास चुना गया।
proof copy की समीक्षा
- POD से मँगाई गई proof copy देखकर पहली बार किताब के आकार का वास्तविक एहसास हुआ। इतने लंबे समय के काम का भार महसूस हुआ।
- लेकिन काम अभी खत्म नहीं हुआ था। चूँकि typesetting का बहुत-सा हिस्सा हाथ से किया गया था, इसलिए गलतियाँ रह जाने की संभावना थी और सब कुछ फिर से पढ़कर जाँचना पड़ा।
- InDesign files को Git में डाला, लेकिन वे binary होने के कारण changes देखना मुश्किल था।
- proof copy और changes की तुलना के लिए Dart script से PDF को पेज-दर-पेज images में बदला गया, और Photoshop action से pixel differences वाले हिस्सों पर लाल border खींची गई।
- प्रोग्रामिंग की मदद से यह सटीक रूप से जाँचना संभव हुआ कि सिर्फ इच्छित बदलाव ही हुए हैं, जिससे संतोष मिला।
E-book बनाना
- build system का उपयोग करके EPUB के लिए ज़रूरी XHTML और metadata सब generate किए गए। कई readers पर test करते हुए CSS को adjust किया गया।
GN⁺ की राय
-
6 साल की लंबी यात्रा के बाद 640 पेज की किताब पूरी करना एक बड़ी उपलब्धि है। लेखन प्रक्रिया में Dart से build system खुद बनाना, और typesetting के लिए InDesign scripts लिखना — प्रोग्रामिंग कौशल का इस तरह पूरा इस्तेमाल बहुत दिलचस्प है।
-
खासकर proof copy चरण में changes verify करने के लिए PDF comparison script बनाना वाकई प्रभावित करता है। लगता है कि self-publishing के लिए ऐसी सोच और execution बहुत ज़रूरी होती है।
-
हालाँकि, लक्ष्य पेज size बड़ा होने के कारण typesetting आसान नहीं रही, और printing company की सीमाओं की वजह से size चुनने की स्वतंत्रता भी कम थी। अगली किताब में अधिक publication-friendly size चुनना बेहतर होगा।
-
लेखक ने जैसा कहा, प्रोग्रामिंग लैंग्वेज पर आधारित किताबों में cover design शायद बिक्री पर बहुत बड़ा असर न डाले, लेकिन इस किताब की design concept की तरह content की खासियत को दर्शाने वाला विशिष्ट cover उल्टा एक ध्यान खींचने वाली ताकत बन सकता है।
-
पूरे 6 साल तक समय-समय पर लिखते रहना लेखक के जुनून और धैर्य को दिखाता है। अब बस यह देखना बाकी है कि पाठक इस किताब को कितना अपनाते हैं और कैसी प्रतिक्रिया देते हैं। इतना तय है कि प्रोग्रामिंग लैंग्वेज सीखने वाले बहुत से लोगों के लिए यह किताब निश्चित रूप से मददगार होगी।
1 टिप्पणियां
Hacker News टिप्पणियाँ
Crafting Interpretersके लिए एक वेबपेज है, जिसमें किताब खरीदने का लिंक और मुफ्त online version, दोनों दिए गए हैंWriting an Interpreter in Goपढ़ने के बाद अगली interpreter किताब के रूप में इसे पढ़ने वाला/वाली हूँ; लगभग 200 पेज की लंबाई भी ठीक लगती है और पसंद आई