2015年12月27日 星期日

Pause script in TCL

proc anykey {{msg "Hit any key: "}} {
    set stty_settings [exec stty -g]
    exec stty raw -echo
    puts -nonewline $msg
    flush stdout
    read stdin 1
    exec stty $stty_settings
    puts ""
}
puts 1
anykey
puts 2


Another suggestion:
proc pause {{message "Hit Enter to continue ==> "}} {
    puts -nonewline $message
    flush stdout
    gets stdin
}

pause "Hurry, hit enter: "; # Sample usage 1
pause;                      # Sample usage 2, use default message

2015年12月16日 星期三

GOOGLEFINANCE

GOOGLEFINANCE

從 Google 財經服務擷取有價證券的最新或過往資訊。

用法範例

GOOGLEFINANCE("GOOG", "price", DATE(2014,1,1), DATE(2014,12,31), "DAILY")
GOOGLEFINANCE("GOOG","price",TODAY()-30,TODAY())
GOOGLEFINANCE(A2,A3)

語法

GOOGLEFINANCE(ticker, [attribute], [start_date], [num_days|end_date], [interval])
  • ticker - 要查詢的有價證券股票代號。
  • attribute - [ OPTIONAL - "price" by default ] - 要從 Google 財經服務擷取的 ticker 相關屬性。
    • attribute 指的是下列即時資料:
      • "price" - 即時報價,最多延遲 20 分鐘。
      • "priceopen" - 股市開盤時的價格。
      • "high" - 今天的最高價。
      • "low" - 今天的最低價。
      • "volume" - 今天的股市交易量。
      • "marketcap" - 股票的市場價值。
      • "tradetime" - 最後成交時間。
      • "datadelay" - 即時資料延遲的時間。
      • "volumeavg" - 平均每日交易量。
      • "pe" - 每股價格/每股盈餘比例。
      • "eps" - 每一股的盈餘。
      • "high52" - 52 週期間的最高價。
      • "low52" - 52 週期間的最低價。
      • "change" - 自上一個交易日收盤以來的價格變化。
      • "beta" - 貝他值。
      • "changepct" - 自上一個交易日收盤以來的價格變化百分比。
      • "closeyest" - 前一天的收盤價。
      • "shares" - 在外流通的股數。
      • "currency" - 有價證券的計價貨幣單位。
    • attribute 指的是下列歷史資料:
      • "open" - 指定日期的開盤價。
      • "close" - 指定日期的收盤價。
      • "high" - 指定日期的最高價。
      • "low" - 指定日期的最低價。
      • "volume" - 指定日期的成交量。
      • "all" - 以上皆是。
    • attribute 指的是下列共同基金資料:
      • "closeyest" - 前一天的收盤價。
      • "date" - 所回報的基金淨值所屬日期。
      • "returnytd" - 年初至今報酬率。
      • "netassets" - 淨資產。
      • "change" - 最近回報基金淨值與上一筆基金淨值的變化。
      • "changepct" - 基金淨值的變化百分比。
      • "yieldpct" - 配息率、前 12 個月收入分配總額 (股息與固定收益利息) 以及基金淨值收益除以上個月的基金淨值。
      • "returnday" - 單日總計報酬率。
      • "return1" - 單週總計報酬率。
      • "return4" - 4 週總計報酬率。
      • "return13" - 13 週總計報酬率。
      • "return52" - 52 週 (1 年) 總計報酬率。
      • "return156" - 156 週 (3 年) 總計報酬率。
      • "return260" - 260 週 (5 年) 總計報酬率。
      • "incomedividend" - 最近的現金配息金額。
      • "incomedividenddate" - 最近的現金配息日期。
      • "capitalgain" - 最近的資本利得分配金額。
      • "morningstarrating" - 晨星的「星級」評比。
      • "expenseratio" - 基金的支出比率。
  • start_date - [ OPTIONAL ] - 擷取歷史資料的開始日期。
    • 如果您指定了 start_date,但是沒有指定 end_date|num_days, 系統就只會傳回一天的資料。
  • end_date|num_days - [ OPTIONAL ] - 擷取歷史資料的結束日期,或是從 start_date 算起要傳回幾天份的資料。
  • interval - [ OPTIONAL ] - 資料的傳回頻率,可使用的值包括「DAILY」或「WEEKLY」。
    • interval 也可以用 1 或 7 的方式來指定,但不能使用其他數值。

