1 คะแนน โดย GN⁺ 2023-10-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ความรู้เรื่อง โครงสร้างบิตของ ASCII, RS-232, เทอร์มินัลฮาร์ดแวร์ และโมเด็ม ซึ่งครั้งหนึ่งแฮ็กเกอร์เคยรู้กันโดยธรรมชาติ เลิกถูกถ่ายทอดในขั้นตอนเริ่มต้นแล้ว เนื่องจากอุปกรณ์และสภาพแวดล้อมเครือข่ายเปลี่ยนไป
  • คำอย่าง tty, SIGHUP, core dump, README, Ctrl-D เป็นร่องรอยของเครื่องมือที่หายไปแล้ว ดังนั้นถ้ารู้ที่มาจะช่วยให้เข้าใจ Unix สมัยใหม่และธรรมเนียมการพัฒนาได้ดีขึ้น
  • ASCII, เครื่อง 36 บิต, เลขฐาน 8, การตั้งค่า RS-232, MIME, termios, curses และการควบคุมเทอร์มินัล ANSI แสดงให้เห็นชั้นของ ความเข้ากันได้ย้อนหลังทางประวัติศาสตร์ ที่ยังหลงเหลืออยู่ในระบบปัจจุบัน
  • ก่อนอินเทอร์เน็ตแพร่หลาย UUCP, USENET, BBS, FidoNet, FTP, Gopher, ไทม์แชร์ริงเชิงพาณิชย์ และ WAN ทางวิชาการ ต่างรับหน้าที่ โอนย้ายไฟล์·อีเมล·ฟอรัม·การทำงานร่วมกัน ของตนเอง
  • การพัฒนาแบบอิงคลังสาธารณะก่อตัวขึ้นผ่านเทป DECUS, FTP และอีเมล, กลุ่มซอร์สบน USENET, patch(1), SCCS/RCS/CVS, SourceForge, Subversion จนมาถึง Git ในปี 2005

ร่องรอยของ Unix ที่ฮาร์ดแวร์ที่หายไปทิ้งไว้

  • การที่แฮ็กเกอร์รุ่นใหม่ไม่รู้โครงสร้างบิตของ ASCII และอักขระควบคุมแปลก ๆ ไม่ใช่ปัญหาของตัวบุคคล แต่เป็นผลจากการที่ เทอร์มินัลฮาร์ดแวร์ และ RS-232 หายไปจากชีวิตประจำวัน
  • เทอร์มินัลในอดีตไม่ใช่หน้าต่างซอฟต์แวร์ แต่เป็น วิดีโอดิสเพลย์เทอร์มินัล (VDT) ที่เชื่อมต่อกับคอมพิวเตอร์ส่วนกลาง และก่อนหน้านั้นก็ใช้อุปกรณ์ตระกูล teletype ที่พิมพ์ออกบนกระดาษ
  • tty ใน Unix มาจากคำย่อของ teletype, lp ใน /dev/lp คือ line printer และ /dev/drum ใน BSD Unix บางรุ่นมีที่มาจากอุปกรณ์ดรัมหมุนยุคแรก
  • \r Carriage Return คือการกระทำที่ส่งหัวพิมพ์กลับไปทางซ้ายของบรรทัด และ Unix จัดการท้ายบรรทัดด้วย \n เพียงตัวเดียว แต่ระบบปฏิบัติการอื่นยังคงใช้ \r\n ต่อไป
    • เหตุที่ลำดับเป็น \r\n เพราะในฮาร์ดแวร์ยุคแรก carriage return ใช้เวลานานกว่าการส่งอักขระหนึ่งตัว จึงต้องสั่งให้ทำก่อน
  • วิธีที่ผู้ใช้หลายคนแบ่งใช้ CPU ของคอมพิวเตอร์ส่วนกลางเครื่องเดียวกันถูกเรียกว่า timesharing และร่องรอยของมันยังคงอยู่ในโครงสร้างเทอร์มินัลเสมือนหลายตัวของ Unix สมัยใหม่

RS-232, โมเด็ม และคำสั่ง AT

  • RS-232 เป็นโปรโตคอลฮาร์ดแวร์ที่พัฒนาขึ้นช่วงต้นทศวรรษ 1960 เพื่อให้ teletypewriter และโมเด็มสื่อสารกัน และลิงก์ “serial” ก่อนยุค USB โดยทั่วไปหมายถึง RS-232
  • โมเด็มเป็นอุปกรณ์ที่ทำให้ส่งสัญญาณดิจิทัลผ่านสายโทรศัพท์ได้ และแฮ็กเกอร์มักใช้ โมเด็มภายนอก ที่เป็นกล่องแยกต่างหาก
    • โมเด็มภายในไวต่อสัญญาณรบกวน RF ภายในเคส และไฟแสดงสถานะของโมเด็มภายนอกมีประโยชน์ในการวินิจฉัยปัญหา
    • การเชื่อมต่อสำเร็จและการซิงโครไนซ์ล้มเหลวพอจะแยกแยะได้จากเสียงปี๊บ ๆ ซ่า ๆ ของโมเด็ม
  • HUP ใน SIGHUP ของ Unix คือ Hang Up เดิมหมายถึงสถานการณ์ที่การเชื่อมต่อโมเด็มถูกตัดและเทอร์มินัลควบคุมหายไป
  • ความเร็วโมเด็มเพิ่มจาก 110bps ไปจนถึง 56kbps ในช่วงปลายทศวรรษ 1990 และในช่วงที่เสถียรราวปี 1984~1991 ความเร็ว 9600bps เป็นเรื่องทั่วไป
    • ด้วยเหตุนี้ อุปกรณ์ serial-protocol ที่ยังหลงเหลืออยู่จึงมักใช้ 9600bps เป็นค่าเริ่มต้น
  • คำนำหน้าคำสั่ง AT ของ Hayes Smartmodem กลายเป็นมาตรฐานโดยพฤตินัยหลังปี 1981 และสามารถโทรออกได้ด้วยการใส่หมายเลขโทรศัพท์ต่อท้าย ATDT
    • รูปแบบบิตของ AT มีลักษณะที่ตัวรับจดจำได้ง่ายแม้ไม่รู้ความเร็วการส่ง จึงเอื้อต่อการซิงโครไนซ์อัตโนมัติ
    • แม้ในปี 2017 ก็ยังพบคำสั่ง AT ในฟังก์ชันควบคุมโมเด็มเซลลูลาร์ 3G/4G ของสมาร์ทโฟน และในชนิดหนึ่งที่แพร่หลาย มีการใช้ AT+QLINUXCMD= เป็นคำนำหน้าสำหรับส่งคำสั่งไปยังอินสแตนซ์ Linux ในเฟิร์มแวร์ของชิป

