EUROPe in REWiND #002.1

เครื่องลงที่ Frankfurt am Main Airport ประมาณ 5:40 AM
เวลาที่เยอรมัน ต่างกับประเทศไทย -5 ชั่วโมง
เราเลยไม่ง่วงแม้แต่นิดเดียว

ใช้เวลาไม่นานก็หลุดจาก ตม. ออกมาได้
อย่างแรกที่ต้องทำก็คือ Activate ตั๋วรถไฟ EURail (เหมือนกับ JR Pass ของญี่ปุ่น)
ก็แค่ไปที่ห้องตั๋ว EURail แล้วยื่นเอกสารการที่ได้จากตอนซื้อให้เค้า
ไปตอนเช้า ไม่ค่อยมีคน รอแป๊บเดียวก็ถึงคิว
แค่นาทีสองนาทีก็เสร็จแล้ว พร้อมใช้
ไม่เหมือน JR ที่ต่อแถวรอกันเป็นชั่วโมงเลย
หลังจากนั้นเราก็รีบชิ่งไปขึ้นรถไฟรอบ 6:53 AM ไปจุดหมายแรกทันที นั่นก็คือ..

มิวนิคนั่นเอง
ใช้เวลาประมาณ 3 ชั่วโมง 30 นาที
ถึงตอนนี้ท้องเริ่มร้อง
เลยซื้อขนมปังไส้แฮมไปกินระหว่างทาง

OLYMPUS DIGITAL CAMERA

EURail ที่ซื้อมาเป็นแบบ 2nd class
ที่นั่งก็สบายดี ไม่คับแคบ
แต่บางจังหวะคนก็แน่น ที่นั่งหายากนิดนึง
ถ้าใครอยากสบายตอนนั่งรถไฟ ก็คงต้องลงทุนซื้อตั๋วแบบ 1st class
ซึ่งจะมีคนน้อยกว่ามากและที่นั่งก็จะกว้างกว่าด้วย

OLYMPUS DIGITAL CAMERA

10:30 AM ก็มาถึง Munich Central Station หรือ München Hauptbahnhof
ถ่ายรูปรถไฟไว้สักหน่อย

OLYMPUS DIGITAL CAMERA
อันนี้เป็นรถไฟ ICE ย่อมาจาก Inter-City Express หรือรถด่วนระหว่างเมือง
ก็จะวิ่งเร็วสุดๆ เทียบตามมาตราฐาน EURail เค้า (แต่ถ้าเทียบกับ JR Nozomi นี่คงไม่เร็วมากอ่ะนะ)
สภาพเหมือนผ่านศึกมาอย่างหนัก

OLYMPUS DIGITAL CAMERA

เหตุผลที่เลือกมาหน้าร้อน เพราะสิ่งนี้แหละ
อุณหภูมิช่างเป็นมิตรกับกะเหรี่ยงเอเซียอย่างเรายิ่งนัก

OLYMPUS DIGITAL CAMERA

หลังจากหันซ้ายหันขวา และหมุนตัวอยู่พักนึง
เราก็คลำทางมาโรงแรมถูก ตามลายแทงที่เวบเค้าให้ไว้
โรงแรมแห่งแรกที่เราเลือกคือ Hotel Royal
เดินแค่สามนาทีจากสถานีรถไฟหลัก
ราคาเป็นมิตร ห้องพักสะอาด อาหารเช้าเป็นเลิศ
พนักงานยิ้มแย้มแจ่มใส พูดอังกฤษชัดแจ๋ว
แหม น่าจะได้ค่าโฆษณานะเนี่ย

OLYMPUS DIGITAL CAMERA

ในห้องมีพัดลมให้ด้วย
เวิร์คสุดๆ
สภาพห้องไม่ได้เคลียร์ของ เละพอควร 55
+++++++
หลังจากเชคอิน เอาของเก็บ อาบน้ำอาบท่า เรียบร้อยแล้ว
ท้องก็ร้องโครกๆ เลยเดินไปสถานี Hauptbahnhof เพื่อดับความหิว
ขอบอกว่าไก่ร้านตรงนี้อร่อยมาก เค็มๆหน่อย กินกับ French Fried นี่เยี่ยมไปเลย
จานนี้ 6.6 Euro เป็นไก่ครึ่งตัว กินได้สองคนอิ่มกำลังดี

OLYMPUS DIGITAL CAMERA

EUROPe in REWiND #001

วันแรก เป็นวันแห่งการเดินทาง
เริ่มต้นด้วยการขึ้น BTS ไปต่อ ARL แบบ City Line เพื่อไปสุวรรณภูมิ
วันนี้เดินทางด้วย JetStar สายการบิน Low Cost ของ Qantas
ตั๋วซื้อแบบ 1 แถม 1 มา ตกคนละ 1,600 บาท รวมน้ำหนักกระเป๋าแล้ว

OLYMPUS DIGITAL CAMERA

JetStar ใช้เครื่อง A320 คล้ายๆ Air Asia
ที่นั่งก็พอไหว แค่สองชั่วโมง จะเอาอะไรดีมาก

JetStar

พอมาถึงสนามบิน Changi ที่ Singapore ก็เจอด่าน ตม. คนมหาศาล
Terminal 1 เป็น Terminal เก่า ส่วนใหญ่เป็นสายการบิน Low Cost มาลง

Changi Airport

พอผ่านด่าน ตม. ออกไปได้ก็ต้องรอเวลา Checkin ของ Lufthansa
ซึ่งอยู่ที่ Terminal 2  พอดีมีร้าน Gong Cha ของโปรดขายอยู่ จะเหลือเหรอ ?
ราคาของชานมไข่มุกอยู่ที่ 2.5 SGD

Gong Cha

พอถึงเวลาก็เชคอิน Lufthansa เข้าไปนั่งๆนอนๆ รอเวลาขึ้นเครื่อง
Resting Area ของที่นี่ ต้องยกให้เป็นอันดับหนึ่งจริงๆ

Changi Resting Area

พอถึงเวลา Boarding เราก็รีบแจ้นไปขึ้นเครื่อง
Lufthansa ใช้เครื่อง A380 สำหรับเส้นทางนี้
พอนั่งเสร็จ มีโปรแกรมหนังให้ดูเพลินๆ ก็ดูไปหลับไป จนถึงที่หมาย
จบวันแรกแล้วจ้า วันแห่งการเดินทาง

EUROPe in REWiND #000.7

มาต่อกันตอนสอง

1. แดด
ไปหน้าหนาว หรือ หน้าร้อน แดดแรงพอกัน
ยกเว้นหน้าฝน แดดร่ม แต่ฝนตก เปียกเป็นลูกหมาตกน้ำ แถมหนาวอีก
เที่ยวก็ไม่สนุก ถ่ายรูปไม่สวย
จงเอาครีมกันแดดไปด้วย ทั้งหน้า ทั้งตัว
เอาร่มไปด้วย
เอาแว่นกันแดดดีๆไปด้วย อันละร้อยไม่เอา มันกรองแสงไม่ได้จริง
ไม่แนะนำ ช่วยลงทุนซื้อของแท้ซักอันนะ
คือ ไปเที่ยวเนี่ย ยังไงก็ดำแน่นอน ทำใจไว้เลย

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

เสื้อหนาวตัวไหนกันลมได้ ยิ่งดี ช่วยชีวิตได้เยอะ

ส่วนถ้าไปหน้าร้อน มันร้อนจริงจัง
เสื้อยืด กางเกงขาสั้น ก็พอแล้ว
ถ้ากลัวขาดำก็เอายีนส์ไป

ส่วนคุณผู้หญิงที่มักจะเอา prop ไปเต็มสูบ
ตามนิสัยไทยแท้
ไปทั้งที ต้องสวยใส่บูท ก็ไม่ว่ากัน

3. รองเท้า
เลิกเถอะครับ พวกเอารองเท้า Onitsuka Tiger ไปเที่ยว
หรือรองเท้าเท่ห์ๆ พื้นบางๆอื่นๆ
เห็นปุ๊บก็รู้ปั๊บว่าเป็นชาวทัวร์ ที่ไม่เคย Backpack เดินทางเอง
ถ้าจะไปลุย Backpack แบบนี้ เอาพวกร้องเท้าผ้าใบพื้นหนาไปดีกว่า
Nike, ADIDAS, New Balance, PUMA บางรุ่น
จะช่วยเซฟฝ่าเท้านุ่มๆได้เยอะ

4. Sim Internet สำหรับ Smart Phone
ยุค Social Network สิ่งนี้คงเป็นปัจจัย 5 ไปเรียบร้อย
แนะนำว่าอย่าเปิด Roaming ไป มันแพงงงงงงง
วันละสี่ห้าร้อย ไปสิบวัน ห้าพัน แพงไปมั้ย
ไปซื้อ Prepaid Sim ที่ปลายทางเถอะครับ
แค่ 10 EURO ก็ใช้ได้ไม่หมดแล้ว
รายละเอียดเรื่องซิม เดี๋ยวมีบอกตอนรีวิวทริป

5. มิจฉาชีพ
จงอย่าทำตัวรวย อย่าอวดรวย
ไปเที่ยว ทำตัวจนๆไว้ จะรอดชีวิตจากพวกมิจฉาชีพได้
พวกกระเป๋า เสื้อผ้า เครื่องประดับราคาแพง เก็บไว้บ้านเถอะครับ
ครั้งนี้ขนาดทำตัวบ้านๆ ยังเจอมิจฉาชีพกับตัวเองเลย

6. อาหารการกิน
ถ้าเป็นคนไม่คุ้นกับอาหารฝรั่ง ให้พกมาม่าคัพไปด้วย ช่วยได้เยอะ
พกกาต้มน้ำเล็กไปด้วย สะดวกดี
ถ้าไม่มีก็ไปขอน้ำร้อนโรงแรมได้
กินอาหารตามร้าน แชร์กันได้ แต่บอกเค้าหน่อยว่าขอสั่งอย่างเดียวกินสองคน
หรือสองอย่างกินสามคน
เค้าชินกับกระเหรี่ยงแล้ว ส่วนใหญ่ก็จะไม่ว่าอะไรหรอก
บางร้านแยกจานมาให้เลยด้วยซ้ำ

7. ทิป
กินอาหารนอกบ้าน ถ้าไม่ใช่ร้านบริการตัวเอง
ต้องให้ทิปทุกครั้ง ประมาณ 10% ของค่าอาหาร
ฝรั่งเค้าไม่มี Service Charge
ถ้าไม่ให้ทิป เค้าก็คงทำอะไรเราไม่ได้ แต่น่าจะด่าพ่อตามหลัง
ไม่ดีหรอกครับ ให้ไปเถอะ มันเป็นธรรมเนียมปฏิบัติ

8. ร้านค้าปิดวันอาทิตย์ ที่เที่ยวบางที่ปิดวันจันทร์
บ้านเค้าไม่มี 7-11 นะ พวกร้านขายของชำ ทุ่มนึงหรือสองทุ่มร้านปิดหมดแล้ว
วันอาทิตย์ไม่เปิด วันเสาร์เย็นที่ super market คือสงคราม
จะซื้อของต้องแพลนดีๆ

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

9. คนชอบถ่ายรูป

Cloud Sky

Blue Sky

ถ้าไปตอนหน้าฝน เมฆเยอะ Low Season โรงแรมถูก ถ่ายรูปมาก็แบบรูปบน
กับไปตอนหน้าร้อน High Season โรงแรมแพงกว่า
เมฆน้อย แดดร้อน ตัวดำ แต่รูปออกมาแบบด้านล่าง
ส่วนหน้าหนาว น่าจะแดดแรง เมฆน้อย คนน้อย
มีหิมะเพียบ รูปสวย แต่หนาวสุดๆ จนแทบไม่อยากขยับตัวออกไปข้างนอก
อยากได้รูปแบบไหน เลือกได้

ทิปอื่นๆคิดไม่ออกแล้ว ไว้คิดออกระหว่างทาง จะสอดแทรกในรีวิวไปเลยแล้วกันนะ

EUROPe in REWiND #000.6

เกร็ดความรู้ เล็กน้อยๆ เล่าสู่กันฟัง

1. น้ำเปล่าแพง และมีสองแบบ
แถบยุโรป น้ำเปล่าเค้าจะขายแพงมาก แพงกว่าเบียร์อีก
ขวด 500ml ที่เราซื้อกัน 7-10 บาท เค้าขาย 100+
ส่วนขวดใหญ่ 1.5 ลิตร ขวดละ 12 Euro+ คูณเอาละกันว่ากี่บาท
น้ำที่ขายจะมีสองแบบ คือน้ำเปล่าธรรมดา แบบที่เรากิน เค้าเรียก Still Water
กับอีกแบบ ที่เป็นโซดา เรียกว่า Gas Water
เวลาไปซื้อ ดูด้วยตานี่แยกกันไม่ออกเลยว่าเป็น Gas หรือ Still
ถามคนขายให้ดีๆก่อน เดี๋ยวซื้อผิด

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

ตอนเช้าก่อนออกจากโรงแรม ก็เติมน้ำให้เต็มขวด
ตอนกลางวันแวะร้านอาหาร ก็เติมซะให้เรียบร้อย

เราคนไทยอาจจะรู้สึกแปลกๆนิดนึง ที่จะกินน้ำก๊อก
เพราะที่บ้านเกิดเมืองนอน แค่คิดจะกินน้ำก๊อกก็สยองแล้ว
แต่ที่นู่นกินได้ รับรอง

2. โค้ก ราคาต่างกันเป็นเท่าตัว เป๊ปซี่ถูกกว่า 30%
ซื้อโค้ก 500ml ที่ super market ราคา 1 Euro
ซื้อโค้ก 500ml ที่ร้านขนมปังหรือร้าน takeout ราคา 1.8 Euro
ซื้อโค้ก 500ml ที่ตู้กด ราคา 2 Euro
ซื้อโค้ก 300ml ใส่แก้วในร้านอาหาร ราคา 3 Euro
มันจะต่างอะไรขนาดนั้น … แต่ก็รู้แล้วใช่มะ ว่าอยากกินโค้ก ซื้อที่ไหน

ส่วนเป๊ปซี่ ตามร้านไม่ค่อยมีขาย
ที่ super market ขวด 500ml ราคา 0.7 Euro
แต่ขอโทษ ขายไม่ออกเลย เหลือเต็ม shelf :)

3. ห้องน้ำ ไม่ฟรีนะจ๊ะ
คนเราก็ต้องเข้าห้องน้ำเป็นธรรมดา แต่มันไม่ฟรีเสมอไป
บางประเทศ บางที่ มีฟรี เช่นในร้านอาหาร ใน Mc
แต่บาง Mc ก็เก็บตัง โดยเฉพาะร้านตรงที่เที่ยว คนเยอะๆ

แล้วถ้าเก็บตัง มันก็จะเป็นแบบต้องหยอดเงิน
ไม่ได้มีคนเก็บเงิน
แล้วมันต้องใช้เหรียญ และมันก็ไม่มีที่แลกเหรียญให้เรา
ไม่ใช่ BTS นี่นะ
ถ้าเกิดปวดมากๆ จะทำไง
เพราะฉนั้น..

4. จงมีเศษเหรียญติดตัวเสมอ
นั่นแหละ เหรียญ 0.5 Euro, 1 Euro, 2 Euro ให้มีเก็บไว้อย่างละเหรียญ แยกไว้เลย
ถ้าไปสองคนก็ให้มีเก็บไว้มากขึ้น
มันจำเป็นต้องใช้ในการเข้าห้องน้ำ
หรือใช้ล๊อคเกอร์ ตามที่เที่ยว
เค้าไม่ให้เราสะพายเป้เข้าไป เราต้องไปฝากกระเป๋าไว้
แล้วต้องหยอดเงิน เพื่อไขกุญแจล๊อค
เกิดไม่มีเหรียญ ก็ปิดล๊อคไม่ได้ แล้วใครจะช่วยอะไรได้
ปล. พอเรา unlock ล๊อคเกอร์ มันก็คืนเหรียญเรามานะ
แค่เก็บเป็นมัดจำไว้

5. Starbucks + Mc มี Free Wifi
ถ้าไม่ได้ซื้อซิม
แล้วอยากเล่นเนทกลางทาง
ก็เดินไป Mc
ถ้าไม่มีก็ไป Starbucks ซึ่งมันอาจจะมีให้ Register นิดหน่อยก็ทำไป
ไม่ได้ยากอะไร ดีกว่าลงแดงตาย

6. การเรียกให้เก็บเงิน ไม่ใช่คำว่า Check Bill
และก็ไม่ใช่การทำนิ้ววนๆที่โต๊ะด้วย
ฝรั่งไม่เข้าใจ
ปรกติควรใช้คำว่า Check Please หรือ Bill Please

