Recent Content

Fediverse: ก้าวข้ามเผด็จการรวบอำนาจที่ปกครองและขายสมาชิกสังคมออนไลน์ต่างสินค้า

posted on 2018-11-25

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

Move to Coleslaw

posted on 2018-08-20

1-2 months ago, I failed to run latest version of Jekyll. So I moved to Coleslaw, which look simpler but powerful enough instead.

(move 'picocms 'jekyll)

posted on 2017-06-04

I happened to think what if I die, who will pay for my hosting. So today I migrate my main website and blog posts from PicoCMS hosted at Scaleway to Jekyll hosted at Github. What I cannot pay for domain name, my site can be still accessed by veer66.github.io

PicoCMS and Jekyll are based on Markdown so I just wrote a script for renaming my blog post file name and modifing some metadata by the shell script below:

Sh for x in *.md do T=`head -n4 $x | grep '^Title:' | sed 's/Title: //' | sed 's/[ "\|?\/\(\)]/-/g'` D=`head -n4 $x | grep '^Date' | sed 's/Date: //' | sed 's/\//-/g'` mv $x $D-$T.md done for x in *.md do cat $x | sed 's/\/\*//' | sed 's/\*\///' | sed 's/Title: /# /' > t && mv t $x done

If I outlive Github, I can just generate this site and host it somewhere else.

A benchmark of Thai word tokenizers written in various programming languages

posted on 2017-06-04

The origin post was at https://veer66.wordpress.com/2017/01/19/benchmark-thai-word-tokenizers/ posted on 2017/01/19.

I wonder about speed of programs written in different languages. For example, I wonder whether one written in Kotlin and ran on JVM is slower than one written in Go. Although there are several existing benchmarks, this is one may be still important at least for me, because Thai word tokenizer is my real task.

So @iporsut and me wrote some programs in different programming languages and tried to optimize them.

I conducted the experiment on my laptop computer, which has Intel® Core™ i3-4030U CPU @ 1.90GHz × 4, on a 20MB Thai text corpus.

  • Rust #1: 3.366 #2: 3.247 #3 3.241 #Avg: 3.284
  • Go #1: 5.415 #2: 5.405 #3 5.416 #Avg: 5.412
  • Crystal #1: 5.637 #2: 5.679 #3 5.649 #Avg: 5.655
  • Kotlin+Clojure #1: 6.547 #2: 6.743 #3 6.628 #Avg: 6.639
  • Julia #1: 38.316 #2: 38.112 #3 38.237 #Avg: 38.221
  • JavaScript #1: 49.349 #2: 49.084 #3 49.901 #Avg: 49.445
  • Python #1: 50.624 #2: 50.803 #3 50.869 #Avg: 50.765
  • Clojure+Kotlin #1: 63.502 #2: 67.561 #3 67.303 #Avg: 66.122

Additional setup

Future work

@iporsut has already written multicore versions, so maybe next month I will conduct another experiment.

เกี่ยวกับภาษา Lisp

posted on 2016-11-13

ที่มา

สมัยหนุ่ม ๆ ผมเห็นคำว่า Lisp ผ่านตาบ่อย ๆ ทั้งความเกี่ยวข้องกับ Logo AI หรือแม้กระทั่ง AutoCAD ก็เลยอยากจะเรียน

ต่อมาก็ยังได้ยินเรื่อง Functional Programming ก็เลยรู้สึกว่าน่าสนใจเข้าไปใหญ่

อย่างไรก็ตามสมัยหนุ่ม ๆ จะหาอะไรก็ลำบาก พอมาสมัยนี้จะหาอะไรมาเล่นก็ง่ายขึ้น

ประเด็นที่น่าสนใจ (สำหรับผม)

  1. Lisp เป็น High-level programming language ภาษาที่ 2 ของโลก หรือว่าถ้าจะมีอะไรมาแทรก ๆ ก็ยังเป็นภาษาแรก ๆ อยู่ดี
  2. Lisp มาพร้อมกับ Garbage collector แต่แรกตั้งแต่ค.ศ. 1959
  3. ภาษาแนว Functional Programming ทั้งหมดมีส่วนเกี่ยวข้องกับ Lisp
  4. ทุกอย่างใน Lisp มีพื้นฐานมากจาก List
  5. Lisp ในแง่มุมวงเล็บ
  6. Lisp ในแง่มุม dynamic type