“core”, เครื่อง 36 บิต และเลขฐาน 8

  • ราวปี 1955~1975 ก่อนยุคหน่วยความจำเซมิคอนดักเตอร์ หน่วยความจำกระแสหลักคือ core memory ที่ทำจากห่วงเฟอร์ไรต์เล็ก ๆ และลวดทองแดง และคำศัพท์ Unix อย่าง in core, core dump ก็เกิดจากสิ่งนี้
  • หลังปี 2000 เมื่อระบบมัลติโปรเซสเซอร์กลายเป็นเรื่องพบได้ทั่วไปบนเดสก์ท็อป core ก็เริ่มถูกใช้เป็นคำย่อของ processor core ด้วย และความหมายเดิมด้านหน่วยความจำก็ค่อย ๆ ถูกเข้าใจน้อยลง
  • ลำดับชั้นแบบไบต์ 8 บิตและเวิร์ด 16/32/64 บิตกลายเป็นสิ่งแพร่หลายโดยพฤตินัยหลังปี 1983 แต่ก่อนหน้านั้นมีธรรมเนียมสถาปัตยกรรม เวิร์ด 36 บิต ที่สำคัญ
    • DEC PDP-10 และ Symbolics 3600 Lisp machine เป็นตัวอย่างเด่นของเครื่อง 36 บิต
    • การยกเลิก PDP-10 ในปี 1983 เป็นสัญญาณถึงจุดจบของสายตระกูลนี้ และ Symbolics 3600 ยังยืนหยัดต่อได้อีกประมาณ 10 ปีหลังจากนั้น
  • เวิร์ด 36 บิตแบ่งเป็นฟิลด์ 3 บิตได้ 12 ช่อง ทำให้การแทนด้วยเลขฐาน 8 เป็นธรรมชาติ และเคยถือกันว่าสามารถแยกสาย 32 บิตกับสาย 36 บิตจากการดูว่ามีตัวเลขที่มากกว่า 7 ปรากฏใน memory dump หรือไม่
  • ไวยากรณ์ที่ 0 นำหน้า numeric literal ใน C หมายถึงเลขฐาน 8 มาจากประวัติของ B และ PDP-7/PDP-11 และหลายภาษา เช่น Java·Python ก็รับร่องรอยนี้ต่อมาโดยทำตามกฎเชิงคำศัพท์ระดับต่ำของ C
    • Python 3, Perl 6 และ Rust เอาไวยากรณ์เลขฐาน 8 แบบ leading-0 ที่อันตรายออกไปแล้ว แต่ Go ยังคงไว้
    • แม้คำอธิบายชุดคำสั่ง x86 มักใช้เลขฐาน 16 แต่ส่วนใหญ่จะเป็นธรรมชาติกว่าถ้าเข้าใจด้วยฟิลด์ 3 บิตและแทนด้วยเลขฐาน 8

นรกของการตั้งค่า RS-232 กับโลก 7 บิต

  • ลิงก์ TCP/IP มักดูเหมือนสตรีมไบต์ 8 บิตที่สะอาด แต่อุปกรณ์ RS-232 ต้องให้ทั้งสองฝั่งตั้งค่าความเร็วสาย, การจัดเฟรมไบต์, parity และ stop bit ให้ตรงกัน
  • หลังปี 1984 8N1—8 บิต, no parity, 1 stop bit—เริ่มใช้กันทั่วไป แต่ก่อนหน้านั้นมีการใช้หลายชุดค่าผสม และถ้าตั้งค่าไม่ตรงกันก็จะเห็นเพียงขยะ 8 บิตแบบสุ่มที่เรียกว่า baud barf
  • เหตุที่อินเทอร์เฟซเทอร์มินัล POSIX/Unix termios(3) มีตัวเลือกซับซ้อนจำนวนมากซึ่งในสมัยนี้ดูไม่ค่อยมีความหมาย ก็เพราะเคยต้องใช้ควบคุมการตั้งค่า RS-232 เหล่านี้
  • ถ้าเปิด parity ไว้ บิตบนของข้อมูลไบนารี 8 บิตอาจเสียหายได้ และเครือข่ายกับซอฟต์แวร์ที่ไม่ทำให้บิตบน 0x80 พังถูกเรียกว่า 8-bit clean
    • การเข้ารหัส MIME สำหรับอีเมลและ MIME64 เกิดขึ้นเพราะสภาพแวดล้อมที่ยังมีข้อจำกัด 7 บิตเช่นนี้หลงเหลืออยู่
    • ก่อน MIME มีการใช้ uuencode/uudecode ในสภาพแวดล้อม Unix เพื่อแปลงข้อมูล 8 บิตให้เป็น 7 บิต และทุกวันนี้ก็ยังอาจพบเจอได้เป็นครั้งคราว
  • คอนเน็กเตอร์ RS-232 ก็มีทั้ง DB-25 และ DB-9 ปะปนกัน และต้องใช้อุปกรณ์อย่าง gender changer, อะแดปเตอร์ DB-25↔DB-9, breakout box และ null modem
    • หลังปี 2000 เกิดกับดักที่ RS-232 มาตรฐานของ DB9/DB25 กับ TTL serial บนแผงวงจรใช้สัญลักษณ์ RS232 เหมือนกัน
    • TTL serial อยู่ที่ระดับ 3.3V หรือ 5V ส่วน RS-232 มาตรฐานใช้การแกว่งแรงดันที่สูงกว่ามาก ดังนั้นถ้าเชื่อมต่อโดยไม่มี level shifter ชิ้นส่วนฝั่ง TTL จะเสียหาย
  • RS-232 หายไปจากสามัญสำนึกช่วงกลางถึงปลายทศวรรษ 1990 แต่ไม่ได้หายไปจากคอมพิวเตอร์เอนกประสงค์โดยสมบูรณ์จนราวปี 2010 และยังคงอยู่ในอุปกรณ์ POS, คอนโซลวินิจฉัยของเราเตอร์เชิงพาณิชย์, คอนโซลดีบักระบบฝังตัว, เซนเซอร์ GPS และอุปกรณ์ IoT

WAN และชุมชนก่อนยุคอินเทอร์เน็ต

  • ปัจจุบัน WAN แทบจะหลอมรวมมาที่อินเทอร์เน็ต TCP/IP แล้ว แต่ตั้งแต่ปลายทศวรรษ 1970 ถึงกลางทศวรรษ 1990 เคยมี pre-Internet WAN หลายแบบอยู่ร่วมกัน
  • UUCP ย่อมาจาก Unix to Unix Copy Program หลังออกมานอก Bell Labs ในปี 1979 จนถึงก่อนที่อินเทอร์เน็ตสาธารณะจะแพร่หลายในช่วงกลางทศวรรษ 1990 มันให้บริการเครือข่ายต้นทุนต่ำระหว่างไซต์ Unix ผ่านโมเด็มและเครือข่ายโทรศัพท์
    • เดิมทีเป็นระบบ store-and-forward สำหรับกระจายซอฟต์แวร์อัปเดต แต่การใช้งานหลักกลายเป็นอีเมลและ USENET ซึ่งเริ่มในปี 1980
    • ภายใต้โครงสร้างค่าโทรศัพท์ที่แบ่งเป็นแบบเหมาจ่ายสำหรับ local และคิดตามปริมาณสำหรับ long-distance ทราฟฟิก UUCP สามารถต่อ local hop ไปเรื่อย ๆ เพื่อเลี่ยงการส่งระยะไกลได้
  • USENET เป็นเมล็ดพันธุ์ของธรรมเนียมโอเพนซอร์สยุคใหม่จากกลุ่มแชร์ซอร์สโค้ด และชื่อไฟล์เมทาดาทาของโปรเจกต์อย่าง README, NEWS, INSTALL ก็เริ่มลงหลักปักฐานที่นั่นในช่วงต้นทศวรรษ 1980
    • Great Renaming ในปี 1987 คือการจัดระเบียบลำดับชั้นชื่อกลุ่มของ USENET ใหม่
    • ในปี 1993 เมื่อ AOL เปิดให้ผู้ใช้เข้าถึง USENET ก็เป็นจุดเริ่มต้นของ “September that never ended” และการหลั่งไหลเข้ามาของผู้ใช้ใหม่จำนวนมากทำให้การปรับตัวเข้ากับวัฒนธรรมเป็นเรื่องยาก
  • ที่อยู่ UUCP อยู่ในรูป bang-path เช่น …!bigsite!foovax!barbox!user และเมื่อการเข้าถึงอินเทอร์เน็ตเพิ่มขึ้นในช่วงต้นทศวรรษ 1990 ก็ถูกแทนที่ด้วยรูปแบบ user@hostname
    • ในช่วงเปลี่ยนผ่าน ยังมีที่อยู่แบบไฮบริดที่ใช้ % ผสานการกำหนดเส้นทางของ UUCP กับการกำหนดเส้นทางของอินเทอร์เน็ตด้วย
  • BBS โดยทั่วไปคือระบบที่ให้ผู้ใช้เชื่อมต่อได้ทีละคนเข้ากับคอมพิวเตอร์ที่ต่อโมเด็มหนึ่งตัว เพื่อใช้งานข้อความ อัปโหลด·ดาวน์โหลดไฟล์ และเกม
    • BBS แรกเริ่มให้บริการใน Chicago ในปี 1978 และตลอด 18 ปีต่อมา มี BBS เกิดขึ้นแล้วหายไปมากกว่า 100,000 แห่ง
    • ตั้งแต่ปี 1984 FidoNet รองรับอีเมลระหว่าง BBS และระบบฟอรัมที่คล้าย USENET
    • XMODEM, YMODEM, ZMODEM แทบจะเป็นความทรงจำเดียวที่เหลืออยู่จากวัฒนธรรม BBS และแม้ในปี 2018 อุปกรณ์ Cisco บางรุ่นก็ยังได้รับแพตช์ด้วยการอัปโหลด XMODEM ผ่าน serial port
  • ยังมีบริการไทม์แชร์เชิงพาณิชย์อย่าง AOL, CompuServe, GEnie, The Source, Prodigy และ WAN ทางวิชาการอย่าง CSNET, BITNET, EARN, VIDYANET ด้วย ส่วนคำว่า listserv มีที่มาจาก email reflector ของ BITNET

