All posts by admin

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

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

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

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

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

ขอเชิญชวนผู้ที่สนใจ ร่วมถวายปัจจัยในโอกาสทอดกฐิน ที่วัดแหลมไผ่ 22 ตค. 2565

เรื่องมันเริ่มมาแบบนี้ฮะ บัวบาน แว้บกลับบ้านไปเมื่อช่วงเชงเม้ง ปี 2565 และได้มีโอกาสไปเยี่ยมเยียนท่านหลวงพ่อปราโมทย์ รักษาการเจ้าอาวาสวัดแหลมไผ่ (ซึ่งอดีตเคยเป็นเพื่อนบ้านของบัวบาน). วัดแหลมไผ่เป็นวัดที่เก่าพอสมควร อายุเกิน 100 ปีมาแล้ว เดิมชื่อวัดเวฬุวนาราม ตั้งอยู่ที่ตำบลมะลวน อำเภอพุนพิน แขวงเมืองไชยา​ (ปัจจุบันคือจังหวัดสุราษฎร์ธานี). พอบัวบานได้เยี่ยมชมวัด ก็มีความรู้สึกอยากจะช่วยพัฒนาวัดให้สะอาด สะดวกสบาย ปลอดภัย น่าเข้าหา, บัวบานก็เลยขอร่วมเป็นเจ้าภาพทอดกฐินประจำปีนี้ซะเลย.

ศิลาจารึก จุดกำเนิดของวัดแหลมไผ่ ตั้งแต่สมัย พ.ศ.2452

มีพระบรมราชโองการ ประกาศไว้แก่ชนทั้งปวงว่า ที่เขตรพระอุโบสถ
วัดเวฬวนาราม ตำบลมะลวน ท้องที่อำเภอพุนพิน แขวงเมืองไชยา โดยยาว ๑๓ กว้าง ๑๒ วา เจ้าอธิการด้วน กับทายกแลราษฎร ได้ให้กราบบังคมทูลพระกรุณา ขอเปนที่วิสุงคามสีมา พระเจ้าแผ่นดินสยาม ได้ทรงยินดีอนุโมทนาอนุญาตแล้ว โปรดให้กรมการ ปักกำหนดให้ตามประสงค์ ทรงพระราชอุทิศที่นั้นให้เปนที่วิสุงคามสีมา ยกเปนแผนกหนึ่งต่างหากจากพระราชอาณาเขต เปนที่วิเสศสำหรับพระสงฆ์มาแต่จาตุทิศทั้งสี่ ทำสังฆกรรมมีอุโบสถกรรมเปนต้น

พระราชทานดงแดนวันที่ ๒๖ เมษายน รัตนโกสินทร์ศก ๑๒๙ พระพุทธศาสนกาล ๒๔๕๒ พรรษา เปนวันที่ ๑๕๑๔๑​ ในรัชกาลปัตยุบันนี้

ศิลาจารึก ณ ​อุโบสถวัดแหลมไผ่
ภายนอกโบสถ์
ภายในโบสถ์

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

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

โครงการทอดกฐิน 2565 และแผนการพัฒนาวัด

หลวงพ่อปราโมทย์ก็ได้ชี้แจงแผนการพัฒนาวัดไว้คร่าวๆ ดังนี้

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

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

ขอร่วมอนุโมทนากับทุกท่าน ขอให้ผลบุญในการช่วยทำนุบำรุงศาสนานี้ นำพาสิ่งดีๆมาแก่ชีวิต และเป็นเสบียงในการเดินทางผ่านวัฏฏะ นำพาให้ท่านพ้นจากทุกข์ทั้งสิ้นทั้งปวงเทอญ.

ผู้ใดที่สนใจร่วมบริจาคเงิน สามารถโอนเงินมาได้ที่

ชื่อบัญชี: ปานนวัต จานทอง
ธนาคาร: ttb (ทีเอมบีธนชาต)
เลขที่บัญชี: 667-2-15521-2

ขอความกรุณาให้ท่านที่โอนเงินมา ส่งสลิปให้บัวบานด้วยนะฮะ. จะทาง facebook messenger หรือ LINE หรืออีเมลล์ก็ได้ฮะ.

ซองกฐิน
รายละเอียด
รายชื่อคณะกรรมการ

ปล่อยปลาอะไรดี? แม่น้ำ คลอง บึง

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

ลูกปลาช่อน
ปล่อยตะเพียนทองลงบึงข้างๆคอนโด ใน กทม.

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

