★★

一切法無我

這是今天看到一位可能是蕭平實信眾的奇怪觀點,在數次討論之後,忍不住把心得整理出來。
 
====================
 
【我見】真的是很難破除的邪見,先不要說親證無我這樣困難的目標,就算是理解上的無我,依然有許多人不願意接受,想盡辦法要證明一定有一個我。經文上說的明白的內容不去理解,千方百計就是想要在弦外之音找到自我的立足點。這種學習,肯定是事倍功半.甚至離正道愈來愈遠。
 
打個比喻,就像告知古人沒有雷神,打雷是自然現象。有些人可能就是不接受,還會問那會不會有雷神他爸?如果說沒有雷神他爸,對方可能又會問,那有沒有雷神的老闆?如果不想接受答案,問題永遠沒完沒了。
 
如果說世界上沒有神雷,他還會問那【世界下】有沒有神雷?【世界外】會不會有神雷?
 
不接受無我的人也是如此。如果世間有【真我】,佛陀就會直接說明,何必說【無我】,讓人去猜弦外之音呢?
 
佛陀說五蘊無我,他們就猜會不會在五蘊外有個六蘊我?說十八界無我,那會不會在十九界找到真我?這些都是戲論,沒有邊際。
 
這件事由經文可以找到完整的解釋,希望這些【夢裡尋我】千百度的人,可以放下妄心,不要再亂想了。
 
首先,經典的無我不只是五蘊無我,最大的範圍是【一切法無我】。經證如下:
《雜阿含經》卷10:「一切行無常,一切法無我,涅槃寂滅。」(CBETA, T02, no. 99, p. 66, b13-14)
重要度:
文章分類:
佛法標籤:

阿毗達摩

這頁是用來放和阿毗達摩相關的資料,目前只有二項。

阿毗達摩 心與心所

說明:

本網頁可依據指定的條件列出符合的心。
目前是選中的條件就會列出,例如在「作用」的條件中同時選取「推度、彼所緣」,則只要符合任一條件的心就會列出。

待改進:(有時間的話 ^^!)

1. 加上「剛好符合」、「包含全部選取條件」等不同的設定。
2. 提供文字輸入界面及網址直接連結方式。
3. 界面會再調整美觀及順手好用一點。(歡迎提供建議)

版本:

v1.0 2017/01/28 新年快樂版。雖然還很粗糙,因為過年了,基本功能也有了,就放出來讓大家試用看看。

下載本頁及 jQuery 即可離線執行。

重要度:
文章分類:
佛法標籤:

近日 Drupal 6 的一些雞毛蒜皮大小事

最近管理的 Drupal 6 網站遇到了一些奇怪的狀況,處理的過程中也學到一些東西,簡單記錄一下。

首先是在回應時,某些回應內容會產生奇怪的錯誤。但那些內容若是放在貼文中,就沒有問題。或是先貼個簡單的回應,然後進入編輯,改成先前會有問題的回應內容,此時也沒有問題了。總之,這情況只發生在新張貼「回應」,而且只有某些情況才會有錯誤。

重要度:
文章分類:
電腦標籤:

JavaScript 物件中成員函式呼叫成員函式

先前寫的那一篇,我已經移到底下了,實際上問題多多,後來經過幾個高手朋友的指教,再次測試之後,才知道造成錯誤的真正原因是和 jQuery 混在一起了吧。

不過我當初在測試時,是有先避開 jQuery 哩?反正我已經無法重現當初的錯誤,只好把問題怪罪給它了。

總之,目前用底下二個方法來處理物件及測試成員函式的呼叫,都沒有問題。

第一種如下。原本紅色那行應該會有問題,但現在測試一切OK。

    function obj(){
        this.x = 1;
        this.func1 = function(){
            this.x++;
            console.log("func1 : x = " + this.x);
        };
        this.func2 = function(){
            this.x++;
            console.log("func2 : x = " + this.x);
            this.func1();
        };
    }
    var myobj = new obj();
    myobj.func1();
    myobj.func2();