7. กดเงินผ่าน ATM ให้เลือกตู้ที่ไม่เสียค่าธรรมเนียม
เวลาไปเที่ยว ก็ควรพกบัตรเครดิตไปด้วย สองใบ เผื่อใบนึงมีปัญหา รูดไม่ผ่าน
และ ATM หนึ่งใบ ปรกติเค้าก็จะแนะนำให้ใช้ของ ธ. กรุงเทพกัน
เวลากดเงินสด เค้าจะคิดเรทของวีซ่า + ค่าประกันอัตราและเปลี่ยน 2%
และมีการเก็บค่าธรรมเนียม 100 บาท จากธนาคาร
ทีนี้ บางที ธนาคารปลายทาง มันก็เก็บค่าธรรมเนียมด้วย
จะรู้ได้ยังไงว่ามันมีค่าธรรมเนียม
ข้อมูล insider บอกมาว่า ถ้าพอกดเงินจำนวนเสร็จ
ก่อนที่มันจะบ้วนเงินออกมาให้เรา
เครื่อง ATM มันจะถามเราว่าการทำ Transaction นี้อาจจะมี Fee นะ
ยูโอเคไหม แสดงว่ามันจะเก็บเงิน ก็ตอบ No ซะ
แล้วไปใช้ตู้ของธนาคารอื่น
แค่นี้แหละ

ทีนี้ บางคนอาจจะถามว่าจะไปกด ATM ทำไม
แลกเงินไปสิ
คือเงินบางประเทศ ไม่มีให้แลกในเมืองไทย (ตามร้าน Grey Market ดังๆ)
เช่น Czech Koruna หรือ Hungarian Forint
ก็ต้องไปแลกที่นู่น หรือ กด ATM เอา
การไปแลกตังที่นู่น ถ้าไม่ศึกษาดีๆ โดนฟันหัวแบะนะฮะ
กด ATM เอาเหอะ สบายใจกว่าเยอะ

เรื่องเกร็ดความรู้
ยังมีต่อตอนสอง โปรดติดตาม

EUROPe in REWiND #000.5

EURail หัวใจของการเดินทาง

พอดีเราไม่ค่อยมั่นใจในการเช่ารถขับ
เลยเที่ยวด้วยรถไฟ
แต่เห็นคนไทยหลายกลุ่ม ไปเที่ยว 4-5 คน เช่ารถขับ
ผลัดกันขับ ดูสนุกดี
การขับรถทำให้ซอกแซกไปในที่ๆ รถไฟไปไม่ถึงได้
และยังทำให้ประหยัดค่าเดินทางได้มาก
ก็ลองพิจารณาดู

สำหรับคนที่จะพึ่งรถไฟ
ตั๋ว EURail คือเพื่อนที่แสนดี

มันจะมีตั๋วหลายแบบ เช่น คอมโบสองประเทศ คอมโบสามประเทศ
และอื่นๆให้เลือกซื้อ ลองเข้าไปดูในเวบไซต์ก่อน
สิ่งที่อยากจะบอกคือรถไฟทุกสายไม่ได้วิ่งเร็วเท่ากัน
ถ้าเที่ยวใน Core Network
เส้นสีม่วงในรูป ก็จะเจอรถไฟวิ่งเร็ว และส่วนมากตรงเวลา
ถ้าเที่ยวเส้นสีแดง ก็เป็นรถไฟรางเดี่ยว ดีเลย์ประจำ วิ่งช้า เชื่อถือไม่ค่อยได้ ควรระวัง

7-31-2013 12-02-05 AM

จากรูปการเที่ยว Frankfurt – Munich – Salzburg – Vienna – Budapest เป็นเส้นทางที่เหมาะจะใช้รถไฟ
แต่ถ้าเราแวะเมืองอื่นที่เป็นเส้นสีแดงเยอะๆ
แนะนำให้ใช้รถไฟสำหรับเส้นทางหลัก และรถ BUS สำหรับเส้นสีแดง (ถ้ามี)

เรื่องวิธีการเดินทาง ไม่มีสูตรตายตัว
เพราะบางที่ บางเวลา มันมีตั๋วพิเศษ (เช่น Weekend Ticket) ที่ราคาถูกกว่า EURail
ตัวอย่างคือ Bayern Ticket ของมิวนิค ที่ใช้เดินทางไป Fussen
เราก็ควรจะสลับมาใช้ตั๋วที่ดีกว่า ตามความเหมะสม

และบางเส้น การเดินทางด้วยรถไฟ ก็ไม่ใช่ทางเลือกที่ดีนัก

7-31-2013 12-21-24 AM

ลองดูตัวอย่างนี้
รูปด้านบนคือเวลาสั้นที่สุดที่จะเดินทางจากเมืองสู่เมือง
ลองดูเวลาจาก Frankfurt – Paris = 3 ชั่วโมง 55 นาที
เทียบกับ Frankfurt – Praha (Prague) = 9 ชั่วโมง 15 นาที ( Frankfurt – Munchen – Praha)
ทั้งๆที่ดูระยะทางไม่ต่างกัน
หรืออย่าง Munchen (Munich) – Venezia (Venice) = 7 ชั่วโมง 5 นาที
แค่คิดว่าต้องนั่งรถนานขนาดนั้น ก็เซ็งแล้วใช่ไหมล่ะ
ออก 9 โมงเช้า ถึงบ่าย 4 โมง สรุปแค่เดินทางก็เสียเวลาไปวันนึงฟรีๆ
เห็นแบบนี้ ถ้าจะเที่ยว อิตาลี ฝรั่งเศส
ก็ควรบิน Low Cost ข้ามประเทศเอาแทนการนั่งรถไฟ
เห็นด้วยไหมครับ ?

จะไปเที่ยวเองก็ต้องศึกษาให้ดี
จะได้วางแผนการเดินทางที่ประหยัด และมีประสิทธิภาพสูงสุด ทั้งเวลา และค่าใช้จ่าย

Tip ‘n Trick #3 : รถไฟขัดข้อง รางซ่อม เดินรถไม่ได้กระทันหัน

ตรงนี้ คนที่ใช้ชีวิตอยู่ในยุโรปคงเข้าใจดี
เรานั่งรถไฟอยู่ดีๆ วิ่งปรกติมาครึ่งทางแล้ว
พอมาถึงสถานีนึง มันจอดนานผิดปรกติ
เสร็จแล้วเจ้าหน้าที่ก็เริ่มประกาศเสียงตามสาย เป็นภาษาท้องถิ่น ที่เราไม่เข้าใจ
เสร็จแล้วคนก็เริ่มทยอยลงๆๆๆไป แต่บางคนก็นังนั่งอยู่
รอแล้วรอเล่า มันก็ไม่ประกาศอะไรที่เป็นภาษาอังกฤษออกมา
แล้วสรุปชีวิตเราจะเป็นไงต่อ ? รถมันจะวิ่งหรือไม่วิ่ง ?
ดีเลย์แบบนี้ ถ้าต้องไปต่อรถไฟอีกขบวน ก็มีสิทธิ์ตกรถแหงๆ ทำไงดีๆๆๆ

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

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

EUROPe in REWiND #000.4

โรงแรมที่ซุกหัวนอน

ขั้นต่อไปของการวางแผนเที่ยว ก็คือศาสตร์ในการหาที่พัก
เริ่มด้วยการจองโรงแรม จะขอแบ่งการจองเป็น 2 อย่างคือ
1. จองเพื่อขอ VISA ; 2. จองเพื่อไปพักจริง

เวบที่ใช้จองโรงแรมที่ใช้จะมี booking.com, hostelworld.com และ website ของโรงแรมเอง

ขั้นแรก สำหรับการขอวีซ่า ให้จองโรงแรมผ่าน booking.com
เพราะจองแล้วไม่ต้องจ่ายเงินสักบาท
จองโรงแรมไหนก็ได้ ไม่ค่อยสำคัญ ขอแค่อยู่ในเมืองตามแผนการท่องเที่ยว
ถ้าแผนบอกว่าจะอยู่เมือง A แต่จองโรงแรมที่เมือง B แล้วสถานทูตตรวจเจอคงจะซวย
ที่สำคัญคือให้จองแบบที่มี condition free cancellation เอาไว้ยกเลิกทีหลัง
ตอนได้วีซ่าแล้ว หรือเผื่อมีปัญหาเกิดขึ้น

การจองเพื่อขอวีซ่า จริงๆแล้วก็สามารถจองโรงแรมที่เราอยากไปพักจริงๆได้เหมือนกัน ไม่ได้มีข้อห้ามนะ

ทีนี้พอได้วีซ่า ถ้าอยากเปลี่ยนโรงแรม ก็ค่อยมายกเลิกของเก่าแล้วจองของใหม่
รอบนี้ก็เอาแบบไม่ต้องมี free cancellation แล้ว เพราะไปแน่ๆ
ราคาจะถูกลงพอควร

Trick ‘n’ Tip #2 : หลักการจองโรมแรม

>  จองโรงแรมใกล้สถานีรถไฟ หรือ ใกล้ป้ายรถเมล์ ที่มีรถสายหลักผ่าน
การเป็นนัก Backpack ถ้าไม่อึดพลังควายมากๆ ก็ไม่ควรหาเรื่องใส่ตัวด้วยการพักโรงแรมไกลๆ
เดินทางลำบาก ลากกระเป๋าเข้าซอยเป็นกิโล
หรือต้องนั่ง Taxi ไป เพราะไม่มีรถเมล์ผ่าน

การจองโรงแรมใกล้สถานี มีข้อดีนับไม่ถ้วน
เช่น ประหยัดเวลาเดินทาง
ประหยัดค่าเดินทาง
มีของกินขายถึงดึก มี supermarket

> จองโรงแรมที่มีลิฟท์
ลองนึกสถาพห้องพักอยู่ชั้นสาม แล้วต้องยกกระเป๋าขึ้นไปเอง
สยองนะ ยกของหนัก ปวดหลังเอาง่ายๆด้วย อย่าเลยๆ

> อ่าน comment ใน booking.com ประกอบเยอะๆ
โรงแรมมีอะไรไม่ดี จะมีคนมาด่ากราดไว้เรียบร้อยแล้ว
ก็ลองไปอ่านดู ว่ารับได้ไหม
ส่วนใหญ่ฝรั่งก็จะมาด่าเรื่องต่างกับเรา
เช่นฝรั่งผู้ดีกับออซซี่ มักจะบ่นเรื่องไม่มีเครื่องต้มน้ำ สำหรับทำชาร้อนกิน
หรือบ่นว่าโรงแรมไม่มีแอร์ นอนไม่หลับ (Summer ของเค้า ตอนกลางคืนนี่เย็นกว่าแอร์บ้านเราอีก)
ข้อเสียของเค้า เราอาจจะไม่สนใจ ถึงแม้โรงแรมได้เรทติ้งไม่ดีมาก
แต่บางทีเจอฝรั่ง troll เราก็จะได้รู้ไว้
ข้อมูลดีๆมีมากมายอยู่ใน customer comment จงไปอ่านซะ

> เทียบราคาหลายๆเวบ
ส่วนใหญ่ booking.com จะราคาถูก แต่ก็ควรเชคการจองผ่านหน้าเวบของโรงแรมโดยตรงด้วย
บางทีจะถูกกว่าอีกนิดนึง หรือมีแถมอาหารเช้า อะไรแบบนี้

> สมัครสมาชิก mail ของโรงแรมไว้ เช่น Accor Group หรือ mail ของ booking.com, hostelsoworld
เพราะบางที พอใกล้ๆวัน แล้วมีโรงแรมขายห้องไม่หมด
มันจะเอามาลดแลกแจกแถม
ถ้าเราเจอของดี เราก็กด cancel ที่ booking.com ซะ
แล้วมาสอยพวกลดพิเศษพวกนี้ บางทีถูกลงไปคืนละหลายสิบ EURO นะเออ

> สำหรับคนกลัวโรงแรมผีสิง หรือ ไม่มั่นใจในการจองโรงแรมธรรมดาๆ
แนะนำให้ใช้เครือ ibis
เพราะราคาจะไม่แพงมาก บริการดี ห้องสะอาด มาตราฐานสูง
และส่วนใหญ่ location จะพอใช้ได้ทีเดียว

> สุดท้าย ท้ายสุด
Early Bird is King
ยิ่งจองเร็วยิ่งถูก ท่องไว้เลย
ปรกติการจองโรงแรม ถ้าต่ำกว่า 3 เดือนล่วงหน้า
ราคาก็จะแพงใช้ได้ทีเดียว
มันจะมาถูกอีกทีตอนเหลือ 2 อาทิตย์นั่นแหละ
เหตุผลก็ตามข้อด้านบน

ถึงตอนนี้แล้ว พร้อมจะลุยกันหรือยัง ?

EUROPe in REWiND #000.3

ว่ากันเรื่องแผนการท่องเที่ยว 

ตั๋วเครื่องบินมีแล้ว ก็แสดงว่าเรามีวันเวลาที่ไปตามความฝัน
กะเวลาที่ต้องย้อนกลับมาสู่โลกแห่งความจริงเรียบร้อย

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

รายละเอียดทริปคร่าวๆ

วันที่ แผน พักที่ เดินทางโดย
Day#1 นั่งรถไฟยิงยาว Frankfurt ไป Munich > เดินเที่ยวในเมือง Munich EURail
Day#2 Schloss Nymphenburg + Munich Residenz Munich
Day#3 Day Trip @Fussen ดูปราสาท Neuschwanstein Munich Baryern Ticket
Day#4 Day Trip @Innsbruck (Austria) Munich Eurail
Day#5 นั่งรถไฟไป Salzburg (Austria) > เดินเที่ยวในเมือง > Hohensalzburg Salzburg EURail
Day#6 ขึ้นเขา Untersberg > ตะลุย Schloss Hellbrunn + Salzburg Zoo Salzburg
Day#7 นั่งรถ Bus ย้ายเมืองไป Hallstatt > เดินเที่ยวในเมือง Hallstatt Bus
Day#8 นั่งรถไฟไป Vienna > เดินเที่ยวในเมือง > St. Stephen’s Cathedral Vienna EURail
Day#9 Hofburg Palace + Kunsthistorisches museum Vienna
Day#10 Schloss Schönbrunn + Belvedere Vienna
Day#11 นั่งรถตู้ไป  Cesky Krumlov > เดินเที่ยวในเมือง Cesky Krumlov CZShuttle
Day#12 นั่งรถ Bus ไป Prague > เดินเที่ยวในเมือง > Clarles Bridge Prague Student Agency
Day#13 Prague Castle > St. Vitus Cathedral > จุดชมวิว Letna Park Prague
Day#14 นั่งรถ Bus ไป Nurnberg และต่อรถไฟไป Frankfurt Airport EURail

Plan

รูปข้างบนนี้เป็นเส้นทางคร่าวๆ
จุด A หายไปเพราะทับกันจุด J ที่ Frankfurt

ทริปนี้ แผนเที่ยวค่อนข้างติส เพราะเข้าดูพระราชวัง และพิพิธพันธ์ เป็นจำนวนมาก
สำหรับคนไม่สนใจประวัติศาสตร์ ภาพวาด และความสวยงามของสิ่งก่อสร้างมากนัก
ก็น่าจะใช้เวลาในแต่ละเมือง และงบประมาณ น้อยกว่าที่เราใช้ไป
ครั้งนี้ค่าเข้าชมสถานที่ น่าจะเป็นหลักหมื่นต่อคน

ทริปของเรา ไม่มีการเผื่องบซื้อของ ไม่มีการเผื่อเวลาซื้อของ
และไม่มีตรงไหนในแผนบอกว่าเป็นเวลาเดินช๊อป
สำหรับนักช๊อป ต้องขออภัย ที่เราคงเดินคนละเส้นทางกัน

EUROPe in REWiND #000.2

จุดเริ่มต้นอยู่ตรงไหน ?
ถ้าจะถามว่าเวลาไปเที่ยว นอกจากความฝันแล้ว
ความจริงมันเริ่มที่ตรงไหน
ก็บอกได้ตรงนี้เลย ว่ามันคือ “ตั๋วเครื่องบิน”
เพราะถ้าไม่มีตั๋ว สิ่งที่เหลือทั้งหมดก็คงเริ่มไม่ได้
รอบนี้จองโปรโมชันของ Lufthansa ที่เปิดมาช่วงปลายปีที่แล้ว บินจาก Singapore ไปยุโรป
ตอนนั้นเลือกแค่ว่าจะไปลงที่ Frankfurt เพราะราคาถูกที่สุด
เนื่องจาก Frankfurt เป็น Hub หลักของ Lufthansa ถ้าเลือกไปเมืองอื่นคือต้องต่อเครื่องและเสียเงินเพิ่มอีก
ด้วยความงกเลยไม่เอา
ด้านล่างนี่แหละคือรูปโฆษณาของโปรที่จองไป

Lufthansa Promotion

Lufthansa Promotion

