return

function ใน Lisp Ruby Rust หรือแม้แต่ JavaScript ใหม่ ๆ เวลาใช้ลูกศร มันไม่ต้องใส่ return
 
ผมคิดมันก็น่าจะเป็นแบบนั้นอยู่แล้ว สมัยเด็ก ๆ คิดถึง function ก็จะถึงประมาณ f(x) = 2*x + 5 ทำนองนี้ ไม่เคยเห็นว่ามันจะมี return
 
ครั้งแรกที่ผมรู้จัก return คือเห็นมันใช้คู่กับ gosub ใน MBasic ซึ่ง sub ย่อมาจาก subroutine ในภาษา Basic เวลานั้นมันก็เป็นเลขบรรทัดต่อไปเรื่อย ๆ ไม่ได้มี block อะไร พอสั่ง return ตอน subroutine จบโปรแกรมก็กระโดดมาทำงานคำสั่งต่อจาก gosub ไม่ได้ส่งค่าอะไรออกมาแบบ function ตอนนั้นผมก็คิดว่าดูตรงไปตรงมาดี
อาจจะทำให้เวลาเขียนโปรแกรมในภาษาที่มันไม่ต้องใส่ return ก็เลยไม่ได้รู้สึกว่าขัดใจอะไร

Lumo: REPL ของ ClojureScript ที่เร็วมาก

สัปดาห์ที่ผ่านมาเห็น Lumo ใน Twitter เต็มไปหมดแล้วมันน่าเล่นก็เลยลองดู พบว่ามี start ไวกว่า sbcl อีกประทับใจมาก ๆ

lumo_fast

อยากเอาไปใช้กับ Emacs และ Cider แต่ว่าทำไม่เป็น😛

ฟัง To Clojure and back: writing and rewriting in Ruby by Phill MV จาก YouTube มา

  • ผมสนใจเพราะว่าผมเขียน Ruby มานานแม้จะไม่ on Rails แล้วก็ลองมาเขียน Clojure เหมือนกัน
  • เขาเขียน Ruby แล้ว ย้ายไป Clojure แล้วกลับมาเขียน Ruby อีกที
  • อันนี้ก็ตรงข้ามกับที่เคยฟังวันก่อนเลย สำหรับทีมเล็ก ๆ เขาว่าอย่าพยายามไปทำ distributed system หรือ micro services โดยไม่จำเป็น
  • ดูเขาจะไม่ค่อยชอบ REPL เท่าไหร่ อยากได้ debugger มากกว่าว่างั้น แต่ debugger ของ Clojure ก็ดูจะหายาก ผมก็เคยเจอปัญหาตอนหา profiler
  • เรื่อง document ของ Clojure อันนี้เห็นด้วยเต็ม ๆ นะครับอ่านยาก
  • เรื่องความเจ็บปวดเกี่ยวกับ JVM อันนี้ก็เห็นด้วยเหมือนกัน แต่บางที JVM ก็เป็นสาเหตุหลักให้ใช้ Clojure
  • แต่เขาก็พบว่าเขาเรียนรู้หลายอย่างจาก Clojure มาเขียน Ruby รอบหลังก็ไม่เหมือนเดิมแล้ว ระวังเรื่อง state มากขึ้น
  • เขาว่า Clojure อย่างน้อย ก็เป็นภาษาที่คนน่าจะเรียนรู้ไว้ แต่ก็ยังไม่ต้องเอาไปใช้งานจริงก็ได้
  • ส่วนผมซึ่งรัก REPL มาก แต่ก็รู้สึกว่าสิ่งที่ผมทำส่วนมากใช้ JVM ก็ไม่ค่อยจะดีเท่าไหร่ ก็เลยยังคงเขียน Common Lisp ต่อไป

อยากใช้ get-in ใน Common Lisp บ้าง

อยากใช้ get-in แบบใน Clojure บน Common Lisp ก็เลยเขียนเอง ก็นี้ใช้ alist ก็น่าจะคล้าย ๆ array-map ของ Clojure

ก็เลยเขียนเองดูมันก็พอใช้ได้เหมือนกัน

