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 | 標記 , , , , , , , ,

實作 Landmark Window 與 Sliding Window

由於在 “Knowledge Discovery from Data Streams" 第 17 頁見到 windowing 技術的概括分類,

%e6%93%b7%e5%8f%96

我試著實作 Landmark Window [1] 和 Sliding Window [2] 。

Windowing 技術,以 Sliding Window 為例,為了能保留較近的資料,同時拋棄較遠的資料,一段連續的資料段落需要被保留起來。 Landmark Window 從尾端放進了多少資料,就需要保留多少資料。 Sliding Window 則實作 FIFO ,當新的一筆資料放進去尾端時,假如 window 的資料數目已達到 window 的容量,則前端最早的一筆資料則要退出。

實作上, window 的容量,定義為資料數目。每一筆資料都編列一個號碼,而由於 Erlang 語言有能力以字面寫出超大數字,並且可以操作,所以用一個變數 next 標記下一筆即將進來的資料編號,並且只要有 next 變數,就可以指出串流資料的數目。 Sliding Window 需要多用到一個變數 size ,表示 window 的容量,而資料數目需要由 next 和 size 二變數來求出。

串流資料的保存,我選擇以字典格式 dict 搭配二變數,提供 FIFO 的能力,同時保留其他方面的彈性,例如隨機存取。我沒有選擇以許多個 list 實作 queue 來表達 sliding window ,因為對於 queue 的結構與驗證等細節,要多做討論。

[1] Landmark Window 實作: https://github.com/streamarium/DataStreamsErlang/blob/master/src/landmark_window_of_int.erl

[2] Sliding Window 實作: https://github.com/streamarium/DataStreamsErlang/blob/master/src/sliding_window_of_int.erl

張貼在 Uncategorized | 標記

對資料串流的一些粗淺看法

最近三個月,我學習了資料串流的知識。我認為,資料串流並不是一個讓你知道名詞之後,就直覺地了解那是什麼的東西。目前現有的資料串流方案很多,例如有 Apache Kafka ,但我沒有一下子就摸得上手,不是不懂得怎麼操作的問題,而是在於雖知道操作方法卻不知道如何以這個軟體元件為本,來做出有用的東西。所以,我先花許多時間閱讀概念性的、談資料串流的書籍。

首先,資料串流主要是一串資料依序出現時,它是一種呈現,並且擁有一些特質。你可以從一個簡單的程式找到資料串流的影子:例如,一個 C 語言寫的程式,從 1 加總到 100 。在迴圈裡頭,你有一個 int i 變數會出現 1, 2, ..., 100 等觀察值,並且有一個 int sum 來蒐集這些觀察值的總和,而這是從迴圈的觀點來看的。換一個觀點,從 int i 的觀點來看,在這個變數裡頭,可以在一段時間之內,出現介於 1 和 100 之間的數字,因此,所有 int i 是統計學所提的隨機變數,所有 int i 的觀察值總共是一個資料串流。

以上述的例子,資料串流上頭,我們可以考慮一些特質:

  1. 當觀察值一筆一筆出現時,每一筆數值只能處理一次,而且需要使用累進式的演算法,處理各種統計值,包括平均數、變異數、標準差、二個資料串流之間的相關係數等等。
  2. 雖然觀察值是一次出現一筆,並且一段時間之內,透過同一個隨機變數,輪番出現各種不同的觀察值,不過,如果運用 window 技術以一串陣列變數保留最近若干個觀察值,可以做更多豐富的運算。
  3. 考慮到有關於資料到達率,與隨機變數的資料分布,會發現資料串流的後續處理程式,需要根據統計學的知識處理事情。
  4. 承上,統計程式的演算法不再只求精確值,而是可以求近似解(,或者可能是我誤會:也許統計本來都是走近似解路線),於是演算法的合格水準擴展為 estimate algorithm 。這是因為資料串流的處理意涵,傾向於等到累積處理過的資料數目越多時,所求得的近似解越接近實際解,而不求初期立刻準確。若要寫從頭到尾每一步都算得準確的程式是很難的,會消耗很多心力,而且每遇到一丁點錯誤,就要花更多心力檢查程式及改寫程式。而近似評估法,相對於前者,是比較容易做到的事情。

