ข้ามไปที่เนื้อหาหลัก

JMS tutorial

1. ให้ JMS ใช้คนละ thread กับ glassfish
Configuration -> Java Message Service, set JMS service to "LOCAL" rather than "EMBEDDED."

restart glassfish server.

ลอง ping เด๊ะ

dsin@dsin-laptop:~/glassfish$ ~/glassfish/bin/asadmin jms-ping
JMS Ping Status = RUNNING
Command jms-ping executed successfully.
2. create new CF
- JNDI name
- type javax.jms.ConnectionFactory คือ อะไรก็ได้
create new DS
- JNDI name
- Physical destination name
- type javax.jms.Queue : point-to-point



Test first

create new java project
- project name
Add external JARs
  • glassfish/lib/javaee.jar
  • glassfish/lib/appserv-rt.jar
  • glassfish/lib/appserv-admin.jar
  • glassfish/lib/install/applications/jmsra/imqjmsra.jar
สร้าง jUnit test

- JUnit 4 test
- package
- name


public class ReqReplyTest extends TestCase {

private static final String CONNECTION_FACTORY_NAME = "jms/ConnectionFactory";

private static final String REQUEST_QUEUE_NAME = "jms/RequestQueue"; // ที่ config ใน jndi
private static final String REPLY_QUEUE_NAME = "jms/ReplyQueue";

private Connection connection;
private Session session;
private Destination replyQueue;
private MessageProducer requestProducer;
private MessageConsumer replyConsumer;

public void setUp() throws NamingException, JMSException { // setUp
// Get connection factory for the local JMS server
Context jndiContext = new InitialContext();
ConnectionFactory connectionFactory =
(ConnectionFactory)jndiContext.lookup( CONNECTION_FACTORY_NAME ); //

// Get connection to the JMS server
System.out.println( "Creating connection" );
connection = connectionFactory.createConnection();

// Create a session on the connection that is not transacted
System.out.println( "Creating session" );
session = connection.createSession( false, Session.AUTO_ACKNOWLEDGE ); // Session.AUTO_ACKNOWLEDGE, false = non-transaction

// Set up a message producer or consumer for each queue
Destination requestQueue = (Destination)jndiContext.lookup( REQUEST_QUEUE_NAME ); // jndiContext.lookup
requestProducer = session.createProducer(requestQueue); // createProducer(requestQueue), new producer
replyQueue = (Destination)jndiContext.lookup( REPLY_QUEUE_NAME );
replyConsumer = session.createConsumer(replyQueue); // .createConsumer(replyQueue), new consumer

// Enable receipt of messages on this connection
connection.start(); //
}

// Test request-reply pattern
public void testReqReply() throws JMSException {

// Send a message using the request queue
TextMessage requestMessage = session.createTextMessage();
requestMessage.setText("Hello world."); // setText
requestMessage.setJMSReplyTo(replyQueue); // setJMSReplyTo, set return address
requestProducer.send(requestMessage); // send

// Output sent message
System.out.println("Sent request");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + requestMessage.getJMSMessageID()); // JMSMessageID
System.out.println("\tCorrel. ID: " + requestMessage.getJMSCorrelationID()); // JMSCorrelationID
System.out.println("\tReply to: " + requestMessage.getJMSReplyTo()); // JMSReplyTo
System.out.println("\tContents: " + requestMessage.getText()); // Text

// "Block" until a reply is received on the reply queue
System.out.println("Waiting for response...");
Message msg = replyConsumer.receive();
assertTrue( msg instanceof TextMessage ); // instanceof TextMessage

// Output the reply message
TextMessage replyMessage = (TextMessage)msg; // (TextMessage)
System.out.println("Received reply ");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + replyMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: " + replyMessage.getJMSCorrelationID());
System.out.println("\tReply to: " + replyMessage.getJMSReplyTo());
System.out.println("\tContents: " + replyMessage.getText());
}

// Clean up code run after every test
public void tearDown() throws JMSException { // tearDown()
connection.close(); //
}
}

สร้าง EJB project ชื่อ request-reply-ejb
สร้าง class

package ait.jmstutorial.messagebeans;

// MessageDriven bean
@MessageDriven( mappedName = "jms/RequestQueue", activationConfig = { // jms/RequestQueue, listen to Request
@ActivationConfigProperty( propertyName="destinationType", propertyValue="javax.jms.Queue" ), Queue, point-to-point
@ActivationConfigProperty( propertyName="acknowledgeMode", propertyValue="Auto-acknowledge")
})


