Eclipse Tip ตอน TODO บันทึกช่วยจำ กับ Warning message เจ้าปัญหา

กลับมา blog สั้นอีกครั้งหลังจากดองไว้นาน… วันนี้เกิดรู้สึกว่าอยากใช้ Eclipse ให้เต็มประสิทธิภาพมากกว่าทุกวันที่ไว้ขึ้น project กับ compile เท่านั้น วันนี้เลยมี  tip เล็กๆ จดไว้กันลืม

TODO บันทึกช่วยจำ หลายครั้งที่เราเขียน code แบบวางโครงสร้างไว้ก่อนแล้วค่อยเขียน code จริงตาม ใน eclipse มี keyword ที่ไว้ช่วยคือคำว่า TODO ตัวอย่างเช่น

แล้วรายการ TODO ที่เราม mark ไว้ก็จะมาโชว์ที่  Markers ดังนี้

Warning message เจ้าปัญหา เวลาเราสร้าง project ขึ้นมาโดย eclipse แล้วเราเพิ่ม lib แบบอ้างอิงไม่ได้ใส่ไว้ใน project มักจะเกิด message คอยตอนว่ามี classpath ที่จะไม่มีเวลาเอาไปลงจริงๆนะหรือบ้างครั้งเราได้ html มาจากเว็บ design แล้ว validate ตามมาตรฐานไม่ผ่าน(แต่ทำงานได้ถูกต้องแล้ว)

ซึ่งเราสามารถปิด message เหล่านี้ได้โดย unchecked ชนิดของ message ที่เราต้องการให้ไม่ต้องแสดงซะ

มันก็จะเหลือเฉพาะ task ที่เราสนใจแล้ว 🙂

จบ

Advertisements

Log4j กับ Event Viewer

ปกติแล้ว JBoss จะ log ด้วย Log4j ซึ่ง Log4j ก็ใจดีทำ NTEventLogAppender.dll ไว้ให้โดยสามารถทำ Log ได้ภายใต้ Application โดยสามารถกำหนด Source ได้

แต่ ! บางครั้ง(คุณที่คุณรู้ใคร) อยากได้มากกว่านั้นคือ “สร้างแยกออกมาให้กรูหน่อยได้ไหม คือก็จะเอาแบบนี้ IE ยังทำได้เลย”

เอาแล้วไง เดือดร้อนขึ้นมาทันที แต่ทุกปัญหามีทางออก โดยเฉพาะทางที่เป็น Open Source !! คุณ Log4j ให้ code ที่ใช้เขียนทำงานกับ Event Viewer มาด้วย ดังนั้นเราจึงมีหลักง่ายๆคือ “เอา Source code NTEventLogAppender.dll มา build ใหม่ด้วยชื่อ Event ตามที่เราต้องการ”

1. Download ตัว Log4j มาก่อน(ตัวอย่างนี้ใช้ log4j-1.2.16)ซึ่งจะได้มาทั้ง jar และ source code

2. Unzip แล้วหา Source code ส่วนของ NTEventLogAppender.dll คือ ntdll แต่.. Code ที่ใช้ทำ .dll คงไม่ใช่ Java ดูแล้วเป็น .cpp ครับ ดังนั้นต่อมาคือเราต้องต้องไปโหลด Compiler มาก่อน

3. ตัวที่เลือกมาคือ MinGW โหลดมาแล้ว Install ด้วย “Next Technology” เลย อ้อ!! อย่าลืมเลือก g++ ด้วย

4. Set PATH ให้ MinGW ให้เรียบร้อย อ้อ อย่าลืม Set ของ Ant ด้วยนะ

5. ลอง Compile ดูว่ารอดไหม ? อ้อ!! อย่าลืมใส่ log4j.jar ใน Class Path โดยอาจจะทำไฟล์ build.bat อย่างนี้

ant build -Dclasses.dir=D:\Java\apache-log4j-1.2.16\apache-log4j-1.2.16\log4j-1.2.16.jar

6. สมมุติว่า รอด ก็ทำการแก้ไขไฟล์ nteventlog.cpp โดยแก้คำว่า “\\Application” เป็นชื่อที่เราต้องการเช่น “\\JBoss Application Server”(เวอร์ชั่นนี้แก้ 3 จุด)

