Tag Archives: featured

ปฏิจจสมุปบาท และเส้นทางสู่ นิพพาน

เมื่อสัปดาห์ที่แล้ว บัวบานได้ไปศึกษาอบรมธรรมมะจากศูนย์อบรมแห่งหนึ่ง โดยบัวบานตั้งใจจะไปศึกษา “ปฏิจจสมุปบาท” ซึ่งถือว่าเป็นแก่นของพุทธศาสนาเลยก็ว่าได้.

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

ความเกิดขึ้นแห่งกองทุกข์ทั้งมวลนี้ มีได้ด้วยประการฉะนี้ภิกษุทั้งหลาย นี้เรียกว่า ปฏิจจสมุปบาท

https://84000.org/tipitaka/read/m_siri.php?B=16&siri=1

ศูนย์อบรมแห่งนั้น ตั้งอยู่บนเนินเขา ห้อมล้อมด้วยป่าไม้ บรรยากาศสดชื่นและร่มเย็นมาก. ผู้เข้าร่วมและผู้ปฏิบัติที่พำนักอยู่ที่ศูนย์อบรม ก็ล้วนแต่เป็นกัลยาณมิตร อัธยาศัยดี พูดจาไพเราะ ยิ้มแย้ม ช่างเป็นสังคมรมณีย์ที่หาได้ยากยิ่งในโลกใบนี้. บัวบานได้ที่พักเป็นบ้านเดี่ยวขนาดราวๆ 25 ตร.ม. มีห้องน้ำในตัว มีพัดลม มีแอร์ มีเตียง (แต่ไม่มีฟูก). มีความพอดีพอเพียงกับการปฏิบัติธรรม. ห้องบัวบานอยู่ตรงส่วนของเนินเขา บรรยากาศดี, พอไปถึงห้องพัก ก็ได้พบกับ งู ตัวสีแดง นอนนิ่งอยู่ตรงทางเดินขึ้นประตูห้อง (-_- ) บัวบานก็เลยจะไปหยิบโทรศัพท์มาถ่ายรูป พอเดินกลับมา… เจ้างูก็หายไปแล้ว – -“. หลอนเลยครับ ตั้งแต่นั้นเป็นต้นมา เวลาเดินออกจากห้อง ก็จะส่องไฟไปตลอดทาง.

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

ตื่นมาตีสาม ด้วยความสดใส (T-T ซึ่งควรจะตื่นตีสี่ครึ่ง เพื่อไปทำวัตร) บัวบานก็เลยเล่นเพ่งสมาธิ (ซึ่งไม่เคยทำมาก่อนอ่านะ), ปรากฏว่ามันได้ผลประหลาดๆ ซึ่งจะขอข้ามตรงนี้ไป เพราะบัวบานเองก็ไม่รู้ว่ามันคืออะไร ไว้ถ้ารู้แล้วจะมาอัพเดต. จากนั้น บัวบานก็ได้คิดใคร่ครวญถึงปฏิจจสมุปบาทอีกแล้ว โดยจินตนาการว่า ถ้าพระพุทธเจ้าเป็นไก่ไข่ที่อยู่ในฟาร์มแบบปิดของ CP, พระพุทธเจ้าจะอธิบายที่มาแห่งทุกข์ทั้งปวงของเหล่าไก่อย่างไร? นอกจากนี้ คำอธิบายที่ได้มา ต้องสามารถประยุกต์ใช้กับภพอื่นๆ ทั้งนรก เปรต เทวดา พรหม ได้ด้วยนะ ไม่งั้นถือว่าตอบถูกครึ่งเดียว.

ทันใดนั้น ความเข้าใจในปฏิจจสมุปบาทก็เกิดขึ้น!!!!

ปัญหาที่ทำให้บัวบานไม่เข้าใจปฏิจจสมุปปบาท ก็เพราะว่า บัวบานคิดไปเองว่าเจ้าชายสิทธัตถะเริ่มทำความเข้าใจความทุกข์โดยเริ่มต้นจากอวิชชา ซึ่งมันไม่เมคเซ้นส์สำหรับบัวบาน. เพราะว่าคนปกติทั่วไป เวลาจะวิเคราะห์ปัญหาใดๆ จะต้องเริ่มต้นจากตัวปัญหา แล้วคิดย้อนกลับไปหาสาเหตุของปัญหา. มันไม่มีทางที่จะเอาเริ่มวิเคราะห์โดยที่รู้ต้นตอของปัญหาอยู่แล้ว. เพราะถ้ารู้ต้นตอปัญหาอยู่แล้ว จะวิเคราะห์ปัญหาไปทำล่ะ (วะ)?

