Hack RC เพื่อเพิ่ม Level

ลองดูการ Hack Restaurant City เพื่อเพิ่ม level กันบ้างครับ ตอนนี้สูงสุดได้ถึง level 32

Hack RC For RC Tool 5.2

ออกมาใหม่แล้วครับสำหรับ Restaurant City Tool version 5.2 เพื่อแก้ไขฟังก์ชั่นเช่น เพิ่มพลังพนักงาน

Hack RC For RC Tool 5.1

ลอง Hack Restaurant City ใน Facebook ดูครับ เพื่ออะไรนะหรอ ก็เช่นเพิ่ม level พนักงานไม่เหนื่อย (พนังงานเพิ่มขึ้นแทนที่จะลดลง) พนักงานเสิร์ฟได้เร็ว

วันพฤหัสบดีที่ 23 กรกฎาคม พ.ศ. 2552

เปลี่ยน Theme ให้กับ OLAT ตอนที่ 1

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 15:18 0 ความคิดเห็น
อยากออกแบบ theme ให้กับ OLAT บ้างไหมครับ มาลองดูวิธีทำกันดีกว่า

สร้าง Theme ใหม่
  1. copy โฟลเดอร์ theme เดิมที่มีอยู่แล้วเช่น copy โฟลเดอร์ example จาก olat3\webapp\static\themes มาตั้งชื่อเป็น theme ชื่อ imi (ขอใช้ชื่อ imi แทนชื่อ theme ที่สร้างใหม่)
  2. เลือก theme ที่เราได้สร้างใหม่ โดย login ด้วย administrator แล้วไปที่ Administration > System Configuration > Layout > imi
เริ่มการการแก้ไข Theme
OLAT theme ใข้เทคนิคของ YAML framework มาช่วยจัด layout ทั้งหมด จึงเป็นจำเป็นที่ต้องเข้าใจพื้นฐานของ YAML กันก่อน โดย layout ของ YAML แบ่งออกตามรูปนี้


  • .page_margins และ .page กำหนดความสูงและกว้างของ loyout
  • #header กำหนด header ของ layout ซึ่งประกอบไปด้วย logo, #topnav( link ต่างๆ ที่อยู่มุมขวาของ header)
  • #nav กำหนดเมนูหลัก
  • #main กำหนดเนื้อหาหลักที่ประกอบไปด้วย #col1 & #col1_content - เมนูย่อยด้านขวา, #col2 & #col2_content - เมนูย่อยด้านซ้าย, #col3 & #col3_content - เนื้อหาตรงกลาง, #ie_clearing - จบเนื้อหา
  • #footer กำหนด footer
การใช้งาน YAML กับ OLAT นั้น OLAT ได้เพิ่ม prefix "b_" ในส่วนที่ OLAT ทำการเปลี่ยนแปลงเพื่อกันความสับสนใน css ของ YAML

การเปลี่ยน theme นั่นถูกแบ่งอยู่ในไฟล์ css หลายไฟล์ด้วยกันตามการใช้งานต่อไปนี้