FTP, Gopher และการเข้าถึงข้อมูลก่อนเว็บ

  • ก่อนที่ World Wide Web จะแพร่หลายภายในเวลาไม่กี่ปีช่วงต้นทศวรรษ 1990 การถ่ายโอนไฟล์ระหว่างไซต์อินเทอร์เน็ตตั้งแต่ปี 1971 มักทำผ่าน ftp และ File Transfer Protocol
  • เมื่อเว็บเบราว์เซอร์สามารถสื่อสารโปรโตคอล FTP ได้โดยตรง การใช้งาน ftp ส่วนใหญ่จึงถูกดูดซึมเข้าไปอยู่ในเบราว์เซอร์ และคำนำหน้า URL ftp: บ่งชี้ว่าต้องสื่อสารกับเซิร์ฟเวอร์ FTP
  • ในปี 1991 ปีเดียวกับที่ Tim Berners-Lee สร้าง World Wide Web เหล่าแฮ็กเกอร์ที่ University of Minnesota ได้สร้าง Gopher โปรโตคอลไฮเปอร์เท็กซ์แบบเน้นเมนู
  • Gopher แข่งขันกับ Web ยุคแรกอยู่หลายปี แต่เมื่อต้นปี 1993 มหาวิทยาลัยตัดสินใจคิดค่าไลเซนส์สำหรับการใช้งานอิมพลีเมนเทชัน การนำไปใช้จึงชะลอลง
  • เว็บเบราว์เซอร์ยุคแรกรองรับโปรโตคอล Gopher และการแสดงเอกสาร แต่ภายในปี 2000 Gopher ก็แทบหายไป เหลือเพียงเซิร์ฟเวอร์บางส่วนที่ดำเนินการด้วยความหมายเชิงโหยหาอดีตและประชดประชัน

มรดกของเทอร์มินัลอีมูเลเตอร์และ VDT

  • เทอร์มินัลอีมูเลเตอร์ของ Unix สมัยใหม่ใกล้เคียงกับรูปแบบสุดท้ายที่สืบทอดมาจากดิสเพลย์ยุคแรกที่เลียนแบบ teletype นั่นคือ glass TTY และ dumb terminal
  • อุปกรณ์ประเภทนี้เครื่องแรกถูกส่งมอบในปี 1969 และโมเดลที่เป็นที่จดจำดีคือ ADM-3 ปี 1975
  • VDT ยุคแรกแสดงได้เฉพาะตัวพิมพ์ใหญ่เหมือน ASR-33 และ Unix รวมถึง Linux ในปี 2018 ยังคงพฤติกรรมที่หากชื่อสำหรับล็อกอินขึ้นต้นด้วยตัวพิมพ์ใหญ่ จะสลับไปโหมดที่เปลี่ยนอินพุตทั้งหมดเป็นตัวพิมพ์ใหญ่
  • “smart terminal” อย่าง ADM-3A ที่เริ่มปรากฏตั้งแต่ปี 1975 และ DEC VT-100 ในปี 1978 ทิ้งมรดกเป็นความกว้าง 80 ตัวอักษรซึ่งมาจากบัตรเจาะรู และขนาดหน้าจอพื้นฐาน 24x80 หรือ 25x80
  • ฟังก์ชันควบคุมอย่าง cursor addressing, bold, underline, reverse-video กลายเป็นเรื่องแพร่หลาย และเพื่อทำ abstraction ให้กับสิ่งเหล่านี้ Unix จึงใช้ฐานข้อมูล terminfo และไลบรารี curses(3)
  • หลังปี 1979 โค้ดควบคุมเทอร์มินัล ANSI ที่อิง DEC VT-100 แพร่หลายขึ้น และในช่วงต้นทศวรรษ 1990 ความเข้ากันได้กับ ANSI บน VDT ก็แทบจะเป็นมาตรฐานทั่วไป
  • ราวปี 1992 เมื่อ bitmapped color display ของคอมพิวเตอร์ส่วนบุคคลตามทันระดับ dot pitch และการแสดงข้อความที่คมชัดของ VDT ขาวดำ ตลาด VDT ในงานคอมพิวติ้งทั่วไปก็พังทลายลงอย่างรวดเร็ว
  • บรรทัดคำสั่งของ Unix มาจากยุค printing terminal ที่มาก่อน VDT และนี่ก็เป็นเหตุผลที่ใช้คำว่า “printing” ในความหมายว่าการส่งออกผลลัพธ์
  • อินเทอร์เฟซสองมิติแบบตัวอักษรอย่าง vi(1), top(1), mutt(1) เคยเป็นอินเทอร์เฟซภาพขั้นสูงในยุค VDT และภายหลังเมื่อคำว่า GUI กลายเป็นคำทั่วไป จึงได้ชื่อว่า TUI
  • screensaver เริ่มจากซอฟต์แวร์ที่เปลี่ยนภาพบนหน้าจอเพื่อป้องกัน phosphor burn-in ของ CRT และเมื่อมาถึง flat screen เป้าหมายดั้งเดิมก็หายไป

bitmapped display ยุคแรกและสุนทรียะ 8-bit

  • ตัวอย่างแรกของระบบใช้งานจริงที่นำไปสู่ดิสเพลย์แบบจัดการระดับพิกเซลในปัจจุบันคือ Alto ของ Xerox PARC ในปี 1973
    • ดิสเพลย์ของ Alto มีขนาด 608x808 พิกเซล ส่วนความทรงจำที่ว่าเป็นระดับ 1024x1024 นั้นสับสนกับดิสเพลย์รุ่นหลัง
    • Dandelion ในปี 1981 ทำได้ถึง 1024x809 และความพยายามทำตลาดเชิงพาณิชย์ในชื่อ Xerox Star ก็ล้มเหลว
    • Sun-1 ของ Sun Microsystems ในปี 1982 ให้ความละเอียด 1024x800 พิกเซล และเวิร์กสเตชันระดับ Sun กลายเป็นสิ่งที่แฮ็กเกอร์จำนวนมากอยากมี
  • คอมพิวเตอร์สีส่วนบุคคลมี primitive bitmapped display ตั้งแต่ปี 1975 แต่โหมด Hi-res ของ Apple II มีเพียง 280x192 เท่านั้น
  • แฮ็กเกอร์ต้องการการแสดงข้อความที่ดีสำหรับการเขียนโปรแกรม และรู้จักกราฟิกเวิร์กสเตชันระดับ 1024x1024 อยู่แล้ว จึงมักมองดิสเพลย์สีสำหรับผู้บริโภคที่อิงทีวีว่าแทบไม่มีประโยชน์ เป็นเหมือนของเล่น
  • original Macintosh ปี 1984 เป็นเครื่องสำหรับผู้บริโภครุ่นแรกที่มี bitmapped display เฉพาะขาวดำ 512x342 และไม่นาน IBM EGA กับเครื่องโคลนก็ให้ 640x350 แบบ 16 สี
  • ราวปี 1990 มอนิเตอร์สี 1024x1024 จึงไปถึงตลาดผู้บริโภคระดับสูง และเมื่อเริ่มแพร่หลายราวปี 1992 ผู้ผลิต PC ก็เริ่มกดดันผู้ขายเวิร์กสเตชัน
  • แฮ็กเกอร์รุ่นเยาว์บางส่วนในช่วงกลางทศวรรษ 1980 พยายามดึงประสิทธิภาพสูงสุดจากดิสเพลย์สีความละเอียดต่ำและฮาร์ดแวร์เสียงยุคแรก ผลลัพธ์อย่าง chunky graphics, pixelated sprites และเสียง chirpy/buzzy ถูกนำมาใช้เป็นความโหยหา 8-bit ในเกมศตวรรษที่ 21