注意事項

  • 所有參數都必須括在英文引號中,或是採取內含文字的儲存格參照內容, 除非以數字形式指定 interval,而且以天數指定 end_date|num_days
  • 系統會以一個儲存格傳回即時結果值。所傳回的歷史資料就算只有一天,也會採取展開的陣列形式,並加上欄標題。
  • 如有指定任何日期參數,要求會視為針對歷史資料,因此只允許歷史資料的屬性。
  • GOOGLEFINANCE 只有英文版,而且不支援大部分國家的證券交易資料。

示例

從 Google 財經擷取股市資訊。
以下是常見屬性的清單。
從 Google 財經服務根據指定日期擷取歷史股市資訊。
以下是共同基金常見屬性的清單。
利用 GoogleFinance 傳回的資料擷取結果在儲存格中製作圖表,顯示過去 30 天內的貨幣匯兌趨勢。

2015年12月14日 星期一

利用seconds自動更動檔名 執行regression run

在TCL script中:
set Cdir Test
create $Cdir
.
.
.
set t [clock seconds]
exec mv $Cdir ${Cdir}_${t}

注: clock seconds會以整數的法式回傳由1970年到目前為止經過的秒數; 最後兩行會將directory更名  並且不會重覆
Test --> Test_1449568829

2015年11月22日 星期日

星巴克

hot or iced : 熱的或冰的。
what size of beverages you like—tall, which is 12 ounces; grande, which is 16 ounces; and venti, which is 20 ounces
tall 中杯,那是十二盎司(約350c.c.);grande 大杯,那是16盎司(約480c.c.);venti還有特大杯,那是二十盎司(約600c.c.)。
下一步全都是要客製化您的飲料,杯子側邊的格子可以幫你做到。第一格是低咖啡因,你可以選擇你想要幾份的低咖啡因咖啡,或是你只想要一般的咖啡。
下一個格子是份數的格子。你可以決定你想要幾份的濃縮咖啡在裡頭。
接下來是糖漿的格子。我們有十五種不同的糖漿。之後,你可以選擇你自己的牛奶種類。我們有五個不同的種類。
最後一件我們需要知道的事是你想要哪種飲料,拿鐵、摩卡、還是卡布奇諾。
那些是我幫助你們快速又有效率地點飲料的小技巧,並讓你快快上路。

The next step is all about customizing your drink, and the boxes on the side of the cup help you do that. The first box is decaf, and you can choose how many shots you like the decaf, or if you just like it regular.
The next box is the shots box. And you can decide how many shots of espresso you want in it.
Next is syrup box. We have 15 different kinds of syrups. After that, you can choose your kind of milk. We have five different kinds.
And the last thing we need to know is what kind of drink you like, a latte, a mocha, a cappuccino.
And those are my tips to help you order your drink quickly and efficiently, and get you on your way.

關於上班的英文

朝九晚五上班族: nine-to-five worker
打卡進公司: clock in;打卡下班: clock out
彈性工時員工: clock字尾再加上less,就有了clockless worker一詞
我們來看看英文例句的用法:
As a graphic designer, I can work anywhere and anytime with my laptop. It’s fruitless to trap me in the office when I’m running out of creativity.
(身為一個平面設計師,我隨時隨地都可用我的筆電工作。若在我創意枯竭之時硬要把我留在辦公室,也只是反效果。)

However, the downside of being a clockless worker is missing the bustle of my office. I’m usually out of sync with my coworkers because of my odd hours.
(然而,彈性工時也有缺點,我想念辦公室裡和大家一起的忙碌氣氛。因為我的特殊工作時間,我常常都和同事進公司的時段錯開。)
office politics「辦公室政治」
英文裡用extend(延伸)來描述「下班後繼日工作」:day-extender

