Friday, August 31, 2012

[nosql] Cassandra Thrift insert Super Column

This post will show how to insert Super Column to Cassandra by using Thrift API.

At first, we create a Keyspace named "Sample" and Column Family named "SCTest" via Cassandra-cli.

Thrift01

As default , column type was "Standard" , so we need to assign column type to "Super".

then , we using Thrift to insert Super Column to DB , here is the sample code. Following code almost same as Thrift Examples, I only change some place to insert super column.

Monday, August 27, 2012

[C#] How to write a Windows Service with Timer and EventLog

[C#]如何寫一個有定時器與記錄功能的Windows服務


這次來分享是如何寫Service,在一些場合,常常看到有不少事情是使用console去執行的,但是用Console有個缺點就是若沒有特別去防護,那遇到重複開啟或是不小心關掉的時候,就會很麻煩,以前工作上就一直想把公司用的console程式都改成Service的方式運作,但是一直沒有時間,只好作罷。

離題了,直接來進入主題,要寫一個新的Service,先用Visual Studio新增一個 Windows 服務的專案。
Service01

Wednesday, August 22, 2012

[ASP.NET] 如何 Precompile 網站

.NET Framework出到2.0之後,多了一個Precompile的功能,可以讓你在將程式發布至正式環境前,先把網站的程式編譯過,詳細介紹可以看這篇"ASP.NET Precompilation Overview",先做Precompile除了可以避免頁面第一次使用時的編譯時間,也可提前看到編譯時的錯誤,還有可以避免把source code上傳到正式環境上,除此之外還有一些安全上的優點,而這篇主要是說如何去做precompile,所以我就不多做其他的介紹了。

其實如何去做 Procompile ,MSDN上的這篇"How to: Precompile ASP.NET Web Sites for Deployment"也有介紹,不過直接照著上面做有很大的機會不會成功,我也是試了好幾次才試出方法,所以就順便記下來當備忘錄了。

Precompile
首先,在IIS中找個地方開個虛擬目錄,設成應用程式,像是上圖那樣,設定大致上設一設就好,測試設定失敗也沒差,反正接下來的方法用不太到,只要記得設成應用程式就好。

然後開出command line,建議用administrator權限比較穩,然後到你放.NET Framework的目錄下,一般來說會在
%windir%\Microsoft.NET\Framework\[version]
裡面(版本請依照你網站程式對應的Framework版本),然後下這行指令
aspnet_compiler -v /LM/W3SVC/3/Root/TestSite1 -p d:\diedproj\testsite1\testsite1 d:\temp
這邊要稍微解釋一下上色的部分

3 : 這是在IIS中,你建立應用程式在IIS metabase中在第幾個站台下,像我是第三個,就要寫"3"。
TestSite1 : 應用程式的名稱,看你設什麼就照打。
d:\diedproj\testsite1\testsite1 : 網站程式source code的目錄。
d:\temp : Precompile 後要放置到的目錄。

基本上這樣就完成了,如果有問題可以查查是不是目錄有指錯還是沒有建之類的。


其實只要把設成應用程式的虛擬目錄設定好,應該就可以只用 -v 這個參數就完成 Precompile 的工作,但是我在Win7的環境下試了很久都沒用,研究之後才發現 aspnet_compiler.exe 沒那麼聰明去找到我設定的應用程式,只好直接指定,在這之前我試了很多寫法都不會過XD

Precompile2

以上做個紀錄,收工。

Moon 20120821

Moon_20120821

昨天去劍潭山的時候,順便拍了月亮,不過因為一樣是用24-105拍的,所以跟之前拍的沒啥差別,期待有長鏡頭可以玩啊!!

劍潭山初訪

有人有發現我拍到UFO嗎

最近大概是低壓的關係,天氣都很好,下班途中常常看著好天氣嘆息沒法拍,今天出門上班就乾脆的帶了相機跟腳架,打算下班後可以拍照。

工作進度完成後,時間也差不多了,於是東西拿著就下班去,今天打算去沒去過的劍潭山上拍照,聽說大稻埕煙火在這邊看很不錯,所以報紙上有看到台北市政府推薦此處的觀景台,後來我google了一下發現應該是不錯的地方,於是就過來了。

Thursday, August 16, 2012

[TroubleShooting] IIS run out of memory

IISOOM_1

最近在測試效能時,遇到了IIS把系統記憶體吃光,結果回傳Out Of Memory Exception,害我壓力測試就中斷了,開出Performance來看,就看到開始測試後,CPU還好,但是記憶體用量直線上升,很快的w3wp.exe就要把系統記憶體吃光光。

等到記憶體被吃光後,IIS就開始吃不太下request,然後不是沒有回應,就是回你錯誤,運氣好的話這時候就可以看到Out of Memory錯誤了XD

Wednesday, August 15, 2012

中油胡亂漲價,還我錢來

News20120814

中油在13號的時候,又大漲了將近一塊的油價,我一直有在關心油價,也會不定期去update中油油價與國際油價的比較,這次中油大漲時,我看到了這篇新聞「台灣中油調高下周汽柴油價格各0.8元及0.9元 92無鉛每公升33.9元」,剛好可以拿來做計算油價用,於是就生出了這篇。

從新聞中我們可以得到幾點資訊
  1. 本周調價指標7D3B周均價為每桶108.23美元。
  2. 101年四月二號95無鉛零售價為35.5元,中油尚吸收2.2元,所以實際應為37.7元。
  3. 8月13日95無鉛零售價將調為35.4元。
OK 開始計算,汽柴油浮動油價調整機制的調價指標係以70%杜拜+30%布蘭特的週均價為基準再算上匯率去計算,所以我先從下列三個網站取得101/04/02所需的資料,也就是3/26~3/30當周的油價與匯率。

Bloomberg Arabian Gulf Dubai Fateh Crude Oil Spot Price 杜拜
Brent Crude Oil Spot Price 布蘭特
台灣銀行美金歷史匯率

得出的資料如下
  1. 101/04/02 調價指標為 122.764 (3/26~3/30 Dubai avg=122.05 , Brent avg=124.43 , 7D3B=122.764)
  2. 101/04/02 周均匯率為 29.509 (3/26~3/30 avg)
  3. 然後因為新聞沒有寫本周匯率均價,所以我就算了8/12可用的周均匯率(8/6~8/10)
  4. 101/08/12 周均匯率為 29.891
如果中油的調價沒有亂調,是符合國際油價走勢,那麼這些調價指標與中油油價的漲跌幅比例應該會是正比的,也就是下面這個算式應該成立的

(0812調價指標x匯率) / (0402調價指標x匯率) = (0812九五油價) / (0412九五油價+補貼)

所以

0812九五油價 = (0412九五油價+補貼) * (0812調價指標x匯率) / (0402調價指標x匯率)

帶入數字

0812九五油價 = (35.5+2.2) * (108.23*29.891) / (122.764*29.509) = 33.6669621145952

是的,你沒看錯,按照國際油價,現在的油價應該是33.67元才對,怎麼會是中油所說的35.4元呢 ? 這中間的每公升快兩元都被誰賺去了 ?

所以本文最前面的新聞中,有說到媒體質疑中油亂漲價,我想是很合理的,因為這些數據都是可以查的到的,但是中油油價與國際油價差距如此之多,每次都大漲小跌,不是胡亂漲價,就只剩油價黑洞能解釋了。

中油胡亂漲價,還我錢來 !!!



Saturday, August 11, 2012

[選前選後兩樣情] ECFA與石斑魚業

雖然馬英九早表示過選舉只是說說而已,但是還是很多人會被騙,接下來就來看個例子吧。

這是去年選前的新聞,馬座談 石斑魚業:擔心馬沒連任,魚不銷大陸一定「死」

節錄一段話
戴昆財說,感謝馬總統推動兩岸簽ECFA,不但提升石斑魚價格,也讓石斑魚產業可以永續。現在石斑業者很擔心馬總統無法連任,大陸會拒絕石斑魚輸入,養殖龍膽石斑的成本1公頃要新台幣1000萬元,青斑600萬元,不銷大陸一定「死」。

News20120811_1

Thursday, August 9, 2012

[台北] Solo Pasta - 古典波隆那肉醬與特寬雞蛋麵

IMG_8597

其實我很久沒有特地找家店去吃了,會來吃Solo Pasta是因為剛好在趨勢看雜誌打發時間,然後翻到這邊的介紹,看起來有張照片打到我的點,google一下地址在安和路,也不遠,所以事情結束就跑來吃了。

Solo Pasta
地址:台北市大安區安和路一段29-1號
電話:(02)2775-3645
營業時間有點複雜,可以參考Solo Pasta Facebook Info,基本上一到四只開中午,五六日才有開到晚上。

Tuesday, August 7, 2012

Sikuli demo - 取得網頁資料

sikuli logo

Sikuli這東西剛出現時,引起網路上一陣喧然大波,至少那時候我看的不少網站都有介紹到這個算是革命性的軟體,簡單來說,Sikuli就是個可以辨識圖片的automate工具,能辨識圖片就表示看的懂螢幕,所以你跟畫面上的互動Sikuli都能做得到,詳細介紹可以去看Sikuli官網,我這就不多說了。

之前用到Sikuli script我都是玩玩,直到最近才有用在工作上,累積了不少心得與經驗,但是這東西又有點難分享,實際上我是寫了一個模組化的GUI測試功能,會每天定時的去測試各個瀏覽器對於我們Project的相容性、是否正常,然後整合結果到一封信裡寄出來。但是這些東西因為牽扯到工作,所以沒辦法直接拿來分享,所以就亂做一個取巴哈熱門版面資料的Sikuli script,寫起來不長,就下面的20行。

陳昇 : 既然核廢料沒有害處,就放到總統府就好啦



今天看到昇哥的這段影片,他說他寫了一首新歌"應該是柴油的",在唱歌之前的一大段話,實在是妙語如珠,令人不得不轉。

花點時間看看吧,說的很有趣,很棒XD

Friday, August 3, 2012

[C#] Effective : For vs Foreach

Alought Effective C# Item #11 said : Prefer foreach Loops , but I still saw many test said using For are faster , so , let's test it.

My test code.
public static int[] ArInt = new int[1000]; //2000,4000

        static void Main(string[] args)
        {
            
            var proc = Process.GetCurrentProcess();
            var sTime=proc.TotalProcessorTime;
            for (int i = 0; i < 100000; i++)    //100,000
            {
                DoForEach();
            }
            Console.WriteLine(proc.TotalProcessorTime-sTime);
            Console.WriteLine();
            Console.ReadLine();
        }

        static void DoFor()
        {
            for (int i = 0; i < ArInt.Length; i++)
            {
                DoNothing();
            }
        }

        static void DoForEach()
        {
            foreach (int t in ArInt)
            {
                DoNothing();
            }
        }

        static void DoNothing()        
        {
        }

We give an Integer Array (Size :1000,2000,4000) , For/Foreach loop it do nothing for 100,000 times , get the result and average it. You can check the result on following sheet.


OK, you can see using Foreach Loop are slower than using For Loop over 10% , no big difference , but we are talking about effective , so For Loop win.



Thursday, August 2, 2012

[C#] Using SmtpClient sent email with response via Gmail

最近用Sikuli做了個UI Test,要把結果用email的方式丟出來,找了一下,原本打算做模組化一點,各個不同的測試從Sikuli回傳給Python然後再去處理寄信的問題,後來討論了一下,多花力氣去維護一個語言不太划算(雖然我想玩Python啊),所以決定自己寫個頁面去做寄信的事。

找了一下,.NET有這個SmtpClient 類別可以來寄信,而且sample code也蠻詳細的,所以就來試一下了。

我是直接用需要帳號密碼登入才能用的gmail來寄,一開始的code是長這樣
    private const string Username = "username"; //update your gmail acc/pw here
    private const string Passowrd = "passowrd";

    private string MailBody {
        get
        {
            return string.IsNullOrEmpty(Request.QueryString["result"])
                       ? string.Empty
                       : Request.QueryString["result"];
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (MailBody == string.Empty) return;

        using(var smtpServer = new SmtpClient("smtp.gmail.com", 587)
                             {
                                 EnableSsl = true,
                                 Timeout = 10000,
                                 DeliveryMethod = SmtpDeliveryMethod.Network,
                                 Credentials = new NetworkCredential(Username, Passowrd)
                             })
        {
            smtpServer.Send(new MailMessage("[email protected]", "[email protected]", "test", MailBody)
                                {
                                    BodyEncoding = Encoding.UTF8,
                                    DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure
                                });
        }
   }

Wednesday, August 1, 2012

[C#] Using FileStream StreamWriter avoid IOException

今天在用JMeter對公司的程式作壓力測試,但是我發現錯誤率一直在0.5~1%,這是相當高的錯誤率,所以就來查啦。

從JMeter紀錄來看,錯誤訊息是這樣
System.IO.IOException: 由於另一個處理序正在使用檔案 'filename',所以無法存取該檔案。
System.IO.IOException: The process cannot access the file 'filename' because it is being used by another process.
原因是在程式中會去對實體檔案寫log,平時看不出錯誤,但是壓力測試下就會因為檔案lock住產生 IOException 。

原本的code長的這樣
public static void WriteLog()
      {
            StreamWriter log;

            if (!File.Exists("FilePath"))
            {
                log = new StreamWriter("FilePath");
            }
            else
            {
                log = File.AppendText("FilePath");
            }

            log.WriteLine("Write Something");
            log.Close();
      }

科普教育不能等 - 地表下一千兩百多公里處

news120801

我是很樂見台灣媒體多報導一些國際、科學的新聞,今天看到這篇"全球首見 台教授研究 水壓誘發地震",就覺得是篇不錯的內容,但是看了一下,感覺怪怪的。

節錄第二段
一般地震皆因斷層帶滑動導致,為解開地震之謎,馬國鳳率領的研究團隊六年前起,在台中大坑車籠埔斷層鑽井,於地表下一千兩百多公里處,放置全球唯一設在活動斷層帶下方的地震觀測儀,之後常接收到前所未見、僅有P波(縱波)卻無S波(橫波)地震訊號,她將這種上下震動地震命名為均向地震。

ok,就我所知,人類目前到達的地下最深處應該不超過20公里吧,我找到最深的油井也不到十公里,地表下一千兩百多公里處,都已經到地函去了,google一下"wiki earth"就可以知道這數字一定有問題,記者在寫這篇的時候不會覺得奇怪嗎 ?

所以說,台灣的科普教育真的不能等啊!!



Update :



旅日強者benjemin立刻寫信給馬教授,然後得到了回應!!