C Pointer Concepts in Java

學過 C 語言,轉換到 Java 語言時,常有如下困擾。 相較於 C 語言的變數分成 指標變數 (pointer variable) 和 非指標變數 (non-pointer variable),兩者可由型別前面是否有加 * 號作區隔。那麼, Java 語言沒有加 * 號的指標變數,若遇到須要指標的情境,例如鏈結清單 (linked list) 或 圖形結構(graph),該如何應對?

答案是 Java 語言有所謂參照變數 (reference variable) 的設計,以對應於 C 語言的指標變數。以下將舉例說明。

C 語言中只要變數宣告時,型別前面加 * 號就是指標變數,例如:


     int i = 3; // 宣告整數變數 i,記憶體切一塊整數空間,裏頭填入整數 3
     int *p; // 宣告整數指標變數 p,記憶體切一塊指標空間,裏頭值未定
     p = &i; // 將變數 i 住址填入變數 p 指標空間

其中,i 是一般 整數型別 (int) 變數,變數 i 存放的是記憶體空間中,某位址的整數,透過 i 可以存取該整數。 p 前面加 *, p 就變成 整數指標型別 (int *) 變數,變數 p 存放的是記憶體空間中,某塊可存放整數的住址,透過 p 可以存取該住址的整數。在第3行指令,p 接收 i 住址之後,兩者產生連動,*p 和 i 將看到相同內容,整數 3。

Java 語言則沒有明確的指標觀念,所有變數只分成基本型別 (primitive type) 及非基本型別 (non-primitive type)。基本型別限定8種,包含 boolean, char, byte, short, int, long, float, double。基本型別的保留字開頭皆小寫,用途和 C 語言類似,其變數可直接存取該變數值。

非基本型別又稱 參照型別 (reference type),包含所有 類別,介面,陣列,列舉等參照型別。參照型別的變數存放的是參照值,可想像成記憶體位置值,或物件索引值。例如:


     // 宣告整數參照變數 r,記憶體切一塊參照空間,裏頭填入 null
     Integer r; 
     
     // 建立存放整數 4 的整數物件,將其索引值填入變數 r 的參照空間
     r = new Integer(4);

其中, r 就是整數參照變數。變數 r 存放某整數物件的索引值之後,透過 r 可以存取該整數物件的整數 4。

以上介紹 Java 的參照型別可對應於 C 指標型別的概念及簡單對照用例,若想進一步了解如何用 Java 實現如鏈結清單這類需要動態記憶體與節點連結的資料結構,可參考下文「Linked Lists from C to Java」。

the cold start problem in user-based collaborative filtering

>如果使用user-based的協同過濾來進行產品推薦,對於新加入的使用者,他還沒有對任何產品的評分紀錄,因此似乎沒有辦法找出與其相近的鄰居,此時是否需要混用其他方式進行推薦呢?

協同過濾推薦技術遇到新用戶無法推薦的情況稱為冷啟動問題。一般常混用基於內容推薦或知識推薦技術作輔助。另外新用戶也可使用非個人化推薦作法,就其目前感興趣項目進行短暫(ephemeral)推薦。有關解決協同冷啟動的問題,可參考如下電子書第1章之多處討論。

aggarwal-16- springer-recommender systems- the textbook

Trying to get property of non-object in /.../class-category-sticky-post.php on line 200

WordPress啟用類別置頂插件category-sticky-post後,
類別內若無文章,會出現無貼文可置頂訊息:

    Trying to get property of non-object in /.../wp-content/plugins/category-sticky-post/class-category-sticky-post.php on line 200

解法如下: 在add_styles()方法,增加isset($post->ID) && 判別指令。

    category-sticky-post/class-category-sticky-post.php

      public function add_styles() {

        global $post;

        if( isset($post->ID) && is_archive() && '1' !== get_post_meta( $post->ID, 'category_sticky_post_border', true ) ) {
          wp_enqueue_style( 'category-sticky-post', plugins_url( '/category-sticky-post/css/plugin.css' ) );
        }
      }