第二種方式是直接宣告物件。底下也是OK的。如果把全部的 this 都換成 myobj,也都沒問題。我在網路上查到有人說用 this 會出錯,換成 myobj 才可以。也許這是之前的問題,現在都解決了吧。

    var myobj = {
        x : 1,
        func1 : function(){
            this.x++;
            console.log("func1 : x = " + this.x);
        },
        func2 : function(){
            this.x++;
            console.log("func2 : x = " + this.x);
            this.func1();
        }
    }
    myobj.func1();
    myobj.func2();

不過,如果搭配 jQuery 使用,在 jQuery 的函式中,就不能直接使用,因為此時的 this 是 jQuery 找到的物件。

底下這樣用會有問題

$("xxx").each(function(){  
    this.func1();  // 這樣會有問題
});

要改成這樣才行

var self = this;  // 先把 this 存起來
$("xxx").each(function(){  
    self.func1();  // 這樣OK
});

另外學到一件事,用 var 宣告的變數會擴展到整個 function,例如:

var i=3;
for(var i=1; i<10; i++)
{
    ...
}
console.log(i);

最後的 i 可不是 3 ,而是 10,這件事真的很詭異。

Yap 告知可以用 let 來宣告變數,就可以限制在區塊中,可參考這篇「深入浅出ES6(十四):let和const」。

  -- 2017/01/19 

底下是昨天寫的,內容有問題,參考就好,留著當紀念。


聽說 JavaScript 的地雷很多,今天終於踩到,幸好爬文半天,終於找到解答。

簡單來說,就是在一個簡單的物件中,某個成員函式呼叫另一個成員函式,想不到那麼簡單直覺的動作,也會出問題。(這些術語或許不適合 JavaScript,看在很少用 JavaScript 的份上,就別計較太多了。)

我的程式原本像這樣:

function obj ()
{
  this.func1 = function(){
    ....
  };
  this.func2 = function(){
    this.func1();    // 錯誤在這裡,
  };
}

後來看到有人提出一種解答,就是把 this 換成物件的名稱,如下:

var obj = {
  func1 : function(){
    ....
  },
  func2 : function(){
    obj.func1();  // 這樣就 OK 了
  }
}

不過我把我的程式中的 this 換成 obj 也不行。

大概是因為我的 obj 是類似定義成一個類別(函式),之後還會用 var x = new obj(); 的方式去宣告。

而那個解答則是一開始就宣告物件 var obj = xxx,所以才能用 obj.func1() 來執行。

 後來又爬文找到另一個解法,就是另外用 prototype 來宣告,如下:

function obj ()
{
  this.func1 = function(){
    ....
  };
}
obj.prototype.func2 = function(){
  this.func1();    // 這樣就可以了
};

不過事情其實沒那麼簡單,因為我又用了 jQuery,所以還是有問題。

obj.prototype.func2 = function(){
  $("xxx").each(function(){  
      this.func1();    // 還是有問題
  });
};

最後才想到,應該是那個 this 已經不是 obj 物件的 this,而是 jQuery 所選到的物件了。所以又改成如下才真正沒問題了。

obj.prototype.func2 = function(){
  tmp = this;  // 先把 this 存在 tmp 中
  $("xxx").each(function(){  
      tmp.func1();    // OK了
  });
};

重要度:
文章分類:
電腦標籤:

perl 在函數中宣告 my $_

以前在學 Perl 時,知道在函數中宣告變數可以用 local 或 my ,local 表示在它的宣告的區塊中,可以在該區塊調用的子函數中繼續使用。而 my 宣告的變數就不行了。
 
不過當時有一個特殊的限制,就是針對這個特殊的變數 $_,只能宣告為 local。不過在後來的新版本中,有看到可以宣告為 my,對此我也沒特別注意,今天寫程式時,就試用了一下,結果程式有不在預期中的結果,還 debug 半天,才發現就是 my $_ 造成的。剛剛寫了個小程式測試,才大概看出它的特性。
 
程式:
$_ = "123";
test1($_);
print "$_\n\n";     # $_ = 123
 
$_ = "123";
test2($_);
print "$_\n\n";     # $_ = 123
 
$_ = "123";
test3($_);
print "$_\n\n";     # $_ = abc , 在函數中被取代了
 
