Wednesday, 10 July 2013

Cùng học tcl

Updated: vài lời nhảm nhí
Updated: add eggdrop
 
Tcl - Tool Command Language
Nếu bạn thích Ruby, nhảy vào đây 
Nếu muốn học Python, nhảy đến đây

Tại sao lại là TCL?
  • đơn giản
  • dễ học
  • dễ dùng
  • nhỏ nhẹ
  • it's fun :x (và đây cũng là điều quan trọng nhất, bởi suy đi tính lại, điều quan trọng nhất trong việc học hành là bạn có thích hay không - bạn có thể đưa ra lý do là bận? nhưng 1 ngày tôi chỉ có thời gian từ 23H trở đi để chơi thôi :v )
Là một script language thuộc nhóm "programable programming language", tức ngôn ngữ có thể lập trình được chính nó. Đại khái là bạn có thể tự viết vòng for thay vì vòng for mặc định ...

Học để xin việc đâu đó?
Có lẽ sẽ chỉ là 1 điểm cộng,còn xin việc dùng tcl ở VN chắc không có :3
Tốt nhất là bạn nên kiếm một công việc không quá bận rộn để còn có thời gian hưởng những thú vui trên đời. Khi chưa có việc, trong thời buổi này, thì cạp đất mà ăn à, sống vẫn phải thực dụng chứ :3. Công việc sẽ chi phối những gì bạn học. Đến lúc có việc rồi, bạn tha hồ học những gì mình thích.

Đơn giản?

Toàn bộ cú pháp của Tcl chỉ nằm gỏn gọn trong 12 điều luật, và chỉ cần cài tcl rồi man là thấy.

Tcl đã implement những khái niệm từ rất lâu, sau này các ngôn ngữ khác mới "học lại" và được khen như là phát minh vĩ đại :3. Có thể kể đến như

Historically speaking, Tcl's support for events and their handling started in the Tk package, written the year after Tcl's introduction at the 1990 Usenix conference. From there it moved into Tcl proper in 1996, around Tcl 7.5, more than a decade ago. Ever since then we've enjoyed event support as part of the core language, without a need for a separate package (like Python's Twisted or Ruby's EventMachine).
-- http://www.activestate.com/blog/2010/05/concurrency-tcl-events-without-getting-twisted
Những điều nối tiếng trong thế giới tcl:
- expect : dùng code để tương tác với các chương trình cần tương tác, sử dụng nhiều trong tự đống hóa các công việc quản trị hệ thống
- tk: giúp viết giao diện GUI 1 cách nhanh chóng
- hping: dùng để test network, ddos.... :3
- eggdrop: bot IRC phổ biến nhất thế giới, có thể script bằng TCL

Tài liệu
http://wiki.tcl.tk/20789
http://www.invece.org/tclwise/frontcover.html
http://stackoverflow.com/questions/1136735/getting-started-with-tcl-tk
http://www.yosefk.com/blog/i-cant-believe-im-praising-tcl.html
....

Cài đặt
Để cài trên Ubuntu # đã test trên 12.04
sudo apt-get install -y tcl

Lời kết
đừng dành quá nhiều thời gian để đọc những bàn luận quanh tcl, về việc nó sắp chết, không có oop, hay design lỗi ...
hãy dành thời gian đó để học 12 luật của tcl và code tcl, tự cảm nhận lấy. Ít ra, bạn cũng đang đọc những lời viết ra từ một người đã từng kiếm tiền bằng  Java, PHP, Bash, Python :3

PS:
ai học có  gì hay thì thả vào đây
hết.

Goals:
  1. 12 ngày học 12 luật của tcl
  2. regex
  3. coroutine
  4. network and scripting
Historically speaking, Tcl's support for events and their handling started in the Tk package, written the year after Tcl's introduction at the 1990 Usenix conference. From there it moved into Tcl proper in 1996, around Tcl 7.5, more than a decade ago. Ever since then we've enjoyed event support as part of the core language, without a need for a separate package (like Python's Twisted or Ruby's EventMachine). - See more at: http://www.activestate.com/blog/2010/05/concurrency-tcl-events-without-getting-twisted#sthash.I6znx9mv.dpuf

14 comments:

  1. Ngày 1:
    if else , for, variable

    hvn@archhvn: ~ () $ tclsh
    % puts "hello thon"; puts "hello do"
    hello thon
    hello do
    % set foo bar
    bar
    % puts $foo
    bar
    % if {5 > 4} {
    puts "CCMNR"
    } else {
    puts "cha bao gio roi vao day ca"
    }
    CCMNR

    ReplyDelete
    Replies
    1. foreach và list:

      % set members "meo cho ga vit lon"
      meo cho ga vit lon
      % foreach i $members {
      puts $i
      }
      meo
      cho
      ga
      vit
      lon
      % foreach a [list 1 2 3 4] b [list c java php python] {
      puts a b
      }
      can not find channel named "a"
      % foreach a [list 1 2 3 4] b [list c java php python] {
      puts $a $b
      }
      can not find channel named "1"
      % foreach a [list 1 2 3 4] b [list c java php python] {
      puts "$a $b"
      }
      1 c
      2 java
      3 php
      4 python

      Delete
    2. Rule1:

      # a tcl script is a string
      # comntain one or more commands
      #
      # semicolon & newline ard command separator
      # close bracket are cmd terminator


      Delete
  2. Ngày 2:

    chạy câu lệnh bên ngoài và láy kết quả vào dùng:
    % foreach i [exec seq 1 3] {
    puts $i
    }
    1
    2
    3
    %

    ReplyDelete
  3. chào bạn mình phải cài những phầm mêm hay công cụ gì để có thể viết tcl/tk bạn nhỉ? nhờ chỉ giáo thêm

    ReplyDelete
    Replies
    1. trên Ubuntu, bạn mở terminal lên và cài bằng apt-get

      sudo apt-get install -y tcl

      Delete
  4. Replies
    1. uh, mình rất hay học những cái mới và quên mất là mình đang học dở :))

      Delete
    2. minh hoi ban 1 chut la minh chay thu cai lenh if trong ngay 1 cua ban ma k chay dc. chi jup minh duoc k

      Delete
    3. cụ thể câu lệnh bạn chạy là câu nào?

      bạn cần:
      gõ tclsh để mở tcl shell

      sau đó gõ:

      if {5 > 4} {
      puts "CCMNR"
      } else {
      puts "cha bao gio roi vao day ca"
      }

      rồi enter

      Delete
    4. minh go dong if sau do enter de xuong dong go tiep thi da bao loi roi
      cam on b

      Delete
    5. bạn có thể viết lên 1 dòng như sau:

      http://pastebin.com/uKJjWkr2

      Nếu có lỗi gì bạn hãy copy và paste toàn bộ input/output vào đây mình mới có thể giúp được.

      Delete
    6. chao b
      minh lam dc roi
      minh hoi ban cai nay: minh chay 1 file tcl voi lenh nhu sau:
      ns test.tcl
      thi no bao loi ngay dong dau tien mac du do la dong chu thich.
      gia su dong chu thich cua minh nhu sau:
      # tao 1 doi tuong
      cam on ban

      Delete
    7. ns test.tcl ???
      mình không rõ lệnh ns là lệnh gì.

      Đây là ví dụ đơn giản:

      (python2)hvn@archhvn: /tmp () $ tclsh test.tcl
      FAMILUG
      (python2)hvn@archhvn: /tmp () $ cat test.tcl
      # fml
      puts "FAMILUG"

      Delete