วัฒนธรรมเกมก่อน GUI

  • ก่อนที่ bitmapped color display จะแพร่หลาย มีธรรมเนียมของเกมที่ทำงานได้ด้วยเพียง text interface และกราฟิกแบบเซลล์อักขระของ VDT อย่างแข็งแกร่ง
  • เกมตระกูล Trek เป็นกลุ่มเกมที่ย้อนกลับไปได้ถึงปี 1971 โดยผู้เล่นควบคุม Enterprise เพื่อต่อสู้กับ Klingon, Romulan และฝ่ายอื่น ๆ
    • เบื้องหลังอินเทอร์เฟซที่หยาบมากซึ่งออกแบบมาสำหรับ teletype มีวอร์เกมที่ค่อนข้างซับซ้อนซ่อนอยู่ โดย initiative, tactical surprise และ logistics มีความสำคัญ
  • Colossal Cave Adventure คือ dungeon-crawling adventure game เกมแรกในปี 1977 และวลี “You are in a maze of twisty little passages, all alike” กับ xyzzy ก็มาจากเกมนี้
    • เพราะชื่อไฟล์บน PDP-10 จำกัดไว้ 6 อักขระ ผู้ใช้ยุคแรกจึงเรียกเกมนี้ว่า ADVENT ด้วย
    • ยังมีพอร์ต C สมัยใหม่ชื่อ ADVENT ด้วย
  • Zork เป็นผู้สืบทอดโดยตรงของ ADVENT ที่แฮ็กเกอร์ MIT เผยแพร่ครั้งแรกบน PDP-10 ในปี 1979 และต่อมาก็ประสบความสำเร็จในเชิงพาณิชย์
    • คำอย่าง zorkmid, Great Underground Empire และ grue มาจากเกมนี้
  • roguelike คือกลุ่มเกมที่ได้ชื่อมาจาก Rogue ในปี 1980 มีรูปแบบคือผู้เล่นต่อสู้กับมอนสเตอร์และค้นหาสมบัติในดันเจียนที่เป็นแผนที่มุมมองจากด้านบน
    • Hack ปรากฏในปี 1982 และ Nethack ในปี 1987
    • Nethack เป็นหนึ่งในโปรแกรมยุคแรกที่สุดที่กลุ่มพัฒนาถูกจัดตั้งขึ้นอย่างตั้งใจให้ทำงานร่วมกันแบบกระจายผ่านอินเทอร์เน็ต และความแปลกใหม่นั้นสะท้อนอยู่ในชื่อโปรเจกต์
  • เกมลูกหลานของ Rogue เคยเป็น TUI games ที่ได้รับความนิยมและประสบความสำเร็จมากที่สุด และแม้จะหายไปจากความรู้ทั่วไปหลังกลางทศวรรษ 1990 แต่จนถึงวันนี้ก็ยังคงมีกลุ่มแฟนจำนวนน้อยที่ทุ่มเทติดตามอยู่

