2013年7月22日 星期一

用Haskell來食用標籤湯!

網路逛久了總會冒出一些像是「能不能收集某頁面中的所有連結」等想要把某些網頁集合起來做整理的想法。數量少的話,可以手工的做;但數量要是多起來...會很可怕的喔!

這時候就讓自己的程式設計能力上場吧!如果網站沒有提供特別的程式設計界面的話,直接抓取網頁下來分析可能是唯一的方法了。在瀏覽器裡面被排得美美的網頁實際上由 html 這種標記語言所描述,由瀏覽器所呈現。也就是,想要瀏覽器裡面看到的資料,多半可以藉著分析所得網頁的 html 來取得。(利用 javascript 即時生成內容的 Twitter 則是例外。幸好,Twitter 似乎有提供程式設計界面。)

在 Haskell 界最常被提到的 html 剖析器有 HXT 以及 tagsoup。這裡我試用tagsoup寫了一個用來處理簡單的網頁的小程式:見此

寫作這類程式最常不放心的點在於,「網頁改版了,那我的程式就只能去喝西北風了」。有些人會考慮到這點,然後在自己的程式裡面加上一些比較彈性的寫法。然而,我也聽過某些人認為這種擔心是不必要的:到時再重寫就好啦!

反正到時候一定可以解決,不用擔心,先寫再說吧!

2013年7月6日 星期六

cabal, cabal-dev 疑難雜症處理

最近為了要設置隔離的開發環境,使用了cabal-dev。相對於把 haskell 套件安裝到系統區內,cabal-dev 會把套件安裝到另外的地方。這樣做的好處是:

  • 可以確認自己的程式可以在乾淨的環境中被建置起來
  • 有比較大的機會避開套件地獄。
    所謂套件地獄,是指兩個套件依賴了名稱相同,但版本互相衝突的套件的現象。之所以叫做地獄,是因為使用者將因為不知如何是好而狂抓頭皮(或臉頰),並且眼中浮現地獄的景色,故得其名(?)
這裡紀錄了一些遇到的問題以及我使用的解法。