pretty code

2009年8月29日 星期六

詩海不存在

相傳詩海石硯台是上古時期的先天人
一揮長虹造天筆的隱居之處

在那個地方,流傳著一個傳說:
詩海不存在,神筆出硯台

意即當詩海這個地方消失了
造天筆就會再渡紅塵 ...

2009年8月28日 星期五

EasySVNLog

這個程式最早的用途是
幫助前東家的同事可以方便找出自己在 SVN 上曾經做過的修改
並整理成檔案清單方便 BSP 進版用

後來在某一次與 HW 弟兄驗證 reset 問題時
又將它做了些修改
可以決定 parse 的條件等

故其實不全是為了 SVN 用的
我後來 parse log 都是直接用它

剛剛在驗證 EasyDictionary SQL 語法的問題
為了確認單字 select 的條件
EasySVNLog 就又重出江湖啦 ....

格式化輸出的重要性

大概沒有人像我一樣用 C 去寫 parser 吧?

也不是說 C 不好用,只是有了正規表示法的加持,大部份的人都會選擇用 Perl 之類的語言來做。

我就記得我資策會的一個老師曾經分享他的經驗,用 Perl 幫某園區半導體廠 parsing  log 來分析問題。

前前家公司某位同事離職時被交接了一個工作,該程式是負責每天轉送儀器送來的圖至 Server 上。

由於是一家算大的醫院,故每天的量其實都很驚人,只有 3 台 PC 權做 Server,卻又分別接 5 ~ 6 台 Gateway 丟過來的圖,忙碌是一定的,因此常被質疑怎麼圖都沒有收到,害醫生不能打報告。

我接手後,除了改善一些效能上的問題之外,最重要的是我將原本的 log 去蕪存菁,整理出有用的資訊及格式化相關字串。

因此我可以寫一個 parser,把我需要的字串 parsing 出來,並直接寫入到 excel 裡,我只要再手動選取做成圖表即可,應該餵給 gnupilot 才對,不過我還需要篩選,excel 還是較方便。

這樣一來,當技師再質疑時,我只要連到現場把 log 抓回來,用我的工具產生報表,就可以解釋異常的原因,甚至證明程式是沒有問題的。

我不否認我會買些軟體工程的書來看,不過有些想法我覺得還是天生的,這大概就是身為程式設計師的命吧。

2009年8月27日 星期四

EasyDictionary 完成版 V2

本次修正如下:

1. 修正學習與測驗 SQL rule 顛倒的問題。
2. SQL rule 的計算由 int 改為 double(%f)。
3. 修正單字測驗時按下 ESC 次數會顯示 0 的問題。


年紀大了,寫程式有點力不從心了... XD

人一輩子寫程式的量大概是固定的吧?
這五年間我已經把 quota 都用完了 ...

2009年8月26日 星期三

風之水晶‧轉職‧網路工程師

這樣下去,我快變成網路工程師了!

這個科目對我來說還算是最輕鬆的。

加油,再撐一下。

2009年8月25日 星期二

EasyDictionary 待解 Bug

select learn_count from word where groups='Config';
Config Learn Count (7).
select count(*) from word where groups='Dictionary';
Group (Dictionary), Total Words (4)
select learn_count from word where groups='Dictionary';
Group (Dictionary), Total Learn Count (3)
Rule Rate (0).
select * from word where learn_count <= 0 and groups='Dictionary' ORDER BY Random() limit 1;
Learn Word (reclaim)

測驗 SQL 取法有 Bug ...

要去圖書館了,先記得,有空再說 ...

EasyDictionary 完成版 V1

本次修正如下:

1. 因為延用單字學習的 function,所以變成測驗也會更新學習次數,已修正。
2. 因為延用單字學習的 function,所以 rule 變成沒學習過的反而會出現在測驗,已修正。
3. 將輸入欄改成紫色,感覺比較好看。
4. 稍微調整一下 UI size。
5. 修正離開單字測驗後,視窗沒有置中的問題。

2009年8月23日 星期日

EasyDictiony 完成版

雖然 UI 不怎麼樣
但還是趕在閉關前把它寫了出來

儘管已對資訊業不存在任何幻想
但完成的那一剎那
其實還是有點興奮的
雖然只有那僅僅的幾秒鐘

開始測驗

測驗結果

電腦審計

以下內容出自 PTT, reiny﹝背景:資管系﹞

勤業眾信電腦審計面試過程

我主動應徵的~在會議室跟兩位主管進行面談
問了應徵動機? 對這行的了解?
也特別針對成績單問了 UNIX 學校學了什麼?
XML的課程內容跟業界應用有哪些?
結束後寫好多份考卷(英文+邏輯測驗(or性向測驗忘了)+電腦專業科目)
簡單描述一下電腦專業科目內容~包含了UNIX跟WINDOS的指令跟權限設定介面問題
還有資訊環境安全與風險評估的簡答題~問題很多 寫不完是正常 就盡量寫



XML課程?
還是指 UML ?

2009年8月22日 星期六

LaTex 真好玩

雖然現在並沒有要寫論文
不過玩玩 LaTex 還蠻有趣的

1. 把台大 FTP 站的 cwtex33 下的東西全抓回來
2. install cwtex33(已包含相關軟體,editor等的不用裝)
3. install Texmaker(LaTex editor)
4. 中文還搞不定 ... XD











仁者無敵

剛剛轉電視看到重撥的京奧跆拳道比賽項目
(最近生活真棒,已經看完了好幾本書,可惜只剩幾天了)

跆拳道素有腳的藝術師之稱
踢的技法真的是很華麗
除了迴旋踢外
個人感覺等你轉身回來
一個正拳就把你打趴了
也許我也是說得一嘴好功夫吧 ... XD

受到黃飛鴻電影的影響
我對洪拳還蠻有興趣的

相傳洪拳是福建茶商洪熙官所創的一門武術
工字伏虎拳則是洪拳的代表套路,主要是紮橋手、橋馬與氣息內勁
其中橋手用法,講求橋來橋上過、無橋自造橋