7. Compile อีกที ถ้าไม่ซนไปแก้อย่างอื่นก็น่าจะรอดตามๆกันมา

8. ต่อมาก็เอา .dll สดๆออกจากเตาไปวางในที่เหมาะที่ควร system32 พร้อมอุ่นด้วย

regsvr32 "c:\windows\system32\NTEventLogAppender.dll"

9. ไปแก้ jboss-log4j.xml เพื่อกำหนด Source ที่เราทำ

10. ก็จะได้ Event Viewer ตามใจเราแล้ว สาธุ..

ถ้าได้เริ่มต้นทำเว็บไซต์ในวันนี้(แล้วคุณละ?)

ถ้าได้เริ่มต้นทำเว็บไซต์ในวันนี้(แล้วคุณละ?) แปลจาก If I Had Started Web Design Today (And You?)

15 ปีมาแล้วที่ผมได้เข้ามาสู่แวดวง web design โดย 5 ปีแรกหมดไปกับการเรียนรู้, 7ปีต่อมาเริ่มทำงานให้แก่ลูกค้า และ 3 ปีหลังเน้นไปทำของส่วนตัว

เมื่อมองย้อนกลับไป ผมคิดได้ว่ามีเพื่อนๆทีมงานหลายคนที่เดียว ที่ช่วยให้ผมได้มีโอกาสพัฒนาฝีมือเกี่ยวกับเรื่อง web design/development

บทความนี้จะเน้นหนักไปในส่วน “I wish” ซึ่งหวังว่ามันคงเป็นประโยชน์ผู้ที่สนใจงานด้าน web design

แนวคิดพวกนี้คงไม่ถูกต้องทั้งหมด ความจริงมันอาจจะผิดก็ได้ แต่แนวคิดพวกนี้มันออกมาจากประสบการณ์ตรงของผม ซึ่งก็คงแล้วแต่คุณที่จะเลือกเองว่าเหมาะกับตัวคุณเองหรือเปล่า

จัด PHP มาก่อนเลย

ตอนที่ผมเริ่มงานด้าน web development สุดยอด open source เจ๋งๆอย่างภาษา PHP ยังเป็นคำถามตัวโตๆว่าระหว่าง ASP กับ PHP อันไหนเจ๋งกว่ากัน ด้วยความที่ผมเป็นมนุษย์วินโดส์ประกอบกับมี MS Access อยู่แล้วในเครื่องซึ่งทำให้ไม่ต้องสน MySQL, ใช่ ผมเลือก ASP แป๋ววว พลาดซะแล้วกรู

ASP หยุดพัฒนาตัวเองนับตั้งแต่ปี 2000 ในขณะที่ PHP เข็มแข็งขึ้นเรื่อยๆ มี community, tutorials และอื่นๆอีกมากมาย และวันนี้มันก็พิสูจณ์แล้วว่านี้คือภาษาที่ได้รับความนิยมมากที่สุดภาษานึง เลยทีเดียว

อาจจะมีภาษาเจ๋งๆอย่าง Python, Perl, ASP.NET, Ruby ฯลฯ แต่ภาษา PHP ก็ยังเป็นที่นิยมสำหรับผู้เริ่มต้น ด้วยความง่าย, อุดมไปด้วย function มากมาย และยังสามารถนำไปต่อยอดกับภาษาที่คุณสนใจได้ในภายหลังอีก

มาเต็มกับ JavaScript

JavaScript เป็นที่นิยมมานานแล้ว แต่มันไม่เคยจะฮิตขนาดนี้ และทุกๆวันนี้ก็ยิ่งฮิตจนเรียกว่าขาดไม่ได้ซะแล้ว แต่ก่อนเรานิยมใช้ในการ validation, แสดง alert หรือ popup และอิเละเขะขะอีก 2-3 อย่าง

แต่ทุกวันนี้แทบคิดไม่ออกเลยถ้าจะทำ web application แบบไม่ใช้ Ajaxed, เราสามารถผูกเข้ากับ twitter, Flickr, วาดรูป, สร้างสรรค์ animation และอื่นๆอีกมากมาย

นอกจากนี้มันยังเป็นยาแก้ปวดหัวชั้นดีสำหรับปัญหา browser incompatibilities และในโลกของ HTML 5 จะขับเคลื่อนมันไปได้อีกไกลเลย

