聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

七月 19, 2010
» [Scala 教學範例] 中醫學(TCM)-經絡 API

夫言人之陰陽,則外為陽,內為陰。言人身之陰陽,則背為陽,腹為陰。言人身之藏府中陰陽。則藏者為陰,府者為陽。肝心脾肺腎五藏皆為陰,膽胃大腸小腸膀胱三焦六府皆為陽。 - 黃帝內經-素問-金匱真言論篇第四

繼前篇 [Java 教學範例] Google Guava 與中醫學(TCM)-經絡 API 後, 老魚再試著用 Scala 2.8 來完成這個與中醫學(TCM)的經絡查詢器的核心 API, Scala 有著眾多的特性, 這使得除了可以擁有完整的 Java 特性與 JVM 效能外, 在撰寫程序上更有著許多先進的思維.


以 Java 為陽, 內以 Scala 為陰 ...


以這個範例來說, 為了達到該物件能成為 單例(Singleton)模式, 我們不再需要像 Java 使用靜態(Static)宣告與靜態空間的資源, Scala 能較 Java 達到真正單例模式的保證, 在前一篇中我們為了使其集合容器(Container)物件能達到 不可變性(Immutable) 以加快處理性能與 RAM, 我籍助了 Google Guava 中的不變性集合 APIs, 而在 Scala 則本身早已將這部份納為核心實作, 故不依賴任何的外部實作參考, 在本例中也使用了 函數式程式語言 的基本特性, Scala 創造了在相較同是 JVM 的 Java 所未有的眾多新特性與簡潔內容, 非常值得推篤給您學習, 或者混搭在 Java專案開發中~


深度加入老魚的 Scala 學習分享團隊與筆記本,


1
 2
 3
 4
5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package org.wisdomfish.tcm.scala

/**
* 中醫藥學-TCMES-經絡
* The meridian (simplified Chinese: 經絡;
* traditional Chinese: 經絡; pinyin: jīngluò)
* @author WisdomFish.ORG - 郭朝益(ChaoYi, Kuo), http:://www.wisdomfish.org
* @version 0.1 dev (SCALA 2.8)
* @since 2010-07-19
*/

object Meritan {

private val NOT_POINTS = 1
private val IS_KEY_CNAME = 0
private val handlefunc = (s: String) => s.split("\\s").toList
private val Meridians = Map.newBuilder[String, List[String]] += (
"LU" -> handlefunc("手太陰肺經 中府 雲門 天府 俠白 尺澤 孔最 列缺 經渠 太淵 魚際 少商"),
"LI" -> handlefunc("手陽明大腸經 商陽 二間 三間 合谷 陽溪 偏歷 溫溜 下廉 上廉 手三里 曲池 肘髎 手五里 臂臑 肩髃 巨骨 天鼎 扶突 口禾髎 迎香")
) result

def getMeridianIds: List[String] =
Meridians.keys.toList
def getMeridianCName(keyID: String) =
Meridians(keyID) view(IS_KEY_CNAME)
def getAcupuncturePointsSize(keyID: String) =
Meridians(keyID).size - NOT_POINTS
def getAcupuncturePoints(keyID: String) =
Meridians(keyID) slice(NOT_POINTS, getAcupuncturePointsSize(keyID))
def getAcupuncturePointName(keyID: String, numID: Int) =
Meridians(keyID) view(numID)
}



老魚相關文章:

  1. [Java 教學範例] Google Guava 與中醫學(TCM)-經絡 API

七月 17, 2010
» [Java 教學範例] Google Guava 與中醫學(TCM)-經絡 API

肝藏血,血捨魂, 肝氣虛則恐,實則怒。脾藏營,營舍意,脾氣虛則四肢不用,五藏不安;實則腹脹,經按不利。 心藏脈,脈捨神,心氣虛則悲;實則笑不休。肺藏氣,氣捨魄,肺氣虛則鼻塞不利少氣;實則喘喝, 胸盈仰息。腎藏精,精舍志,腎氣虛則厥;實則脹,五藏不安。必審五藏之病形,以知其氣之虛實, 謹而調之也。 - 黃帝內經-靈樞-本神論第八

近來老魚持續自習著中醫學, 為了讓自己在背近400多個"經絡"穴道有一個好工具, 逐著手開始撰寫了這個 API 以便在不久能與其它表現層技術相結合, 讓老魚在背頌同時有更好的"快快樂樂學經絡"的學習輔助工具~

這個範例完全使用 Google Guava API 來完成, 若您想了解它, 可以另外參考老魚的另一本學習筆記相關主題頁:
http://sites.google.com/site/javaenterpriseeditiongroup/se-in-depth/google-guava

