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

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

ความคิดเห็น

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

ส่งไปรษณีย์ทีละมากๆ ที่ช่องไปรษณีย์สำหรับธุรกิจ

  ถ้าเราส่งไปรษณีย์ทีละ 10 กล่องขึ้นไป สามารถไปส่งโดยใช้ช่องทางธุรกิจได้ โดยต้องกรอกใบรับฝากรวม ( Receipt for bulk Posting ) เป็นลิสต์รายการให้เขาไปด้วย โดยกรอกพัสดุแต่ละรายการ และ ไปยื่นให้เขาพร้อมกับพัสดุที่จะส่ง วิธีกรอก คือ ให้กรอกพัสดุแบบเดียวกันไว้แผ่นเดียวกัน  เช่น พัสดุ10 กล่อง กล่องขนาดเท่ากัน น้ำหนักเท่ากันหมด กรอกไว้ 1 แผ่น ถ้าน้ำหนักต่างกัน ขนาดกล่องต่างกัน กรอกแยกแผ่นไว้ดีที่สุด ซึ่งใบนี้สามารถไปขอได้ที่ไปรษณีย์ฝ่ายธุรกิจ สามารถนำมาทำใส่ A4 ก็ได้ ขอบคุณคุณพี่ amarin.ch ที่ไปรษณีย์กลาง ( BANGKOK G.P.O. ) มากๆ นะครับ สำหรับคำแนะนำ ขอบคุณที่ช่วยคีย์ให้ทีละรายการสำหรับมือใหม่ที่ยังไม่รู้ว่ามีใบรับฝากรวมอย่างผมด้วยครับ คราวหน้าผมจะทำใบรับฝากรวมไปครับ

อยู่เหงาๆ เราไปเที่ยว - ไหว้พระขอพร ศาลเจ้าแม่ทับทิม (อาม่า), เจริญกรุง, กรุงเทพ; 天后聖母廟, 石龙軍路, 曼谷, 泰国; Thap Thim Chinese Goddess Shrine, Chareon Krung 63 Road, Bangkok, Thailand

天后聖母廟, 石龙軍路, 曼谷, 泰国 ไหว้ศาลเจ้าแม่ทับทิม ขอให้การค้าเจริญรุ่งเรือง ตำนานเจ้าแม่ทับทิมเกิดที่ตำบลตุ้ยบ๊วย เขตบ่นเซียว เกาะไหหลำ มีผู้เฒ่าแซ่พัว เป็นผู้มีความซื่อสัตย์สุจริต ทำงานขยันขันแข็ง ครั้งหนึ่งแกออกไปหาปลา โดยผูกแหเป็นช้อนดักปลา เวลาผ่านไปแกยังหาปลาไม่ได้ คืนนั้นก็ประสบความล้มเหลว เมื่อช้อนแหขึ้นมาทีไรก้อมีแต่ท่อนไม้ ด้วยความโมโหแกเลยขว้างท่อนไม้นั้นออกไปให้ไกล แต่แล้วเมื่อช้อนแหขึ้นมาใหม่ก็ปรากฏท่อนไม้ท่อนเดิมอีก ต่อจากนั้นแกก็ขว้างท่อนไม้ขึ้นฝั่ง และแกก็ฉุก คิดว่าแปลกที่ท่อนไม้ธรรมดาจะสามารถลอยทวนน้ำได้ คงจะเป็นสิ่งวิเศษ และแกก็ได้นำท่อนไม้นั้นขึ้นฝั่ง และเพ่งมองท่อนไม้นั้นพร้อมกับอธิษฐานว่า หากท่อนไม้นี้มีความศักดิ์สิทธิ์ขอให้คืนนี้จับปลาได้มาก เมื่อพ้นจากความจนแล้ว เมื่อขึ้นฝั่งจะนำท่อนไม้นี้แกะสลักเป็นเทวรูปศักดิ์สิทธิและสักการะบูชาเช้าวันไม่ให้ขาด เมื่ออธิษฐานจบแกเอาท่อนไม้นั้นวางบนหัวเรือ ปรากฏว่าช้อนเพียงสองถึงสามครั้งก็ได้ปลาตัวโตเต็มเรือ จึงนำปลาขึ้นฝั่งวันนั้นปลาของแกขายได้ราคา เพราะชาวประมงคนอื่นจับได้น้อยแกจึงมีเงินจับจ่ายใช้สอย และทุกครั้งที่แกออกหาปลา ...