我記得古龍先生在圓月彎刀一書中提到
長於心智者必拙於體力
所以一般讀書的人
體質上多半文弱一點

只有練武的人不然
他們的武功進展是配合著心智並進的
武學登入一個新的境界
體能有了超異的成就
智慧也就一定跟著圓熟

可惜以前沒有早看到這本書
多走了冤枉路

君 子 所 以 異 於 人 者 , 以 其 存 心 也 . 君 子 以 仁 存 心 , 以 禮 存 心 . 仁 者 愛 人 , 有 禮 者 敬 人 . 愛 人 者 人 恆 愛 之 , 敬 人 者 人 恆 敬 之 .

2009年8月21日 星期五

作手的劇本

時間背景:2008/12
緣由:在金融海嘯中受創甚多

股民都是健忘的
而且剛歷經一波金融海嘯
就像牌桌上的賭徒一樣
想把失去的再贏回來

於是從 2009/03 開始
創造多頭氛圍
從平均交易量 600 多億
到 2009/08 的 1500 億

等到滿足了作手的獲利
便開始再來一次熊市
這樣還可以兩邊操作

以上純屬不負責任講座 ... XD

2009年8月20日 星期四

Dirty Code

程式如果跟 SQL 語法有關
Code 看起來就會很髒

我到現在還沒想到比較漂亮的做法

不知是不是要從 pattern 著手?

放空的禁忌

不是每支股票都可以拿來放空 ...

但這裡要探討的不是技術面的東西
而是心理層次方面的

放空最忌諱看某支股票不爽
所以放空時心情應該要處在一個很平靜的狀態
以客觀的心理來決定要不要放空該股票

以我個人經驗來說
雖然我到目前為止總投資損益還是正的
但我放空的操作累積起來就賠了快兩萬
而且出手幾乎都是賠
對照我的淨利益
其實一來一往中
我少賺了很多錢

在不正確的心態操作下
只會導致自我滅亡的結果

感謝王力群老師的文章讓我領悟了這個道理 ...

抽樣如何抽,樣本知多少?

以下內容出自網路!

信賴敘述(confidence statement)包含兩部分:誤差界限(margin of error)及信賴水準(level of confidence)
● 誤差界限告訴我們,樣本統計量離母體參數多遠。
● 信賴水準告訴我們,所有可能樣本中有多少百分比滿足這樣的誤差界限。
● 從一個隨機樣本所得到的統計量的變異性,並不受母體大小的影響,只要母體至少比樣本大 100 倍即可。
樣本統計量的變異性是由樣本的大小決定,而不是由母體的大小決定
● 信賴敘述的結論永遠是針對母體而不是針對樣本。
報告誤差界限時用 95% 的信賴水準是很普遍的
● 想在相同的信賴水準下要求較小的誤差界限嗎?取個大一點的樣本就成了。

統計裡面的一個基本動作:用樣本的事實,當做母體真實訊息的估計
● 參數(parameter)是描述母體的數字。參數是一個固定的數字,但是我們實際上無法知道參數的值。
● 統計量(statistic)是描述樣本的數字。一旦取了樣本,統計量的值就知道了。但是換個不同的樣本,統計量的值就可能改變。
● 我們常用統計量來估計未知的參數。
● 偏差(bias)是當我們取很多樣本時,統計量一直朝向同一個方向偏離母體參數值。
● 變異性(variability)描述的是,當我們取很多樣本時,統計量的值會散開到什麼程度。變異性大,就代表不同樣本的結果可能差別很大。
一個好的抽樣方法,應該要有小偏差以及小變異性
● 減低偏差:利用隨機抽樣即可。
● 減低變異性:用大一點的樣本即可。

2009年8月19日 星期三

會計皇‧統計神

這是我大二下學期時的綽號
雖然是我自稱的
但也表示了我對這些科目的自信心

最近在看一本統計的書
雖然價錢還不到 200
但是把一些理論的東西解釋得很清楚
讓我不禁懷疑
唸大學的意義何在?

當然那是指一般人
如果是用功讀書的學生
雖然他們只是讀死書
但我覺得多少還是有意義吧

台灣的僵化考試制度真的很糟糕
只要背多分就可以考上好學校
想當初我的三民主義和歷史如果拿到正常人的分數
至少也能報到前三名的大學

不過即使在開放的外國
愛因斯坦小時候也是被老師當作白癡來看
我想對台灣也就不要太苛刻了

還好脫離學生生活後
出了社會賺了錢
自己可以選擇自己想要讀的書
不再受限於填鴨式的教育

想想我比那些死讀書的人幸運多了
至少沒有失去閱讀的樂趣


終於來到這篇的正點了
年紀大了特別會碎碎唸
(其實是在幻想有沒有機會出書啦 ... XD)

以下內容出自﹝你不能不懂的統計常識﹞

01. 隨機選擇的好處是客觀,因為經常在一起的人其意見會互相影響。
02. 估計值的型態是可預知的。
03. 把隨機選取方式可能得到的平均分數在平均起來,必定等於全部樣本的平均分數。
04. 把分數平均之後,這些平均數的分散程度,必定小於原本個別分數的分散程度,這叫做集中化
05. 大部份估計值都距離真正值不遠,但前提是隨機選擇要夠客觀樣本數要夠多
06. 負責任的民調結果,都不應該只報導百分比這一個數字,還要加上信心水準和抽樣誤差。
07. 假設信心水準是 95%,最有可能的結果是落在該區間,即使不是,其誤差也不會相去太遠。
08. 一般民調的樣本數約一千人左右(95%, 3%)。
09. 信賴區間重疊,嚴格來說只能算平手。
10. 95%的信心水準,誤差率 1.5%,最少樣本數約為四千人
11. 99%的信心水準,誤差率 1.5%,最少樣本數約為七千三百多人
12. 用電話號碼隨機抽樣,因為可行性高,所以是最多民調使用的方式。
13. 專業的民調單位,能有較多方法,把抽樣影響結果準確性的因素盡量消除。


