顯示具有 GHC 標籤的文章。 顯示所有文章
顯示具有 GHC 標籤的文章。 顯示所有文章

2011年4月4日 星期一

[gtk2hs] re+install !

早上6:30就爬起來弄 XD

不知道是第幾次弄 gtk+
但是記得應該是第四次很認真的弄 gtk2hs

很久以前 gtk+ 就可以裝好了
不過我記得這邊還是會有點小問題
會需要自己去稍事調整, 例如說,
我記得我手動 brew install gdk-pixbuf 過

然後卡過 32/64 bit 的問題
也卡過 ghc 6.12 不相容的問題
不過這次隨著 ghc 7 的更新
似乎就兜起來了沒有問題

依序安裝 gtk+, ghc(x86_64) 和 haskell-platform

> brew install gtk+
> brew install ghc --64bit
> brew install haskell-platform

因為 ghc 改用 64bit 版
所以 haskell-platform 會需要 re-build
因此整體過程會比較花時間一點
需要多一點耐心 (不過完全比不上當年手動 build ghc 6.10 來的痛苦 XD)

接著參考上篇把 cabal 舊有東西清掉

接著就開始灌全套 gtk2hs
> cabal install gtk2hs-buildtools
> cabal install gtk

至此, 隨便去找個 gtk2hs 的 example 來跑就知道會不會 work
不過, 額外有一件事就是
我之前為了某個被我遺忘的原因而裝了 XQuartz
好像是因為原本 glib 還是 什麼 lib 之類的某些東西有問題
所以裝了XQuartz

是說 XQuartz 似乎真的比較好(完整)
但是因為它是 .pkg 所以這真的是有點囧
我現在沒辦法讓 gtk2hs 出來的程式用原本的 X11.app 去開
是說用 XQuartz 直接跑也沒有不好(似乎這樣才好?)
不過, 感覺如果拿到別的mac上去就葛屁了...



時代真的日新月異
以前這些都麻煩到翻天
每件事情都要自己手動去苦幹實幹
幹不下去了就只好投降
現在這些府住的東西真的越來越發達了
雖然說問題還是很多啦
例如說我一直可以看到 cabal install 時會顯示:
「warning: #warning Setup.hs is guessing the version of Cabal.」
這樣的警告訊息, 或是看到一些警語說「ooxx is experimental!」
這真的看了很抖呀...
感覺哪天會在哪裡突然出包然後解決不了..

[ghc] Upgrade to 7.0.3 !!

upgrade my ghc into 7.0.3 via homebrew.

1. updating homebrew
> brew update

2. upgrade all package you installed
> brew upgrade
or, install lastest ghc only
> brew install ghc
> brew cleanup ghc

3.
kill cabal .. XD
> cd ~/.cabal
> rm -R *
> cd ~/.ghc
> rm -R <path>
path is, for example, i386-darwin-7.0.3

restart cabal by
> cabal update

now, you could install any lastest package you want. XD
> cabal install <any package you want>