แนะนำ ยาบำรุงครรภ์ จับซาไท้เป้า หรือ 13 องครักษ์พิทักษ์ครรภ์ ยาจีน บำรุงครรภ์

จับซาไท้เป้า  ยาบำรุงครรภ์ สมุนไพรจีน ช่วงนี้เพื่อนๆ เริ่ม ทยอย แต่งงาน กันแล้ว นะครับ เราเองก็มียาจีนมา นำเสนอ ซึ่งเป็น ยาดี ที่คุณแม่ ของเรา ทาน ตอนคลอดเรา นั่นก็คือ "จับซาไท้เป้า" ยาบำรุงครรภ์ นั่นเอง เงง เงง เงง เงง จับซาไท้เป้า เป็น ยาจีน ซึ่ง ประกอบไปด้วย สมุนไพร จีน 13 อย่างด้วยกัน มี สรรพคุณ เป็น ยาบำรุงครรภ์ บำรุง ทั้งคุณแม่ และ คุณลูก เลย เรียกได้ว่า สรรพคุณ ครบครัน บำรุง คุณแม่ ช่วงตั้งท้อง ช่วยให้ คุณลูก แข็งแรง มีผิวพรรณ สะอาดสะอ้าน ในตอนที่คลอดออกมา จะ คลอดง่าย ตัวจะไม่มีคราบไขมันติดเยอะ จ้า วิธีกินจับซาไท้เป้า ทานตั้งแต่ท้อง 5 เดือนขึ้นไป 2 อาทิตย์ทาน 1 ห่อ ทานจนคลอด ศิริรวมแล้ว ถ้าทาน ครบ dose โดยเริ่มตั้งแต่ 5 เดือน ต้องทานทั้งหมด 10 ห่อ จ้ะ วิธีต้มจับซาไท้เป้า  1 ห่อ ต้มได้ 2 ครั้ง ครั้งแรก ใส่น้ำ 3 ถ้วย ต้มเหลือ 8/10 ถ้วย ครั้งที่ 2 ใส่น้ำ 2.5 ถ้วย ต้มเหลือ 7/10 ถ้วย ซื้อที่ไหนดี หลายๆ คน มักจะมีคำถาม ว่า จับซาไท้เป้า ซื้อที่ไหน  ซึ่งเราเอง แนะนำร้านขาย จับซาไท้เป้า ซึ่งก็คือ ร้าน ขายยา ย่ง เช...

ปีอธิกสุรทิน อธิกมาส อธิกวาร และ การทดปฏิทิน

 ปีที่แบ่งตามรอบพระอาทิตย์ (สุริยคติ) มี 2 แบบ คือ 1. ปกติสุรทิน คือ มี 365 วัน 2. อธิกสุรทิน คือ มี 366 วัน (เดือนกุมภาฯมี 29 วัน) การคำนวน ปีอธิกสุรทิน ตรงนี้บางท่านจะจำได้แต่เพียง ว่า หาร 4 ซึ่งไม่ใช่แค่นั้นครับ ความจริงแล้ว จะมีสูตรคำนวณที่ถูกต้องคือ ให้เอา ค.ศ.ตั้ง แล้วเอา 4 หาร หากหารลงตัวก็ใช่ ยกเว้น 100 หารลงตัว แต่หาก 400 ลงตัวก็ให้นับเป็นอธิกสุรทินด้วย (เช่น ปี 1900 ไม่เป็นอธิกสุรทิน แต่ปี 2000, 2004 เป็นปีอธิกสุรทิน) ปีที่แบ่งตามรอบพระจันทร์ (จันทรคติ) แบ่งเป็น 3 คือ 1. ปกติมาส-ปกติวาร  (บางที่เขียนย่อ เป็น ปกติมาส-วาร)       คือ ปีที่เป็นปกติ มีเดือนคู่ ข้างขึ้น 15 วัน ข้างแรม 15 วัน       และมีเดือนคี่ ข้างขึ้น 15 วัน ข้างแรม 14 วัน       รวมวันใน 1 ปี เป็น (30*6+29*6) = 354 วัน 2. ปกติมาส-ปีอธิกวาร (บางที่เรียกเป็น อธิกวาร)       คือ ปีที่เป็นปกติ แต่เดือน 7 จะมีข้างแรม 15 วัน        รวมวันใน 1 ปี เป็น 354+1 = 355 วัน 3. ปีอธิกมาส-ปกติวาร (บางที่จะเรียกเป็น อธิกมาส)     ...

