วันอาทิตย์ที่ 31 มกราคม พ.ศ. 2564

กูเกิลโอเพนซอร์สเครื่องมือภายใน ที่ใช้จัดการเครื่องวินโดวส์ของพนักงาน

กูเกิลโอเพนซอร์สเครื่องมือภายใน ที่ใช้จัดการเครื่องวินโดวส์ของพนักงาน


กูเกิลโอเพนซอร์สเครื่องมือภายใน ที่ใช้จัดการเครื่องวินโดวส์ของพนักงาน

Posted: 30 Jan 2021 01:55 AM PST

กูเกิลประกาศโอเพนซอร์สเครื่องมือภายในบริษัท ที่กูเกิลสร้างขึ้นเองเพื่อใช้จัดการฮาร์ดแวร์สายวินโดวส์จำนวนมากๆ ในองค์กรขนาดใหญ่

กูเกิลบอกว่าโครงการส่วนใหญ่เริ่มทำมาก่อนต้นปี 2020 ทำให้เมื่อต้องหยุดเข้าออฟฟิศ ทำงานจากที่บ้าน ทีมไอทีของกูเกิลจึงมีเครื่องมืออัตโนมัติช่วยจัดการคอมพิวเตอร์ของพนักงานได้สะดวก

เครื่องมือที่เปิดซอร์สมีหลายตัวดังนี้

  • Glazier เป็นเครื่องมือสำหรับทำอิมเมจวินโดวส์ เป็น text-based ที่เขียนด้วย Python และมีฟีเจอร์ด้าน automate test
  • Fresnel ใช้คู่กับ Glazier เพื่อดึงอิมเมจจากที่ไหนก็ได้ในอินเทอร์เน็ต มาสร้างเป็น boot media ได้อย่างปลอดภัย
  • Googet เป็นตัวจัดการ repository สำหรับวินโดวส์โดยเฉพาะ ใช้แนวคิดแบบเดียวกับ Puppet หรือ APT
  • Splice นำเครื่องที่ติดตั้งอิมเมจเสร็จใหม่ๆ join domain ของ Active Directory จากที่ไหนก็ได้
  • Cabbie เป็นเซอร์วิสของวินโดวส์ไว้จัดการอัพเดต เช่น เร่งอัพเดตแพตช์สำคัญให้เร็วขึ้น หรือเลื่อนแพตช์ที่มีปัญหาออกไป
  • Aureka ใช้จัดคิวการบำรุงรักษาเครื่องอัตโนมัติ กำหนดระยะเวลาที่ต้องการ ไม่ให้งานที่รันต้องหยุดชะงัก

No Description

ที่มา - Google Blog, ภาพจากกูเกิล

วันอาทิตย์ที่ 24 มกราคม พ.ศ. 2564

ไมโครซอฟท์ช่วยเปิด Win32 API ให้ภาษาอื่นนอกจาก C/C++ เริ่มต้นที่ C# และ Rust

ไมโครซอฟท์ช่วยเปิด Win32 API ให้ภาษาอื่นนอกจาก C/C++ เริ่มต้นที่ C# และ Rust


ไมโครซอฟท์ช่วยเปิด Win32 API ให้ภาษาอื่นนอกจาก C/C++ เริ่มต้นที่ C# และ Rust

Posted: 22 Jan 2021 07:03 PM PST

ไมโครซอฟท์มีแนวทางหลอมรวม Win32 และ UWP เข้าด้วยกันภายใต้ Project Reunion ซึ่งประกอบด้วยโครงการย่อยหลายอย่าง เป้าหมายข้อหนึ่งของ Reunion คือเปิดให้ใช้ภาษาโปรแกรมรุ่นใหม่ๆ เขียนแอพบนวินโดวส์ได้หลากหลายขึ้น

ข้อจำกัดสำคัญของ Win32 API แบบดั้งเดิมคือมันถูกสร้างขึ้นในยุคภาษา C/C++ จึงรองรับเฉพาะภาษานี้ หากต้องการเขียนโปรแกรม Win32 ด้วยภาษาโปรแกรมอื่น จำเป็นต้องมี binding หรือ wrapper มาทำหน้าที่เชื่อมต่อ API ให้

ที่ผ่านมามีโครงการสร้าง binding/wrapper ของภาษาต่างๆ แต่เป็นโอเพนซอร์สที่สร้างโดยชุมชนนักพัฒนา และกระบวนการรองรับ API ต้องทำกันเองด้วยมือทั้งหมด จึงมีปัญหาเรื่องรองรับ API ไม่ครบถ้วน ส่งผลให้ binding ของแต่ละภาษามีคุณภาพต่างกัน ทำงานซ้ำซ้อนกันแต่ไม่สมบูรณ์สักอัน

ล่าสุดไมโครซอฟท์เข้ามาแก้ปัญหานี้ด้วยโครงการ win32metadata ที่เป็นการสร้าง metadata ของ API ทั้งหมดออกมาเป็นภาษาต่างๆ ให้อัตโนมัติ

เบื้องหลังของโครงการ win32metadata คือการไล่อ่านไฟล์ header ของ Windows SDK ทั้งหมด ดูว่าไฟล์ DLL อิมพอร์ตฟังก์ชันใดบ้าง (ด้วยคอมไพเลอร์ ClangSharp) แล้วเจนเป็นไฟล์ Windows Metadata (.winmd) เพื่อให้นักพัฒนา wrapper ในภาษาอื่นๆ สามารถนำไปใช้ต่อได้ง่าย

No Description

ตัวอย่างหน้าตาของไฟล์ .winmd ที่สร้างด้วย win32metadata

ไมโครซอฟท์ร่วมมือกับนักพัฒนาโครงการโอเพนซอร์ส 2 ตัว ได้แก่ PInvoke สำหรับภาษา C# และ winapi-rs สำหรับภาษา Rust นำเครื่องมือ metadata ตัวนี้มาใช้งานแล้ว โดยฝั่งของ C# ออกมาเป็นรูปเป็นร่างแล้วในชื่อโครงการ Cs/Win32 ส่วนโครงการ Rust ชื่อว่า windows-rs

ไมโครซอฟท์บอกว่า C# และ Rust เป็นแค่จุดเริ่มต้นเท่านั้น ตอนนี้กำลังรองรับภาษาที่สามคือ Modern C++ (มาตรฐานใหม่คือ C++17 ขึ้นไป) และจะใช้แนวทางจับมือกับโครงการโอเพนซอร์สที่มีอยู่แล้ว เพื่อขยายไปยังภาษาอื่นๆ ต่อไป

ที่มา - Microsoft