public class ReplierBean implements javax.jms.MessageListener {
@Resource(mappedName="jms/ConnectionFactory")
private ConnectionFactory connectionFactory;

@Resource( mappedName = "jms/InvalidQueue" )
private Destination invalidDestination;

public void onMessage( Message message ) { // onMessage
try {
// Get JMS connection and session
// send reply message
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession( true, 0 );

// Check validity of message
if ((message instanceof TextMessage) && (message.getJMSReplyTo() != null)) { // instanceof TextMessage, getJMSReplyTo() != null
TextMessage requestMessage = (TextMessage) message;

System.out.println("Received request");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + requestMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: " + requestMessage.getJMSCorrelationID());
System.out.println("\tReply to: " + requestMessage.getJMSReplyTo());
System.out.println("\tContents: " + requestMessage.getText());

String contents = requestMessage.getText(); // getText()
Destination replyDestination = message.getJMSReplyTo(); // getJMSReplyTo()

MessageProducer replyProducer = session.createProducer( replyDestination );
TextMessage replyMessage = session.createTextMessage();
replyMessage.setText(contents); // send hello world back
replyMessage.setJMSCorrelationID(requestMessage.getJMSMessageID()); // setJMSCorrelationID
replyProducer.send(replyMessage);

System.out.println("Sent reply");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + replyMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: " + replyMessage.getJMSCorrelationID());
System.out.println("\tReply to: " + replyMessage.getJMSReplyTo());
System.out.println("\tContents: " + replyMessage.getText());
} else { // if sth wrong
System.out.println("Invalid message detected");
System.out.println("\tType: " + message.getClass().getName());
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + message.getJMSMessageID());
System.out.println("\tCorrel. ID: " + message.getJMSCorrelationID());
System.out.println("\tReply to: " + message.getJMSReplyTo());
// send msg to invalidDestinationQueue
message.setJMSCorrelationID(message.getJMSMessageID());
MessageProducer invalidProducer = session.createProducer( invalidDestination );
invalidProducer.send(message);

System.out.println("Sent to invalid message queue");
System.out.println("\tType: " + message.getClass().getName());
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + message.getJMSMessageID());
System.out.println("\tCorrel. ID: " + message.getJMSCorrelationID());
System.out.println("\tReply to: " + message.getJMSReplyTo());
}
session.close();
connection.close( ); // don't forget to close
} catch(Exception e) {
throw new EJBException(e);
}
}
}


Export to glassfish
/domains/domain1/autodeploy

run as > junit test

>> console
Creating session
Sent request
Time: 1236931646622 ms
Message ID: ID:43-127.0.1.1(c8:26:59:71:1:62)-59395-1236931646585
Correl. ID: null
Reply to: Sun Java System MQ Destination
getName(): ReplyQueue
Class: com.sun.messaging.Queue
getVERSION(): 3.0
isReadonly(): false
getProperties(): {imqDestinationName=ReplyQueue, imqDestinationDescription=A Description for the Destination Object}
Contents: Hello world.
Waiting for response...
Received reply
Time: 1236931646935 ms
Message ID: ID:223-127.0.1.1(dc:8d:ed:1a:1:49)-35614-1236931646903
Correl. ID: ID:43-127.0.1.1(c8:26:59:71:1:62)-59395-1236931646585
Reply to: null
Contents: Hello world.


notice that Msg id อันที่สอง ตรงกับ corelation id in request

Message ID: ID:43-127.0.1.1(c8:26:59:71:1:62)-59395-1236931646585
Correl. ID: null


Correl. ID: ID:43-127.0.1.1(c8:26:59:71:1:62)-59395-1236931646585




>> glassfish server log
 INFO: Received request
INFO: Time: 1236931646900 ms
INFO: Message ID: ID:43-127.0.1.1(c8:26:59:71:1:62)-59395-1236931646585
INFO: Correl. ID: null
INFO: Reply to: Sun Java System MQ Destination
getName(): ReplyQueue
Class: com.sun.messaging.Queue
getVERSION(): 3.0
isReadonly(): false
getProperties(): {imqDestinationName=ReplyQueue, imqDestinationDescription=A Description for the Destination Object}
INFO: Contents: Hello world.