參考:
https://tommcfarlin.com/category-sticky-post-2-1-0-support-post-types/

four kinds of design for adding operation of two rationals

有理數加法的幾種設計: 結果回傳或覆蓋 vs 類別或物件方法
  (1) public static Rational add(Ratinoal r1, Rational r2)
      // 用法:  Rational r3 = Rational.add(r1,r2);  // r3=r1+r2

  (2) public static void add(Ratinoal r1, Rational r2)
      // 用法:  Rational.add(r1,r2);  // r1=r1+r2

  (3) public Rational add(Rational r2)
      // 用法:  Rational r3 = r1.add(r2);  // r3=r1+r2

  (4) public void add(Rational r2)
      // 用法:  r1.add(r2);  // r1=r1+r2

Canonical Weighted Sum (CWS) Gates for Simplifying Bayesian Network Inference

decampos-10-ijar-combining content-based and collaborative recommendations- a hybrid approach based on bayesian networks

The following will explain the examples in pp793-794 of the paper.

Assume that I and F nodes in the bayesian network are binary random variables.
If the set of parent nodes of node I6 is Pa(I6) = { F6, F7, F8},
then the 8 possible configurations of conditional joint probabilities are
     pa1(I6) = (f6,1 & f7,1 & f8,1)
     pa2(I6) = (f6,0 & f7,1 & f8,1)
     pa3(I6) = (f6,1 & f7,0 & f8,1)
     pa4(I6) = (f6,1 & f7,1 & f8,0)
     pa5(I6) = (f6,0 & f7,0 & f8,1)
     pa6(I6) = (f6,0 & f7,1 & f8,0)
     pa7(I6) = (f6,1 & f7,0 & f8,0)
     pa8(I6) = (f6,0 & f7,0 & f8,0)

By use of Canonical Weighted Sum (CWS) Gates, which consist of 2x2x3=12 weights,
computation of 16 conditional joint probabilities (having 8 degrees of freedom)
can be decomposed into the summation of 12 weights (having 3 degrees of freedom):
 w(f6,1&i6,1) = w(f6,0&i6,0) = 0.3
 w(f7,1&i6,1) = w(f7,0&i6,0) = 0.4
 w(f8,1&i6,1) = w(f8,0&i6,0) = 0.3
and
 w(f6,1&i6,0) = w(f6,0&i6,1) = 0
 w(f7,1&i6,0) = w(f7,0&i6,1) = 0
 w(f8,1&i6,0) = w(f8,0&i6,1) = 0

Pr(i6,0 | pa1(I6))= Pr(i6,0 | f6,1 & f7,1 & f8,1) = w(f6,1&i6,0) + w(f7,1&i6,0) + w(f8,1&i6,0) = 0
Pr(i6,1 | pa1(I6))= Pr(i6,1 | f6,1 & f7,1 & f8,1) = w(f6,1&i6,1) + w(f7,1&i6,1) + w(f8,1&i6,1) = 0.3 + 0.4 + 0.3 = 1

Pr(i6,0 | pa2(I6))= Pr(i6,0 | f6,0 & f7,1 & f8,1) = w(f6,0&i6,0) + w(f7,1&i6,0) + w(f8,1&i6,0) = 0.3
Pr(i6,1 | pa2(I6))= Pr(i6,1 | f6,0 & f7,1 & f8,1) = w(f6,0&i6,1) + w(f7,1&i6,1) + w(f8,1&i6,1) = 0 + 0.4 + 0.3 = 0.7

Pr(i6,0 | pa3(I6))= Pr(i6,0 | f6,1 & f7,0 & f8,1) = w(f6,1&i6,0) + w(f7,0&i6,0) + w(f8,1&i6,0) = 0.4
Pr(i6,1 | pa3(I6))= Pr(i6,1 | f6,1 & f7,0 & f8,1) = w(f6,1&i6,1) + w(f7,0&i6,1) + w(f8,1&i6,1) = 0.3 + 0 + 0.3 = 0.6