Tip ‘n’ Trick #1 : การจองตั๋วเครื่องบิน
จริงๆแล้วหลักการจองตั๋วเครื่องบิน ควรอิงจากแผนเที่ยวมากกว่า
Perfect Scenario เลยคือการบินไปเมืองเริ่มต้น
และบินกลับจากเมืองสุดท้าย โดยที่ไม่ต้องย้อนมากลับที่เมืองเริ่มต้น หรือถ้าจะต้องกลับมา
ก็ควรบินกลับด้วย Low Cost Airline
เช่น เที่ยว อิตาลี สวิส ฝรั่งเศส
ก็ควรบินไปอิตาลี กลับจากฝรั่งเศส
หรือ
บินไปอิตาลี แล้วบินจากฝรั่งเศสกลับมาอิตาลี ต่อแล้วเครื่องกลับ
แต่การทำแบบนี้ กับการเที่ยวแบบประหยัด ก็จะมีความเสี่ยงเพิ่มขึ้น
เพราะเมืองไปกับเมืองกลับ มักจะต้องบินคนละสายการบิน
และมักจะไม่มีโปรพร้อมๆกัน
เวบไซต์ที่ใช้หาตั๋วราคาโปรก็เช่น cheapticket หรือ skyscanner
และเพจ facebook ดีๆอย่าง Ar-pae.com และอื่นๆอีกมาก
**********
กลับมาเรื่องของเรากันต่อ
ทีนี้พอจองโปร บินจาก Singapore แล้ว
เราก็มีภาระในการตามล่าหาโปร Low Cost จากกรุงเทพไปสิงคโปร์อีก
โชคดีที่ JetStar มีโปร 1 แถม 1
ก็เลยจองกรุงเทพ – สิงคโปร์ ได้ในราคาประหยัดอีก ประมาณ 1,600 บาทต่อคน
จากนั้นก็ต้องหาตั๋วกลับ สิงคโปร์ – กรุงเทพ
รอบนี้ขี้เกียจรอ เลยจอง Air Asia ไปเลย น่าจะประมาณ 2,500 บาท ต่อคน
อันนี้เป็นตัวอย่างที่ไม่ดี เพราะถ้ารอดูไปเรื่อยๆ อาจจะมีตั๋วถูกโผล่มาก็ได้
อ้อ เกือบลืมบอกว่าการจองตั๋วพวกนี้ จองล่วงหน้า 6 เดือนขึ้นไป
การจะรอหาตั๋วถูก ในช่วงระยะเวลาใกล้ๆ ก็จะเสี่ยงพอควร
แต่เราก็มักจะเห็นบ่อยๆ ที่สายการบิน มีโปรลดแลกแจกแถม ช่วงท้ายๆ (เพราะขายที่ไม่หมด)
เช่นจองวันนี้ บินวันพรุ่งนี้ถึงสิ้นเดือนหน้าเป็นต้น
ใครชอบสูตรไหน ก็ลองดูแล้วกันนะครับ

EUROPe in REWiND #000.1

การไปเที่ยวแบกเป้ในยุโรป เป็นความฝันของผม และคงเป็นของใครอีกหลายๆคน
จากบรรยากาศที่ดูแสนจะโรแมนติก อากาศเย็นๆ เดินไปทางไหนก็สวยไปหมด
วัฒนธรรม ศิลปะ และสถาปัตยกรรมช่างมีประวัติศาสตร์อันยาวนาน
มีสเน่ห์และมนต์ขลังยิ่งนัก
การได้ไปสัมผัสสักครั้ง คงทำให้ลืมได้ทุกๆสิ่ง

ในขณะที่อีกหลายๆคน อาจจะชอบท่องเที่ยวรีสอร์ทหรูในประเทศ ที่มีการบริการเยี่ยมยอด
หรือไปกินบุฟเฟ่ต์อาหารชั้นเลิศ
แต่ผมกลับชอบไปแบกเป้ เป็นประชาชนชั้น 2 ในยุโรปมากกว่า
นอนในสถานที่ธรรมดาๆ ในบางที่ จะเรียกว่าโรงแรมก็คงไม่ถนัดปากนัก
ทานอาหารแบบกินเพื่ออยู่ อดบ้างบางมื้อ..

เที่ยวครั้งนี้
จัดเองกับมือ ทุกรายละเอียด
ได้ไปทุกๆที่ๆอยากไป เท่าที่เวลาและงบประมาณเอื้ออำนวย

ผมขอใช้พื้นที่ blog ตรงนี้แชร์ประสบการณ์ที่ได้รับมา
และก็หวังว่า blog นี้ จะเป็นแรงบันดาลใจ ให้กับคนอีกหลายๆคน
ได้ทำตามความฝันเช่นนี้บ้าง

Over the Egde

apache mod evasive

My server has been attacked for weeks. They were brute force trying to login to MoinMoin. MoinMoin is still fine, but the server load is too high and there are too many traffic.

mod_evasive and mod-security are life savers

mod-status and awstats are also helpful in debugging and detecting the problem.

Moving to FreeBSD desktop

Again, my desktop somehow stop working, so I reinstall with FreeBSD and kde4.

This is what I have to do

Ports

x system

/usr/port/x11/xorg
/usr/port/x11/kde4

after that edit rc.conf and add

dbus_enable="YES"
hald_enable="YES"
kdm4_enable="YES"
linux_enable="YES"

reboot to kde4 and install these ports

/usr/ports/sysutils/fusefs-ntfs
git
mercurial
smb4k

Fix Firefox

Firefox is ugly in the Default FreeBSD ports. This is what I have to do.

ports

gtk-qt4-engineqt
qtcurve-gtk2

after that, go to start menu –> system setting –> gtk style and fonts –> choose qtcurve as widget

I got these from http://forum.kde.org/viewtopic.php?t=17786

Flash Plugins

http://www.freebsd.org/doc/handbook/desktop-browsers.html

Vim

Initially, I cannot get gvim to work. See these

http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/180417
http://forums.freebsd.org/showthread.php?t=40610

It works when I compiled the port with “make -DWITH_OPTIONS install clean”

KeePass

Have to install mono and /usr/ports/x11-toolkits/libgdiplus

Trip 2011 – part 19

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

วันสุดท้ายในทริปไปเดินชิลๆ ที่แถบ Notting Hill วิธีเดินทางง่ายๆ คือนั่ง tube ไปลงสถานี Notting Hill Gate

สถานี Notting Hill Gate

Notting Hill อยู่ทางตะวันตกเฉียงเหนือของลอนดอน เป็นย่านตลาด บ้านเรือนสีสวย ขายของน่ารักๆ อารมณ์ประมาณในหนัง Notting Hill น่ะแหละ

รถเก่า เอามาขายขนมปัง

ร้านขายของเก่า

ถนนสายหลักในย่านนี้คือ Portobello Street ร้านค้าส่วนใหญ่แถวนี้จะขายของเก่า เสื้อผ้า ผักผลไม้

 

ตึกหลากสีมาก

ทาสีเป็นลายธงชาติก็มี

บนถนน Portobello นี้มีจุดน่าสนใจสำหรับคนชอบอ่านหนังสืออยู่จุดนึง คือจะมีบ้านที่ George Orwell นักเขียนชื่อดังเจ้าของเรื่อง 1984 เคยอาศัยอยู่ จุดสังเกตคือมีแผ่นกลมๆ สีน้ำเงินแปะอยู่

Orwell lived here

สำหรับแฟนหนัง Notting Hill ก็จะมีร้านหนังสือประตูสีฟ้า The Travel Bookshop ที่เป็นร้านของพระเอกในเรื่อง อยู่ในย่านนี้ด้วย

The Travel Bookshop

Portobello Road

เดินจนกระทั่งถึงเวลากินมื้อเที่ยง ลองเปิดหาเอาจาก Google Maps ก็มีร้านน่าสนใจอยู่ใกล้ๆ ก็เลยลองไปกินดู เป็นร้านอาหารสเปนชื่อ El Pirata Detapas

มีเซตเมนูสำหรับมื้อเที่ยง ราคาพอรับได้

โฆษณาบอกสรรพคุณ ไม่มีดาวมิชชิลินแต่ก็ได้ recommend

บรรยากาศในร้าน

ขนมปัง

ไส้กรอกอะไรสักอย่าง น่าจะเป็น chorizo อร่อยดี

อันนี้มีครีม ไข่ปลา ข้างในเป็นอะไรสักอย่าง จำไม่ได้ แต่อร่อย

อันนี้จำชื่อไม่ได้ แต่อร่อยอีกเหมือนกัน

น่าจะเป็นปลาทอด

มี house wine ให้ในเซตด้วย

ถือเป็นร้านอาหารสเปนร้านแรกที่เคยกิน ใครไปแถวนั้นแล้วอยากลอง ก็ดูแผนที่/เวลาปิดเปิด ได้จากหน้านี้

จบจากมื้อกลางวันแล้วก็ไปทำธุระ รับฝากของจากมิตรสหายท่านหนึ่งกลับมาเมืองไทย แล้วก็ได้เวลาไปสนามบิน

ผ่านแถว Queensway แว้บๆ

ผ่านร้านเป็ดยอดนิยมของคนไทย

จัดการธุระเสร็จแถวๆ Marylebone

จนกระทั่งถึงเมืองไทยก็ไม่ได้ถ่ายรูปอื่นอีกเลย ทริปนี้มันก็เลยจบเอาดื้อๆ ที่ตรงสถานีนี้น่ะแหละ

ลิงก์ตอนเก่าๆ

Redesign

วันนี้มีเวลาว่างๆ ทั้งวัน ได้โอกาสทำเรื่องที่อยากทำมานานแล้วคือ ย้าย pittaya.com จากโฮสติ้งเดิมที่เป็น shared host ของ site5 มาอยู่บน cloud สักที

เรื่องการใช้งานก็ไม่ได้มีปัญหาอะไร แต่รู้สึกว่าการบริหารจัดการผ่านหน้า web interface มันไม่ถนัด แล้วบนโฮสต์ก็มีของที่ไม่ใช้แต่ไม่ได้ลบออก เละเทะไม่ค่อยเป็นระเบียบ รวมทั้งสัญญาเช่าจะหมดเอาปลายเดือนนี้แล้วด้วย ก็เลยได้จังหวะย้ายเสียเลย

คำถามแรกที่เจอคือ จะย้ายไปอยู่ที่ไหน ซึ่งตัวเลือกยอดฮิตก็มี 3 ยี่ห้อใหญ่ คือ EC2 ของ Amazon, Azure ของ Microsoft หรือว่า GCE ของ Google แต่ละเจ้าก็มีข้อดีข้อเสียต่างกันไป สุดท้ายก็เลือกเอา EC2 ของ Amazon เพราะเคยใช้มาก่อนแล้ว คุ้นเคยที่สุด ขี้เกียจอ่าน document เพิ่มเติม

เนื่องจากว่าเป็น blog เล็กๆ คนเข้าไม่เยอะ เลือกใช้เครื่องแบบถูกสุดของ Amazon ก็น่าจะพอ โดยเครื่องที่ใช้เป็น EC2 แบบ micro instance รัน Ubuntu 12.04 LTS / Nginx / PHP-FPM / MariaDB ตามมาตรฐานทั่วไป

หลังจากย้ายโฮสติ้งมาที่ใหม่แล้ว ก็ถือโอกาสเปลี่ยน theme ใหม่ไปด้วยเลย ทีแรกก็หา theme ที่เป็น responsive แบบ minimal นิดนึงแต่ไม่เจอถูกใจสักอัน เลยตัดสินใจทำเอง โดยใช้ theme Bones เป็นพื้นฐาน หน้าตาก็ลอกๆ มาจากหลายที่ เอามาปรับเอา

ตอนนี้ถ้าเปิดดูบน PC / Tablet / Mobile ก็ควรจะดูดีหมดทุก device ละ (ทดสอบบน Firefox / Chrome / Mobile Safari – แต่บน IE อาจจะพัง เพราะไม่ได้ลอง)

2110327 Algorithm Design, first semester, 2556

Slides

We use as our main slide but I will also use some other slides from previous years as well.

Lecture Log

  • (2013-06-03) Introduction, Stable Marriage Problem.

  • (2013-06-05) Special Lecture from Dr. Damrong Guoy.

  • (2013-06-10) Finished the Stable Marriage Problem. We talked about Pseudo-code. We will use Pseudo-code as a medium for communication. Covered the main slide pp. 25–31. The classroom Exercise was to solve the following problem.

    “Sum of Four Elements Problem”
    Input: four arrays of integers, each of size N. a[1..n],b[1..n],c[1..n],d[1..n] and a number X.
    Output: Either “Yes” or “No”. It will be “Yes” if and only if there exists a[i]+b[j]+c[k]+d[l] == x.

  • (2013-06-12) Showed the solution of the above problem in O(N^2), using hash or O(N^2 lg N) using binary search or AVL Tree. Intro to Analysis. What is the goal of analysis? Why we measure the growth of the function instead of the actual time. We can measure by either experiment (write a program and count the number of executed basic command), or by analysis (derive a function that describes the number of executed command and analyze the function). Done a classroom exercise. Cover the main slide pp. 63 – 75

    The solution of the Sum of Four Elements is as follow

  • (2013-06-17) Revisit the asymptotic notation (O,\Theta,\Omega, etc.) Covered the main slide pp. 79–97.

  • (2013-06-19) We finished the Analysis of Algo with the Master Method. We covered the main slide pp. 76–78 and 98–109. Classroom exercise is to analyze this

  • (2013-06-24) Introduction to Divide and Conquer (D&C). Examples are a binary search and a sequential search, both in recursive mode. We talked about Maximum Contiguous Sum of Subsequence. Classroom exercise is to write N^3 or N^2 of the MCS and to analyze another solution. We covered the slide from 2010

The pseudo-code of the solutions are as follow

  • (2013-06-26) We had a quiz for 30 minutes on Analysis. Merge Sort are covered. See this page for the code of Merge Sort.

  • (2013-07-01) Quick sort. x^m mod k, Closest pair, Strassen

  • (2013-07-03) The rest of sorting, shell sort.

  • (2013-07-08 and 2013-07-10) Class skipped, I went to www.IOI2013.org

  • (2013-07-15) Introduction to Dynamic Programming, Memoization. Fibonacci, C(n,r)

  • (2013-07-17) SUPER MAKE UP CLASS!!! We start at 8.00 until 12.00. at 9.00, we also had a quiz. We talked about dynamic programming. Longest Common Subsequence, 01-Knapsack, Matrix Chain Multiplication. In-class exercise is lots of memoization of the said algorithm.

  • (2013-07-31) Class skipped. Sorry guys.

  • (2013-08-05) After a loooong break and midterm, we met at last. Introduction to graph algorithm. BFS. In class exercise is find a “friend-of-friend” and “freind-of-freind-of-friend….”.

  • (2013-08-07) Finished the BFS and talked about DFS. There is a homework to modify DFS to detect a cycle in a graph.

  • (2013-08-14) Topological Sorting, Strongly Connected Component.

  • (2013-08-19) Prim’s and Kruskal’s. Disjoint Set. In-class exercise is to write Prim’s before seeing the actual implementation.

  • (2013-08-21) Cut Property. Greedy Algorithm. Activity Selection.

  • (2013-08-26) Shortest Path. Dijkstra’s Algorithm

  • (2013-08-28) More on Dijkstra’s Algorithm. Negative weight edge, Bellman-Ford

  • (2013-09-02) Bellman-Ford, Floyd-Warshall

  • (2013-09-04) State Space Search. Basic Combinatorial problem. Sum-of-subset problem.

  • (2013-09-09) N-Queen, Permutation, BFS and DFS. In-class exercise is to write n-queen.

File attachments: 

new OpenVPN

Tags: 

มีเพิ่มเติม 2 บรรทัด ให้ push routing ไปยัง client บรรทัดแรกบอกว่าทั้งหมดในจุฬาให้ใช้ผ่าน vpn บรรทัดที่สองบอกว่าต่อเข้า server ovpn ผ่านทาง network ปรกติ

push route 161.200.0.0 255.255.0.0
push route remote_host 255.255.255.255 net_gateway 1

Desktop linux again

openSUSE 12.3 and openSUSE 13.1

Fix YaST2 and rvm

YaST is ported to ruby and out-of-the-box DOES NOT work with rvm. I have to

gem install fast_gettext

to fix this.

network not working

check this http://forums.opensuse.org/english/get-technical-help-here/network-inter…
Stop the service first

systemctl is-active network.service && \
systemctl stop network.service

Enable NetworkManager

systemctl --force enable NetworkManager.service

Enable the service again

systemctl start network.service

repositories

  • add packman repositories

package

  • via communities repositories (PackMan, etc.)

sudo zypper install git subversion mercurial gcc-c++ kate emacs gvim gnucash filezilla krusader texlive gimp inkscape wine smb4k artha vlc comix keepass dropbox wine wine-mp3 virtualbox sysstat

  • Other packages
    • codeblock
    • steam
    • synergy

VirtualBox

Copy the file /usr/lib/udev/rules.d/60-vboxdrv.rules to /etc/udev/rules.d/, open it with a text editor, and remove the leading ‘#’s from the last 4 lines below the comment in line #2. This is needed to give you the needed permissions, but is disabled by default in the openSUSE package because of security concerns.
It should work then after a reboot.

LibreOffice 4

zypper ar -f http://download.opensuse.org/repositories/LibreOffice:/Stable/openSUSE_12.3/LibreOffice:Stable.repo
zypper in libreoffice -r "Stable Version of LibreOffice (openSUSE_12.3)"

my widget looks ugly, have to install package libreoffice-gnome

Codec

http://opensuse-guide.org/codecs.php

Font Config

ต้องใช้ไฟล์ ~/.fonts.conf (มีอยู่ใน hg linux-file แล้ว)
อย่าลืม ln -s linux-file/.fonts.conf

อย่าลืมติดตั้ง font ต่าง ๆ อ่าน http://www.binarytides.com/gorgeous-looking-fonts-ubuntu-linux/

Mouse Problem

  • vi /etc/X11/xorg.conf.d/50-synaptics.conf
  • add
        Option "VertResolution" "100"
        Option "HorizResolution" "65"
        # disable synaptics driver pointer acceleration
        Option "MinSpeed" "3"
        Option "MaxSpeed" "20"
        # tweak the X-server pointer acceleration
        #Option "AccelerationProfile" "2"
        Option "AdaptiveDeceleration" "1"
        Option "ConstantDeceleration" "16"
        Option "VelocityScale" "32"