INFO: Sent reply
INFO: Time: 1236931646909 ms
INFO: Message ID: ID:223-127.0.1.1(dc:8d:ed:1a:1:49)-35614-1236931646903
INFO: Correl. ID: ID:43-127.0.1.1(c8:26:59:71:1:62)-59395-1236931646585
INFO: Reply to: null
INFO: Contents: Hello world.


ref : mdailey

ความคิดเห็น

ติดตามบล็อกบนเฟซบุ๊คเพจ

โพสต์ยอดนิยมจากบล็อกนี้

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( Vedic Mathematics example )

จากที่สงสัยเรื่อง ลูกคิด ของ จินตคณิต ที่ลองไปค้นดู
ปรากฎว่า เจอ เวทคณิต ซึ่งเขาบอกว่า อยู่ในคัมภีร์พระเวท

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

Tutorial 1

การลบเลข
ALL FROM 9 AND THE LAST FROM 10
ทุกตัวลบจาก 9 และตัวสุดท้ายลบจาก 10

เช่น 1000 - 357 = 643
10,000 - 1,049 = 8951

ถ้า 1,000 - 83 ให้มองว่ามี 0 อยู่ข้างหน้า
เป็น
1,000 - 083 = 917

ฝึกบ่อยๆ ก็คล่อง แล้วก็ไม่ต้องใช้เครื่องคิดเลขด้วย
ลองทำดูสิ
1) 1000 - 777 =
2) 1000 - 283 =
3) 1000 - 505 =
4) 10,000 - 2345 =
5) 10,000 - 9876 =
6) 10,000 - 1011 =
7) 100 - 57 =
8) 1000 - 57 =
9) 10,000 - 321 =
10) 10,000 - 38 =

3,000 - 467 ก็ทำเหมือนกัน โดยลบตัวแรกสุดของ 3,000 ไป 1
จากนั้นก็ทำเหมือนเดิม จะได้ว่า 3,000 - 467 = 2,533

Tutorial 2
VERTICALLY AND CROSSWISE สำหรับตัวเลขที่น้อยกว่าฐานนิดหน่อย

ลอง 88x98

88 น้อยกว่า 100 อยู่ 12
98 น้อยกว่า 100 อยู่ 2
12x2 = 24
88-2 หรือ 98-12 ได้ 86
ดังนั้นตอบ 8,624

ดูอีกตัวอย่าง
หรือ

ลองทำนี่ดู
1) 87 x 98 =
2) 88 x 97 =
3) 77 x 98 =
4) 93 x 96 =
5) 94 x 9…

อยู่เหงาๆ เราไปเที่ยว - วัดอรุณราชวราราม ( วัดแจ้ง ) + วัดสระเกศ ( ภูเขาทอง )

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่ ลิงก์นี้ นะครับ

คำเตือน เอ็นทรีนี้รูปเยอะมากกกก ควรปิดบิตก่อนดู

ผ่างๆๆ ท่านสามารถรับชมเอนทรีนี้ผ่าน url http://tinyurl.com/goldenMount ได้ด้วย

วันนี้ตั้งใจไปวัดอรุณฯ

เดินทางทางน้ำเหมือนเดิม

แต่คราวนี้นั่งเรือ ธงสีฟ้า ( คราวก่อน นั่งเรือ ธงสีส้ม )

พอถึงท่าสาทร เขาบอกว่า ให้ลงลำที่จอดอยู่ได้เลย เก็บตังในเรือ

ก็ งงๆ เดินลงไป

เหมือนเดิมครับ

ชูชีพอยู่ใต้ที่นั่งของท่าน
พอเรือออกสักพัก มีไกด์ มาบรรยาย

อ้าว กรำ

ขึ้นผิดเรือรึเปล่า

นี่มันเรือท่องเที่ยว 150 บาท ไม่ใช่เร๊อะ

กะลังอึ้งๆอยู่

แต่พอไกด์พูดไปสักพัก ก็เลยรู้ว่า 150 บาท มันราคาเหมาวัน

แล้วก็ได้ความรู้ของท่าเรือ แล้วก็สองข้างทาง




เรือธงฟ้านี่มันไปสุดที่ท่าพระอาทิตย์เท่านั้นเองนะ แล้วก็กลับ

ตอนไปมีสาวคนนึง ถามว่า จะไปวัดสระเกศ ไปทางไหน

ถ้าฟังไม่ผิด คนเก็บตังบนเรือ บอกว่า ท่ามหาราช