Pr(i6,0 | pa4(I6))= Pr(i6,0 | f6,1 & f7,1 & f8,0) = w(f6,1&i6,0) + w(f7,1&i6,0) + w(f8,0&i6,0) = 0.3
Pr(i6,1 | pa4(I6))= Pr(i6,1 | f6,1 & f7,1 & f8,0) = w(f6,1&i6,1) + w(f7,1&i6,1) + w(f8,0&i6,1) = 0.3 + 0.4 + 0 = 0.7

Pr(i6,0 | pa5(I6))= Pr(i6,0 | f6,0 & f7,0 & f8,1) = w(f6,0&i6,0) + w(f7,0&i6,0) + w(f8,1&i6,0) = 0.3 + 0.4 = 0.7
Pr(i6,1 | pa5(I6))= Pr(i6,1 | f6,0 & f7,0 & f8,1) = w(f6,0&i6,1) + w(f7,0&i6,1) + w(f8,1&i6,1) = 0 + 0 + 0.3 = 0.3

Pr(i6,0 | pa6(I6))= Pr(i6,0 | f6,0 & f7,1 & f8,0) = w(f6,0&i6,0) + w(f7,1&i6,0) + w(f8,0&i6,0) = 0.3 + 0 + 0.3 = 0.6
Pr(i6,1 | pa6(I6))= Pr(i6,1 | f6,0 & f7,1 & f8,0) = w(f6,0&i6,1) + w(f7,1&i6,1) + w(f8,0&i6,1) = 0 + 0.4 + 0 = 0.4

Pr(i6,0 | pa7(I6))= Pr(i6,0 | f6,1 & f7,0 & f8,0) = w(f6,1&i6,0) + w(f7,0&i6,0) + w(f8,0&i6,0) = 0 + 0.4 + 0.3 = 0.7
Pr(i6,1 | pa7(I6))= Pr(i6,1 | f6,1 & f7,0 & f8,0) = w(f6,1&i6,1) + w(f7,0&i6,1) + w(f8,0&i6,1) = 0.3 + 0 + 0 = 0.3

Pr(i6,0 | pa8(I6))= Pr(i6,0 | f6,0 & f7,0 & f8,0) = w(f6,0&i6,0) + w(f7,0&i6,0) + w(f8,0&i6,0) = 0.3 + 0.4 + 0.3 = 1
Pr(i6,1 | pa8(I6))= Pr(i6,1 | f6,0 & f7,0 & f8,0) = w(f6,0&i6,1) + w(f7,0&i6,1) + w(f8,0&i6,1) = 0

1 = Pr(i6,0 | pa(I6)) + Pr(i6,1 | pa(I6))
  = w(f6,1&i6,0) + w(f7,1&i6,0) + w(f8,1&i6,0) + w(f6,1&i6,1) + w(f7,1&i6,1) + w(f8,1&i6,1) = 1

============================

Given Pa(U4) = { I1, I3, I6, I7, I8, I10 } with six-value (0,1,~,5) random variable U,
the network consists of 2x6x6=72 weights.

By the following 12 nonzero weights having 6 degrees of freedom (with all other weights being 0):
       w(i1,1&u4,1) = w(i3,1&u4,1) = w(i6,1&u4,2) = w(i7,1&u4,1) = w(i8,1&u4,3) = w(i10,1&u4,5) = 0.166
and
       w(i1,0&u4,0) = w(i3,0&u4,0) = w(i6,0&u4,0) = w(i7,0&u4,0) = w(i8,0&u4,0) = w(i10,0&u4,0) = 0.166
we can compute any Pr(U4 | pa(U4)) conditional probabilities by summation of the 12 nonzero weights.

(1) pa(U4) = { i1,1 & i3,1 & i6,1 & i7,1 & i8,1 & i10,1 }