為了股票程式而重拾統計知識
目前看起來好像在繞遠路
但我認為這才是正確的學習方式
希望時間能夠為我證明 ...

扛壩子知識篇

感謝 HW 扛壩子的熱情指導,雖然有些我還似懂非懂,
但我會努力從歐姆定律中去漸漸了解電子的世界。


trickle -> fast -> topoff(pulse)
是 Qualcomm 的說法,但這些名詞不是標準用語。

不過基本上來說
只差在用語的差異
充電曲線的特性是不會變的

但是充電曲線是非線性的
(網路上搜尋一下有很多中文論文可以看)


電路原本就是閉電路,正極原本就會接到負極,
但正負極相接短路,是因為當時電阻變小,流經的電流變大,才會損害零件。


電子元件過熱造成的熱
從電路圖著手比從機構上著手
可以更有效的解決散熱問題

2009年8月17日 星期一

印度九九乘法表

適用範圍:

兩位數 x 兩位數
十位數的數字必須一致
十位數 > 3 其實就不好心算了

BMP HEADER


2009年8月16日 星期日

2009/08/14 平盤以下可放空個股

0050 - 台灣50
0051 - 中100
0052 - FB科技
0053 - 寶電子
0054 - 台商50
0055 - 寶金融
0056 - 高股息
0057 - FB摩台
0058 - FB發達
0059 - FB金融
0060 - 新台灣
0080 - 恒中國
0081 - 恒香港
1101 - 台泥
1102 - 亞泥
1201 - 味全
1210 - 大成
1216 - 統一
1301 - 台塑
1303 - 南亞
1314 - 中石化
1326 - 台化
1402 - 遠紡
1434 - 福懋
1440 - 南紡
1503 - 士電
1504 - 東元
1605 - 華新
1704 - 榮化
1710 - 東聯
1717 - 長興
1722 - 台肥
1723 - 中碳
1802 - 台玻
1907 - 永豐餘
2002 - 中鋼
2006 - 東鋼
2014 - 中鴻
2015 - 豐興
2023 - 燁輝
2101 - 南港
2103 - 台橡
2105 - 正新
2106 - 建大
2201 - 裕隆
2204 - 中華
2208 - 台船
2301 - 光寶科
2303 - 聯電
2308 - 台達電
2311 - 日月光
2315 - 神達
2317 - 鴻海
2323 - 中環
2324 - 仁寶
2325 - 矽品
2328 - 廣宇
2330 - 台積電
2332 - 友訊
2337 - 旺宏
2344 - 華邦電
2347 - 聯強
2349 - 錸德
2352 - 佳世達
2353 - 宏碁
2354 - 鴻準
2356 - 英業達
2357 - 華碩
2362 - 藍天
2371 - 大同
2377 - 微星
2379 - 瑞昱
2382 - 廣達
2384 - 勝華
2385 - 群光
2392 - 正崴
2393 - 億光
2395 - 研華
2409 - 友達
2412 - 中華電
2441 - 超豐
2448 - 晶電
2451 - 創見
2454 - 聯發科
2458 - 義隆
2474 - 可成
2475 - 華映
2485 - 兆赫
2498 - 宏達電
2501 - 國建
2504 - 國產
2542 - 興富發
2548 - 華固
2603 - 長榮
2605 - 新興
2606 - 裕民
2607 - 榮運
2609 - 陽明
2610 - 華航
2612 - 中航
2615 - 萬海
2617 - 台航
2618 - 長榮航
2704 - 國賓
2707 - 晶華
2801 - 彰銀
2823 - 中壽
2834 - 臺企銀
2854 - 寶來證
2855 - 統一證
2856 - 元富證
2880 - 華南金
2881 - 富邦金
2882 - 國泰金
2883 - 開發金
2884 - 玉山金
2885 - 元大金
2886 - 兆豐金
2887 - 台新金
2888 - 新光金
2889 - 國票金
2890 - 永豐金
2891 - 中信金
2892 - 第一金
2903 - 遠百
2912 - 統一超
2915 - 潤泰全
3008 - 大立光
3009 - 奇美電
3034 - 聯詠
3035 - 智原
3037 - 欣興
3044 - 健鼎
3045 - 台灣大
3189 - 景碩
3231 - 緯創
3367 - 英華達
3376 - 新日興
3443 - 創意
3474 - 華亞科
3481 - 群創
3622 - 洋華
3702 - 大聯大
4904 - 遠傳
4906 - 正文
5203 - 訊連
5522 - 遠雄
5608 - 四維航
5854 - 合庫
6005 - 群益證
6116 - 彩晶
6239 - 力成
6286 - 立錡
6505 - 台塑化
8008 - 建興電
8046 - 南電
8078 - 華寶
9904 - 寶成
9907 - 統一實
9917 - 中保
9921 - 巨大
9933 - 中鼎
9945 - 潤泰新

向 OpenSource 致敬

剛剛在 Jserv's blog 看到
0xlab 釋出 0xdroid -- Android distribution

我只能想到一句話,敬禮!

MSCI - Taiwan 2009/08/14

頭部?

又是一個頭部的開始?
算了,不預設立場
這不是機械派要了解的
我只要跟著訊號走就好了 ...

EasyStockData

真煩
正準備下載這一年的股市資料
結果大三元又改版了

只好拿出我的工具 EasyStockData
如果需要更早年份的資料
要從凌群網站中去 parse
http://www.dbmaker.com.tw/stock/



最近大盤資料 K 線圖:

基本電學原理 2

電流流過的路徑就稱為電路,且為閉鎖形式(閉電路)

電路的組成:
電壓、電流、電阻

負責將電流流動產生的電能轉變為光能或熱能,稱為負載。因為它有妨礙電流流通的性質,故也稱為電阻或阻抗。