於是,雖然讀得相當少,至少對資料串流有些概念了。我回想之前接觸 Apache Kafka 的極少的經驗,覺得:以它擔任資料串流管理系統的立場,在一個 topic 上定義的資料串流就是一個 sliding window (預設值好像是每一筆觀察值二天之後過期,所以是一個長度為二天的 sliding window ),消耗相當的記憶體空間數量,來提供這一批觀察值可以被許多個 consumer 取用。

以上是我對於資料串流的一點點理解。

張貼在 Uncategorized | 標記

一個在資料串流中統計次數的例子

在看 “Knowledge Discovery from Data Streams" 一書。第 13 頁看到這個例子,如下圖,一個題目,以及解題辦法。

15844327_1485392414807335_2258489309718129409_o.jpg

我想了四個小時,想不透那方法是怎麼回事。所處理的問題:要用二進位制數為基礎,用相對少的 log(M) 的空間,去統計 M 個數字裡頭存在多少個個別數,所用的方法就是概念上二元樹的結構。我卡著而想不透的是,為什麼最後用一個二進制數的表格登記法,就可以支援概括數字的推估。

後來想明白了:輸入的數字依照大小依序分為許多分區,每一個區段如果有數值存在,對空間的提取,直接提取該區段全部的空間。並且,依照二元樹的原則,後一個區段的空間數目,足以包含之前所有區段的空間。數學真是精煉,使我對數學學者產生敬意。

後記:而我覺得頁面最後一行 “the rightmost 1″ 應該是 “the rightmost zero" ,它寫錯了這個字,而使前後文字對不起來。

2017/1/7 後記:不過,我想不清楚的是,如果資料串流是 1, 2, 3, ... ,等資料一個一個出現時,當第二個數字出現之後, BITMAP 會填為 [0, 0, 0, 1, 1, 0] 而發現最右邊的 0 的 R=0 ,於是算出 d=2^0=1 。雖然明明有二個個別數,卻算出只有一個個別數,這使我無法理解何謂 approximate algorighm 。 資料串流的資料處理方案,是可以只算出近似的結果就好嗎?

張貼在 Uncategorized | 標記 , , , ,

一個 map 概念

讀 “Using Flume" 這本書,第四頁,如下圖:

r-1-bordered

因為字句的誤讀,心裡得到了另一個系統概念:

處理過程將輸入做成 keys ,而處理後的資料,成為 corresponding values 。然後,從 keys 到 values 的 metadata 也儲存來。於是,函數也就是程式、輸入資料、產出資料,都變成資料。

不知道有沒有這種系統模型。

張貼在 Uncategorized

Eclipse 初安裝之後無法更新軟體元件的解法

因為學習過程的特殊安排,我算是熟悉 Java ,了解 Maven 運作,但是並不熟悉 Eclipse 。當然,即使不熟悉 Eclipse ,也有藉由同事的幫助,而用 Eclipse 維護 Java 專案好一陣子的經驗。

現在我覺得需要認真學 Eclipse 了,於是,一開始我打從 Eclipse Neon 練習安裝,然後遭遇了一些問題,包括:

  1. 因為 Open JDK 9 和 Eclipse Oxygen 都是預定未來發行,在 2017 年初才發出 RC 版本,因此將安裝目標設定為 Eclipse Neon 和 Open JDK 8 。
  2. 由於我 Ubuntu 預設為 Oracle Java 9 , Eclipse Neon 安裝之後啟動有些困難。用 sudo update-alternatives --config java 調整到 Open JDK 8 就解決問題了。
  3. 使用由 eclipse.org 下載的最新版本 Eclipse Installer 安裝 Eclipse Neon 之後,隨便安裝個 for JEE 版本,加掛一些 M2Eclipse 和 Equinox P2 Discovery 等 repositories ,然後,點 Help > Check for Updates 遇到幾個軟體元件雖然有 updates ,卻有二個版本互相衝突的問題。

對於 Eclipse 初安裝之後,就無法更新軟體元件的問題,我找到的解決辦法是:如圖,在 Eclipse Installer 點 (選單) >  UPDATE 之後,等軟體元件更新完,再安裝 Eclipse 即可。

appended1

張貼在 Uncategorized