to the InputClass of synaptics, making the section become

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
# This option is recommend on all Linux systems using evdev, but cannot be
# enabled by default. See the following link for details:
# who-t.blogspot.com/2010/11/how-to-ignore-configuration-errors.html
        MatchDevicePath "/dev/input/event*"
        Option  "HorizScrollDelta"      "0"
# enable tap-to-click as default (bnc#722457)
        Option "TapButton1" "1"
        Option "TapButton3" "2"
        Option "TapButton2" "3"
        Option "VertResolution" "100"
        Option "HorizResolution" "65"
        # disable synaptics driver pointer acceleration
        Option "MinSpeed" "3"
        Option "MaxSpeed" "20"
        # tweak the X-server pointer acceleration
        #Option "AccelerationProfile" "2"
        Option "AdaptiveDeceleration" "1"
        Option "ConstantDeceleration" "16"
        Option "VelocityScale" "32"
 
EndSection

Samba

Set the Promp

use http://www.kirsle.net/wizards/ps1.html
read this as well http://www.fvue.nl/wiki/Bash:_How_to_change_tab_and_window_title_of_console
check this two for 256 colors as well
* http://www.askapache.com/linux/bash-power-prompt.html#256_Color_Prompt_C…
* http://www.logilab.org/blogentry/20255
* http://misc.flogisoft.com/bash/tip_colors_and_formatting

the current prompt is

function EXT_COLOR () { echo -ne "\[\033[38;5;$1m\]"; }
function EXT_BGCLR () { echo -ne "\[\033[48;5;$1m\]"; }
export PS1="`EXT_COLOR 204`\u`EXT_COLOR 84`@`EXT_COLOR 141`\h`EXT_COLOR 84`:`EXT_COLOR 208`\w`EXT_COLOR 84`>\[\033[0m\]"

mount ntfs

/dev/disk/by-id/ata-SAMSUNG_MZ7PC256HAFU-000L7_S0Y5NSACC01704-part3 /dae        ntfs-3g rw,user,users,nosuid,nodev,relatime,uid=1000,gid=users,fmask=003,dmask=002,default_permissions,allow_other,exec 0 0

Pimp my Firefox

I love my KDE in black but firefox won’t agree with this. Create this file ~/.mozilla/firefox/XXXX.default/chrome/userContent.css

input {
border: 2px inset white ;
background-color: white ;
color: black ;
}
 
textarea {
border: 2px inset white ;
background-color: white ;
color: black ;
}
 
select {
border: 2px inset white;
background-color: white;
color: black;
}
 
input[type="radio"],
input[type="checkbox"] {
border: 2px inset white ;
background-color: white;
color: ThreeDFace l
}
 
*|*::-moz-radio {
background-color: white;
}
 
button,
input[type="reset"],
input[type="button"],
input[type="submit"] {
border: 2px outset white;
background-color: #eeeeee;
color: black;
}
 
body {
background-color: white;
color: black;
display: block;
margin: 8px;
}

Misc.

HG repo

.hgrc เริ่มต้น

[ui]
username=Nattee Niparnan <nattee@gmail.com>
 
[hostfingerprints]
isl2-dev.cp.eng.chula.ac.th=26:7f:97:cc:de:4c:fa:b8:60:3b:31:96:62:3a:5d:02:00:7f:ce:ed
 
[auth]
isl2-dev.prefix=https://isl2-dev.cp.eng.chula.ac.th/hg
isl2-dev.username=ไม่บอก
isl2-dev.password=ไม่บอก

Back in business!

ไม่ได้เขียน blog มาปีนึง ถือโอกาสวันขึ้นปีใหม่ 2013 ปลุกชีพ blog ขึ้นมาอีกสักครั้ง

คราวนี้ย้ายโฮสต์จาก Clnox มาเป็น Site5 เลยอัพเกรดเป็น Drupal 7 ไปด้วยในตัว แต่เนื่องจากเว็บเดิมมี custom module กับ theme ที่รันบน Drupal 6 เป็นหลัก บวกกับความขี้เกียจ port (จริงๆ คือเขียน module บน Drupal ไม่เป็นแล้ว เพราะไม่ได้ทำนานจัด T_T) เลยกะว่า ทำใหม่ง่ายกว่า แล้วค่อย import เว็บเดิมมาเก็บไว้ที่ archive.suksit.com

จังหวะนี้เลยเอาระบบ 3rd party comment management มาลองใช้ไปด้วยในตัว เห็นเพื่อนหวูดใช้ Disqus อยู่ เลยเลือกใช้ Livefyre เพื่อความแปลกใหม่ ^^

โปรดติดตามตอนต่อไป :)

BarCamp Bangkok 5

เพื่อไม่เป็นการละเลยกฎของ BarCamp ข้อสอง “You do blog about BarCamp” ก็ขอบันทึกลง blog ไว้สักหน่อย

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

  • ไม่เลี้ยงข้าว
  • ไม่มีแจกเสื้อ
  • ไม่มีเน็ตฟรี

บวกกับการจำกัดจำนวนคนเข้าร่วม (เนื่องจากสถานที่ไม่ใหญ่) บังคับให้คนลงทะเบียนต้องระบุหัวข้อที่จะพูดก่อนวันงาน ทำให้ BarCamp คราวนี้เป็นงานที่มีหัวข้อน่าสนใจเยอะกว่าครั้งที่ผ่านๆ มาอย่างชัดเจน

session ที่ได้เข้าก็มีเรื่อง Hadoop / OpenStreetMap / Websocket / MeshBKK / CDN / Manycore System แล้วก็พูดเองไป session นึง

ตอนแรกที่ลงทะเบียน กะว่าจะพูดเรื่อง PHP Microframework แต่ตอนหลังเปลี่ยนใจมาพูดเรื่อง Firefox OS แทน สไลด์ประกอบก็ตามด้านล่าง

ด้วยรูปแบบที่จำกัดคนเข้าร่วมสกรีนคนประเภท มาหาเพื่อน/มาฟังคนดัง/มาเอาเสื้อฟรี ออกไป ทำให้บรรยากาศในงานเอื้อต่อการพูดคุยแลกเปลี่ยนระหว่างคนที่มาร่วมงานด้วยความสนใจจริงๆ ไม่ค่อยมีจับกลุ่มคุยเฉพาะเพื่อนตัวเอง

Free Beer

ถ้าจัดงานในมหาลัย ก็ไม่สามารถมีอะไรแบบนี้ได้

ก็ขอบคุณคณะจัดงานทุกท่าน ที่ทำให้ BarCamp Bangkok กลับมาสนุกอีกครั้ง

Data Structure, second semester 2012

Mini Fan for Raspberry Pi

I buy tiny fan that should be used with SoC on Raspberry Pi. Unfortunately, it is not included heat sink and no matching power connector in board.

Connect Bluetooth module to Raspberry Pi

I try to connect Bluetooth module (not USB dongle) to Raspberry Pi’s UART (Tx, Rx). Only LED on Bluetooth module blinking. It seems does not work. My PC that connects USB Bluetooth dongle sees Bluetooth device that connect to Raspberry Pi but terminal program in that PC cannot work.

Person name around the world

This is very interesting. See also Arabic name

2110327 Algorithm Design, first semester, 2555


RDC 2013

Programming iRobot Create

#include <stdio.h>
#include <iostream>
 
#include "RobotConnector.h"
 
#include "cv.h"
#include "highgui.h"
 
using namespace std;
 
#define Create_Comport "COM4"
 
bool isRecord = false;
 
int main()
{
    CreateData  robotData;
    RobotConnector  robot;
 
    ofstream    record;
    record.open("../data/robot.txt");
 
    if( !robot.Connect(Create_Comport) )
    {
        cout << "Error : Can't connect to robot @" << Create_Comport << endl;
        return -1;
    }
 
    robot.DriveDirect(0, 0);
    cvNamedWindow("Robot");
 
 
    while(true)
    {
        cvWaitKey(30);
        double vx, vz;
        vx = vz = 0;
 
 
        if (robotData.bumper[0]) {
            cout << "bump left" << endl;
        }
        if (robotData.bumper[1]) {
            cout << "bump right" << endl;
        }
 
 
        double vl = vx - vz;
        double vr = vx + vz;
 
        int velL = (int)(vl*Create_MaxVel);
        int velR = (int)(vr*Create_MaxVel);
 
        int color = (abs(velL)+abs(velR))/4;
        color = (color < 0) ? 0 : (color > 255) ? 255 : color;
 
        int inten = (robotData.cliffSignal[1] + robotData.cliffSignal[2])/8 - 63;
        inten = (inten < 0) ? 0 : (inten > 255) ? 255 : inten;
 
        //cout << color << " " << inten << " " << robotData.cliffSignal[1] << " " << robotData.cliffSignal[2] << endl;
 
        robot.LEDs(velL > 0, velR > 0, color, inten);
 
        if( !robot.DriveDirect(velL, velR) )
            cout << "SetControl Fail" << endl;
 
        if( !robot.ReadData(robotData) ) {
            //cout << "ReadData Fail" << endl;
        }
 
        if( isRecord )
            record << robotData.cliffSignal[0] << "\t" << robotData.cliffSignal[1] << "\t" << robotData.cliffSignal[2] << "\t" << robotData.cliffSignal[3] << endl;
 
        cout << "Robot " << robotData.cliffSignal[0] << endl;
    }
 
    robot.Disconnect();
 
    return 0;
}
File attachments: 
Attachment Size
iRobot Create.pdf 3 MB
Hl-340.exe 219.32 KB
AutoRDC2012_V2.rar 423.15 KB
State_Machine.pptx 63.06 KB
AutoRDC2012_V3.rar 422.18 KB
RDC2013_v1_main.cpp 3.42 KB

Trip 2011 – part 18

เป็นการดองบล็อกยาวข้ามปีแบบที่ไม่เคยมีมาก่อน ในที่สุดก็กลับมาเขียนเรื่องเที่ยวของวันเกือบสุดท้ายในลอนดอนต่อแล้ว

สถานที่แรกที่ไปเที่ยววันนี้คือ Tate Britain (คนละอันกับ Tate Modern แต่อยู่ในเครือเดียวกัน) วิธีเดินทางง่ายๆ ก็นั่ง tube ไปลงสถานี Plimlica แต่วันนี้ลองนั่งรถบัสชมเมืองดูบ้าง

ร้านขายของเล่น Dark Sphere ชื่อเท่ดี มีการ์ดเกมขายด้วย

โฆษณาเบียร์ Heineken บอกว่ากินไวน์มันไม่สนุกและบ้าเท่ากินเบียร์หรอก

ในที่สุดก็มาถึงด้านหน้าของ Tate Britain

The Home of British Art

ผลงานที่จัดแสดงภายในก็อย่างที่ชื่อบอกไว้ นั่นคือ Home of British Art เน้นงานศิลปะของศิลปินอังกฤษเป็นหลัก ซึ่งถ้าไม่ค่อยรู้จักศิลปินอังกฤษ (เช่น Blake, Turner, Constable) ดูแล้วอาจจะไม่ค่อยอินเท่าไหร่

ดูงานที่ Tate Britain เสร็จแล้วเดินออกมาจะเจอกับจุดจอดจักรยานเช่า วันนี้ก็ลองปั่นจักรยานดูสักหน่อย โดยการใช้งานก็เดินไปจิ้มที่จุดจอดจักรยาน เสียบบัตรเครดิตหรือเดบิตเข้าไป จากนั้นเครื่องจะให้รหัสปลดล็อกจักรยานมา เพื่อเอาไปปลดล็อก เอาจักรยานมาขี่ได้ โดยจะเสียค่าบริการครั้งแรก 1 ปอนด์ต่อ 24 ชั่วโมง และสามารถใช้งานจักรยานได้ 30 นาที ถ้าเอาจักรยานไปเก็บที่จุดจอด (ซึ่งมีกระจายอยู่ทั่วเมือง) ภายใน 30 นาทีก็ไม่เสียอะไรเพิ่ม (ระบบจะหักเงินจากบัตรเครดิต/เดบิตของเรา) ถ้าเกิดว่าเราเอาจักรยานไปเก็บแล้ว กดรหัสเอาออกมาใหม่ ภายใน 24 ชั่วโมงก็จะไม่เสียค่าบริการ ซึ่งถ้า manage ดีๆ แล้ว เราสามารถปั่นจักรยานได้ทั้งวันโดยเสียค่าเช่าแค่ 1 ปอนด์เท่านั้น (คือต้องเอาจักรยานไป dock ที่จุดจอดทุกๆ 30 นาที) ก็เป็นอีกทางเลือกให้คนชอบปั่นจักรยาน ซึ่งถนนหนทางในลอนดอนก็ทำออกมาค่อนข้างเป็นมิตรกับนักปั่นอยู่ และไม่มีรถราใหญ่ๆ ให้น่ากลัว

อีกปัจจัยคือ การเดินทางไปแหล่งท่องเที่ยวถัดไป คือ Imperial War Museum มันเดินทางลำบาก (วันอาทิตย์ tube บางเส้นทางปิดทำการ ถ้าจะนั่งก็ต้องอ้อมเยอะ)

ปั่นข้ามแม่น้ำเทมส์มาได้สักพัก ก็มาถึง Imperial War Museum

ด้านหน้า Imperial War Museum

Imperial War Museum เป็นพิพิธภัณฑ์ที่จัดแสดงงานเกี่ยวกับสงครามในยุคสมัยก่อน ที่เน้นเป็นหลักก็ส่วนของสงครามโลกครั้งที่สอง

ส่วนหนึ่งจากกำแพงเบอร์ลิน

ด้านในพิพิธภัณฑ์แบ่งเป็นหลายชั้น โถงด้านหน้าเป็นส่วนแสดงอาวุธสงครามทั้งรถถัง และเครื่องบินรถแบบต่างๆ ส่วนด้านในจะเป็นส่วนแสดงประวัติศาสตร์ของสงคราม

เครื่องบินรบสมัยสงครามโลก

ส่วนที่น่าสะเทือนใจมากๆ ในการชมพิพิธภัณฑ์นี้คือ ส่วนแสดงงานจะค่อยๆ เล่าถึงความเป็นมาของสงครามโลกครั้งที่สอง แสดงให้เห็นความโหดร้ายของสงครามและ build คนดูไปจนกระทั่งถึงห้องใหญ่ที่เป็น climax ของงานคือห้องที่พูดถึงค่ายกักกันของนาซี ดูแล้วขนลุกมากๆ

กว่าจะออกมาจาก War Museum ก็เย็น ซึ่งตอนค่ำวันนี้มีภารกิจต้องไปดูคอนเสิร์ตอีกงานหนึ่ง ซึ่งจองตั๋วไว้ตั้งแต่ตอนอยู่เมืองไทยแล้ว นั่นคือคือคอนเสิร์ตโปรโมตอัลบั้ม Write About Love ของวง Belle and Sebastian

Belle and Sebastian เป็นวงอินดี้ชื่อดังจาก Glasglow ซึ่งมีฐานแฟนเพลงในบ้านเราออกจะเยอะอยู่พอสมควร แต่ก็ไม่เคยมีวี่แววว่าจะมาแสดงสดในย่านเอเชียตะวันออกเฉียงใต้ ดังนั้น การเดินทางมาดูถึงลอนดอนนี่ก็ถือว่าเป็นโอกาสที่หาได้ยากอยู่

ซื้อตั๋วล่วงหน้าตั้งแต่ก่อนจะมา ได้ในราคาตั๋ว 2 ใบ 54.5 ปอนด์ สถานที่แสดงก็เล่นที่ Roundhouse ที่เดียวกับที่ดู Explosions in the Sky

คอนเสิร์ตนี้ซื้อตั๋วล่วงหน้าแต่เนิ่นๆ เลยได้ที่ค่อนข้างดี เกือบจะติดขอบเวทีเลยทีเดียว

สินค้า Merchandise หน้างาน ไม่ได้ซื้อเพราะว่ามันแพง T-T

วงเปิด ชื่ออะไรไม่รู้ จำไม่ได้

Belle and Sebastian มาแล้ว

เห็น Staurt Murdoch กันชัดๆ

คอนเสิร์ตจบ แก้วเบียร์เกลื่อน

เพลงส่วนใหญ่ที่เล่นจะเน้นไปที่อัลบั้มล่าสุดกับอัลบั้มแรก ดูจบแล้วรู้สึกคุ้มค่าตั๋วมาก ไม่ต้องมาหวังลมๆ แล้งๆ ว่าวงจะมาเล่นแถบเอเชียตะวันออกเฉียงใต้นี่เมื่อไหร่

คอนเสิร์ตจบก็นั่ง tube กลับที่พัก ในสถานีเจอป้ายโฆษณาคอนเสิร์ต High Voltage น่าดูดีเหมือนกัน มีวงที่อยากดูหลายวง แต่ก็ไม่มีโอกาสแหละนะ เพราะอีกไม่กี่วันก็ต้องกลับไทยแล้ว

โปสเตอร์โฆษณาคอนเสิร์ต High Voltage

ดองไว้นานมาก ตอนถัดไปตอนสุดท้ายละ

ลิงก์ตอนเก่าๆ

Drupal feed importer

