| somchai さんのプロフィールTaiw.NETフォトブログリスト | ヘルプ |
|
Taiw.NET7月25日 ฝันร้ายจากโปรแกรม Part IIประสบการณ์ครั้งนี้ใหญ่หลวงนัก
เริ่มเรื่องจาก วันนี้ช่วงเช้า เราก็ทำการเทสต์โปรแกรมกันไปเรื่อยๆ ไม่ได้คิดอะไรมาก
จนช่วงบ่ายมีเหตุการณ์ที่ต้องไปประชุมที่ สนญ. เลยทำการ Copy Database Backup จาก Production มาเก็บไว้ซะหน่อย ไม่ได้ copy มาเป็นเดือนกว่าๆล่ะ กลับมาจากประชุม โอเค ไฟล์ เรียบร้อยดี ไหนลอง Restore แล้ว Test หน่อยดิ๊ ในใจคิด มือก็ปฏิบัติการทันที EnterpriseManager - > Restore Database
โอเค เรียบร้อยทุกอย่างปรกติสุข ว่าแล้วก็เปิดโปรแกรมหากินขึ้นมา Studio .NET 2003 เปิดปุ๊บ ก็เรียก Recent Project เลย (ทำมันอยู่ Solution เดียวนี่แหละ Y_Y) ทันใดนั้นเอง ก็เกิดสถานการณ์ไม่ปรกติแห่งชาติ เปิดโปรเจคไม่ขึ้น โหลดจาก Web ไม่ผ่าน เอาล่ะโว้ยย เดือดร้อน ว่าแล้ว ก็จัดแจง Test เรียก web กันตรงๆ นั่นๆๆๆ เอากรูแว้ววว เปิดไม่ขึ้น เงียบไปเลย
เท่านั้นก็จะแย่ล่ะ CPU รันเต็ม MAX ว่าแล้วไม่รอช้า ปรึกษาปรมาจารย์อย่างเร่งด่วน เรียก IE ขึ้นมา ใส่ Address 'www.google.co.th' แล้วก็ INETINFO IIS5.1 CPU 50% แล้ว Enter โอ้........................ แม่เจ้า เจอแค่ 20 กว่าเว็บ
เอาวะ อ่านดู พวกก็เล่นเลย บอกว่า DeadLoop บ้าง IWAM มีปัญหาบ้าง เหอๆ จะ DeadLoop ได้ไง เปิดเครื่องมา เรียกแค่ html ไฟล์ มันมี Loop ตรงไหนฟ๊าาา เลยตั้งประเด็น Scope ไปที่ User IWAM แต่เอ.. ไม่ได้ไปเปลี่ยน pass มันนี่หว่า แต่ช่างมัน มันบอกให้เราแก้เราก็แก้ ร่ายยาวไป set COM+ , User policy , เรียก AdminScript adsutil (เออ ดีเหมือนกัน ได้รู้คำสั่งเพิ่มไป 20 กว่าอัน) จัดไป Restart IIS ลุ้น.......................... กรรม 50% เช่นเคย เอาวะ แก้ปัญหาอย่างง่ายก่อนล่ะกัน เลือก Start -> Shutdown -> Restart OK
bootๆๆๆๆๆๆๆ ขึ้นมา ทดสอบปุ๊บ 50% อืม ตายยาก เอาถัดไป remove component IIS ออก แล้วลงใหม่
ผลลัพท์ ต่างมั้ย ไม่ต่างครับ สักพักเอะใจ อ้าว CPU กรู Hyperthead นี่ มันก็ 50% อยู่แล้ว เลยคิดว่าถ้าคนปรกติจะเห็นยังไง ก็เลยปรึกษาอาจารย์อีกรอบ 'INETINFO IIS5.1 CPU 100%' ...... Enter โอ้......................แม่เจ้ารอบที่ 2 ทีนี้มากัน 200
เอาว่ะ สุ่มไปเรื่อย มันก็มีมาหลายสาเหตุเลย 1. worm จัดไป scan full -----------------------------------> nothing 2. server extension update ล่ะ -----------------------> nothing 3. มี service มาเรียก ? เอาออกมันทีละตัวเลย -------------> nothing
4. framework ?? เอามันออกทั้ง2 ver เลย ---------------> nothing
5. anti virus ? โอเค unload ------------------------------> nothing
6. Group Policy รึก็ allow ไป ---------------------------> nothing 7. Paging File เต็ม? เหลือ 6 GB อ่ะ ย้ายก็ได้-----------> nothing 8. คอขวดที่แรม ? มีตั้ง 1 GB ใช้ยังไม่ 500 เลย -----------> nothing 9. IIS Meta data Corrupt เช็คไป------------------------> nothing 10. ลอง Dump IISState ไม่มีน่าสงสัย -------------------> nothing 11 Debug Process ลอง JIT winDG ----------------> nothing etc. และอื่นๆ อีกมากมายนี่แค่ตัวอย่างที่จำได้ (ไม่รู้ไอ้ที่แก้ๆไปแล้วจะมีผลไรรึเปล่าเนี่ย เหอๆ) ตอนที่กำลังจะหมดความตั้งใจ ง่วงแล้วด้วย
เจอเว็ปที่ 167 w3c log ขำเลย จะเกี่ยวไรว๊า ไอ้นี่ที่ทำ server ล่มเพราะ HD เต็มมาล่ะนี่
แต่เรา HD เหลือเป็น 10 GB จะเจ๊งได้ไง เอาวะ ไม่มีไรจะเสียบวกกับ เพิ่งเห็นว่ามี กิน performance เครื่องน่าดู เอาวะ เอาออก ก็ได้ เท่านั้นแหละ ปาติหาน ที่สะกดไม่ถูก และ ไม่ต้องหาซื้อในราคา 80 บาทเหมือนในโฆษณาหลอกผู้ใหญ่ ก็บังเกิด โอ....... จอดำๆๆๆที่ต้องการมันกลับมาแล้ว มันบรรยายไม่ถูกเลย เพราะกำลังจะหยิบแผ่นเพื่อมา Backup เครื่องอยู่แล้วเนี่ย สรุป แก้โดยการไปที่ IIS - > Default Web Site -> Properties -> W3C Logging Enabled เอามันออกแค่เนี้ย
อืมม ทำไปได้ เราด่าระบบที่เรา Support อยู่ทุกวัน ว่าอะไรที่ทำไม่ได้ก็ ฟ้อง Error ออกมานะ อย่าหมกเม็ด
นี่เลย Microsoft ทำไปได้ ทำไมเขียน File ที่ Folder นี้ไม่ได้ไม่รู้ แต่มันสร้างไฟล์ใหม่ได้นี่หว่า (ตอนเลยเที่ยงคืน)
ไม่ได้เกี่ยวกับสิทธิ์ แต่จะเป็นอะไรก็ไม่รู้ล่ะ รู้แต่ว่า มันไม่มี Error ใดๆ บอกเลย ใน Event Log ก็มีแต่ประเด็นที่พาไปตามหากัปตันแจ็ค สแปร์โรว์ เพราะ ออกทะเลไปซะไกลเชียว สุดท้าย ท้ายสุด
จงอย่าไว้ใจโปรแกรมที่คนเขียนขึ้น เพราะแน่นอน มันมี "บั๊ก" 7月12日 ฝันร้ายจากโปรแกรม Part 1เครียดจากงาน มาระบายกับ BLOG ล่ะกัน
เป็นอันที่รู้กันว่าในประเทศไทย โปรแกรมเมอร์เรามักใช้เทคโนโลยีเดียวกันในการเขียนโปรแกรมคือ
CPOP (Copy & Paste Orient Programming) ฮา.. พอถาม ก็จะมีคำตอบว่า "เขาเขียนมาแล้ว จะเสียเวลาเขียนใหม่ทำไม" เอ่อ จริงๆ ก็เครียดนะเนี่ย ความคิดส่วนตัวของผมนะ จะ Copy น่ะให้มีประโยชน์หน่อย อะไรควร Copy อะไรไม่ควร Copy
อย่างแรกเลยสิ่งที่จะ Copy ก็คือ Library ที่ทำมาสำเร็จรูปแล้ว เช่น Graph Component , Printing Component และอื่นๆ อีกมากมาย
ที่เราเรียกใช้แค่ set property มัน แล้วก็เรียก function ได้เลย อันนี้ประเสิรฐครับ เรียกว่า Reuse programming จริงๆ "ห้าม" โดยเด็ดขาดเลย ก็คือไปหาจากเว็ป ว่าถ้าจะเขียนแบบนี้ทำยังไง แล้วก็ Copy มาใช้แต่ Code โดยที่ไม่ได้ทำ Library ใดๆ
แบบที่ผมเห็นกันมากมายในชีวิต คือมีโปรแกรมที่ทำงานคล้ายๆ กัน 2 โปรแกรมที่คนเดียวกันเขียน จะเดาได้ทันทีว่า"มันจะมี Code ซ้ำกัน 2 ชุด" แล้วยิ่งถ้าไป Copy จากชาวบ้านมา บางที Property เซ็ทไม่ครบด้วยซ้ำไป โปรแกรมแรกอาจจะอย่างนึง โปรแกรมที่ 2 อาจจะต้องเซ็ทอีกแบบ หรือบางที ในตัวอย่าง อาจจะมี set ค่าตัวอย่างมา ก็เอามาใช้เลย โดยไม่ได้แก้ หรือหนักที่สุด (ในกรณี .NET) พวกเล่น Copy Code ASP มาใช้ใน .NET
คือขาดความรู้ความเข้าใจโปรแกรมที่ตัวเอง Copy มา ขอแค่ได้ผลลัพท์ก็พอ Y_Y
หรือโปรแกรมบางโปรแกรมที่ไป Copy มา อาจจะเหมาะกับขนาด Data เล็กๆ ก็ไม่ได้คิดเลย เอามาใช้กับระดับ Metadata เลย ที่เจอก็คือ พวก Loop ครับ พวกดึงข้อมูล Cross System คงจะไปดูตัวอย่างมา ประมาณว่า ถ้ารู้ Code นี้ ไปเรียกข้อมูลอีก System นึง เพื่อหา Detail ก็เขียนกันไป สุดท้ายพอใช้จริง ปรากฏว่า ตรงนี้มีข้อมูล 1000 Record !!!!! วนไป 1000 รอบ แต่ละรอบไป ข้าม System ทุกรอบก็ตายแล้วครับ อาจจะต้องปรับ โดยการ ดึงข้อมูลที่เกี่ยวข้องทั้ง 2 System มาเช็คใน Memory มากกว่า เช่นดึงข้อมูล 1000 Record แต่ละ Record ต้องหาชื่อพนักงาน
ก็อาจจะเป็นดึงข้อมูลพนักงานมาทั้งหมด แล้วหาดีกว่านะครับ อาจจะดูว่ามันเยอะ แต่ผมว่ายังไงก็ดีกว่า Access 1000 รอบล่ะครับ to be continue.... 12月14日 SQL Part Iเล่นมาเยอะ เดี๋ยวลืมว่าเจออะไรมาบ้าง แอบมาบันทึกเพื่อใช้งานเองล่ะกัน
ประเด็นแรก เรื่อง Transaction
ลองทายกันดูว่า
BEGIN TRAN
BEGIN TRAN
UPDATE TABLE SET COLUMN1 = VALUE1
COMMIT TRAN
ROLLBACK TRAN
ผลลัพท์คืออะไร ................
รู้กันวันนี้แหละครับ ว่ามัน ROLLBACK ครับ ไม่ว่าซ้อนกันกี่ Transaction ก็ตาม
เรื่องที่ 2 sp_xml_preparedocument อันนี้รับค่า XML data แล้ว Parse เป็น Table ได้เลยครับ
ใช้ในกรณีที่ต้องการส่งค่าทีเดียวแล้วให้มันประมวลผล โดยตัวอย่างส่วนใหญ่จะเป็นพวก MASTER ที่มี DETAL เยอะๆ เช่น
SALEORDER
ORDERITEM1
ORDERITEM2
ORDERITEM3
แทนที่จะ saveorder แล้วเอา number ORDER ออกไปข้างนอก เพื่อ save ITEM อีก 3 record
ก็จะจบภายใน PROCEDURE เดียว น่าสนใจมั้ย???????????
และเรื่องที่ 3 ต่อจากเรื่อง 2 ครับ
คือ XML ที่รับค่ามา ควรจะเป็น nvarchar ครับ เพราะตอนแรกผมใช้ varchar ก็ปรกติดี แต่ใช้ ภาษาไทยปุ๊บ เน่าเลย ไม่รู้จักครับ
เรื่องสุดท้ายของ part นี้ครับ
คือเรื่อง IDENTITY COLUMN ครับ
ท่านที่เคยประสบปัญหาเกี่ยวกับการใช้มันแล้วกลัวเลขกระโดดหรือไม่ (จริงๆ แล้วกระโดดไปก็ไม่มีผลอะไรกับโปรแกรมหรอกครับเชื่อผม)
เอาเป็นว่าถ้ากลัวมันไม่สวยก็ลองดูครับ
SELECT IDENT_CURRENT('TABLENAME') -- SELECT LAST INDEX
DBCC CHECKINDENT('TABLENAME',RESEED,1)
DBCC CHECKINDENT('TABLENAME',RESEED)
SELECT IDENT_CURRENT('TABLENAME') -- SELECT NEW LAST INDEX
เท่านี้มันจะ set ให้ลำดับถัดไปเป็นเลขต่อเนื่องแล้วครับ ไม่กระโดดแล้ว
แต่อาจจะติดเรื่อง permission เอาไว้เจอรายละเอียดแล้วจะเล่าให้ฟังอีกทีครับ
ใครหลงมาอ่าน ก็ลองเอาไปใช้กันดูล่ะกัน สนุกดี
7月27日 ความคาดหวังคำนำ เนื่องจากในโลกปัจจุบัน "ความคาดหวัง" ได้มีบทบาทกับชีวิตคนเราทุกคน และมีแนวโน้มว่าจะส่งผลกระทบกับผู้คนมากขึ้นเรื่อย ๆ ทั้งนี้ การที่จะจัดการกับ "ความคาดหวัง" จึงเป็นสิ่งที่ต้องตระหนัก และเตรียมพร้อมรับมืออยู่เสมอ
นิยาม
ต้นเหตุแห่ง "ความคาดหวัง" เริ่มจากผู้คาดหวัง รู้สึกว่าตนต้องการอะไรบางสิ่งบางอย่าง เพื่อเพิ่มความรู้สึกภาคภูมิใจ และ ฯลฯ ทั้งนี้จากผลการสำรวจแบบสุ่ม (สุ่มตัวเลขมาเอง) สรุปสาเหตุได้โดยแยกเป็นหัวข้อได้ดังนี้
จากสาเหตุที่กล่าวมา จะขอพูดถึงข้อ 3 กับ 4 เท่านั้น เพราะ ส่งผลต่อผู้ถูกคาดหวังค่อนข้างเยอะ....
จัดการกับ "ความคาดหวัง" 1 สำหรับผู้คาดหวัง : วิธีแก้ก็คือ ศึกษาธรรมะบ้างซะนะ จะได้ปลงๆ หรือใช้วิถี เศรษฐกิจพอเพียงซะมั่ง 2 สำหรับผู้ถูกคาดหวัง : ขอจำแนกเป็นหัวข้อนะ มันเยอะ...
สุดท้าย ถ้าคิดว่าไม่ไหวจริง ให้ทำท่านิ่งๆ ไว้ แล้วพูดประโยคสั้นๆ ว่า "ขอโทษครับ ผมอยากทำได้ แต่ผมไม่ใช่ซุปเปอร์แมน" 7月24日 ยินดีต้อนรับสู่โลกของความเงียบเมื่อหลายวันก่อน จู่ๆ ก็นึกคำถามขึ้นในใจ ว่า
" ไม่ได้ใช้ชีวิตเงียบๆ มานานแค่ไหนแล้ว "
จันทร์ - ศุกร์ ทำงาน
เสาร์ อาทิตย์ ไปเที่ยว กิน เมา...
พออยู่บ้านอาทิตย์เดียว รู้สึกว่า ไม่มีอะไรทำ.....
เลยคิดซะเยอะเลย แต่นึกๆไปแล้วก็ดีเหมือนกันนะ
เพราะความเงียบทำให้เราคิดอะไรได้มากขึ้น
อย่างน้อยๆ ก็คิดได้ว่าเราก็เหนื่อยนะ...
ความเงียบ ก็เป็นสิ่งที่ตัวเราเองต้องการอยู่เสมอ
เวลาเหงา... ความเงียบ ก็เป็นสิ่งเดียวที่อยู่กับเรา
เวลาทุกข์... ความเงียบ ก็เป็นเครื่องรักษา
เวลาเครียด... ความเงียบ ก็ทำให้เราสงบ
...... ลองทำดูซิ .......
1. อยู่ในห้อง ไม่ต้องเปิดทีวี วิทยุ คอมพิวเตอร์
2. ปิดโทรศัพท์
3. หาหนังสือที่ชอบ มานั่งอ่าน, เขียนบันทึก หรือไม่ก็วาดรูปเล่น
4. นั่งทบทวนสิ่งที่ได้ทำมาตลอดช่วงนั้น
แล้วจะพบว่า เราต้องการอะไร
ยินดีต้อนรับเพื่อนใหม่ทุกคนนะครับ 2月12日 เป็นอะไรของเราเนี่ยเหมือนจะดี แต่รู้สึกแย่
เหมือนจะสบาย แต่ก็ท้อแท้
จะมีมั้ยสักคน ที่มาช่วยแบ่งบันความรู้สึก (อันมีมากไปของเรา)
อยากให้เป็นคนที่เราเฝ้ารอจัง แต่เขาคงไม่เคยแม้แต่จะคิด
เรายังเป็นได้แค่คนหนึ่งคนไกล
ไม่เคยได้เข้าใกล้เขาได้เลย
จริงแล้วก็ท้อใจมามาก แต่ไม่รู้จริงๆ ว่าทำไมยังต้องคิดแบบนี้อีก
"ถึงแม้ว่าเป็นแค่ความสงสารก็ยอม เป็นรักปลอมๆ ก็ยินดีน้อมรับมา"
ก็คงเป็นประโยคที่โดนใจเรามากที่สุดตอนนี้
เรามันมีค่าแค่นี้แหละ แต่ก็จะเฝ้ามองอยู่ตรงนี้
ไม่ขอเข้าไปเรียกร้องอะไรอีกต่อไป
หวังว่าจะเจอคนที่ใช่ในอีกไม่นานนะ เป็นกำลังใจให้
1月24日 นอกเรื่องนิดนึงเอ้า ชาว ipod video ทั้งหลายเฮกันหน่อย ทำได้แล้วครับ
รูป 3 - 4 คือ แบบใหม่ครับ มีบั๊ก ไ กับ ฟ ที่เหลือไม่มีปัญหาครับ
รูป 1 -2 แบบเก่า เผื่อคนที่ชอบแบบบางๆ |
|
||||||||||
|
|