C# Format Item Syntax

สำหรับคนที่เพิ่งมาเรียนรู้ C# ใหม่ๆ เวลาเห็นคำสั่ง Console.Write หรือ Console.WriteLine (ซึ่งเราใช้มากสำหรับการทดสอบระบบ) อาจจะเห็น string แปลกๆ ที่อยู่ใน { } ซึ่งจะเขียน Format Item Syntax ซึ่งมี syntax ง่ายๆ คือ

{ index[,alignment][:formatString]}

index เป็น ลำดับของตัวแปรที่เป็น parameter ต่อท้ายมา
alignment ถ้าเป็น ค่าบวก คือชิดขวา ค่าลบ ชิดซ้าย
formatString ก็คือเป็น format ที่จะให้แสดงออกมานั้นเอง 

ตัวอย่าง


Console.Write("Name = {0}, hours = {1,1:hh}", myName, DateTime.Now);

{0} ก็จะแสดงเป็นค่าของ myName
{1:hh} จะแสดงเป็นค่า DateTime.Now โดยแสดงเป็น ชั่วโมง ชิดขวา

Reference:
Composite Formatting

Missing item ADO.Net Data Entity Model

สำหรับใครที่จะใช้ Entity Framework แล้วเป็นเหมือนเรา คือพยายามตามหา item ADO.Net Data Entity Model แต่ว่าไม่มี


หาอ่านอยู่หลายที่ก็ยังไม่รู้ว่าวิธีแก้ทำยังไงนะค่ะ ติดตั้ง EntityFramework package จาก NuGet ก็แล้ว ก็ยังไม่ได้

ง่ายมากค่ะ ให้หา Entity Framework Tools มาลงค่ะ (ลิงค์ที่ให้ไว้เป็นของ version 6 ค่ะ) แค่นั้นเอง ไม่ได้เกี่ยวกับการ install Entity Frameowork package เลยแม้แต่น้อย 


Test run C# console application

เพิ่งจะเรียน C# ค่ะ เปิดใช้ Visual Studio ด้วยความงุนงง เพราะที่เคยใช้มันตั้งแต่เมื่อสมัยยังละอ่อน ยังไม่มี .Net Framework นู้นเลย และโปรแกรมแรก Hello World ซึ่งเป็น Console Application เขียนเสร็จ เอาละซิ จะเทสต์ยังไงฟร่ะ พอกด Start มันก็จะทำงานเปิด Console ขึ้นมาอย่างรวดเร็ว และจบไปอย่างรวดเร็ว สรุปว่า Hello World ของตรูสำเร็จม่ะเนี้ยะ มองไม่ทัน "-__-

และแล้วก็ได้มาเจอคำสั่ง หยุดหน้าจอ (ไม่ใช่ล่ะ) คือเป็นคำสั่งที่รอรับแป้นพิมพ์ก่อนด้วย

Console.ReadKey() 

โอ้ว เห็น Hello World แล้ว

บทเรียนต่อไปค่ะ โปรแกรมสำหรับรับ argument เขียนเสร็จ เอ่อ ... แล้วมันจะใส่ argument ยังไงฟร่ะ ตอนเทสต์ หาไปค่ะ หายังไงก็หาไม่เจอ (เพราะมันไม่มี) และได้มาพบกับ Tools Command Prompt บน Visual Studio Tools ค่ะ ซึ่งจะมาพร้อมกับตอนที่เราลง VS เลยค่ะ


แต่อ้าว.. แล้วนู๋จะต้องสั่ง compile บน Command Prompt หรือนี่... จริงๆ ก็ไม่ยากนะค่ะ แต่ แล้วตรูจะมี VS ไว้ทำแป๊ะอาราย แต่ก็นึกขึ้นได้ว่า ใน VS มันมี Build นี่หว่า Build แล้วไปไหนหว่า อันนี้หาไม่ยากค่ะ ไปส่องๆ ใน directory ที่เราเขียนโปรแกรมนะแหละ มันจะมี directory ชื่อ bin ค่ะ ถ้าเราสร้าง project เป็น Console Application พอ build แล้วก็จะได้ .exe อยู่ใน directory นี่แหละค่ะ เช่น ถ้าเราสร้าง solution ชื่อ Example และ project ชื่อ ConsoleTutorial ไว้ ก็จะได้ .exe อยู่ใน

...\Example\ConsoleTutorial\bin

เมื่อรู้ดังนี้แล้วก็ง่ายละค่ะ เราก็ใช้ VS build solution ตามปกติค่ะ แล้วก็เปิด Tools Command Prompt แล้วเปิดไป directory bin เลยค่ะ แล้วก็สั่ง