直流電 - 流向和流量大小固定
交流電 - 電流的方向時常在改變

歐姆定率:
I = V/R
電流 I 與電壓 V 成正比,與電阻 R 成反比。

串聯 - 電流以同樣的大小在流動。
並聯 - 電流會變兩倍。

串聯 - 總電阻為各電阻的相加。
並聯 - 1/各電阻的倒數和。

家電用品和斷路器是以並聯接續的。(因此電壓都為 110 V)

CPU IDLE

X86:
hlt

ARM:
mov r0, #0
mcr p15, 0, r0, c7, c0, 4

參考資料:
http://orzlab.blogspot.com/2007/07/slc-ecc-correction-in-s3c2440.html

人生如夢

人生也許只是一場夢
但在夢中的人生亦應有著夢想

倒數計時中 ... 2

2009年8月15日 星期六

VR GetValue

if(sVR == "AE" || sVR == "CS" || sVR == "LO" ||
   sVR == "LT" || sVR == "PN" || sVR == "SH" ||
   sVR == "ST" || sVR == "UI")
{
  InsertString(iTag, sValue);
}
else if(sVR == "IS" || sVR == "SL" || sVR == "UL")
{
  InsertLong(iTag ,StrToInt(sValue));
}
else if(sVR == "DA")
{
  InsertDate(iTag, sValue);
}
else if(sVR == "TM")
{
  InsertTime(iTag, sValue);
}
else if(sVR == "AS")
{
  InsertAge(iTag, StrToFloat(sValue));
}
else if(sVR == "DS")
{
  InsertDouble(iTag, StrToFloat(sValue));
}
else if(sVR == "SS" || sVR == "US")
{
  InsertShort(iTag, StrToFloat(sValue));
}
 

國內醫療資訊系統相關廠商代表

* 台灣英飛特股份有限公司。
* 奇菱科技股份有限公司。
* 台灣電腦服務股份有限公司。
* 鉅仁科技股份有限公司。
* 台灣愛克發吉華股份有限公司。
* 台灣富士通股份有限公司。
* 奇異亞洲醫療設備股份有限公司。
* 商之器科技股份有限公司。

HIS

醫療院所的核心系統-醫療資訊系統(HIS)

劉麗惠/台北〈企業IT〉

相較於其他行業,醫院資訊系統的獨特性自成一格,醫院所採用的資訊系統,並非一般行業使用的企業資源規劃(Enterprise Resource Planning;ERP)、客戶關係管理(Customer Relationship Management;CRM),而是所謂的醫療資訊系統(Healthcare Information System;HIS)。


然而,HIS包含了哪些層面的應用系統,根據行政院衛生署資訊中心所公告的醫療資訊系統規範2.0,將HIS區分為3大部分,分別為「醫療相關資訊系統」、「行政管理相關資訊系統」及「基礎建設與醫院相關系統」。

醫療相關資訊系統旗下子系統包括「門診系統」、「入院出院轉診系統」、「醫囑系統」、「護理系統」、「檢驗系統」、「影像與放射資訊系統」、「藥品與衛材系統」、「手術與麻醉系統」、「重症照護系統」、「營養系統」以及「電子病理管理系統」。

行政管理相關資訊系統下面的子系統則有「健康保險系統」、「財務與行政管理系統」、「決策支援系統」、「醫院顧問關係管理系統」及「高階主管資訊系統」。

基礎建設與醫院相關系統則區分為「訊息、編碼與軟體開發標準」、「資訊安全」、「病人安全系統」、「公共衛生通報與監測系統」、「社區醫療資訊系統」、「長期照護系統」、「緊急醫療危機應變系統」、「行動無線運算平台資訊系統」以及「參考資訊架構」。

Private Tag

4109,0010=XX識別字串 (VR = LO)
0010代表我們用到的後面四碼(element number)都是10開頭

Private Creator Data Elements numbered (gggg,0010-00FF) (gggg is odd) shall be used to reserve a block of Elements with Group Number gggg for use by an individual implementor.

The implementor shall insert an identification code in the first unused (unassigned) Element in this series to reserve a block of Private Elements. The VR of the private identification code shall be LO (Long String) and the VM shall be equal to 1.


4109,1002=資料1
4109,1004=資料2
4109,1006=資料3
4109,1008=資料4
4109,100A=資料5
4109,100C=資料6
4109,100E=資料7
4109,1010=資料8
4109,1012=資料9
4109,1014=資料10
4109,1016=資料11
4109,1018=資料12
4109,101A=資料13
4109,101C=資料14

Private Data Elements have an odd Group Number that is not (0001,eeee),(0003,eeee), (0005,eeee), (0007,eeee), or (FFFF, eeee). Private Data Elements are discussed further in Section 7.8 (PS 3.5 of the DICOM Standard).

Transfer Syntax

Implicit VR Little Endian 1.2.840.10008.1.2
explicit VR Little Endian 1.2.840.10008.1.2.1
explicit VR Big Endian 1.2.840.10008.1.2.2

DICOM FILE META INFORMATION

1. 128 byte File Preamble(0x00, or Application defined)
2. 4 byte DICOM prefix("DICM")
3. DICOM Meta Elements with Tags and Lengths(0002 Group)

The 0002 Group shall be encoded using the explicit VR Little Endian Transfer
Syntax(UID=1.2.840.10008.1.2.1)

Image Plane Module Attributes(影像平面屬性)

Pixel Spacing(0028,0030)
記錄兩個十進位的值,標示影像每一個圖素中心之間的物理距離,
第一個數值為一列中相鄰圖素中心之距離,第二個數值為一行中相
鄰圖素中心之距離,由此可得影像在真實空間(單位為公釐)的大小。

Image Orientation(0020,0037)
記錄相對於病人的第一列及第一行的方向餘旋。

Image Position(0020,0032)
錄影像左上角的空間影像位置(單位為公釐),空間方向是依病人方向定義的
(x 軸向左為正,y 軸向後為正,z 軸向上為正)。