Recently, I have a chance to use drupal commerce with feed importer. Feed importer is very good because I can easily transfer data from MySQL to the website.

However, sometime the import process crash and I am stuck with importing page with xx% status and nothing can be done via UI.

To fix this, I have to manually edit the status of the import. Basically, all I have to do is to

> update feeds_source set state = ‘b:0;’;
update feeds_source set fetcher_result=’b:0;’;

Check this .

07-huffmanTree.c

#include <stdio.h>
#include <stdlib.h>
 
//-------------------------------------------------------
struct SHuffmanNode;
typedef struct SHuffmanNode *HuffmanNode;
 
typedef HuffmanNode DType;
int cmp(DType d1, DType d2);
char *toString(char *buf, DType d);
//-------------------------------------------------------
struct SBHeap {
    DType *data;
    int length;
    int size;
};
typedef struct SBHeap *BHeap;
//---------------------------------------------
BHeap newBHeap(int length) {
    BHeap h = (BHeap) malloc(sizeof(struct SBHeap));
    h->data = (DType *) malloc(length * sizeof(DType));
    h->length = length;
    h->size = 0;
    return h;
}
void freeBHeap(BHeap h) {
    free(h->data);
    free(h);
}
//---------------------------------------------
int sizeOfBHeap(BHeap h) {
    return h->size;
}
int isEmptyBHeap(BHeap h) {
    return h->size == 0;
}
int isFullBHeap(BHeap h) {
    return h->size == h->length;
}
//---------------------------------------------
void printBHeap(BHeap h) {
    printf("heap:[ ");
    int i;
    char buf[100];
    for (i=0; i<h->size; i++) {
        printf("%s ", toString(buf, h->data[i]));
    }
    printf("]\n");
}
//---------------------------------------------
void addBHeap(BHeap h, DType x) {
    if (isFullBHeap(h)) {
        printf("add : heap is full\n");
        exit(1);
    } else {
        int k = h->size;
        while( k > 0 ) {
            int p = (k-1)/2;
            if (cmp(h->data[p],x) <= 0) break;  // min heap
            h->data[k] = h->data[p];
            k = p;
        }
        h->data[k] = x;
        h->size++;
    }
}
void _heapify(BHeap h, int k) {
    int c;
    while ( (c = 2*k+1) < h->size) {
        if (c+1 < h->size && cmp(h->data[c+1], h->data[ c ]) < 0) c++;
 
        if (cmp(h->data[ c ],h->data[k]) >= 0) break;
        DType t = h->data[k];
        h->data[k] = h->data[ c ];
        h->data[ c ] = t;
        k = c;
    }
}
DType removeMinBHeap(BHeap h) {  // min heap
    if (isEmptyBHeap(h)) {
        printf("heap is empty !\n");
        exit(1);
    } else {
        DType min = h->data[0];
        h->data[0] = h->data[h->size-1];
        _heapify(h, 0);
        h->size--;
        return min;
    }
}
//---------------------------------------------
struct SHuffmanNode  {
    char    c;
    int     freq;
    HuffmanNode left;
    HuffmanNode right;
};
//-------------------------------------------------------
int cmp(HuffmanNode n1, HuffmanNode n2) {
    if (n1->freq == n2->freq) return 0;
    return (n1->freq < n2->freq) ? -1 : 1;
}
char *toString(char *buf, HuffmanNode n) {
    sprintf(buf, "[%c:%d]", n->c, n->freq);
    return buf;
}
//---------------------------------------------
HuffmanNode newHuffmanNode(char c, int f, HuffmanNode left, HuffmanNode right) {
    HuffmanNode n = (HuffmanNode) malloc(sizeof(struct SHuffmanNode));
    n->c = c;
    n->freq = f;
    n->left = left;
    n->right = right;
    return n;
}
void freeHuffmanNode(HuffmanNode n) {
    free(n);
}
HuffmanNode buildHuffmanTree(char c[], int f[], int n) {
    BHeap h = newBHeap(n);
    int i;
    for (i = 0; i < n; i++) {
        addBHeap(h, newHuffmanNode(c[i], f[i], NULL, NULL));
    }
    for (i = 0; i < n - 1; i++) {
        HuffmanNode n1 = removeMinBHeap(h);
        HuffmanNode n2 = removeMinBHeap(h);
        addBHeap(h, newHuffmanNode('*', n1->freq + n2->freq, n2, n1));
    }
    return removeMinBHeap(h);
}
 
void printCodesR(HuffmanNode r, char codes[], int k) {
    if (r->left == NULL && r->right == NULL) {
        codes[k] = '\0';
        printf("%c : %s\n", r->c, codes);
    } else {
        codes[k] = '0'; printCodesR(r->left, codes, k+1);
        codes[k] = '1'; printCodesR(r->right, codes, k+1);
    }
}
void printCodes(HuffmanNode r) {
    char codes[40];
    printCodesR(r, codes, 0);
}
//---------------------------------------------------
void visit(HuffmanNode r) {
    char buf[100];
    printf("%s ", toString(buf, r));
}
void inorder(HuffmanNode r) {
    if (r == NULL) return;
    inorder(r->left);
    visit(r);
    inorder(r->right);
}
void preorder(HuffmanNode r) {
    if (r == NULL) return;
    visit(r);
    preorder(r->left);
    preorder(r->right);
}
void postorder(HuffmanNode r) {
    if (r == NULL) return;
    postorder(r->left);
    postorder(r->right);
    visit(r);
}
//-----------------------------------------------------
int main(int argc, char *argv[]) {
    int n = 13;
//    char c[] = {'1', '2', '3', '4', '5', '6', '7',
//                '8', '9', 'A', 'B', 'C', 'D'};
//    int  f[] = {24, 16, 15, 11, 8, 4, 4, 4, 4, 4, 2, 2, 2};
    char c[] = {'A', 'B', 'C', 'D', 'E', 'F'};
    int f[] = {40, 21, 15, 14, 8, 2};
    n = 6;
    HuffmanNode r = buildHuffmanTree(c, f, n);
    printf("inorder   = "); inorder(r); printf("\n");
    printf("preorder  = "); preorder(r); printf("\n");
    printf("postorder = "); postorder(r); printf("\n");
    printCodes(r);
    return 0;
}

05-linkedlist.c

#include <stdio.h>
#include <stdlib.h>
 
//-------------------------------------------------------
typedef float DType;
int cmp(DType d1, DType d2);
char *toString(char *buf, DType d);
//-------------------------------------------------------
int cmp(float d1, float d2) {
    if (d1 == d2) return 0;
    return (d1 < d2) ? -1 : 1;
}
char *toString(char *buf, float d) {
    sprintf(buf, "%6.2f", d);
    return buf;
}
//-------------------------------------------------------
struct SLinkedNode;
typedef struct SLinkedNode *LinkedNode;
 
struct SLinkedNode  {
    DType data;
    LinkedNode next;
};
LinkedNode newLinkedNode(DType d, LinkedNode next) {
    LinkedNode n = malloc(sizeof(struct SLinkedNode));
    n->data = d;
    n->next = next;
    return n;
}
//----------------------------------------------------------
// Singly-linked list with header node
//----------------------------------------------------------
struct SLinkedList;
typedef struct SLinkedList *LinkedList;
 
struct SLinkedList  {
    int size;
    LinkedNode header;
};
LinkedList newLinkedList() {
    LinkedList list = malloc(sizeof(struct SLinkedList));
    list->size = 0;
    list->header = newLinkedNode(0, NULL);
    return list;
}
void freeLinkedList(LinkedList list) {
    LinkedNode q, p = list->header;
    while (p != NULL) {
        q = p->next;
        free(p);
        p = q;
    }
    free(list);
}
//---------------------------------------------------------
int sizeOfLinkedList(LinkedList list) {
    return list->size;
}
int isEmptyLinkedList(LinkedList list) {
    return list->size == 0;
}
void printLinkedList(LinkedList list) {
    printf("LinkedList[ ");
    LinkedNode p = list->header->next;
    char buf[100];
    while( p != NULL) {
        printf("%s ", toString(buf, p->data));
        p = p->next;
    }
    printf("]\n");
}
//---------------------------------------------
LinkedNode _nodeOf(LinkedList list, int pos) { // if pos = -1 return header
    int i;
    LinkedNode p = list->header;
    for (i=-1; i<pos; i++) {
        p = p->next;
    }
    return p;
}
DType getLinkedList(LinkedList list, int pos) {
    if (pos < 0 || pos >= list->size) {
        printf("getLinkedList : out of range\n");
        exit(1);
    }
    LinkedNode p = _nodeOf(list, pos);
    return p->data;
}
LinkedNode _addAfterLinkedNode(LinkedList list, LinkedNode p, DType x) {
    p->next = newLinkedNode(x, p->next);
    list->size++;
    return p->next;
}
void addLinkedList(LinkedList list, DType x, int pos) {
    if (pos < 0 || pos > list->size) {
        printf("addLinkedList : out of range\n");
        exit(1);
    }
    LinkedNode p = _nodeOf(list, pos-1);
    _addAfterLinkedNode(list, p, x);
}
void addFirstLinkedList(LinkedList list, DType x) {
    addLinkedList(list, x, 0);
}
void addLastLinkedList(LinkedList list, DType x) {
    addLinkedList(list, x, list->size);
}
int indexOfLinkedList(LinkedList list, DType x) {  // -1 = notfound
    LinkedNode p = list->header->next;
    int i;
    for (i=0; i<list->size; i++) {
        if (cmp(p->data, x) == 0) return i;
        p = p->next;
    }
    return -1;
}
DType removeLinkedList(LinkedList list, int pos) {
    if (pos < 0 || pos >= list->size) {
        printf("removeLinkedList : out of range\n");
        exit(1);
    }
    LinkedNode p = _nodeOf(list, pos-1);
    LinkedNode n = p->next;
    DType x = n->data;
    p->next = n->next;
    free(n);
    list->size--;
    return x;
}
/*-----------------------------------------
LinkedNode reverse(LinkedNode p) {
    if (p == NULL) return NULL;
    if (p->next == NULL) return p;
    LinkedNode q = p->next;
    LinkedNode r = reverse(p->next);
    q->next = p;
    p->next = NULL;
    return r;
}
void reverseLinkedList(LinkedList list) {
    list->header->next = reverse(list->header->next);
}
-------------------------------------------
*/
void reverseLinkedList(LinkedList list) {
    LinkedNode p1 = NULL;
    LinkedNode p2 = list->header->next;
    LinkedNode p3;
    while(p2 != NULL) {
        p3 = p2->next;
        p2->next = p1;
        p1 = p2;
        p2 = p3;
    }
    list->header->next = p1;
}
int equalLinkedList(LinkedList list1, LinkedList list2) { // 0 = not equal, 1 = equal
    if (list1->size != list2->size) return 0;
    LinkedNode p1 = list1->header->next;
    LinkedNode p2 = list2->header->next;
    while (p1 != NULL && p2 != NULL) {
        if (cmp(p1->data,p2->data)!=0) return 0;
        p1 = p1->next;
        p2 = p2->next;
    }
    return p1 == NULL && p2 == NULL;
}
LinkedList createLinkedList(DType data[], int n) {
    LinkedList out = newLinkedList();
    int i;
    for (i=n-1; i>=0; i--) {
        addFirstLinkedList(out, data[i]);
    }
    return out;
}
//----------------------------------------------
int main(int argc, char *argv[]) {
    LinkedList q = newLinkedList();
    addLastLinkedList(q, 1);
    printLinkedList(q);
    addLastLinkedList(q, 2);
    printLinkedList(q);
    addLinkedList(q, 3, 0);
    printLinkedList(q);
    addFirstLinkedList(q, 9);
    printLinkedList(q);
    removeLinkedList(q, 1);
    printLinkedList(q);
    addLinkedList(q, 13, 1);
    printLinkedList(q);
    addLinkedList(q, 22, 3);
    removeLinkedList(q, 2);
    printLinkedList(q);
    reverseLinkedList(q);
    printLinkedList(q);
    //------------------------
    float data[] = {2,22,13,9};
    LinkedList copy = createLinkedList(data, 4);
    printf("copy + equals = %d\n", equalLinkedList(copy, q));
    int i, n;
    int correct = 1;
    for (i=0, n=sizeOfLinkedList(q); correct && i<n; i++) {
        int x = getLinkedList(q, i);
        if (indexOfLinkedList(q, x)!=i) correct = 0;
    }
    if (indexOfLinkedList(q, -999) != -1) correct = 0;
    printf("indexOf = %d\n", correct);
    return 0;
}

03-bheap.c, original

#include <stdio.h>
#include <stdlib.h>
 