ใช้ Framework ซะ

สำหรับผม แต่ก่อนไอ้พวก CodeIgniter, Zend, MooTools หรือ jQuery พวกนี้ฟังดูเหมือนจะต้องมาเรียนรู้ภาษาใหม่ทั้งหมด ทำไมต้องมาสนพวกนี้ด้วยก็กรูใช้แบบธรรมดาก็ทำได้หมดทุกอย่างแล้วนิ

แต่หลังจากได้ลงแรงเขียนเองซัก 2-3 ชม. ก็สำนึกได้ว่ากว่าจะสร้างเสร็จแต่ละอย่างมันช้าและไม่เป็นระเบียบเอาซะเลย

ทำไมไม่ใช้อะไรที่มันสามารถทำงานได้เลยอย่างเรื่องการจัดการรูปภาพ, upload ไฟล์, validate form, ทำให้ Ajax ง่ายขึ้นหรือเขียนได้ดีขึ้นมี framework ดีๆในทุกๆภาษาแค่ลงทุนอ่าน,ลงมือและเข้าใจหลักการของมัน และเลือกซักอันแล้วใช้ให้เทพ!!!

เก็บ(ตัวอย่าง)เล็กผสมน้อย

เก็บตัวอย่าง code ในเวลาที่คุณเขียนพวก contract form, e-mail validation pattern หรืออื่นๆ

ผมเริ่มเก็บตัวอย่างเมื่อ 3 ปีก่อน(จะดีกว่านี้ถ้าเก็บมาก่อน) และมันทำให้ตอนนี้ผมสามารถสร้าง member ship module ได้ภายในเวลาไม่เกิน 15นาที

ทีนี้ในทุกๆโปรเจค จะสามารถประหยัดเวลามากขึ้น, bug น้อยลง และสามารถโม(ดิไฟล์) code ให้ดีกว่าเก่าได้ถ้าต้องการ

เก็บหรือ bookmark resources

เวลาจะเริ่มทำอะไรซักอย่าง ผมมักจะต้องพูดว่า “เห้ย! กรูนึกขึ้นมาได้ว่ามีอะไรเจ๋งทำอันนี้ได้วะ แต่จำ URL ไม่ได้แล้ว”

เชื่อซิ คุณก็เป็นหรือไม่ว่าจะเป็น Icon เจ๋งๆ โปรแกรมหรือ tutorial ดีๆ เก็บมันหรือ bookmark ไว้ดีๆให้เป็นหมวดหมู่ เชื่อซิแจ๋วจริง

เรียนรู้เกี่ยวกับการแต่งรูปบ้าง

ถ้าคุณออกแบบ web ด้วยโปรแกรมแต่งรูปซักอันนึง และมันแด๊กเวลาคุณไปเยอะเพื่อทำให้รูปมันออกมาดี นั้นเป็นเพราะคุณอาจจะไม่รู้ trick บ้างอย่างที่ชาวบ้านเค้ารู้กัน

ใช้ว่าทุกคนจะเก่งเทพเป็น designer ซะหน่อย(ผมก็ไม่ดีนักหรอก) แต่การเรียนรู้ trick ต่างๆเช่น filters, gradients, patterns หรือ effects ก็เพียงพอต่อการสร้างพื้นๆที่ดูน่าประทับใจได้แล้ว

อย่าไปสร้าง CMS เอง

Developer หลายคนไม่ชอบใช้ code ที่มีอยู่แล้ว แต่เลือกที่จะสร้างเองใหม่หมด ด้วยเหตุผลที่ว่า “มันยากที่จะเรียนรู้ระบบชาวบ้านสู้เขียนเองซะดีกว่า”

ผมก็ก็เคยคิด ในระยะเวลาหลายปีที่ผ่านมา ผมสร้าง CMS มาหลายตัว ทั้งแบบเล็กๆ หรือแบบยากหน่อย แบบเฉพาะโปรเจคนั้นๆ หรือสำหรับโปรเจคไหนๆก็ได้

เมื่อมองกับไป ผมพบว่าไม่เห็นจะมีตัวไหนเจ๋งกว่า WordPress, Drupal, ExpressionEngine, Modx, etc.