sub test1
{
    local $_ = shift;       # 使用 local
    s/123/abc/;             # 預設是處理 $_
    print "in  : $_\n";     # $_ = abc , 被取代了
    print "out : $::_\n";   # $::_ = abc , $::_ 暫時被取代了
}
 
sub test2
{
    my $_ = shift;          # 使用 my
    $_ =~ s/123/abc/;       # 取代的對像是內部的 $_
    print "in  : $_\n";     # $_ = abc , 被取代了
    print "out : $::_\n";   # $::_ = 123 , $::_ 完全沒有參與
}
 
sub test3
{
    my $_ = shift;          # 使用 my
    s/123/abc/;             # 【重點】預設取代的對像是 $::_ , 也就是 $main::_
    print "in  : $_\n";     # $_ = 123 , 區域變數完全沒有被取代
    print "out : $::_\n";   # $::_ = abc , 所以 $::_ 反而被取代了
}
 
結果如下:
in  : abc
out : abc
123
 
in  : abc
out : 123
123
 
in  : 123
out : abc
abc
 
總之,重點就是這二行要特別小心
my $_ = shift;
s/123/abc;
在副程式中宣告 my $_ 之後,就不能用 s/123/abc/; 這種方式來處理,因為它預設是處理全域變數的 $_,而不是副程式中宣告的 $_,若不注意,就會有非預期的結果。
 
如果要處理,就不可以偷懶,要寫清楚變數名稱
 
my $_ = shift;
$_ =~ s/123/abc;
這樣才是針對內部宣告的 $_ 來進行取代處理。
 
重要度:
文章分類:
電腦標籤:

安裝 Python Debug for VS Code

去年(其實就是前幾天)在安裝 Perl Debug for VS Code 之後,也順便安裝 Python Debug for VS Code,但當時失敗了。因為我是安裝 Python 3.6 版,但執行 Python Debug 需要安裝 pylint 模組,安裝時它會自動安裝其他模組,不過在安裝時,因為自動載入的 lazy-object-proxy 模組大概是只有支援到 3.5 版,所以失敗了。當時雖然考慮到降回 3.5 版,不過有點懶,而且也同時在測試 Visual Studio 2015 的 Python,所以就放棄了,最後是二者都失敗了。crying

今天剛好和振洲提到此事,他建議降回 3.5 再試試,我就又提起興緻,移除 3.6 重裝 3.5,模組也都安裝成功。結果意外中在另一個網站找到有支援 3.6 版的 lazy-object-proxy 模組,於是忍不住又重裝 3.6,打算再拼一次。

Python 3.6 一切就緒,就開始安裝 pylint 模組。

重要度:
文章分類:

Win10 畫面模糊的解決方法

剛換到 Win10 時,畫面覺得有點模糊。我在 Win7 也用同樣的解析度和設定,卻沒有模糊的問題,調半天也調不好,就不理它了。

前陣子主要都在 Win7 工作,後來搬回 Win10 ,模糊的問題又困擾我了,於是又努力去找資料,終於找到一個方法,也測試成功了。

首先在設定中選擇「系統」。

image

重要度:
文章分類:
電腦標籤:

在 Win10 中安裝新倉頡輸入法

雖然在幾個月前,也就是免費升級 Windows 10 的最後期限之前,我安裝了 Win10。不過我是使用雙系統,主要的工作還是在 Win7,因為有一些較大的舊系統我不想在 Win10 也安裝,所以先在 Win7 那邊把它們漸漸完成,最近才慢慢把重心移到 Win10 來。

移過來時,最主要的不對勁就是輸入中文時,發現選字只有最後輸入的那個字才能選字,我記得以前在輸入一串文字時,前面的字都可以選啊?

仔細一看,才發現 Win10 內建的是「倉頡輸入法」,而不是「新倉頡輸入法」,所以立刻到控制台去新增,卻發現竟然沒有「新倉頡輸入法」可以選?

真不知 Win10 在幹什麼?竟然走了回頭路。只好凡事問 Google ,上網查看看有沒有什麼解決辦法。

幸好找到一些資料,就是把這個檔案下載回去,解開壓縮後,它是個純文字的 reg 檔,點二下就會自動執行安裝,它會修改登錄檔,完成後再去控制台,就可以安裝「新倉頡輸入法」了。(2021/03/27 補記:Win10 2004 及之後的版本請參考底下的補記)