Slice Thickness(0018,0050)
記錄影像厚度(單位為公釐)。

Image Pixel Module(影像圖素模組)

Sample Per Pixel(0028,0002)
代表每一個像素的Byte,RGB=3、CMYK=4、Gray=1。

Photometric Interpretation(0028,0004)
圖像的色彩空間:
MONOCHROME1 - 灰階,像素最小值顯示為白色。
MONOCHROME2 - 灰階,像素最小值顯示為黑色。
RGB - RGB彩色圖案。
HSV - HSV彩色圖案。
PALLETE COLOR - 使用調色盤的彩色圖案。
ARGB
CMYK
YBR-FULL

Planar Configuration(0028,0006)
彩色圖案的像素數據排列順序:
0000 - R1、G1、B1、R2、G2、B2。
0001 - R1、R2、G1、G2、B1、B2。

Number of Frames(0028,0008)
Multi-Frame的影像的Frmae數。

Rows(0028,0010)
圖案的高,以像素為單位。

Columns(0028,0011)
圖案的寬,以像素為單位。

Bits Allocated(0028,0100)
The size of the Pixel Cell。

Bits Stored(0028,0101)
Total number of these allocated bits that will be used to represent a Pixel Sample Value, shall never be larger than Bits Allocated。

High Bit(0028,0102)
Where the high order bit of the Bits Stored is to be placed with respect to the Bits Allocated。

Pixel Representation(0028,0103)
0表示圖素值為正整數,1表示圖素值為補數。

以上四個屬性描述了像素單元的存儲結構。


Pixel Data(7FE0,0010)
像素數據。

Retired Data Elements

PS 3.6 標示 RET的 Tag就是Retired Data Elements.

SQ and Items

Item (FFFE,E000)
Item Delimitation Item (FFFE,E00D)
Sequence Delimitation Item (FFFE,E0DD)

以上3個都沒有VR(Implicit VR),不受Transfer Syntax規範。
除了Group Number and Element Number,
如果是little endian,則Item會等於(FEFF,00E0).

明確長度(以Big Endian為例)
(FFFE,E000) (0x00000004) Value Length 直接標明後面Value的實際長度。
沒有Value,Length就是(0x00000000).

不定長度(以Big Endian為例)
(FFFE,E000) (0xFFFFFFFF) Value Length = 0xFFFFFFFF。
結尾需有Item Delimitation Item.
(FFFE,E00D) (0x00000000) Value Length = 0x00000000。(標示結尾用,故不會有Value)

SQ跟Item很像
有明確長度Value Length就標示長度
不定長度結尾需有Sequence Delimitation Item.
其Value Length = 0x00000000。(標示結尾用,故不會有Value)

Attribute's Data Element Type

mandatory 強制的。
conditional 有條件的。
user option 選擇性。

1 必備,不允許空值即長度不能為0。
1C 符合條件一定要有。
2 必備,允許空值,所以長度可以為0。
2C 符合條件一定要有。
3 選擇性。

Byte ordering

VRs constructed of a strign of characters of 8-bit single byte codes are really constructed of a string of individual bytes, and are therefore not affected by byte ordering.

The VRs that are not a string of characters and consist of multiple bytes are:

2-byte US,SS,OW adn each component of AT
4-byte OF,UL,SL and FL
8-byte FD

VR Length、Value Length

explicit VR

OB、OW、OF、SQ、UN、UT,VR為4個byte,後2個byte為0x0000,Value Length為4個byte.其他VR為2個byte,Value Length也為2個Byte.

implicit VR

無VR,Value Length為4個byte.

故簡單來說有VR,VR幾個byte,Value Length便幾個byte. 無VR一律4個byte.

補充:
explicit VR下,OB、OW、OF、SQ、UN允許不定長度,但需要用Sequence Delimitation(FFFF,E0DD)來判斷結尾,此時Value Length為0xFFFFFFFF。

implicit VR下,可以允許不定長度,規則同上。

Data Elements

xxxx,yyyy

xxxx Group Number
yyyy Element Number

Standard Data Elements have an even Group Number that is not (0000,eeee), (0002,eeee), (0004,eeee), or (0006,eeee).

Note: Usage of these groups is reserved for DIMSE Commands(see PS 3.7 of the DICOM Standard) and DICOM File Formats.

Private Data Elements have an odd Group Number that is not (0001,eeee), (0003,eeee), (0005,eeee), (0007,eeee), or (FFFF, eeee). Private Data Elements are discussed further in Section 7.8 (PS 3.5 of the DICOM Standard).

VR Padding

Values with a VR of UI shall be padded with a single trailing NULL (00H) character when necessary to achieve even length. Values with a VR of OB shall be padded with a single trailing NULL byte value (00H) when necessary to achieve even length.

(Dicom Tag的值都必須是偶數,所以除了UI及OB的VR外,其他都補空白0x20)

12-Lead ECG IOD Modules(PS 3.3-2007 Page 172 ~ 172、812 ~ 818)

SOP class UID
1.2.840.10008.5.1.4.1.1.9.1.1

Modality(0008,0060)
Shall be ECG.

Waveform Sequence(5400,0100)
Items shall be between 1 and 5, inclusive.
(最多5個Item)

Number of Waveform Channels(003A,0005)
In each Waveform Sequence Item shall be between 1 and 13, inclusive.

The total number of channels encoded across all Items shall not exceed 13.
(如果有5個Item,5個Item加起來的Channel不能超過13個)

Number of Waveform Samples(003A,0010)
In each Waveform Sequence Item Shall be less than or equal to 16384.
(1個Channel的Samples最多有16384個)

Sampling Frequency(003A,001A)
In each Waveform Sequence Item shall be between 200 and 1000, inclusive.
(Frequency in Hz,意即每秒幾個取樣值)