Pr(u4,0 | pa(U4)) = w(i1,1&u4,0) + w(i3,1&u4,0) + w(i6,1&u4,0) + w(i7,1&u4,0) + w(i8,1&u4,0) + w(i10,1&u4,0)
    = 0            + 0            + 0            + 0            + 0            + 0
    = 0

Pr(u4,1 | pa(U4)) = w(i1,1&u4,1) + w(i3,1&u4,1) + w(i6,1&u4,1) + w(i7,1&u4,1) + w(i8,1&u4,1) + w(i10,1&u4,1)
    = 0.166        + 0.166        + 0            + 0.166        + 0            + 0
    = 0.5

Pr(u4,2 | pa(U4)) = w(i1,1&u4,2) + w(i3,1&u4,2) + w(i6,1&u4,2) + w(i7,1&u4,2) + w(i8,1&u4,2) + w(i10,1&u4,2)
    = 0            + 0            + 0.166        + 0            + 0            + 0
    = 0.166

Pr(u4,3 | pa(U4)) = w(i1,1&u4,3) + w(i3,1&u4,3) + w(i6,1&u4,3) + w(i7,1&u4,3) + w(i8,1&u4,3) + w(i10,1&u4,3)
    = 0            + 0            + 0            + 0            + 0.166        + 0
    = 0.166

Pr(u4,4 | pa(U4)) = w(i1,1&u4,4) + w(i3,1&u4,4) + w(i6,1&u4,4) + w(i7,1&u4,4) + w(i8,1&u4,4) + w(i10,1&u4,4)
    = 0            + 0            + 0            + 0            + 0            + 0
    = 0

Pr(u4,5 | pa(U4)) = w(i1,1&u4,5) + w(i3,1&u4,5) + w(i6,1&u4,5) + w(i7,1&u4,5) + w(i8,1&u4,5) + w(i10,1&u4,5)
    = 0            + 0            + 0            + 0            + 0            + 0.166
    = 0.166

1 = Pr(u4,1 | pa(U4)) + Pr(u4,2 | pa(U4)) + Pr(u4,3 | pa(U4)) + Pr(u4,4 | pa(U4)) + Pr(u4,5 | pa(U4))
  = 0.5 + 0.166 + 0.166 + 0 + 0.166

(2) pa(U4) = { i1,0 & i3,0 & i6,1 & i7,1 & i8,0 & i10,0 }

Pr(u4,0 | pa(U4)) = w(i1,0&u4,0) + w(i3,0&u4,0) + w(i6,1&u4,0) + w(i7,1&u4,0) + w(i8,0&u4,0) + w(i10,0&u4,0)
    = 0.166        + 0.166        + 0            + 0            + 0.166        + 0.166
    = 0.666

Pr(u4,1 | pa(U4)) = w(i1,0&u4,1) + w(i3,0&u4,1) + w(i6,1&u4,1) + w(i7,1&u4,1) + w(i8,0&u4,1) + w(i10,0&u4,1)
    = 0            + 0            + 0            + 0.166        + 0            + 0
    = 0.166

Pr(u4,2 | pa(U4)) = w(i1,0&u4,2) + w(i3,0&u4,2) + w(i6,1&u4,2) + w(i7,1&u4,2) + w(i8,0&u4,2) + w(i10,0&u4,2)
    = 0            + 0            + 0.166        + 0            + 0            + 0
    = 0.166

Pr(u4,3 | pa(U4)) = w(i1,0&u4,3) + w(i3,0&u4,3) + w(i6,1&u4,3) + w(i7,1&u4,3) + w(i8,0&u4,3) + w(i10,0&u4,3)
    = 0            + 0            + 0            + 0            + 0            + 0
    = 0

Pr(u4,4 | pa(U4)) = w(i1,0&u4,4) + w(i3,0&u4,4) + w(i6,1&u4,4) + w(i7,1&u4,4) + w(i8,0&u4,4) + w(i10,0&u4,4)
    = 0            + 0            + 0            + 0            + 0            + 0
    = 0