มีผู้คนมากมายทั้ง designer/developer เก่งๆ เจ๋งๆ ทำ theme และ plugin สำหรับ platform พวกนี้และพวกเค้าก็ทำมันเจ๋งขึ้นทุกๆ เลือกซักอันแล้วทำให้ถึงระดับเทพก็เป็นพอ

เริ่มเขียน Blog
ถึงแม้คุณจะไม่ใช่เทพที่ไหน แต่การเขียนสิ่งที่คุณเข้าใจหรือสนใจแต่ละครั้งก็ช่วยพัฒนาตัวเองไปได้มากโขอยู่

คุณได้แบ่งปันความรู้ คุณต้องทำการบ้านมากขึ้นและดีขึ้น และยังมี comment ต่างๆที่แสดงต่อความคิดของคุณมันคือกระบวนการเรียนรู้ด้วยตัวเอง และการได้แลกเปลี่ยนความรู้เรื่องนั้นๆกับคนอื่น นี้แหละข้อดีข้อใหญ่เลย

ก็ปล่อยไปตามหัวใจ..

ผมมั่นใจว่า web design/developer เกินล้านคนมีโปรเจคเจ๋งๆแว๊บในหัวทุกๆเดือนหรือปี แต่ไม่สามารถมาทำได้เพราะติดที่มันเป็นงานของลูกค้า ผมก็เหมือนกัน 7 ปีที่ทำงานเพื่อลูกค้า ผมตัดสินใจออกมาเริ่มทำงานตามหัวใจ

ผมไม่ได้บอกให้พวกคุณทำตามแน่ เพราะความเสี่ยงที่จะอดอยากสูงและยังต้องอาศัยเวลาที่เหมาะสมด้วย แต่อย่างไรก็ตาม การได้ออกมาทำงานตามที่ตัวเองต้องการมันสาแกใจดีแท้

เหมือนได้อยู่ในที่ที่คุณทำอะไรก็ได้ อย่างน้อยทำขึ้นมาซัก 2-3 เว็บก็ยอดแล้ว มันจะโตขี้นด้วยตัวของมันเอง(ในขณะที่คุณก็ยังทำงานประจำได้) และยังสามารถทำเงินได้ด้วย ซึ่งเป็นทางเลือกที่ดีที่จะออกจากงานประจำ

แล้วคุณละ ถ้าได้เริ่มต้นทำเว็บไซต์ในวันนี้จะเริ่มไงดี?

=====

พยายามแปลให้ตัวเองและรุ่นน้องพระจอมฯปราจีน

จาก: http://www.webresourcesdepot.com/if-i-had-started-web-design-today-and-you/

Cannot resolve the collation conflict ใน SQL Server

Msg 468, Level 16, State 9, Line 3
Cannot resolve the collation conflict 
between "Thai_CI_AI" and "Thai_CI_AS" in the equal to operation

นี้คือ Error หลังจากที่พยายาม Query ข้าม Database ดังนี่

select
    A.*
    ,B.*
from
    DBA.dbo.CUSTOMER as A
    inner join DBB.dbo.CUSTOMER as B 
        on A.CUSTOMER_NAME = B.CUSTOMER_NAME

เหตุที่ทำให้เกิด Error แบบนี้คือ Database A มี Collation แบบ Thai_CI_AI ส่วน Database B ดันนี้มี Collation เป็นแบบ Thai_CI_AS ทำให้เกิดปัญหาตอนพยายาม Query แบบข้าม Database

วิธีแก้ปัญหาคือกำหนด Collation ขณะ Query ซะ โดยกำหนดให้อิงแบบใดซักแบบนึง เช่น

select
    A.*
    ,B.*
from
    DBA.dbo.CUSTOMER as A
    inner join DBB.dbo.CUSTOMER as B 
        on A.CUSTOMER_NAME = B.CUSTOMER_NAME collation Thai_CI_AI

ก็จะสามารถแก้ปัญหา Query ข้าม Database ที่ Collation ต่างกันได้แล้ว

ปล. หลังจากค้นหาข้อมูลเกี่ยวกับ Collation เหมือนจะเจอปัญหาภาษาไทยกันเยอะกว่า เค้าแก้ด้วยการใช้ Collation เป็น Thai_Bin