16384 / 1000 = 16.384 即一個Item的呈現最多不會超過 16.384 Sec.
16384 / 200 = 81.920 即一個Item的呈現最多不會超過 81.920 Sec.

this allows over 16 seconds per channel at the maximum sampling frequency;
if longer recordings are required, the General ECG IOD may be used.

Waveform Sample Interpretation(5400,1006)
In each Waveform Sequence Item shall be SS(signed short)

Waveform Bits Allocated(5400,1004)
Each Sample's Bits
(需配合54001006來看)

Channel Definition Sequence(003A,0200)
003A0005有幾個Channel,此Sequence就會有幾個Item.

Channel Sensitivity(003A,0210)
Nominal numeric value of unit quantity of sample.

Channel Sensitivity Correction Factor(003A,0212)
Multiplier to be applied to encoded sample values to match units
specified in Channel Sensitivity(003A,0210). Required if Channel
Sensitivity is present.

Something about Dicom Tags

#Study ID(該次檢查的編號)
00200010=001
(請統一填001即可)

#Study UID(該次檢查的唯一識別ID)
0020000d=1.2.840.xxxxxx(機構代號)...

#Series Number(該組影像的編號)
00200011=1
(該次檢查有好幾組的話, 請從1開始編流水號即可)

#Series UID(該組影像的唯一識別ID)
0020000e=1.2.840.xxxxxx(機構代號)...

#Instance Number(影像編號)
00200013=1
(該組有好幾張影像的的話, 請從1開始編流水號即可)

#Instance UID
00080018=1.2.840.xxxxxx(機構代號)...

Ex:
Study UID = 1.2.840.xxxxxx(機構代號).部門編號.產品編號.儀器編號.時間
Series UID = Study UID + Series Number
Instance UID = Series UID + Instance Number

只要UID不會衝突即可...

相關資料:DICOM Fundamentals.ppt P73 ~ P75
申請機構代號:
http://www.dclunie.com/medical-image-faq/html/part8.html#UIDRegistration

#Study Date(檢查日期)
00080020=03/28/2007

#Series Date(該組影像產生日期)
00080021=03/28/2007

#Image Date(影像日期)
00080023=03/28/2007

#Study Time(檢查時間)
00080030=09:44:30.703

#Series Time(該組影像產生時間)
00080031=09:44:30.703

#Image Time(影像時間)
00080033=09:44:30.703

Attribute Matching(PS 3.4-2007 Page 41)

The following types of matching may be performed on Key Attributes
in the Query/Retrieve Service Class:

— Single Value Matching
— List of UID Matching
— Universal Matching
— Wild Card Matching
— Range Matching
— Sequence Matching

Matching requires special characters ( i.e. “*”,”?”,”-”, and “\”)
character repertoire for the VR of the Key Attributes.
Notes: 1.For example, the “-“ character is not valid for the DA, DT
and TM Vrs but is used for range matching.

The total length of the Key Attribute may exceed the length as
specified in the VR in PS 3.5. The Value Multiplicity (VM) may
be larger than the VM specified in PS 3.6 for the Key Attribute,
as defined for particular Matching Type.

難怪CFind or WorkList查詢時,明明是DA的VR,卻填上"20070101-20070103",又不受VR的
長度限制,這Dicom果然還真複雜。

補充一下Range Matching:

In the absence of extended negotiation, if the Attribute is a date, then:
a) A string of the form “ - ”, where is less or
equal to , shall match all occurrences of dates which fall
between and inclusive.
b) A string of the form “- ” shall match all occurrences of
dates prior to and including .
c) A string of the form “ -“ shall match all occurrences of
and subsequent dates.

In the absence of extended negotiation, if the Attribute is a time, then:
a) A string of the form “ - ”, where is less or
equal to , shall match all occurrences of times which fall
between and inclusive.
b) A string of the form “- ” shall match all occurrences of
times prior to and including .
c) A string of the form “ -“ shall match all occurrences of
and subsequent times.

If the Attribute is a datetime, then:
a) A string of the form “ - ”, where
is less or equal to , shall match all moments in time
which fall between and inclusive.
b) A string of the form “- ” shall match all moments in
time prior to and including .
c) A string of the form “ -“ shall match all moments in
time subsequent to and including .
d) The offset from Universal Coordinated Time, if present in the
Value of the Attribute, shall be taken into account for the
purposes of the match.

If extended negotiation of combined datetime matching is successful,
then a pair of Attributes that are a date and a time, both of which
specify the same form of range matching, shall have the concatenated
string values of each range matching component matched as if they were
a single datetime Attribute.

Note: For example, a Study Date of “20060705-20060707” and a Study Time
of “1000-1800” will match the time period of July 5, 10am until July 7,
6pm, rather than the three time periods of 10am until 6pm on each of
July 5, July 6 and July 7, as would be the case without extended
negotiation.

Range matching is not defined for types of Attributes other than
dates and times.

charger

除了 flash、usb之外
charger 大概是我會有興趣的一個 driver 吧


Trickle charging:
It allows depleted battery voltage to be raised to a level sufficient to begin fast charging.

Trickle -> Fast -> Topoff(Pulse)

chg_wall_valid_isr 觸發後才會去偵側 chg_wall_invalid_isr
反之亦然

但是在進這兩個 isr 前會先進 chg_charger_isr


Qualcomm 的 code 在某些地方被我嫌到體無完膚
但比起 Marvel 的我看還是好太多了


在跟 HW 幾個 扛壩子 的討論中
其實也知道了不少的 HW 相關知識

至少我現在就知道
我新買的手機用到過度放電
插上旅充沒有反映
要等約 10 來秒才會顯示動畫
這是因為要讓 charger 的充電衝破 trickle 的狀態
而不是像網路上所説的是 BUG
只是不知道這是適用我們平台還是一以貫之的原理?
最後一天上班去請教 HW 弟兄好了

如果推論屬實
表示我的手機也是用軟體充電囉?

想想也對
快兩萬塊的手機都是了
你還想期望不到六千的機子
用 charger ic 嗎?