Pr(u4,5 | pa(U4)) = w(i1,0&u4,5) + w(i3,0&u4,5) + w(i6,1&u4,5) + w(i7,1&u4,5) + w(i8,0&u4,5) + w(i10,0&u4,5)
    = 0            + 0            + 0            + 0            + 0            + 0
    = 0

1 = Pr(u4,1 | pa(U4)) + Pr(u4,2 | pa(U4)) + Pr(u4,3 | pa(U4)) + Pr(u4,4 | pa(U4)) + Pr(u4,5 | pa(U4))
  = 0.666 + 0.166 + 0.166 + 0 + 0

============================

Suppose that Acf = A4 or user 4.
Given Pa(Acf) = { Ux, Uy, Uz } with with six-value (0,1,~,5) random variable Acf,
the network consists of 6x6x3=108 weights.

By the following ? nonzero weights having ? degrees of freedom (with all other weights being 0):
       w(ux,5&acf,4) = 0.54
       w(uy,1&acf,4) = 0.15
       w(uz,4&acf,4) = 0.09
and
       w(ux,0&acf,0) = 0.6
       w(uy,0&acf,0) = 0.3
       w(uz,0&acf,0) = 0.1
we can compute any Pr(Acf | pa(Acf)) conditional probabilities by summation of the ? nonzero weights.


(1) pa(Acf) = { ux,5 & uy,1 & uz,4 }

Pr(acf,4 | pa(U4)) = w(ux,5&acf,4)               + w(uy,1&acf,4)               + w(uz,4&acf,4)
     = RSim(Ux,Acf) * Pr(A=4|Ux=5) + RSim(Uy,Acf) * Pr(A=4|Uy=1) + RSim(Uz,Acf) * Pr(A=4|Uz=4)
     = 0.6          * 0.9          + 0.3          * 0.5          + 0.1          * 0.9
                   = 0.78

(2) pa(Acf) = { ux,0 & uy,1 & uz,4 }

Pr(acf,4 | pa(U4)) = w(ux,0&acf,4)               + w(uy,1&acf,4)               + w(uz,4&acf,4)
     = 0                           + RSim(Uy,Acf) * Pr(A=4|Uy=1) + RSim(Uz,Acf) * Pr(A=4|Uz=4)
     = 0                           + 0.3          * 0.5          + 0.1          * 0.9
                   = 0.24

(3) pa(Acf) = { ux,0 & uy,1 & uz,4 }

Pr(acf,0 | pa(U4)) = w(ux,0&acf,0)               + w(uy,1&acf,0)               + w(uz,4&acf,0)
     = RSim(Ux,Acf)                + 0                           + 0
     = 0.6                         + 0                           + 0
     = 0.6

why object-oriented programming provides encapsulation, inheritance, and polymorphism

一般完整的物件導向語言提供封裝、繼承、多型三大功能,允許以合成或繼承方式建構新物件。

其中,封裝(encapsulation)旨在保護私密資料的安全、完整性,其存取唯有透過公開的屬性存取(窗口)或運算方法達成之。

合成(composition)是一種利用物件建構物件的方法,物件之間的擁有(has-a)關係可形成階層樹狀圖。

繼承(inheritance)旨在提供新用舊的機制,讓後代需要用到親代原來的屬性及方法時,直接沿用,不必重造車輪。
繼承也是一種利用物件建構物件的方法,物件之間的屬於(is-a)關係可形成階層樹狀圖。

多型(polymorphism)旨在繼承架構下提供舊用新的機制,讓親代也有機會用到後代創新的新行為、新功能。

find the unique second smallest number in excel

