ezybzy's blog

ทำไมวรรณยุกต์ลอย? แล้วจะแก้อย่างไร?

ถามผม ผมก็ตอบไม่ได้หรอกนะ :) แต่ถ้าดูตามวิธีที่ระบบคิด น่าจะได้ตามนี้

โดยปรกติข้อมูลที่เราพิมพ์บันทึกไว้ในระบบมันจะถูกเก็บเป็นรหัสอักษร ซึ่งมีหลายมาตรฐานทั้งแบบ ASCII เดิม จนปัจจุบันก็คือ Unicode สมมติ เราพิมพ์ข้อความ "ใช้ตั้งโต๊ะ" ตัวระบบก็จะบันทึก "ใ ช ้ ต ั ้ ง โ ต ๊ ะ" ไปดื้อ ๆ เลย (ระบบไม่ได้บันทึกข้อความตัวอย่างโดยคำนึงถึงระดับความสูงของวรรณยุกต์) เมื่อต้องนำข้อความมาแสดงผลบนหน้าจอ ระบบปฏิบัติการผ่านทางระบบแสดงผลข้อความจะทำการเลือกอักขระมาจากแบบอักษรเพื่อแสดงผล ณ จุดนี้ ข้อความ "ใช้ตั้งโต๊ะ" นี้อาจจะถูกแสดงผลในรูปแบบที่ไม้โทและไม้ตรีของคำว่า "ใช้" และ "โต๊ะ" ลอยอยู่ในระดับสูงระดับเดียวกับคำว่า "ตั้ง"

แน่นอนเห็นอย่างนี้แล้ว เราก็ย่อมรู้สึกว่า มันไม่เหมือนที่เราเขียนนะ เพราะปรกติเวลาเราเขียน เราจะพยายามวางไม้โทและไม้ตรีไว้แค่เหนือระดับตัวอักษรหรือสระบนเท่านั้น เราคงไม่ได้วางลอย ๆ ไว้แบบนั้น ตรงนี้เกิดเพราะอักขระปริยายของวรรณยุกต์เหล่านี้ เป็นอักขระที่อยู่ในระดับเหนือสระบน (นึกถึงเครื่องพิมพ์ดีดโบราณ) เพื่อที่อย่างน้อยหากไม่มีตัวช่วยอะไรเลย วรรณยุกต์จะไม่ถูกสระบนบัง

ระบบแสดงผลข้อความบางระบบ อาจจะมีความสามารถในการตรวจสอบเงื่อนไขอย่างง่าย เช่น เมื่อทราบว่าตัวอักขระหน้าวรรณยุกต์นั้นไม่ได้เป็นสระบน ระบบจะเลือกอักขระของวรรณยุกต์ที่อยู่ในระดับเหนือตัวอักษรมาใช้แทนที่จะเลือกอักขระของวรรณยุกต์ที่อยู่ระดับเหนือสระบน

แต่เมื่อมันเป็นแค่บางระบบ เมื่อแบบอักษรต้องรองรับระบบอื่น ๆ ก็จำเป็นต้องพัฒนา "อะไรบางอย่าง" ในแบบอักษรให้สนับสนุนวิธีการของระบบที่แตกต่างไปด้วย อย่างเช่นบางระบบความสามารถที่จะตรวจสอบเงื่อนไขเมื่อเจออักขระต่อไปนี้ (a) ตามด้วยอักขระตัวต่อไปนี้ (b) ให้เปลี่ยนการแสดงผลอักษระตัวต่อไปนี้ (b) เป็นอีกตัว (c) แทน

ทีนี้แล้วอะไรคือ "อะไรบางอย่าง"? ในแบบอักษรยุคใหม่ มันไม่ได้มีแค่อักขระอย่างเดียวแล้ว แต่มันยังมีความสามารถพิเศษที่สามารถเขียนสั่งแนบไปได้ เพื่อช่วย "ระบบแสดงผลข้อความ" ให้สามารถแสดงผลออกมาได้อย่างเหมาะสม อย่างของ OS X มีสิ่งที่เรียกว่า AAT (Apple Advanced Typography) เป็นส่วนเสริม หรืออย่างระบบอื่น ๆ ที่สนับสนุน OpenType เต็มรูปแบบก็ใช้งานความสามารถตามข้อกำหนดของ OpenType ได้เลย (รู้สึกจะเรียกว่า Ligatures นะ)