> ConsoleTutorial.exe 1 2

อ่า... เรียบร้อย เทสต์ได้แล้ว... ไม่น่าเชื่อว่า เรื่องแค่นี้ หามาช้านาน เศร้าใจ สงสัยจะแก่แล้วจริงๆ

การติดตั้ง SQL Server 2012

หนีไปใช้ของฟรีซะนานค่ะ พอกลับมาต้องลง SQL Server 2012 ถึงกับงงเล็กๆ อะไรเยอะแยะฟร่ะเนี้ยะ หลังจาก ลงไปประมาณ 3 รอบ ก็พอจะรู้ว่าจะต้องลงอะไรบ้างค่ะ (จริงๆ คนอื่นเค้าอาจจะเข้าใจแต่ทีแรกอ่ะนะ แต่เผอิญฉลาดน้อยไปหน่อย) ก็เอามาบอกต่อกันนะค่ะ

คือที่จะติดตั้งให้ดูเป็นการติดตั้งเฉพาะตัว SQL Server ที่จำเป็นจริงๆ สำหรับคนที่เก่งแล้ว ต้องมีการลงอะไรพิเศษก็เลือกเอานะค่ะ

เริ่มเลย 

1. พอเปิดแผ่นเข้ามาจะเจอประมาณนี้ (แค่เห็นก็งงแหละ มันอะไรให้เลือกเยอะแยะฟร่ะเนี้ยะ)


ก็เอาเป็นว่าเค้าพัฒนาไปเยอะมากจากตอนที่เราใช้อ่ะนะค่ะ ก็เลือกอันแรกเลยค่ะ (เข้าใจว่าอันอื่นเป็นการลงเพิ่มเติม สำหรับ server)

2. หลังจากนั้นก็เป็นขั้นตอนเล็กๆ น้อยๆ พวกใส่ product key, accept license และสุดท้ายเป็นการเลือกตัวเลือกสำหรับการติดตั้ง ซึ่งสำหรับคนยังไม่รู้จะลงยังไง ขอลงครบๆ ไว้ก่อน ก็เลือกอันสุดท้ายตามรูปก็ได้ค่ะ แต่เราเลือกลงตัวบนสุดค่ะ แล้วก็ไปเลือก Feature อีก





3. จากนั้นมันจะแสดง Feature ที่เราเลือกไว้ ซึ่งตอนนี้เราก็สามารถเอาออกอีกได้ค่ะ ซึ่งตัวที่จำเป็นจริงๆ คือตัวที่เราเน้นไว้ให้ เนื่องจากเป็นตัว engine และตัวโปรแกรมจัดการที่เป็น GUI ค่ะ


4. จากนั้นก็เป็นการใส่ชื่อ Instance ID ซึ่งใน 1 เครื่องเราลงได้หลาย instance ได้ค่ะ (instance ไม่ใช่ database นะค่ะ ใน 1 instance ก็จะสามารถสร้างได้หลาย database) แต่สำหรับคนที่จะลงแค่ instance เดียวก็ใช้ค่า default เลยค่ะ ง่ายดี


แล้วมันก็จะแสดงเนื้อที่ที่จะใช้ในการลงโปรแกรมค่ะ


5. จากนั้นก็เป็นการกำหนดรหัสผ่านสำหรับ sa สำหรับเรานิยมเลือกแบบ Mixed Mode ที่สามารถใช้ได้ทั้ง Windows account และ SQL Server authentication ค่ะ เผื่อไว้ก่อนค่ะ เพราะลงสำหรับ develop อยู่แล้วค่ะ ไม่ได้ลงเป็น server จริง


6. จากนั้นก็ Next ไปเรื่อยๆ ได้เลยค่ะ แล้วก็รอ ร๊อ รอ 

ขอให้โชคดีกันนะค่ะ

WCAT

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

อย่างแรกเลยค่ะ ข้อมูลที่ดีที่สุดสามารถหาได้จาก User Guide ของมันเอง แต่...ไม่รู้ว่าคนอื่นๆ จะเป็นหรือเปล่า คือพอลง WCAT แล้ว User Guide มันควรมากับโปรแกรม แต่ปรากฎว่าไฟล์ที่เราได้จากการติดตั้งมันเป็นไฟล์เจ๊ง เปิดไม่ได้ ซึ่งทีแรกก็ไม่รู้ว่ามันคืออะไร เลยปล่อยมัน และกว่าจะค้นหามาหลากหลายเวป ถึงรู้ว่า User Guide เนี้ยะดีสุดแล้ว แล้วก็กว่าจะหา User Guide มาได้ ก็ไม่ใช่ง่าย (เรียกว่า search หาอีกที หาไม่เจอแล้ว) ก็เอาเป็นว่าจะพยายามหาลิงค์มาให้ท้ายบทความละกันค่ะ

