โค้ดสั่นๆลดงาน 3 วัน เหลือ 1 นาที

, , Leave a comment

     

# Ruby version:2.4

layout = RBA::Layout::new()
top = layout.create_cell(“TOP”)
l1 = layout.layer(1, 0)
top.shapes(l1).insert(RBA::Box::new(0, 0, 1000, 2000))
.
layout.write(“2D-gradient.gds”)

ตัวโค้ดไม่กี่บรรทัดนี้ ทำให้งานที่พยายามทำมาตลอด 3 วันจบลงใน 1 นาที แต่ความจริงมันไม่ได้ง่ายอย่างนั้น เพราะเวลาที่ต้องศึกษาการใช้งานก็ใช้เวลาพอๆกับทำเองด้วยมือเหมือนกัน แต่สิ่งที่ได้มาถือว่าคุ้มค่าเพราะพลิกแพลงเป็นอะไรก็ได้ ในอนาคต

Macro development
Macro development

โจทย์มีอยู่ว่าต้องสร้าง object ราว 1500-2000 อัน ซึ่งมีขนาด ระยะ แตกต่างกัน วางตำแหน่งในรูปแบบที่เป็น pattern ตามกำหนด

ในตอนแรกนั้น พยายามจะหาวิธีที่สามารถสร้างได้ใน KLayout แบบที่มีในเมนู วิธีที่ใกล้เคียงที่สุดที่ทำได้ คือ make array แต่ไม่สามารถสร้างให้ระยะระหว่าง object เปลี่ยนแปลงไปเรื่อยๆได้ กำหนดได้แค่ค่าเดียว

จึงพยายามหาวิธีอื่นๆอยู่สักพัก เลยรู้ว่าสามารถใช้ Ruby ใน KLayout สร้าง object ได้ แต่มันไม่ง่ายสำหรับผู้ไม่เคยใช้นะสิ ต้องใช้เวลาศึกษาพอสมควร

ทางออกเพื่อให้ได้งานที่รวดเร็วที่สุดคือ เขียนเองทีละชิ้น ผลคือทำอยู่ 3 วัน เสร็จจริง แต่งานที่ได้มีความเสี่ยงที่จะผิดพลาดเยอะมาก เพราะต้องกำหนดตัวเลขต่างๆด้วยมือ แล้วยังไม่รู้ด้วยซ้ำว่าผิดตรงไหน อันนี้ไม่โอเค

คราวนี้ จำต้องกลับมาศึกษาวิธีเขียนโค้ดใหม่ ค่อยๆอ่าน ค่อยๆทำความเข้าใจไปทีละขั้น ใช้เวลาไปหลายวันพอๆกัน แต่ใช้ความพยายามต่างกันอันหนึ่งใช้หัวคิด อีกอันใช้แรงงาน

สรุปสุดท้ายว่า เราได้ชุดโค้ดที่สามารถสร้างงานที่เราใช้เวลาทำ 3 วันให้เสร็จภายใน 1 นาที แต่การจะลดงานให้เหลือ 1 นาที ก็ใช้เวลา 3 วันเพื่อศึกษาเหมือนกัน

อ้างอิง: http://www.klayout.de/index.html

 

Leave a Reply