ทีนี้คงจะเป็นมุมมองที่ว่า เราจะยึดระบบ หรือจะให้ระบบหมุนรอบแบบอักษรแทน ถ้าไม่อยากให้วรรณยุกต์ลอย เราจะแก้ระบบให้มันสอดคล้องกับแบบอักษร หรือเราจะแก้แบบอักษรให้มันเข้ากับกระบวนการวิธีคิดของระบบล่ะ?

ส่วนกรณีบางแบบอักษร เช่น Thonburi บน OS X มีปัญหากับไม้ตรีระดับเหนือสระบน อันนั้นเป็นความชุ่ยของคนทำอักขระไม้ตรีระดับเหนือสระบน เนื่องจากได้กำหนดระดับความสูงของอักขระดังกล่าวต่ำเกินไป ซึ่งใช้เวลาอยู่หลายปีกว่า Apple จะปล่อยแบบอักษรที่ได้แก้ไขเรื่องนี้ออกมาให้เราใช้งาน ซึ่งจะว่าไปก็ไม่ได้เกี่ยวกับเรื่องด้านบนเท่าไร เพราะแบบอักษร Thonburi มี "อะไรบางอย่าง" ที่ทำให้สามารถแสดงวรรณยุกต์ไทยในข้อความภาษาไทยได้อย่างถูกต้องอยู่แล้ว

เมื่อก่อน Apple ใช้วิธีแก้ปัญหา Thonburi ด้วยการ "ดึงวรรณยุกต์" ผ่านโปรแกรมจัดการสิ่งพิมพ์ ซึ่งก็นับถือเลยว่าทนทำมาได้อย่างไรเป็นปี ๆ แทนที่จะแก้แบบอักษรให้ถูกต้องทีเดียวเรื่องก็จบแล้ว :)

Blog Tags: 

จับ SharePoint Workflow 2013 มาชนกับ User Profile

ได้รับความต้องการสนุก ๆ มาข้อหนึ่งในการทำ SharePoint Workflow 2013 นั่นคือ มันต้องหา Manager ของ User ที่เป็นคนสร้างเอกสารให้ได้ เพื่อขออนุญาตทำกิจกรรมบางอย่าง (สร้าง Task ให้ Manager นั่นเอง)

ตอนแรกก็คิดว่าถึงคราวที่จะต้องขุด REST API ของ SharePoint ขึ้นมาผสมกับ Call Web Service ซึ่งเป็น Action ใหม่ใน SharePoint Workflow 2013 แล้วก็เป็นเช่นนั้น แต่หนทางมันกลับไม่ได้ง่ายอย่างที่คาด

จากบทความ Work with user profiles in SharePoint 2013 มองดูรอบ ๆ มีตัวอย่างหนึ่งที่เราใช้ได้เลยนั่นก็คือ

REST: GET http://<siteUri>/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor([email protected],propertyName='PreferredName')[email protected]='domain\user'

ทำการแก้ไขนิดหน่อยเปลี่ยนจาก PreferredName เป็น Manager แทน แต่ทีนี้ปัญหาที่พบก็คือ url ด้านบนนี้ โดยค่าปริยายผลลัพธ์ที่ SharePoint จะตอบกลับมาจะเป็น XML ซึ่งไม่สามารถนำมาใช้ต่อบน SharePoint Designer Workflow ได้

เราจำเป็นต้องปรับเปลี่ยนนิดหน่อยโดยการปั้น Request Header เพิ่มเข้าไปเพื่อบังคับให้ผลลัพธ์ที่ตอบกลับมาเป็น json ตามแบบที่ Action ตัวนี้คาดหวังไว้ วิธีการตามที่ Serge Luca ได้อธิบายไว้ใน Calling the SharePoint 2013 Rest API from a SharePoint Designer Workflow นั่นคือ ใช้ Action ชื่อ Build Dictionary สร้าง Dictionary ที่มีคีย์และค่าดังนี้

Accept : application/json;odata=verbose
Content-Type : application/json;odata=verbose

พรุ่งนี้มาดูผลว่า จะได้ตามที่ Luca แนะนำไว้หรือไม่ ยังไม่พอครับ ต้องมี header พิเศษอีกตัวนั่นคือ Authorization (ดู Kevin.Talbot) แล้วก็จะมีประเด็นอีกเรื่องคือ Login Name ที่ได้มามันไม่ใช่ full domain แต่กลายเป็น claim แทนซึ่งมีปัญหาตรง # ซึ่งอาจจะต้องแก้ให้เป็น %23 แทน