เมื่อมีการนำบุญเข้ามาเกี่ยวข้องกับการปล่อยชีวิตสัตว์ ก็ทำให้เกิดพุทธพาณิชย์ขึ้นตามวัดมา บวกกับความเชื่อแบบอิหยังวะ (อวิชชาล้วนๆ) ยกตัวอย่าง เช่น

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

บัวบานแนะนำว่า อย่าทำเด็ดขาด! นะฮะ. อย่าปล่อยปลาด้วยความโลภในบุญ แต่จงปล่อยปลาด้วยความเข้าใจและจิตใจอนุรักษ์.

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

สั่งปลาคังไซส์ใหญ่ ตัวละ 2 กิโลกรัมมาปล่อยลงแม่น้ำ
ปล่อยปลาคัง ตัวเท่าขา

ใน กทม. นั้น แม่น้ำลำคลองส่วนใหญ่จะเป็นคลองขุด. ถ้าจะปล่อย ควรปล่อยลงเจ้าพระยาเลย หรือปล่อยลงคลองที่ใหญ่และกว้างขวางหน่อย.

ปล่อยปลาคังขนาดกลาง ที่คลองกุ่ม

โครงการ โปรแกรมเมอร์จิตกุศล

เป้าหมาย

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

กลุ่มเป้าหมาย

  • เด็กกำพร้า จากบ้านเด็กกำพร้าทั่วประเทศ
  • ผู้ต้องขังในเรือนจำ
  • บุคคลทั่วไป

ทรัพยากรณ์ที่ต้องใช้

  • Computer laptop จำนวน 20 เครื่อง ต่อทุกเดือน.
  • หุ่นยนต์ LEGO พร้อมชุด sensor 20 ตัว.
  • ครูผู้สอน
    • ระดับ 1 ใช้ Minecraft code
    • ระดับ 2 ใช้ Blocky
    • ระดับ 3 ใช้หุ่นยนต์ LEGO
    • ระดับ 4 เริ่มฝึกภาษาคอมพิวเตอร์
    • ระดับ 5 เริ่มฝึกสร้าง application ระดับต้น

แผน

  1. ติดต่อศูนย์เด็กกำพร้าหรือเรือนจำ ให้คัดเลือกบุคคลที่มีความสามารถ 20 คน.
  2. จัดการสอนทุกวัน หรือทุกสองวัน. พร้อมเรียนภาษาอังกฤษไปด้วย.
  3. จบบท ให้ทำแบบทดสอบ.
  4. ผู้ที่ผ่านการทดสอบสุดท้าย จะได้รับ laptop ฟรี. และอาจจะได้รับว่าจ้างให้ทำงานเป็นผู้ช่วยสอน.
  5. ผู้ที่ผ่านการทดสอบ จะได้เรียนต่อการเขียนโปรแกรมระดับสูง.
  6. ผู้ที่จบคอร์สเขียนโปรแกรมระดับสูง จะถูกส่งไปฝึกงานกับบริษัท.

Error: No such module was linked electron_common_v8_util

Electron has removed remote module, and move it to electron-userland at @electron/remote. The last version of Spectron need to migrate to @electron/remote but there is an issue when Spectron includes the module.

const path = require('path');
const remoteMain = require('@electron/remote/main');
const WebDriver = require('webdriverio');

The code above is from spectron/lib/application.js. It shows the line of code that includes module from @electron/remote/main

const get_electron_binding_1 = require("../common/get-electron-binding");
const v8Util = get_electron_binding_1.getElectronBinding('v8_util');

The code above is from server.ts in @electron/remote/main/, it calls getElectronBinding('v8_util').

const getElectronBinding = (name) => {
    if (process._linkedBinding) {
        return process._linkedBinding('electron_common_' + name);
    }
    ...
};

The code above is function getElectronBinding that call _linkedBinding. This code will throw an error and the debugging ends here.

Here is the full error message.

Debugger attached.
Waiting for the debugger to disconnect...
internal/bootstrap/loaders.js:128
      mod = bindingObj[module] = getLinkedBinding(module);
                                 ^