จากนั้นก็คุยอะไรกันไม่รู้ ไม่ได้ยินแล้วล่ะ




เรือธงฟ้า มันใหญ่กว่า น่าหวาดเสียวน้อยกว่า น้ำกระเด็นน้อยกว่า แพงกว่า เรือธงสีส้ม

คราวนี้รู้และ นั่งริมฝั่งธน ได้มาหลายรูปเหมือนกัน แต่วันนี…

อยู่เหงาๆ เราไปเที่ยว - วัดระฆังโฆสิตาราม

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่ ลิงก์นี้ นะครับ



จากที่ คราวก่อน ไปวัดอรุณฯ เขามีให้ล่องเรือไปวัดระฆัง เลยเดาๆ ได้ว่า วัดอยู่ไม่ไกล

ประกอบกับได้ยินเรื่องของ สมเด็จพระพุฒาจารย์ (โต พรหมรังสี) มานาน



วันนี้เลยลองไปสักหน่อย

นั่งเรือธงสีสัม ( 13 บาทตลอดสาย ) ไปลงท่าช้าง

มองจากท่าช้าง ตรงกลาง เป็น สมาคม พุทธศาสนา อะไรซักอย่างทางซ้ายของรูป คือ พระอุโบสถ วัดระฆัง
แล้วนั่งเรือข้ามฟาก ( 3 บาท ) ไปท่าวัดระฆัง

วัดระฆังโฆสิตารามวรมหาวิหาร
นกเยอะมาก ปลาก็เยอะ

แบบว่า เขามีขายอาหารสำหรับเลี้ยงปลา ( แต่แอบได้ยินคนซื้อบ่นว่าขนมปังขึ้นรา - -! )


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


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

พระเจดีย์
พระเจดีย์ อีก 2 องค์
couple ?
พระปรางค์
สถาปัตยกรรมรัตนโกสินทร์ยุคต้น ยึดถือเป็นแบบฉบับของพระปรางค์ที่สร้างในยุคต่อมา
แล้ว…

อยู่เหงาๆ เราไปเที่ยว - เที่ยวมาเลเซีย โจโฮห์ บาห์รู Johor Bahru Downtown 1 - JB Central, City Square

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

แต่ทว่า พอไปถามที่ Tourism Office ที่ชั้น 2 ของตึกที่ติดกับ JB Sentral แล้วทัวร์ไม่เหมือนกันขรับ



ของอินเดีย จะเป็นของรัฐบาลจัดเอง แต่ของมาเลเซีย จะเป็น agent ที่ร่วมกับรัฐบาลจัด

นั่นหมายความว่า ต้องไปขึ้นรถที่ agent ซึ่งไกลจาก Tourism Office

โฮฮฮฮ อุตส่าห์ดีใจ ว่า หาทางมา Tourism Office ได้แล้ว นึกว่ายังไงๆ ก็ต้องมาขึ้นรถแถวนี้เพราะ Tourism Office กับ Head Quarter ก็อยู่ใกล้ๆกันด้วย

ปรากฎว่า ทริปที่เล็งไว้ city tour 1 วัน ที่มาเล กลับต้องไปขึ้นรถที่ Taman Universiti (บริษัท ทัวร์ ชื่อ PRIMA SIERRA HOLIDAYS SND BHD) ซึ่งไกลจาก City Square ต้องนั่งรถ แท็กซี่ ไป ถามๆพนักงานinformationของ City Square เขาบอกมี taxi meter นะ

ให้รูปเป็น Soft Copy เผื่อสนใจ หนังสือ ขอได้จาก Tourism Office รู้สึกจะมีทุกรัฐในมาเลเลยแหละ


เลยตัดสินใจเดินเล่น แถวๆนั้น

ตอนแรกขอแผนที่ของ Tourism Office แต่แม่ม สถานที่เล็กเท่าจิ๋มมด แถมไม่แยก Category ด้วย มั่วไปหมด เลยไปขอแผนที่ของโรงแรมแทน

ข้างล่างเป็นแผนที่ Downtown ที่ติดกับสิงคโปร…

วิธีใช้ ย่อๆ เกี่ยวกับ Matrix กับ Vector ( มาจาก CASIO-991MS manual )

Matrix

เปลี่ยน mode เป็น Matrix
กด mode ไปเรื่อยๆ จนเจอ MAT