(defun get-in (m ks)
  (labels ((recur (v ks)
             (if (null ks)
                 v
                 (recur (cdr (assoc (car ks) v))
                           (cdr ks)))))
    (recur m ks)))

ตอนมาใช้ก็สั่ง

(get-in '((:A . ((:B 10)))) '(:A :B))
;; ก้จะ return 10 ออกมา

ลองใช้ดูตอนนี้ยังไม่พบปัญหาอะไรครับ

TabCenter บน Firefox Test Pilot

ผมลองลง TabCenter บน Firefox Nightly มันเอา tab ไปไว้แนวตั้งแทน หดให้เล็ก ๆ ได้ มองเห็นหน้าจอ มองเห็น URL ชื่อ tab ได้ แต่ที่ดูจะเจ๋งสุดคือ search ได้ด้วย แล้วมี hot key ให้ด้วย กด ctrl+shift+l ก็จะไปกล่อง search tab เลย  สำหรับคนที่เปิด tab ไว้เยอะ ๆ จนหาไม่เจอน่าจะเหมาะ

https://testpilot.firefox.com/

ป.ล. ดูเหมือน testpilot น่าจะใช้ telemetry ด้วยนะครับ ถ้าคำนึงถึงความเป็นส่วนตัวควรจะอ่านอย่างละเอียดก่อน

pilot

 

ความเพียวใน Functional Programming

วันนี้อจ. @pruet แชร์หน้านี้มาให้ดูครับ http://debug.elm-lang.org/ เป็น debugger ของภาษา Elm ซึ่งเป็นภาษาในเครือ Haskell

ผมสงสัยมาตลอดว่าการใช้ monad แล้วเอา function มาเรียก ๆ ต่อ ๆ กันแล้วบอกว่าเพียวมันมีประโยชน์อะไรขึ้นมา

ผมว่าเจอแล้วก็คือ debugger ของ Elm นี่ล่ะ คือมันสามารถย้อนเวลากลับไปกลับมาได้ เพราะเขาให้เหตุผลว่าทำแบบนี้ได้เพราะความเพียว ในที่นี้ก็คือแยกเอา function ที่มันจะเกิด side effect เช่น ไปอ่านเขียน I/O ออกจาก function เพียวซึ่งมันไม่มี side effect ออกอย่างชัดเจน แบบนี้ก็ทำให้ debugger ไปเรียก function แบบเพียวเมื่อไหร่กี่ครั้งก็ได้ จะย้อนไปย้อนมาอย่างไรก็ได้ ผลก็เป็นแบบเดิม

ลอง MS SQL Server บน Ubuntu

ลองติดตั้งและใช้ MS SQL Server บน Ubuntu ดู ง่ายกว่าบน Windows เยอะเลย บน Windows นี้พยายามลงประมาณครั้งที่ 8 แล้วยังไม่สำเร็จเลย เคยดู UI ตอนที่คนอื่นใช้ก็มึนมาก มาบน Ubuntu ก็เรียบ ๆ เลยไม่ต้องคลิกต้องเลือกอะไรพิมพ์ SQL ใส่ได้เลย

sql12.png

ผมไปอ่านประวัติศาสตร์มานิดหน่อยว่า SQL Server นี่เริ่มมาจากบริษัท Sybase ทำงานร่วมกับ Microsoft คือทีแรกมันอยู่บน UNIX อยู่แล้ว แต่ชื่ออื่น แล้วมาใช้ชื่อ MS SQL Server ตอน port มาลง OS/2 หลังจากนั้นก็ค่อย port ไปลง Windows อีกที [1] นี้ก็น่าจะทำให้ port มาลง GNU/Linux อาจจะไม่ได้ยากมาก

ใช้ MariaDB client ต่อกับ TiDB server

โพสนี้คงจะหาสาระอะไรไม่ได้เพียงแต่รู้สึกว่าแปลกดี ที่ไม่ได้ใช้ MySQL เลย แต่มีคำว่า MySQL เต็มไปหมด ทั้ง MariaDB และ TiDB ก็แสร้งว่าตัวเป็น MySQL จนคุยกันได้

fake_fake