นั่นหมายความว่า พระพุทธเจ้าน่าจะเริ่มต้นวิเคราะห์หาที่มาของความทุกข์แบบหนึ่งก่อน ไม่ใช่เริ่มต้นที่อวิชชา. ซึ่งเหตุแห่งทุกข์แบบนึงที่ถูกระบุไว้ในพระไตรปิฎก ประมาณว่า

เจ้าชายสิทธัตถะได้เคยเสด็จประพาสอุทยาน ได้ทอดพระเนตรเทวทูตทั้ง ๔ คือคนแก่ คนเจ็บ คนตาย และบรรพชิต พระองค์จึงสังเวชพระทัยในชีวิต

https://www.onab.go.th/th/content/category/detail/id/72/iid/460

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

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

ปฏิจจสมุปบาท แบบปฏิโลม จะเรียงลำดับจากผลไปหาเหตุ

มีทุกข์ เพราะมี ชราและมรณะ
มีชราและมรณะ เพราะมี ชาติ
มีชาติ เพราะมี ภพ
มีภพ เพราะมี อุปปาทาน
มีอุปปาทาน เพราะมี ตัณหา
มีตัณหา เพราะมี เวทนา
มีเวทนา เพราะมี ผัสสะ
มีผัสสะ เพราะมี สฬายตนะ
มีสฬายตนะ เพราะมี รูปนาม
มีรูปนาม เพราะมี วิญญาณ
มีวิญญาณ เพราะมี สังขาร
มีสังขาร เพราะมี อวิชชา

บัวบานเขียนเอง โดยเอาเนื้อหาจากพระไตรปิฎก

เมื่อปัญญาเกิด ก็เลยต้องจดบันทึก เพราะกลัวลืม บัวบานเลือกใช้ UML Activity Diagram มาช่วยอธิบาย วงจรปฏิจจสมุปบาท จึงได้รูปนี้ขึ้นมาฮะ.

แผนภาพวงจรปฏิจจสมุปบาท ที่บัวบานวาดเอง

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

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

ดูกรภิกษุทั้งหลาย สงสารนี้กำหนดที่สุดเบื้องต้นเบื้องปลายไม่ได้
เมื่อเหล่าสัตว์ผู้มีอวิชชาเป็นที่กางกั้น มีตัณหาเป็นเครื่องประกอบไว้
ท่องเที่ยวไปมาอยู่ ที่สุดเบื้องต้นย่อมไม่ปรากฏฯ

https://84000.org/tipitaka/pitaka_item/v.php?B=16&A=4730&Z=5111

จับผิด WebDriver ด้วย W3C WebDriver standard และ JSONWireProtocol

 

เคยไหม… ที่พยามเช็ค state ของ element โดยใช้ฟังชันเช่น

browser.isEnabled('div.#login-id');

แต่ทว่า… เช็คยังไงก็ได้ true, ทั้งๆที่ตาเรามันฟ้องว่ามัน disabled อยู่เห็นๆ.

หลังจากเสียเวลากับมันสองวันเต็มๆ, ก็ตัดสินใจล้วงลึกเข้าไปที่ chromedriver โดยไม่ผ่าน WebDriverIO.

เครื่องมือและเอกสารที่ใช้

หาได้ตามกูเกิ้ล.

  • WDIO
  • netstat
  • Postman
  • https://www.w3.org/TR/webdriver1/#dfn-find-element
  • https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidenabled

ขั้นตอน

  1. เราก็รันเทสของเราไปตามปกติ. จนมันเปิด browser และเปิด app ของเรา.
  2. เราต้องหา sessionID ที่เทสของเราเปิดไว้.​โดยใช้โปรแกรมดังนี้.
    let ssid = '';
    
    await browser.sessions().then((sess) => {
        sess.value.forEach((ses) => {
            ssid = ses.id;
        });
    });
    
    console.log('SessionID : ' + ssid);
  3. เมื่อเราได้ sessionID มา, ให้เราไปหาว่า webdriver ของเราเปิด service ไว้ที่ไหน. สามารถใช้ netstat เพื่อดูว่าเราเปิด port อะไรไว้มั่ง.
    netstat -a | grep "LISTEN"
  4. จากนั้นก็สุ่ม port ไปทีละอัน โดยเปิด URL ใน web browser เลย. ตัวอย่างข้างล่างสุ่ม port หมายเลข 9515.
    http://localhost:9515/wd/hub/session/:sessionId/element/xxx/enabled
    

    ถ้าเจอเข้ากับ chromedriver service, มันจะตอบกลับมาว่า

    {"sessionId":":sessionId","status":6,"value":{"message":"no such session\n  (Driver info: chromedriver=2.29 (8e8216e581c512667203931f81c1a1ead47222e5),platform=Mac OS X 10.14.1 x86_64)"}}
  5. คราวนี้เราเปิด Postman.
  6. เริ่มต้นจากการหา element. ให้ใช้สร้าง POST request.

    1. URL: http://localhost:<port ที่เราได้มาจาก step 3-4>/wd/hub/session/<sessionID ที่เราได้มาจาก step2>/element
    2. Post body ให้ใช้ raw. ส่งข้อมูลเป็น JSON.
      { "using": "css selector", "value": "coral-panel coral-list-item" }
    3. ถ้าเจอ element, มันจะตอบกลับมาเป็น JSON แบบนี้.
      {
       "sessionId": "87edfc2e515dc6c39b469edbb31a4228",
       "status": 0,
       "value": {
           "ELEMENT": "0.8506124488032647-15"
       }
      }
  7. ต่อมาให้เอา ELEMENT ที่ได้จาก Step 6.3 ไปใช้หา state ของมัน. เราต้องสร้าง request GET ใน Postman.
    1. URL: http://localhost:<port ที่เราได้มาจาก step 3-4>/wd/hub/session/<sessionID ที่เราได้มาจาก step2>/element/<ELEMENT ที่ได้จาก step 6.3>/enabledเราจะเห็น state ในรูปแบบ JSON แบบนี้.
      {
       "sessionId": "87edfc2e515dc6c39b469edbb31a4228",
       "status": 0,
       "value": true
      }

 

จะเห็นได้ว่า ChromeDriver มันตอบมาเป็น TRUE!!!  ทั้งๆที่มัน disabled อยู่อย่างถูกต้องตามกฎเกณฑ์. เฮ้อออ บัดซบ.

ไม่ต้องกลัวลืม Shortcut key อีกต่อไป, มาเพิ่ม Menu ให้ Sublime กันเถ๊อะ

บัวบานใช้ Sublime บ้างในบางโอกาส. และประสบปัญหาอย่างแรง เวลาจะเรียกใช้ plugin แต่จำ shortcut key ไม่ได้! ต้อง google ทุกครั้งไป. น่าเบื่อ!

วันนี้ขอจบปัญหานี้อย่างถาวร ด้วยการเพิ่มเมนูเข้าไปให้ Sublime เลย. จะขอยกตัวอย่าง Plugin  Pretty JSON ซึ่งมีหน้าที่จัดเว้นวรรค เว้นบรรทัด ให้ JSON อ่านง่ายขึ้นนะฮะ.

Install Plugin

  1. กด Preferences > Package Control

  2. เลือก Package Control: Install package
  3. พิมพ์ “Pretty JSON” แล้วกด Enter

หลังจากที่มันลงเสร็จแล้วเราจะเห็น package นั้นบนเครื่องเรา.
Windows: %userprofile%\AppData\Roaming\Sublime Text 3\Packages\Pretty JSON
Mac: /Users/your-user/Library/Application Support/Sublime Text 3/Packages/Pretty JSON

 

Add a Menu

