2018-06-22

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 來取得個別的名單。

2018-05-29

tcl-opencc: Tcl bindings for OpenCC (libopencc)

Open Chinese Convert (OpenCC, 開放中文轉換) is an opensource project for conversion between Traditional Chinese and Simplified Chinese, supporting character-level conversion, phrase-level conversion, variant conversion and regional idioms among Mainland China, Taiwan and Hong kong.

OpenCC 是一個優秀的開源專案,以 C++ 開發,支援 Linux、Mac OS X、Windows、iOS、Android 等平台,同時有 Node.js bindings,可以用來做中文繁簡轉換的工作。OpenCC 已經提供了一個命令列工具,可以用來指定輸入檔案、輸出檔案與指定設定檔,然後就可以利用這個命令列工具來做中文繁簡轉換。

一個更好的地方是,OpenCC 將核心函式庫獨立出來,所以我們可以使用 OpenCC 提供的函式庫來開發一些工具,或者是與自己的程式結合產生更多的功能。

所以 tcl-opencc 就是這樣寫出來的,這樣子如果我需要在 Tcl 進行繁簡轉換的工作,就可以使用 OpenCC 的函式庫,而不用呼叫外部的執行檔。

2018-05-28

openSUSE Leap 15.0 and OpenAL Soft

升級到 openSUSE Leap 15.0 以後,使用 tclopenal 播放音樂,都會跑出來下面的錯誤訊息:

Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started



一開始我沒有搞清楚狀況,所以以為是沒有安裝 Jack Audio Server,但是後來我又想,Linux 一般的預設應該是 ALSA/PulseAudio,所以不應該是沒有安裝 Jack Audio Server 的問題。最後才想到,可能是 OpenAL Soft 的設定問題。

OpenAL Soft 是有支援 Jack 的,所以可能是我之前使用的版本不用設定,或者是之前的版本已經有設定好。但是不管如何,這個錯誤訊息在 openSUSE Leap 15.0 跑出來,所以我需要消除掉這個錯誤訊息。

接下來我發現 /etc/openal 目錄下沒有 alsoft.conf 這個檔案。這給了我提示,所以在搜尋以後,找到答案,我需要建立 alsoft.conf 檔案,並且設定如下:
[general]
drivers = -jack,


經過測試,這樣確實可以消除無法連接到 Jack 的錯誤訊息。

2018-05-24

tcl-cairo: Tcl bindings for Cairo library

tcl-cairo


使用 SWIG。資訊來自於 tclcairo。我只是透過範例來學習 SWIG 該如何使用,而剛好 tclcairo 網頁有範例可以用來測試,所以就嘗試看看。