週末加班的員工:weekend-extender例句中的用法:Day-extenders might have to spend one to two hours working at home in the evenings. Sometimes, they may even become weekend-extenders!(回家後再繼續工作的人下班後,可能是每天晚上得撥出一到兩小時來工作。甚至還有可能連週末都在家裡加班!)

資料來源: http://blog.udn.com/corecorner/5776343

2015年11月19日 星期四

sed

搜尋並取代
sed -i 's/mis_flag=0/mis_flag=1/g' AO22SDFQM2LPA.cir

刪除空白列
sed -i '/^[ ]*$/d' ABC.txt
               ^
刪除包含字串的整行
sed -i '/字串/d' ABC.txt

在第一行後面加入一個字串( 此例中為 0 )
sed -i '1s/$/ 0/' VOLTAGE.*

在搜尋到的字串前/後面加入一行
sed -i '/字串/i要加入的句子' ABC.txt
sed -i '/字串/a要加入的句子' ABC.txt

sed -e '1,10 s/w1/& w2/g' file
把1到10內的w1字串替換成w1 w2字串。


尋找某特定字串並在行首加上#
sed -i '/example_string/s/^/#/' file.txt
這個指令的作用如下:
1. /example_string/:搜尋包含 "example_string" 的行。
2. s/^/#/:在符合條件的行的行首 (^ 代表行首) 加上 #。
3. -i:直接在文件中修改,無需產生新文件。
這樣就會在所有包含 "example_string" 的行前加上 #。

2015年10月27日 星期二

格言

  • 愚昧無知是一切痛苦之源。8月23日名言
  • 受苦的人,沒有悲觀的權利。一個受苦的人,如果悲觀了,就沒有了面對現實的勇氣,沒有了與苦難抗爭的力量,結果是他將受到更大的苦。
  • 祇有經歷過地獄磨難的人,才有建造天堂的力量。
  • 一段不幸的婚姻不是缺乏愛,而是缺乏友誼。
  • 沒有事實,祇有詮釋。
  • 常常談論自己的人,往往祇是為了隱藏自己。(《善惡的彼岸》-169)
  • 完全不談自己是一種甚為高貴的虛偽。(《人性,太人性的》)
  • 當心!他一沉思,就立即準備好了一個謊言。(一譯「他自省:他隨時準備要說謊。」)(《歡悅的智慧》-157)
  • 那不能殺死我的,使我更堅強。Was mich nicht umbringt, macht mich stärker.4月1日名言(《偶像的黃昏》)
  • 一個人知道自己為什麼而活,就可以忍受任何一種生活。
  • 道德有兩種:有獨立心而勇敢者曰貴族道德;謙遜而服從者曰奴隸道德。
  • 道德使人愚昧。
  • 高貴的靈魂,是自己尊敬自己。
  • 生活是一面鏡子,我們努力追求的第一件事,就是從中辨認出自己。
  • 最危險的健忘-剛開始他們忘記去愛別人,最後在他身上再也找不到值得去愛的地方了。(《曙光》-401)
  • 頑固不化比謊言更是真理的敵人。
  • 要破壞一件事,最刁鑽的辦法是:故意用歪理為這事辯護。
  • 「你要到女人那裡去嗎?別忘記帶上鞭子。」(《查拉圖斯特拉如是說》由年老的婦人所說,並不是尼采所說,老女人對年輕女人是常常心存嫉妒,同性相斥的)
  • 所有的殘忍都源於軟弱
  • 善良的天性比機智更令人愉快-約瑟夫阿迪生
  • 一九二八年,英國經濟學家凱因斯(JohnMaynardKeynes)說︰「自創世紀以來,人類將首度面對一個真正、永恆的問題--如何利用工作以外的自由與閒暇,過著喜悅、智慧與美好的生活。」這位經濟大師預測,金錢問題將會消失,代之而起的是這項挑戰︰如何睿智的善用新發現的閒暇,追求美好生活。

2015年10月12日 星期一

deliver linux variable to TCL

C shell script:
### c2tcl.csh ###