程序執行結果圖:



範例的更新與完整說明連結:
http://iching.wisdomfish.org/tcm/tcmis/meridian

JAVA CODE   :中醫藥學-TCMES-經絡-Meridian
  1
  2
  3
  4
  5
  6
  7
  8
  9
10
 11
 12
 13
 14
15
 16
 17
 18
 19
20
 21
 22
 23
 24
25
 26
 27
 28
 29
30
 31
 32
 33
 34
35
 36
 37
 38
 39
40
 41
 42
 43
 44
45
 46
 47
 48
 49
50
 51
 52
 53
 54
55
 56
 57
 58
 59
60
 61
 62
 63
 64
65
 66
 67
 68
 69
70
 71
 72
 73
 74
75
 76
 77
 78
 79
80
 81
 82
 83
 84
85
 86
 87
 88
 89
90
 91
 92
 93
 94
95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
package org.wisdomfish.tcm;

import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;

// Java EE 6, JSF 2.0
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;


/**
* 中醫藥學-TCMES-經絡
* The meridian (simplified Chinese: 經絡;
* traditional Chinese: 經絡; pinyin: jīngluò)
* @author WisdomFish.ORG - 郭朝益(ChaoYi, Kuo), http:://www.wisdomfish.org
* @version 0.1 dev
* @since 2010-07-16
*
*/
@ManagedBean
@ApplicationScoped
public class Meridian {

    private final static ImmutableMap<String, ImmutableList<String>> Meridians;
    private final static int NOT_POINTS = 1;
    private final static int IS_KEY_CNAME = 0;
    private Meridian(){};
   
    static {
        Builder<String, ImmutableList<String>> init = ImmutableMap.builder();
        Meridians = init.
                put("LU", ImmutableList.copyOf(
                "手太陰肺經 中府 雲門 天府 俠白 尺澤 孔最 列缺 經渠 太淵 魚際 少商".
                split("\\s"))).
                put("LI", ImmutableList.copyOf(
                "手陽明大腸經 商陽 二間 三間 合谷 陽溪 偏歷 溫溜 下廉 上廉 手三里 曲池 肘髎 手五里 臂臑 肩髃 巨骨 天鼎 扶突 口禾髎 迎香".
                split("\\s"))).
                put("PC", ImmutableList.copyOf(
                "手厥陰心包經 天池 天泉 曲澤 隙門 間使 內關 大陵 勞宮 中沖".
                split("\\s"))).
                build();
    }
   
    /**
     * 取得經絡代碼清單
     * @return 經絡代碼清單
     */
    public static ImmutableSet<String> getMeridianIds() {
        return Meridians.keySet();
    }
   
    /**
     * 查詢指定經絡代碼之中文名稱.
     * @param keyID 經絡代碼
     * @return 經絡代碼中文名稱
     */
    public static String getMeridianName(String keyID) {
        return Meridians.get(keyID).get(IS_KEY_CNAME);
    }
  
    /**
     * 查詢指定經絡的腧穴總數值
     * @param keyID 經絡代碼
     * @return 腧穴總數數值
     */
    public static int getAcupuncturePointsSize(String keyID) {
        return Meridians.get(keyID).size() - NOT_POINTS;
    }
   
    /**
     * 取得指定經絡腧的腧穴中文名稱清單
     * @param keyID 經絡代碼
     * @return 腧穴中文名稱清單
     */
    public static ImmutableList<String> getAcupuncturePoints(String keyID) {  
        return Meridians.get(keyID).subList(NOT_POINTS, Meridians.get(keyID).size());
    }
   
    /**
     * 查詢指定經絡中特定編號的腧穴中文名稱
     * @param keyID 經絡代碼
     * @param numID 腧穴代碼
     * @return 腧穴中文名稱
     */
    public static String getAcupuncturePointName(String keyID, int numID) {
        return Meridians.get(keyID).get(numID);
    }
   
   
   
    public static void main(String[] args) {
        final String KEY_ID = "PC";
        final int NUM_ID = 5;
        long startTime = System.nanoTime()/1000000L;
//        System.out.println("經絡總清單:" + Meridians.entrySet());
        System.out.println("經絡代碼清單:" + Meridian.getMeridianIds());
        System.out.println("代碼名稱-" + KEY_ID + " = " + Meridian.getMeridianName(KEY_ID));
        System.out.println(Meridian.getMeridianName(KEY_ID) + " 腧穴總數:" +
                Meridian.getAcupuncturePointsSize(KEY_ID) + " 穴");
        System.out.println(Meridian.getMeridianName(KEY_ID) + " 腧穴清單:" +
                Meridian.getAcupuncturePoints(KEY_ID));       
        System.out.println(Meridian.getMeridianName(KEY_ID) + " 腧穴編號-" + KEY_ID + NUM_ID +
                " = " + Meridian.getAcupuncturePointName(KEY_ID, NUM_ID) + "穴");
        long endTime = System.nanoTime()/1000000L;
        long time = endTime - startTime;
        System.out.println("處理耗時:" + time + "ms");
    }
   
}





