Skip to main content

Recent blog posts

Field ที่ว่างเปล่า

Submitted by ezybzy on

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

แต่แล้ว เราจำเป็นต้องเพิ่มค่าให้กับ Field นี้โดยผ่าน Code ปัญหาเกิดทันทีครับ

SPFieldUserValueCollection a = item[b] as SPFieldUserValueCollection;

สมมติว่าผู้ใช้งาน ไม่ได้ทำการเลือกรายชื่อผู้ใช้ใน Field ที่กำหนดให้นี้ ผลลัพธ์ที่ได้ของตัวแปร a นั้นคือ null ครับ

เข้าใจว่านี่คงเป็นเพราะกระบวนการการเก็บข้อมูลในฐานข้อมูล ซึ่งหากไม่ได้มีการบันทึกข้อมูล ตัว SharePoint จะตีให้ค่าของ Field นั้นเป็น String.Empty ซึ่งจากที่เห็นทำให้ as operator ให้ผลลัพธ์ null ออกมา ทางแก้ที่พอจะนึกออกคือ ก็ต้องสร้างค่านั้นเอง แล้วทำการให้ค่ากลับไปเพื่อบันทึกข้อมูลใส่ List item ดังเช่น

SPFieldUserValueCollection a = item[b] as SPFieldUserValueCollection;

if (a == null)
    a = new SPFieldUserValueCollection();

// Do something ...

// Assign value back to list item
item[b] = a;

item.Update();

อาจจะเป็นจุดที่หลาย ๆ คนพลาดนะ ก็จำเอาไว้

Tags

เดา: MacBook Pro Mid 2012

Submitted by ezybzy on

ต่อไปนี้เป็นการคาดเดาส่วนตัว ปะติดปะต่อจากข่าวลือต่าง ๆ

ปลอด SuperDrive

ค่อนข้างแน่นอนครับว่าเครื่องรุ่นหน้าจะไม่ได้ใส่ SuperDrive มาแล้ว ซึ่งตัวเลือกทดแทนก็คือ MacBook Air SuperDrive นั่นเอง ผลของการถอด SuperDrive ออกจะช่วยลดน้ำหนักของเครื่องได้หลายขีดเลยทีเดียว (มีคนอ้างว่ามันหนัก 6 ออนซ์หรือ 170 กรัม)

การแปลภาษาไทยให้กับผลิตภัณฑ์ระดับโลก

Submitted by ezybzy on

เนื่องจากมันเป็นเรื่องความลับของตัวผลิตภัณฑ์และเจ้าของผลิตภัณฑ์ แต่ผมเห็นว่า กระบวนการขั้นตอนในการทำงานมันน่าสนใจ ผมเลยเอาเฉพาะไส้ของกระบวนการมาสรุปให้อ่านกัน

Tags

ATTEMPT: เปิด Personal Hotspot ใน iPad Wifi + 3G (First Generation)

Submitted by ezybzy on

พยายามแล้วพยายามอีกแต่ก็ไม่สำเร็จ แต่ก็คิดว่าน่าจะบันทึกเอาไว้จะได้รู้ว่าทำอะไรไปแล้วบ้าง

ไฟล์ที่เกี่ยวข้อง

ไฟล์ ที่มา
/System/Library/CoreServices/SpringBoard.app/K48AP.plist  
/System/Library/LaunchDaemon/com.apple.hostapd.plist นำมาจาก iPhone 4
/usr/libexec/hostapd นำมาจาก iPhone 4

ตัว K48AP.plist ได้เพิ่ม Capabilities ดังต่อไปนี้

key value หมายเหตุ
telephony true ซึ่งคิดว่าไม่จำเป็นนะ เพราะมี any-telephony อยู่แล้ว ซึ่งมันก็ควบคุมการแสดงผลจากการหา cellular-data เหมือนกัน

ปัญหาที่พบ คือ เมนู Personal Hotspot ไม่ขึ้น ซึ่งเข้าใจว่าเกิดเนื่องมาจากการที่ CommCenter หรืออะไรซักอย่าง ไม่ยอมให้ EDGESetting.bundle สามารถแสดงช่องกรอกข้อมูลกลุ่ม ServiceTypeUI = 4 จึงทำให้ไม่สามารถกรอกค่า APN เพื่อทำ Tethering ได้ ซึ่งนั่นน่าจะเป็นเหตุให้ Personal Hotspot ไม่ยอมทำงาน