#!/bin/csh -f
set names = "0 1"
foreach name ($names)
    echo $name
    echo
    setenv abc $name
    liberate t.tcl | tee t.log
    mv t.log t_$name.log
end

TCL script:
### t.tcl ###
reset_defaults -version 16.1.2
set_var write_verilog_without_err_primitives $env(abc)
puts "$env(abc)"
printvars

執行:
source c2tcl.csh




環境變數(environment variables)
 TCL提供了一個事先就定義好的全域環境變數陣列,這個陣列叫做env。讀者可以將環境變數的名稱當成元素名稱來使用。換句話說,讀者可以使用變數名稱當做索引存取讀者想要存取的變數。下面的命令會印出PATH環境變數的內容:

puts "$env(PATH)"

讀者可以操作一般的變數的方式來操作環境變數陣列。舉例來說,讀者可以使用下面的命令加入一個新的目錄到PATH中:

set env(PATH): "$env(PATH):/usr/sbin"

這裡需要注意的是,環境變數的任何修改都不會影響到原始行程(舉例來說,讀者用來啟動TCL script的shell就是TCL script原始行程)的環境變數的內容。任何使用exec命令所建立出來的script行程,將會繼承修改過後的所有環境變數。









source $::env(golden_area)/common_settings/common_settings.tcl

2015年10月11日 星期日

散戶勝經-書摘

1. 選擇一隻好股票: 有資產 產品是業界第一名  老闆專心本業的好公司
                                  在公司業績不好或市場超跌時買進
2. 投資大師巴菲特說:不要把雞蛋放在一個籃子裡
    馬克吐溫說:把所有的雞蛋放在同一個籃子裡  然後小心的看好它
3. 選擇股票的時候第一個考量不是會不會賺  而是這支股票應該不會讓我賠
4. 郭大俠選股:
1. 只選上市股票,數千支變900支

管理越嚴格、資料越透明,這個企業的穩定性及安全性就越高,政府當局對上市公司有較嚴格的規定,即使規定嚴格,三不五時還發生倒閉掏空事件,管理不完善的上櫃或未上市公司,情況就更複雜。散戶投資股票,安全永遠是第一考量,所以我只選擇900家上市公司購買。

2. 只選擇明年有董監事改選的股票,900支變300支

董堅事三年一選,所以每年都有1/3的股票會改選,明年會改選,就表示改選前董監事不敢隨便賣股票,市場派也是虎視眈眈,股價當然易漲難跌。

3. 把不容易發生董監事改選行情的公司淘汰,300支變20支

下面這些公司,董監改選行情發生的機會比較低,不需要去傷腦筋研究。

* 曾經發生過經營權爭奪的公司,因為股權通常較穩定,故再發生的機會不大。

* 大股東是政府機關,民不與官鬥,故不易有改選行情。

* 家族企業,又用關係企業交叉持股,這種萬年公司最好少碰為妙。

* 公司資產欠佳,形象欠佳,本業獲利欠佳。

* 放棄五元以下的雞蛋水餃股。

* 景氣及股價正位於高檔,沒有被偷襲的空間。

4. 20支選5支

選 出來的20支都是不錯的公司,我們真正要做的功課,就是努力仔細的研究這20支股票。把他們過去的新聞及各種報表找出來,然後逐項分析,有疑慮的就放棄, 最後找出最佳的五家公司。這五家公司都必須是進可攻退可守,有漲100%的機會,萬一碰到不景氣,也有比定存好的現金股利可領,最重要的是當然也決不會倒 閉。

5. 最後的選擇不是由人決定。

5 支選2支就沒有什麼技術問題,當你下單買到其中的2支後,你就會自然特別關心他們,就好像我的老丈母娘看女婿一樣,越看是越中意。這時股價如果下跌,對你 來說不是損失,而是撿便宜的好機會。怕就怕你一買就漲,股價迅速一飛沖天,由於持股尚未建立,你也不願意追漲,今年的金雞母大概就飛掉了。

