2018-06-24

tcl-zstd

tcl-zstd
Zstandard (@ Tcler's Wiki)


Tcler's Wiki 上一樣已經有人使用 Critcl 寫好了壓縮與解壓縮的 code。我只是拿這份 code 來使用(不過有做一點點的修改,因為我要編譯出套件而不是採用 Tcl Module 的模式,而且不知道為什麼 openSUSE Build Service 在測試的時候會有相容性錯誤,為了通過測試,所以加改了三行左右)。

不過要注意的是 libzstd1 不存在於 openSUSE LEAP 42.3 軟體庫中,openSUSE Leap 15.0 才開始有收入軟體庫中。


真正神奇的是原作者利用了 Critcl 的特性,所以一開始的版本是 Tcl Module,而只要你有安裝 Critcl,就可以使用 libzstd 來壓縮與解壓縮。

2018-06-22

tcl-lmdb v0.4.0

檔案放置網頁

tcl-lmdb - Tcl interface to the Lightning Memory-Mapped Database

About

This is the Lightning Memory-Mapped Database (LMDB) extension for Tcl using the Tcl Extension Architecture (TEA).

LMDB is a Btree-based database management library with an API similar to BerkeleyDB. The library is thread-aware and supports concurrent read/write access from multiple processes and threads. The DB structure is multi-versioned, and data pages use a copy-on-write strategy, which also provides resistance to corruption and eliminates the need for any recovery procedures. The database is exposed in a memory map, requiring no page cache layer of its own. This extension provides an easy to use interface for accessing LMDB database files from Tcl.

Main Change

  1. Add command to handle byte array
  2. Add test cases for new command

一些說明

事情有點複雜。 我在 Github 上有一個 Use byte arrays for keys and values 的 pull request。可是如果我直接 merge,就會造成 API 之間行為的不一致。所以我關掉那個要求,但是說我會加新的 command 來處理這件事。

可是加完以後,我覺得這樣事情只做了一半,所以最後我加入更多的 command 來處理 byte array 的部份,同時也加入一些 test cases 確定我加入的部份是 OK 的。

所以現在你可以將 key/value 視為 string,或者是 byte array,看你使用的 command 而定。如果沒有 byte array 的需求,那這個版本對你而言只是版本號的增加,那就…… 沒影響;如果需要視為 byte array 處理,那這個版本就會符合需求。因為修改了介面,所以跳升一個版本,變成 0.4.0。

tcl-brotli

tcl-brotli
brotli (@ Tcler's Wiki)


Tcler's Wiki 上已經有人使用 Critcl 寫好了壓縮與解壓縮的 code。我只是拿這份 code 來使用。

不過要注意的是 libbrotlidec1/libbrotlidec1/libbrotlicommon1 不存在於 openSUSE LEAP 42.3 軟體庫中,openSUSE Leap 15.0 才開始有收入軟體庫中。

2018-06-21

Google Sites tclmonetdb is gone

簡單的說,就是 tclmonetdb  進行 Google 新的協作平台轉換以後版面直接炸掉,在試著調整了一下以後,我發現調整好是個有點麻煩的任務,我本來想說放棄新的保留舊的,但是 Google 顯然沒考慮有人會想這麼做,所以變成一個 zombie 的狀態。

經過思考,我直接刪除新的,然後在 tclmonetdb 舊的 Google Sites 網頁 留下訊息,這個站已經移往 Github 了,將在 2018/06/22 刪除。

所以事情就是這樣了,Google Sites tclmonetdb is gone. 如果 Google 服務繼續這樣,那他們會有麻煩,問題不在技術高低,問題在於使用的過程。

所以 Source code 你可以在 Github 找到:
tclmonetdb

如果是 openSUSE,你可以找到 OBS 上的檔案:
tclmonetdb @ OBS

至於 Windows 平台,其實我今天本來是要放新的檔案,但是因為炸掉了所以也直接被我刪除,就…… 跳過這件事吧。


更新:
我也刪除了這個部落格關於 tclmonetdb 文章(因為都會指向錯誤的連結)。

2018-06-13

ttk::setTheme

ttk::setTheme

This function takes a theme name as an argument. It looks to see if the theme has been loaded, and if not, requires the package, and calls ttk to use the theme. While the code actually also sets a variable, that variable is local to the function and thus isn't available.

可以使用這個函式來設定 Ttk 要使用的 theme。


關於相關的 theme 列表,可以查看 List of ttk Themes。Ttk 已經有內建一些 theme 可以使用。

2018-06-07

try and finally

在 comp.lang.tcl 看到這個寫法,所以我寫了一個練習用的程式來學習這件事:
try 是 Tcl 8.6 內建命令,可以在 finally 釋放所使用的資源。

#!/usr/bin/env tclsh
package require http
package require tls

http::register https 443 [list ::tls::socket -ssl3 0 -ssl2 0 -tls1 1]

set tok {}
set url {https://duckduckgo.com/}

try {
    set tok [http::geturl $url -method GET -timeout 3000]
    puts "Status: [::http::ncode $tok]"
    puts "Status Text: [http::status $tok]"
    puts "Headers: [http::meta $tok]"
} on error {em} {
    puts "Error: $em"
} finally {
    # cleanup here
    if {[info exists tok]==1} {
        http::cleanup $tok
    }
}

(更新:拔掉網路線以後測試,我想需要檢查 tok 是否存在)

相關連結:
try ... finally ... (@ Tclers Wiki!)
TIP 329: Try/Catch/Finally syntax

tklib spec

tklib-spec (20180605)


因為 tablelist package 的關係,所以我也更新了 tklib 的 RPM spec。執行 build.tcl 就會 checkout 在 Github 的 mirror (@ 20180605) 並且進行處理,然後使用 rpmbuild 製造出 RPM 檔案。

這樣 tklib 所包含的 tablelist package 應該就是最近 release 的。

2018-06-06

tablelist 6.2

tablelist @ Tclers Wiki!
tablelist-spec


tablelist is a multi-column listbox and treeview widget for Tk.

Tklib 已經有納入這個套件,不過這個套件本身仍然在繼續修正問題與增加功能,然後(應該有)同步到 Tklib。

因為 tablelist 和 Tklib 的進版速度是不同的,所以 tablelist 我也寫了 RPM spec(嗯…… 其實是我一開始沒發覺他已經在 Tklib 裡了),這樣如果要使用較新的版本或者是需要單獨安裝的使用可以使用。

2018-06-03

TDBC-ODBC: Get Data Sources list

TDBC-ODBC 有提供取得目前 data sources 名單的函式 ::tdbc::odbc::datasources。下面的 code 就是取得目前的名單以後,將資料增加到 tablelist 的片段。
# Get data sources list and list
tablelist::tablelist .t -columns {0 "DSN" 0 "Driver"} -stretch all \
    -background white -font {Helvetica -14}
pack .t -fill both -expand 1 -side top
set sources [::tdbc::odbc::datasources]
foreach {dsn driver} $sources {
   .t insert end [list $dsn $driver]
}

這樣就可以取得目前的 ODBC data sources。


其它部份:
unixODBC 可以在 /etc/unixODBC 目錄中設定 odbc.ini 與 odbcinst.ini,或者是在家目錄下設定 .odbc.ini。

::tdbc::odbc::datasources 如果沒有特別設定,會取得 system 和 user 的名單。TDBC-ODBC 可以使用選項 -system 或者是 -user 來取得個別的名單。