• การเติมข้อมูล PDF Fill Form ผ่านโปรแกรมด้วย iTextSharp


    เนื่องจากในช่วงที่ผ่านมาผมได้เข้าร่วมในโครงการที่ต้องพัฒนาโปรแกรมที่มีการกรอกข้อมูลลงฟอร์ม และต้องการให้พิมพ์ข้อมูลต่างๆเป็น PDF จึงได้มีโอกาสศึกษาการใช้ PDF Fill Form และ iText Sharp Library เพื่อนำมาใช้ในการพัฒนา ผมจึงคิดว่าน่าจะเอาสิ่งที่ได้ศึกษามาเล่าสู่กันฟัง เผื่อมีท่านใดสนใจจะนำไปใช้ครับ เริ่มต้นทำสร้าง PDF Fill Form โดยทั่วไปเราจะใช้งาน Pdf File เพื่ออ่านกันเป็นส่วนใหญ่ แต่จริงๆแล้ว PDF นั้นสามารถจะสร้าง form สำหรับใช้กรอกข้อมูลลงบนตัวเอกสารได้ด้วยครับ โดยมีวิธีการดังนี้ 1.นำเอกสารแบบฟอร์ม ซึ่งเป็นไฟล์ word มาทำการสั่ง export  เป็นไฟล์ PDF หรือถ้ามีไฟล์ PDF ที่เป็นแบบฟอร์มอยู่แล้วก็สามารถนำมาใช้ได้เลย โดยทำตามภาพนะครับ 2.นำไฟล์ PDF ที่ได้มา เปิดด้วยโปรแกรม Adobe Acrobat Pro 3.คลิก Tools เพื่อทำการ edit โดยโปรแกรมจะถามว่าต้องการให้โปรแกรมสร้าง field อัตโนมัติให้หรือไม่ ถ้าตอบตกลงโปรแกรมจะสร้าง field

    >> Read More <<

  • การเรียกดูรายการ object ในฐานข้อมูล Oracle


    คำสั่งที่ใช้ในการเรียกดู รายการ object ในฐานข้อมูล Oracle การเรียกดูรายการ object ทั้งหมดในฐานข้อมูล Oracle (เช่น table, view ฯลฯ)  สามารถเรียกดูได้จาก view ที่ชื่อว่า ALL_OBJECTS  ตัวอย่างคำสั่งคือที่ใช้เรียกดูคือ   SELECT * FROM ALL_OBJECTS;   โดยคำสั่งนี้จะแสดงรายการ object ทั้งหมดที่มี   แต่ในการใช้งานส่วนใหญ่ อาจจะต้องการเจาะจงดูแค่บางเงื่อนไข เช่น ต้องการดูรายการ table ทั้งหมด โดยเจาะจงแค่ schema ใด schema  หนึ่งเท่านั้น  ซึ่งสามารถใช้เงื่อนไขจากฟีลด์ต่อไปนี้ คือ OBJECT_TYPE เป็นการเรียกดูตามเงื่อนไขของประเภท object เช่น หากต้องการดูเฉพาะ table จะใช้เงื่อนไขเป็น  WHERE OBJECT_TYPE = ‘TABLE’ OWNER เป็นการเรียกดูเฉพาะเจาะจง schema ใด schema  หนึ่ง เช่น ต้องการเรียกดูข้อมูลจาก schema

    >> Read More <<

  • Unlimited multi level menu in mvc


    สวัสดีค่ะวันนี้เรามาว่ากันเรื่องเมนูกันดีกว่านะคะ คำว่าเมนู ผู้เขียนคิดว่าทุกคนต้องรู้จักแน่นอน เพราะในการพัฒนาแต่ละระบบนั้นส่วนใหญ่จะมีส่วนของงานหลายๆส่วน ทำให้มีการออกแบบหน้าจอการใช้งานหลายหน้าจอเพื่อรองรับการทำงานของระบบนั้น เมื่อส่งมอบระบบ แน่นอน!! ค่ะ ความต้องการของลูกค้าไม่หยุดแค่นั้นแน่นอน เมื่อความต้องการเพิ่ม การทำงานของหน้าจอก็เพิ่ม เมนูก็ต้องเพิ่มตามมาเช่นกัน ทำให้ผู้พัฒนาต้องไปแก้โค้ดในส่วนของเมนูทุกครั้งที่มีการเพิ่มเมนู การจัดหมวดหมูของเมนู หรือต้องการปรับเปลี่ยน path ที่ไปเรียกหน้าจอนั้นๆ แค่คิดก็ดูยุ่งยากต่อการจัดการแล้ว วันนี้ผู้เขียนจึงนำวิธีการออกแบบและพัฒนาในส่วนของเมนูที่ผู้เขียนได้ใช้พัฒนาใน MVC มาเป็นตัวอย่างให้ดูกันนะคะ สำหรับผู้อ่านที่ไม่ได้ใช้ MVC ก็สามารถนำไปปรับเปลี่ยนได้ค่ะ หลังจากพัฒนาแล้วระบบก็จะสามารถ เพิ่มเมนู หรือเปลี่ยน path ของเมนู หรือ จัดการกลุ่มของเมนู ได้โดยไม่ต้อง publish ระบบ ทุกครั้งที่มีการแก้ไข ทำให้ง่ายและไม่เสียเวลาในการจัดการเลยค่ะ เรามาเริ่มกันเลยค่ะ ผู้เขียนขอแบ่งการพัฒนาเป็นสองส่วนนะคะ คือ 1.การพัฒนาในฐานข้อมูล : ในส่วนของการออกแบบฐานข้อมูลผู้อ่านต้องออกแบบให้มีการเก็บ id ของ parent เพื่อระบุให้รู้ว่าเมนูตัวนี้เป็นลูกของเมนูตัวไหน ตัวอย่างการออกแบบฐานข้อมูลของเมนู คอลัมภ์ คำอธิบาย  ParentID Id ของ parent MenuID Id

    >> Read More <<

  • Oracle: retrieve top n records for each group


    วิธีการเขียน Query เพื่อดึงข้อมูลข้อมูลสูงสุดหรือต่ำสุด N ลำดับแรกของแต่ละกลุ่มออกมาจากตาราง สมมติว่าเรามีข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่ซึ่งประกอบด้วย 5 ฟิลด์ข้อมูลดังตัวอย่างข้างล่าง ข้อมูล: ตาราง TEST_NEW_STUDENT เป็นตัวอย่างข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่จำนวน 773 รายการ โจทย์: ต้องการดึงข้อมูลนักศึกษาที่ได้คะแนนภาษาอังกฤษสูงสุดแยกตามคณะจากข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่จำนวน 773 รายการนี้ เริ่มต้นด้วย query ดังนี้ SELECT a.*, ROW_NUMBER () OVER (PARTITION BY fac_id ORDER BY eng_score DESC) AS val_row_number FROM test_new_student a จุดสำคัญของ query ข้างต้นก็คือฟังก์ชัน ROW_NUMBER ซึ่งเป็นฟังก์ชันที่จะให้เลขบรรทัดของผลลัพธ์ออกมาตามการจัดกลุ่มข้อมูลหรือการเรียงลำดับที่เรากำหนดไว้ด้วยคำสั่ง OVER, PARTITION BY และ ORDER BY ที่ตามมา จากตัวอย่างข้างต้นหมายความว่า เรากำลัง Select * จากตาราง

    >> Read More <<

  • Oracle: retrieve top n records from a query


    Top-N queries เป็นวิธีการดึงข้อมูลสูงสุดหรือต่ำสุด N ลำดับแรกออกมาจากตาราง โดยวิธีการดึงข้อมูลแบบ Top-N นั้นมีได้หลายวิธี แต่ในบทความนี้จะนำเสนอวิธีการดึงข้อมูลแบบ Top-N records เพียง 3 วิธีการดังนี้ 1. Inline View and ROWNUM 2. WITH Clause and ROWNUM 3. ROW_NUMBER   สมมติว่าเรามีข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่ซึ่งประกอบด้วย 5 ฟิลด์ข้อมูลดังตัวอย่างข้างล่าง ข้อมูล: ตาราง TEST_NEW_STUDENT เป็นตัวอย่างข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่จำนวน 773 รายการ โจทย์: ต้องการดึงข้อมูลนักศึกษาที่ได้คะแนนภาษาอังกฤษสูงสุด 5 อันดันแรกจากข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่จำนวน 773 รายการนี้   เริ่มต้น Top-N query ตามลำดับเพื่อแก้โจทย์กันค่ะ Inline View and ROWNUM Classic Top-N style query

    >> Read More <<

  • เปลี่ยน ubuntu sources.list ก่อนสร้าง image ด้วย dockerfile


    การใช้งาน docker นั้นเราสามารถใช้ image จาก docker hub หรือเราจะสร้าง image ของเราเอง ซึ่งมีหลายวิธีในการสร้าง image แบบของเราเอง (custom) วิธีหนึ่งคือการใช้ dockerfile อย่างคร่าว ๆ คือ mkdir ~/mydocker cd ~/mydocker touch dockerfile docker built -t test_app:20170713 . docker images ในไฟล์ชื่อ dockerfile นี้จะมีไวยกรณ์ประมาณนี้ # Image tag: test_app:20170713 <– บรรทัดนี้คือ comment FROM ubuntu:16.04 <– บรรทัดนี้คือ ไปเอา image ชื่อ ubuntu:16.04 จาก docker hub RUN apt-get

    >> Read More <<

  • รู้จักฟังก์ชัน Excel ตอนที่ 2 เรื่อง ตระกูลท่าน Count (COUNTIF, COUNTIFS)


    พบกันอีกครั้งนะคะ กับ Excel ตอน ตระกูลท่าน Count ตอนที่ 2 ค่ะ สำหรับตอนที่ 2 นี้จะเป็นการแนะนำการใช้ Function COUNTIF และ COUNTIFS มาเริ่มกันเลยค่ะ COUNTIF เป็น Function ที่ใช้สำหรับนับข้อมูลตามเงื่อนไขที่เราต้องการ 1 เงื่อนไข เช่น ต้องการนับจำนวนคนที่ได้เกรด A : เงื่อนไขคือ “คนที่ได้เกรด A” ต้องการนับจำนวนคนที่ได้คะแนนมากกว่า 75 : เงื่อนไขคือ “คะแนนมากกว่า 75” รูปแบบ Function คือ COUNTIF(range, criteria) range คือ ช่วงข้อมูลที่ต้องการนับจำนวน criteria คือ เงื่อนไขที่ต้องการ ตัวอย่าง จากตัวอย่าง สิ่งที่ต้องการคือ หาจำนวนคนที่ได้เกรด A ดังนั้น range คือ

    >> Read More <<

  • รู้หรือไม่ : บริการโทรศัพท์ภายในมหาวิทยาลัยสงขลานครินทร์


    เกี่ยวกับ บริการโทรศัพท์ภายในมหาวิทยาลัยสงขลานครินทร์ เผื่อท่านใดไม่ทราบ (เป็นการสรุปจาก “คู่มือการใช้งานโทรศัพท์พื้นฐาน”  http://telecom.cc.psu.ac.th/telephone/fn.pdf ) — ที่สรุปไว้นี่เพื่อให้ง่ายต่อการใช้งานอย่างรวดเร็วมากยิ่งขึ้นเท่านั้น และเป็นเฉพาะที่ใช้บ่อยทำนั้น — ติดต่อ Operator : กด 9 โทรซ้ำเบอร์ที่เพิ่มโทรไป : กด *70 รับสายแทนอีกเครื่องนึงที่ดัง : กด *72 ตามด้วยหมายเลขที่ดัง ฝากสายให้อีกเบอร์รับ ทันที : กด *60 ตามด้วยหมายเลขที่จะช่วยรับสายแทน ฝากสายให้อีกเบอร์รับ กรณีสายไม่ว่าง : กด *61 ตามด้วยหมายเลขที่จะช่วยรับสายแทน ฝากสายให้อีกเบอร์รับ กรณีไม่มีคนรับสาย : กด *62 ตามด้วยหมายเลขที่จะช่วยรับสายแทน ฝากสายให้อีกเบอร์รับ กรณีทั้ง สายไม่ว่าง และ ไม่มีคนรับสาย : กด *63 ตามด้วยหมายเลขที่จะช่วยรับสายแทน ยกเลิกการฝากสาย: กด *64

    >> Read More <<

  • รู้จักฟังก์ชัน Excel ตอนที่ 1 เรื่อง ตระกูลท่าน Count


    หลาย ๆ ท่านคงใช้ Excel อยู่ในชีวิตประจำวันไม่มากก็น้อย อาจจะชินตากับ Function Count กันอยู่บ่อย ๆ แต่ Function นี้ ไม่ได้มาเดี่ยว ๆ นะคะ ยังมีญาติ ๆ ในตระกูลอีกเพียบเลย มาดูกันค่ะว่า มีอะไรบ้าง และแต่ละ Function นั้นทำงานกันอย่างไรค่ะ COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS Function ตระกูล Count หลัก ๆ ที่ผู้เขียนใช้งานจะมี 5 Function ข้างต้นนะคะ สำหรับในตอนที่ 1 นี้ ผู้เขียนจะนำเสนอ 3 ฟังก์ชันแรกก่อนก็คือ COUNT, COUNTA และ COUNTBLANK ค่ะ ส่วนอีก 2 Function สามารถติดตามต่อได้ในตอนที่ 2 นะคะ

    >> Read More <<