//---------------------------------------------
typedef float DType;
int cmp(DType d1, DType d2);
char *toString(char *buf, DType d);
//-------------------------------------------------------
int cmp(float d1, float d2) {
    if (d1 == d2) return 0;
    return (d1 < d2) ? -1 : 1;
}
char *toString(char *buf, float d) {
    sprintf(buf, "%6.2f", d);
    return buf;
}
//-------------------------------------------------------
struct SBHeap {
    DType *data;
    int length;
    int size;
};
typedef struct SBHeap *BHeap;
//---------------------------------------------
BHeap newBHeap(int length) {
    BHeap h = (BHeap) malloc(sizeof(struct SBHeap));
    h->data = (DType *) malloc(length * sizeof(DType));
    h->length = length;
    h->size = 0;
    return h;
}
void freeBHeap(BHeap h) {
    free(h->data);
    free(h);
}
//---------------------------------------------
int sizeOfBHeap(BHeap h) {
    return h->size;
}
int isEmptyBHeap(BHeap h) {
    return h->size == 0;
}
int isFullBHeap(BHeap h) {
    return h->size == h->length;
}
//---------------------------------------------
void printBHeap(BHeap h) {
    printf("heap:[ ");
    int i;
    char buf[100];
    for (i=0; i<h->size; i++) {
        printf("%s ", toString(buf, h->data[i]));
    }
    printf("]\n");
}
//---------------------------------------------
void addBHeap(BHeap h, DType x) {
    if (isFullBHeap(h)) {
        printf("add : heap is full\n");
        exit(1);
    } else {
        int k = h->size;
        while( k > 0 ) {
            int p = (k-1)/2;
            if (cmp(h->data[p],x) <= 0) break;  // min heap
            h->data[k] = h->data[p];
            k = p;
        }
        h->data[k] = x;
        h->size++;
    }
}
// begin with an underscore -> private function
void _heapify(BHeap h, int k) {
    int c;
    while ( (c = 2*k+1) < h->size) {
        if (c+1 < h->size && cmp(h->data[c+1], h->data[geshifilter-c]) &lt; 0) c++;&#10;        if (cmp(h-&gt;data[c],h-&gt;data[k]) &gt;= 0) break;&#10;        DType t = h-&gt;data[k];&#10;        h-&gt;data[k] = h-&gt;data[c];&#10;        h-&gt;data[c] = t;&#10;        k = c;&#10;    }&#10;}&#10;DType removeMinBHeap(BHeap h) {  // min heap&#10;    if (isEmptyBHeap(h)) {&#10;        printf(&quot;heap is empty !\n&quot;);&#10;        exit(1);&#10;    } else {&#10;        DType min = h-&gt;data[0];&#10;        h-&gt;data[0] = h-&gt;data[h-&gt;size-1];&#10;        _heapify(h, 0);&#10;        h-&gt;size--;&#10;        return min;&#10;    }&#10;}&#10;//---------------------------------------------&#10;BHeap buildBHeap1(DType d[], int n) {&#10;    BHeap h = newBHeap(n);&#10;    int i;&#10;    for(i=0; i&lt;n; i++) {&#10;        h-&gt;data[i] = d[i];&#10;    }&#10;    h-&gt;length = n;&#10;    h-&gt;size = n;&#10;    for(i=n-1; i&gt;=0; i--) {&#10;        _heapify(h, i);&#10;    }&#10;    return h;&#10;}&#10;BHeap buildBHeap2(DType d[], int n) {&#10;    BHeap h = newBHeap(n);&#10;    int i;&#10;    for(i=0; i&lt;n; i++) {&#10;        addBHeap(h, d[i]);&#10;    }&#10;    return h;&#10;}&#10;//---------------------------------------------&#10;int main(int argc, char *argv[]) {&#10;    float d[] = {1,4,2,7,8,0,9};&#10;    int n = 7;&#10;    BHeap h = buildBHeap1(d, n);&#10;    int i;&#10;    printBHeap(h);&#10;    for (i=0; i&lt;n; i++) {&#10;        printf(&quot;removeMin : %6.2f : &quot;, removeMinBHeap(h));&#10;        printBHeap(h);&#10;    }&#10;    return 0;&#10;}&#10;

[/geshifilter-c]

02-queue.c, original

#include <stdio.h>
#include <stdlib.h>
 
//-------------------------------------------------------
typedef float DType;
int cmp(DType d1, DType d2);
char *toString(char *buf, DType d);
//-------------------------------------------------------
char *toString(char *buf, float d) {
    sprintf(buf, "%6.2f", d);
    return buf;
}
//-------------------------------------------------------
struct SQueue {
    DType *data;
    int length;
    int size;
    int front;
};
typedef struct SQueue *Queue;
//-------------------------------------
Queue newQueue(int length) {
    Queue q = (Queue) malloc(sizeof(struct SQueue));
    q->data = (DType *) malloc(length * sizeof(DType));
    q->length = length;
    q->size = 0;
    q->front = 0;
    return q;
}
void freeQueue(Queue q) {
    free(q->data);
    free(q);
}
//---------------------------------------------
int sizeOfQueue(Queue q) {
    return q->size;
}
int isEmptyQueue(Queue q) {
    return q->size == 0;
}
int isFullQueue(Queue q) {
    return q->size == q->length;
}
//---------------------------------------------
void printQueue(Queue q) {
    int i;
    printf("queue:[ ");
    int f = q->front;
    char buf[100];
    for (i=0; i<q->size; i++) {
        printf("%s ", toString(buf, q->data[f]));
        f = (f + 1) % q->length;
    }
    printf("]\n");
}
//---------------------------------------------
void enqueue(Queue q, DType x) {
    if (q->size == q->length) {
        int newlength = 2*q->length;
        DType *a = (DType *) malloc(newlength * sizeof(DType));
        int i;
        for (i=0; i<q->size; i++) {
            a[i] = q->data[q->front];
            q->front = (q->front + 1) % q->length;
        }
        free(q->data);
        q->data = a;
        q->length = newlength;
        q->front = 0;
    }
    int b = (q->front + q->size) % q->length;
    q->data[b] = x;
    q->size++;
}
DType dequeue(Queue q) {
    if (isEmptyQueue(q)) {
        printf("queue is empty !\n");
        exit(1);
    }
    DType x = q->data[q->front];
    q->front = (q->front + 1) % q->length;
    q->size--;
    return x;
}
//---------------------------------------------
int main(int argc, char *argv[]) {
    Queue q = newQueue(1);
    enqueue(q, 1);
    enqueue(q, 2);
    enqueue(q, 3);
    enqueue(q, 9);
    dequeue(q);
    enqueue(q, 11);
    enqueue(q, 12);
    dequeue(q);
    printQueue(q);
    return 0;
}

Speedtest TOT 3G

Speedtest TOT 3G 365 4.49/1.67Mbps seems high speed at Retro Live Cafe QSNCC.

AKB48 Twenty-Four Hours

ปีที่แล้วได้ข่าวว่าสาวๆ วง AKB48 กำลังจะออก photobook ในธีม “สาวแว่น” กำหนดออก 20 ธันวา รู้สึกว่าน่าสนใจดีแต่ตอนปลายปีดันวุ่นๆ แล้วก็ลืมไป

อาทิตย์ก่อนนึกขึ้นมาได้ว่ามันควรจะออกแล้ว ก็ไปส่องดูตามเว็บปรากฏว่ามีขายแล้วจริงๆ แต่ถ้าจะสั่งจากเว็บนอกอย่าง YesAsia ก็จะโดนค่าส่งแพงไปหน่อย โชคดีที่ร้านหนังสือ Kinokuniya บ้านเราเอาเข้ามาขายด้วย ราคา 1000 yen สั่งเข้ามาแล้วขาย 560 บาท บวกเพิ่มพอสมควรแต่ก็ยังถูกกว่าสั่งจากเมืองนอก (ถ้าค้นดูในเว็บซื้อออนไลน์ของ Kino จะขึ้นราคาไว้ที่ 483 บาท แต่จะมีค่าส่งอีก 150)

ปกหน้า

เนื้อใน

แว่น แว่น แว่น

ปกหน้า
ปกในด้านหน้า
Yuko Oshima
Minami Minegishi
Mariko Shinoda
แว่น x6
แว่นเท่
รวมหลายๆ คน
Tomomi Kasai
ปกในด้านหลัง

ใครสนใจก็ลองไปหาดูที่ Kinokuniya สาขา Central World ได้

00-array.c skeleton

#include <stdio.h>
#include <stdlib.h>
 
//--------------------------------------------------
int *newIntArray1D(int n, int initVal) {
    int *a = (int *) malloc(n*sizeof(int));
    int i;
    for (i=0; i<n; i++) {
        a[i] = initVal;
    }
    return a;
}
//--------------------------------------------------
int **newIntArray2D(int r, int c, int initVal) {
    // create 2D array of r rows and c column
    //return a;
}
//--------------------------------------------------
int *copyIntArray1D(int *a, int oldSize, int newSize) {
    // create another copy of a, having newSize members
    //return b;
}
//--------------------------------------------------
void printArray1D(int *a, int n) {
    int i;
    printf("[ ");
    for (i=0; i<n; i++) {
        printf("%d ", a[i]);
    }
    printf("]\n");
}
//--------------------------------------------------
void printArray2D(int **a, int r, int c) {
    //print 2D array
}
//--------------------------------------------------
int binarySearch(int d[], int n, int x) {
    // find the index of d[] that contains x, d must be sorted
    // return the index or -1 if not found
}
int sequentialSearch(int d[], int n, int x) {
    // find the index of d[] that contains x, d must be sorted
    // return the index or -1 if not found
}
//--------------------------------------------------
void swap(int d[], int a, int b) {
    int t = d[a];
    d[a] = d[b];
    d[b] = t;
}
//--------------------------------------------------
int max(int d[], int n) {
    // find the maximum value of d
}
int min(int d[], int n) {
    // find the minimum value of d
}
//--------------------------------------------------
int cmp(const void *a, const void *b) {
    return (const int *)a - (const int *)b;
}
void sortInt(int d[], int n) {
    qsort(d, n, sizeof(int), cmp);
}
//--------------------------------------------------
int main(int argc, char *argv[]) {
    int r = 3, c = 4;
    int **a = newIntArray2D(r, c, 0);
    int i, j;
    for (i=0; i<r; i++)
        for (j=0; j<c; j++)
            a[i][j] = i + j;
    printArray2D(a, r, c);
    return 0;
}

Here are some more usage example of Array data structure

1. max example

int main(int argc, char *argv[]) {
    //declare variable
    int n;
    int *a;
 
    //create array
    n = 3;
    a = newIntArray1D(n, 0);
    a[0] = -10;
    a[1] = -3;
    a[2] = -30;
 
    printf("max = %d\n",max(a,n));  // should display -3, not 0
    return 0;
}

2. search and min example

int main(int argc, char *argv[]) {
    //declare variable
    int n;
    int *a;
 
    //create array
    n = 5;
    a = newIntArray1D(n, 0);
    a[0] = 1;
    a[1] = -1;
    a[2] = 3;
    a[3] = 4;
    a[4] = -10;
 
    printf("Min = %d\n",min(a,n));  // should display -10
    printf("Found %d at position %d\n",2,sequentialSearch(a,n,2));  // should display -1
    printf("Found %d at position %d\n",4,sequentialSearch(a,n,4));  // should display 3
 
    sortInt(a,n);
    printArray1D(a,n);
    return 0;
}

struct example

#include <stdio.h>
#include <stdlib.h>
 
typedef struct Student_TAG {
    int year;
    int id;
    float gpax; // 4.00
} Student;
 
void printStudent(Student x) {
    printf("Year is %d\n",x.year);
    printf("ID is %d\n",x.id);
    printf("GPAX is %.2f\n",x.gpax);
}
 
void diffGPAX(Student a,Student b,Student *c) {
    (*c).gpax = (*c).gpax + (a.gpax + b.gpax) * 0.1;
}
 
Student createStudent(int year) {
    Student x;
    x.year = year;
    x.id = 0;
    x.gpax = 4.00;
    return x;
}
 
int main()
{
    int n = 100;
    Student *cp;
 
    cp = (Student *)malloc(n * sizeof(Student));
 
    cp[0].gpax = 10;
    cp[1].gpax = 10;
    cp[2].gpax = 0;
 
    diffGPAX(cp[0],cp[1],&cp[2]);
    printf("%.2f\n",cp[2].gpax);
 
 
    //printStudent(sukhum);
 
}

Reverse solution

#include <stdio.h>
#include <stdlib.h>
 
typedef int* ArrayOfInt;
 
// write reverse function here
void reverse(int n,ArrayOfInt *a) {
 
    int *t = (int *) malloc(n * sizeof(int));
 
    for (  int i = 0;i < n;++i) {
        t[i] = ( *a )[n - i -1];
    }
 
    *a = t;
    //This will, in fact, cause memory leak.
}
 
int main()
{
    int n;      // number of element
    ArrayOfInt a;     // array of integer
 
 
    //dynamic memory allocation
    scanf("%d",&n);
    a = (ArrayOfInt) malloc(n * sizeof(int));
 
    printf("Please enter %d integer(s).\n",n);
    for (int i = 0;i < n;++i) scanf("%d",&a[i]);
 
    reverse(n,&a);
 
    printf("Result are: ");
    for (int i = 0;i < n;++i) printf("%d ",a[i]);
 printf("\n");
}

2110497 Hands on Robotics, second semester, 2011

Information

Time: Every Wednesday, 13:00 – 16:00
Place: TBA.

Resource

  • First book to read, here. (updated)

Labs

Attachment Size
book1.pdf 69.66 MB
create-demo.rar 2.47 MB

bombik.com got Plagiarized (again)

เมื่อกี้ @bombik โทรมาบ่นว่าโดนก๊อปบทความอีกแล้ว(ความเดิม) คราวนี้มีคู่กรณีใหม่ โดยบทความที่โดนก๊อปเป็นเรื่องการสร้าง fan page ใน Facebook เข้าไปดูในหน้าเว็บที่เป็นปัญหาแล้วพบว่าบทความในเว็บดังกล่าวทำผิดสัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-ไม่ดัดแปลง 3.0 ประเทศไทย (BY-NC-ND) ที่ระบุไว้ในหน้าเว็บ bombik.com โดยไม่ระบุที่มาของบทความ และมีการแก้ไขดัดแปลงบทความให้แตกต่างไปจากต้นฉบับอีกด้วย

ขั้นตอนแรกคงทำเหมือนเดิมคือส่งเมล์ไปตามแอดเดรสที่ระบุไว้ในหน้าเว็บก่อน เนื้อหาของอีเมล์มีดังนี้

สวัสดีครับ

ผมพบว่ามีการนำข้อมูลเนื้อหาและรูปภาพจาก bombik.com ไปใช้ในเว็บ readyplanet.com โดยไม่มีการอ้างอิงที่มา ตาม URL ด้านล่างนี้ครับ

http://oxygen.readyplanet.com/Tips-And-Tricks/วิธีการทำ-FanPage-ใน-Facebook.html

โดยมีการดัดแปลงแก้ไขมาจาก http://bombik.com/node/299/วิธีการทำ-fanpage-ใน-facebook-และการทำปุ่ม-like

บทความทั้งหมดใน bombik.com ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-ไม่ดัดแปลง 3.0 ประเทศไทย (http://creativecommons.org/licenses/by-nc-nd/3.0/th/) โดยผู้ที่นำบทความไปใช้ต้องระบุที่มาของบทความด้วยเสมอ

ดังนั้นขอให้คุณแก้ไขบทความในเว็บ readyplanet.com ตามรายการข้างต้น โดยการระบุที่มาของบทความให้ถูกต้องด้วยครับ หรือหากไม่ต้องการอ้างอิงที่มา ทาง bombik.com ขอให้คุณลบบทความดังกล่าวออกทั้งหมด เนื่องจากเป็นการนำไปใช้โดยผิดสัญญาอนุญาตที่เจ้าของผลงานได้ระบุไว้ครับ

ศึกษิต
ผู้ดูแลระบบ และผู้ร่วมจัดทำเว็บไซต์ bombik.com

ส่งเมล์เสร็จ คลิกไปคลิกมาในเว็บ พบว่า oxygen.readyplanet.com น่าจะอยู่ในความรับผิดชอบของ คุณทรงยศ คันธมานนท์ “ผู้ก่อตั้งและพัฒนาเว็บไซต์สำเร็จรูป ReadyPlanet และเป็นผู้ริเริ่มทำนิตยสารออนไลน์ อย่าง Oxygen” เดี๋ยวเขียน blog นี้เสร็จ ว่าจะ tweet ไปแจ้งทาง @songyot ด้วย เผื่อจะได้รับความช่วยเหลือในการดำเนินการด้วยอีกทาง

ขอ quote ข้อความจาก ต้นกำเนิด Oxygen แหล่งอากาศสำหรับคนทำเว็บ มานิดนึง

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

ถ้านโยบายของทาง ReadyPlanet เป็นแบบข้อความข้างต้นจริง อาจจะถึงเวลาพิจารณาคุณภาพการทำงานของทีมงานแล้วล่ะ

UPDATE1: (8 Dec 2011 21:25)

ได้รับอีเมล์ตอบกลับอย่างไว รายละเอียดตามนี้

เรียนคุณศึกษิต

เจ้าหน้าที่ดำเนินการส่งเรื่องให้ฝ่ายที่เกี่ยวข้องและอยู่ระหว่างการตรวจสอบค่ะ หากมีความคืบหน้าประการใดจะแจ้งให้ทราบค่ะ

UPDATE2: (9 Dec 2011 11:16)

ได้รับอีเมล์อีกฉบับ แจ้งว่าจะระบุที่มาของข้อมูลไว้ท้ายบทความ

เรียน คุณศึกษิต

สวัสดีครับ ผมบุรินทร์ เกล็ดมณี ผู้บริหารของ ReadyPlanet.com ครับ

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

จึงเรียนมาเพื่อทราบ

บุรินทร์ เกล็ดมณี

UPDATE3: (9 Dec 2011 14:05)

ตอนนี้หน้าบทความดังกล่าวใน URL ที่ระบุไปในอีเมล์ตอนแรกเข้าไม่ได้แล้ว แต่ยังมีบทความเดิมอยู่ที่ URL http://oxygen.readyplanet.com/index.php?lay=show&ac=article&Id=539209408 และยังคงไม่มีการระบุที่มาของบทความ… รอดูกันต่อไป

UPDATE4: (9 Dec 2011 22:43)

คุณทรงยศตอบกลับมาในอีเมล์ แจ้งว่าคนที่เป็นคนลงบทความดังกล่าวไม่ได้ทำงานที่บริษัทมาสักระยะแล้ว และตรวจสอบแล้วพบว่าทีมงานได้แก้ไขบทความดังกล่าว โดยระบุที่มาเพิ่มเติมในส่วนท้ายของบทความแล้ว

Conclusion

สรุปว่า happy ending… ผม และ @bombik ขอขอบคุณ คุณทรงยศ และ คุณบุรินทร์ ที่ช่วยดูแลและดำเนินการให้เนื้อหาในเว็บไซต์เป็นไปตามสัญญาอนุญาตที่ระบุไว้ มา ณ ที่นี้ด้วยครับ

Trip 2011 – part 17

ในที่สุดก็มาถึงวันสุดท้ายในปารีส ขนาดว่าใช้เวลาไปตั้ง 6 วันแล้ว ยังเที่ยวได้ไม่ทั่วเลยด้วยซ้ำ มีอีกหลายที่ที่อยากไปแต่ก็ไม่ได้ไป ด้วยเหตุผลประการต่างๆ อยู่ไกลบ้าง เดินทางลำบากบ้าง ไม่มีเวลาบ้าง เช่น

  • L’Opéra – โรงละครโอเปรา ที่ด้านในมีสถาปัตยกรรมสวยงาม เคยมีอุบัติเหตุโคมไฟตกลงมาทับคนตาย จนเป็นแรงบันดาลใจให้นิยาย Phantom of the Opera
  • Les Invalides – สุสานนโปเลียน แหล่งประวัติศาสตร์ทางการทหารของฝรั่งเศส
  • La Defense – เขตเมืองใหม่ ที่ตั้งของประตูชัยใหม่ (Grand Arc)
  • Le Bon Marché – ตลาดบองมาเช่ (ซะที่ไหนเล่า!) ห้างเก่าแก่ที่ส่วนขายของกินมีวัตถุดิบระดับเทพเยอะมาก
  • Galeries Lafayette – ห้างหรูหรา ตกแต่งสวยงาม
  • Saint Sulpice – โบสถ์ที่มีเงื่อนงำจากในเรื่อง The Da Vinci Cide

ยังไม่รวม Louvre กับ d’Orsay ที่อยากมีเวลาไปอีกสักที่ละวันนึงเต็มๆ แต่เวลามีเท่านี้ก็ต้องทำใจ หวังว่าในอนาคตถ้ามีตังค์จะได้กลับมาอีก

ตอนขามา นั่งเครื่องบิน low cost ตอนขากลับก็ขอเปลี่ยนบรรยากาศเป็นนั่งรถไฟบ้าง โดยสายที่จะนั่งกลับลอนดอนนี้คือรถไฟสาย Eurostar ตั้งต้นที่สถานี Gare Du Nord ทางทิศเหนือของปารีส ซื้อตั๋วเอาผ่านหน้าเว็บตั้งแต่ที่เมืองไทย (ยิ่งซื้อแต่เนิ่นๆ ก็ยิ่งราคาถูก)

การเดินทางก็จะคล้ายๆ กับขึ้นเครื่องบิน เพราะเป็นการเดินทางข้ามประเทศ คือต้องมีการเช็คอิน ตรวจพาสปอร์ต ตรวจสัมภาระ ซึ่งรวมๆ ก็ใช้เวลาพอสมควร ถ้าใครจะเดินทางก็ต้องเผื่อเวลาเอาไว้ด้วย

สถานี Gare du Nord มีชานชาลาสำหรับ Eurostar แบ่งให้ชัดเจน

รถไฟออกแล้ว มองเห็นท้องทุ่งชนบทฝรั่งเศส

รถไฟวิ่งออกจากปารีส ผ่านสถานีที่ Lille แล้วก็มุดอุโมงค์ Channel Tunnel จากฝั่งภาคพื้นยุโรปลอดใต้ทะเลไปโผล่ที่เกาะอังกฤษ เป็นระยะทาง 50 กิโลเมตร

บนรถไฟมีอาหารขาย ก็สั่งมารองท้องเป็นมื้อสายสักหน่อย

อันนี้คล้ายๆ ข้าวผัดแกงเขียวหวานมั้ง

อันนี้เป็นพิซซ่า

ข้างในหน้าตาเป็นแบบนีี้

พิซซ่าอุ่นแล้วก็ประมาณนี้

อาหารบนรถไฟมันก็คืออาหารแช่แข็ง ที่ให้พนักงานเอาไปอุ่นก่อนเสิร์ฟน่ะเอง รองท้องพอได้ แต่จะเอาความอร่อยก็คงไม่ค่อยมีให้เท่าไหร่นัก

ตอนที่รถไฟมุดลงอุโมงค์ใต้น้ำ ไฟจะดับหมด มองเห็นแค่แสงไฟฉุกเฉินภายในอุโมงค์ผ่านไปแวบๆ เท่านั้น อยู่มืดๆ ประมาณ 15 นาทีก็จะออกมาโผล่ที่ปลายอีกด้าน

พอจะเข้าเขตอังกฤษก็ต้องเปลี่ยนซิม ถอด Orange ออก กลับมาใช้ยี่ห้อ 3 ที่ซื้อไว้ตั้งแต่ตอนมาถึง

สามซิม สามประเทศ

สภาพภายในตู้โดยสาร นั่งสบายกว่าเครื่องบินมาก

ใช้เวลาเบ็ดเสร็จจากปารีสสองชั่วโมงนิดๆ ก็วิ่งมาถึงลอนดอนแล้ว

สถานี St.Pancras International

สัญลักษณ์ต้อนรับกีฬาโอลิมปิกปี 2012

รูปปั้น Will & Kate

ออกมาจากสถานี St.Pancras แล้วก็ไปตามหาที่พักที่จองไว้ ซึ่งหาไว้แถวสถานีพอดี เดินออกมาประมาณ 10 นาทีก็ถึง

แบกเป้เดินหาที่พัก

หลังจากเช็คอิน เก็บของเข้าที่พัก นอนพักให้หายเหนื่อยได้หน่อยหนึ่ง ก็ถึงเวลาออกไปเที่ยวต่อ ที่หมายคือ Abbey Road สถานที่สำคัญแห่งหนึ่งในประวัติศาสตร์ดนตรี

สำหรับคนที่ไม่ได้เป็นแฟนเพลง The Beatles ก็อธิบายไว้นิดนึงว่า ที่นี่เป็นที่ตั้งของ Abbey Road Studio สถานที่บันทึกเสียงอัลบัมของวงดังๆ อย่าง The Beatles และ Pink Floyd มาก่อน

เหมือนจะเป็นทัวร์เด็กนักเรียน มากันหลายสิบคน

กำแพงแถวนั้นให้แฟนๆ ขีดเขียนกันได้ตามใจชอบ พอมันเริ่มเต็มแล้วจะมีคนเอาสีมาทาทับ

อาจจะเป็นเรื่องน่าเบื่อสำหรับคนที่ต้องขับรถผ่านแถวนี้ หรือว่าคนบ้านอยู่แถวนี้ เพราะว่าบรรดานักท่องเที่ยวที่มา ก็จะพยายามเดินข้ามทางม้าลายแล้วไปหยุดตรงกลางถนน ตั้งท่าให้เพื่อนถ่ายรูปให้ เลียนแบบปกอัลบั้ม Abbey Road ของ The Beatles จนหลายๆ ครั้งก็ทำให้การจราจรติดขัด

ถนนว่างเป็นเมื่อไหร่ ต้องมีคนเดินลงไปตั้งท่าถ่ายรูป

เดินเที่ยวถ่ายรูปจนพอใจแล้วก็กลับเข้ามาเดินเล่นแถวๆ Oxford Street

ร้าน Nike ไวมาก ตกแต่งร้านฉลองชัยชนะของบาร์เซโลนาเมื่อคืน

แผงขายของข้างทาง พอมีให้เห็นบ้าง

มื้อเย็นวันนี้ ไกด์คนไทยในอังกฤษที่ช่วยนำเที่ยว เกิด homesick อยากกินอาหารไทยขึ้นมา ก็เลยตกลงกันว่าไปหาร้านอาหารไทยกิน ค้นใน Google Maps ได้ร้าน Budsaba Eathai ที่อยู่แถวนั้นมา ก็เข้าไปลองดู

ส้มตำไทย (ในลอนดอนคงหาปูหรือปลาร้าลำบาก)

แกงอะไรสักอย่าง จำชื่อไม่ได้แล้ว

ผัดหมี่อะไรก็ไม่รู้ ลืม

กินแล้วไม่รู้สึกว่ากินอาหารไทยอยู่ รสชาติมันต่างจากอาหารไทยในบ้านเรามากๆ เข้าใจได้ว่าส่วนใหญ่ทำให้ฝรั่งกิน (ลูกค้าในร้าน 80% ไม่ใช่คนเอเชีย) คนเสิร์ฟก็เป็นฝรั่ง พูดไทยได้นิดหน่อย พอเห็นเป็นคนไทยมากิน ก็พยายามถามว่า เป็นยังไง อร่อยไหม ก็ต้องตอบไปตรงๆ ว่า มันห่างไกลจากที่คาดหวังไปหน่อย

บรรยากาศภายในร้าน จะเป็นโต๊ะใหญ่ๆ ลูกค้าแบ่งๆ กันนั่ง

กินเสร็จแล้วก็ขึ้น tube ไปโผล่ที่สถานี Tower Hill เพื่อไปดู Tower of London

นักดนตรีเปิดหมวกในสถานี

Tower of London เป็นปราสาทเก่า ตั้งอยู่ริมแม่น้ำ Thames มีประวัติอะไรหลายๆ อย่างเยอะเหมือนกัน แต่ถ้าจะเข้าไปดูต้องเสียเวลาสักประมาณครึ่งวันกว่าจะทั่ว ก็เลยเดินถ่ายรูปจากรอบนอกแทน ไม่ได้เข้าไปข้างใน

Tower of London ถ่ายจากระยะไกล

เดินเลย Tower of London มาทางแม่น้ำ Thames ก็จะเจอกับสะพาน Tower Bridge ที่มีชื่อเสียง แฟนการ์ตูนคินนิกุแมนคงคุ้นเคยกันดี

แฟนบอลบาร์เซโลนาที่ยังไม่กลับบ้าน อยู่ฉลองแชมป์กันในลอนดอน พบเห็นได้ทั่วไปตามสถานที่ท่องเที่ยว

Tower Bridge มุมกว้าง ตรงกลางสะพานสามารถเปิดให้เรือแล่นผ่านได้

จาก Tower Bridge มองไปที่ฝั่งใต้ของลอนดอน

เดินข้าม Tower Bridge มาอีกฝั่งหนึ่งจะเป็นเขตที่เรียกกันว่า More London วิวดี มีตึกสวยๆ ให้ถ่ายรูปเยอะ

ตัวหนังสือข้างหลังเขียนว่า From Our Rich Ancestry

The Scoop เป็นเวทีที่เป็นแอ่ง ต่ำกว่าระดับพื้น มีขั้นบันไดลงไป ตอนที่ไปเค้าแสดงละครกันอยู่

ตึกสวยดี แถวนี้มีพวกบริษัทหรูๆ อย่าง E&Y หรือ PWC อยู่ด้วย

มองกลับไปเห็น Tower Bridge ส่วนตึกด้านขวานั่นคืออาคาร City Hall

เดินถัดจากแถว City Hall มาจะเจอเรือรบจอดอยู่ลำนึง เป็นเรือรบเก่าชื่อว่า HMS Belfast เอามาจอดทิ้งไว้ แล้วตัดแปลงเป็นสถานที่ท่องเที่ยว ให้คนเสียเงินเข้าไปดูข้างใน

ถ้าเป็นสถานที่ท่องเที่ยวแบบเสียเงิน ก็ไม่ค่อยจะอยากเข้าไปดูสักเท่าไหร่

ตึกแถวนั้น ด้านนอกเป็นกระจกใส ไฟสวยดี เหมือนจะเป็นโรงพยาบาลอะไรสักอย่าง

สะพาน London Bridge (is falling down, falling down) ตอนกลางคืน มีไฟสีแดงด้วย

ถ้าเดินเลย London Bridge ไปอีกก็จะเป็นแถวๆ Borough Market ที่เคยไปเดินมาแล้วเมื่อวันก่อน ก็เลยเดินเลี้ยวข้ามสะพาน London Bridge ไปขึ้น tube สถานี Monument กลับที่พัก

เดินข้าม London Bridge กลับมาฝั่งเดิม

ตอนออกมาจากสถานี King’s Cross รู้สึกหิวๆ (คงเพราะเดินเยอะ) ก็เลยแวะร้านจีนแถวสถานี ซื้อของกินใส่กล่องกลับมากิน ที่อังกฤษจะต่างจากบ้านเราคือ ถ้าซื้อใส่กล่องกลับมากินที่บ้าน จะราคาถูกกว่านั่งกินในร้าน

หมูย่างธรรมดา

หน้าตาคล้ายๆ ก๋วยเตี๋ยวเส้นหมี่บ้านเรา

น้ำซุปเอาไว้กินกับเส้นหมี่

ปิดท้ายด้วยเบียร์ราคาถูก ผู้สนับสนุนฟุตบอลถ้วย Carling Cup อย่างเป็นทางการ

อาจจะดูแปลกๆ ที่ไปเที่ยวอังกฤษแต่กินข้าวร้านจีนซะเยอะ เหตุผลก็คือว่ามันถูกกว่าร้านอย่างอื่นอย่างมีนัยยะสำคัญน่ะแหละ

ลิงก์ตอนเก่าๆ

Trip 2011 – part 16

เข้าสู่วันที่ 6 ของการอยู่ในปารีส วันนี้มีที่ต้องไปหลายจุด ก็เลยต้องรีบตื่นแต่เช้า ที่หมายแรกเริ่มต้นที่สถานที่ท่องเที่ยวที่เปิดเช้าที่สุดในทั้งหมด นั่นคือ สุสาน Père Lachaise ในเขต 20

อาจจะฟังดูแปลกๆ ที่มาเที่ยวสุสาน แต่ว่าสุสานอันนี้ไม่เหมือนป่าช้าบ้านเรา บรรยากาศไม่น่ากลัวแบบนั้น จะออกแนวสงบๆ มากกว่า

จุดที่ทำให้สุสาน Père Lachaise นี้กลายมาเป็นแหล่งท่องเที่ยวได้คือ ที่นี่นอกจะเป็นสุสานธรรมดาแล้วเป็นที่ฝังศพบุคคลสำคัญทั้งคนฝรั่งเศสและคนชาติอื่นไว้หลายคน หลุมศพของคนดังๆ ก็มักจะหน้าตาสวยๆ ทั้งนั้นเลยด้วย

บรรยากาศภายในสุสาน

สุสานนี่ก็ไม่ใช่เล็กๆ พื้นที่ทั้งหมดประมาณ 278 ไร่ จะเปรียบเทียบให้เห็นภาพก็ราวๆ 3/4 ของสวนลุมบ้านเรา เส้นทางเดินภายในมีตัวเลขบอกตรอกซอกซอยทั้งหมด แต่ก็ควรมีแผนที่ติดมือไว้ ไม่อย่างนั้นหลงทางแน่นอน

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

Delacroix

จิตรกร Eugene Delacroix ผลงานดังๆ ก็ภาพ Liberty Leading People ที่ Coldplay เอาไปเป็นปกอัลบั้ม

Theodor Gericault จิตรกรชื่อดังอีกคน มีภาพ The Raft of the Medusa อยู่ที่หลุมศพด้วย

นอกจาก Delacroix กับ Gericault แล้วยังมีศิลปินคนดังอีกหลายคน (เห็นชื่อผ่านตาจากที่ Louvre, d’Orsay ก็เยอะ) เช่น Ingres, Jacques Louis David, Camille Pissarro, Georges Seurat

หลุมศพที่ดูจะชื่อดังที่สุดในนี้คือหลุมศพของ Jim Morrison นักร้องนำของวง The Doors มีคนเอาดอกไม้มาคารวะหลุมศพอยู่เรื่อยๆ

หลุมศพ Jim Morrison ธรรมดากว่าที่คิด

ถ้าจะให้ได้อารมณ์ ควรเปิดเพลง I’m Jim Morrison, I’m Dead ของ Mogwai ไปด้วย

Mireille Albrecht ใครก็ไม่รู้ แต่หลุมศพเก๋ดี

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

อันนี้ของเหยื่อค่ายกักกันที่ Sachsenhausen

The Communard's Wall เป็นจุดที่ฝ่ายซ้ายฝรั่งเศส 147 คนโดนยิงตายและทิ้งศพไว้

อีกหลุมหนึ่งที่ดังไม่แพ้ Jim Morrison ก็คือหลุมศพของ Oscar Wilde นักเขียนคนดัง (ซื้อ Dorian Gray มาดองไว้นานมากแล้วยังไม่ได้อ่านสักที) เป็นหลุมศพที่อยู่ในหนัง Paris Je t’aime ตอนที่ Wes Craven กำกับด้วย

รอยลิปสติกมากมาย

มีแต่คนมาเขียนไว้เต็มไปหมดจนแทบไม่เห็นชื่อ Oscar Wilde

สังเกตว่าหลังจากหนัง Paris Je T’aime ออกฉายในปี 2006 รอยลิปสติกก็เพิ่มขึ้นมาก ลองดูเทียบกับในคลิปด้านล่างนี่ก็ได้

นอกจากนี้ก็ยังมีคนดังอื่นๆ อีกหลายคนอย่าง Édith Piaf (นักร้องอมตะตลอดกาลของฝรั่งเศส) หรือ Marcel Proust (คนเขียน In Search of Lost Time) ก็อยู่ที่นี่
ที่จริงแล้วปารีสยังมีสุสานอีกแห่งหนึ่งที่มีคนดังเยอะเหมือนกันคือสุสาน Montparnasse อยู่แถวๆสวน Luxembourg ที่ไปเมื่อวันก่อน มีหลุมศพของคนดังเยอะเหมือนกัน เช่น Jean Paul Sartre (นักปรัชญา), Simone de Beauvoir (นักปรัชญา), Phillipe Leotard (นักปรัชญา), Eric Rohmer (ผู้กำกับหนัง) แต่ด้วยเวลาจำกัด (เหตุผลเดิมๆ) ก็เลยไม่ได้ไป

จบจาก Père Lachaise แล้วก็ไปที่เป้าหมายถัดไปคือ La Cinémathèque

ระหว่างทางเจอร้านอาหารไทย แต่ก็ไม่รู้จะมากินอาหารไทยถึงปารีสทำไม

แถวๆ La Cinémathèque เจอร้านจีนถูกๆ ก็แวะเข้าไปกินมื้อเที่ยงรองท้อง

ซุปอะไรสักอย่าง มีลูกชิ้น กินกับข้าว

อันนี้น่าจะเป็นเนื้อทอดกระเทียม

กินอิ่มแล้วก็เดินต่อมาถึง Cinémathèque จนได้

La Cinémathèque นี่ก็จะประมาณหอภาพยนตร์แห่งชาติ มีเก็บ film archive, มีที่ให้ทำ workshop, มีฉายหนัง แล้วก็พิพิธภัณฑ์เกี่ยวกับหนัง

ด้านหน้า La Cinémathèque

ส่วนจัดแสดงที่เป็นประวัติศาสตร์ภาพยนตร์ ใช้ Museum Pass ผ่านได้ฟรี (ใช้ให้คุ้ม) ก็จะมีแสดงประวัติศาสตร์ ที่มาที่ไป พัฒนาการเรื่องภาพเคลื่อนไหว ตั้งแต่สมัยก่อน มีอุปกรณ์สมัยเก่าๆ ให้ลองเล่น รวมถึงเทคนิคการถ่ายทำ, Costume, และตัวอย่างจากหนังฝรั่งเศสเก่าๆ ด้วย

จาก Metropolis

ขนาดของส่วนที่จัดแสดงไม่ใหญ่มาก ประมาณ TCDC บ้านเรา เดินประมาณชั่วโมงหนึ่งก็ทั่ว (มี Audio guide บริการด้วย) ทีแรกกะว่าจะดูนิทรรศการเวียน ซึ่งจังหวะที่ไปเป็นนิทรรศการ Stanley Kubrick พอดี แต่เนื่องจากว่า late จากแผนเดิมไปมากแล้ว ยังมีที่ต้องไปอีกเยอะ  (และต้องจ่ายค่าเข้าเพิ่ม) ก็เลยต้องตัดใจ

โปสเตอร์นิทรรศการ Kubrick

Metro สถานี Madeleine มี stained glass ข้างในด้วย

ขึ้นมาจาก Metro สถานี Madeleine เพื่อมุ่งหน้าตรงไปที่สวน Tuileries

อะไรไม่รู้ อยู่ตรง Place de la Madeleine

รถหน้าตาย้อนยุค

ร้านขายขนม Laduree ก็ยังมีลูกค้าคึกคัก

ระหว่างทาง จะผ่าน Place de la Concorde เป็นลานกว้าง เมื่อก่อนมีชื่อว่า Place de la Revolution มีความสำคัญทางประวัติศาสตร์คือ ในยุคปฏิวัติฝรั่งเศส ที่นี่เป็นที่ตั้งของกิโยติน และเป็นที่ประหารพระเจ้าหลุยส์ที่ 14, Marie Antoinette รวมถึง Robespierre ด้วย

ปัจจุบันเป็นลานกว้าง มีเสา Obelisk ตั้งอยู่ ด้านหลังที่เห็นไกลๆ นั่นคือหอไอเฟล

รถสามล้อถีบสไตล์ปารีสก็มี แต่ไม่รู้ว่าราคาจะแพงกว่าบ้านเราแค่ไหน

เดินจาก Place de la Concorde มาหน่อยนึงก็ถึง Jardin des Tuileries

สวน Tuileries คนเยอะมาก ฝุ่นเยอะมาก

สวน Tuileries นี่ที่จริงแล้วก็อยู่ติดๆ กับ Louvre แต่วันที่ไป Louvre ก็ใช้เวลาไปซะเต็มวัน ไม่เหลือมาดู l’Orangeries ซึ่งเป็นพิพิธภัณฑ์เล็กๆ ที่อยู่ในสวนนี่

งานที่แสดงใน l’Orangeries นี่ส่วนใหญ่ก็เป็นภาพเขียน Impressionism (อีกแล้ว) ก็มีงานของคนดังๆ หลายคน เดินดูง่าย ไม่สับสน ขนาดเล็กกว่า d’Orsay ที่ไปเมื่อวาน เดินสบายๆ

คอลเลคชันไม่ใหญ่มาก แต่คุณภาพคับแก้ว

สิ่งหนึ่งที่ดีและน่าเอาอย่างของประเทศตะวันตก (ทั้งอังกฤษและฝรั่งเศส) คือถ้าเป็น senior citizen เอ้อ… แปลว่าอะไรดี ไม่ใช่ราษฎรอาวุโสนะ แต่เป็นพลเมืองของรัฐที่อายุมากกว่าเกณฑ์ที่กำหนดแล้ว ก็จะได้สวัสดิการหลายๆ อย่าง เช่น ซื้อตั๋วรถได้ในราคาถูก, เข้าพิพิธภัณฑ์ได้ฟรีหรือได้ส่วนลด ฯลฯ

ลุงป้าแก่ๆ มาดูงานศิลปะด้วยกัน ก็น่ารักดี

ผลงานชิ้นเด่นที่แสดงใน l’Orangeries คือภาพ Water Lilies ของ Claude Monet แสดงยาวบนกำแพงในห้องรูปไข่สองห้อง

Water Lilies

ออกจาก l’Orangeries และสวน Tuileries แล้วก็เดินข้ามฝั่งมายังฝั่งใต้ของแม่น้ำ Seine โดยใช้สะพาน Pont des Arts

Pont des Arts กูเกิลทรานสเลตแปลให้ว่า Bridge of Arts

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

กิจกรรมหนึ่งที่มีคนมาทำกันเยอะคือ ถ้าเป็นคู่รักมาด้วยกัน มักจะเอาแม่กุญแจมาคล้องที่สะพาน อธิษฐานแล้วโยนลูกกุญแจลงแม่น้ำ ไม่รู้เหมือนกันว่าวัฒนธรรมนี้มันมีที่มาที่ไปยังไง แต่เทศบาลปารีสก็ต้องคอยถอดเอารั้วบนสะพานมาเปลี่ยนอยู่เรื่อยๆ เมื่อแม่กุญแจมันเต็ม

แม่กุญแจหลากหลายแบบ

สองหนุ่มนี่มานั่งเล่นกีตาร์

ข้ามละพานมาแล้ว เดินเลียบริมแม่น้ำก็มีแผงของขายให้นักท่องเที่ยวได้เสียเงินกันตลอดแนว

หนังสือการ์ตูนเก่า

Pont แปลว่า สะพาน, Neuf แปลว่า 9

เจอ Messi ด้วย

วันที่เดินเที่ยวอยู่นี่เป็นวันที่ 28 พฤษภาคม ซึ่งเป็นวันที่ฟุตบอล UEFA แชมเปี้ยนส์ลีก รอบชิงชนะเลิศกำลังจะเตะกันที่สนามเวมบลีย์ที่ลอนดอน ทำให้เห็นคนใส่เสื้อบาร์เซโลนาเดินกันขวักไขว่ ส่วนอีกทีมนึงที่จะเตะกับบาร์เซโลนานั่นไม่ค่อยมีแฟนบอลใส่เสื้อให้เห็นสักเท่าไหร่

บริเวณที่กำลังเดินอยู่นี่เรียกกันว่า Latin Quartier เป็นโซนที่ร้านมีอาหารให้เลือกกินเยอะและหลากหลาย

ร้านอาหารเยอะ คนเยอะ

รู้สึกว่าอาหารที่มันย่างแบบหมุนๆ นี่น่ากินไปซะหมด

บาร์บีคิวก็มี

เวลาเดินผ่านบางร้าน เจอเศษจานแตกหน้าร้านก็ไม่ต้องตกใจ เป็นธรรมเนียมเก่าของการกินอาหารกรีก

มีคนเอาจานมาปาทิ้งให้ดูกันเห็นๆ เลย

ฝ่าดงผู้คนและร้านอาหารมาได้แล้วก็จะเจอกับร้านหนังสือ Shakespeare and Company ร้านหนังสือชื่อดัง ถ้าใครได้อ่าน Time Was Soft There (แปลไทยแล้วในชื่อ ปารีส / พำนัก / คน / รัก / หนังสือ ) หรือได้ดูฉากเปิดในหนัง Before Sunset ก็คงจะอยากมาที่นี่สักหน

หน้าร้าน ก็เป็นร้านหนังสือเล็กๆ เก่าๆ ธรรมดา

ด้านหน้ามีที่ให้นั่งอ่านได้

ด้านในร้าน

เนื่องจากอ่านภาษาฝรั่งเศสไม่ออก และไม่มีหนังสืออะไรอยากได้เป็นพิเศษ ก็ออกมาโดยไม่ได้ซื้ออะไรติดมือมาสักเล่ม ขี้เกียจแบก และของเก่าที่บ้านก็ยังอ่านไม่หมดเลยด้วยซ้ำ

ความรู้สึกวันนี้เหมือนชะโงกทัวร์มาก มีแค่ Père Lachaise กับ l’Orangerie ที่พอมีเวลาเดินเอาบรรยากาศบ้าง

ที่ต่อไปที่จะไปคือ Musée du quai Branly เป็นพิพิธภัณฑ์ที่จัดแสดงงานศิลปะ วัฒนธรรม อารยธรรมจาก เอเชีย, อาฟริกา, โอเชียเนีย, และอเมริกา หรือง่ายๆ ก็คือวัฒนธรรมที่ไม่ใช่ยุโรปน่ะเอง

ด้านหน้า Musée du quai Branly

Musée du quai Branly นี่เป็นพิพิธภัณฑ์เปิดใหม่ (เพิ่งเปิดเมื่อปี 2006) ทำให้การออกแบบดูทันสมัย ไม่สับสน มีการแบ่งโซนต่างๆ อย่างดี

ทางเดินที่นำไปยังส่วนแสดงงาน เป็นฉายภาพเคลื่อนไหวของคำศัพท์ต่างๆ ไหลไปตามทางเดิน

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

ของแปลกที่ปกติก็ไม่ค่อยจะมีโอกาสได้เห็น

พิพิธภัณฑ์มี App สำหรับ iPhone / iPad / Android เอาไว้ให้โหลด ช่วยเป็นไกด์ตอนเดินดูงานได้

หนังสือนำเที่ยวบางเล่มบอกว่า ไม่ควรพาเด็กเล็กๆ มาเที่ยวที่นี่

เนื่องจาก Musée du quai Branly นี่อยู่ในเขต 7 ใกล้กับหอไอเฟลนิดเดียว โปรแกรมวันนี้ก็เลยจัดหอไอเฟลไว้เป็นลำดับสุดท้าย จากที่วันแรกเห็นในระยะไกลมาแล้ว

เดินทะลุด้านหลังพิพิธภัณฑ์ออกมานิดเดียวก็เจอหอไอเฟลแล้ว

เดินไปถ่ายรูปหอไอเฟลได้แป๊บนึงก็รู้ตัวว่าต้องไปหาของกินก่อน เพราะบอลใกล้จะมาแล้ว ก็เลยแวะร้านจีน (ที่ดูเหมือน) ราคาถูกแถวนั้น รองท้องมื้อเย็นไปก่อน แล้วไปหา Cafe นั่งสั่งเบียร์ Kronenberg 1664 มา Pint หนึ่ง เพื่อดูบอล (รอบชิง UEFA แชมเปี้ยนส์ลีกตามเวลาบ้านเราเตะกันตอน 01:45 แต่ที่ปารีสนี่ก็ 2 ทุ่ม 45 เท่านั้นเอง)

Cafe หัวมุมถนน ใกล้สวน Champ de Mars เป็นทำเลใกล้หอไอเฟล ทำให้ราคาเบียร์แพงขึ้นไปมากกว่าเขตอื่นๆ แต่ก็คิดเสียว่าเอาบรรยากาศการเข้ามาดูบอลใน Cafe ในปารีส ปรากฏว่าบรรยากาศต่างกับใน pub ของอังกฤษลิบลับ ที่นี่ดูบอลกันเงียบๆ ไม่ส่งเสียงเชียร์อะไรเท่าไหร่ อาจจะเป็นเพราะความต่างระหว่าง Cafe กับ pub และทีมจากฝรั่งเศสไม่ได้ลงเตะด้วย (หรือว่าปารีเซียงเป็นพวกรักษามาดเวลาอยู่ใน Cafe ก็ไม่แน่ใจเหมือนกัน)

บอลจบด้วยสกอร์ 3-1 แฟนบาร์เซโลนาก็ดีใจกันไป คาดว่าในลอนดอนคงอยู่กันเยอะ แต่ในปารีสนี่ไม่ค่อยมีให้เห็น (แต่เท่าที่สังเกตคนส่วนใหญ่ใน Cafe ก็เชียร์บาร์เซโลนานะ)

ออกมาถ่ายรูปหลังบอลจบ เวลาราวๆ เกือบห้าทุ่ม แต่คนแถว Champ de Mars ก็ยังเดินกันขวักไขว่อยู่

ไอเฟลยามค่ำคืน มุมจากสวน Champ de Mars

ปกติทุกชั่วโมง จะมีโชว์การแสดงแสงไฟบนหอไอเฟลด้วย กินเวลาประมาณ 10 นาที เป็นประกายระยิบระยับ สวยดี (ประมาณในคลิปนี้)

ด้านล่างก็ยังมีคนต่อคิวขึ้นไปข้างบนอยู่

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

ถ่ายจากมุมข้างใต้ ใช้เลนส์ Lumix G 9-18mm (ทริปนี้ใช้คุ้มมาก)

ป้ายไฟ สลับภาษาฝรั่งเศส-อังกฤษได้ Bienvenue แปลว่า Welcome

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

ชักภาพเอาไว้ไปใช้เป็น avatar ใน facebook, twitter ได้

จบวันที่ 6 ในปารีส วันรุ่งขึ้นเป็นวันสุดท้ายในปารีสแล้ว

ลิงก์ตอนเก่าๆ

Kimju — Once is More Than Enough

เรื่องของเรื่องคือเมื่อวานตอนเย็นตั้งใจจะพา @bombik กับเพื่อนไปกินบุฟเฟต์สุกี้ญี่ปุ่นที่ร้าน Torii แต่ปรากฏว่าปล่อยไก่ตัวเบ้อเริ่ม เพราะไม่รู้ว่ามันปิดทุกวันอังคาร T_T เลยเดินมึนๆ ไปหาของกินที่เมเจอร์รัชโยธินแทน

เดินไปเดินมาก็ตัดสินใจเข้าร้านบุฟเฟต์ปิ้งย่างเกาหลีชื่อ Kimju ที่อยู่ใกล้ๆ Box Office ด้วยเหตุผลง่ายๆ ว่า “ยังไม่เคยลอง” บวกกับราคาบุฟเฟต์ที่ติดอยู่หน้าร้าน 288.- บาท ดูแล้วก็ค่อนข้างโอเค เลยตกลงเข้าไปลองกินกัน

Kimju Buffet

สำหรับคนที่หาข้อมูลว่าร้านนี้เป็นอย่างไร น่าไปลองชิมหรือไม่ ขอตอบแบบย่อๆ ไว้ก่อนเลยว่า

“มัน กาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาาากส์ มาก”

เสิร์ชหาร้านอื่นได้เลยครับ เวลาในชีวิตของคุณมีค่าเกินกว่าจะไปนั่งกินอาหารในร้านพรรค์นี้ แต่ถ้าอยากรู้ว่ามันกากยังไง เชิญอ่านต่อได้ตามสะดวก

กาก 1: พนักงาน นั่งโต๊ะปุ๊บ เราถามก่อนเลยว่า 288.- นี่มีบวกอะไรอีกมั้ย ได้คำตอบว่าไม่บวกแล้ว ราคานี้เลย แต่พอเช็คบิลออกมาปรากฏว่าโดน service charge ไปอีก 10% จริงๆ คือไม่รอบคอบเองด้วย เพราะเหมือนจะมีดอกจันตัวเล็กๆ อยู่ในเมนู แต่ไม่ได้อ่าน

เครื่องเคียงและน้ำจิ้ม

กาก 2: กิมจิ อย่างแรกที่มาเสิร์ฟบนโต๊ะคือเครื่องเคียงและน้ำจิ้ม เห็นสีกิมจิครั้งแรกก็คิดอยู่ในใจว่าไม่น่าอร่อย แต่พอกินเข้าไปแล้ว กลายเป็นว่า โคตรจะไม่อร่อย! จบกัน กินปิ้งย่างเกาหลี แต่กิมจิไม่อร่อย

อยากจะเดินออกจากร้านซะเดี๋ยวนั้น แต่เสียดายตังค์ เพราะกินของมันไปแล้ว คงไม่ปล่อยให้พวกผมเดินออกไปโดยไม่จ่ายค่าบุฟเฟต์ เลยต้องก้มหน้าก้มตากินต่อไป

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

มากินคราวนี้จัดเต็ม โดยบวกเพิ่มอีก 100 รวมราคาเป็น 388.- บาท เพื่อจะได้กิน “เนื้อโคนุ่มพิเศษ” และ “อาหารทะเล” ก่อนจะพบว่า…

อาหารทะเล

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

เนื้อหมู

กาก 5: เนื้อ, หมู เนื้อกับหมูที่เสิร์ฟมาบนจาน หน้าตาแตกต่างจากในเมนูอย่างสิ้นเชิง สีคล้ำๆ เละๆ แหยะๆ ถ้าไม่เละก็คือมาเป็นแบบแข็งเป๊ก ประมาณว่าละลายน้ำแข็งยังไม่เสร็จดี รสชาติเหมือนไม่ได้ผ่านการหมักใดๆ มาทั้งสิ้น บวกกับน้ำจิ้มไม่อร่อย ก็ต้องกินแบบเปล่าๆ กันไป แถมเนื้อนุ่มพิเศษก็ไม่ได้นุ่มอย่างที่คาดหวังไว้ (มาถึงขั้นนี้ยังจะหวังอะไรอีก >_<)

เนื้อวัว

กาก 6: น้ำมัน!? เนื้อ, หมู ทุกจาน จะมาพร้อมน้ำราดอะไรซักอย่างที่ดูแล้วน่าจะเป็นน้ำมัน ไม่รู้จะใส่อะไรมานักหนา ประโยชน์อย่างเดียวที่เห็นคือ ยิ่งกินยิ่งเลี่ยน น่าจะทำให้อิ่ม(อยากอ้วก)ไวขึ้น ยิ่งจานหลังๆ ยิ่งราดมาจนท่วม แสรดดด

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

อาหารเพียงอย่างเดียวนอกจากข้าวกับเครื่องดื่ม ที่พอจะเหมือนมนุษย์มนากับเขาบ้างก็คือ “ซุป” ที่รสชาติโอเค ได้อาศัยเติมไปสามสี่รอบ ช่วยให้อิ่มได้โดยไม่ต้องทรมานจากการกินปิ้งย่างจนเกินไป

ซุป

สรุปว่าแปลกใจมากที่ร้านอาหารที่ราคาสวนทางกับรสชาติแบบ exponential ขนาดนี้มันอยู่รอดมาได้ แถมมีหลายสาขาอีกต่างหาก หรือบางทีอาจจะเป็นผมเองที่ไม่ซาบซึ้งกับรสชาติอาหารเกาหลีอย่างแท้จริงก็เป็นได้ -_-a

กินสามคนพันห้านี่เปลี่ยนเป็นกินฟูจิหรือ MK แบบเต็มสูบได้เลยนะ เผลอๆ จะเหลือเงินทอนด้วยซ้ำ =.=

« Previous Entries Next Entries »