如 何選擇一支好股票,是股票投資由理論進入實務的開始,也是將來能否獲利的關鍵。雖然投資股票的獲利率通常較其他投資工具要高,但對於大部份不喜歡做功課的 散戶來說,虧損的風險相對反而更大。如果你已經盡了力,但還是選不出能獲利的好股票,不妨改以定存或債券來理財,也是一種不錯的投資方式,畢竟股票投資千 變萬化又風險難測,也不是所有人都適合的理財方法。






































5. 融卷大增時開始分批賣  融資斷頭時開始分批買

2015年10月7日 星期三

Analysis passed rate for comparison results (compare_liberty)

How to use: perl failed_analysis.pl cl_NCX_vs_SIS_cycle_1_timing.rpt

Perl Script:
#!/usr/local/bin/perl
$FILE_NAME = $ARGV[0];

$pass_count = 0;
$fail_count = 0;

open(SearchFile,"<$FILE_NAME");
while(<SearchFile>){
chop $_;
@ary=split(" ",$_);
        if ($ary[0] eq "Cell:") {
        }
        if ($ary[0] eq "Table:") {
                $type = $ary[1] ;}
        if ($ary[0] eq "Slew" && $ary[1] eq "Load") {
                $sweep_count = 0;
                }
## Count for Slew
if ($type eq "slew") {
        if ($sweep_count > 1 && $sweep_count < 51) {
                if ($ary[7] eq "pass") {
                        $slew_pass_count[$sweep_count-1] ++; }
                if ($ary[7] eq "fail") {
                        $slew_fail_count[$sweep_count-1] ++; }
                }
}
## Count for Delay
if ($type eq "delay") {
        if ($sweep_count > 1 && $sweep_count < 51) {
                if ($ary[7] eq "pass") {
                        $delay_pass_count[$sweep_count-1] ++; }
                if ($ary[7] eq "fail") {
                        $delay_fail_count[$sweep_count-1] ++; }
                }
}
## Count for slew + delay
        if ($sweep_count > 1 && $sweep_count < 51) {
                if ($ary[7] eq "pass") {
                        #print "sweep_count is $sweep_count";
                        $pass_count[$sweep_count-1] ++; }
                if ($ary[7] eq "fail") {
                        #print "sweep_count is $sweep_count";
                        $fail_count[$sweep_count-1] ++; }
}
$sweep_count ++ ;
}

## print out analysis distribution results ##
## Slew
for ($i=1; $i<50; $i++) {
        $slew_pass_rate[$i] = (($slew_pass_count[$i] / ($slew_pass_count[$i] + $slew_fail_count[$i])) * 100) ;
                        }
print "Slew passed rate table \n ******************** \n";

for ($j=1; $j<8; $j++) {
        for ($k=1; $k<8; $k++) {
                $slew_dig_0=sprintf("%.2f",$slew_pass_rate[($j-1)*7+$k]);
                $slew_dig=$slew_dig_0.'%';
                printf "%-10s" , $slew_dig;}
                print "\n";}
## Delay
for ($i=1; $i<50; $i++) {
        $delay_pass_rate[$i] = (($delay_pass_count[$i] / ($delay_pass_count[$i] + $delay_fail_count[$i])) * 100) ;
                        }
print "\n \n Delay passed rate table \n ******************** \n";
for ($j=1; $j<8; $j++) {
        for ($k=1; $k<8; $k++) {
                $delay_dig_0=sprintf("%.2f",$delay_pass_rate[($j-1)*7+$k]);
                $delay_dig=$delay_dig_0.'%';
                printf "%-10s" , $delay_dig;}
                print "\n";}
## Total
for ($i=1; $i<50; $i++) {
        $pass_rate[$i] = (($pass_count[$i] / ($pass_count[$i] + $fail_count[$i])) * 100) ;
                        }
print "\n \n Slew+Delay passed rate table \n ******************** \n";
for ($j=1; $j<8; $j++) {
        for ($k=1; $k<8; $k++) {
                $total_dig_0=sprintf("%.2f",$pass_rate[($j-1)*7+$k]);
                $total_dig=$total_dig_0.'%';
                printf "%-10s" , $total_dig;}
                print "\n";}


