- Avalonia Visual Basic 6 เป็นโปรเจกต์ของเล่นที่สร้าง IDE และภาษาสุดคลาสสิกอย่าง Visual Basic 6 ขึ้นใหม่ด้วย C# โดยใช้ Avalonia
- สามารถเปิดเวอร์ชันเว็บในเบราว์เซอร์ได้ และเวอร์ชันเดสก์ท็อปก็สามารถบิลด์บนพื้นฐาน .NET 9.0 ได้เช่นกัน
- ฟีเจอร์หลักได้แก่ Visual Designer, การบันทึกและโหลดโปรเจกต์ในรูปแบบที่เข้ากันได้กับ VB6, การรันโปรเจกต์ และการรองรับภาษา VB6 แบบจำกัด
- เวอร์ชันเบราว์เซอร์ต้องใช้ .NET 9.0 ส่วนการบิลด์เดสก์ท็อปสามารถใช้ .NET 8.0 ได้หากแก้ไข
Directory.Build.props
- สิทธิ์ในชื่อ Visual Basic, ไอคอน และกราฟิกเป็นของ Microsoft Corporation และโปรเจกต์นี้ไม่มีเจตนาเชิงพาณิชย์
ภาพรวมโปรเจกต์
- Avalonia Visual Basic 6 เป็นโปรเจกต์ที่สร้าง IDE และภาษาสุดคลาสสิก Visual Basic 6 ขึ้นใหม่ด้วย C# และ Avalonia
- ถูกแนะนำว่าเป็น fun, toy project ที่ไม่มีวัตถุประสงค์เชิงพาณิชย์
- สิทธิ์ทั้งหมดในชื่อ Visual Basic, ไอคอน และกราฟิกเป็นของ Microsoft Corporation
- เวอร์ชันเว็บสามารถ รันในเบราว์เซอร์ ได้
ฟีเจอร์ที่รองรับ
- มี Visual Designer ให้ใช้งาน
- สามารถบันทึกและโหลดโปรเจกต์ใน รูปแบบที่เข้ากันได้กับ VB6
- มีฟีเจอร์สำหรับรันโปรเจกต์
- การรองรับภาษา VB6 ยัง จำกัด
การบิลด์เวอร์ชันเดสก์ท็อป
- โดยทั่วไปต้องใช้ .NET 9.0
- เวอร์ชันเดสก์ท็อปสามารถใช้ .NET 8.0 ได้ หากแก้ไข
Directory.Build.props
- เวอร์ชันเบราว์เซอร์ต้องใช้ .NET 9.0
- คำสั่งบิลด์เดสก์ท็อปมีดังนี้
dotnet build AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj
ข้อผิดพลาด Antlr4 และ Java
- หากเกิด ข้อผิดพลาด Antlr4 อาจเป็นไปได้ว่าไลบรารี
Antlr4BuildTasks ไม่สามารถดาวน์โหลด Java โดยอัตโนมัติได้
- ในกรณีนี้ การ ติดตั้ง Java ด้วยตนเอง อาจช่วยแก้ปัญหาได้
การเผยแพร่เวอร์ชันเดสก์ท็อป
- ต้อง publish โปรเจกต์ IDE และ runtime แยกกัน
dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/
dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/standalone/
- หลังเผยแพร่แล้ว สามารถรันไฟล์ต่อไปนี้ได้
./bin/AvaloniaVisualBasic.Desktop
โปรเจกต์และทรัพยากรที่ใช้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมเจอหนังสือ "Write Your Own Adventure Programs" (1983 - Usborne: https://colorcomputerarchive.com/repo/Documents/Books/Write%...) บนชั้นหนังสือสมัยประถม โค้ดในนั้นเป็น BASIC และตอนนั้นที่บ้านก็ไม่มีคอมพิวเตอร์จริง ๆ จัง ๆ
หลายปีต่อมาพอเห็น Visual Basic ก็คิดว่าน่าจะคล้ายกัน ซึ่งก็ถูกอยู่บ้าง ตอนแรกไม่มีหนังสือให้เรียน เลยกดเมนูกับปุ่มทุกอันเพื่อดูว่ามันทำอะไรได้บ้าง แล้วก็ดาวน์โหลด VB form control ของเธิร์ดปาร์ตี้สารพัดผ่าน dial-up เอามาโยนใส่ Form แล้วดูว่ามันทำอะไร
สุดท้ายก็ทำโปรแกรมช่วยการบ้านอย่างคำนวณพื้นที่วงกลมได้ ด้วยการคัดลอก·วางและแก้ไปเรื่อย ๆ และยังทำโปรแกรมแกล้งคนที่แสดงไอคอนใน notification area ข้างนาฬิกา หรือซ่อนหน้าต่างแล้วส่งเสียงน่ารำคาญอยู่เบื้องหลังด้วย แต่พอจะติดตั้งบนคอมของเพื่อนก็มักล้มเหลว เพราะ .dll ที่ต้องใช้ใส่ลงฟลอปปีดิสก์แผ่นเดียวไม่พอ
ถึงจะมีช่วงที่หงุดหงิดบ้าง แต่ผมรู้สึกว่าโชคดีมากที่ได้เรียนเขียนโปรแกรมแบบนี้ เพราะพ่อแม่ยอมให้จับเครื่องที่สมัยนั้นน่าจะราคาแพงได้แทบตามใจ
แม้แต่ทูทอเรียลสมัยนั้นก็ยังสนุกกว่า “ทูทอเรียล Windows Registry ของ hypnoMan37!!! HEyyeyeyy Guuyzs :-)))) มาเข้าช่อง IRC #blabla ของผมบน EFNet สิ! ก่อนอื่นเรียก RegistryCreateNewKey32(...) แล้ว…” อะไรทำนองนั้น และแน่นอนว่าไม่มี MSDN CD
การเรียนแบบโค้ดแคมป์คงมีประสิทธิภาพกว่ามาก แต่เทียบกันแล้วมันแห้งแล้งเกินไป ผมสงสัยว่าต้นทุนของการทำให้มือใหม่เบื่อจนแทบตายคงสูงไม่น้อย
ครั้งแรกที่ได้สัมผัส Visual Basic คือ VBA ใน MS Word พอเปิดดูก็รู้ว่าเป็นที่สำหรับเขียนโค้ด แต่ไม่รู้เลยว่าต้องพิมพ์อะไร ตอนนั้นผมไม่รู้จักภาษาโปรแกรมสักภาษา
ต่อมาผมเจอหนังสือ VB.NET ในร้านหนังสือ ดีใจมากจนรีบเอาไปทำตามใน VBA ทันที แต่โค้ดไม่รันเลย ทำให้ผิดหวังมาก ผมตั้งใจว่าจะลองอีกครั้งสุดท้าย ถ้าไม่ได้ก็เลิก โชคดีที่มันรันได้
ปรากฏว่า MS Word VBA ในคอมผม อิง VB 6 ส่วนหนังสือเป็น VB.NET โค้ดเลยต่างกันเล็กน้อย
หลังจากนั้นผมซื้อหนังสือเกี่ยวกับ VB 6 เท่าที่หาเจอ และบังเอิญเจอชุดติดตั้ง VB 6 IDE ในกองซีดีของญาติเลยเอามาติดตั้ง จนตอนนี้ผมก็ยังคิดว่า VB 6 GUI builder เป็นตัวที่ดีที่สุดเท่าที่เคยใช้มา
ห้องสมุดแถวบ้านก็มีหนังสือ "Visual Basic How-To: The Definitive Vb3 Problem Solver" และผมยืมต่อหลายครั้งจนเขาบอกว่ายืมต่อไม่ได้แล้ว จำได้ว่าเคยทำอินเทอร์เฟซที่ใช้งานได้จริงโดยอิงจากอินเทอร์เฟซ “Peanut Computer” ช่วงต้นของ Out of this World
มีไอเดียดี ๆ ไหม?
เวลาว่าง ๆ ผมชอบอ่านคู่มือ MS-DOS 6 ตั้งแต่ต้นจนจบ
ในยุคที่การต่ออินเทอร์เน็ตยังไม่แพร่หลาย คุณภาพของเอกสารและโค้ดตัวอย่างน่าประทับใจมาก
ampersand ใน label ของปุ่มไม่ได้สร้างปุ่มลัด เช่น
&Goไม่ได้ขีดเส้นใต้ที่ Gใน VB6 ของจริง ถ้าวาง Label control แล้วพิมพ์ทันที เนื้อหาจะเปลี่ยน แต่ที่นี่ต้องโฟกัสไปที่ช่องป้อนข้อมูลก่อน คลิกหัวข้อ “Caption” ก็ไม่ได้ ต้องคลิกเข้าไปในคอลัมน์ป้อนข้อมูล
ถ้าต้องการความสมจริงมากขึ้น เวลาเลือก control ใน GUI designer ควรมีแถวหนึ่งใน Properties grid ถูกไฮไลต์อยู่เสมอ ใน Label ค่าเริ่มต้นคือ Caption และถ้าเป็น control ที่ไม่มี property เริ่มต้น ผมจำได้ว่าเป็น Name
เมื่อสลับไปยัง control อื่น ถ้ามี property ชื่อเดียวกับ property ที่เลือกอยู่ VB6 จะคงการเลือกนั้นไว้ ทำให้เปลี่ยน property Tag ของหลาย ๆ control ต่อเนื่องกันได้อย่างรวดเร็วด้วยการคลิกน้อยที่สุด
เห็นได้ชัดว่าเมนูอย่าง debugging, save, help, add-in ยังไม่ได้ implement ถ้า ปุ่ม Build ที่ปล่อย “ไฟล์ปฏิบัติการ” ซึ่งรันในเบราว์เซอร์ออกมาใช้งานได้จริงก็คงยอดเยี่ยมมาก
ข้อจับผิดจุกจิกพวกนี้มาจากความรักนะ ;-)
_แต่ผมเพิ่งอัปเดตให้รองรับ&ด้วยแล้ว :)การ save ใช้งานได้จริง แต่อยู่บนเดสก์ท็อปเท่านั้น และยัง เข้ากันได้กับรูปแบบของ VB6 ด้วย โดยรวมการรองรับยังจำกัด ความเข้ากันได้ก็เลยจำกัดด้วย แต่มีแผนจะปรับปรุงอีกนิด
Build ก็ใช้งานได้เช่นกัน แต่เฉพาะบนเดสก์ท็อป ;)
ทั้งหน้าตาและการทำงานนั้น ใช้งานง่ายเข้าใจทันที จริง ๆ
เปลี่ยนจากวิดเจ็ตที่คุ้นเคยตามรสนิยมและไม่โดดเด่น ไปสู่ดีไซน์ที่ปรับแต่งอย่างประณีตและลึกซึ้งเพื่อแสดงแบรนด์
เห็นได้ชัดว่าการเน้นแบรนด์ที่ฉูดฉาดและมีเอกลักษณ์ไม่เพียงดึงดูดผู้ใช้ใหม่ แต่ยังทำให้เวลาย้ายไปที่อื่นรู้สึกแปลกและอึดอัดมากขึ้น จึงช่วยลดการเลิกใช้งานได้ด้วย ทำเงินได้ง่ายกว่ากระแสก่อนหน้าที่เน้นประสิทธิภาพของผู้ใช้และความแตกต่างด้านฟีเจอร์
เทคโนโลยีก็วิ่งตามกระแสนั้น โดยใช้งบความซับซ้อนไปกับการปรับแต่งสไตล์ แอนิเมชัน การปรับปรุงการเรนเดอร์ฟอนต์ ฯลฯ และละทิ้งความพยายามที่จะส่งเสริม ภาษาการออกแบบมาตรฐาน ที่ทั้งผู้สร้างและผู้ใช้จะคุ้นเคยร่วมกันได้
Visual Studio รุ่นถัดมาทุกเวอร์ชันก็มีบิลเดอร์แบบเดียวกันนี้อยู่ ผมใช้บิลเดอร์นี้ทุกวันเวลาทำแอปส่วนตัวเล็ก ๆ แม้แต่ Visual Studio 2022 รุ่นใหม่ที่เพิ่งออกเมื่อวานก็แทบจะเหมือนกัน 100%
จริง ๆ ตอนนี้ดีกว่าด้วยซ้ำ เพราะจัดแนวและเปลี่ยนพร็อพเพอร์ตีได้ง่ายขึ้น แต่ตัวอินเทอร์เฟซเหมือนเดิม และเรียกได้ว่าไม่เปลี่ยนมา 25 ปีแล้ว
เมื่อกี้ผมเปิด VS2022 แล้วสร้างแอปนี้ได้ภายใน 60 วินาที: https://imgur.com/a/qHOCasJ
สิ่งที่ทำให้สนใจ VB มีอยู่สองอย่าง อย่างแรกคือสามารถวาด GUI ได้เอง ซึ่งในมาตรฐานตอนนั้น มันเป็นประสบการณ์ที่เจ๋งและทำให้รู้สึกมีพลังมาก เพราะทำซอฟต์แวร์ที่ “ดูเหมือนซอฟต์แวร์” ได้ด้วยความพยายามน้อยที่สุด
อีกอย่างคือถ้าจะทำ GUI ก็ต้องไปปล้ำกับคลาสไลบรารีแทนที่จะใช้ VB ตอนนั้น OOP เป็นเรื่องลึกลับสุด ๆ สำหรับโปรแกรมเมอร์สมัครเล่นอย่างผม และแม้แต่การทำแอป “hello world” ขั้นต่ำบน Windows หรือ Mac ก็ยังต้องมีคำแนะนำยาวหลายหน้า
หลายสิบปีต่อมา ความต้องการ GUI คุณภาพสูงเพิ่มขึ้น และในขณะเดียวกันทักษะการเขียนโปรแกรมที่จำเป็นในการสร้าง GUI เล็ก ๆ ด้วยโค้ดก็ดูจะแพร่หลายมากขึ้น อาจเป็นเพราะภาษาต่าง ๆ ค่อย ๆ ทำให้ง่ายขึ้นด้วย
ตอนนี้ถ้าเป็น GUI ในระดับที่ผมต้องการ ผมพอใจกว่าที่จะเขียนเป็นโค้ดไปเลย และในกรณีของผมก็ปล่อยให้ Tkinter วางเลย์เอาต์พื้นฐานที่เหมาะสมให้ เหยื่อ เอ๊ย ผู้ใช้ของผมไม่ได้เรียกร้องอะไรที่ดีกว่านี้
นี่ค่อนข้างคล้ายกับแนวทาง Interface Builder ของ Xcode ที่ใช้กับแอป macOS และ iOS
อย่างที่หลายคนพูดไว้ มันทำงานได้ดีจนกว่าจะต้องรองรับขนาดหน้าจอ เลย์เอาต์ แอนิเมชัน การโต้ตอบแบบสัมผัส ฯลฯ
หลังจากได้ทำทั้งแอปเนทีฟบนเดสก์ท็อปและแอปบนเบราว์เซอร์ ผมคิดว่าหลังผ่านช่วงโค้งการเรียนรู้ไปแล้ว การเขียนเลย์เอาต์วิดเจ็ตเป็นข้อความด้วยโค้ดหรือมาร์กอัปนั้นมีประสิทธิภาพ
เท่าที่รู้ Qt และ wxWidgets ก็มีฟีเจอร์เลย์เอาต์อัตโนมัติ แต่เมื่อทำบน C++ ประสบการณ์อาจไม่ลื่นไหลนัก เท่าที่ผ่านมา Form Designer ของ Visual Studio ต้องจัดวางพิกเซลเอง ทำให้ยิ่ง GUI ซับซ้อนก็ยิ่งน่าเบื่อ
วิธีลากแล้ววางคอนโทรลนั้นเรียนรู้ง่าย จึงเหมาะกับมือใหม่ แต่พอมีคอนโทรลสัก 12 ตัว เวลาที่ใช้ไปกับการลาก จัดแนว และปรับขนาดด้วยมือก็เริ่มเห็นได้ชัด ใน GUI แบบอิงมาร์กอัปหรือสร้างแบบเชิงกระบวนการ สิ่งเหล่านี้จะคำนวณการจัดวางแทนให้
UI ของ Windows ช่วงปี 1995~2001 รู้สึกเหมือนเป็น จุดสูงสุดของ Windows จริง ๆ
ชัดเจนและสะอาดตามาก Visual C++ และ Visual Basic ในตอนนั้นไม่ได้สมบูรณ์แบบ แต่ก็ทำให้งานเสร็จได้
XP อยู่ถัดไปแค่นั้น และหลังจากนั้นผมว่าก็เป็นขาลง
ออกนอกประเด็นนิดหน่อย แต่นี่สร้างด้วย Avalonia ซึ่งผมเพิ่งเคยได้ยินครั้งแรก มีใครเคยใช้ไหม? คำสัญญาว่าจะสร้างแอปพลิเคชันข้ามแพลตฟอร์มที่สวยงามด้วยโค้ดเบส .NET เดียวนั้นน่าประทับใจ เลยสงสัยว่าในทางปฏิบัติทำได้ถึงขนาดนั้นจริงไหม
https://avaloniaui.net/
เห็นอันนี้แล้วดีใจจริง ๆ
ผมเป็นหนึ่งในนักพัฒนาช่วงแรกที่ทำส่วน “Visual” ของ Visual Basic
ตอนนั้นชื่อว่า Ruby และไม่เกี่ยวข้องกับภาษาโปรแกรม Ruby มันตั้งใจจะเป็นเชลล์ที่ปรับแต่งได้สำหรับ Windows 3.0 แนวคิดคือให้ผู้ใช้ Windows แต่ละคนสร้างสภาพแวดล้อมเดสก์ท็อปส่วนตัวของตัวเองด้วยตัวแก้ไขแบบวิชวลและ “gizmos” ซึ่งภายหลังถูกเรียกด้วยชื่อที่น่าเบื่อกว่ามากว่า “controls”
Microsoft อาจตัดสินใจอย่างชาญฉลาดว่าสิ่งนี้เหมาะกับการเป็นเครื่องมือสำหรับนักพัฒนามากกว่าเครื่องมือสำหรับผู้ใช้ปลายทาง จึงรวม Ruby กับ Basic กลายเป็น Visual Basic
ถ้าคุณเคยสร้างคอนโทรลแบบกำหนดเอง VBX ก็โทษ API อันเลวร้ายนั้นมาที่ผมได้เลย
และถ้าสงสัยว่าสำนวน “fire an event” มาจากไหน คุณจะพบคำตอบได้ในบทความ VB ของ Retool: https://retool.com/visual-basic
คำเตือนเนื้อหา: มีถ้อยคำเกี่ยวกับยาเสพติด พูดง่าย ๆ คือ “ถามมาได้ทุกอย่าง”
ขอโปรโมตตัวเองแบบหน้าด้านนิดหน่อย ตอนนี้ผมกำลังหางานอยู่ ที่ IBM ทีมของเราได้รับผลกระทบค่อนข้างหนักจากการเลิกจ้างรอบล่าสุด และเสีย McDonald's ซึ่งเป็นลูกค้าเฉพาะรายเดียวไป
ผมรู้หลายภาษาและหลายเฟรมเวิร์ก แต่ไม่ได้รู้ทุกอย่าง มีใครเป็นแบบนั้นบ้างล่ะ?
ผมชอบทำงานร่วมกันเพื่อทำความเข้าใจความต้องการของลูกค้า เช่นเดียวกับโปรแกรมเมอร์ทุกคน ผมก็สนุกกับการเขียนโค้ด แต่การเขียนโค้ดเป็นเพียงวิธีหนึ่งในการทำให้ลูกค้ามีความสุข
ถ้าสนใจ สามารถพบผมได้ที่นี่: http://linkedin.geary.com/, http://resume.geary.com/
ผมคือคนที่เขียนคอมเมนต์ยาวอย่างกระตือรือร้นไว้ข้างบน อยากนั่งคุยผ่าน Zoom สักชั่วโมงเพื่อฟังเรื่องราวยุคนั้น และถ้าเอาวิดีโอนั้นมาโพสต์ที่นี่ ผมคิดว่าคนคงชอบกัน
ผมไม่มีประสบการณ์สัมภาษณ์เลย และก็ไม่มีช่องสื่อด้วย แต่จะพยายามเต็มที่เพื่อถามคำถามที่น่าสนใจ ถ้าสนใจก็ส่งอีเมลมาได้ หาได้ในโปรไฟล์ของผม
เกี่ยวข้องกับ MS Dialog Editor ด้วยหรือเปล่า?
ถ้าลองขุดดูโค้ด จะเห็นว่าผู้เขียนทำไว้แค่ขั้นต่ำสุดเพื่อสร้างเดโมเจ๋ง ๆ เท่านั้น
ตัวอย่างเช่น ฟังก์ชันที่รองรับมีแค่สองตัวคือ MsgBox และ InputBox: https://github.com/BAndysc/AvaloniaVisualBasic6/blob/383a005...
ถึงอย่างนั้น ถ้าดูประวัติ commit ก็ยังน่าประทับใจที่ทำของซับซ้อนแบบนี้ขึ้นมาได้ในเวลา 4 วัน และยังเป็นจุดเริ่มต้นที่ดีสำหรับพัฒนาให้เป็น IDE แบบเต็มรูปแบบด้วย
น่าเสียดายที่ยังขาดฟีเจอร์ขั้นสูงอย่าง syntax highlighting และ auto-completion อยู่ ยังไม่ได้ลองรันเอง แต่เพราะผมใช้ macOS เลยคาดว่าน่าจะไม่มี debugger ด้วย
ถ้าพูดถึงเรื่องสมัยเด็กของผมบ้าง เส้นทางการพัฒนาเริ่มจาก Turbo Pascal ก่อน แล้วค่อยย้ายไป Delphi 7 ภายหลัง Delphi ค่อนข้างคล้ายกับ VB6 คือออกแบบแอปด้วยการลากคอมโพเนนต์ไปวางบนฟอร์ม
แอปแรกที่ทำคือโคลน Notepad++ และยังมีโค้ดเหลืออยู่ แต่แย่มากจนทุกครั้งที่เห็นก็รู้สึกอาย
การรองรับภาษา VB6 ก็ยังจำกัดอยู่ มันออกจะเป็นของเล่นหรือ proof of concept มากกว่า แต่พอเห็นเสียงตอบรับเชิงบวกแล้วก็ทำให้อยากพัฒนาฟีเจอร์เพิ่ม โดยเฉพาะเพราะรูปแบบการบันทึกนั้น เข้ากันได้กับ VB6 ถึงจะยังเป็นของเล่นอยู่ แต่ก็น่าจะเป็นของเล่นที่ใช้งานได้จริงไม่ใช่หรือ?
เปิดเวอร์ชันเว็บในเบราว์เซอร์ได้ที่: https://bandysc.github.io/AvaloniaVisualBasic6/
แก้ไข: เจอสาเหตุแล้ว ตัวเลือก Enhance your security on the web ของ Edge ทำให้ช้าลงมาก ปิดตัวเลือกนี้แล้วปัญหาประสิทธิภาพก็หายไป
ผมคิดถึง คอมโพเนนต์ Frame ในแอปพลิเคชันสมัยนี้จริง ๆ ดูเหมือนทุกคนจะคิดว่าแค่หัวข้อหนา ๆ กับช่องว่างท้ายบล็อกนิดหน่อยก็พอสำหรับจัดกลุ่มรายการแล้ว
fieldsetที่หน้าตาแบบนั้นอยู่ แต่ CSS framework จำนวนมากเกินไปทำมันพัง ผมชอบหน้าตาแบบนั้นจริง ๆถ้าอยากตรวจดู ให้ใส่สิ่งต่อไปนี้ในไฟล์ HTML ว่าง ๆ แล้วดูว่ามันเรนเดอร์ออกมาอย่างไร: Frame1, HTML, CSS, JavaScript
อีกอย่างที่เกี่ยวข้องกันซึ่งหายไปแต่สำคัญคือ TabView ที่ทำมาอย่างถูกต้อง ผมไม่รู้ว่าใครเป็นคนแรกที่ดื้อเรียกแถวปุ่มธรรมดา ๆ ว่า TabView แต่น่าจะเป็น Apple และมันแย่มาก เพราะเหมือนตอนที่ไม่มี GroupBox มันไม่ได้แสดงขอบเขตให้เห็นว่าคอนโทรลด้านล่างอยู่บนวิวของแท็บที่เลือกอยู่ เรื่องนี้ก็น่าจะชัดเจนอยู่แล้วไม่ใช่หรือ