จุดที่สงสัยคือ iPad รุ่นสามนี้ได้มีการเพิ่ม Capability ในไฟล์ Jxx.plist หรือไม่? หรือเกิดการแก้ไขค่าบางอย่างใน com.apple.SpringBoard.plist หรือ com.apple.Preferences.plist หรือแม้แต่ .GlobalPreferences.plist ให้รู้ว่า AllowTethering (หรืออันนี้เป็นสิ่งที่ควรจะอยู่ใน Unknown.bundle นะ)

ไปค้นเจอเพิ่มเติมมาว่า ถ้าต้องการ Wifi Personal Hotspot อาจจะต้องดู Firmware ของ Wifi ด้วย ซึ่งจุดนี้คงต้องรอลุ้นว่า iPad รุ่นสาม จะยังใช้ Broadcom ตัวเดิมกับที่ใช้มาตั้งแต่สมัย iPhone 3GS หรือไม่ ถ้าใช่ก็น่าจะเอามาอัพใส่ iPad เพื่อให้อย่างน้อยมีโครงสร้างที่จำเป็นในการทำ Wifi Personal Hotspot รอไว้ก่อน แล้วจึงค่อยย้อนกลับมาดูว่าจะทำให้มันยอมรับความสามารถของ Tethering ได้อย่างไร

Tags

การตั้ง Search Scope ใน SharePoint

Submitted by ezybzy on