七月 6, 2010
» [製圖分享] 中醫學之十二正經絡 / 論醫德《大醫精誠》

凡大醫治病,必當安神定志,無欲無求,先發大慈惻隱之心,誓願普救含靈之苦。若有疾厄來求救者,不得問其貴賤貧富,長幼妍媸,怨親善友,華夷愚智,普同一等,皆如至親之想。亦不得瞻前顧後,自慮吉凶,護惜身命,見彼苦惱,若己有之,深心淒愴,勿避險,晝夜寒暑,飢渴疲勞,一心赴救,無作功夫形跡之心。如此可為蒼生大醫。反此則是含靈巨賊。自古名賢治病,多用生命以濟危急,雖曰賤畜貴人,至於愛命,人畜一也。損彼益己,物情同患,況於人乎?夫殺生求生,去生更遠,吾今此方,所以不用生命為藥者,良由此也。
-- 千金要方 大醫精誠篇第二 唐 孫思邈

《大醫精誠》一文出自中國唐朝 孫思邈所著之《備急千金要方》第一卷,是中醫學典籍中,論述醫德的一篇極重要文獻,為習醫者所必讀。《大醫精誠》論述了有關醫德的兩個問題:

  1. 第一是 精,亦即要求醫者要有精湛的醫術,認為醫道是「至精至微之事」,習醫之人必須「博極醫源,精勤不倦」。
  2. 第二是 誠,亦即要求醫者要有高尚的品德修養,以「見彼苦惱,若己有之」感同身受的心,策發「大慈惻隱之心」,進而發願立誓「普救含靈之苦」,且不得「自逞俊快,邀射名譽」、「恃己所長,經略財物」。
如果您對該篇全文有意學習, 請見 維基文庫-備急千金要方-大醫精誠篇第二

可能是老魚讀起了中醫學典籍, 也開始背起了許多名詞和要句選, 下面這張是老魚在邊讀典籍邊整理好的圖表, 我用它來理解中醫學談的經絡關係外, 最重要的是這張內容是老魚在本週對自已嚴格要求在記憶與背誦用的範圍, 分享給同是中醫學自習者的您:
(能理解中醫之理很重要, 但若能熟記更易用於技, 熟能生巧之道.)

(點圖放大後再收藏)


六月 29, 2010
» [分享製圖] 中國醫藥學史(TCM)

是故聖人不治己病,治未病不治己亂、治未亂,此之謂也。
夫病已成而後藥之,亂己成而後治之,譬猶渴而穿井,斗而鑄錐,不亦晚乎? 
- 黃帝內經.素問.四氣調神大論篇第二

中醫學以“整體”來辯症施治, 更強調“預防勝於治療"的先決條件,
就如同上述中醫古籍中所論述之. 大醫治國,中醫治人,下醫治病!
中國大醫旨在治未病,在疾病萌芽階段將身體調整好,不讓疾病乘虛而入。
中醫的整體觀念在於調整人與自然、人與社會、人自身機體的平衡與和諧。

近來老魚的Blog有長達二個多月沒更新, 但訪客量反上升,
在此先謝謝大家對老魚的善舉, 讓我有更多動力持續的分享學習.



老魚熱習中國先秦史與哲學, 自從近來開始潛讀"易經"後,
逐漸迷戀上了”中醫學“, 到圖書館借了多本中醫學書,
又去書店買了十多本相關中醫學習的書籍, 老魚心想在不久的未來,
應該可以結合老魚原本的資訊科技領域的技能,
除了保持分享學習心得外, 老魚會思索如何結合新科技應用,
將中醫學/易經做一個新思維的系統出來讓大家生活上使用之.

或許有人會想, 老魚就算自習著中醫學也成不了中醫師, 沒錯~這點老魚認同!
但就像我們身在資訊認證證照制度一樣, 有證照者才稱的上專家 ?
老魚沒從沒為自己的學習設限, 因為我始終相信
“只要有心, 人人都可以成為食神!!!“~呵


我的易經學習筆記

我的中醫學習筆記


在進入一門學問之前, 首重了解它的發展概要史,
這有助於您先有全盤的概念, 如先建骨架再創肉之覺也.
分享給也想學習中國醫藥學的您~

support:

一頁/jptopic

A Django site.