一般 Excel 找最小或最大值可以使用 MIN(range) 或 MAX(range)函數,其中,range表示儲存格範圍。 如果想要找第2小或第2大也可以使用 SMALL(range, 2) 或 LARGE(range, 2),其中,2表示順序第2。 但是以找最小為例,有時候遇到第1小及第2小值一樣,就看不出值分布情形。若希望能看到不同值的第2小數字,可以使用如下函數:

     = SMALL(range, COUNTIF(range, MIN(range)) + 1)

其中, SMALL(range,  n) 可回傳 range 範圍內順序第 n 小的數字。 COUNTIF(range, MIN(range)) 可回傳 range 範圍內符合最小值的儲存格個數。 此個數加1之後,即為不同值第2小數字之順序。 因此可餵給 SMALL 函數,回傳不同值第2小數字出來。

至於不同值第3或第n小數字,可能就需要更複雜的 FREQUENCY 陣列函數或自己寫巨集計算了。

how to retrieve access-denied files in an old disk drive

 
       系統掛載舊硬碟之後,因原始身份別不同,常有權限不符,無法讀取現象
 --
 因為目錄常啟用繼承上一層目錄的權限,因此比較省事的方法就是
  找到最上一層開始出現讀不到的共通目錄,由此設定Everyone完全控制
  其餘子層目錄根據繼承就會沿用Everyone完全控制
 --
 目錄/內容/安全性/進階/
  權限:按[停用繼承],選[從此物件中移除所有繼承權限]
       新增/允許/Everyone/完全控制/繼承自無/套用到這個資料夾、子資料夾及檔案
       勾選[以可從此物件繼承的權限項目取代所有子物件的權限項目(P)]
       選[套用]
  擁有者:變更
         請輸入物件名稱來選取(E): Everyone
         檢查名稱
         確定
        勾選[取代子容器與物件的擁有者]
        選[套用]
 --
 目錄檔案權限:各符合身份之帳號權限的最寬鬆集合
 分享權限:各符合身份之帳號權限的最寬鬆集合
 最終權限: 兩者之最嚴謹集合

three kinds of traffic segmentation functions on a switch

企業在區網內會使用較高階的交換器,主要看重其3種分隔流量的功能:

  1. 針對1對1單播訊框 (unicast frame),可依照訊框的去處網卡住址,又稱媒介存取控制 (mac) 住址,決定訊框將轉送到交換器的哪一個出口,以提升交換器同時間的會談 (session) 數量。
  2. 針對1對多廣播訊框 (broadcast frame),可依照延伸樹 STP 協定,決定交換器的哪一個連接埠 (switch port) 須暫時性開啟或關閉傳送功能,以防止廣播風暴 (broadcast storm)。
  3. 擁有虛擬區網 VLAN 功能,可跨越互連的交換器,將訊框轉送給所有相同 VLAN 的接收者,不擔心資料會外洩給其他 VLAN 用戶看到。

以上相關功能可參考下文進一步說明:

  1. Blogger: why use high-end switches in an enterprise LAN environment?
  2. Blogger: why the spanning tree protocol (STP) is needed in a higher-end switch?
  3. Blogger: why virtual local area networks (VLANs) are often used in an enterprise network?

Example of Converting Taiwan Skills Certification Test Bank for Moodle Use

勞動部技術士技能檢定學科題庫轉成moodle平台試題法

如果想利用Moodle平台的測驗卷功能練習技術士檢定學科題目,
必須先將題庫轉成Aiken純文字格式,才能匯入平台開測驗卷。
本方法只適用純文字單選題,不適用含圖形之題目。
用到的軟體工具有一般瀏覽器、微軟Word、UltraEdit、微軟記事本。
其轉換步驟如下:

A.下載檢定題目

  從如下題庫網址,
    勞動部技術士檢定學科題庫
    http://www.labor.gov.tw/home.jsp?pageno=201109290020
  選擇適當級別及科目之學科題目,格式為.pdf。

B.轉換題目檔案格式

  利用如下線上轉檔網址,
    Convert PDF to Word (Free!)
    http://www.pdfonline.com/pdf-to-word-converter/
  將題目從.pdf格式還原為.rtf格式。

