somchai さんのプロフィールTaiw.NETフォトブログリスト ツール ヘルプ

santithammakhun somchai

職業
このスペースにはミュージック リストがありません。

Taiw.NET

7月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日

ความคาดหวัง

คำนำ

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


นิยาม

ความคาดหวัง - เป็นคำนาม แสดงถึงการที่คน ๆ นึงอยากให้บางสิ่งบางอย่าง เป็นไปตามที่ตนเองอยากให้เป็น

ผู้คาดหวัง - หมายถึงบุคคลที่เป็นคนจัดตั้ง "ความคาดหวัง" ขึ้นมา โดยตั้งใจ หรือไม่ตั้งใจก็ตาม

ผู้ถูกคาดหวัง - หมายถึงบุคคลผู้ถูกโชคชะตากลั่นแกล้ง ให้รับ "ความคาดหวัง" จากคนอื่น


ต้นเหตุแห่ง "ความคาดหวัง"

       เริ่มจากผู้คาดหวัง รู้สึกว่าตนต้องการอะไรบางสิ่งบางอย่าง เพื่อเพิ่มความรู้สึกภาคภูมิใจ และ ฯลฯ ทั้งนี้จากผลการสำรวจแบบสุ่ม (สุ่มตัวเลขมาเอง) สรุปสาเหตุได้โดยแยกเป็นหัวข้อได้ดังนี้

  1. 60%  เพื่อให้ทดแทนสิ่งที่ตนขาด : เป็นประเด็นใหญ่ที่คนมักจะเป็น เช่น เป็นคนขี้ลืม ก็คาดหวัง ว่าจะมีสิ่งที่จะใช้ในการเตือนความจำของตน แต่ไม่ค่อยเดือดร้อนชาวบ้าน เพราะ มักจะเป็นการคาดหวังแบบลอยๆ ได้ก็ดี ไม่ได้ก็ไม่เป็นไร
  2. 20%  เพื่อตอบรับความต้องการบางอย่างในบางเวลา : คือการที่ คาดหวัง ว่าเหตุการณ์นั้น ๆ จะผ่านไปด้วยดีถ้ามี ... มาช่วย หรือ ถ้ามี ... ตอนนี้ก็คงดี สาเหตุนี้เริ่มกระทบชาวบ้านบริเวณรอบข้าง ว่ามีสิ่งที่ ผู้คาดหวัง ต้องการหรือไม่ แต่ยังไม่เป็นประเด็นหลัก เพราะ ผู้ถูกคาดหวังมีจำนวนหลายคน และความคาดหวังกระจายเฉลี่ยไป
  3. 8.5% เพื่อบำบัดทุกข์บำรุงสุข : หัวข้อนี้จะเน้นไปทางระบุเจาะจงผู้ถูกคาดหวังคนใดคนนึงโดยเฉพาะ เช่น หัวหน้าน่าจะเพิ่มเงินเดือนให้เรามั้งน้า.. แฟนเราน่าจะทำแบบนี้มั่งจัง .. ฯลฯ ความคาดหวังประเภทนี้ ความจริงไม่มีก็ไม่ส่งผลให้ชีวิตแย่ลงซักเท่าไหร่ แต่จะส่งผลให้ความรู้สึกต่อผู้ถูกคาดหวัง ถ้าเป็นไปตามที่หวัง คะแนนก็บวกไป ถ้าไม่ ก็ ติดลบไปซะ...
  4. 7.3% เพื่อใช้เป็นขีปนาวุธ : หัวข้อนี้ส่วนใหญ่ผู้คาดหวังไม่ได้เดือดร้อนอะไรนัก ถ้าไม่มีการประกาศศึกจากศัตรู (เพื่อน,คนรู้จัก โดยเฉพาะกลุ่มเม้าท์แตก) เกิดประเด็นขึ้นมา ผู้ถูกคาดหวังจะซวยโดยไม่รู้เนื้อรู้ตัว เพราะผู้คาดหวังจะเดือดมาจากสงคราม แล้วจะทุ่มอารมณ์ไปยังผู้ถูกคาดหวัง ตัวอย่างก็ไม่ไกลเช่น เรื่อง เอาลูกมาประกวดกัน (ทางปาก) ว่าลูกคนนั้นดียังโน้น ลูกคนโน้นดีอย่างนั้น แต่ลูกเรามันไม่ได้เรื่อง ทั้งที่ความจริงไม่ต้องเป็นแบบคนอื่น บ้านก็ไม่ได้ร้อนขึ้นสักหน่อย หรือแฟนคนโน้น ทำแบบนี้ ทำไมแฟนเราไม่ทำซากอะไรเลยฟะ
  5. 4.2% ลม ๆ แล้ง ๆ : ...... no comment .......

 

      จากสาเหตุที่กล่าวมา จะขอพูดถึงข้อ 3 กับ 4 เท่านั้น เพราะ ส่งผลต่อผู้ถูกคาดหวังค่อนข้างเยอะ....

 


 จัดการกับ "ความคาดหวัง"

          1 สำหรับผู้คาดหวัง : วิธีแก้ก็คือ ศึกษาธรรมะบ้างซะนะ จะได้ปลงๆ หรือใช้วิถี เศรษฐกิจพอเพียงซะมั่ง

          2 สำหรับผู้ถูกคาดหวัง : ขอจำแนกเป็นหัวข้อนะ มันเยอะ...

    • แสดงให้ผู้คาดหวังเห็นว่า เราพยายามแล้ว : ถึงไม่สำเร็จก็ไม่เป็นไร อย่างน้อยก็ลดอารมณ์ได้บ้าง
    • หาเรื่องเบี่ยงเบนความคาดหวัง : พยายามหาหัวข้อที่ส่งผลต่อผู้คาดหวังโดยตรง และเป็นประเด็นร้อนกว่า เพื่อลดดีกรี ความคาดหวังเรื่องนี้ลงบ้าง
    • แกล้งลืม : บางสิ่งบางอย่าง ทำเป็นลืมๆ บ้างก็ได้ ขืนรับหมดตายยยย
    • ร้องเพลงให้ฟังไปเลย : ประมาณ "อยากจะดีพอ ให้เธอได้มั่นใจ ปั๊บ ปา ดา ปั๊บ ปา เย้ เย..." อันนี้ก็ช่วยลดดีกรีลงได้บ้างเหมือนกัน
    • อย่าสวนกลับด้วยความคาดหวังของตน : บ้านแตกครับ อาการนี้
    • ในกรณีที่รับมาเยอะๆ แล้ว ให้ผ่อนคลายซะบ้าง : ไปหาอะไรที่ชอบทำบ้าง ให้อิสระกับตัวเอง แล้วจะดีขึ้น
    • ต่อรองราคากันหน่อย : เช่น ถูกพ่อคาดหวังว่า "ต้องเอนท์ติด จุฬาฯ นะ" ก็ต่อรองว่า "โถ พ่อ จุฬามันไม่เจ๋ง ขอเป็นปักเป้าแทนได้ป่าว" ....
    • ทำรายงานสรุป : ตอนนี้ progress เป็นอย่างไรบ้าง ในแต่หัวข้อ