มีโจทย์ว่า ต้องจำกัดผลลัพธ์การค้นหาใน Site Collection อันหนึ่ง (สมมติว่าชื่อ http://a) ซึ่งภายในดันมีอีก Site Collection หนึ่งที่มีรูปของ Url เป็น http://a/sites/xyz

วิธีแก้ปัญหาก็ทำได้หลายวิธี หนึ่งในนั้นคือ การกำหนด Content Source โดยกรอก Url ของ Site Collection ที่ต้องการ และต้องไม่ลืมเลือก Crawl Settings ให้เป็น Only crawl the Site Collection of each start address แทนที่จะเลือก Crawl everything under the hostname for each start address ซึ่งตัว Crawler จะวิ่งไปทั่วระดับ Web Application เลย

เมื่อตั้งส่วนนี้เสร็จ ก็ต้องไปตั้ง Scopes (ในเมนู Query and Results) โดยหากจะเล่นกับ Content Source ที่สร้างไปเมื่อซักครู่ ตัว Scope นี้จะถูกบังคับให้เป็น Shared Scope (แต่ละ Site Collection ที่จะใช้ระบบ Search จะไม่สามารถลบค่าออกเองได้ เพราะนี่เป็นค่าจากส่วนกลาง) เนื่องจากในเมนู Search Scope ที่อยู่ภายใต้ Site Collection เมื่อทำการ New rule แล้วในหัวข้อ Scope Rule Type จะไม่มีหัวข้อนี้ให้เลือก

วิธีนี้เท่าที่ลอง ใช้งานไม่ได้กับ FAST Query SSA นะ ประหลาดใจเหมือนกัน แต่อาจจะเป็นการตั้งค่าบางอย่างผิดพลาดก็ได้ เลยไม่ปรากฏตัวเลือกนี้ให้ใช้ จำเป็นต้องกลับไปใช้วิธีไล่ Exclude URL ที่ไม่ต้องการออกไปแทน

Tags

ทำ HTML Slideshow

Submitted by ezybzy on

เนื่องจากรับหน้าที่ไปสอนนักศึกษามหาวิทยาลัยกลุ่มหนึ่ง หัวข้อที่สอนคือ CSS เราก็อยากจะทำเอกสารประกอบการสอนให้เข้ากับเรื่องนี้ ก็เลยมาลงที่การทำสไลด์ด้วย HTML เพื่อให้นักศึกษากลุ่มนี้เกิดความรู้สึกว่า “สิ่งที่เขาเรียนไป มันใช้ทำอะไรได้ขนาดนี้เลยเหรอ”

ตอนแรกก็ลอง ๆ หาก็พบ html5slides ซึ่งก็ถือว่าใช้งานได้ง่ายเลยทีเดียว แต่มีข้อจำกัดว่าขณะใช้งานต้องเชื่อมต่ออินเตอร์เน็ต เนื่องจากการอ้างอิง js, css, ฟอนต์ในนั้น อยู่ภายนอกหมด ก็เลยต้องออกแรงแก้ไขดัดแปลงนิดหน่อยให้สามารถใช้งานแบบ Offline ได้

แต่ Template ชุดนี้ก็ดันมีปัญหากวนใจสำคัญเรื่องหนึ่งคือการแสดงผล iframe ใน Google Chrome ที่จะทำให้หน้าสไลด์เลื่อนจนไม่เหมาะสมแก่การใช้งาน ซึ่งในจุดนี้ก็จนปัญญาจะแก้เหลือเกิน (คงเป็น Internal ใน Google Chrome นี่แหละทำให้เกิดปัญหาการแย่งซีนของ iframe ขึ้นมา)

ในเวลาเดียวกัน ก็ลองค้นหาต้นแบบอื่น ๆ ก็ไปพบกับต้นแบบที่คล้าย ๆ กับของที่ปรากฏใน slides.html5rocks.com อีกตัว เข้าใจว่าเขาคง port ออกมาจากสไลด์ตัวนี้แหละ ชื่อ g5 ซึ่งตอนแรกคิดว่าจะมีรูปแบบการทำงานเดียวกับแบบแรก แต่ที่แท้จริงแล้ว ตัวนี้ต้อง build ผ่านทางคำสั่ง slideshow ซึ่งเป็นแพคเกตตัวหนึ่งใน gem นั่นก็นำมาสู่ขั้นตอนการติดตั้งอันแสนจะวุ่นวายยามค่ำคืน

อันดับแรก ติดตั้ง slideshow ก่อนผ่านทาง gem

sudo gem install slideshow

ขั้นต่อมาติดตั้ง Template ของ g5 ผ่านคำสั่ง

slideshow -f https://github.com/geraldb/slideshow-google-html5-slides/raw/master/g5.txt

ต่อมาก็ทำการสร้าง Directory ว่าง ๆ ซักที่ แล้วเข้าไปเรียกใช้คำสั่งนี้ เพื่อสร้างไฟล์ทั้งหมดออกมา

slideshow -t g5.txt tutorial

ที่นี้ปัญหาคือ เราจำเป็นต้องมีไฟล์ tutorial นี้เสียก่อน ซึ่งจริง ๆ ก็เป็นแค่ text file ธรรมดานี่แหละ แต่ในเว็บเขาไม่ได้บอกเอาไว้ว่าต้องทำ (แหมเราก็ซื่อนะ ไม่เคยใช้นี่) ก็วนเวียนสาระวนกับเรื่องนี้มา 1 คืน ไปเอา rvm มาติดตั้งโหลด ruby 1.9 มาติดตั้ง แล้วก็ไม่ได้อะไรขึ้นมาหนำซ้ำยังไปติดปัญหาอื่นที่งงกว่าเดิม สุดท้ายก็ถอนออก แล้วจึงทำการสร้าง tutorial ขึ้นมา (ผมเลือก Markdown แทนการใช้ Textile นะ) โดย

touch tutorial.text

แล้วจึงทำการเรียกใช้งานคำสั่งที่แล้วอีกครั้ง ก็จะสามารถสร้างสไลด์ตัวอย่างออกมาได้

การกำหนดหัวข้อให้เรากำหนดได้ใน tutorial ของเราตามรูปแบบที่เขียนในเว็บได้เลย แล้วก็ใช้หัวข้อลำดับ 1 ในการแบ่งสไลด์ไปเรื่อย ๆ ขั้นต่อไปคงจะมาดูขั้นตอนการปรับขนาดอักษรภายในให้ใหญ่ขึ้นอีกหน่อย เพราะด้วยปัจจุบันค่อนข้างเล็กมาก