Results:
amsoptr24:/remote/amscae35/chihwang/MTK>perl failed_analysis.pl cl_NCX_vs_SIS_cycle_1_timing.rpt
Slew passed rate table
 ********************
100.00%   100.00%   100.00%   100.00%   100.00%   100.00%   100.00%
100.00%   100.00%   100.00%   100.00%   100.00%   100.00%   100.00%
100.00%   100.00%   100.00%   100.00%   98.76%    97.72%    100.00%
100.00%   100.00%   100.00%   100.00%   100.00%   99.17%    98.96%  
100.00%   100.00%   100.00%   100.00%   100.00%   99.79%    97.52%  
100.00%   100.00%   100.00%   100.00%   100.00%   100.00%   98.34%  
99.59%    99.79%    100.00%   100.00%   100.00%   100.00%   99.17%  


 Delay passed rate table
 ********************
99.59%    99.59%    99.59%    99.59%    99.59%    99.59%    86.54%  
99.59%    99.59%    99.59%    99.59%    99.59%    99.59%    86.54%  
99.59%    99.59%    99.59%    99.59%    97.93%    99.59%    86.54%  
99.59%    99.59%    99.59%    99.59%    99.59%    99.59%    85.30%  
99.59%    99.59%    99.59%    99.59%    99.59%    100.00%   85.71%  
100.00%   100.00%   100.00%   100.00%   100.00%   100.00%   84.89%  
100.00%   98.34%    100.00%   100.00%   100.00%   100.00%   85.06%  


 Slew+Delay passed rate table
 ********************
99.79%    99.79%    99.79%    99.79%    99.79%    99.79%    93.27%  
99.79%    99.79%    99.79%    99.79%    99.79%    99.79%    93.27%  
99.79%    99.79%    99.79%    99.79%    98.34%    98.65%    93.27%  
99.79%    99.79%    99.79%    99.79%    99.79%    99.38%    92.13%  
99.79%    99.79%    99.79%    99.79%    99.79%    99.90%    91.61%  
100.00%   100.00%   100.00%   100.00%   100.00%   100.00%   91.61%  
99.79%    99.07%    100.00%   100.00%   100.00%   100.00%   92.12%    

2015年10月2日 星期五

grep and sum up SIS+ChildTime of report_sim_stat by awk

grep ' statistical_setup__' timing_report.txt | awk -f cal.awk

cal.awk:
BEGIN {
sum = 0;
}
{
printf("%f\n", $2+$3);
sum = sum + $2 + $3;
}
END {
printf("\nSum = %f\n", sum);
}

2015年9月23日 星期三

detect if file existed then perform some script

#specific library options in side file

if { [file exists add_sco.tcl] == 1} { source add_sco.tcl }

Remove file/dir if existed:
if {[file exists $char_path]} {
  exec rm -rf $char_path

}


2015年9月20日 星期日

Count line number of .data statement

#!/bin/csh -f

set names = 'find . -name 'deck.cir' -print'

foreach name ($names)
    echo $names
    cat $name | sed -n '/^\.data/,/enddata/p' | wc -l
end


2015年9月17日 星期四

environment setting

1. konsole & : pop out an konsole screen

2. gvim:

set hl cursorline

edit/color scheme/desert

3. gvim -o f1 f2 :上下視窗
    gvim -O f1 f2 : 左右視窗

split :
vsplit

set scrollbind
set noscrollbind

4. backspace 一次刪掉整個word的問題
stty werase ^W  (^W要按ctrl+v+w)


2015年5月12日 星期二

List all the type of MOS in netlists

grep -i "^M" netlist.cdl | cut -d " " -f 6 | sort -u


 


for pode:
grep -i "^XX" netlist.cdl | cut -d " " -f 5 | sort -u


2015年1月22日 星期四

change bus symbol

sed -iold -r "s/<([0-9]+)>/__\1__" mal4vrefglobal.spi


This will change all cases of <N+> to __N+__, (the double-underscore being an old AMD standard that was built in to the netlister as an option).


 


標籤