บ่นมาซะนาน เริ่มเลยนะค่ะ ก่อนอื่นจะใช้ WCAT เรามาเข้าใจหลักการทำงานของมันก่อน คือ wcat เป็นโปรแกรมที่เราใช้ทดสอบประสิทธิภาพของระบบเวป ซึ่งเท่าที่ลองใช้ ไม่จำเป็นจะต้องเขียนด้วยภาษาอะไร คือภาษาอะไรก็ได้  web server จะเป็นอะไรก็ได้ (ที่เคยลองใช้กับ Tomcat มันก็ใช้ได้นะค่ะ) ขอให้เราเข้าใจว่าจะต้องเรียกใช้มันยังไงก็พอ ซึ่งการใช้งานจะใช้ใน test environment ซึ่ง test environment ในที่นี้สามารถทำได้ 3 แบบ

  1. Single Machine คือมีเครื่องเดียว ลงทุกอย่าง Web Server, WCAT ซึ่งใช้เป็นทั้ง controller และ client (เดี๋ยวจะค่อยบอกอีกทีว่าอะไรคือ controller อะไรคือ client) และถ้ามี database ก็ลงมันไปด้วย ซึ่งแบบนี้ในเอกสารบอกว่าไม่ดี เพราะว่าเครื่องทำงานหลายอย่าง ทำให้ไม่สามารถทดสอบได้ประสิทธิภาพจริงๆ ของระบบได้ (เป็นแบบที่เราลองเทสต์มานะค่ะ เพราะว่าทำบนเครื่องตัวเองก่อน ยังไม่ได้เอาไปใช้จริง)
  2. Dual Machine แบบ 2 เครื่อง คือมีเครื่องหนึ่งเป็น Web Server อีกเครื่องเป็นทั้ง database server WCAT Controller และ WCAT client แบบนี้ก็จะดีขึ้นมาหน่อย เพราะว่าจะได้เห็นประสิทธิภาพของโปรแกรมจริงๆ แต่ทั้งนี้ก็ต้องระวัง ไม่ให้เครื่องที่สองที่ใช้เป็น WCAT Controller และ Client ใช้ทรัพยากรเต็ม เช่น memory, CPU ซึ่งทำให้การวัดไม่ถูกต้อง
  3. Muliple Machine, Isolated Environment จะเป็นแบบที่ทาง Microsoft แนะนำ คือมีเครื่อง database server แยกไป web server แยกไป และมีเครื่อง WCAT Controller อีก 1 เครื่องและ client อีกแล้วแต่ load ที่เราต้องการจะวัด (ซึ่งในเอกสาร ก็จะมีการบอกถึงวิธีการตั้งค่าสำหรับการสร้าง test environment แบบนี้เอาไว้)
ซึ่งการทำงานของ WCAT ก็คือเราจะติดตั้ง WCAT ไว้ที่ WCAT Controller และทำการติดตั้ง WCAT ที่เครื่อง client และเวลาวัดประสิทธิภาพ เราก็จะ start web แล้วให้ตัว WCAT Controller เป็นตัวควบคุมให้ WCAT Client แต่ละตัวส่งคำสั่ง (เสมือนกับเราเรียกเวป) ไปยัง web server แล้วตัว WCAT Controller ก็จะเป็นตัวเก็บค่าที่วัดได้จาก Client แต่ละตัวมารวบรวมไว้ แล้วคำนวณเป็นค่าทางสถิติ เช่นค่าเฉลี่ย และอื่นๆ 

แต่การติดตั้ง WCAT ที่เครื่อง client และการสั่งให้ client ส่งคำสั่งไปยัง web server สามารถสั่งงานได้ที่ WCAT Controller เพียงเครื่องเดียว จากนี้ก็จะเป็นภาคปฏบัติแล้วค่ะ 

ติดตั้ง WCAT
  1. download โปรแกรมมานะค่ะ ซึ่งเรา download จากที่ Microsoft เลย ตามนี้
  2. install จาก wcat.msi 
  3. run command as administrator
  4. run 'cscript //H:Cscript' (สำหรับคนที่ไม่ได้ run command ด้วย administrator ตรงนี้จะ error ค่ะ)
  5. run 'wcat.wsf -terminate -update -clients {comma separated client machine}' คำสั่งนี้จะทำการติดตั้ง WCAT ที่เครื่อง client ทุกเครื่องที่เรากำหนดค่ะ (ไม่ต้องไปลงเองทีละเครื่องให้เมื่อย)