2009年8月14日 星期五

基本電學原理 1

電壓指的是使電流動的壓力
電流指的是電線中每秒流動的電量

電線中的電流容許值是固定的(P=IV)
因此使用電壓越高,電線越細

相對於某基準點的電壓稱為電位
電會由電位高處流向電位低處
電壓越大,電位差越大,使電流動的壓力就越大

TERA
GIGA
MEGA
KILO(10的3次方)
MILI(10的-3次方)
MICRO
NANO
PICO

生活小常識:

W=IV

1.假設洗衣機最大標示1500W(一千五百瓦),因為是110V,所以由W=IV得知,這台洗衣機最大電流為1500=I*110,I=13.64A。

2.假使您洗衣機插座上標示125V20A,那這個插頭是OK的。

3.一般家庭電線應該都是用2mm的,從電工法規上得知:
( 電線截面積1.6mm平方其安全電流為10A120V )
( 電線截面積2.0mm平方其安全電流為15A120V )

物質的組成

所有的物質都是由原子這種微小粒子所組成

原子的中心為原子核
外圍則環繞著電子

原子核由具正電的質子與中子所構成
而電子則帶有負電

通常原子的質子數與電子數是相等的
因此它是中性

2009年8月12日 星期三

暗黑科技業

最近在 PTT 看了一系列 [討論] 製程和設備 的文章
果然跟我的推論一樣
現在只不過被證實了

好可怕呀
地球是很危險的
快回火星去吧 ... XD



嘉句名言:(以下版權屬於原 PO 所有)

1.當週遭的人都是努力解決事情或問題,更加努力確實可以增加你的績效;只是當一切是相反,努力解決事情只會引來更多的事情時,你是否還有熱情去解?

問題的真相或許只有一個,但去解決它,有時反而像是打開潘朵拉的盒子,會引來更多問題的。

台灣的環境不適合那種超級突出的人,除了你自己是老闆。

2.科技業:卸責是 good,工作是別人的

3.能做多少就多少,對得起你領的小朋友就好了。

4.會吵的人就是有糖吃....有看過哪一種生物不叫就能爽的嗎?我想,如果你自己都不替你自己發言,應該不會有人替你發言吧?有時會沉默,不是因為不想吵,而是知道吵了也沒用,累了~~~~~

5.解開問題的真相後,你就沒事作了;但是去解錯誤,會有更多事可以作....(人只會眼紅別人沒事作)

所以不要去解決事情的真相,而是用其它錯誤去搪塞真相,這才是裝忙的最高境界。(永遠都在作事,永遠都有 Action,永遠都有 plan to do,永遠都解不掉問題)

2009年8月11日 星期二

EasyTerminal

這大概是第二次接 PTT CodeJob 的 case 被放鳥了吧
為了這次的 case
我把之前寫的刷卡機銀行主機端授權回應程式
把有關 RS232 的部份抽取出來
準備給案主接儀器 demo 用
這下我看是不需要了(苦笑 ...)

BCB 真是個好物
那時候剛從資策會出來
對 message queue 的機制似懂非懂的(資策會是用QT)
買了一本書來玩玩
就寫出這樣的程式
不但能收 UART 資料
還是 Thread 架構不會影響 UI 流暢

難怪周伯通會說
白駝山的內功在前 20 年會比全真教強
20 年後全真教的內功進展才會超過白駝山

也許我走的是應用面的
所以白駝山的心法也沒有什麼不好
當然可以的話
還是要循正統的全真教心法

RS232 的速度 + PC 的運算能力
其實來得及把收到的資料再做些處理
以後就不會看訊息看到要吐了 ... XD

2009年8月9日 星期日

EasyPMT 前置工作

下面只是之前使用 file 當 db 的想法
如果要使用 SQLite
需要重新考量一番

SmartMoney UltraMoney

1.Account.db(記錄會計科目資訊)
a.類型(A,L,Q,R,E)
b.順序(會計科目設定畫面之顯示順序)
c.編號(1000,2000,3000,4000,5000 以此做分類帳科目的依據)
d.名稱(真正的名稱)
e.母科目(沒有為0...有則為母科目的編號)
f.層級(哪一層的科目...1(Root)...2(Sub)...應該為母科目加1)
g.預算(以月為單位)

原則上可以有無限層的子科目...但希望最好不要
/*
第一層科目假設叫 "食"
第二層就叫    "食.早餐"
第三層就叫 "食.早餐.美而美"
其他以此類推..總之在不超過999個下..要幾層就給他幾層
*/

.db的第一個位移量會記錄各類型科目的最後一個索引...以加速新增科目

//Account科目索引
struct SAccountIndex
{
int iAssetIndex;
int iLiabilityIndex;
int iRevenueIndex;
int iExpenseIndex;
//補齊用
char szTmp[112];

};

#define NAMEMAX 100
struct SAccount
{
//類型(A,L,Q,R,E)
char chType;
//順序(會計科目設定畫面之顯示順序)
int iOrder;
//編號(1000,2000,3000,4000,5000 以此做分類帳科目的依據)
int iNumber;
//名稱(真正的名稱)
char szName[NAMEMAX+1];
//母科目(沒有為0...有則為母科目的編號)
int iParent;
//層級(哪一層的科目...1(Root)...2(Sub)...應該為母科目加1)
int iLayer;
//預算
int iBudget;
};

2.PMT Account