There was a weird problem when I want to install the bindings to the LLVM compiler toolkit. I got a error message about pattern matching:
..skipped..
/var/folders/KU/KUdrsAaeFWOIeZoa4Zhsqk+++TI/-Tmp-/llvm-0.9.0.145987/llvm-0.9.0.1/Setup.hs:102:70:
Couldn't match expected type `[PackageDB]'
with actual type `PackageDB'

Well, this problem is due to the error of source code...
so, the thing to do for salving it is to modify that code.

> cabal unpack llvm
> cd ~/.cabal/packages/hackage.haskell.org/llvm-<version>
for example my llvm source code is
~/.cabal/packages/hackage.haskell.org/llvm-0.9.0.1

and then, open Setup.hs with any editor, and replace packageDb by [packageDb] on the line#102 .

now, you must config, build and install by yourself:
> cabal config
> cabal build
> cabal copy

PS, if you cannot config this package
plz google for more info.
there is a big problem about 32/64-bit ghc and/or llvm...
(seems could be solved by rebuild ghc/llvm)

2010年11月1日 星期一

[Note] The GUI Issue

gtk+,之前在Mac OSX上面跑太多次有問題,已經有點怕了說,不過這次用brew灌就可以用了!不過compile的時候要給的參數好多,照說應該link和load的路徑都不需要再給,改下次有空再來試好了。



裝qt,其實nokia往站上有binary可以裝,可是跑起來覺得怪彆扭的。重點是這樣就打壞了原本弄好的lib系統。所以還是看看homebrew有沒有,果然有,那就灌吧!
> brew install qt
然後,等超過一個半小時了還沒好,所以下次再寫qt筆記吧 XD



這兩天在弄gtk+,莫名其妙的弄半天以後發現,brew灌起來的gtk+應該是可以用。雖說會噴一個奇怪的error出來,但是至少有東西了(那個error好像和顯示裝置的驅動還是設定有關)。gtk可以跑,我當然一如往常的想去試一下多年的夢想「gtk2hs」!他官網晃一圈以後就想起一個慘忍的事實:gtk2hs在ghc 6.12上面有bug。Orz

好吧,只好忍痛和gtk2hs說掰掰。不甘心之餘又回頭去看看現在有什麼其他的GUI package可以用用看。東看西看,還是只有gtk2hs和wxHaskell比較大宗。Orz

無奈之下,試試看wxHaskell吧:
在開始裝wxhaskell之前,要先把mac os x內建的wxWidgets換掉:
> brew install wxmac
如果沒有做這一步,之後執行macosx-app出來的.app會不能執行(mac會該說這個東西格式不對)。

wxmac要build好一會兒(10~20分鐘左右)。然後就可以用cabal來install正主兒:
> cabal install wxcore
build的時候,有滿坑滿谷的cpp deprecated warning Orz。為保安全,紀錄下g++的version:
i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Copyright (C) 2007 Free Software Foundation, Inc.
然後 > cabal install wx
我也不知道我幹麼分兩段裝,一定是白爛病發作了XD。裝好以後確定一下東西有進去ghc-pkg。
> ghc-pkg list
/usr/local/Cellar/ghc/6.12.3/lib/ghc/package.conf.d
..[略]..
/Users/Jaiyalas/.ghc/i386-darwin-6.12.3/package.conf.d
wx-0.12.1.6
wxcore-0.12.1.6
wxdirect-0.12.1.3

接下來才是問題所在,gui的東西似乎在mac上面都特別刁鑽。wx同樣也不是可以讓你乖乖跑一下就有結果可以開開心心用的。用ghc compile以後直接執行他會噴error如下,並且會跑出一個只能看不能用的視窗。
10:46:15: Debug: wxColour::Set - couldn't set to colour string 'GREY'
[Debug] 10:46:15: Adding duplicate image handler for 'PNG file'
[Debug] 10:46:15: Adding duplicate image handler for 'JPEG file'
[Debug] 10:46:15: Adding duplicate image handler for 'TIFF file'
[Debug] 10:46:15: Adding duplicate image handler for 'GIF file'
[Debug] 10:46:15: Adding duplicate image handler for 'PNM file'
[Debug] 10:46:15: Adding duplicate image handler for 'PCX file'
[Debug] 10:46:15: Adding duplicate image handler for 'Windows icon file'
[Debug] 10:46:15: Adding duplicate image handler for 'Windows cursor file'
[Debug] 10:46:15: Adding duplicate image handler for 'Windows animated cursor file'
[Debug] 10:46:15: Adding duplicate image handler for 'TGA file'
[Debug] 10:46:15: Adding duplicate image handler for 'XPM file'

解決的辦法是把原本的executable file包成.app再去打開它。不過這之前就需要macosx-app來作這件事。細節可以參考stackoverflow上的說明。這邊作個簡單的描述:
抓下macosx-app的模板順便改名字和操作模式
> wget http://code.haskell.org/wxhaskell/bin/macosx-app-template
> mv macosx-app-template macosx-app
> chmod a+x macosx-app
然後開個順手的editor把下面這段加到macosx-app的最上面:
#!/bin/sh

libdir=""

wxrezcomp="`wx-config --rezflags`"
wxrezfile=""
if test "$wxrezcomp"; then
for word in $wxrezcomp; do
temp="`echo $word | grep '[^_]*_mac-[^r]*r'`"
if test "$temp"; then
wxrezfile="$temp"
fi
done
fi

if test "$wxrezfile"; then
wxrezdir="`echo $wxrezfile | sed -e 's|\(.*\)/libwx_mac.*|\1|'`"
wxinstallrezcomp="`echo \"${wxrezcomp}\" | sed -e \"s|${wxrezdir}|${libdir}|g\"`"
wxinstallrezfile="`echo \"${wxrezfile}\" | sed -e \"s|${wxrezdir}|${libdir}|g\"`"
fi

rezcomp="$wxinstallrezcomp"
rezfile="$wxinstallrezfile"

直接執行macosx-app的話會看到他噴出一些warning
> ./macosx-app
Warning: --rezflags, along with Mac OS classic resource building is deprecated. You should remove this from your Makefile and build .app bundles instead.
error: you need to specify a program. Use "--help" to show valid options.
這邊可以不用理他(其實是我也不知道怎要怎麼解決,反正可以用 Orz)

以上都準備好以後就可以直接
> ghc -package wx -o helloworld HelloWorld.hs
> macosx-app -v helloworld
> open helloworld.app
感人的小視窗就會跳出來惹 OvQ

2010年4月21日 星期三

[Note]Ray Tracing with Haskell using package:parallel

[草記=只是暫時紀錄,整篇會重寫]


這兩天都在弄ray tracing的事情
找了好幾個C/C++版本的code來參考
不過, 幾乎是看沒有懂
最後當然還是決定投靠haskell, XD