แก้ไข Theme ด้วย olat3\webapp\static\themes\imi\all\yaml_basemod.css
ไฟล์ yaml_basedmod.css เป็น css ที่กำหนด layout เบื้องต้น และทำหน้าที่ overide css ของ YAML framework ในไฟล์นี้จะเป็นการจัด page background, page width/height, elements:top nav - nav (ใช้เทคนิคแบบ sliding door, main แบบ col1-col2-col3 และ footer

PAGE MARGINS AND PAGE

  • body เปลี่ยน body background
layout: width, background, borders
  • #b_page_margins เปลี่ยน page layout margin
  • #b_page เปลี่ยน headder background
HEADER
  • #b_header ปรับความกว้างและสูงของ header
  • #b_logo เปลี่ยน logo บน header
TOP NAV - เมนูบน header
  • #b_topnav ปรับขนาด font ของ navigation บนสุด
  • #b_topnav li a เปลี่ยนสี font ของ navigation บนสุด
  • #b_topnav li a:focus, #b_topnav li a:hover เปลี่ยนสี font ของ navigation บนสุดเมื่อ focus หรือ mouse over
NAV - เมนูหลัก
  • #b_nav_main กำหนด ระยะห่าง (margin) ระหว่าง เมนูหลัก กับ header
  • #b_nav_main li กำหนดพื้นหลังเมนูฝั่งซ้าย
  • #b_nav_main a, #b_nav_main strong กำหนดพื้นหลังเมนูฝั่งขวา
  • #b_nav_main li.o_site_home กำหนดระยะห่างระหว่างเมนุจากขอบด้านซ้าย
  • #b_nav_main > ul a, #b_nav_main > ul strong กำหนดความกว้างของเมนู
  • #b_nav_main li.b_nav_active กำหนดพื้นหลังเมนูที่กำลัง ฝั่งขวา
  • #b_nav_main li.b_nav_active a, #b_nav_main li.b_nav_active strong กำหนดพื้นหลังเมนูที่กำลัง ฝั่งซ้าย
Main - เนื้อหา
  • #b_main กำหนดพื้นหลังของเนื้อหา (ยกเว้นหน้า home)
Main - เนื้อหา
  • #b_main กำหนดพื้นหลังของ footer

วันพุธที่ 22 กรกฎาคม พ.ศ. 2552

เปลี่ยน OLAT ให้เป็นภาษาไทย

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 18:21 0 ความคิดเห็น
มาถึงการปรับเปลี่ยน OLAT เพิ่มเติมกันอีกครับ คราวนี้ขอแนะนำเรื่องการเปลี่ยนภาษาที่แสดงใน OLAT โดยปกติแล้วเมื่อติดตั้งเสร็จเราสามารถเลือกภาษาที่มีให้ใช้เช่น อังกฤษ เยอรมัน อิตาลี และอื่นๆ แต่....ไม่มีไทยครับ (ตอนนี้ผมกำลังติดต่อ OLAT เพื่อขอทำหน้าที่แปลงภาษาไทยอย่างเป็นทางการให้)

เมื่อไม่มีเราก็ต้องแปลภาษาครับ โดยเราสามารถแปลเป็นภาษาใดๆก็ได้ หรือเปลียนข้อความที่มีอยู่แล้วตามต้องการได้เลย เนื่องจาก OLAT สนับสนุน UTF-8 ทำให้สามารถใช้ภาษาอะไรก็ได้

สร้างภาษาไทยให้ OLAT รู้จัก
  1. ทำการ check out olat3_i18n,olatcore_i18n (ดูวิธีการ check out olat project ได้ที่นี้)
  2. แก้ไข i18n.application.src.dir และ i18n.brasato.src.dir ในไฟล์ build.properties ให้ชี้ไปยัง path ของ project ที่ได้ check out มา เช่น

    i18n.application.src.dir = D:/Jboss/workspace/olat3_i18n/src/main/java/
    i18n.brasato.src.dir = D:/Jboss/workspace/olatcore_i18n/src/main/java/
  3. แก้ไข is.translation.server ในไฟล์ build.properties ให้เป็น true เช่น

    is.translation.server=true
  4. แก้ไข fallbackLanguage ในไฟล์ webapp/WEB-INF/olatconfig.xml.in ให้เป็น en เพื่อให้ภาษาที่จะสร้างขึ้นใหม่ใช้ภาษาอังกฤษเป็นภาษาตั้งต้น
  5. ลบไฟล์ olatcore_i18n_all-SNAPSHOT.jar, olat3_i18n_all-SNAPSHOT.jar ที่อยู่ใน olat3\webapp\WEB-INF\lib ออก
  6. ใช้คำสั่ง ant config-all และ restart tomcat ใหม่
  7. login เข้า OLAT และไปกดที่ปุ่ม Generate New Language ที่ Administration > System Configuration > Languages > Languages Administration
จากนั้นก็ใส่ข้อมูลของภาษาที่ต้องการสร้างใหม่ แล้วกดปุ่ม Generate New Language เช่น ภาษาไทยใส่ข้อมูลดังนี้
ใส่คำแปลให้กับภาษาไทย
  1. login เข้า OLAT และไปกดที่ปุ่ม Start ที่ Administration > Translation Tool > Translation Tool
  2. เลือกแปลเป็นภาษาไทยและกด Translate ตามรูป
  3. ใส่คำแปลได้เลยครับ แล้วก็ save and next ไปเรื่อยๆ มีทั้งหมด 7 พันกว่าคำนะครับ
ใส่ icon ธงชาติไทย
หลังจากเพิ่ิมภาษาไทยแล้วต้องทำการใส่ icon ธงชาติหน้าภาษาไทย 
  1. ไปที่ไฟล์ webapp/static/themes/default/all/brasato.css
  2. เพิ่ม .b_flag_th {background-image: url(../images/flags/th.png)}  บรรทัดล่างสุด
ไฟล์ที่ไม่ได้รวมอยู่ใน Translation Tool
หลังจากแปลภาษาใน Translation Tool เสร็จแล้วยังเหลือไฟล์ที่ต้องแปลอีกนิดหน่อยครับ โดยเปลี่ยนไฟล์ด้านล่างนี้ เป็นภาษาที่เราต้องการได้เลย เช่น ภาษาไทยเปลียนเป็น results2html_th.xsl
  1. olat3/webapp/WEB-INF/src/org/olat/ims/resources/xsl/results2html_*.xsl สำหรับแสดงผลทดสอบ QTI
  2. olat3/webapp/static/disclaimer/disclaimer_*.html สำหรับอธิบายการลงทะเบียน
  3. olat3/webapp/WEB-INF/src/org/olat/core/gui/components/form/_static/js/jscalendar/lang/calendar-*.js สำหรับหน้า popup ปฎิทิน
  4. olat3/webapp/help/help-course_*.zip สำหรับหน้าช่วยเหลือ (ถ้าเพิ่ม help ใหม่ต้องเพิ่มข้อมูลให้ตรงกับ olat_config.xml.in ด้วย และสั่ง ant config-all)

วันอังคารที่ 14 กรกฎาคม พ.ศ. 2552

การปรับแต่ง OLAT แบบละเอียด

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 13:53 0 ความคิดเห็น
การปรับแต่งข้อมูลของ OLAT สามารถทำได้โดยผ่าน config files ที่แบ่งตามหน้าที่การทำงานดังนี้

Build.properties
ไฟล์ config หลักที่ต้องทำการปรับแต่งก่อนการติดตั้งโปรแกรม โดยเมื่อใช้คำสั่ง ant config-all ไฟล์นี้จะถูก copy ไปที่ webapp/WEB-INF/src/serviceconfig ดูตัวอย่างการแก้ไขไฟล์ที่นี้

webapp/WEB-INF/olatconfig.xml.in
ไฟล์ config สำหรับปรับแต่งโปรแกรมที่อยู่นอกเหนือจาก build.properties โดยเมื่อแก้ไขเสร็จต้องใช้คำสั่ง ant config-all การปรับแต่งแบบออกเป็นโมดูลย่อยดังนี้
  1. module classname="org.olat.core.util.i18n.I18nModule"
    - กำหนดจำนวนภาษาที่ให้เลือกใช้ ที่ enabledLanguages เช่น en,de,fr,it,es
    - กำหนดภาษาเมื่อมีการ fallback ที่ fallbackLanguage เช่น en
    - กำหนดภาษาเมื่อมีการแปลงภาษาที่ transToolReferenceLanguages เช่น en
  2. module classname="org.olat.core.commons.contextHelp.ContextHelpModule"
    - เปิดหรือปิดระบบคู่มือ context help ช่วยเหลือการใช้โปรแกรมที่ contextHelpEnabled เช่น true,false
    - กำหนดให้มีการใช้ rating ใน context help หรือไม่ ที่ ratingEnabled เช่น true,false
  3. module classname="org.olat.basesecurity.BaseSecurityModule"
  4. - กำหนดสิทธิสำหรับ user ที่อยู่ในกลุ่ม userManger (ไม่เกี่ยวกับ System Administrator ที่มีสิทธิทุกอย่าง) ที่ canCreateUser,canDeleteUser,.... เช่น true,false
  5. module classname="org.olat.admin.AdminModule"
  6. - กำหนดจำนวน user session ที่ maxNumberOfSessions เช่น -1(admin login ได้เท่านั้น) 0(ไม่จำกัดจนกว่า ram จะเต็ม) 1..m(ตามจำนวนที่ต้องการ)
  7. module classname="org.olat.user.UserModule"
    - กำหนดข้อมูล administrator ที่ defaultUsers เช่น username,password
    - กำหนดรายชื่อของ test user ที่ testUsers (ถ้าไม่ต้องการให้สร้าง test user ให้กำหนด user.generateTestUsers=false ที่ build.properties
  8. module classname="org.olat.course.CourseModule"
    - เปิดหรือปิดการ log การใช้ course ที่ enableCourseLogging เช่น true,false
    - เปิดหรือปิดระบบ chat ใน course ที่ enableCourseChat เช่น true,false
    - เปิดหรือปิดการ log ของ admin, user, คนนอกที่ไม่ใช้ user ที่ LogVisibilityForCourseAuthor เช่น AdminLog = INVISBLE, VISIBLE
    - กำหนดให้มีการ deploy course โดยตรงที่ DeployCourseExports เช่น true,false
    - กำหนดบทเรียนที่ต้องการให้ deploy ที่ CourseExportFile เช่น examples/Course_template_big.zip
    - กำหนดบทเรียนที่เป็น help ที่ helpCourseFile เช่น help/OLAT Hilfe.zip
webapp/WEB-INF/olat_extensions.xml
  1. bean id="olatsites"
    - กำหนดเมนูหลัก (อยู่ด้านบน) ที่ต้องการแสดงหรือซ่อน โดย comment เมนูที่ต้องการซ่อนที่ property name="siteDefList" ออก เช่น ต้องการซ่อนเมนู Group Adminsitrator
  2. bean id="bbfactory"
    - กำหนดเมนูสำหรับ Course (อยู่ด้านขวา) ที่ต้องการแสดงหรือซ่อน โดย comment เมนูที่ต้องการซ่อนที่ property name="nodeConfigurationList" ออก เช่น ต้องการซ่อนเมนู Wiki
webapp/WEB-INF/olat_portals.xml.in
ไฟล์ config สำหรับปรับแต่ง module ที่แสดงในหน้า protal ของ user และ guestโดยเมื่อแก้ไขเสร็จต้องใช้คำสั่ง ant config-all การปรับแต่งแบบออกเป็นโมดูลย่อยดังนี้
  1. bean id="portalfactory"
    - กำหนด module สำหรับ portal (อยู่หน้า home) ที่ต้องการแสดงหรือซ่อน โดย comment เมนูที่ต้องการซ่อนที่ bean id="homeportal" (สำหรับ user) และ bean id="guestportal" (สำหรับ guest) ออก แล้ว commnet เมนูที่สัมพันธ์่ใน property name="portalColumns" ออกด้วย
webapp/WEB-INF/src/serviceconfig/org/olat/_spring/olat_userconfig.xml
ไฟล์ config สำหรับปรับแต่ง field ข้อมูลของ user และ guest รวมถึงหน้าค้นหา และแสดงรายการผู้ใช้ โดยเมื่อแก้ไขเสร็จต้องใช้คำสั่ง ant config-all และ ant copy-resource การปรับแต่งแบบออกเป็นโมดูลย่อยดังนี้
  1. bean id="org.olat.user.UserPropertiesConfig" > property name="userPropertyHandlers" เพื่อแสดง user properties ทั้งหมดที่สามารถกำหนดได้
  2. bean id="org.olat.user.UserPropertiesConfig" > property name="userPropertyUsageContexts"
    - กำหนดข้อมูลที่ต้องการให้แสดงหรือซ่อนในหน้า search ที่ entry key="org.olat.admin.user.UsermanagerUserSearchForm" เช่นซ่อน country โดย comment ที่ ref bean="userPropertyCountry ออก
    - กำหนดข้อมูลที่ต้องการให้แสดงหรือซ่อนในหน้าแสดงข้อมูลที่ entry key="org.olat.user.ProfileForm" เช่นซ่อน country โดย comment ที่ ref bean="userPropertyCountry ออก
    - กำหนดข้อมูลที่ต้องการให้แสดงหรือซ่อนในหน้าสมัครสมาชิกที่ entry key="org.olat.admin.user.NewUserForm2"
    - และสามารถกำหนดข้อมูลใน entry อื่นๆได้อีก (ไว้ค่อยทยอยเพิ่มให้นะครับ)
webapp/WEB-INF/src/serviceconfig/org/olat/_spring/olattextconfig.xml
ไฟล์ config สำหรับปรับแต่ง layout ในส่วนของ head, footer, top navigation โดยเมื่อแก้ไขเสร็จต้องใช้คำสั่ง ant config-all และ ant copy-resource การปรับแต่งแบบออกเป็นโมดูลย่อยดังนี้
  1. กำหนดให้เปลี่ยน logo บน header ที่ bean id="fullWebApp.HeaderControllerCreator" โดย comment ของเดิมออกแล้วเพิ่ม
    property name="linkURI" value="url เมื่อคลิกที่ logo" />
    property name="imgURI" value="url ของ logo" />
    property name="imgAltText" value="alt ของ logo" />

วันศุกร์ที่ 10 กรกฎาคม พ.ศ. 2552

การติดตั้งและปรับแต่ง OLAT โดยใช้ Eclipse

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 10:19 0 ความคิดเห็น
จากครั้งที่แล้วเราได้ลองทำการติดตั้งและปรับแต่ง olat แบบไม่ใช้ tool กันมาแล้ว คราวนี้ลองมาทำแบบใช้ tool ก็คือ Eclipse กันดูบ้าง

Software and Configuration
เริ่มจากต้องทำการติดตั้งโปรแกรมดังต่อไปนี้ก่อน
  1. Java SDK 1.5 ขึ้นไป http://java.sun.com
  2. Eclipse 3.2 ขึ้นไป htttp://www.eclipse.org
  3. MySQL 5.0 http://www.mysql.org
  4. Tomcat 5.0 ขึ้นไป โดยเลือกติดตั้งแบบ windows service installer http://tomcat.apache.org
หลังจากติดตั้ง Eclipse เสร็จก็ทำการ Config Eclipse ต่อเลยครับ
  1. ติดตั้ง Web Tools Platform (WTP) โดยไปที่ Help > Software Updates > Find and Install > Add Sites แล้ว พิมพ์ http://download.eclipse.org/webtools/updates จากนั้นเลือก Web Tools Platform (WTP)
  2. ติดตั้ง Apache Tomcat โดยไปที่ Window > Preferences > Server > Runtime Environments > Add > Apache Tomcat V5.0 หรือ 6.0 (ตามที่เราติดตั้ง)
  3. เพิ่ม TOMCAT_HOME classpath โดยไปที่ Window > Preferences > Java > Build Path > Classpath Variables > New > เพิ่ม path ไปยัง directory ที่ติดตั้ง Tomcat
OLAT source code
หลังจากติดตั้ง software ที่ต้องการเรียบร้อยแล้วก็มาถึงการ download source code จาก olat server จาก cvs กันบ้าง โดยการใช้ Eclipse
  1. เปิดหน้า CVS Repository Exploring จาก Window > Open Perspective > Other > New Repository Location
  2. กรอกรายละเอียดดังนี้
    host: cvs.lot.org
    repository path: /usr/local/cvs
    user: anonymous
    password: anonymous
    connection type: pserver
    use default port
    validate connectoin on finish
    เลือก save password
  3. กด Finish แล้วน่าจะทำการ connect ไปที่ server ได้
  4. จากนั้นเลือก HEAD > olat3 แล้วคลิกขวาเลือก Check Out เป็นอันเสร็จก็รอครับ เพราะอาจใช้เวลาในการ download นานสักหน่อย
Setup OLAT Database
มาถึง database ก็เกือบเสร็จแล้วครับครับ ทำการสร้างได้เลย
  1. สร้าง database ชื่อ Olat
  2. กำหนดผู้ใช้ database เป็น user ชื่อ olat (password ตามต้องการ)
Configre OLAT
พอติดตั้งทุกอย่างครบก็ทำการปรับค่าเริ่มต้นของ OLAT ให้เข้ากับ environment ของเครื่องเราได้แล้วครับ
  1. สร้างโฟลเดอร์ olatdata ที่ workspace ของ Eclipse (เอาไว้ที่เดียวกับ olat3 ที่เราได้ทำการ checkout มาแล้วจะได้หาง่ายดี) โดยเอาไว้อ้างถึง path ของ userdata.dir paremeter
  2. ไปที่โฟลเดอร์ olat3 แล้ว copy build.properties.default เป็น build.properties เพื่อใช้ในการปรับแต่งค่าเริ่มต้นของ OLAT เนื่องจาก ANT build.xml จะมาอ่านข้อมูลในนี้ โดยปรับแต่ข้อมูลตามนี้ให้เข้ากับ enviroment ของเราได้เลย (แนะนำว่า path ของ window ควรใช้ "/" แทน "\"

    base.dir=/usr/local/opt/olat/olat3
    userdata.dir=/usr/local/opt/olat/olatdata
    tomcat.home=/usr/local/opt/tomcat5
    server.domainname=localhost
    server.port=8080
    adminemail=yourname@yourdomain.com
    supportemail=yourname@yourdomain.com
    smtp.host=smtp.yourdomain.com
    db.pass=mypassword
    brasato.debug=true
    localization.cache=false
    user.generateTestUsers=true
    log.rootCategory = INFO, syslog, A1

  3. คลิกขวาที่ build.xml แล้วเลือก Run As > Ant Build
  4. จากนั้นติ๊กที่ Sort targets และ Hide internal targets
  5. ต่อด้วยติ๊กที่ cofig-all, dbsetup และ build (ต้องกด Order ให้เรียงคำสั่งตามนี้ด้วยนะครับ เพราะ ant จะทำการ config ต่อด้วยสร้าง database และ build ครับ)
  6. กด Run ได้เลย
Run OLAT
มาถึงสุดท้ายจนได้ครับ พร้อมที่จะ Run OLAT ได้แล้ว :-)
  1. copy server.xml จาก olat3/conf/server.xml ไปที่ Tomcat/conf
  2. เปิด Eclipse แล้วไปที่ Window > Show View > Other > Server
  3. คลิกขวา Tomcat Server แล้ว Start
  4. เปิด browser ไปที่ http://localhost:8080/olat ได้เลยครับ

วันพฤหัสบดีที่ 25 มิถุนายน พ.ศ. 2552

การปรับแต่ง OLAT เบื้องต้น

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 11:44 0 ความคิดเห็น
การปรับแต่ง OLAT ทำได้โดยแก้ไขที่ไฟล์ build.properties แล้วใช้คำสั่ง ant config-all
ขออธิบายโดยแยกเป็นแต่ละหมวดนะครับ

ข้อมูลทั่วไป
base.dir = path ที่ติดตั้ง OLAT
userdata.dir = path ที่ติดตั้ง OLAT
archive.dir = path ที่ติดตั้ง OLAT/deleted_archive

tomcat.home = path ที่ติดตั้ง tomcat
server.port = port ของ tomcat
server.contextpath = context path ที่ต้องการเรียกใช้ OLAT เช่น /myolat

defaultlang = en
defaultcharset = UTF-8

DATABASE
db.dbms = hibernate.mysql
db.host.name = localhost
db.host.port = 3306
db.name = ชื่อ database
db.user = olat
db.pass = password ของ dbuser
db.jdbc.url = jdbc:mysql://${db.host}/${db.name}?useOldUTF8Behavior=true&useUnicode=true&characterEncoding=UTF-8

LDAP
ldap.enable = true
ldap.ldapUrl = url ของ ldap server เช่น ldap://localhost:10389
ldap.ldapSystemDN = dn ของ admin เช่น uid=admin,ou=system
ldap.ldapSystemPW= password ของ admin

olatprovider.enable = true
default.auth.provider = LDAP

#mapping user attributes หลัก
ldap.attributename.useridentifyer=uid
ldap.attributename.email=mail
ldap.attributename.firstName=givenName
ldap.attributename.lastName=sn

การปรับแต่งข้อมูล mapping เพิ่มเติมจาก user attributes หลัก ทำได้ที่ WEB-INF\src\serviceconfig\org\olat\ldap\_spring\olatextconfig.xml เช่น การเพิ่มข้อมูล institutionalName โดยเพิ่ม entry key="'businessCategory'" value="'institutionalName'" ลงใน property ของ name="userAttributeMapper"

การติดตั้ง OLAT

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 10:58 0 ความคิดเห็น
ขอคุยเกี่ยวกับเรื่อง e-Learning บ้างนะครับ หลังจากเล่าเกี่ยวกับเรื่อง 3D-Game และ LDAP มาบ้างแล้ว
เริ่มจากการติดตั้งโปรแกรมเกี่ยวกับ LMS เลยดีกว่าครับ โดยโปรแกรมที่นำมาลองในวันนี้เรียกว่า OLAT (รายละเอียดเกี่ยวกับ e-Learning และ LMS ไว้เล่าใหัฟังต่อไปแล้วกัน) ทำได้โดยขั้นตอนดังนี้ครับ

เริ่มจากติดตั้งโปรแกรมดังต่อไปนี้ก่อน
  • Java SDK 1.5.x หรือใหม่กว่านี้
  • Tomcat 5.x หรือใหม่กว่านี้ (แนะนำ Tomcat 6.x)
  • MySQL โดยติดตั้งแบบ Latin1 (ไม่ต้องใช้ UTF-8 เพราะโปรแกรมจะตั้งค่า MySQL driver ให้แปลงเป็น UTF-8 ทีหลัง เนื่องจากการใช้ MySQL แบบ UTF-8 support ทำให้เกิดปัญหาเกี่ยวกับ performance hit)
  • Ant 1.5 หรือใหม่กว่านี้
จากนั้นตั้งค่า environment variable ตามนี้
  • JAVA_HOME= path ที่ติดตั้ง java
  • CATALINA_HOME = path ที่ติดตั้ง tomcat
  • ANT_HOME = path ที่ติดตั้ง ant
กำหนด path ดังนี้
  • path ที่ติดตั้ง ant
กำหนด database
  • สร้าง database ชื่อ olat
  • กำหนดผู้ใช้ database เป็น user ชื่อ olat (password ตามต้องการ)
เมื่อทำการติดตั้งโปรแกรมที่ต้องครบแล้ว ก็มาถึงในส่่วนของ olat บ้าง
เริ่มจากการ download ตัวติดตั้งได้เลย
  • download olat
  • upzip ไฟล์ไว้ในโฟลเดอร์ที่ต้องการ
ปรับแต่งค่า OLAT
  • ไปที่โฟลเดอร์ของ OLAT ที่ upzip ไว้แล้ว
  • Copy build.properties.default เป็น build.properties
  • set ข้อมูลใน build.properties ให้ตรงกับความต้องการได้เลย
build OLAT
  • ant config-all
  • ant build
setup tomcat
  • ไปที่โฟลเดอร์ของ OLAT\conf
  • Copy server.xml ไปไว้ที่ tomcat เช่น TOMCAT_HOME/conf/server.xml
import ข้อมูลเริ่มต้น
  • ant dbsetup
เริ่มใช้งาน olat
  • start tomcat
  • ไปที่ http://localhost:8080/olat
  • user: administrator
  • password: olat

วันอังคารที่ 16 มิถุนายน พ.ศ. 2552

การติดต่อกับ ApacheDS ด้วย Eclipse

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 10:29 0 ความคิดเห็น
การติดต่อกับ Apache Directory Server หรือ ApacheDS นั้นทำได้หลายแบบครับ ไม่ว่าจะเขียนโปรแกรมติดต่อ หรือใช้ Tool และใช้ทำหลายหน้าที่ครับ โดยยกตัวอย่างการติดต่อสองแบบคือ
  1. เริ่มและหยุดการทำงานของ Server
  2. จัดการข้อมูลใน Server ไม่ว่าจะเป็นเพิ่ม ลบ หรือแก้ไข
โดยตัวอย่างที่จะแสดงให้ดูเป็นการใช้ Eclipse เพื่อทำหน้าที่ทั้งสองอย่าง เริ่มด้วยการติดตั้ง Add-on ของ ApacheDS ลงไปใน Elcipse ตามขั้นตอนดังนี้
  1. เปิด Eclipse แล้วไปที่เมนู Help > Software Updates
  2. กด add site แล้วพิมพ์ http://directory.apache.org/studio/update/1.x
  3. เลือก Apache Directory Studio Apache DS และ Apache Directory Studio LDAP Browser แล้วกด Install
  4. หลังจาก Install ลองดูที่ Perspective จะมีเมนู LDAP ให้ใช้
เมื่อติดตั้งเสร็จลองสั่งให้ ApacheDS ทำการ Start และ Stop ได้จาก Eclipse (ต้องติดตั้ง ApacheDS ก่อนนะครับ ตามตัวอย่างนี้) โดยไปที่แท็บ Servers แล้วกดปุ่ม Start
จากนั้นลองเรียกดูข้อมูลที่อยู่ใน ApacheDS โดยไปที่แท็บ Connections และ config ข้อมูลของ Server โดยเลือก properties ของ localhost (ApacheDS) และกำหนดข้อมูลตามนี้ครับ
  1. Hostname = localhost
  2. Port = 10389
  3. Bind DN or user = uid=admin,ou=system
  4. Bind password = secret
ต่อจากนั้นกดปุ่ม Open Connection เพื่อเชื่อมต่อกับ ApacheDS
สุดท้ายเราก็สามารถเรียกดูและแก้ไขข้อมูลใน ApacheDS ได้

วันจันทร์ที่ 15 มิถุนายน พ.ศ. 2552

การติดตั้ง Apache Directory Server

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 23:49 0 ความคิดเห็น
LDAP Server มีหลายยี้ห้อด้วยกันนะครับ ตามที่มีอยู่ใน wikipedia มีดังนี้ครับ
มีหลายตัวเลยครับ เลือกใช้กันได้เลย แต่จะขอยกตัวอย่าง Apache Directory Server (ApacheDS) เพื่อลองติดตั้งกันตามขั้นตอนง่ายๆ
  1. download โปรแกรมได้ที่นี้เลยครับ apache ds 1.5
  2. หลังจากติดตั้งโปรแกรมแล้วจะเห็น server ใน service ตามรูปด้านล่าง
  3. เรียบร้อยแล้วลอง start ใช้ได้เลยครับ
เท่านี้เองครับ เราก็ได้ LDAP Server ไว้ใช้ในเครื่องเราแล้ว

วันพฤหัสบดีที่ 11 มิถุนายน พ.ศ. 2552

เขียน Java ติดต่อกับ LDAP Server

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 17:17 0 ความคิดเห็น
การเรียกดูข้อมูลที่อยู่ใน LDAP Server ทำได้หลายวีิธีครับ ไม่ว่าจะเป็นด้วยโปรแกรมที่มีให้ใช้อยู่แล้ว หรือเขียนโปรแกรมติดต่อกับ Server เองก็ได้ แต่วันนี้ขอยกตัวอย่าง code ที่ใช้ติดต่อกับ LDAP server ด้วย Java ครับ

เริ่มด้วยดูข้อมูลตัวอย่างที่อยู่ใน Server จากโปรแกรมก่อนครับ


โปรแกรมแบ่งออกเป็น 2 ส่วนคือ ด้านซ้ายที่แสดงโครงสร้างข้อมูล และด้านขวาที่แสดง attribute ของ node ที่กำลังเลือก โดยในรูปแสดง attribute ของ UN : cn=yod,ou=users,ou=system หรือ cn=yod

ตัวอย่าง code ที่เขียนจะเป็นการเชื่อมต่อกับ server และแสดง attribute เหล่านี้ครับ

เริ่มจากส่วน import ก่อนครับ
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
จากนั้นตามด้วย method ครับ
public static void getName() throws NamingException{

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389/");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS, "secret");

InitialDirContext initNamingContext = new InitialDirContext(env);
System.out.println(initNamingContext.getAttributes("cn=yod,ou=users,ou=system"));
}
และเมื่อสั่ง run แล้วจะได้แบบนี้ครับ
{mail=mail: yod1498@yahoo.com, userpassword=userpassword: [B@1ffb8dc, uid=uid: yod, givenname=givenName: nara, objectclass=objectClass: person, organizationalPerson, inetOrgPerson, top, sn=sn: deechuay, cn=cn: yod}
เป็นงัยครับ code สั้นๆ นิดเดียว ทีนี้มาดูต่อครับว่าเราทำอะไรลงไป
  1. env.put(Context.PROVIDER_URL, "ldap://localhost:10389/"); เิริ่มจากการ connect ไปยัง LDAP server โดยกำหนด address และ port ของ server
  2. env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); กำหนด user ที่ต้องการ connect และต้องมีสิทธิดูข้อมูล
  3. env.put(Context.SECURITY_CREDENTIALS, "secret"); ตามด้วย password ของ user
  4. System.out.println(initNamingContext.getAttributes("cn=yod,ou=users,ou=system")); สุดท้ายก็สั่งพิมพ์ attribute ของ node ที่เราต้องการ

วันพุธที่ 10 มิถุนายน พ.ศ. 2552

ความรู้เบื้องต้น LDAP

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 10:14 0 ความคิดเห็น
วันนี้ขอเขียนถึง LDAP สักหน่อยครับ พอดีมี project ที่ต้องใช้พอดี

LDAP นั่นเป็นขื่อย่อมาจาก Lightweight Directory Access Protocol ที่แต่เดิมนั่นถูกออกแบบให้เป็น protocol สำหรับเข้าถึงข้อมูลที่อยู่ใน directory server แต่ต่อมาด้วยแนวคิดของ LDAP และเทคโนโลยีที่ใช้รวมกัน ชื่อของ LDAP จึงได้กลายมาเป็นคำที่ถูกใช้เรียกรวมไปถึง directory architecture ที่ประกอบไปด้วย directory service ถ้าเราจะยกคำยามของ LDAP มาก็จะได้ว่า
LDAP is standardized. The body of LDAP standards, including the network protocols, the directory structure, and the services provided by an LDAP server, are all available in the form of RFCs (Requests For Comments). Throughout this book, I will reference specific LDAP RFCs as authoritative sources of information about LDAP.
Directory คึืออะไร ?
คนส่วนใหญ่มักเปรียบเทียบ directory กับสมุดหน้าโทรศัพท์หรือสมุดหน้าเหลือง ที่เราไว้ใช้ค้นหาข้อมูลบุคคลหรือองค์กร เช่นหาเบอร์โทรศัพท์ของธนาคารกรุงเทพ หรือหาที่อยู่ของร้านขายอุปกรณ์ไฟฟ้า

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

directory server มีหน้าที่อยู่สองอย่างคือการเขียนและการอ่านข้อมูล โดยที่การเขียนนั่นจะเป็นการเพิ่ม แก้ไข และลบข้อมูล และการอ่านคือการสืบค้นข้อมูล แต่เนื่องด้วยหน้าที่หลักเป็นการให้บริการสืบค้นจึงมีกิจกรรมการอ่านมากกว่าเขียน (high-read, low-write) จากเหตุนี้เองเราจึงจะเห็นว่าโปรแกรมที่เกี่ยวกับ LDAP จะเน้นไปในทางค้นหาข้อมูล

directory server ที่อยู่ในรูปแบบของ LDAP จะถูกเรียกว่าเป็นแบบ general-purpose เนื่องจากว่าไม่เพียงแต่ใช้สำหรับเก็บของมูลแบบ single-purpose (เช่น addess book จะเก็บ เบอร์โทร ที่อยู่ อีเมล์) ได้เท่านั้น แต่ยังสามารถเก็บรูปแบบข้อมูลตามที่ต้องการได้ ยกตัวอย่างเช่นพนักงานและสินค้า ที่มีข้อมูลจัดเก็บแตกต่างกัน

โครงสร้างของ directory entry
ขอยกตัวอย่างสมุดโทรศัพท์ที่เอาไว้จัดเก็บรายละเอียดผู้ต้องการติดต่อ ต่อนะครับเพื่ออธิบายถึงเรื่องโครงสร้าง ตามตัวอย่างด้านล่าง
Info Media Innovation
174/597
ม.2 สวนใหญ่ เมือง
นนทบุรี 11000
029696375,025271498
สมุดโทรศัพท์ได้ถูกออกแบบมาเฉพาะ คือมีข้อมูลจำกัดตามกำหนด และมีการเรียงข้อมูลตามแบบเฉพาะ เมื่อผู้ใช้ต้องการหาชื่อใครก็ไล่ดูชื่อที่มักจะถูกเรียงไว้ตามตัวอักษร โดยมีข้อสังเกตดังนี้คือ
  1. ข้อมูลถูกเรียงโดยชื่อบริษัท ดังนั้นการค้นหาด้วยเบอร์โทรศัพท์จึงทำได้ยาก
  2. ข้อมูลไม่ได้มีคำอธิบายไว้ ดังนั้นผู้ใช้ต้องทำการตีความหมายข้อมูลให้อยู่ในรูปแบบด้านล่างนี้
ชื่อ : Info Media Innovation
เลขที่ : 174/597 ม.2
ตำบล : สวนใหญ่
อำเภอ : เมือง
จังหวัด : นนทบุรี
รหัสไปรษณีย์ : 11000
โทร : 029696375
โทร : 025271498
จะเห็นได้ว่าเมื่อมีการแสดงรูปแบบข้อมูลแล้ว จะช่วยทำให้เข้าใจข้อมูลได้มากขึ้น ซึ่งนี้เองก็เป็นวิธีในการกรอกข้อมูล (entry) ของ LDAP

แต่ปัญหาที่เกิดขึ้นอีกอย่างหนึ่งในการกรอกข้อมูลคือการกำหนดให้ข้อมูลต้องมีความแตกต่างกันอย่างน้อย 1 รายการ (ในลักษณะเดียวกันกับ primary key ของฐานข้อมูล) โดยที่ LDAP นั้นเรียกว่า distinguished name (DN)

DN
LDAP แยกความแตกต่างข้อมูลแต่ละรายการโดยกำหนดชื่อที่ต่างกันในแต่ละรายการที่เรียกว่า distinguished name หรือ DN โดยปกติแล้ว DN จะเป็นกลุ่มของข้อมูลที่อยู่ในรายการนั่นเอง โดยผู้ที่กำหนด DN เราเรียกว่า directory designer ตัวอย่าง DN ของสมุดโทรศัพท์ก็จะเป็นแบบนี้ครับ
dn: o=Info Media Innovation, t=สวนใหญ่, a=เมือง, p=นนทบุรี
แค่นี้เองก็จะสามารถระบุข้อมูลแต่ละรายการได้ชัดเจนแล้ว แต่ต้องแน่ใจด้วยว่าข้อมูล DN ในแต่ละรายการต้องไม่ซ้ำกัน

มีข้อแนะนำเกี่ยวกัน DN อีกคือ DN ไม่สนใจว่าจะเป็นตัวพิมพ์เล็กหรือใหญ่

ตัวอย่างการป้อนของมูล LDAP
LDAP entry หรือ record คือ directory unit ที่เก็บข้อมูลของแต่ละรายการใน directory ซึ่งประกอบด้วย DN และ attribute ยกตัวอย่างจากข้อมูลของเรา เมื่อเปลี่ยนให้อยู่ในรูปของ LDAP record จะได้แบบนี้
dn: o=Info Media Innovation, t=สวนใหญ่, a=เมือง, p=นนทบุรี
o : Info Media Innovation
postalAddress : 174/597
t : สวนใหญ่
a : เมือง
p : นนทบุรี
postalCode : 1100
telephoneNumber : 029696375
telephoneNumber : 025271498
objectclass: organization
บรรทัดแรกจะเป็น DN นอกนั้นลงมาเป็น atrribute ที่แบ่งออกเป็น 8 atrribute ดังนี้
  1. Organiztion name (0)
  2. Mailing address (postalAddress)
  3. Tumbon (t)
  4. Ampur (a)
  5. Province (p)
  6. ZIP code (postalCode)
  7. Telephone number (telephoneNumber)
  8. Object class (objectclass) ที่ไว้กำหนดชนิดของรายการนี้
ในแต่ละ attribute สามารถมีชื่อ (attribute name) ได้หลายชื่อ เ่ช่นเราอาจเรียก Organiztion name หรือ 0 ก็ได้ และสามารถมีได้หลายข้อมูล (attribute value) เช่น telephoneNumber มี 2 หมายเลข โดยที่ข้อกำหนดของ attribute ถูกกำหนดอยู่ใน attribute definitions ยกตัวอย่างเช่น
  1. สามารถใช้ Organization name หรือ 0 แทนกันได้ และกำหนดค่าเริ่มต้นเป็น o
  2. amphur เก็บข้อมูลแบบ String
  3. ไม่สนใจตัวพิมพ์เล็กหรือใหญ่เมื่อทำการเปรียบเทียบ attribute value
  4. การเปรียบเทียบสามารถทำได้ทั้งคำ หรือใช้ substring เช่น ส*
  5. ชื่อจังหวัดต้องไม่ยาวเกิน 20 ตัว
  6. ชื่อจังหวัดมีได้ชื่อเดียวในแต่ละรายการ
ข้อมูลทั้งหมดนี้จะูเก็บอยู่ในรูปแบบของ schema definition ที่ directory server ทำการอ่านก่อนเริ่มทำงาน

Object Class Attribute
จากตัวอย่างที่แล้วยังมี attribute ทำหน้าที่พิเศษอีกตัวที่เรายังไม่ได้พูดถึงคือ Objectclass ที่ใช้ในการกำหนดชนิดของรายการ หรือกำหนดว่ารายการต้องมี attribute ใดอยู่บ้างนั่นเอง โดยจากตัวอย่างจะเห็นว่า objectclass เป็น organization ดังนั้นจึงมี attribute ต่างๆตามที่กำหนดอยู่ใน objectclass definition

The Directory Information Tree
จากที่เล่ามาทั้งหมดแล้วนั้นคงจะพอเห็นความแตกต่างระหว่าง LDAP directory กับ สมุดโทรศัพท์กันบางแล้วนะครับ แต่ยังมีส่วนสำคัญที่ทำให้ LDAP นั้นแตกต่างออกไปอีกมาก

ในระบบของสมุดโทรศัพท์นั่นจะเก็บของมูลในแบบของรายการตัวอักษรที่ยาวต่อกันไปเพียงรายการเดียว แต่ในขณะที่ LDAP directory นั่นมีความซับซ้อนกว่านั้นมาก โดยอยู่ในรูปแบบของลำดับขั้น หรือ hierarchy ซึ่งส่วนที่อยู่ในชั้นบนสุดเรียกว่า base entry และส่วนต่อลงมาจะมีโครงสร้างแบบ tree ซึ่งในแต่ละ node ของแต่ละชั้นถูกเรียกว่า entry ที่ประกอบไปด้วย DN และ attribute นั่นเอง

กลุ่มของ entry ในรูปแบบของลำดับขั้นนี้เองที่เรียกกว่า directory information tree หรือเรียกสั้นๆว่า DIT เพื่อให้เข้าใจง่ายขึ้นลองดู organization chart ของบริษัทด้านล่างนี้ครับเริ่มจากชั้นบนสุดจะเป็นบริษัทคือ Info Media Innovation ที่ประกอบไปด้วย 3 แผนกในชั้นที่สอง และในแต่ละแผนกมีพนักงานอยู่ในชั้นที่สาม ตามลำดับ โดย LDAP จะสร้างความสัมพันธ์ในแต่ลำดับขั้นโดยชั้นบนสุดเรียกว่า root entry และถัดลงมาเรียกว่า subordinate entry ซึ่งสามารถมี subordinate entry ของตัวเองได้อีก ในแต่ละ record จะมี DN และ attribute เป็นของตัวเอง ดังแสดงในรูปด้านล่างในรูปแบบของ LDAP directory ดังนี้

การใชังาน LDAP Server

เราได้คุยกันถึงหลักการของ LDAP directory ที่นี้ลองมาดูกันบ้างดีกว่าว่าจะเอา LDAP directory ไปใช้ทำอะไร และ LDAP server มีฟังชั่นอะไรให้ใช้บ้าง

LDAP นั่นถูกสร้างมาเพื่อเป็น digital directory จึงสามารถนำไปใช้ได้หลายอย่างไม่ว่าจะเป็นสมุดโทรศัพท์เหมือนในตัวอย่างที่ยกมา หรือนำไปใช้เป็นฐานข้อมูล หรือเก็บโครงสร้างข้อมูลแบบที่ต้องการ โดยในทางเทคนิคแล้วอาจพูดได้ว่า LDAP ให้บริการการสืบค้นพร้อมการกรองข้อมูลที่ซับซ้อน แสดง entity พร้อมด้วย attribute ที่อยู่ในโครงสร้างที่ซับซ้อน และให้บริการดึงข้อมูลที่ต้องการ

การใช้งานที่พบบ่อยของ LDAP อาจจะเป็นระบบจัดการผู้ใช้แบบศูนย์กลาง โดยระบบจะจัดเก็บข้อมูลผู้ใช้ไม่ว่าจะเป็น username,password,ชื่อจริง และแผนก เมื่อผู้ใช้ต้องการเข้าใช้ระบบอื่นๆบนเครือข่ายเช่น web application, email server ระบบเหล่านั้นก็จะมาตรวจสอบ permission กับ LDAP การบริหารรายชื่อผู้ใ้ช้จึงได้สะดวกที่จุดเดียวคือ LDAP
 

naraphol.blogspot.com Copyright 2009 Reflection Designed by Ipiet Templates Image by Tadpole's Notez