สุดท้าย ถ้าคิดว่าไม่ไหวจริง ให้ทำท่านิ่งๆ ไว้ แล้วพูดประโยคสั้นๆ ว่า

                  "ขอโทษครับ ผมอยากทำได้ แต่ผมไม่ใช่ซุปเปอร์แมน"

7月24日

ยินดีต้อนรับสู่โลกของความเงียบ

 
เมื่อหลายวันก่อน จู่ๆ ก็นึกคำถามขึ้นในใจ ว่า
 
" ไม่ได้ใช้ชีวิตเงียบๆ มานานแค่ไหนแล้ว "
 
จันทร์ - ศุกร์ ทำงาน
เสาร์ อาทิตย์ ไปเที่ยว กิน เมา...
 
พออยู่บ้านอาทิตย์เดียว รู้สึกว่า ไม่มีอะไรทำ.....
 
เลยคิดซะเยอะเลย แต่นึกๆไปแล้วก็ดีเหมือนกันนะ
เพราะความเงียบทำให้เราคิดอะไรได้มากขึ้น
อย่างน้อยๆ ก็คิดได้ว่าเราก็เหนื่อยนะ...
 
ความเงียบ ก็เป็นสิ่งที่ตัวเราเองต้องการอยู่เสมอ
เวลาเหงา... ความเงียบ ก็เป็นสิ่งเดียวที่อยู่กับเรา
เวลาทุกข์... ความเงียบ ก็เป็นเครื่องรักษา
เวลาเครียด... ความเงียบ ก็ทำให้เราสงบ
 
...... ลองทำดูซิ .......
 
1. อยู่ในห้อง ไม่ต้องเปิดทีวี วิทยุ คอมพิวเตอร์
2. ปิดโทรศัพท์
3. หาหนังสือที่ชอบ มานั่งอ่าน, เขียนบันทึก หรือไม่ก็วาดรูปเล่น
4. นั่งทบทวนสิ่งที่ได้ทำมาตลอดช่วงนั้น
 
แล้วจะพบว่า เราต้องการอะไร
 
ยินดีต้อนรับเพื่อนใหม่ทุกคนนะครับ
2月12日

เป็นอะไรของเราเนี่ย

 
เหมือนจะดี แต่รู้สึกแย่
เหมือนจะสบาย แต่ก็ท้อแท้
จะมีมั้ยสักคน ที่มาช่วยแบ่งบันความรู้สึก (อันมีมากไปของเรา)
 
อยากให้เป็นคนที่เราเฝ้ารอจัง แต่เขาคงไม่เคยแม้แต่จะคิด
เรายังเป็นได้แค่คนหนึ่งคนไกล
ไม่เคยได้เข้าใกล้เขาได้เลย
 
จริงแล้วก็ท้อใจมามาก แต่ไม่รู้จริงๆ ว่าทำไมยังต้องคิดแบบนี้อีก
 
"ถึงแม้ว่าเป็นแค่ความสงสารก็ยอม เป็นรักปลอมๆ ก็ยินดีน้อมรับมา"
 
ก็คงเป็นประโยคที่โดนใจเรามากที่สุดตอนนี้
 
เรามันมีค่าแค่นี้แหละ แต่ก็จะเฝ้ามองอยู่ตรงนี้
ไม่ขอเข้าไปเรียกร้องอะไรอีกต่อไป
 
หวังว่าจะเจอคนที่ใช่ในอีกไม่นานนะ เป็นกำลังใจให้
 
1月24日

นอกเรื่องนิดนึง

เอ้า ชาว ipod video ทั้งหลายเฮกันหน่อย ทำได้แล้วครับ
 
รูป 3 - 4 คือ แบบใหม่ครับ มีบั๊ก ไ กับ ฟ ที่เหลือไม่มีปัญหาครับ
 
รูป 1 -2 แบบเก่า เผื่อคนที่ชอบแบบบางๆ
 
全 4 枚中 1 枚目
他のアルバム (1 件)