試用了幾天,發現還是有一些不同。例如輸入字根「十女」,應該是出現「安」,它卻出現「七」,要選字才會看到「安」。(2021/03/27 補記:Win10 20H2 版本輸入「十女」沒有出現「七」了)

我記得「七」的字根是「十山」,試了一下,「十山」也會出現「七」,看來這個版本的輸入法是允許一個字有多種字根的拆解法。

想想這樣也不錯啦,以前可能拆錯的字,也可能會因此有機會矇對了。不過也可能造成更多需要選字的機會,看來也是有一好沒兩好。

2020/08/16 後記:

底下留言有提到 Win10 2004 版無法使用新倉頡了,感謝有人提到使用這個方法就可以了

https://heavenchou.buddhason.org/node/272#comment-12721

不過我還沒有更新至 2004,只能請有需要的人自行測試了。

2021/03/27 再次後記

這個月電腦出問題,換了新的一台,Win10 也重新安裝至 20H2 版本,果然前面的新倉頡安裝方法無效了,幸好測試留言中網友提到的方法則再次成功安裝新倉頡輸入法。

簡單來說,就是先安裝注音和倉頡,分別把這二個輸入法的一般設定中的「相容性」群組中的「使用舊版的微軟注音」開啟,讓輸入法使用舊版的接口。如此一來,再安裝上面提供的新倉頡的安裝檔,就可以成功看到新倉頡了。

底下是網友提供的出處和細節,非常感謝!

https://answers.microsoft.com/zh-hant/windows/forum/all/2020%E5%B9%B4win10-20h1/bb6bee29-9d01-405c-b3da-540296e4ae90

  1. 按 Win+I 開啟設定。
  2. 選擇「時間與語言」。
  3. 在清單中選擇「語言」。
  4. 持續按 Tab 找到「新增語言」按鈕的下一個選項,會聽到「清單」,此處列出你目前有安裝的所有語言。
  5. 選擇「中文 (繁體,台灣)」後按下 Enter,會展開其設定選項。
  6. 按 Tab 找到「選項」按鈕後按下。
  7. 按 Tab 找到「鍵盤」群組中的清單,此處是列出目前有啟用的輸入法。
  8. 選擇「微軟注音 輸入法」後按下 Enter。
  9. 按 Tab 找到「選項」按鈕後按下。
  10. 按 Tab 找到「一般」按鈕後按下。
  11. 持續按 Tab 找到「相容性」群組中的「使用舊版的微軟注音」後將它按下。
  12. 此時會跳出對話框詢問是否確定要使用舊版的微軟注音,按下「確定」。
  13. 直接關閉設定。(重覆上述動作選擇倉頡 輸入法,更改相容性後,即可使用微軟新倉頡了)
 
 
重要度:

處理 TWAMPd 的 Apache 無法啟動問題

稍早因其他程式需求,開啟了 .NET 3.5,結果後來使用 TWAMPd 時,發現 Apache Web Server 無法啟動,查詢一些資料,大多說明是 Windows 內定的 Web Server 要關閉,但我只用 Win10 內定程式,沒有特別去開啟 Web Server(Win10 還是用 IIS 嗎?),因此懷疑和 .NET 3.5 有關.

於是去查看 Windows 相關功能.

在控制台 -> 程式集 -> 程式和功能 -> 開啟或關閉 Windows 功能

image

 

重要度:

安裝程式被要求安裝 .NET 3.5 的問題

在安裝一些程式時,被要求要 .NET 3.5,但我的系統是 Win10,也有安裝更高版本的 .NET 了,想不到還會需要舊的版本.看來 .NET 的並沒有完全向前相容嘛.

寫這篇是因為當初不知道需要安裝舊版的,以為是出了什麼錯,結果找到啟用 .NET 3.5 的方法,就記錄下來了.

在控制台 -> 程式集 -> 程式和功能 -> 開啟或關閉 Windows 功能 -> 勾選「.NET Framework 3.5」,再依著要求操作即可.

image

 

重要度:
電腦標籤:

頁面

借我放一下廣告
訂閱 ★★