เกี่ยวกับผม

จริง ๆ แล้วผมเขียน Clojure แต่ว่าไม่พูดถึง Clojure เพราะว่าไม่แน่เรื่อง Persistent vector

ผมไม่เข้าใจ lambda calculus ไม่เข้าใจ Category theory ไม่ใช่ว่าไม่สนใจแต่ว่าอ่านแล้วยังไม่รู้เรื่องแล้วก็จะมาเล่าที่หลัง

List

ค.ศ. 2016 นอกจากจะเขียน Clojure แล้วผมก็ได้ลอง Common Lisp ด้วย ถ้าว่าให้เฉพาะเจาะจงก็คือใช้ SBCL รู้สึกว่ามันไม่สะดวกเท่า Clojure แต่ได้สัมผัส List มากกว่า

พอศึกษาไปสักพักแล้วรู้สึกว่าใน Lisp สิ่งที่เป็นพื้นฐานกว่า List อีกก็คือ Cons cell ที่ผมเคยบันทึกไว้แล้ว

พอทราบเรื่อง Lisp แล้วเราก็จะมาพูดเรื่อง Singly Linked List ได้สบาย ๆ

ความเชื่อมโยงกับ Clojure OCaml และ Haskell

จริง ๆ ผมก็ไม่เคยเขียน Lisp แบบเดิม ๆ เอาตัวเก่าที่สุดที่เคยใช้ก็คือ Common Lisp