โครงสร้างบิตของ ASCII และ control characters

  • ASCII พัฒนามาจากตระกูลรหัสอักขระของ teletype ในช่วงต้นทศวรรษ 1960 และมีแนวโน้มจะอยู่ต่อไปได้อีกนาน เพราะ code points 127 ตัวล่างของ Unicode ถูกออกแบบให้เป็น ASCII
    • หากคุณรู้จัก UTF-8 ไฟล์ ASCII ทุกไฟล์ก็เป็นไฟล์ UTF-8 ที่ถูกต้องด้วย
  • โดยพื้นฐานแล้ว Control modifier บนคีย์บอร์ดจะลบบิตบน 3 บิตของอักขระที่ป้อน เหลือไว้เฉพาะ 5 บิตล่าง แล้วแมปเป็น control character ในช่วง 0–31
    • Ctrl-SPACE, Ctrl-@, `Ctrl-`` ล้วนหมายถึง NUL
  • คีย์บอร์ดที่เก่ามาก ๆ เคยใช้ Shift โดยสลับบิต 32 หรือ 16 ตามแต่ละคีย์ ด้วยเหตุนี้ความสัมพันธ์ระหว่างอักษรเล็ก·อักษรใหญ่ และตัวเลข·สัญลักษณ์ใน ASCII จึงมีความเป็นแบบแผน
  • ASCII ดั้งเดิมปี 1963 ต่างจาก ASCII ปี 1967 ที่ใช้กันในปัจจุบัน โดยไม่มี tilde และ vertical bar, 5E เป็น up-arrow ไม่ใช่ caret และ 5F เป็น left arrow ไม่ใช่ underscore
  • control characters 0–31 จำนวนมากเป็นซากตกค้างของโปรโตคอล teletype บางตัวเหลืออยู่ในธรรมเนียมของข้อความหรือ Unix และบางตัวเหลืออยู่ในโปรโตคอลข้อมูลไบนารี
    • NUL: ตัวจบสตริงของ C
    • EOT / Ctrl-D: การป้อน end of file ในเทอร์มินัล Unix
    • BEL / Ctrl-G: bell ของ teletype หรือ attention signal ของ VDT
    • BS, HT, LF, FF, CR, ESC, DEL: ชุด control characters ที่รู้จักกันค่อนข้างดี
    • DC1/DC3: เคยใช้เป็น XON/XOFF software flow control และมีการ implement ใน Unix, CP/M และ DOS ด้วย
    • SUB / Ctrl-Z: เป็นอักขระ end-of-file ของ DOS และ Windows สืบทอดมาจาก CP/M และระบบปฏิบัติการมินิคอมพิวเตอร์ของ DEC; ใน Unix ใช้เป็นคีย์ process suspend
    • ESC: ยังคงใช้เป็น control sequence introducer ของ VT100, ANSI VDT และ terminal emulator สมัยใหม่
  • ค่า 0x7F ของ DEL มีที่มาจากการที่บน paper tape สามารถเจาะรู 7 รูเพื่อเขียนทับอักขระ ASCII ใดก็ได้ และ tape reader จะข้ามทั้ง DEL และ NUL
  • ปุ่ม Meta หรือ Alt บน VDT โดยทั่วไปจะบวก 128 ให้กับ ASCII keycode แต่ terminal emulator สมัยใหม่จำนวนมากก็ใช้วิธีใส่ ESC ไว้หน้าคีย์ที่ถูก modifier
  • สามารถดูโครงสร้างบิตของ ASCII ได้ด้วย ascii(1) และตาราง ASCII ในบทความนี้ก็สร้างจากเครื่องมือนี้

การถือกำเนิดอย่างเชื่องช้าของการร่วมมือแบบกระจาย

  • ในปัจจุบันเรามอง distributed version control แบบสาธารณะและ remote collaboration เป็นเรื่องปกติ แต่เครื่องมือพื้นฐานและธรรมเนียมการใช้งานเหล่านี้ใช้เวลานานกว่าจะก่อรูปขึ้น
  • บรรพบุรุษยุคแรกอย่างหนึ่งคือการแชร์เทปของ DECUS หรือ Digital Equipment Corporation Users' Group ซึ่งก่อตั้งในปี 1961
    • ผู้ใช้ DEC หมุนเวียน magnetic tape ที่บรรจุซอฟต์แวร์ public-domain กัน และภายในปี 1976 ธรรมเนียมนี้ก็ลงหลักปักฐานแล้ว
    • ธรรมเนียม README เข้าสู่โลก Unix ผ่าน USENET แต่ดูเหมือนจะเป็นร่องรอยที่แพร่ต่อมาจากเทป DECUS
  • ในทศวรรษ 1970 มีการร่วมมือพัฒนาซอฟต์แวร์เชิงวิชาการที่ส่ง source กันทางอีเมลและอัปโหลด release ไว้บนไซต์ FTP
    • network email ถูกคิดค้นขึ้นในปี 1971 และภายในปี 1973 ก็ถูกใช้อย่างแพร่หลายจนคิดเป็น 75% ของทราฟฟิก ARPANET
    • TeX ของ Donald Knuth เป็นตัวอย่างสำคัญที่ยังคงอยู่จากยุคนี้ โดยเริ่มในปี 1978
  • หลังปี 1980 วิธีเผยแพร่ source code ใน USENET newsgroup เฉพาะทาง และให้ผู้ร่วมพัฒนาภายนอกส่ง patch ทางอีเมล กลายเป็นธรรมเนียมอย่างรวดเร็ว
    • comp.sources.unix เป็นสถานที่ประจำที่แฮ็กเกอร์ Unix ใช้หาโค้ดใหม่
  • การพัฒนาแบบกระจายศูนย์เต็มรูปแบบต้องมี version control, patching และ forge
    • SCCS เกิดขึ้นในปี 1972 แต่เพิ่งออกนอก Bell Labs ในปี 1977 และไลเซนส์แบบกรรมสิทธิ์ทำให้การแพร่หลายช้าลง
    • RCS เป็นทางเลือกที่ออกในปี 1982 และนำกลับมาใช้ซ้ำได้อย่างเสรี
    • patch(1) ออกมาในปี 1984 ก่อนหน้านั้นวิธีทั่วไปคือส่งไฟล์ทั้งไฟล์ที่เปลี่ยนไปมา
  • Nethack เป็นเกม roguelike ที่เริ่มในปี 1987 และเป็นกรณีตัวอย่างยุคแรกของการพัฒนาแบบกระจายเต็มรูปแบบ โดยนักพัฒนาส่งไฟล์ทั้งไฟล์และต่อมาส่ง patch ทางอีเมล และใช้ SCCS/RCS เพื่อจัดการสำเนาในเครื่องของตน
  • CVS ปรากฏในปี 1990 และหลังเพิ่มความสามารถในการทำงานแบบ remote ผ่านเครือข่ายในปี 1993 โปรเจกต์ใหญ่ ๆ อย่าง FreeBSD และ NetBSD ก็รับไปใช้อย่างรวดเร็ว
  • Linux ถูกประกาศในปี 1991 ในฐานะความพยายามร่วมมือแบบกระจาย แต่การพัฒนาช่วงแรกยังใช้วิธี patch ทางอีเมลเหมือน Nethack และยังไม่มี repository Linux สาธารณะ
  • SourceForge เป็น software forge เฉพาะทางแห่งแรกที่ปรากฏในปี 1999 ตอนแรกสนับสนุนเฉพาะ CVS แต่ช่วยเร่งการยอมรับ Subversion ซึ่งออกมาในปี 2000
  • Subversion กลายเป็นความรู้ทั่วไปในช่วงปี 2000–2005 และเมื่อ Linus Torvalds สร้าง Git ในปี 2005 ระบบ version control รุ่นก่อนหน้าก็ล้าสมัยลงอย่างรวดเร็ว

ลำดับเวลาที่ควรจดจำ

  • ปี 1969 Ken Thompson เริ่มงานที่ต่อมาจะกลายเป็น Unix, VDT เชิงพาณิชย์เครื่องแรกถูกจัดส่ง และมีการแลกเปลี่ยนแพ็กเก็ตแรกบน ARPANET
  • ปี 1970 DEC PDP-11 ถูกจัดส่ง และต่อมาส่งอิทธิพลอย่างมากต่อสายสถาปัตยกรรมต่าง ๆ รวมถึง Intel และ ARM
  • ปี 1971 มีการคิดค้นอีเมลเครือข่ายและการใช้สัญลักษณ์ @ บน ARPANET ยุคแรก
  • ปี 1973 Xerox Alto บุกเบิก workstation ซึ่งเป็นคอมพิวเตอร์ส่วนบุคคลบนเครือข่ายที่มีจอแสดงผลความละเอียดสูงและเมาส์
  • ปี 1977 Unix ถูกพอร์ตไปยัง Interdata กลายเป็นเวอร์ชันแรกที่เคอร์เนลส่วนใหญ่เขียนด้วย C, SCCS ถูกเผยแพร่ และ Colossal Cave Adventure ถูกจัดส่ง
  • ปี 1980 Rogue ถูกคิดค้น และ USENET เริ่มต้นขึ้น
  • ปี 1981 IBM PC ถูกจัดส่ง, TCP/IP ถูกนำไปใช้งานบน VAX-11/780 ของ 4.1BSD Unix และวัฒนธรรม ARPANET กับ Unix เริ่มมาบรรจบกัน
  • ปี 1983 PDP-10 ถูกยกเลิก และ ARPANET ผ่านการเปลี่ยนแปลงทางเทคนิคจนกลายเป็น Internet
  • ปี 1987 มี USENET Great Renaming, การคิดค้น Perl และการเริ่มต้นโครงการ Nethack
  • ปี 1991 Linux และ World Wide Web เริ่มต้นขึ้นตามลำดับ และ Python ถูกคิดค้น
  • ปี 1993 Linux ได้ความสามารถ TCP/IP ทำให้ขยับจากของเล่นสำหรับงานอดิเรกไปเป็น OS จริงจัง, การเปิด USENET ของ AOL ทำให้ “September That Never Ended” เริ่มต้นขึ้น และ Mosaic เพิ่มความสามารถด้านกราฟิกและรูปภาพให้กับ Web
  • ปี 1994 อินเทอร์เน็ตสำหรับสาธารณชนในสหรัฐฯ เริ่มขยายตัวอย่างจริงจัง และ USB ถูกประกาศ
  • ปี 1995~1996 เป็นช่วงพีกของวัฒนธรรม UUCP/USENET และ BBS และเป็นช่วงที่ล่มสลายภายใต้แรงกดดันจากอินเทอร์เน็ตสาธารณะ
  • ปี 1999 SourceForge เริ่มต้นขึ้น และเมื่อ Linux ทำงานบน PC ได้ ตลาด Unix workstation แบบกรรมสิทธิ์ เช่น Sun ก็พังทลายลง
  • ปี 2005 ผู้ผลิตรายใหญ่หยุดผลิต CRT และย้ายไปสู่ flat-panel, AOL ยุติการสนับสนุน USENET และ Git ถูกจัดส่งครั้งแรก
  • ปี 2007~2008 การเปลี่ยนผ่านของ PC สาธารณะสู่ 64 บิตทำให้ยุค 32 บิตสิ้นสุดลง และ iPhone กับ Android ถูกจัดส่งครั้งแรกพร้อม OS ที่มีพื้นฐานจาก Unix

1 ความคิดเห็น

 
GN⁺ 2023-10-01
ความคิดเห็นบน Hacker News
  • สิ่งที่น่าสนใจคือวิธีที่บทความนี้เชื่อมโยงกับโลกสมัยใหม่นั้นค่อนข้างไม่แม่นยำ เช่น หลังจากอธิบายว่า prefix คำสั่ง Hayes AT มีคุณสมบัติที่มีประโยชน์ต่อการซิงก์ความเร็วสายโดยอัตโนมัติ ก็กล่าวต่อว่าในปี 2017 คำสั่ง AT ยังถูกใช้ควบคุมโมเด็มเซลลูลาร์ 3G/4G
    แต่ โมเด็มสมัยใหม่ไม่ได้เชื่อมต่อแบบอนุกรม และไม่มีแนวคิดเรื่องความเร็วสายด้วย คุณสมบัตินี้ไม่เกี่ยวข้องกับฮาร์ดแวร์สมัยใหม่เลย และคำอธิบายที่ว่า codebase เดิมสามารถขยายไปสู่สภาพแวดล้อมใหม่ได้ง่ายนั้นดูสมเหตุสมผลกว่ามาก
    คำว่า “อุปกรณ์ IoT ยังพูด RS-232 อยู่” ก็ผิดในแบบที่อันตราย RS-232 ใช้แรงดันบวกแทน 0 และแรงดันลบแทน 1 โดยแต่ละขั้วอยู่ในช่วง 3~15V ดังนั้นถ้าเอา RS-232 ไปต่อเข้ากับอินเทอร์เฟซอนุกรมของอุปกรณ์ IoT สมัยใหม่โดยตรง ก็มีโอกาสสูงที่จะทำให้อุปกรณ์พัง ส่วนที่พอร์ตอนุกรมยุคเก่ากับพอร์ตอนุกรมของอุปกรณ์สมัยใหม่มีร่วมกันนั้นอยู่นอกขอบเขตของ RS-232 เช่น framing แบบ 8N1 ซึ่ง RS-232 ไม่ได้กำหนดไว้
    คำว่า “ไฟล์ ASCII ทุกไฟล์เป็น UTF-8 ที่ถูกต้อง” ก็คลุมเครือเช่นกัน ASCII เป็นชุดอักขระ ไม่ได้กำหนดรูปแบบการแทนบนดิสก์ และไฟล์ ASCII ที่เก็บโดยแพ็กอักขระเป็น 7 บิตก็ไม่ใช่ UTF-8 หากไม่ปรับแต่งอะไร เมื่อคิดว่าก่อนหน้านี้บทความพูดถึง word length ที่หลากหลายและรูปแบบการส่งข้อมูลที่ไม่ 8-bit clean แล้ว นี่จึงเป็นข้ออ้างที่แปลก
    คำกล่าวที่ว่า Git ทำให้ระบบควบคุมเวอร์ชันก่อนหน้าทั้งหมดล้าสมัยอย่างรวดเร็วก็เกินจริงเมื่อนึกถึง Perforce Git เป็นการปรับปรุงครั้งใหญ่เมื่อเทียบกับ CVS และ SVN แต่การบอกว่ามันทำให้ทุกอย่างก่อนหน้านั้นกลายเป็นของตกยุค ดูเหมือนเป็นคำกล่าวของคนที่ไม่รู้จักส่วนใหญ่ของอุตสาหกรรมซอฟต์แวร์
    แน่นอนว่านี่เป็นการจับผิดเกินไป แต่ถ้าโทนของบทความทั้งชิ้นออกแนววางภูมิและจู้จี้พิถีพิถัน การวิจารณ์ด้วยมาตรฐานเดียวกันก็คงไม่ถือว่าไม่ยุติธรรม

    • คำว่า “อุปกรณ์ IoT ยังใช้ RS-232 อยู่” จริง ๆ แล้วค่อนข้างถูก คุณคงนึกถึงอุปกรณ์สมัยใหม่แรงดันต่ำ แต่ในภาคอุตสาหกรรม Modbus และ RS-485/RS-232 ยังมีชีวิตอยู่ และ IoT ก็ใช้งานกันมาก
      คำกล่าวที่ว่าโมเด็มสมัยใหม่ไม่ได้เชื่อมต่อแบบอนุกรมก็ไม่ถูกเช่นกัน เพียงแต่มันอาจไม่ใช่รูปแบบที่เรียกว่า RS-232 เท่านั้น แม้เมื่อไม่กี่ปีก่อนก็มักใช้สาย USB และ USB ก็เป็นบัสอนุกรมเหมือนกัน
      คำสั่ง AT ยังคงถูกใช้ในโมเด็มแทบทุกตัว และยังอยู่ในโทรศัพท์มือถือในกระเป๋าของคุณด้วย มันเป็นวิธีที่โมเด็มเซลลูลาร์ตั้งค่าการโทรบนเครือข่ายโทรศัพท์ และ ATDT อันเก่าแก่ก็ยังถูกใช้ในการตั้งค่า network call ต่อไป ชุดคำสั่ง AT เดิมมีไว้ควบคุมคุณสมบัติของการโทร เช่น การตั้งค่าการโทร ความเร็วสูงสุด และโปรโตคอลที่อนุญาต ส่วนการเจรจาอัตโนมัติเป็นขั้นตอนแยกต่างหากในชั้นเครือข่าย/โมเด็ม โมเด็มยุคก่อนเปิดเสียงกระบวนการนั้นผ่านลำโพงให้ได้ยิน แต่ปัจจุบันแค่ไม่ได้ยินแล้วเท่านั้น
    • ถ้าจะจู้จี้กันจริง ๆ UTF-8 ก็ไม่ได้กำหนดรูปแบบการแทนบนดิสก์เช่นกัน มันเป็นเพียงการเข้ารหัสอักขระของชุดอักขระ Unicode อย่างไรก็ดี ในแง่ที่มันกำหนดการแทนด้วยบิต ประโยคที่ว่า “ASCII ก็ valid ในฐานะ UTF-8” จึงถูกต้อง
      ส่วนชุดอักขระแบบนี้ถูกขนส่งบนโปรโตคอลอื่นอย่างไรนั้นอยู่นอกขอบเขตของนิยาม
    • ไม่รู้ว่าใครเป็นคนกำหนดว่า “โมเด็มสมัยใหม่ไม่ได้เชื่อมต่อแบบอนุกรมและไม่มีแนวคิดเรื่องความเร็วสาย” ตอนนี้ผมก็ยังดีบักไมโครคอนโทรลเลอร์ที่เชื่อมกับ โมเด็ม LTE Cat M1 ผ่านลิงก์อนุกรมบนหน้าจอที่สองอยู่เลย
      ค่าเริ่มต้นคือสาย 115200 8n1 และสามารถเปลี่ยนความเร็วได้ อีกทั้งมีการตรวจจับความเร็วอัตโนมัติด้วย หลังจากโมเด็มแจ้งสถานะพร้อมผ่านสายแยกต่างหาก แล้วส่ง AT ด้วยความเร็วที่ต้องการไป โดยปกติประมาณครั้งที่สามก็จะตอบกลับ
    • บทความนี้มีเป้าหมายเพื่ออธิบายในระดับความรู้ทั่วไป ไม่ได้ครอบคลุมทั้งอุตสาหกรรมซอฟต์แวร์ แต่ระบุชัดว่าเลือกพูดเฉพาะส่วนที่แฮกเกอร์น่าจะรู้
      ในความหมายนั้น ตอนนี้ Git แทบจะเป็นระบบควบคุมเวอร์ชันหนึ่งเดียวโดยพฤตินัยสำหรับการทำงานร่วมกันแบบกระจายบนซอร์สโค้ด
    • นี่ดูเหมือนเป็นการตอบโต้ที่จู้จี้เกินไปจริง ๆ จากบริบทก็ควรเข้าใจได้ว่าหมายถึง ASCII ที่จัดเก็บเป็นไบต์ 8 บิต
  • ขอเสริมจากคนแก่หน่อยว่า สำหรับโมเด็มโทรศัพท์ 56K คือเพดานจริง ๆ ภายในเครือข่ายโทรศัพท์ส่งตัวอย่าง 8 บิต 8,000 ครั้งต่อวินาที จึงได้ 64Kbps แต่บางครั้งบิตล่าง ๆ จะถูกแย่งไปใช้กับสัญญาณอื่น และลูกค้าทางโทรศัพท์จะไม่ได้ยิน
    แทนที่จะพยายามให้โมเด็มซิงก์กับบิตที่ถูกแย่งไปนั้น ใช้เฉพาะ 7 บิตที่เชื่อถือได้ง่ายกว่า จึงกลายเป็น 56Kbps https://en.wikipedia.org/wiki/Robbed-bit_signaling
    9600bps ที่แทบจะกลายเป็นความเร็วเทอร์มินัลนั้นเป็นธรรมเนียมที่เก่ากว่าโมเด็ม 9600bps เสียอีก ช่วงกลางถึงปลายทศวรรษ 80 โมเด็ม 9600bps ถือว่าสุดยอดมาก และสำหรับผู้ใช้เทอร์มินัลก็เร็วพอ ขณะเดียวกันก็เป็นความเร็วที่เทอร์มินัลในยุคนั้นรับไหว เทอร์มินัลที่ผมจำได้ว่าเป็น Volker-Craig 4404 ตาม 9600bps ไม่ทัน เลยต้องลดลงมาใช้ราว 4800bps

    • เหตุผลที่ 9600bps กลายเป็นความเร็วมาตรฐานสำหรับเทอร์มินัล คือด้วย framing 10 บิต (start/byte/stop) มันส่งหน้าจอเต็ม 80×24 ได้ภายใน 2 วินาที และในขณะเดียวกันก็ไม่สร้างภาระ interrupt หรือ DMA มากเกินไปให้กับโฮสต์ระดับเศษส่วนของ MIPS เมื่อต้องรองรับผู้ใช้หลายคน
      terminal multiplexer ของมินิคอมพิวเตอร์มักจะรวมการส่งเมื่อทำได้ โดยใช้ DMA ดึงชุดอักขระจากหน่วยความจำแล้วส่งออกไป จากนั้นจึงส่ง interrupt “เสร็จแล้ว” ให้ CPU เท่านั้น แม้ในโหมดอักขระ ก็จะแจ้ง CPU เฉพาะเมื่อบัฟเฟอร์รับเต็ม หรือมีอักขระลำดับอย่าง carriage return เข้ามา
      ด้วยเหตุนี้เมนเฟรมและมินิคอมพิวเตอร์จำนวนมากจึงใช้ เทอร์มินัลแบบ block mode แอปพลิเคชันใช้ form API ส่วนการแก้ไขและการป้อนข้อมูลทำที่เทอร์มินัล คอมพิวเตอร์ส่งฟอร์มทั้งชุดไปยังเทอร์มินัล และหลังจากผู้ใช้แก้ข้อผิดพลาด รวมถึงตรวจสอบฟิลด์อย่างตัวเลข/ตัวอักษรผสมตัวเลขเสร็จแล้ว จึงส่งเนื้อหาของฟิลด์กลับไปยังคอมพิวเตอร์ด้วยการกระทำ “เสร็จสิ้น” อย่างชัดเจน
      แม้ในการใช้งานแบบโต้ตอบเต็มรูปแบบ ระบบเหล่านี้ก็ยังชอบ line mode ที่เนื้อหาบรรทัดปัจจุบันจะถูกส่งเฉพาะเมื่อมีการกระทำบางอย่าง และการแก้ไขบรรทัดเกิดขึ้นที่เทอร์มินัล โหมด “raw” แบบ UNIX มี overhead สูงเกินไปเมื่อเทียบกับจำนวนผู้ใช้ที่ระบบต้องรองรับ แม้ต้นทุนเทอร์มินัลจะแพงขึ้นอีกเล็กน้อยก็ตาม
    • ถึงจะมีโมเด็ม 56k แต่ก่อนที่บรอดแบนด์จะแพร่หลาย ก็ยังมีคนจำนวนมากที่ติดอยู่กับ การเชื่อมต่อ 28.8 สายโทรศัพท์ชนบทแทบไม่ค่อยรองรับ 56k ได้อย่างเสถียร
    • 4800bps เหรอ สมัยก่อนแค่ได้ 2400 ก็ดีใจแล้ว
      น่าเศร้าที่ของผมเป็นบอร์ด 1200 และลุงผมบอกว่าโมเด็มตัวแรกของเขาเป็น 300
      ผมยังจำการตั้งค่า 110 ได้ด้วย ซึ่งอาจย้อนกลับไปถึงปฏิบัติการขนส่งทางอากาศที่เบอร์ลินปี 1948 เลยก็ได้
  • ตอนที่ได้ลองใช้ คำสั่ง AT บนโมเด็ม 4G ครั้งแรกนี่ถึงกับขำออกมาเลย ความรู้สึกที่คุ้นมือยังใช้ได้เหมือนเดิม เพียงแต่เสียดายนิดหน่อยที่ไม่มีการหมุนเบอร์กับเสียงโมเด็ม
    น่าแปลกใจที่อุตสาหกรรมโมเด็ม 3G/4G ไม่สามารถสร้างวิธีที่ดีกว่านี้ในการคุยกับอุปกรณ์ได้ แม้แต่ ISDN ก็ยังมี API ที่ดีและถูกนำไปใช้กันกว้างขวาง

    • ไม่จำเป็นต้องเป็น 3G/4G ด้วยซ้ำ ถ้าจัดการ Wi-Fi บน ESP8266 ก็มีโอกาสสูงว่ากำลังใช้คำสั่ง AT อยู่ แน่นอนว่ามันแทบจะเป็นคนละอย่างกับชุดคำสั่ง Hayes
      ยังไงก็ตาม มันให้ความรู้สึกคิดถึงอดีต ความยำเกรง และความหวาดกลัวในสัดส่วนพอ ๆ กัน
      https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
    • ตอนทดลองสื่อสารผ่านดาวเทียม ผมตกใจที่ต้องทำ handshake ด้วยชุดคำสั่ง AT เพื่อเชื่อมต่อกับ Iridium
    • โมเด็ม 3G/4G ส่วนใหญ่ทุกวันนี้เชื่อมต่อผ่าน USB และบนชิปเซ็ต Quectel ก็รองรับ QMI และ/หรือ MBIM ทำให้ใช้งานจากซอฟต์แวร์ได้ง่ายกว่า AT
      ถึงอย่างนั้นก็ยังมีพอร์ตสื่อสารเสมือนสำหรับคุยด้วย AT เหลืออยู่ และอาจยังจำเป็นสำหรับงานวินิจฉัยบางอย่าง
      การตั้งค่าการเชื่อมต่อข้อมูลด้วย QMI/MBIM ง่ายและมีประสิทธิภาพกว่าการงมกับ AT และ PPP มาก
    • สิ่งที่ไม่รู้ว่าจะหัวเราะหรือร้องไห้ดี คือตอนส่งคำสั่ง AT เพื่อให้โมเด็มเซลลูลาร์ ดาวน์โหลดไฟล์ไบนารีผ่าน HTTPS เข้าใจได้ว่าอยากใช้ชุดคำสั่งที่คุ้นเคยต่อไป แต่มันถูกขยายจนแทบจำรูปเดิมไม่ได้แล้ว
    • แล้วโปรโตคอลที่ดีกว่าควรหน้าตาเป็นอย่างไร? ในหลาย ๆ ด้าน ความเข้ากันได้ย้อนหลัง ก็เป็นข้อดีที่ค่อนข้างสำคัญ
  • แทนที่จะบอกว่า “อาร์ไคฟ์ USENET เชิงประวัติศาสตร์หาได้ใน Google Groups” ผมขอแนะนำ archive.org มากกว่า มีคอลเลกชันดี ๆ จำนวนมากที่เก็บกลุ่ม USENET เป็นไฟล์ mbox และดาวน์โหลดได้
    จะติดตั้งอะไรอย่าง mboxgrep หรือนำเข้าในโปรแกรมอ่านเมล หรือแค่อ่านเป็นไฟล์ข้อความก็ได้
    ตัวอย่างอยู่ที่นี่
    https://archive.org/details/usenet-comp

  • ช่วงกลางทศวรรษ 1980 ผมพยายามเชื่อมต่อจากคอมพิวเตอร์ของมหาวิทยาลัยแห่งหนึ่งในลอนดอน (น่าจะเป็น CDC Cyber ของ Imperial) ไปยังคอมพิวเตอร์ของมหาวิทยาลัยอีกแห่ง (น่าจะเป็น Queen Mary) เพื่อลองใช้แพ็กเกจพีชคณิตเชิงสัญลักษณ์ที่มีเฉพาะบนมินิคอมพิวเตอร์ Unix
    ผมใช้เวลาเต็ม ๆ 2 ชั่วโมงไปกับการหาค่า terminal settings และ configuration ที่ถูกต้องของซอฟต์แวร์ตัวกลางต่าง ๆ จนรู้สึกว่าน่าจะเขียนโค้ดเองเท่าที่ทำได้บนเครื่อง 8-bit 2MHz 64K ยังจะดีกว่า

    • ใช่เลย สมัยนั้นคนที่เรียนปริญญาคอมพิวเตอร์ไซเอนซ์ในอังกฤษมีโอกาสสูงทีเดียวที่จะได้เรียนรู้ภาษาเครื่อง Z80 หรือ 6502 จากการแฮก Elite, Jet Set Willy, Manic Miner บน ZX Spectrum/BBC Micro แบบใช้งานจริง
  • ซอฟต์แวร์มีปัญหาเรื่อง “กองทับขึ้นไปเรื่อย ๆ” ในงานก่อสร้าง เราอาจนำอาคารและชิ้นส่วนเดิมมาใช้ซ้ำ อัปเกรดบางอย่างภายใน หรือรื้อแล้วสร้างใหม่ได้
    แต่ซอฟต์แวร์ไม่ทำแบบนั้น เราเอาท่อตะกั่ว สาย CAT-3 ฉนวนขนม้า และหน้าต่างกระจกชั้นเดียวไปติดตั้งในตึกระฟ้าใหม่ ๆ เหมือนเดิม เพราะการกองต่อบนเทคโนโลยีเก่าอายุหลายสิบปีนั้นง่ายกว่าการคิดค้น PVC, CAT-6, ฉนวนแบบพ่น และหน้าต่างสามชั้นที่ดีกว่า หรือเพราะยังไม่อยากทำให้มาตรฐานที่ตึกเก่าใช้อยู่กลายเป็นของล้าสมัย และเจ้าของตึกก็ไม่อยากจ่ายค่าอัปเกรด
    ดังนั้นเราจึงได้ตึกระฟ้าที่ใช้งานได้ แต่ด้วยเหตุผลบางอย่างต้องสอน ฉนวนขนม้า ให้กับวิศวกรรุ่นใหม่

    • ผู้คนพยายามสร้างเทคโนโลยีซอฟต์แวร์ที่ใหม่หมดและดีกว่าอยู่เสมอ แต่พอทำเช่นนั้น ความเข้ากันได้ย้อนหลัง กับของเดิมก็พัง ทำให้การนำไปใช้จริงยากขึ้นมาก
      ดังนั้นส่วนใหญ่จึงยังคงเป็นโครงการวิจัยเชิงทดลอง และถ้าโชคดี ส่วนที่ดีที่สุดเท่านั้นจะค่อย ๆ ถูกนำเข้าไปในโครงการเดิมตามกาลเวลา
    • น่าสนใจที่มีปฏิกิริยาจำนวนมากเหมือนมองว่าไม่มีอะไรควรค่าแก่การเรียนรู้จากวิวัฒนาการของคอมพิวเตอร์กว่า 60 ปีที่ผ่านมา
      สิ่งที่พลาดไปคือเหตุผลที่ “เทคโนโลยีเก่าและห่วย” เหล่านี้จำนวนมากยังคงอยู่ มัน ผ่านการพิสูจน์ของกาลเวลา มาแล้ว เทคโนโลยีสมัยใหม่ไม่ได้รักษาสิ่งเหล่านี้ไว้เพราะความคิดถึงอดีตล้วน ๆ โดยมากแล้วมันยังมีประโยชน์ เพราะแก้ปัญหาได้อย่างสง่างาม หรือให้ abstraction ที่มีประโยชน์บนระบบที่ทันสมัยกว่า หรือเพราะหลีกเลี่ยงความเข้ากันได้กับระบบเดิมไม่ได้
      แน่นอนว่าเทคโนโลยีเก่าเหล่านี้ก็มีข้อบกพร่อง อีกไม่กี่สิบปี โค้ดของพวกคุณทั้งหมดก็จะเป็นแบบนั้นเหมือนกัน
      XKCD เกี่ยวกับมาตรฐานนี่อันไหนนะ?
  • ในฐานะคนเกิดปี 1997 ที่ทำงานในวงการซอฟต์แวร์ สิ่งหนึ่งที่ได้เรียนรู้คือ บางครั้งสาขาวิศวกรรมซอฟต์แวร์ก็ใกล้เคียงกับการ เข้าใจประวัติศาสตร์ ของระบบ พออ่านบทความแบบนี้แล้วบางแนวคิดก็พลันเข้าที่เข้าทางขึ้นมา จึงรู้สึกดี

  • จากมุมมองคนทำงานกับระบบฝังตัว เนื้อหาส่วนใหญ่นี้ยังเกี่ยวข้องอยู่จนถึงทุกวันนี้ RS-232 เอง หรือก็คือสเปกชั้นกายภาพ ถูกใช้น้อยลงแล้ว แต่ โปรโตคอลสื่อสาร UART ที่อยู่ข้างใต้นั้นยังอยู่ดี
    ตัวอย่างเช่น บอร์ดพัฒนา Beaglebone สามารถบูตโดยอัปโหลด bootloader ผ่าน XModem ได้

    • ไมโครคอนโทรลเลอร์ขนาดเล็กจำนวนมากก็ยังแฟลชอุปกรณ์ใหม่ผ่านพอร์ต UART และโปรโตคอล serial อยู่ มันเป็น ตัวหารร่วมต่ำสุด ของอินเทอร์เฟซฮาร์ดแวร์ และเป็นวิธีที่ง่ายที่สุดที่ใช้งานได้จริง
  • ที่จริงแล้ว ASR-33 มีอินเทอร์เฟซ TTY แบบเก่ากว่าที่เดิมใช้กันอยู่ เรียกว่า current loop ซึ่งมีที่มาจากวงจรโทรเลข ในทศวรรษ 1970 เริ่มมี ASR-33 แบบ dual mode ที่รองรับ RS-232 ด้วย และในที่สุด RS-232 ก็เข้ามาแทนที่ current loop อย่างสมบูรณ์
    KIM-1(https://en.wikipedia.org/wiki/KIM-1) ใช้วิธีนี้ และอินเทอร์เฟซ current loop(https://en.wikipedia.org/wiki/Current_loop) ก็ยังค่อนข้างพบได้ทั่วไปในบริบทของการควบคุมอุตสาหกรรม นอกจากนี้ยังเป็นพื้นฐานของ MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications) ด้วย

    • current loop ใช้ในที่ที่ความยาวสายเคเบิลอาจยาวมากได้ ถ้าป้อน 20mA จากปลายด้านหนึ่ง ก็รู้ได้ว่าจะได้กระแสนี้ที่ปลายอีกด้านโดยไม่ขึ้นกับความยาว ซึ่งต่างจากวิธีที่อิงแรงดันไฟฟ้า
    • current loop ยังใช้กันทั่วไปจนถึงยุค 80 และใช้ทุกที่ที่ต้องมีช่วงสายเคเบิลยาว ๆ เท่าที่จำได้ VAX 780 รองรับ 19200 แต่ทำได้เฉพาะบนลูป 20mA เท่านั้น
  • FF (Form Feed) หรือ Ctrl-L ถูกเทอร์มินัลแสดงผลวิดีโอจำนวนมากตีความว่าเป็นคำสั่ง “ล้างหน้าจอ” และซอฟต์แวร์เทอร์มินัลอีมูเลเตอร์ก็ยังทำแบบนั้นอยู่บ้างในบางครั้ง
    สิ่งนี้เคยใช้กันทั่วไปบน Usenet เพื่อเป็น ตัวบอกสปอยเลอร์ เพราะส่วนที่เหลือของข้อความจะไม่ถูกแสดงจนกว่าผู้ใช้จะกดปุ่มอย่าง PgDn เพื่อเลื่อนไปต่อ บนหน้าจอจะแสดงเป็น ^L ทำให้รู้ว่ายังมีข้อความต่ออยู่ และหน้าจอส่วนที่เหลือจะถูกล้างจนกว่า ^L จะถูกเลื่อนออกนอกหน้าจอ