วิธีใส่ Matrix เข้าไป
จิ้ม MAT ( ตรงเลข 4 )
DIM -- สร้าง Matrix ใหม่ - เราจะสร้าง Matrix เก็บไว้ในตัวแปรได้สามตัว คือ A, B, C ( Trick : ตอนใส่ค่า a11, a12, .. ถ้าอยากข้ามไปให้กดลูกศร ขึ้น ลง ซ้าย ขวา ได้เลย )
รุ่นนี้ มันใส่ได้มากสุด 3x3 นะ ถ้าใส่ 4 ไป มันจะ dimension error
EDIT -- แก้ไข Matrix ที่สร้างไว้แล้ว
MAT -- เอา Matrix ออกมาใช้งาน

Add : MatA + MatB
Subtract : MatA - MatB
Multiply with scalar : MatA x 3 หรือ 3 x MatA
Multiply : MatA x MatB
Det : Det MatA
Transpost : Trn MatA
Inverse :MatA -1
Absolute Value of Each Element : Abs MatA

ผลลัพธ์มันจะได้เป็น
MatAns11
ซึ่งเราสามารถกด ซ้าย ขวา ขึ้นลงได้เหมือนเลื่อนดู Element จาก Matrix เลย

Vector
เปลี่ยน mode เป็น Vector
กด mode ไปเรื่อยๆ จนเจอ VCT

วิธีใส่ Vector เข้าไป
จิ้ม VCT ( ตรงเลข 5 )
DIM -- สร้าง Vector ใหม่ - เราจะสร้าง Vector เก็บไว้ในตัวแปรได้สามตัว คือ A, B, C ( Trick : ตอนใส่ค่า a1, a2, .. ถ้าอยากข้ามไปให้กดลูกศร ซ้าย ขวา ได้เลย )
EDIT -- แก้ไข Vector ที่สร้างไว้แล้ว
VCT -- เอา Vector ออกม…

ข้อแตกต่างระหว่าง Mahalanobis distance กับ Euclidean Distance : ทำไม และ เมื่อไหร่ ต้องใช้ Mahalanobis distance ใน data mining

Euclidean Distance

นิยาม
EuclideanDistance = sqrt(sum( (A - B) .^ 2 ))
โชว์เหนือ เขียนแบบ linear algebra
EuclideanDistance = norm(A - B)
ข้อเสียของ Euclidean distance
1. sensitive to scales ของตัวแปร
ในกรณี geometric ตัวแปรทุกตัวมีหน่วยเดียวกันหมด คือ ระยะทาง แต่เมื่อพิจารณาตัวแปรที่มีข้อมูลหลายชนิดพร้อมๆกัน เช่น ใน data mining เราอาจจะพิจารณา อายุ, ความสูง, น้ำหนัก ฯลฯ พร้อมๆกันหมด สเกลมันเอามาเปรียบเทียบกันไม่ได้
2. Euclidean distance ใช้กับตัวแปรที่ correlated กันไม่ได้
เช่น สมมติว่าเรามี data set 5 ตัวแปร ที่ซึ่งค่าของตัวแปรหนึ่งเหมือนกับอีกตัวแปรหนึ่งเด๊ะๆ ( กรณีนี้เหมือนเด๊ะ เลยเป็น completely correlated ) Euclidean distance จะคำนวณโดย weight ข้อมูลที่ซ้ำกันมากขึ้น ทำให้มีปัญหา
Mahalanobis distance
นิยาม

เมื่อ S คือ covariance matrix และ x, y มี distribution เดียวกัน
Mahalanobis distance มันพิจารณ่า covariance matrix ไปด้วย เลยขจัดปัญหาเรื่อง scale และ correlation ที่ Euclidean Distance มีได้
ใน MATLAB ใช้ฟังก์ชั่น mahal() หรือ pdist() ดูตัวอย่าง mahaldist.m ของคุณ Peter J. Acklam

ถ้า S เป็…

อยู่เหงาๆ เราไปเที่ยว - พระปฐมเจดีย์ พระราชวังสนามจันทร์, นครปฐม Sanam Chandra Palace, Nakorn Pathom

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่ ลิงก์นี้ นะครับ



กลับมาแบ้วแจ้~~ อันที่จริง ซี่รี่ส์ ท่องเที่ยวอินเดีย ยังไม่จบ น้ะจ้ะ

แต่ขอคั่นรายการด้วย การไปเที่ยว จังหวัด นครปฐม กันก่อนละกัน