สิ่งที่พบคือ Clojure OCaml และ Haskell มี cons cell และ singly-linked list ติดมากับภาษาทั้งหมด เพียงแต่ว่าใน Haskell คำสั่ง cons เปลี่ยนเป็น : (colon) และใน OCaml ใช้ :: (colon สองที่

นอกจากนั้นในพวก Haskell และ Clojure ยังมีสิ่งที่เรียกว่า lazy sequence ของ Haskell ผมไม่ได้อ่านละเอียด แต่ว่า Clojure นี่แน่ชัดว่า lazy sequence ก็ทำงานอยู่บน cons cell เหมือนกับ list แต่ว่า เวลาสั่ง cdr หรือ rest มันไม่มีประมวลผลเก็บไว้ก่อน สั่ง cdr และ rest ทีนึงมันก่อนไปคำนวณหาหัว list มาให้ แต่ถ้าเป็น list ธรรมดาทุกอย่างใน list ถูกคำนวณเก็บไว้ใน memory อยู่แล้ว

นอกจากเรื่อง lazy sequence แล้ว Clojure ยังต่างออกไปจาก Lisp เดิม ๆ คือ data structure ที่ใช้เป็นหลักไม่ใช่ singly linked list แล้วแต่เป็น persistent vector แทน ซึ่งคุยกับ @visibletrap แล้วก็สรุปว่ามาจากวิทยานิพนธ์ของ CMU อีกที

แต่ว่า Lisp ก็ยังเป็นภาษาแบบที่ยังมี side-effect ได้อยู่เวลาเขียน IO อย่างใน Common Lisp ก็สั่ง (format nil "toto") แบบนี้ได้เลย ไม่ต้องมี IO Monad แบบ Haskell นอกจากนั้นก็ยัง assign ค่าตัวแปรแบบเถื่อน ๆ อย่าง (setf var1 "titi") แบบนี้ก็ได้ ไม่ได้บังคับเป็น Functional Programming

ความเชื่อมโยงกับ Python และ Ruby

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

แต่ว่าสิ่งที่ Python เรียกว่า list มันไม่ใช่ list แบบใน Lisp แต่เป็น vector หรือเหมือน array ใน Pascal ใน C

เพิ่มเติม

สุดเด่นอีกอย่างของ Lisp คือใช้กับ REPL แล้วเนียนมาก ๆ สามารถรัน ๆ โปรแกรมไปแล้วอยากเปลี่ยนแค่บาง function แล้วรันใหม่ ได้โดยไม่ต้อง reload ทุกอย่างขึ้น memory ทำให้สะดวกมาก ๆ

จริง ๆ หลาย ๆ ภาษาก็พยายามจะมี REPL แต่ว่าใช้จริง ๆ มันไม่ค่อยสะดวก เหมือน Lisp หรือ Clojure ที่วงเล็บมันช่วยกำหนดของเขตของสิ่งที่รับจะ eval ใหม่ได้เลย รูปแบบการเขียนโปรแกรมของ Lisp มันก็เหมือนได้ มี function แยก ๆ เลยกันเลย เคยพยายามใช้กับ Ruby ก็มึน ๆ เหมือนกันพอพยายามจะ eval เฉพาะบาง method ใน class ก็จะเริ่มงง ๆ แล้ว

Emacs+Cider screenshot

ในรูปเป็นของ Clojure นะครับใช้ Emacs กับ Cider แต่ใช้ Lisp จริง ๆ ก็ได้เพียงแต่ใช้ SLIME แทน หรือจะไม่ใช้ Emacs ไปใช้พวก Cursive ก็ได้สำหรับ Clojure หรือแม้แต่ vscode

ผมว่ามันเป็นความสะดวกอีกขั้นที่เลย IDE ไป อันนี้น่าจะ demo ให้ดูเป็น video ได้ในอนาคต

คุยกับผม

ทลายกำแพงภาษาเพื่อรากหญ้า

posted on 2016-11-12

ที่มา

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

ไก่กับไข่

  • หักดิบใช้ภาษาอังกฤษไปเลย
  • แปลภาษาไทยให้พอใช้ได้แล้วค่อยใช้คอมพิวเตอร์หรือมือถือเรียนภาษาอังกฤษ

ผมเลือกแปลก่อนเพราะว่า:

  1. พอใช้มือถือหรือคอมพิวเตอร์ได้แล้วมีโปรแกรมมีเว็บให้เรียนภาษาอังกฤษเยอะแยะ
  2. ความปลอดภัย: ท่าที่ว่ากดมั่ว ๆ หรือกด OK ไปเลย โดยไม่อ่านอาจจะซวยได้

เลือกโครงการไหน

  1. ความเป็นเจ้าของ
  2. โปรแกรมที่อานิสงส์เยอะ ๆ

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

ที่คิดว่าน่าจะใช้มาก ๆ ก็คือโปรแกรมเปิดเว็บก็มีอยู่ 2 ตัวคือ Chrome กับ Firefox ผมเลือก Firefox เพราะว่าเห็นเช็งกับท็อปแปลอยู่แล้ว

Firefox มันยังมีอนาคตไหม ?

ท็อปบอกว่า "ยิ่งกว่ามีอีกครับ"

Gecko ที่ใช้มานานกำลังถูกเปลี่ยนไปเรื่อย ๆ ผ่านโครงการ Quantum ที่เอาชิ้นส่วนใหม่ ๆ ที่เขียนด้วยภาษา Rust มาใส่ เร็ว ๆ นี้ก็น่าจะวาดหน้าเว็บโดยเอา GPU มาช่วยด้วย เป็นต้น

ภาษา Rust พัฒนามามากกว่า 6 ปีแล้ว ประเด็นหลักเลยก็คืออยากได้ภาษาที่เขียนโปรแกรมแล้วประสิทธิภาพสูสีกับ C/C++ แต่ลดโอกาสที่นักพัฒนาจะทำพลาดลง อีกประเด็นหนึ่งคือเขียนโปรแกรมที่ทำงานพร้อม ๆ กันได้ง่ายขึ้น

คนอื่น ๆ แล้วก็ผมด้วยก็หวังว่า Firefox รุ่นใหม่ ๆ ที่มีฐานอยู่บน Rust มันจะทำงานได้ดีขึ้นด้วย

ทำไมต้องมาแปลเอง ?

ปล่อยนักแปลอาชีพที่จ้างมาทำไหม ทำไมต้องมาแปลเอง ? ผมคิดว่าไม่ปล่อยดีกว่า เพราะว่าคิดว่าเราแปลดีกว่า เช่น เราไม่แปลว่า "จดจำเว็บนี้ไหม" แล้วให้เลือกว่า "ไม่เคย" หรือว่าสองทางให้เลือกคือปุ่ม "ยกเลิก" กับปุ่ม "ยกเลิก"

บางทีเราอาจจะพลาด แต่เราก็แก้ได้

เริ่มแปล

Pontoon

หลังจากผ่านอะไรมามากเดี๋ยวนี้ถ้าจะแปลก็เข้าไปที่ Pontoon ได้เลย แต่เพื่อที่ว่าจะได้ไม่งงผมเลือกโครงการให้เลยอันนี้เป็นการเว็บของ Mozilla สำหรับคนที่เริ่มแปลแรก ๆ ก็จะเป็นการให้เสนอคำแปล (suggest) ไปก่อนแล้วจะมีคนมาตรวจอีกทีซึ่งในกรณีก็คือ ท็อป เช็ง และ @nutmos เอง

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

Pontoon มีตัวช่วย 3 อย่างคือ 1. หาคำแปลที่เคยแปลมาให้เลย 2. ใช้เครื่องแปลภาษามาด้วย 3. ดูจากภาษาอื่นเช่น ภาษามลายู ภาษาลาว

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

Style guide

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

Transvision

นอกจากสองอย่างนี้แล้วก็ยังมีเว็บที่ช่วยค้นหาคำแปลเก่า ๆ https://transvision.mozfr.org/

มุมมองของผม

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

นั่งแปลด้วยกัน

ครั้งหน้านัดกันที่ Hubba เอกมัยซอย 4 วันที่ 25 ธันวาคม พ.ศ.2559 ครับ ดูบรรยากาศครั้งก่อนเมื่อเดือนกันยายนได้ที่นี่ครับ

ตัวอย่าง

sync จะแปลว่าอะไรดี เราทราบกันดีว่าย่อมาจาก synchronous พอลอกไปคนดูว่า แปลว่าอะไรก็ได้ "สมวาร" บ้าง "ประสานเวลา" บ้าง ซึ่งอภิปรายกันแล้วก็ได้มติว่าแปลไปก็ไม่รู้เรื่องอยู่ดีจึงทับศัพท์ไปว่า "ซิงค์" แต่ก็ต้องพิจารณาประเด็น Sync ที่ว่าเป็นชื่อเฉพาะอันนี้เราจะใช้ Sync ตามภาษาอังกฤษไปเลย

พวกนี้ก็เป็นประเด็นที่จะอภิปรายกันต่อไปได้ว่ามีคนไหนประโยคไหนควรจะแปลแบบไหนดี

พื้นที่ออนไลน์

พบกันที่ได้ https://www.facebook.com/groups/mozth

มีบางท่านถามมาว่าควรจะใช้ Slack หรือไม่ ผมว่าก็อาจจะดีแต่ว่าโอกาสที่คนจะมาร่วมก็คงน้อยลง IRC ดีไหมเป็นระบบเปิดด้วย แต่เหตุผลก็คงจะเหมือนเดิมคนมีส่วนร่วมก็จะน้อยลงอีก

อนาคต

มีโครงการใหม่ชื่อ L20N เป็นการเล่นคำที่มาจาก L10N คูณ 2 ซึ่ง L10N ก็ย่อมาจาก Localization หรือการทำให้เป็นท้องถิ่นอีกที แต่พูดให้แคบ ๆ ลงหน่อยก็คือการแปลนี่เอง

ผมดูคร่าว ๆ แล้วส่วนที่น่าสนใจสำหรับการมีภาษาไทยก็มี advance selector อันนี้มันอาจจะมาช่วยลดงานเราได้ เช่น

  • คุณไม่มีอีเมลที่ยังไม่ได้อ่าน
  • คุณมีอีเมลที่ยังไม่ได้อ่านหนึ่งฉบับ
  • คุณมีอีเมลที่ยังไม่ได้อ่าน 8 ฉบับ

พวกนี้จะเอามารวมกันเป็นก้อนเดียวได้หรือเปล่าใน L20N ก็เป็นเรื่องที่อาจจะต้องดูต่อไป

นอกจากการแปล

ตัดคำ

ตัววาดเว็บตัวใหม่ ได้แก่ Servo ก็กลับมามีปัญหาอยู่ ก็อยู่ในช่วงพิจารณาว่าจะใช้ libicu ดีไหม หรือจะทำอย่างไรดี ประเด็นพวกนี้อาจจะน่าสนุกที่ว่าไม่ได้ทำเฉพาะภาษาไทย ลาว ญี่ปุ่น ฯลฯ ก็ใช้โปรแกรมส่วนเดียวกันเลย ตามไปดูได้ที่ github

อื่น ๆ

นอกจากการตัดคำแล้ว การเลือกฟอนท์ใน Servo ก็ยังมีอะไรตรวจสอบหรือแก้อยู่เสมอ ๆ ถ้าอยากลองเขียน Rust ดูกับนักพัฒนาที่อื่น ๆ ในโลกดูบ้างก็อาจจะเป็นโอกาสที่ดี

บรรยากาศที่บรรยายเรื่องนี้

BCBK7

คุยกับผม

โปรแกรมตัดคำที่สร้างโดยชุมชน

posted on 2015-10-1

ค.ศ. 2000 ผมได้เริ่มเขียนโปรแกรมตัดคำเข้าประกวดในงานประชุมวิชาการ SNLP 2000 ที่เชียงใหม่ ทำให้คิดว่ายังมีอะไรที่น่าจะทำได้ในโปรแกรมตัดคำอีกมาก

ราว ๆ ปี 2004 ผมและเพื่อนจึงได้เขียน ThaiWordseg ขึ้นมาอยู่ที่ sourceforge ตอนนี้ก็คงเหลือแค่ประวัติศาสตร์ http://thaiwordseg.sourceforge.net/ หลังจากนั้นก็มีโครงการอื่น ๆ บ้างแต่ขอข้าม ๆ ไปแล้วกัน

จนกระทั่งเดี๋ยวนี้ยุคที่ github รุ่งเรือง การ diff เอา patch มาแปะใน bugzilla เปลี่ยนมาเป็นการส่ง pull request ในระยะเวลาใกล้เคียงกับที่ node.js เป็นที่นิยม ผมก็ได้เริ่มโครงการใหม่ขึ้นมาชื่อ wordcut เหมือนเดิม

wordcut รุ่นค.ศ. 2014 ต่างออกไปจากรุ่นก่อน ดังต่อไปนี้

  • เริ่มทำโครงการบน github เขียนด้วย JavaScript ทำให้ชุมชนที่ใช้เครื่องมือเหล่านี้อยู่แล้วมีส่วนร่วมได้ง่าย แน่นอนว่าง่ายกว่าภาษา C มาก ๆ
  • แทนที่จะมุ่งเน้นเพิ่มความเร็ว โครงการนี้พยายามลดความซับซ้อนลง การเก็บพจนานุกรมในอดีตที่เคยใช้ Trie บ้างใช้ Ternary Search Tree บ้างก็เหลือแค่ sorted list ของคำ จุดมุ่งหมายหลักก็คือทำให้การแก้ไขดัดแปลงพจนานุกรมทำได้ง่าย
  • การตัดคำด้วยวิธีหลาย ๆ แบบ ได้แก่ การใช้กฎต่าง ๆ และใช้พจนุกรม ถูกทำให้เรียกจาก Interface แบบเดียวกันคือ acceptor เพื่อที่จะทำให้เห็นภาพรวมของระบบได้ง่ายขึ้น

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

[ช่วงโม้ล้วน ๆ] วันนี้ วันพุธที่ 1 ตุลาคม 2015 โปรแกรม wordcut บน github ได้ดาวบน 32 ดวง มีผู้ติดตามความเคลื่อนไหว 5 ท่าน มีท่านที่สนใจ fork ไปเฉพาะบน Github 7 ท่าน โปรแกรมได้รับการปรับปรุงโดย contributor อย่างน้อย 5 ท่าน ซึ่งนอกจากผมแล้วก็มี

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

จากการร่วมแรงร่วมใจกับ wordcut ตอนนี้ทำงานได้ทั้งบน node.js และ web browser, มีพจนานุกรมที่หลากหลาย, ข้อผิดพลาดต่าง ๆ ก็ได้ถูกแก้ไขไปตามลำดับ

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

ป.ล. ตอนนี้ตัดคำภาษาลาวได้ด้วยครับ คาดว่าภาษาเมียนมา และภาษาเขมร (กัมพูชา) จะตามมาติด ๆ

พระสูตรเพื่อผู้เจ็บไข้

posted on 2015-09-20

ต่อไปนี้เป็นคำสอนของพระพุทธเจ้า:

อานนท์ ! ถ้าเธอจะเข้าไปหาภิกษุคิริมานนท์แล้วกล่าวสัญญา ๑๐ ประการแก่เธอแล้ว ข้อนี้เป็นฐานะที่จะมีได้ คือภิกษุคิริมานนท์ฟังสัญญาสิบประการแล้ว อาพาธอันเป็นทุกข์หนักของเธอ ก็จะระงับไปโดยควรแก่ฐานะ สัญญา ๑๐ ประการ นั้นคือ อนิจจสัญญา อนัตตสัญญา อสุภสัญญา อาทีนวสัญญา ปหานสัญญา วิราคสัญญา นิโรธสัญญา สัพพโลเกอนภิรตสัญญา สัพพสังขาเรสุ-อนิจจสัญญา อานาปานสติ.

อานนท์ ! อนิจจสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ไปสู่ป่า สู่โคนไม้ หรือสู่เรือนว่าง พิจารณาอยู่โดยประจักษ์อย่างนี้ ว่า “รูป ไม่เที่ยง; เวทนา ไม่เที่ยง; สัญญา ไม่เที่ยง; สังขาร ไม่เที่ยง; วิญญาณ ไม่เที่ยง” ดังนี้ เป็นผู้เห็นซึ่งความไม่เที่ยงในอุปาทานขันธ์ทั้งห้า เหล่านี้อยู่ ด้วยอาการอย่างนี้ : นี้เรียกว่า อนิจจสัญญา.

อานนท์ ! อนัตตสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ไปสู่ป่า สู่โคนไม้ หรือสู่เรือนว่าง พิจารณาอยู่โดยประจักษ์อย่างนี้ ว่า “ตา เป็นอนัตตา รูป เป็นอนัตตา; หู เป็นอนัตตา เสียง เป็นอนัตตา; จมูก เป็นอนัตตา กลิ่น เป็นอนัตตา; ลิ้น เป็นอนัตตา รส เป็นอนัตตา; กาย เป็นอนัตตา โผฏฐัพพะ เป็นอนัตตา; ใจ เป็นอนัตตา ธรรมารมณ์ เป็นอนัตตา” ดังนี้เป็นผู้เห็นซึ่งความเป็นอนัตตาในอายตนะทั้งภายในและภายนอกหก เหล่านี้อยู่ ด้วยอาการอย่างนี้ : นี้เรียกว่า อนัตตสัญญา.

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

อานนท์ ! อาทีนวสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ไปสู่ป่า สู่โคนไม้ หรือสู่เรือนว่าง พิจารณาอยู่โดยประจักษ์อย่างนี้ ว่า “กายนี้มีทุกข์มาก มีโทษมาก; คือในกายนี้มีอาพาธต่างๆ เกิดขึ้น, กล่าวคือ โรคตา โรคหู โรคจมูก โรคลิ้น โรคกาย โรคที่ศีรษะ โรคที่หู โรคที่ปาก โรคที่ฟัน โรคไอ โรคหืด ไข้หวัด ไข้มีพิษร้อน ไข้เซื่องซึม โรคกระเพาะ โรคลมสลบ ลงแดง จุกเสียด เจ็บเสียว โรคเรื้อรัง โรคฝี โรคกลาก โรคมองคร่อ ลมบ้าหมู โรคหิดเปื่อย โรคหิดด้าน คุดทะราด โรคละออง โรคโลหิต โรคดีซ่าน เบาหวาน โรคเริม โรคพุพอง ริดสีดวงทวาร อาพาธมีดีเป็นสมุฏฐาน อาพาธมีเสมหะเป็นสมุฏฐาน อาพาธมีลมเป็นสมุฏฐาน ไข้สันนิบาต ไข้เพราะฤดูแปรปรวน ไข้เพราะบริหารกายไม่สม่ำเสมอ ไข้เพราะออกกำลังเกิน ไข้เพราะวิบากกรรม ความไม่สบายเพราะความหนาว ความร้อน ความหิว ความระหาย การถ่ายอุจจาระ การถ่ายปัสสาวะ” ดังนี้; เป็นผู้เห็นโทษในกายนี้อยู่ ด้วยอาการอย่างนี้ : นี้เรียกว่า อาทีนวสัญญา.

อานนท์ ! ปหานสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ไม่ยอมรับไว้ซึ่งกามวิตก ที่เกิดขึ้นแล้ว ย่อมละ ย่อมบรรเทา กระทำให้สิ้นสุด ให้ถึงความไม่มีอีกต่อไป; ไม่ยอมรับไว้ซึ่งพ๎ยาปาทวิตกที่เกิดขึ้นแล้ว ย่อมละ ย่อมบรรเทา กระทำให้สิ้นสุด ให้ถึงความไม่มีอีกต่อไป; ไม่ยอมรับไว้ซึ่งวิหิงสาวิตกที่เกิดขึ้นแล้ว ย่อมละ ย่อมบรรเทา กระทำให้สิ้นสุด ให้ถึงความไม่มีอีกต่อไป; ไม่ยอมรับไว้ซึ่งอกุศลธรรมทั้งหลายอันเป็นบาปที่เกิดขึ้นแล้ว ย่อมละ ย่อมบรรเทา กระทำให้สิ้นสุด ให้ถึงความไม่มีอีกต่อไป; นี้เรียกว่าปหานสัญญา.

อานนท์ ! วิราคสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ไปสู่ป่า สู่โคนไม้ หรือสู่เรือนว่าง พิจารณาอยู่โดยประจักษ์ อย่างนี้ว่า “ธรรมชาตินั่น สงบ ธรรมชาตินั่น ประณีต : กล่าวคือ ธรรมชาติอันเป็นที่ระงับแห่งสังขารทั้งปวง เป็นที่สลัดคืนซึ่งอุปธิทั้งปวง เป็นที่สิ้นไปแห่งตัณหา เป็นความจางคลาย เป็นความดับเย็น” ดังนี้ : นี้เรียกว่า วิราคสัญญา.

อานนท์ ! นิโรธสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ไปสู่ป่า สู่โคนไม้ หรือสู่เรือนว่าง พิจารณาอยู่โดยประจักษ์ อย่างนี้ว่า “ธรรมชาตินั่น สงบ ธรรมชาตินั่น ประณีต : กล่าวคือ ธรรมชาติอันเป็นที่ระงับแห่งสังขารทั้งปวง เป็นที่สลัดคืนซึ่งอุปธิทั้งปวง เป็นที่สิ้นไปแห่งตัณหา เป็นความดับ เป็นความดับเย็น” ดังนี้ : นี้เรียกว่า นิโรธสัญญา.

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

อานนท์ ! สัพพสังขาเรสุอนิจจสัญญา เป็นอย่างไรเล่า ? อานนท์ ! ภิกษุในกรณีนี้ ย่อมอึดอัด ย่อมระอา ย่อมเกลียดชัง ต่อสังขารทั้งหลายทั้งปวง : นี้เรียกว่า สัพพสังขาเรสุอนิจจสัญญา (ความสำคัญว่าไม่เที่ยงในสังขารทั้งปวง).

อานนท์ ! อานาปานสติ เป็นอย่างไรเล่า ? อานนท์ ! ในกรณีนี้ ภิกษุไปแล้วสู่ป่า สู่โคนไม้ หรือสู่เรือนว่าง ก็ตาม นั่งคู้ขาเข้ามาโดยรอบ ตั้งกายตรง ดำรงสติเฉพาะหน้า มีสติหายใจเข้า มีสติหายใจออก. เมื่อหายใจเข้ายาว ก็รู้ชัดว่าเราหายใจเข้ายาว, เมื่อหายใจออกยาว ก็รู้ชัดว่าเราหายใจออกยาว; เมื่อหายใจเข้าสั้น ก็รู้ชัดว่าเราหายใจเข้าสั้น, เมื่อหายใจออกสั้น ก็รู้ชัดว่าเราหายใจออกสั้น;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งกายทั้งปวง หายใจเข้า”, ว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งกายทั้งปวง หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้ทำกายสังขารให้รำงับ หายใจเข้า”, ว่า “เราเป็นผู้ทำกายสังขารให้รำงับ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งปีติ หายใจเข้า”, ว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งปีติ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งสุข หายใจเข้า”, ว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งสุข หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งจิตตสังขาร หายใจเข้า”, ว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งจิตตสังขาร หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้ทำจิตตสังขารให้รำงับ หายใจเข้า”, ว่า “เราเป็นผู้ทำจิตตสังขารให้รำงับ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งจิต หายใจเข้า”, ว่า “เราเป็นผู้รู้พร้อมเฉพาะซึ่งจิต หายใจออก” ;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้ทำจิตให้ปราโมทย์ยิ่ง หายใจเข้า”, ว่า “เราเป็นผู้ทำจิตให้ปราโมทย์ยิ่ง หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้ทำจิตให้ตั้งมั่น หายใจเข้า”, ว่า “เราเป็นผู้ทำจิตให้ตั้งมั่น หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้ทำจิตให้ปล่อยอยู่ หายใจเข้า”, ว่า “เราเป็นผู้ทำจิตให้ปล่อยอยู่ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้เห็นซึ่งความไม่เที่ยงอยู่เป็นประจำ หายใจเข้า”, ว่า “เราเป็นผู้เห็นซึ่งความไม่เที่ยงอยู่เป็นประจำ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้เห็นซึ่งความจางคลายอยู่เป็นประจำ หายใจเข้า”, ว่า “เราเป็นผู้เห็นซึ่งความจางคลายอยู่เป็นประจำ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้เห็นซึ่งความดับไม่เหลืออยู่เป็นประจำ หายใจเข้า”, ว่า “เราเป็นผู้เห็นซึ่งความดับไม่เหลืออยู่เป็นประจำ หายใจออก”;

เธอย่อมทำการฝึกหัดศึกษาว่า “เราเป็นผู้เห็นซึ่งความสลัดคืนอยู่เป็นประจำ หายใจเข้า”, ว่า “เราเป็นผู้เห็นซึ่งความสลัดคืนอยู่เป็นประจำ หายใจออก”;

นี้เรียกว่า อานาปานสติ.

อานนท์ ! ถ้าเธอจะเข้าไปหาภิกษุคิริมานนท์ แล้วกล่าวสัญญาสิบประการเหล่านี้แก่เธอแล้ว ข้อนี้เป็นฐานะที่จะมีได้ คือภิกษุคิริมานนท์ฟังสัญญาสิบประการแล้ว อาพาธอันเป็นทุกข์หนักของเธอก็จะระงับไป โดยควรแก่ฐานะ.

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

ที่มา: หนังสือพุทวจน: อานาปานสติ

Preparing tools for building a website using Common Lisp

posted on 2015-07-21

I did search for tools/libraries for building a website using Common Lisp. So I just want to take note here and maybe it is useful for others too. BTW please note that I have never used them yet.

These should be enough for building the server side of a small website, shouldn't them?

ทำไมต้อง Go

posted on 2015-06-25

ภาษาใหม่ ๆ เดี๋ยวนี้ ทั้ง Rust, Swift, F#, Scala หรือภาษากลางเก่ากลางใหม่แบบ C#, Java 8, Python, Ruby, JavaScript มักจะมีกลิ่นอายของ Lisp/Scheme ติดมาด้วยเสมอเช่นการ ใช้ closure กับ map, foldl, foldr, filter เป็นต้น

เนื่องจากว่าเขียนได้ทั้งแนว Fortran และแนว Lisp เวลาคนเขียนภาษาใหม่ ๆ เช่น Python บางทีก็จะเถียงกัน (ผมเห็นจากใน blog ของคนอื่น) ว่าจะใช้ map filter reduce ทำไม อ่านยากจะแย่ จะเขียนสั้น ๆ ทำไม ต้องใช้ for-loop แทนสิ บางคนก็บอกว่า map filter reduce มันก็ดีอยู่แล้ว เขียน for-loop มันอ่านง่ายตรงไหน

ส่วนภาษา Go เป็นภาษาใหม่ที่เน้น imperative (แนว Fortran) ล้วน ๆ และออกแนว minimalism คำสั่งที่มีมาให้ก็เป็นไปแต่แบบพอเพียง บางอย่างที่เขาคิดว่าไม่จำเป็นเขาก็ไม่มีให้ ทำให้แน่นอนไม่มี map, fold, foldr, filter แถมมาให้ ถ้าอยากได้ก็ต้องทำเองในระดับ library

แน่นอนว่าในระดับ Library นี้ compiler เข้ามาช่วย optimize ให้ได้ยาก พอใช้ไปก็จะทำให้โปรแกรมช้าได้

ด้วย 2 เหตุนี้คือขัดวิถีโกและช้า ทำให้โอกาสที่ใคร ๆ จะเขียนแนว Lisp/Scheme ใน Go มีน้อย

ดังนั้นใครหรือทีมไหนที่ไม่ชอบเขียนโปรแกรมที่มีกลิ่นอายของ Lisp/Scheme ในยุคนี้ภาษา Go เหมาะอย่างยิ่ง

ป.ล. ถ้าเขียนคนเดียวผมใช้ map/filter/fold เยอะมาก ๆ แต่ถ้าเป็นกลุ่มก็แล้วแต่ทีมครับ

This blog covers Blog, Coleslaw, fediverse


Unless otherwise credited all material Creative Commons License by Vee Satayamas