[ www.whoisblocked.info ] See who blocked you from MSN, MSN phising อีกเวปหนึ่งที่น่าระวัง

วันก่อนได้รับเมลจากเพื่อน ซึ่งตกเป็นเหยื่อของ MSN phishing อีกรายแล้ว มันส่งมาตามนี้ ตัวอักษรการ์ตูน น่าอ่านมาก คลิกที่ภาพเพื่อดูรูปใหญ่ หรือ อ่านจากข้อความข้างล่าง From: invites@5554.whoisblocked.info on behalf of myfriendemail@hotmail.com ¿Want to know who deleted you from MSN Messenger? Join Now to WHOISBLOCKED.INFO ... Easy look who deleted or blocked you from msn contact list i have do that! now i know what "friends" blocked me ... www.whoisblocked.info Now byebye! dont forget to join that website, its amazing! PD: WhoIsBlocked.info ... Great website 82703700473147717107 ซึ่งพอคลิกเข้าไปมันไปที่หน้า http://www.whoisblocked.info/?4771370071078270 ซึ่งหน้าตาเป็นแบบนี้ ซึ่งตรงหัวมันบอกว่า SSL 128 BITS SECURE WEBSITE แต่ว่า URL เป็น http:// นะฮะ ป้าย SSL หลอกลวงผู้บริโภคของเวปไซท์ whoisblocked.info ( cheating SSL sign from website whoisblocked.info ) สังเกตว่า ป้ายโฆษณา ของเวปมันใหญ่เท่าฝาบ้าน ข้างบน โลโก้ มีแถบ โฆษณา กูเกิล แถบหนึ่ง ซึ่งถ้าดูเผินๆ จะดูเหมือนเป็นแท็...

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( 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 ...

ลอง recovery file โดยใช้ ubuntu

จาก ที่ไปอ่านมา ลองเล่น photorec ดูดิ๊ $ sudo photorec จากนั้นมันก็จะเข้าสู่เมนูของมันซึ่งก็มั่วๆไปได้ มันใช้ไม่ยาก ผมขออนุญาตไม่เอา screenshot ของ shell มาให้ดูละกัน เนื่องจากไปดูของคนอื่นแล้วตกใจว่าต้องเลือกอะไรมากมาย แต่ยืนยันครับว่ามันใช้ง่ายจริงๆ พอมัน recovery เสร็จ ก็ไปอยู่ในโฟลเดอร์ที่สร้างไว้ แต่ติด permission The folder contents could not be displayed. You do not have the permissions necessary to view the contents of ... ก็เปลี่ยนเจ้าของมันซะเลย $ chown -R dsin recup_dir.1 # Give permissions as owner to user dsin. ส่วน ข้อเสียคือ ชื่อไฟล์ มันจะออกมาเป็น f ตามด้วยตัวเลข และที่เหมือนจะเหนือความคาดหมายคือ มันชื่อว่า photorec แต่มัน recover ไฟล์อื่นๆมาให้ด้วย เช่น mp3 mov mid gz zip แต่มันดันเปิดไม่ได้ซักกะอันน่ะสิ 55+ photorec ใช้ได้ทั้ง DOS, Windows, Linux, Sun Solaris, Mac OS X และที่สำคัญ ฟรี !!! ดูเพื่มเติมจาก หน้า official ของ photorec จริงๆ software พวก recovery มีอยู่มากมาย อันนี้คัดๆมาที่ใช้ฟรี ที่ใช้บน windows เช่น UndeletePlus Roadkil's Unstoppable Copier  ( มี sta...

วิธีการไป อย. กระทรวงสาธารณสุขจากหัวลำโพง

ทางไป : รถไฟฟ้า MRT หัวลำโพง ไปลงที่ สถานี กระทรวงสาธารณสุข  ถ้ากดที่ตู้ต้องเปลี่ยนไปหน้าจอสายสีม่วง สนน ราคา 48 53 บาท ต่อมอไซด์ ถ้าไป อย. 20 บาท จากหน้าทางเข้า  ถ้าฝนตกแนะนำให้โบกแท็กซี่จากข้างหน้า ข้างในหาแท็กซี่ยากมาก ถ้าจะเดินประมาณ 2.4 km ให้ระวังหลงเข้าไปรพ ศรีธัญญา รพ ศรีธัญญาพื้นที่ข้างในใหญ่มาก และเหมือนจะล้อมด้วยคลอง เหมือนจะมีทางออกแค่ทางที่เข้าไปนั่นแหละ ทางกลับ : รถเมล์ 97 จาก อย. ตรงข้ามประกันสังคม ทางที่ 1 : ถ้าจะใกล้ลงหน้าปากซอยขึ้นสายสีม่วงที่สถานีกระทรวงสาธารณสุขที่เดิม ทางที่ 2 : ผ่าน ท่าน้ำนนท์​ กลับเรือได้ ทางที่ 3 : ผ่านหน้าพระจอมพระนครเหนือด้วยนะ ผ่าน สถานีรถไฟฟ้า MRT บางซื่อ  ( จาก อย. ไป MRT บางซื่อ 17 บาท,  จาก MRT บางซื่อ ไป MRT หัวลำโพง 44 บาท นั่งกลับได้ 2 ทาง ทางหัวลำโพง กับ ไปเปลี่ยนที่ท่าพระ ไม่รู้ว่าทางไหนเร็วกว่ากัน ) ทางที่ 4 :  ผ่าน สะพานควาย  ทางที่ 5 :  นั่งถึงอนุสาวรีย์ชัยสมรภูมิได้ ค่ารถเมล์ 21 บาท ค่ารถไฟฟ้าไป BTS สะพานตากสิน 47 บาท 

[ AI ] IBM granite, NVIDIA robotics, IBM Langflow, watsonx, LMCache, LiteRT, Self driving car, Mamba model, RAG

 IBM granite: Time series from sensor, stock market * Forcast * Anomaly detection - classification high medium risk, data synthesis Embedding AI - 1M params - edge device - small AI Send insight --- NVIDIA * Jackson Thor robotic * Nemo ---- * IBM Langflow : open source * Watsonx (n8n) Enterprise : guardrails / log, tool using policy ----- LMcache : open source KC cache Prompt -> key value (RAGs) Same context ( e.g. same docs) Reduce operating costs CacheGen : make cache cheap to move and store CacheBlend : reuse chunk, not just prefix ---- Google มี framework ที่ optimize AI บน mobile phone นั่นคือ LiteRT : google pytorch Quantisation เท่าไหร่บน device นี้ Model explorer: quantize แล้ว error < 5% XMNpack ใช้ CPU ลดลง Google AI edge portal : benchmark AI on real device ---- Self driving car * Nvidia Alpamayo 2 model * Carla simulation Random forest -> multiple scenarios -> json -> LLM Car talk to mobile phone (cross the road) ----- Mamba model (recursive)  - alte...

อยู่เหงาๆ เราไปเที่ยว : สวนนงนุช พัทยา ( Nong NoochTropical Garden, Pattaya Thailand )

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่  ลิงก์นี้  นะครับ วันนี้ ได้มีโอกาสไปเยี่ยมชม สวนนงนุช ซึ่งอยู่ไกลถึงพัทยาโน่น ซึ่งเรา วางแผน ไป-กลับ ภายในวันเดียว เป็น one day trip น่ะ อันที่จริง สวนนงนุช นี้ #เราเอง ได้ยินครั้งแรก จาก รายการพาเที่ยว รายการหนึ่ง ทางทีวี เห็นว่า เขาจัดสวนไว้ทั้งปี ไม่ต้องรอเทศกาล เหมือน งานพืชสวนโลก อันที่จริง พืชสวนโลก ก็น่าไปนะ เห็นตู้นอนของรถไฟ สวยดีเหมือนกัน ไว้ต้องหาโอกาสไปลองมั่ง การกลับมีขลุกๆ ขลักๆ เล็กน้อย เพราะว่า ทางเวปอื่นๆ ที่หาข้อมูลมา บอกแต่วิธีไป ไม่บอกวิธีกลับ ก็แบบ งง อ่ะ ว่า ไปไม่กลับกันเหรอ ตอนขากลับเลยทุลักทุเลไปนิด ดู วิธีเดินทาง กับค่าใช้จ่าย ได้จากล่างสุดของเอนทรี น้ะจ้ะ Stone Henge สวนสวยมากเลยแจ้ ที่ชอบก็คือ มี Sky Walk ทำให้มองเห็นภาพมุมสูงได้ด้วย แทนที่จะเป็นแค่ภาพมุมมนุษย์เดินดิน ทั่วๆไปที่ได้เห็นกัน ตอนแรกนั่ง สามล้อ เข้าไป แบบว่า งงๆ เพราะว่า เขาเก็บตังค์ตั้งแต่ Main Gate เลย หลังจากนั้น สามล้อ จะส่งเราที่ Pottery Garden แบบว่า เง็งเบย เพราะว่...