ขอเท้าความ นิดหน่อย

สืบเนื่องมาจาก ปีนี้ วันเกิด ของเรา ตรงกับวันจันทร์

วันอาทิตย์ก่อนหน้าวันจันทร์ ไปบ้านอาม่า อาม่าบ่นอยากกิน ข้าวหลาม

ก็เล่าว่า พอลง รถไฟ นครปฐม ก็มีคนมาขายเลย



ทีแรกตั้งใจว่า เสาร์หน้าจะไปซื้อ แล้ววันอาทิตย์จะเอาไปฝาก

แต่ดูไปดูมา วันจันทร์หยุด ก็เลยไปวันจันทร์เลยละกัน

เป็นที่มา ของ ทริปนี้ แจ้ :)


นครปฐม จ้ะ
Nakorn Pathom, Thailand naja

อันที่จริง อยากจะขยับขยาย ไป ปริมณฑล นานแล้วจ้า

จากที่ ที่เที่ยว ใน กทม. เริ่มหมด ( ดูตอนเก่าๆ ได้ที่นี่ น้ะจ้ะ ) -- ปล. ใครมีที่เที่ยวใหม่ๆ แนะนำ จะเป็นพระคุณยิ่งจ้า

แล้วก็เริ่มเฉื่อยแฉะกับ plan revisit ฮา

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

อย่าง พระปฐมเจดีย์ นี้ วางไว้ นานเหมือนกัน

แรกว่า จะขับรถไป แต่ก็ไม่แนวน้ะจ้ะ

พออาม่า เล่าเรื่องข้าวหลาม จึงนึกได้ ว่า นั่งรถไฟไปก็ได้นี่นา !



เที่ยวทั่…

แก้วมังกร เนื้อสีม่วง !!!

เราเคยเห็นผลแก้วมังกรตอนยังไม่ปอกเปลือก สีมันก็ออกม่วงๆ หน่อย
พอปอกแล้ว เนื้อข้างในจะเป็นสีขาว

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

ฉีดสีป่าวเนี่ย ฮาๆ
เคยเห็นแต่กะหล่ำปลีม่วง นี่ แก้วมังกรม่วง

เห็นหม่าม๊าเล่าให้ฟังว่า
คนขายบอกว่า มีสองพันธุ์
พันธุ์สีขาว กับ พันธุ์สีม่วง

แปลกดีๆ

ดูรูปกันเอาเอง




ปล. กินแล้วอึเป็นสีม่วงด้วยแล่ะ ขอบอก ฮาๆๆ

อยู่เหงาๆ เราไปเที่ยว - พิพิธภัณฑ์สถานแห่งชาติ พระนคร Bangkok National Museum

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

พระที่นั่งศิวโมกขพิมาน
พิพิธภัณฑ์สถานแห่งชาติ พระนคร  ดูแลโดย สำนักพิพิธภัณฑสถานแห่งชาติ กรมศิลปากร กระทรวงวัฒนธรรม
เปิดวัน พุธ - อาทิตย์ และ วันหยุดนั…

ศูนย์ซ่อม Samsonite ย้าย แบ้วแจ้

และแล้วก็ได้ฤกษ์เอากระเป๋าที่พังไปซ่อมเสียที เป็นหนึ่งในภารกิจหลายอย่างที่ทำตอนวันศุกร์ที่ผ่านมาแจ้

แต่ก่อนเราเคยซ่อม ที่ อาคาร สีลม แกลเลอเรีย น้ะจ้ะ แต่พอวันนี้วกขึ้นไปจอด โทรถามหาเบอร์เก่า ก็ขึ้นเป็น Invalid

เลยลงไปถาม รปภ เขาบอกว่า ย้ายไปแล้ว

ประกาศ!

บริษัท เซ็นทรัลเทรดดิ้ง CMG ย้ายจาก อาคารสีลม แกลเลอเรีย ชั้น G ไปที่ อาคาร สิรินรัตน์ ชั้น 8 ตรงข้าม อาคาร มาลีนนท์ ( ช่อง 3 ) แล้วน้ะจ้ะ

เบอร์โทรใหม่ 02-229-7000

จึงประกาศให้ทราบโดยทั่วกัน ณ จ๊ะ

จะได้ไม่ต้องวกรถขึ้นไปชัั้น 6 เสียค่าจอดอีก 30 บาท แล้วก็เสียเวลาอีกด้วยแจ้