找了幾個版本的範例程式
其中一個用gtk作ui
這個版本暫時擱置
因為我gtk一直怪怪的,跑不出東西 Orz

另一個是平行版本

剩下一個是這個這個

除了gtk那個, 剩下都是直接輸出ppm檔
所以沒有parallel的那兩個都不需要特別題什麼
而且他們也沒有import什麼package進來
簡直就是一整個貼心 XD

parallel那個就囧了
一開始compile一直說 parse error
所以把L49和L5?的兩個"!"給砍了
然後就發現package有問題
所以灌了 AC-vector 1.2.2 和 parallel-2.2.0.1
compile以後, 還是有問題
他說*<>沒定義而且*|重複定義...
弄了好一會兒以後發現
因為原作者是用AC-vector 1.1.1
而AC-vector每次改版都大改... @@
所以又用 ghc-pkg hide AC-Vector-1.2.2
把新版的AC-vector disable掉
一番折騰之後
終於ok了
但是跑一下發現, CPU 只吃了50% @@
所以想說該不會是因為沒有開ghc的選項
所以找了一下以前的資料
在ghc --make ....... 後面加上一個「-threaded」
然後跑程式的時候加上 +SRT -N2 的選項
e.g. ./ray4-hs 5 50 +RTS -N2 > out.ppm
btw, parallel這個程式需要兩個參數, 遞迴的次數 和 邊長

而David J. King的那個版本則是>./ray 500 > out.ppm
500也是邊長參數

ps - .ppm閱讀 :
有人推薦xv, 不過因為它是x window所以難用
最後我裝了ToyViewer
雖說有一點點鈍鈍的
但是目前還不錯用

2008年5月10日 星期六

[GTK2HS] Install on Mac OS X

一時興起
灌了wxHaskell和gtk2hs來用

不過wxHaskell不知道為甚麼不能跑
我猜是某個東西的版本不對
不過我暫時也懶得去找問題了
也許哪天用Arch來灌灌看(?) 
有.空.的.話.啦... XD

回到正題
gtk2hs官方網站上的tutorial
不知道為啥是用一個叫做Glade的軟體當作開發環境

然後我試著去抓下來build
不過build到一半有問題然後就卡住了
看起來是我有少東西
但是,懶散如我
我另外去google一下有沒有其他的tutorial
果不其然,找到了這個 
一個gtk2hs的toturial
(不過後來我也在gtk2hs官網上看到一樣的helloworld sample囧)

簡單講一下helloworld的作法

首先create一個檔案:
    import Graphics.UI.Gtk
    main 
:: IO ()
    main 
= do
      
initGUI
      window 
<- windowNew
      button 
<- buttonNew
      
set window [ containerBorderWidth := 10,
                   
containerChild := button ]
      
set button [ buttonLabel := "Hello World"]
      
onClicked button (putStrLn "Hello World")
      
onDestroy window mainQuit
      
widgetShowAll window
      
mainGUI



然後用ghc compile一下
> ghc --make gtktry.hs -o hello
> ./hello
這樣就好了
因為是在mac os上
所以會開出X11來
有點醜,但是也只能忍耐了 T^T

題外話1
後來我用macport弄到了Glade3
不過暫時沒有意願去測
雖說看起好像還不錯用的說
(port好強呀,什麼都有Orz)

題外話2
據說有個叫做HOC的東西
(Haskell to Object-C binding)
顧名思義,可以連接haskell和object-c
然後據說可以藉此使用mac上的cocoa
不過,cocoa我完全不熟
(其實完全沒碰過沒用過)
所以只是隨口提一下 XD

2007年11月14日 星期三

[GHC] 6.8.1 -Install

最近把NB上的OS改成Ubuntu7.10
所以就要重灌所有的東西
ghc當然也不利外
到網站上晃了一下以後發現
ghc-6.8.1已經release了!!
http://www.haskell.org/ghc/download_ghc_681.html

抓了linux(x86)的版本之後
$ tar -zxf ghc-6.8.1-i368-unknown-linux.tar.bz2
$ cd ghc-6.8.1-i368-unknown-linux
$ ./configure
$ sudo make install
等他跑玩就好了

原先是這樣希望啦
但是實際上灌好以後執行時噴了個error出來
大意是說ghc時找不到libreadline.so.4
原本以為是我的readline太老舊 (其實應該是不太可能才對= =a)
所以重灌了一次realine5.0
結果還是一樣找不到

最後才在下載ghc的那個網頁上看到有"readline4 compatibility RPM"
抓下來以後解壓縮才看到裡面是/lib/libreadline.so.4(等檔案)
不過也沒說要copy到哪裡去
所以就到處丟看看
最後是存在/usr/lib/底下才解決的.
$ sudo cp -R ~/lib /usr

接下來就是agda和epigram了 XD