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

Submitted by ezybzy on Wed, 2012-04-18 - 16:30

สมมติเราสร้าง 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();

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

Blog Tags

เดา: MacBook Pro Mid 2012

Submitted by ezybzy on Sat, 2012-04-07 - 15:44

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

ปลอด SuperDrive

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

มันจะยังชื่อ MacBook Pro

ผมไม่เชื่อว่า Apple จะฆ่าชื่อนี้ทิ้งไปสำหรับเครื่องรุ่น 15 นิ้ว เพราะผมมีความเชื่อว่า เครื่อง Pro กับเครื่อง Air มันแยกตลาดค่อนข้างชัดเจน การยกเลิก MacBook ไปเหลือแต่ MacBook Air ดูจะเป็นการผลักให้ผู้ใช้กลุ่มเดิมเลือกว่าอยากได้เครื่องเบา หรืออยากได้เครื่องที่แรงครบเครื่อง และที่สำคัญด้วยข้อจำกัดทางธรรมชาติบางอย่างจะทำให้เครื่อง 15 นิ้วไม่สามารถบางและเบาไปได้จนถึงระดับของ Air เพราะข้อจำกัดของน้ำหนักหน้าจอที่จะทำให้ไม่สามารถตั้งจอในระดับที่เหมาะสมกับการใช้งานได้ถ้าฐานเครื่องไม่มีน้ำหนักมากพอจะถ่วงน้ำหนักของจอ ส่วนเครื่อง 13 นิ้ว ผมเผื่อใจไว้แล้วกันว่าอาจจะหายไป แต่ก็ไม่แน่นะ มาดูเหตุผลสนับสนุนกันครับ

พื้นที่เพิ่มเติมจากการถอด SuperDrive ความเป็นไปได้ที่ยังต้องรอการพิสูจน์

จากพื้นที่ที่เพิ่มขึ้นนี้ มันจะถูกแทนที่ด้วยอะไรได้บ้าง ที่ผมเล็งไว้ก็มี การ์ดจอ (สำหรับรุ่น 13 นิ้ว), พื้นที่สำหรับไดร์ฟที่สอง, ช่องต่อ USB และ/หรือ Thunderbolt, และแบตเตอรี่ มาดูกันทีละเรื่องครับ

การ์ดจอ

เครื่องรุ่น 13 นิ้วปี 2011 ถูกทำให้รู้สึกไม่เป็น Pro อันเนื่องมาจากการใช้การ์ดจอของ Intel ซึ่งไม่ถือว่าดีในมาตรฐานที่ Pro จะยอมรับได้ ข้อจำกัดนี้เกิดเนื่องมาจากการปรับใช้ CPU ตระกูล Core iX นั่นเองที่รวมการ์ดจอเข้ามาอยู่บน Die ของ CPU แล้ว และด้วยพื้นที่ที่จำกัดทำให้ไม่สามารถเพิ่มการ์ดจอแยกเข้าไปได้เหมือนเครื่อง 15 นิ้ว เมื่อสามารถเพิ่มพื้นที่บนบอร์ดได้ ก็มีโอกาสที่เราจะได้เห็นการ์ดจอแยกบนเครื่อง 13 นิ้ว

พื้นที่สำหรับไดร์ฟที่สอง

หาก Apple ไม่คิดจะปรับปรุงพื้นที่บนเมนบอร์ด พื้นที่ที่เหลือนี้ก็มีโอกาสจะถูกนำไปใช้งานเป็นพื้นที่ของไดร์ฟที่สองได้ ซึ่งเป็นไปได้ที่ไดร์ฟแรกในเครื่องจะกลายเป็น SSD ขนาดพอประมาณ (64 หรือ 128 GB) ไปเลยส่วนพื้นที่ที่เหลือเนื่องจากเป็นเครื่อง Pro จึงควรจะมีพื้นที่สำหรับการเก็บข้อมูลมากกว่าเครื่อง Air ที่ติดข้อจำกัดของขนาดทำให้ไม่สามารถเพิ่มไดร์ฟที่สองได้ ซึ่งการจะยืนพื้นด้วยฮาร์ดดิสก์ 500 GB หรือ 750 GB สำหรับไดร์ฟที่สองดูจะเป็นเรื่องที่น่าจะเป็นไปได้ ทั้งนี้ตัว Mac OS X น่าจะมีระบบจัดการเรื่องของ Partition ที่เหมาะสมให้คล้าย ๆ กับใน iOS ที่มีการแบ่งพื้นที่ของ OS และพื้นที่สำหรับเก็บไฟล์ข้อมูลไว้อย่างชัดเจน

ช่องต่อ USB และ/หรือ Thunderbolt

มันคงดูประหลาดที่เครื่องคอมพิวเตอร์จะมีฝั่งเดียวที่เป็นพอร์ดเชื่อมต่อต่าง ๆ ส่วนอีกฝั่งปิดทึบไม่มีอะไรเลย ผมคิดว่า Apple น่าจะหาประโยชน์จากการนำพื้นที่ที่เหลือนี้มาเพิ่มพอร์ตต่าง ๆ เข้าไปในเครื่องได้อีก อย่างน้อยอาจจะเป็น USB 3 จำนวน 4–5 ช่องโดยย้าย USB เดิมจากฝั่งซ้ายของเครื่องไปด้านขวาทั้งหมด แล้วทำการเพิ่มช่อง Thunderbolt ให้กับฝั่งซ้ายได้อีกซัก 1 ช่อง เพื่อให้ทั้งสองฝั่งมีความกว้างของพื้นที่ช่องเสียบต่าง ๆ ที่สมดุลกัน

แบตเตอรี่

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

รอดูกันว่าเหตุผลที่ยกมาทั้งหมดนี้จะมีข้อใดบ้างที่ถูกนำไปใช้จริง หรือจะไม่ถูกใช้งานเลย ผมคาดหวังว่าเครื่องรุ่นใหม่นี้คงไม่ทำให้หลาย ๆ ท่านที่รอคอยผิดหวังครับ

Blog Tags

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

Submitted by ezybzy on Wed, 2012-03-21 - 15:07

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

Blog Tags

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

Submitted by ezybzy on Mon, 2012-03-12 - 08:49

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

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

ไฟล์ ที่มา
/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 ได้อย่างไร

Blog Tags

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

Submitted by ezybzy on Tue, 2012-03-06 - 16:07

มีโจทย์ว่า ต้องจำกัดผลลัพธ์การค้นหาใน 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 ที่ไม่ต้องการออกไปแทน

Blog Tags

ทำ HTML Slideshow

Submitted by ezybzy on Sun, 2012-02-26 - 11:05

เนื่องจากรับหน้าที่ไปสอนนักศึกษามหาวิทยาลัยกลุ่มหนึ่ง หัวข้อที่สอนคือ 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 ในการแบ่งสไลด์ไปเรื่อย ๆ ขั้นต่อไปคงจะมาดูขั้นตอนการปรับขนาดอักษรภายในให้ใหญ่ขึ้นอีกหน่อย เพราะด้วยปัจจุบันค่อนข้างเล็กมาก

Blog Tags