Error: No such module was linked: electron_common_v8_util
    at process._linkedBinding (internal/bootstrap/loaders.js:128:34)
    at Object.getElectronBinding (d:\GIT\univeralcontainer\eikon-driver11\eikon-driver\node_modules\@electron\remote\dist\src\common\get-electron-binding.js:6:24)
    at Object.<anonymous> (d:\GIT\univeralcontainer\eikon-driver11\eikon-driver\node_modules\@electron\remote\dist\src\main\server.js:12:39)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Object.<anonymous> (d:\GIT\univeralcontainer\eikon-driver11\eikon-driver\node_modules\@electron\remote\dist\src\main\index.js:4:16) {
  code: 'ERR_INVALID_MODULE'
}
Error occurs while nodejs is including module remoteMain from require(‘@electron/remote/main’)

How To – Debounce function in Vue Class Component

I want to validate an input textbox. When users enter anything in the textbox, it will validate and show error message according to the result.

I need to use Debounce here to reduce validation rate.

validateText = _.debounce(() => {
    if (
        this.input.passwordConfirmation.length > 0 &&
        this.input.password !== this.input.passwordConfirmation
    ) {
        this.isPasswordSame = false;
    } else {
        this.isPasswordSame = true;
    }
    console.log('Same: ' + this.isPasswordSame);
    console.log('Valid: ' + this.isPasswordValid);
}, 500);

Then I bind this function to onChange.


Finally, I bind the validation result to a div for error message.

Password and confirmed password is not the same

… WTH …. it does not work.

The reason is that Vue does not work well with arrow function () =>.
So we need to make sure that scope of

this.isPasswordSame

is correct.

Let’s make a simple modification like this.
First declare a validator function as methods. Then pass that function to debounce.

validator() {
    if (
        this.input.passwordConfirmation.length > 0 &&
        this.input.password !== this.input.passwordConfirmation
    ) {
        this.isPasswordSame = false;
    } else {
        this.isPasswordSame = true;
    }

    if (this.input.password.length < 8) {
        this.isPasswordValid = false;
    } else {
        this.isPasswordValid = true;
    }
    console.log('Same: ' + this.isPasswordSame);
    console.log('Valid: ' + this.isPasswordValid);
}

validateText = _.debounce(this.validator, 500);

It works !!!

จับผิด 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 อยู่อย่างถูกต้องตามกฎเกณฑ์. เฮ้อออ บัดซบ.

Computer Programming For Kids

 

 

 

Programming คืออะไร?

มนุษย์ทุกผู้ทุกคนล้วนแล้วแต่เป็น Programmer ตั้งแต่เกิด, เพียงแต่ไม่รู้ตัวเท่านั้น. เราจะปลุกความเป็น Programmer ในตัวคุณออกมาด้วยการเล่นเกมส์สนุกๆ.

 

คุยกับหุ่นยนต์อย่างไรให้รู้เรื่อง?

เปรียบได้ดังการไปยืนคุยกับผู้พิการหูหนวก, เขาไม่สามารถรับฟังข้อมูลเสียงจากเราได้. สิ่งที่เราควรทำคือ เขียนตัวหนังสือหรือใช้ภาษามือเพื่อสื่อสาร.

เช่นเดียวกัน, ถ้าเราอยากสื่อสารกับ Computer หรือหุ่นยนต์, เราต้องรู้ว่า Computer หรือหุ่นยนต์ตัวนั้นสื่อสารด้วยช่องทางใดและใช้ภาษาอะไรบ้าง?

 

ทดลองสื่อสารด้วยภาษาหุ่นยนต์

หุ่นยนต์ก็เหมือนมนุษย์, มีความแตกต่าง มีหลากหลายชาติพันธุ์. เราจะมาทดลองสั่งการหุ่นยนต์ Ozobot ด้วยภาษาของมันกัน.

 

 

พื้นฐาน 3 ข้อแห่ง Computer Programming

คำสั่ง, เงื่อนไข, การทำซ้ำ … พื้นฐานขั้นสุดของ Computer Programming.

 

เขียน Program สั่งการหุ่นยนต์

ทดลองใช้ภาษา Blocky เพื่อสั่งการหุ่นยนต์ให้เดินหลบสิ่งกีดขวาง.

 

สร้างเกมส์ Flappy Bird ในตำนาน

เกมส์ 8 bit ที่เราต้องพาเจ้านกบินลอดช่องแคบ, ที่เคยดังถล่มทลายเนื่องด้วยความยากระดับเทพพระเจ้า. เราจะสร้างเกมส์เล่นกันด้วย Scratch.

 

 

 

ไม่ต้องกลัวลืม 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 โผล่มา พร้อมกดใช้ได้เลยนะฮะ.