ณ จุดนี้ เราจะเพิ่มเมนู “PrettyPrint” และภายใต้นั้นเราจะใส่ “Pretty JSON” เอาไว้.

  1. เปิดไฟล์ Main.sublime-menu
  2. เพิ่ม object เข้าไปดังบรรทัดที่ 38-48
    [
        {
            "mnemonic": "n",
            "caption": "Preferences",
            "id": "preferences",
            "children": [
                {
                    "mnemonic": "P",
                    "caption": "Package Settings",
                    "id": "package-settings",
                    "children": [
                        {
                            "caption": "Pretty JSON",
                            "children": [
                                {
                                    "caption": "Settings – Default",
                                    "args": {
                                        "file": "${packages}/Pretty JSON/Pretty JSON.sublime-settings"
                                    },
                                    "command": "open_file"
                                },
                                {
                                    "caption": "Settings – User",
                                    "args": {
                                        "file": "${packages}/User/Pretty JSON.sublime-settings"
                                    },
                                    "command": "open_file"
                                },
                                {
                                    "caption": "-"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "caption": "PrettyPrint",
            "mnemonic": "p",
            "id": "prettyJson",
            "children": [
                {
                    "command": "pretty_json",
                    "caption": "Pretty JSON"
                }
            ]
        }
    ]
    
  3. Save file และ Restart Sublime. จะเห็น Menu โผล่มา พร้อมกดใช้ได้เลยนะฮะ.

Selenium JavaScript Executor (English version)

Javascript Executor in Selenium have a lot of benefits that normal Selenium API cannot provide.

For instance,

  • You want to fetch data from server but it needs an authentication.
  • You want data inside a response of fetch or AJAX (XHR).
  • You want to get value from Javascript such as data from performance API (Navigation Timing, User Timing, etc.)

Continue reading Selenium JavaScript Executor (English version)

WebSocket Performance Test on JMeter

วันนี้อยู่ๆก็มีอารมณ์อยากลองทำ performance test ของ websocket ขึ้นมา. ก็เลยทดลองเล่น JMeter 3 with plugin JMeter-WebSocketSampler.
เชิญชมวิธีการทำ performance test บน websocket (ws/wss) กัน. Continue reading WebSocket Performance Test on JMeter

JMeter – การใช้ JMeter แบบง่ายๆ

jmeter-logoมี tools จำนวนมากในตลาดที่ช่วยในการทำ performance test นะฮะ. JMeter (by apache) น่าจะเป็นตัวเก๋าที่ทุกๆคนรู้จัก. มีข้อดีหลักๆคือ อยู่มานาน ทำให้มี tutorial เยอะ, รองรับการใช้งานหลากหลาย เช่น http, SOAP, JDBC, MongoDB, LDAP, TCP, …, และมีลูกเล่นเยอะแยะ เช่นใส่ script นู่นนี่เพื่อประมวลผล response, assert response, monitor response.

บัวบานขอนำเสนอวิธีการใช้ JMeter ทำ performance test Web Application แบบง่ายๆ. Continue reading JMeter – การใช้ JMeter แบบง่ายๆ

บันทึกบัวบานเยือนสาธารณรัฐประชาชนจีน – day 2 – พระราชวังต้องห้าม เฉียนเหมิน และหวังฝูจิ่ง

กำแพงทิศเหนือของพระราชวังต้องห้าม

หลังจากเดินทางมาถึงปักกิ่ง และเยี่ยมชมกำแพงเมืองจีนในวันแรก ซึ่งเป็นวันจันทร์. วันที่สองเราก็ตื่นเช้ามาทานอาหารเช้าในโรงแรม. อาหารจะจืดๆ มันๆ, หาอาหารเค็มได้ยาก, อยากจะหาซีอิ๊วขาวมาหยดลงบนไข่ดาวสักหน่อยก็ไม่มี. เริ่มสงสัยว่าไอ้ซีอิ๊วขาวนี่มันเครื่องปรุงของจีนหรือของไทยกันแน่. Continue reading บันทึกบัวบานเยือนสาธารณรัฐประชาชนจีน – day 2 – พระราชวังต้องห้าม เฉียนเหมิน และหวังฝูจิ่ง

JMeter – Process JSON response with BeanShell Processor

jmeter-logo      บ่อยครั้งที่ request message นั้นต้องการเอาค่าจาก response ของอีก service หนึ่ง. ยกตัวอย่างเช่น เว็บไซต์ห้องสมุดต้องการแสดงรายการ favourite books, จะต้องมีการเรียกข้อมูล id หนังสือจาก FavouriteBookService ก่อนแล้วจึงเรียกข้อมูลหนังสือจาก BookInfoService  ดัง sequence diagram ใน Figure 1.

Figure 1. Sequence diagram แสดงการเรียกข้อมูล Favourite Books
Figure 1. Sequence diagram แสดงการเรียกข้อมูล Favourite Books

Continue reading JMeter – Process JSON response with BeanShell Processor