C.轉換題目為Big5純文字檔

  從微軟Word軟體,
  先用常用/取代功能,作如下1,2,3,4選項的字串取代,
   "①"  替換為 "A. "
   "②"  替換為 "B. "
   "③"  替換為 "C. "
   "④"  替換為 "D. "
  再用另存新檔功能,
  將.rtf格式轉換為.txt純文字格式。

  例如:
    1. (2) 在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?①網路層(Network)②實體層(Physical)③應用層 (Application)④傳輸層(Transport)。
  變成:
    1. (2) 在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?A.  網路層(Network)B.  實體層(Physical)C. 應用層 (Application)D. 傳輸層(Transport)。

D.調整題目內容符合Aiken格式

  利用UltraEdit的如下正規式功能
   UltraEdit/Search/Replace/Regular_Expressions
  逐步調整欄位相關內容:

  D1.每個選項獨立為一行
        "A. " 替換為 "^pA. "
        "B. " 替換為 "^pB. "
        "C. " 替換為 "^pC. "
        "D. " 替換為 "^pD. "

   說明:
        ^p表示換行字元
   例如:
       1. (2) 在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?A.  網路層(Network)B.  實體層(Physical)C. 應用層 (Application)D. 傳輸層(Transport)。
   變成:
       1. (2) 在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?
       A.  網路層(Network)
       B.  實體層(Physical)
       C. 應用層 (Application)
       D. 傳輸層(Transport)。

  D2.擷取答案1,2,3,4
         "%[0-9]+.*(^([1-4]^))" 替換為 "ANSWER: ^1 ^p"

   說明:
         %表示行開頭,[0-9]+表示1個以上由0~9任一字元組成的字串,
         .*表示任意字元數的字串,[1-4]表示1~4任一字元,
         ^(.....^)表示擷取.....範圍內的字串,^1表示代入匹配擷取成功的第1組字串。
   例如:
          1. (2) 在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?
   變成:
          ANSWER:  2
          在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?

  D3.調整答案欄位到題目之後
        "%^(ANSWER: [A-D]^)^p ^(?*^pA.?*^pB.?*^pC.?*^pD.?*^)$"
        替換為
        "^2^p^1"

   說明:
         %表示行開頭,$表示行結尾,[A-D]表示A~D任一字元,^p表示換行字元,
         ^(.....^)表示擷取.....範圍內的字串,
         ^1表示代入匹配擷取成功的第1組字串,^2表示代入匹配擷取成功的第2組字串。
   例如:
         ANSWER:  2
         在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?
         A.  網路層(Network)
         B.  實體層(Physical)
         C. 應用層 (Application)
         D. 傳輸層(Transport)。
   變成:
         在 OSI 7 層協定中「網路硬體協定」,屬於以下哪一層?
         A.  網路層(Network)
         B.  實體層(Physical)
         C. 應用層 (Application)
         D. 傳輸層(Transport)。
         ANSWER:  2

E.存成UTF-8格式

   利用記事本讀入修改題庫,另存新檔成UTF-8格式。

F.匯入moodle平台

   利用moodle的[課程管理/題庫/匯入]選單,選擇Aiken格式,選擇一檔案,匯入。
   再為題庫設定階層類型的名稱,供後續出試題之用。
   
參考:
1. UltraEdit 正規式說明:
     http://www.ultraedit.com/support/tutorials_power_tips/ultraedit/regular_expressions.html
2. Moodle載入題庫及出試題說明:
     http://budamedia.blogspot.tw/2014/12/moodle.html

Disable UDP to solve frequent RDP disconnection

解決 RDP 遠端桌面經常斷線問題:「關閉 UDP 傳輸」 在使用 Windows 內建的 遠端桌面(RDP, Remote Desktop Protocol) 連線時,你是否也常遇到連線突然卡死、畫面凍結,或是頻繁跳出「連線已中...

總網頁瀏覽量