1-Cash
Bank-台新
Bank-臺企
Bank-華南
Bank-郵局
投資
暫付款
零用金
扣繳
2-Card-華銀卡
Card-台新卡
暫收款
4-Salary
出差旅費
信用卡紅利
利息
中獎
二手
投資收益
其他收入
51-食-早餐
-午餐
-晚餐
-零食
-其他食
52-衣-衣服
-褲子
-鞋襪
-配件
-剪髮
-其他衣
53-住-水費
-電費
-瓦斯
-電話
-管理費
-手機
-網路
-手續費
-大賣場
-其他住
54-行-汽車-停車
-洗車
-加油
-保養
-修理
-稅捐
-汽保
-回數票
-捷運
-公車
-計程車
-火車
-飛機
-其他行
55-育-書報
-電腦-軟體
-硬體
-文具
-補習
-其他育
56-樂-漫畫
-唱歌
-電影
-其他樂
57-醫藥(有憑證)
58-醫藥(無憑證)
59-家人借支
60-紅白包
61-投資手續
62-投資損失
63-綜所稅
64-保險
65-捐助

3.資料庫架構
DataBase - 2007 - Account.db
- Journal.db
- Ledger - 1000 - 1001.db
|
1xxx.db

- 2000 - 2001.db
|
2xxx.db

- 3000 - 3001.db
|
3xxx.db

- 4000 - 4001.db
|
4xxx.db

- 5000 - 5001.db
|
5xxx.db

.db的第一個位移量會擺各月份第一筆資料的索引...以加速查詢

4.Account資料結構

typedef unsigned int CASHUNIT;
#define NOTEMAX 100

struct SEntry
{
//類型
char chType;
//科目編號
int iNumber;
//金額
CASHUNIT Price;
//統一發票號碼
int iInvoice;
//摘要針對各科目
char szNote[NOTEMAX+1];
};

5.Journal資料結構

6.Ledger資料結構

7.功能
a.編製傳票(複合分錄)
b.日記帳
c.分類帳
d.資產負債表
e.損益表
f.統一發票對獎
g.餘額分析
h.預算分析

8.UI介面

9.判斷複合分錄

比較有可能為以下兩種:
a.
Debit Asset
Credit Revenue (收入發生)
Credit Liability (借錢之類)
Credit Asset (轉帳交易)
b.
Debit Expense
Credit Asset (以資產支付費用)
Credit Liability (以負債支付費用)

原則上以上述方法評斷各交易單科科目實際金額
判斷後再跳出確認視窗讓使用者檢查

10.分錄之新增、刪除、修改

新增:
刪除:
修改:

11.科目之新增、刪除、修改

新增:
刪除:
修改:

2009年8月6日 星期四

EasyPMT 備忘

基本功能:
開立傳票
日記帳
明細分類帳
資產負債表
損益表
同期比較
預算

進階功能:
圖表分析

記帳習慣改變:
要做預付科目
(所得稅、紅包、燃料稅、牌照稅、保險費)

算了配合重要性原則
直接作費用入帳
雖然這使得月跟月之間的比較失去意義
但損益本來就應該跟同期比較才對
如果我會計沒還給老師的話 ... XD

考慮事項:
資料庫正規化
傳票用單一科目還是複合科目
(需做借貸平衡的檢查、會計科目輸入的正確性)

2009年8月4日 星期二

逆水行舟

前幾天在 PTT 上,看到有人在問何謂程式很強?
結果 tinlans 就推文回答:
當你不會有這種疑問的時候,大概就算是很強了吧

那時我的腦袋中就閃過
長空這個號稱天下無敵的男人

當強者力量邁入終極的境界時
漫畫旁白是這樣形容他的:
現在的他只需要思考
其力量便能夠不斷的進步下去

雖然現在的我也不會問這種問題 ... XD
但還是有著不小的感觸

去年這一年間
大概是我程式力量最退步的時候


Spec 的規定就是這樣
架構的東西也是 BSP 所定義好的
如果說負責的是 driver 可能還會比較有新意一點

我最引以為傲的創造及思考能力都沒用到
Win32 API 不用也漸漸生疏

果然學如逆水行舟呀~

2009年8月3日 星期一

EasyPMT

PMT 是 Palm 的一個很有名的記帳軟體
從我開始使用 Palm 的 PDA 就用到現在
算一算也快七年了吧

可能是因為唸會計的關係
還蠻能接受每天記帳的習慣

算一算我的 Treo 600 也用了五年了
手機+週邊+軟體+兩顆電池+殺肉機(換Panel module用)
大概花了 32000
換算下來一天大概是 17.53 元

這個價格划不划算見人見智
但我蠻有信心可以再用一年(買殺肉機換 Panel 都快兩年了)
不過至少要再買顆電池備用

但是一年後呢?
Palm 的沒落已經是一個既定事實
PMT 這套軟體如果失去了硬體的環境
也失去了他的功用

所以 EasyPMT 將會是下一個我要開發的軟體
初期目標先做到跟 PMT 一樣就好

不過未能確定之後主要的工作環境
故這一次我要做點不一樣的嘗試
把 UI 層切開
中間多用一層 interface 包住
並用不同的 GUI 工具
分別做出 Windows and Linux 的版本


甚至直接做成 Web 的介面
只要加上適當的公私鑰
便可以做到到那裡都能記帳的功能
(資料的私密性要考慮的還蠻多的)

總之藉由這個軟體的開發
我要把我軟體工程的能力
再往上提升一個層次

這也是我對自己的一個期許

2009年8月2日 星期日

生命的意義

這兩天跟我姊狂看日劇
BOSS、VOICE是我們的首要目標

BOSS雖然很好看
(竹野內豐...帥、戶田惠梨香...正、天海佑希...有女人的魅力)
但還是比不上VOICE給我的衝擊

人總有一天會死
進入醫大的第四年冬天
我們努力從死亡中尋找著微弱的聲音
我們邂逅了拯救已逝生命的醫學
法醫的職責就是傾聽亡者最後的聲音

雖然蠻多人批評
把法醫學演的像偵探劇

但我認為能夠代替亡者傳達來不及表達的情感
不儘滿足了亡者最後的願望
也撫平了親友內心的那份悲痛
其實是很有意義的一件事

小當家曾說過:
料理是要帶給人們幸福的

如果自己的工作也是如此該有多好?

希望將來的某一天
我寫的程式也能帶給人們幸福
也許這也是我一直想找尋的目標