เช่น ถ้าอย่างเราใช้เครื่องเดียว เอาเครื่องตัวเองเป็น WCAT client ด้วย
> wcat.wsf -terminate -update -clients localhost

แต่ถ้ามี client หลายเครื่องก็ใส่ , แล้วใส่ชื่อเครื่องไปนะค่ะ โดยไม่ต้องมี space (แต่ทั้งนี้เครื่อง client ทุกเครื่องจะต้องมี password ของ administrator เป็น password เดียวกันค่ะ)

หลังจากนั้นเราก็ต้องมีการตั้งค่า scenario file (หรือ client file เพราะเป็นไฟล์ที่ client จะต้องใช้ในการส่ง request ไปค่ะ) และ setting file สำหรับการตั้งค่าให้ลองดูตามเอกสารนะค่ะ และในตัวติดตั้งของ WCAT จะมีตัวอย่างมาให้บ้างแล้วก็แก้เอาจากตรงนั้นก็ได้ค่ะ ถ้ามีเวลาและประสบการณ์มากกว่านี้อาจจะมาเขียนให้อีกทีค่ะ

และสุดท้ายก็ได้เวลาเก็บผลแล้วค่ะ ซึ่งเป็นการสั่งให้ WCAT client สั่งคำสั่งไปยัง web server นะค่ะ โดย
  1. run command as administrator
  2. run 'wcat.wsf -terminate -run -client {comma separated client machine} -t {scenario file} -f {setting file} -s {web server} -x
เช่น
> wcat.wsf -terminate -run -clients localhost -t scripts\home.ubr -f scripts\settings.ubr -s localhost -x

    เสร็จแล้ว Controller ก็จะไปสั่งให้ Client มันส่งคำสั่ง request ไปค่ะ ก็ระดมยิงไปเรื่อยๆ ตามที่เราตั้งค่าไว้ พอมันทำเสร็จเรียบร้อย เราก็จะได้ไฟล์ log.xml มา 1 ไฟล์ ซึ่งเป็นผลที่ได้ค่ะ

    ส่วนวิธีอ่านผล มันจะงงๆ เล็กน้อย เนื่องจากตอนที่เราติดตั้ง WCAT มันจะมีไฟล์ report.xsl มาให้ค่ะ สำหรับใช้คู่กัน แต่...มันดันทำงานไม่ได้กับโปรแกรมที่อ่าน XML อื่นๆ ยกเว้น IE ซึ่งวิธีอ่านก็ค่อนข้างลึกลับอยูค่ะ ตามนี้ค่ะ
    1. เปิด log.xml ด้วย IE ค่ะ  สำหรับหน้าจอเราก็จะเห็นเป็นข้อความยาวต่อกันเป็นพืดเลย อ่านไม่รู้เรื่อง
    2. กด F12 เข้า dev mode ของ IE ค่ะ
    3. เลือก Browse Mode เป็น IEx Compatible เช่นเครื่องเราเป็น IE 10 ก็เลือกเป็น Internet Exploere 10 Compatibility View มันจะถามว่า script unsafe นะ จะเปิดมั้ย ก็ตอบไปเลยค่ะ Yes
    4. แล้วกลับไปดูที่หน้าต่าง IE ใหม่ค่ะ จะได้หน้าจอสวยงาม อ่านรู้เรื่อง ดังนี้

    ก็เป็นการใช้งานเบื้องต้น สำหรับคนที่สนใจก็ลองดูค่ะ อย่างที่บอกถ้ามีเวลาจะเขียนส่วนการตั้งค่าให้นะจ๊ะ

    เพิ่มเติม

    หลังจากผ่านไป 1 ปี เลยถูกเร่งด้วยงานด่วนต้องกลับมาใช้ แล้วพบว่าตอนนี้ IE 11 ไม่สามารถหา compatibility ได้แล้ว ถึงจะมี Emulation ใน Developer Tools แต่ก็ไม่สามารถอ่านรายงาน log.xml ได้ แล้วจึงพบว่าไฟล์ report.xml ใน WCAT ุุ6.3 ที่ใช้อยู่มันผิด ต้องทำการแก้ไขตาม stackoverflow

    1. Cut the code on lines 1151-1157 and paste it on line 1146.
    2. On line 51 add: var i=0;
    Reference:
    WCAT User Guide
    Stress and Load testing on Windows - Using WCAT 6.3 Introduction
    WCAT – Simple Performance Test Tool for your .NET web app

    WCAT report.xsl invalid