เมื่อเราใช้ Action ชื่อ Get Item from Dictionary ดึง Manager ออกมาแล้วจากผลลัพธ์ของ Call HTTP Service จะพบว่ามันอยู่ในสภาพ domain\username ทำให้ต้องใช้ Replace String เปลี่ยน \\ เป็น \ แล้วเมื่อจะนำไปใช้ในการสร้าง Task หรือแม้แต่การตรวจสอบ User จำเป็นต้อง Cast ค่าให้กลับมาเป็น Login Name อีกหน มิเช่นนั้น Workflow อาจจะถูก Suspended ได้

ออ นอกจากนี้ยังมีตัวอย่างการทำ POST เข้าหา REST เช่นกัน ดูตัวอย่างของ Borislav Grgić ก็สามารถนำไปทำกิจกรรมบางอย่างได้ แต่ทั้งนี้ก็ขึ้นกับสิทธิ์ของคนสั่ง Workflow นั่นเองว่าจะสามารถทำได้หรือไม่

Blog Tags: 

ข้อควรระวังในการลบ User ออกจาก Site Colleciton

เป็นปรกติที่บริษัทรับพัฒนา SharePoint อาจจะทำการย้าย Farm, Site Collection ที่พัฒนาจากที่บริษัท ออกไปติดตั้งยังไซต์ลูกค้า ซึ่งแน่นอนว่า Active Directory ที่ใช้งานนั้นเป็นคนละตัว ทำให้มี User ที่เกิดจาก Active Directory ของบริษัท ติดไปในระบบที่ส่งมอบแก่ลูกค้าด้วย ผู้ดูแลระบบผู้หวังดีอาจจะตรวจพบ User กลุ่มนี้และใจดีทำการลบออกจากระบบให้ นั่นก็นำมาซึ่งปัญหาอันแสนน่ากลัว

ปัญหาที่พบได้บ่อยคือ Workflow ที่เคยทำงานได้ดีใน Site Collection นั้นเกิดหยุดทำงานพร้อมกันโดยมิได้นัดหมาย เมื่อลองใช้ SharePoint Designer เปิดดูอาจจะพบอาการเปิดหน้าเว็บไม่ได้ (หน้าตาใน SharePoint Designer มันมี View บางส่วนแสดงผลเป็นหน้าเว็บได้ด้วย) ลองกดดู Workflow Settings ทุกจุดใน Site ก็พบ error ประมาณเดียวกันคือ User cannot be found ซึ่งใน ULS ก็ไม่ได้บอกอะไรที่มีประโยชน์นัก

หาสาเหตุอยู่ตั้งนานกว่าจะทราบสาเหตุ พอมาเปิดดู Workflow ทั้งหมดในระดับ Site Collection จึงเพิ่งสังเกตว่าผู้สร้าง OOB Workflow ทั้งหลายเป็น User ที่หายไปแล้ว ทางแก้คือ ใช้ User ที่มีอยู่ในระบบเข้าไปจัดการ Publish Workflow ดังกล่าวใหม่ทั้งหมด หลังจากนั้นการทำงานของ Workflow จึงกลับมาเป็นปรกติอีกครั้ง

ข้อเตือนใจคือ อย่าเผลอหวังดีไปไล่ลบ User อีก เว้นเสียแต่จะรู้ว่าควรจะต้องแก้อะไรอีกบ้าง

Blog Tags: 

โบว์สีขาว

หลังจากที่กระทรวงศึกษายกเลิกกฎอันเนื่องมาจาก ปว. เรื่องระเบียบทรงผมของนักเรียน เมื่อเช้าขณะรถติดอยู่แถวสะพานผ่านฟ้า ผมได้เห็นนักเรียนหญิงโรงเรียนแถว ๆ นั้นคนหนึ่งซึ่งโรงเรียนนี้ได้ชื่อว่ามีระเบียบทรงผมที่เป็นเอกลักษณ์มาก ไว้ผมยาวผูกโบว์สีขาวเดินข้ามถนนผ่านไป สงสัยว่าความเปลี่ยนแปลงคงจะมาถึงแล้ว

Blog Tags: