2018-11-29

HTTP/3 explained

HTTP/3 explained
HTTP/3 協定出爐
The Road to QUIC
HTTP/3


可以開始閱讀 HTTP/3 相關的文件。

From https://http3-explained.haxx.se/images/quic-stack.png

HTTP/3 主要在 UDP 上建立一個新的協定,QUIC (Transfer protocol over UDP)。

2018-11-18

Tcl/Expect: Auto login to PTT BBS (using ssh) on Linux

使用 expect 套件:
#!/usr/bin/env tclsh

#
# A script to login ptt BBS
# tclsh -encoding big5 login.tcl host user username password
#
package require Expect

set timeout 60

encoding system big5
spawn ssh [lindex $argv 1]@[lindex $argv 0]

expect "請輸入代號,或以 guest 參觀,或以 new 註冊:" {
    exp_send "[binary decode base64 [lindex $argv 2]]\r"
    expect "請輸入您的密碼:" { exp_send "[binary decode base64 [lindex $argv 3]]\r" }
}

interact

我只是將 username/password 使用 base64 編碼,所以這裡需要解回來。然後這個 script 需要使用 BIG5 編碼存檔(執行時也需要使用 -encoding 設定編碼)。

然後寫一個 script 呼叫這個 tcl script,下面是一個例子:
#!/usr/bin/env bash

tclsh -encoding big5 ~/bin/login.tcl ptt.cc bbs dXNlcg== cGFzc3dk

再來將這個 shell script 設為可執行,就可以執行以後自動登入 PTT BBS。

2018-11-11

Print PATH Entries (no duplicate)

#!/usr/bin/env tclsh

set path [lsort -unique [split $::env(PATH) ":"]]

foreach p $path {
    puts $p
}

這只是一個簡單的練習。在取得目前的 PATH 環境變數列表以後使用 lsort 排序並且將重覆的部份移除 (-unique option),然後印出來。

2018-10-19

tcl-caca

tcl-caca: Tcl bindings for Colour ASCII Art library (libcaca)


我只實作了一部份的功能,但是如果用來作簡單的文字界面處理應該夠用了。

2018-10-15

tklib spec update

tklib-spec
ANNOUNCE: Multi-entry widget package Mentry 3.8


因為 Mentry 更新,而發佈的文章說也有包含在 tklib 中,所以我更新自己的 tklib RPM spec 到目前的 code base,這樣理論上就會同時更新到最近的變更。

2018-10-09

Tcl: Show platform/arch info

這只是簡單的程式練習。

#!/usr/bin/env tclsh

puts "Platform: $tcl_platform(os)"
puts "Arch: $tcl_platform(machine)"


在 Ubuntu 14.04 64bit 上,答案是這樣:
Platform: Linux
Arch: x86_64

2018-10-08

Tcl: {*}

{*} was new in Tcl 8.5, and resulted in the Endekalogue becoming the Dodekalogue.

{*} 可以說是 Tcl 語法上一個比較大的修改(也可以說是語法糖)。將 List 的每個 item 轉變為目前 command 的參數。這是 TIP 293  的提案。

下面是簡單的測試:
set command [list set a 5]
set value [eval {*}$command]
puts $value

我最常用的是在使用 exec 時:
set command [list ls -al]
exec >@stdout 2>@stderr {*}$command


大抵來說,是個很好的改進。

2018-09-30

Next Scripting Framework 2.2.0

Changes to NSF in version 2.2.0
ANNOUNCE: Next Scripting Framework 2.2.0 is available


NSF 釋出了一個新的版本,2.2.0。可以在這裡下載。 所以我也更新了我自己的 RPM spec。

2018-09-27

SQLite3 and UUID

uuid


使用 SQLite3 產生一個亂數的值,然後拿到以後進行處理。因為 SQLite 支援 In-Memory Databases,我加上一點處理的 code,所以可以這樣用:
proc uuid {} {
    try {
        package require sqlite3
        
        sqlite3 db1 ":memory:"
        set u [db1 onecolumn {select (hex(randomblob(16)))}]
        db1 close
        
        return [string range $u 0 7]-[string range $u 8 11]-[string range $u 12 15]-[string range $u 16 19]-[string range $u 20 end]        
    } on error {em} {
        error $em
    }
}


這樣就可以使用 SQLite Tcl interface 產生一個 UUID string。

2018-09-26

Java 11 Released

Java 11 Released
JDK 11
Java Is Still Free
Do not fall into Oracle's Java 11 trap
The future of Java and OpenJDK updates without Oracle support
Java依舊免費?


但是 Java 加快了開發的循環以後,對我而言,tclBlend 要使用哪一個 JDK 版本就變成一個麻煩的問題。

我已經在之前將我自己使用的 RPM spec 設為 java-11-openjdk-devel,而在下個 JDK 版本(也就是 12)來臨之前,應該有六個月的時間可以考慮。

另外一個考慮的重點是如果我升上 openSUSE LEAP 15.1,我就會以 openSUSE Leap 15.1 為主要的考量點。


更新:
另外,目前 OpenJDK 與 Oracle JDK 在技術上來說已經一致,所以接下來在六個月之後的長期更新版本負擔將會在 OpenJDK 上。但是如果六個月就要跳一次版本,這會是個麻煩的議題。