在 Windows 編譯 roswell

最近由網路消息得知 roswell 這個正在開發中的 Lisp 管理工具,於是認真探討它在 Windows 運作的可能與便利。 roswell 的軟體地位,就像是 Linux 的 apt ,或 Erlang 的 kerl 。

最後確定在 Windows 最簡便的編譯安裝方式就是由 msys2 編譯。

需要的軟體大致是在 msys2 內要安裝 gcc, autoconf, make, mingw32-<arch>-gcc, mingw32-<arch>-make, 以及 curl 等等。

編譯及安裝方式:

$ git clone https://github.com/roswell/roswell.git && cd roswell

$ sh bootstrap

$ ./configure

$ make

$ make winrelease

上述的最後一步,在 make winrelease 之後,除了會產生 .zip 檔案以外,還會留下一個 roswell/ 目錄,裡頭放著符合在 Windows 運作的 ros.exe 及相關 .lisp, .ros 檔案。

於是,如果想要安裝到 D:\temp 目錄,則接著用下列指令。

$ mkdir -p /d/temp && cp -rf roswell/* /d/temp

 

廣告
張貼在 Lsip, Uncategorized

三則讀後小感

小感 #1

讀 1998 年 John Hughes 談 Haskell Monad 與 Arrow 的文章,其中提到對於 Monad 的解釋

class Monad m where
return :: a -> m a
(>>=)  :: m a -> (a -> m b) -> m b

說:這意思是,做為定義中的參數 m 這個資料類型是個 Monad ,透過 m 可以構成一組結構,格式為 m a 或者 m b ,意思是 m 表示一種執行完之後能傳回資料類型是 a 或 b 的一種計算行為。

哇賽,這定義非常是個 functional 風味的定義。如在 C 語言所看到許多稱為「函式」的那些 function ,它們的模式正可表達為 m a ,做完一些動作之後會跑出資料類型為 a 的傳回值。於是,在 Haskell 中看到的函數定義為 putStrLn :: String -> IO () ,所以 putStrLn “hello,world" :: IO () 的意思是列印一段文字的程式是一套計算動作,做完之後傳回 () (一對括號,稱為 unit ,基本單位的意思)。

小感 #2

讀 “An Introduction to Programming in Emacs Lisp" ,介紹 Emacs 這套編輯器。文件開頭說,可以把 Emacs 認知為可擴充的計算環境,可以把 Emacs Lisp 當作是一套獨立的程式語言。

小感 #3

同上一本書,簡介 Lisp 的意義也很有味道: LISt Processing ,列表處理。

回想 Lisp 程式都是長為一套原始的結構:有個開頭的左括號,並且有個結尾的右括號,並且可以以空格為分隔符號,安插任何數量的辭彙進去二括號之間。這樣的結構稱為 list ,而 list 之內的任何辭彙也可以是 list 。 Lisp 的左右括號有明確的分隔意義,不但可以分隔前一句與後一句,並且可以區別 parent list 與 child list 。

於是,我聯想到的是,組合語言的結構也是這麼簡單。

張貼在 Haskell, Lsip

Haskell ($) 運算符號

在 GHCi 打 `:t ($)` 可見到下列結果

Prelude> :t ($)
($) :: (a -> b) -> a -> b

簡單看,就是把函數套上參數而已。不過,運算的內涵, ($) 是一個比起 (+), (*) 等數學運算符號來,優先權更低的運算符號。

試想,我們所知道的數學運算符號, (*) 比 (+) 優先:

3 + 2 * 4 = 3 + (2 * 4)

那麼,在 Haskell 所見的 ($) 優先等級最低,則在 ($) 左右邊的算式,形同分別把整段加上括號。所以以下二行是相同意思:

succ $ 3 * 2
(succ) (3 * 2)

並且,以下二行也是相同意思:

take 3 $ repeat 3
(take 3) (repeat 3)

於是,如下例,可以運用 let-in 語法與 ($) 運算,寫結構複雜的句子而不必加上括號:

Prelude> :{
Prelude| let n = succ $ 3 * 2
Prelude| in take n $ repeat n
Prelude| :}
[7,7,7,7,7,7,7]

結語

($) 運算符號為最低優先等級的運算符號,並且運算順序為右方結合。

張貼在 Haskell | 標記 ,

在 Windows 安裝 Haskell Tool Stack (重來)

前情提要:Haskell Stack ,方便操作 Haskell Platform 的工具

在前一篇文章,所提到 Haskell Tool Stack 的操作參數有些多餘累贅的參數。本篇文章,經過再三確認,指出目前在 Windows 10 安裝 Haskell Tool Stack ,可以更簡便、更清楚。

Haskell Tool Stack 版本stack-1.5.1-windows-x86_64-installer.exe

Windows 版本: Windows 10

標的

  1. 將 Haskell Tool Stack 安裝在 D:
  2. 透過 Haskell Tool Stack 安裝的 GHC 也安裝在 D:
  3. 安裝之後,要能透過 Haskell Tool Stack 順利運作 GCC (在 Windows 10 若將 GCC 安裝路徑加上含有空格的名稱,如 “Program Files" ,則 Haskell Tool Stack 所需要運用 GCC 編譯的 library , configure 時檢測失效,無法繼續 build )

執行步驟

下載並安裝 stack-1.5.1-windows-x86_64-installer.exe

將環境變數 STACK_ROOT 修改為 D:\haskell_tool_stack (或者,在指令畫面設定 –stack-root <路徑> 的指引)。

打開命令提示字元 (Command Prompt) ,使用指令 stack path 產生預定的設定檔,並可看到 “No compiler …" 字串,說明它是根據前一步驟所指定的 STACK_ROOT “D:\haskell_tool_stack" 目錄裡的設定檔來取得設定值。

開啟文件 D:\haskell_tool_stack\config.yaml ,加上一行 “local-programs-path: D:\haskell_tool_stack" 。之後在指令畫面打 stack path 會看到 “No compiler …" 字串提到需要使用指令 stack setup 將 compiler 安裝在前項所指定的 local-programs-path “D:\haskell_tool_stack" 的子目錄裡。

打開命令提示字元 (Command Prompt) ,使用指令 stack setup 安裝 GHC 與 MSYS2 ,於是它會安裝在前步驟所指定的 STACK_ROOT “D:\haskell_tool_stack" 目錄。

張貼在 Platform | 標記 , ,

Haskell Stack ,方便操作 Haskell Platform 的工具

很久沒有寫 Haskell 程式,最近想重新寫 Haskell 並且特別著重在應用,才發現, Haskell 已經進展為 Haskell Platform 了。而我更想在 Windows 上,能以雷同於 Ubuntu 上寫 Makefile 的方式來處理 Haskell 平台、工具與程式。

獨立於 Haskell Platform 之外,有個叫做 Haskell Stack 的工具,顧名思義能用來整理 Haskell 的軟體組合。但是,我第一次是開開心心安裝了 Haskell Platform 8.2.1 ,之前還有 7.x.x 版本的舊安裝份量,而發現不曉得如何安裝額外的 Haskell 軟體套件如 http-client 之類的。

經過二番研究,我大致了解由 Haskell Stack 安裝配置 GHC 的方式,依下列順序介紹並說明:

  • 安裝 Haskell Stack
  • 調整 Haskell Stack 對自身的設定,並且重整安裝
  • 調整 Haskell Stack 存放 GHC, MSYS2 等的目錄位置,並且執行安裝後者。

好,那麼以下說明各段步驟吧。

安裝 Haskell Stack

由 Haskell Stack Install/upgrade 文件頁面下載安裝檔案 Windows 64-bit Installer

執行 Windows 64-bit Installer 並且修改安裝目標位置,例如我要安裝在 D:\Program Files\Haskell Platform\

調整 Haskell Stack 對自身的設定,並且重整安裝

安裝完成之後,打開命令提示字元 (Command Prompt) ,打 `stack –version` 印出的版本文字為 “Version 1.5.1, Git revision 600c1f01435a10d127938709556c1682ecfd694e x86_64 hpack-0.17.1″

可是不知為何,即使它把 Stack 安裝在我指定的位置,但是,各種 yaml 設定檔案,卻仍然放在 C:\sr\ 目錄中

翻開 Windows 環境變數 STACK_ROOT ,發現設定項預定為 C:\sr\… ,我將此項修改為 “D:\Program Files\Haskell Platform"

再打開命令提示字元,打 `stack path` 指令,它自行在 “D:\Program Files\Haskell Platform" 放置預定的設定檔

刪除 C:\sr\ 目錄

再打一次 `stack path` 指令,確認仍可以運作,將訊息印出,只是訊息開頭說 “No compiler found, …"

調整 Haskell Stack 存放 GHC, MSYS2 等的目錄位置,並且執行安裝後者

打開 D:\Program Files\Haskell Platform\config.yaml 文件,加上三行: “local-programs-path: D:\Program Files\Haskell Platforms" 、 “compiler: ghc-8.2.1″ 、 “compiler-check: match-exact" (詳情請參閱 YAML Configuration 文件頁面

打開 D:\Program Files\Haskell Platforms\global-project\stack.yaml ,加上二行: “compiler: ghc-8.2.1″ 、 “compiler-check: match-exact"

打開命令提示字元 (Command Prompt) ,打 `stack setup 8.2.1` 指令,使它開始在 D:\Program Files\Haskell Platforms\x86_64-windows\ 安裝 GHC 等平台與工具

等待 GHC 安裝完成之後,重新打開命令提示字元,打 `stack path` 確認它可以印出各種系統路徑。

開始使用 GHC

打開命令提示字元,打 `stack ghci` ,等看到 “Prelude>" 提示符號,即可確定平台安裝完成。(然後再打 “:q" 可退出 GHCi)

 

 

 

張貼在 Platform, Uncategorized | 標記 ,

monodevelop 開啟 ASP.net 專案的二個小問題

問題一
情況:在 Linux 環境安裝 mono, monodevelop ,開啟 ASP.net MVC 專案,並且以 xsp 執行。
問題:由於 MVC 按照慣例會去找相同名稱的檔案,而且 Windows 檔案系統不區分大小寫,但是 Linux 檔案系統區分大小寫。
解決:設定專案設定檔的運行參數 MONO_IOMAP 值為 all 。
2017-08-21 14-26-26 的螢幕擷圖

問題二
情況:在 Linux 環境用 mono 執行 ASP.net 網站。
問題:網站啟動時,出現「 Access to the path “/etc/mono/registry" is denied. 」文字。
解決:這篇網誌文章試著說明 mono 為何要像 Windows 那樣設定 registry 。而解決辦法則是建立 /etc/mono/registry 並且將權限安排為 777 。

張貼在 Uncategorized

魯凱族歌謠 Alubaling (鬼湖之戀)歌謠譜

18557138_1654831684530073_2830204000607879624_n

我暫停工作,轉去學習原住民的文化。最近反覆學了一首歌,鬼湖之戀,是魯凱族在唱百步蛇與巴冷公主的傳說故事。

以親身曾經參與過大量資料處理的工作經驗,對音樂曲調的處理,覺得可以很快找到 pattern 。我構想了簡單的記譜系統,能把魯凱族或其他如卑南族古調加以記錄,同時兼顧發音與調性。

以下是另一曲卑南族古調,是由歌手 Panai Kusui 教導的。

18581628_1654246404588601_6413897829814416137_n

參考資訊

  1. 「一起陪原住民劃出回家的路」 Facebook 粉絲專頁 https://www.facebook.com/IndigenousTransformativeJusticeTW/
  2. 鄭雅茹唱鬼湖之戀 https://www.youtube.com/watch?v=RfA69XYjLws
  3. 舞思愛唱鬼湖之戀 https://www.youtube.com/watch?v=INj2RTb5Ni4
  4. 巴冷公主片頭動畫 https://www.youtube.com/watch?v=BA8cD6G8zEA
  5. MIT 冬探聖湖祕境一 大鬼湖暖暖平安夜">MIT 台灣誌「冬探聖湖祕境一 大鬼湖暖暖平安夜」https://www.youtube.com/watch?v=evFWokpt-Y0
  6. 2017/5/16 20:30 「凱道小講堂 x 一起唱歌」之「巴奈教你唱古老的歌」 https://www.facebook.com/2016mayawbiho/videos/851145005038420/
張貼在 Programming | 標記 , , , , , , , ,